[{"data":1,"prerenderedAt":173421},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-01-27-linux-ji-ben-cao-zuo\u002Fch1-zui-chang-yong-de-ji-ben-cao-zuo-geng-xin":3,"wiki-doc-nav":549},{"id":4,"title":5,"body":6,"description":542,"extension":543,"meta":544,"navigation":246,"path":545,"seo":546,"stem":547,"__hash__":548},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":8,"toc":540},"minimark",[9,13,17,25,536],[10,11,5],"h1",{"id":12},"_1-最常用的基本操作更新",[14,15,16],"p",{},"装linux系统教程：",[14,18,19],{},[20,21,22],"a",{"href":22,"rel":23},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24],"nofollow",[26,27,32],"pre",{"className":28,"code":29,"language":30,"meta":31,"style":31},"language-Bash shiki shiki-themes github-light github-dark","#更新相关的知识\n# 更新软件包列表（从服务器获取最新软件信息）\nsudo apt update\n# 升级所有可更新的软件包（不删除旧包）\nsudo apt upgrade\n#更新和升级软件包\nsudo apt update && sudo apt upgrade -y\n#列出可更新的软件包及版本信息\napt list --upgradable\n#彻底升级（处理依赖关系，可能删除旧包）\nsudo apt full-upgrade\n#设置指定版本\nsudo apt install \u003Cpackage_name>=\u003Cversion_number>\n#只安装软件包不升级\nsudo apt install \u003Cpackage_name> --no-upgrade\n#只升级，不存在就不安装\nsudo apt install \u003Cpackage_name> --only-upgrade\n\n#安装指定的软件命令\nsudo apt install \u003Cpackage_name>\n\n#安装多个软件包\nsudo apt install \u003Cpackage_1> \u003Cpackage_2> \u003Cpackage_3>\n\n#更新指定的软件命令\nsudo apt update \u003Cpackage_name>\n\n#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\napt show \u003Cpackage_name>\n\n#删除软件包命令\nsudo apt remove \u003Cpackage_name>\n\n# 清理旧版本和缓存（释放磁盘空间）\nsudo apt autoremove  # 删除不再需要的依赖和库文件\nsudo apt clean       # 清理下载的缓存包\n\n#移除软件包及配置文件\nsudo apt purge \u003Cpackage_name>\n\n#查找软件包命令\nsudo apt search \u003Ckeyword>\n\n#列出所有已安装的包\napt list --installed\n\n#列出所有已安装的包的版本信息\napt list --all-versions\n","Bash","",[33,34,35,44,50,64,70,80,86,111,117,129,135,145,151,189,195,215,221,241,248,254,271,276,282,313,318,324,341,346,352,368,373,379,397,402,408,421,434,439,445,463,468,474,494,499,505,515,520,526],"code",{"__ignoreMap":31},[36,37,40],"span",{"class":38,"line":39},"line",1,[36,41,43],{"class":42},"sJ8bj","#更新相关的知识\n",[36,45,47],{"class":38,"line":46},2,[36,48,49],{"class":42},"# 更新软件包列表（从服务器获取最新软件信息）\n",[36,51,53,57,61],{"class":38,"line":52},3,[36,54,56],{"class":55},"sScJk","sudo",[36,58,60],{"class":59},"sZZnC"," apt",[36,62,63],{"class":59}," update\n",[36,65,67],{"class":38,"line":66},4,[36,68,69],{"class":42},"# 升级所有可更新的软件包（不删除旧包）\n",[36,71,73,75,77],{"class":38,"line":72},5,[36,74,56],{"class":55},[36,76,60],{"class":59},[36,78,79],{"class":59}," upgrade\n",[36,81,83],{"class":38,"line":82},6,[36,84,85],{"class":42},"#更新和升级软件包\n",[36,87,89,91,93,96,100,102,104,107],{"class":38,"line":88},7,[36,90,56],{"class":55},[36,92,60],{"class":59},[36,94,95],{"class":59}," update",[36,97,99],{"class":98},"sVt8B"," && ",[36,101,56],{"class":55},[36,103,60],{"class":59},[36,105,106],{"class":59}," upgrade",[36,108,110],{"class":109},"sj4cs"," -y\n",[36,112,114],{"class":38,"line":113},8,[36,115,116],{"class":42},"#列出可更新的软件包及版本信息\n",[36,118,120,123,126],{"class":38,"line":119},9,[36,121,122],{"class":55},"apt",[36,124,125],{"class":59}," list",[36,127,128],{"class":109}," --upgradable\n",[36,130,132],{"class":38,"line":131},10,[36,133,134],{"class":42},"#彻底升级（处理依赖关系，可能删除旧包）\n",[36,136,138,140,142],{"class":38,"line":137},11,[36,139,56],{"class":55},[36,141,60],{"class":59},[36,143,144],{"class":59}," full-upgrade\n",[36,146,148],{"class":38,"line":147},12,[36,149,150],{"class":42},"#设置指定版本\n",[36,152,154,156,158,161,165,168,171,174,177,180,183,186],{"class":38,"line":153},13,[36,155,56],{"class":55},[36,157,60],{"class":59},[36,159,160],{"class":59}," install",[36,162,164],{"class":163},"szBVR"," \u003C",[36,166,167],{"class":59},"package_nam",[36,169,170],{"class":98},"e",[36,172,173],{"class":163},">",[36,175,176],{"class":59},"=",[36,178,179],{"class":163},"\u003C",[36,181,182],{"class":59},"version_numbe",[36,184,185],{"class":98},"r",[36,187,188],{"class":163},">\n",[36,190,192],{"class":38,"line":191},14,[36,193,194],{"class":42},"#只安装软件包不升级\n",[36,196,198,200,202,204,206,208,210,212],{"class":38,"line":197},15,[36,199,56],{"class":55},[36,201,60],{"class":59},[36,203,160],{"class":59},[36,205,164],{"class":163},[36,207,167],{"class":59},[36,209,170],{"class":98},[36,211,173],{"class":163},[36,213,214],{"class":109}," --no-upgrade\n",[36,216,218],{"class":38,"line":217},16,[36,219,220],{"class":42},"#只升级，不存在就不安装\n",[36,222,224,226,228,230,232,234,236,238],{"class":38,"line":223},17,[36,225,56],{"class":55},[36,227,60],{"class":59},[36,229,160],{"class":59},[36,231,164],{"class":163},[36,233,167],{"class":59},[36,235,170],{"class":98},[36,237,173],{"class":163},[36,239,240],{"class":109}," --only-upgrade\n",[36,242,244],{"class":38,"line":243},18,[36,245,247],{"emptyLinePlaceholder":246},true,"\n",[36,249,251],{"class":38,"line":250},19,[36,252,253],{"class":42},"#安装指定的软件命令\n",[36,255,257,259,261,263,265,267,269],{"class":38,"line":256},20,[36,258,56],{"class":55},[36,260,60],{"class":59},[36,262,160],{"class":59},[36,264,164],{"class":163},[36,266,167],{"class":59},[36,268,170],{"class":98},[36,270,188],{"class":163},[36,272,274],{"class":38,"line":273},21,[36,275,247],{"emptyLinePlaceholder":246},[36,277,279],{"class":38,"line":278},22,[36,280,281],{"class":42},"#安装多个软件包\n",[36,283,285,287,289,291,293,296,299,301,303,306,308,310],{"class":38,"line":284},23,[36,286,56],{"class":55},[36,288,60],{"class":59},[36,290,160],{"class":59},[36,292,164],{"class":163},[36,294,295],{"class":59},"package_",[36,297,298],{"class":163},"1>",[36,300,164],{"class":163},[36,302,295],{"class":59},[36,304,305],{"class":163},"2>",[36,307,164],{"class":163},[36,309,295],{"class":59},[36,311,312],{"class":163},"3>\n",[36,314,316],{"class":38,"line":315},24,[36,317,247],{"emptyLinePlaceholder":246},[36,319,321],{"class":38,"line":320},25,[36,322,323],{"class":42},"#更新指定的软件命令\n",[36,325,327,329,331,333,335,337,339],{"class":38,"line":326},26,[36,328,56],{"class":55},[36,330,60],{"class":59},[36,332,95],{"class":59},[36,334,164],{"class":163},[36,336,167],{"class":59},[36,338,170],{"class":98},[36,340,188],{"class":163},[36,342,344],{"class":38,"line":343},27,[36,345,247],{"emptyLinePlaceholder":246},[36,347,349],{"class":38,"line":348},28,[36,350,351],{"class":42},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[36,353,355,357,360,362,364,366],{"class":38,"line":354},29,[36,356,122],{"class":55},[36,358,359],{"class":59}," show",[36,361,164],{"class":163},[36,363,167],{"class":59},[36,365,170],{"class":98},[36,367,188],{"class":163},[36,369,371],{"class":38,"line":370},30,[36,372,247],{"emptyLinePlaceholder":246},[36,374,376],{"class":38,"line":375},31,[36,377,378],{"class":42},"#删除软件包命令\n",[36,380,382,384,386,389,391,393,395],{"class":38,"line":381},32,[36,383,56],{"class":55},[36,385,60],{"class":59},[36,387,388],{"class":59}," remove",[36,390,164],{"class":163},[36,392,167],{"class":59},[36,394,170],{"class":98},[36,396,188],{"class":163},[36,398,400],{"class":38,"line":399},33,[36,401,247],{"emptyLinePlaceholder":246},[36,403,405],{"class":38,"line":404},34,[36,406,407],{"class":42},"# 清理旧版本和缓存（释放磁盘空间）\n",[36,409,411,413,415,418],{"class":38,"line":410},35,[36,412,56],{"class":55},[36,414,60],{"class":59},[36,416,417],{"class":59}," autoremove",[36,419,420],{"class":42},"  # 删除不再需要的依赖和库文件\n",[36,422,424,426,428,431],{"class":38,"line":423},36,[36,425,56],{"class":55},[36,427,60],{"class":59},[36,429,430],{"class":59}," clean",[36,432,433],{"class":42},"       # 清理下载的缓存包\n",[36,435,437],{"class":38,"line":436},37,[36,438,247],{"emptyLinePlaceholder":246},[36,440,442],{"class":38,"line":441},38,[36,443,444],{"class":42},"#移除软件包及配置文件\n",[36,446,448,450,452,455,457,459,461],{"class":38,"line":447},39,[36,449,56],{"class":55},[36,451,60],{"class":59},[36,453,454],{"class":59}," purge",[36,456,164],{"class":163},[36,458,167],{"class":59},[36,460,170],{"class":98},[36,462,188],{"class":163},[36,464,466],{"class":38,"line":465},40,[36,467,247],{"emptyLinePlaceholder":246},[36,469,471],{"class":38,"line":470},41,[36,472,473],{"class":42},"#查找软件包命令\n",[36,475,477,479,481,484,486,489,492],{"class":38,"line":476},42,[36,478,56],{"class":55},[36,480,60],{"class":59},[36,482,483],{"class":59}," search",[36,485,164],{"class":163},[36,487,488],{"class":59},"keywor",[36,490,491],{"class":98},"d",[36,493,188],{"class":163},[36,495,497],{"class":38,"line":496},43,[36,498,247],{"emptyLinePlaceholder":246},[36,500,502],{"class":38,"line":501},44,[36,503,504],{"class":42},"#列出所有已安装的包\n",[36,506,508,510,512],{"class":38,"line":507},45,[36,509,122],{"class":55},[36,511,125],{"class":59},[36,513,514],{"class":109}," --installed\n",[36,516,518],{"class":38,"line":517},46,[36,519,247],{"emptyLinePlaceholder":246},[36,521,523],{"class":38,"line":522},47,[36,524,525],{"class":42},"#列出所有已安装的包的版本信息\n",[36,527,529,531,533],{"class":38,"line":528},48,[36,530,122],{"class":55},[36,532,125],{"class":59},[36,534,535],{"class":109}," --all-versions\n",[537,538,539],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .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":31,"searchDepth":46,"depth":46,"links":541},[],null,"md",{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":5,"description":542},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",[550,5613,6721,8141,11118,12469,13958,15047,23810,23822,24419,24445,24569,24810,24875,24893,24906,24953,25076,25245,25444,25624,25829,25965,26060,26097,26110,26420,27158,27866,27887,28907,30537,30688,30701,30713,31014,50826,50841,50858,50891,53762,77110,93255,93276,93389,93510,94280,94943,95304,95342,95448,95548,95591,95617,95678,97332,97433,97458,97949,98449,99529,99812,100554,101056,101068,103083,104747,106250,107948,109865,111784,113806,117276,117708,118114,118863,121807,122155,122177,122533,125840,125852,126255,126278,126425,126592,126797,127098,127655,128312,130243,131841,132490,133984,135415,136650,138344,140096,142506,142622,143557,143768,144653,145888,146116,146129,147284,149696,152064,155385,157862,159506,161283,163296,166348,168528,171055,173249],{"id":551,"title":552,"body":553,"description":31,"extension":543,"meta":5608,"navigation":246,"path":5609,"seo":5610,"stem":5611,"__hash__":5612},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":554,"toc":5580},[555,558,563,566,570,583,587,592,595,598,601,604,607,635,639,642,645,648,651,700,704,722,724,738,741,749,752,1610,1617,1634,1638,1724,1728,1734,1820,1824,1862,1866,1930,1934,1938,1945,1956,1960,1965,1969,1974,1978,1983,1987,1991,1996,2247,2252,2390,2395,2651,2654,2662,2666,2671,2774,2777,3075,3084,3185,3188,3191,3194,3197,3457,3462,3602,3605,3784,3787,3915,3918,4070,4074,4079,4082,4093,4101,4104,4211,4215,4219,4224,4274,4279,4284,4308,4313,4366,4369,4374,4551,4556,4841,4846,5243,5247,5252,5309,5314,5322,5325,5465,5468,5577],[10,556,552],{"id":557},"_1基础入门",[559,560,562],"h2",{"id":561},"_11注释","1.1注释",[14,564,565],{},"\u002F\u002F或者\u002F* *\u002F",[559,567,569],{"id":568},"_12命名","1.2命名",[571,572,573,577,580],"ol",{},[574,575,576],"li",{},"字母数字下划线",[574,578,579],{},"开头必须是字母或_",[574,581,582],{},"不能使用关键词",[559,584,586],{"id":585},"_13数据类型","1.3数据类型",[588,589,591],"h3",{"id":590},"_131整形","1.3.1整形",[14,593,594],{},"short 短整形 2",[14,596,597],{},"int 整形 4",[14,599,600],{},"long 长整形 win4 linux32位4 linux64位8",[14,602,603],{},"long long 长长整形 8",[14,605,606],{},"利用sizeof可以求数据类型占用的内存空间大小",[26,608,612],{"className":609,"code":610,"language":611,"meta":31,"style":31},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[33,613,614,628],{"__ignoreMap":31},[36,615,616,619,622,625],{"class":38,"line":39},[36,617,618],{"class":163},"sizeof",[36,620,621],{"class":98},"(",[36,623,624],{"class":163},"int",[36,626,627],{"class":98},")\n",[36,629,630,632],{"class":38,"line":46},[36,631,618],{"class":163},[36,633,634],{"class":98},"(num)\n",[588,636,638],{"id":637},"_132浮点型","1.3.2浮点型",[14,640,641],{},"float 单精度 4节 7位有效数字",[14,643,644],{},"double 双精度 8节 15-16有效数字",[14,646,647],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,649,650],{},"注意点：",[26,652,654],{"className":609,"code":653,"language":611,"meta":31,"style":31},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[33,655,656,678],{"__ignoreMap":31},[36,657,658,661,664,666,669,672,675],{"class":38,"line":39},[36,659,660],{"class":163},"float",[36,662,663],{"class":98}," f1",[36,665,176],{"class":163},[36,667,668],{"class":109},"3.14",[36,670,671],{"class":163},"f",[36,673,674],{"class":98},";",[36,676,677],{"class":42}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[36,679,680,682,685,687,690,692,695,697],{"class":38,"line":46},[36,681,660],{"class":163},[36,683,684],{"class":98}," f2",[36,686,176],{"class":163},[36,688,689],{"class":109},"3",[36,691,170],{"class":163},[36,693,694],{"class":109},"2",[36,696,674],{"class":98},[36,698,699],{"class":42}," \u002F\u002F科学记数法\n",[588,701,703],{"id":702},"_133字符型","1.3.3字符型",[26,705,707],{"className":609,"code":706,"language":611,"meta":31,"style":31},"char ch='a'\n",[33,708,709],{"__ignoreMap":31},[36,710,711,714,717,719],{"class":38,"line":39},[36,712,713],{"class":163},"char",[36,715,716],{"class":98}," ch",[36,718,176],{"class":163},[36,720,721],{"class":59},"'a'\n",[14,723,650],{},[571,725,726,729,732,735],{},[574,727,728],{},"在显示字符型变量时，只能单引号，双引号x",[574,730,731],{},"单引号内只能一个字符，不能字符串",[574,733,734],{},"c和c++字符型变量只占用一个字符",[574,736,737],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,739,740],{},"ASCII码大致由以下两部分组成：",[571,742,743,746],{},[574,744,745],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[574,747,748],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,750,751],{},"ASCII码表格：",[753,754,755,799],"table",{},[756,757,758],"thead",{},[759,760,761,769,774,778,783,787,791,795],"tr",{},[762,763,764,768],"th",{},[765,766,767],"strong",{},"ASCII","值",[762,770,771],{},[765,772,773],{},"控制字符",[762,775,776,768],{},[765,777,767],{},[762,779,780],{},[765,781,782],{},"字符",[762,784,785,768],{},[765,786,767],{},[762,788,789],{},[765,790,782],{},[762,792,793,768],{},[765,794,767],{},[762,796,797],{},[765,798,782],{},[800,801,802,829,854,879,904,929,954,979,1005,1030,1056,1082,1108,1133,1159,1185,1211,1235,1260,1284,1309,1334,1359,1384,1409,1434,1459,1485,1510,1534,1559,1584],"tbody",{},[759,803,804,808,811,814,817,820,823,826],{},[805,806,807],"td",{},"0",[805,809,810],{},"NUT",[805,812,813],{},"32",[805,815,816],{},"(space)",[805,818,819],{},"64",[805,821,822],{},"@",[805,824,825],{},"96",[805,827,828],{},"、",[759,830,831,834,837,840,843,846,849,852],{},[805,832,833],{},"1",[805,835,836],{},"SOH",[805,838,839],{},"33",[805,841,842],{},"!",[805,844,845],{},"65",[805,847,848],{},"A",[805,850,851],{},"97",[805,853,20],{},[759,855,856,858,861,864,867,870,873,876],{},[805,857,694],{},[805,859,860],{},"STX",[805,862,863],{},"34",[805,865,866],{},"\"",[805,868,869],{},"66",[805,871,872],{},"B",[805,874,875],{},"98",[805,877,878],{},"b",[759,880,881,883,886,889,892,895,898,901],{},[805,882,689],{},[805,884,885],{},"ETX",[805,887,888],{},"35",[805,890,891],{},"#",[805,893,894],{},"67",[805,896,897],{},"C",[805,899,900],{},"99",[805,902,903],{},"c",[759,905,906,909,912,915,918,921,924,927],{},[805,907,908],{},"4",[805,910,911],{},"EOT",[805,913,914],{},"36",[805,916,917],{},"$",[805,919,920],{},"68",[805,922,923],{},"D",[805,925,926],{},"100",[805,928,491],{},[759,930,931,934,937,940,943,946,949,952],{},[805,932,933],{},"5",[805,935,936],{},"ENQ",[805,938,939],{},"37",[805,941,942],{},"%",[805,944,945],{},"69",[805,947,948],{},"E",[805,950,951],{},"101",[805,953,170],{},[759,955,956,959,962,965,968,971,974,977],{},[805,957,958],{},"6",[805,960,961],{},"ACK",[805,963,964],{},"38",[805,966,967],{},"&",[805,969,970],{},"70",[805,972,973],{},"F",[805,975,976],{},"102",[805,978,671],{},[759,980,981,984,987,990,993,996,999,1002],{},[805,982,983],{},"7",[805,985,986],{},"BEL",[805,988,989],{},"39",[805,991,992],{},",",[805,994,995],{},"71",[805,997,998],{},"G",[805,1000,1001],{},"103",[805,1003,1004],{},"g",[759,1006,1007,1010,1013,1016,1018,1021,1024,1027],{},[805,1008,1009],{},"8",[805,1011,1012],{},"BS",[805,1014,1015],{},"40",[805,1017,621],{},[805,1019,1020],{},"72",[805,1022,1023],{},"H",[805,1025,1026],{},"104",[805,1028,1029],{},"h",[759,1031,1032,1035,1038,1041,1044,1047,1050,1053],{},[805,1033,1034],{},"9",[805,1036,1037],{},"HT",[805,1039,1040],{},"41",[805,1042,1043],{},")",[805,1045,1046],{},"73",[805,1048,1049],{},"I",[805,1051,1052],{},"105",[805,1054,1055],{},"i",[759,1057,1058,1061,1064,1067,1070,1073,1076,1079],{},[805,1059,1060],{},"10",[805,1062,1063],{},"LF",[805,1065,1066],{},"42",[805,1068,1069],{},"*",[805,1071,1072],{},"74",[805,1074,1075],{},"J",[805,1077,1078],{},"106",[805,1080,1081],{},"j",[759,1083,1084,1087,1090,1093,1096,1099,1102,1105],{},[805,1085,1086],{},"11",[805,1088,1089],{},"VT",[805,1091,1092],{},"43",[805,1094,1095],{},"+",[805,1097,1098],{},"75",[805,1100,1101],{},"K",[805,1103,1104],{},"107",[805,1106,1107],{},"k",[759,1109,1110,1113,1116,1119,1121,1124,1127,1130],{},[805,1111,1112],{},"12",[805,1114,1115],{},"FF",[805,1117,1118],{},"44",[805,1120,992],{},[805,1122,1123],{},"76",[805,1125,1126],{},"L",[805,1128,1129],{},"108",[805,1131,1132],{},"l",[759,1134,1135,1138,1141,1144,1147,1150,1153,1156],{},[805,1136,1137],{},"13",[805,1139,1140],{},"CR",[805,1142,1143],{},"45",[805,1145,1146],{},"-",[805,1148,1149],{},"77",[805,1151,1152],{},"M",[805,1154,1155],{},"109",[805,1157,1158],{},"m",[759,1160,1161,1164,1167,1170,1173,1176,1179,1182],{},[805,1162,1163],{},"14",[805,1165,1166],{},"SO",[805,1168,1169],{},"46",[805,1171,1172],{},".",[805,1174,1175],{},"78",[805,1177,1178],{},"N",[805,1180,1181],{},"110",[805,1183,1184],{},"n",[759,1186,1187,1190,1193,1196,1199,1202,1205,1208],{},[805,1188,1189],{},"15",[805,1191,1192],{},"SI",[805,1194,1195],{},"47",[805,1197,1198],{},"\u002F",[805,1200,1201],{},"79",[805,1203,1204],{},"O",[805,1206,1207],{},"111",[805,1209,1210],{},"o",[759,1212,1213,1216,1219,1222,1224,1227,1230,1233],{},[805,1214,1215],{},"16",[805,1217,1218],{},"DLE",[805,1220,1221],{},"48",[805,1223,807],{},[805,1225,1226],{},"80",[805,1228,1229],{},"P",[805,1231,1232],{},"112",[805,1234,14],{},[759,1236,1237,1240,1243,1246,1248,1251,1254,1257],{},[805,1238,1239],{},"17",[805,1241,1242],{},"DCI",[805,1244,1245],{},"49",[805,1247,833],{},[805,1249,1250],{},"81",[805,1252,1253],{},"Q",[805,1255,1256],{},"113",[805,1258,1259],{},"q",[759,1261,1262,1265,1268,1271,1273,1276,1279,1282],{},[805,1263,1264],{},"18",[805,1266,1267],{},"DC2",[805,1269,1270],{},"50",[805,1272,694],{},[805,1274,1275],{},"82",[805,1277,1278],{},"R",[805,1280,1281],{},"114",[805,1283,185],{},[759,1285,1286,1289,1292,1295,1297,1300,1303,1306],{},[805,1287,1288],{},"19",[805,1290,1291],{},"DC3",[805,1293,1294],{},"51",[805,1296,689],{},[805,1298,1299],{},"83",[805,1301,1302],{},"S",[805,1304,1305],{},"115",[805,1307,1308],{},"s",[759,1310,1311,1314,1317,1320,1322,1325,1328,1331],{},[805,1312,1313],{},"20",[805,1315,1316],{},"DC4",[805,1318,1319],{},"52",[805,1321,908],{},[805,1323,1324],{},"84",[805,1326,1327],{},"T",[805,1329,1330],{},"116",[805,1332,1333],{},"t",[759,1335,1336,1339,1342,1345,1347,1350,1353,1356],{},[805,1337,1338],{},"21",[805,1340,1341],{},"NAK",[805,1343,1344],{},"53",[805,1346,933],{},[805,1348,1349],{},"85",[805,1351,1352],{},"U",[805,1354,1355],{},"117",[805,1357,1358],{},"u",[759,1360,1361,1364,1367,1370,1372,1375,1378,1381],{},[805,1362,1363],{},"22",[805,1365,1366],{},"SYN",[805,1368,1369],{},"54",[805,1371,958],{},[805,1373,1374],{},"86",[805,1376,1377],{},"V",[805,1379,1380],{},"118",[805,1382,1383],{},"v",[759,1385,1386,1389,1392,1395,1397,1400,1403,1406],{},[805,1387,1388],{},"23",[805,1390,1391],{},"TB",[805,1393,1394],{},"55",[805,1396,983],{},[805,1398,1399],{},"87",[805,1401,1402],{},"W",[805,1404,1405],{},"119",[805,1407,1408],{},"w",[759,1410,1411,1414,1417,1420,1422,1425,1428,1431],{},[805,1412,1413],{},"24",[805,1415,1416],{},"CAN",[805,1418,1419],{},"56",[805,1421,1009],{},[805,1423,1424],{},"88",[805,1426,1427],{},"X",[805,1429,1430],{},"120",[805,1432,1433],{},"x",[759,1435,1436,1439,1442,1445,1447,1450,1453,1456],{},[805,1437,1438],{},"25",[805,1440,1441],{},"EM",[805,1443,1444],{},"57",[805,1446,1034],{},[805,1448,1449],{},"89",[805,1451,1452],{},"Y",[805,1454,1455],{},"121",[805,1457,1458],{},"y",[759,1460,1461,1464,1467,1470,1473,1476,1479,1482],{},[805,1462,1463],{},"26",[805,1465,1466],{},"SUB",[805,1468,1469],{},"58",[805,1471,1472],{},":",[805,1474,1475],{},"90",[805,1477,1478],{},"Z",[805,1480,1481],{},"122",[805,1483,1484],{},"z",[759,1486,1487,1490,1493,1496,1498,1501,1504,1507],{},[805,1488,1489],{},"27",[805,1491,1492],{},"ESC",[805,1494,1495],{},"59",[805,1497,674],{},[805,1499,1500],{},"91",[805,1502,1503],{},"[",[805,1505,1506],{},"123",[805,1508,1509],{},"{",[759,1511,1512,1515,1518,1521,1523,1526,1528,1531],{},[805,1513,1514],{},"28",[805,1516,1517],{},"FS",[805,1519,1520],{},"60",[805,1522,179],{},[805,1524,1525],{},"92",[805,1527,1198],{},[805,1529,1530],{},"124",[805,1532,1533],{},"|",[759,1535,1536,1539,1542,1545,1547,1550,1553,1556],{},[805,1537,1538],{},"29",[805,1540,1541],{},"GS",[805,1543,1544],{},"61",[805,1546,176],{},[805,1548,1549],{},"93",[805,1551,1552],{},"]",[805,1554,1555],{},"125",[805,1557,1558],{},"}",[759,1560,1561,1564,1567,1570,1572,1575,1578,1581],{},[805,1562,1563],{},"30",[805,1565,1566],{},"RS",[805,1568,1569],{},"62",[805,1571,173],{},[805,1573,1574],{},"94",[805,1576,1577],{},"^",[805,1579,1580],{},"126",[805,1582,1583],{},"`",[759,1585,1586,1589,1592,1595,1598,1601,1604,1607],{},[805,1587,1588],{},"31",[805,1590,1591],{},"US",[805,1593,1594],{},"63",[805,1596,1597],{},"?",[805,1599,1600],{},"95",[805,1602,1603],{},"_",[805,1605,1606],{},"127",[805,1608,1609],{},"DEL",[14,1611,1612,1613,1616],{},"ASCII 码大致由以下",[765,1614,1615],{},"两部分组","成：",[1618,1619,1620,1627],"ul",{},[574,1621,1622,1623,1626],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[765,1624,1625],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[574,1628,1629,1630,1633],{},"ASCII 打印字符：数字 ",[765,1631,1632],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[588,1635,1637],{"id":1636},"_134转义字符","1.3.4转义字符",[26,1639,1641],{"className":609,"code":1640,"language":611,"meta":31,"style":31},"\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",[33,1642,1643,1648,1664,1678,1683,1696,1701],{"__ignoreMap":31},[36,1644,1645],{"class":38,"line":39},[36,1646,1647],{"class":42},"\u002F\u002F换行符\n",[36,1649,1650,1653,1656,1659,1661],{"class":38,"line":46},[36,1651,1652],{"class":98},"cout ",[36,1654,1655],{"class":163},"\u003C\u003C",[36,1657,1658],{"class":59},"\"hello world\u002Fn\"",[36,1660,674],{"class":98},[36,1662,1663],{"class":42}," \u002F\u002F就等同于如下：\n",[36,1665,1666,1668,1670,1673,1675],{"class":38,"line":52},[36,1667,1652],{"class":98},[36,1669,1655],{"class":163},[36,1671,1672],{"class":59},"\"hello world\"",[36,1674,1655],{"class":163},[36,1676,1677],{"class":98},"endl;\n",[36,1679,1680],{"class":38,"line":66},[36,1681,1682],{"class":42},"\u002F\u002F反斜杠\n",[36,1684,1685,1687,1689,1692,1694],{"class":38,"line":72},[36,1686,1652],{"class":98},[36,1688,1655],{"class":163},[36,1690,1691],{"class":59},"\"\u002F\u002F\"",[36,1693,1655],{"class":163},[36,1695,1677],{"class":98},[36,1697,1698],{"class":38,"line":82},[36,1699,1700],{"class":42},"\u002F\u002F水平制表符\n",[36,1702,1703,1705,1707,1710,1713,1716,1718,1721],{"class":38,"line":88},[36,1704,1652],{"class":98},[36,1706,1655],{"class":163},[36,1708,1709],{"class":59},"\"aaaa",[36,1711,1712],{"class":109},"\\t",[36,1714,1715],{"class":59},"helloworld\"",[36,1717,1655],{"class":163},[36,1719,1720],{"class":98},"endl;",[36,1722,1723],{"class":42}," \u002F\u002F输出窗口时有对齐效果\n",[588,1725,1727],{"id":1726},"_135字符串型","1.3.5字符串型",[14,1729,1730,1731,1733],{},"char 变量名",[36,1732],{},"=\"字符串值\"",[26,1735,1737],{"className":609,"code":1736,"language":611,"meta":31,"style":31},"\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",[33,1738,1739,1744,1749,1754,1759,1773,1786,1791,1796,1807],{"__ignoreMap":31},[36,1740,1741],{"class":38,"line":39},[36,1742,1743],{"class":42},"\u002F\u002Fc风格字符串\n",[36,1745,1746],{"class":38,"line":46},[36,1747,1748],{"class":42},"\u002F\u002F注意事项：\n",[36,1750,1751],{"class":38,"line":52},[36,1752,1753],{"class":42},"\u002F\u002F1.char字符串名[]\n",[36,1755,1756],{"class":38,"line":66},[36,1757,1758],{"class":42},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[36,1760,1761,1763,1766,1768,1770],{"class":38,"line":72},[36,1762,713],{"class":163},[36,1764,1765],{"class":98}," str[]",[36,1767,176],{"class":163},[36,1769,1672],{"class":59},[36,1771,1772],{"class":98},";\n",[36,1774,1775,1777,1779,1782,1784],{"class":38,"line":82},[36,1776,1652],{"class":98},[36,1778,1655],{"class":163},[36,1780,1781],{"class":98},"str",[36,1783,1655],{"class":163},[36,1785,1677],{"class":98},[36,1787,1788],{"class":38,"line":88},[36,1789,1790],{"class":42},"\u002F\u002Fc++风格字符串\n",[36,1792,1793],{"class":38,"line":113},[36,1794,1795],{"class":42},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[36,1797,1798,1801,1803,1805],{"class":38,"line":119},[36,1799,1800],{"class":98},"string str2",[36,1802,176],{"class":163},[36,1804,1672],{"class":59},[36,1806,1772],{"class":98},[36,1808,1809,1811,1813,1816,1818],{"class":38,"line":131},[36,1810,1652],{"class":98},[36,1812,1655],{"class":163},[36,1814,1815],{"class":98},"str2",[36,1817,1655],{"class":163},[36,1819,1677],{"class":98},[588,1821,1823],{"id":1822},"_136布尔类型bool","1.3.6布尔类型bool",[26,1825,1827],{"className":609,"code":1826,"language":611,"meta":31,"style":31},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[33,1828,1829,1844],{"__ignoreMap":31},[36,1830,1831,1834,1837,1839,1842],{"class":38,"line":39},[36,1832,1833],{"class":163},"bool",[36,1835,1836],{"class":98}," flag",[36,1838,176],{"class":163},[36,1840,1841],{"class":109},"true",[36,1843,1772],{"class":98},[36,1845,1846,1849,1852,1855,1857,1859],{"class":38,"line":46},[36,1847,1848],{"class":98},"cout",[36,1850,1851],{"class":163},"\u003C\u003Csizeof",[36,1853,1854],{"class":98},"(flag)",[36,1856,1655],{"class":163},[36,1858,1720],{"class":98},[36,1860,1861],{"class":42}," \u002F\u002F查看布尔占内存空间\n",[559,1863,1865],{"id":1864},"_14键盘输入cin","1.4键盘输入cin",[26,1867,1869],{"className":609,"code":1868,"language":611,"meta":31,"style":31},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[33,1870,1871,1884,1901,1912],{"__ignoreMap":31},[36,1872,1873,1875,1878,1880,1882],{"class":38,"line":39},[36,1874,624],{"class":163},[36,1876,1877],{"class":98}," a",[36,1879,176],{"class":163},[36,1881,807],{"class":109},[36,1883,1772],{"class":98},[36,1885,1886,1888,1890,1893,1895,1897,1899],{"class":38,"line":46},[36,1887,1848],{"class":98},[36,1889,1655],{"class":163},[36,1891,1892],{"class":59},"\"请给整型变量a赋值\"",[36,1894,1655],{"class":163},[36,1896,20],{"class":98},[36,1898,1655],{"class":163},[36,1900,1677],{"class":98},[36,1902,1903,1906,1909],{"class":38,"line":52},[36,1904,1905],{"class":98},"cin ",[36,1907,1908],{"class":163},">>",[36,1910,1911],{"class":98}," a;\n",[36,1913,1914,1916,1918,1921,1924,1926,1928],{"class":38,"line":66},[36,1915,1652],{"class":98},[36,1917,1655],{"class":163},[36,1919,1920],{"class":59}," \"整型变量a=\"",[36,1922,1923],{"class":163}," \u003C\u003C",[36,1925,20],{"class":98},[36,1927,1655],{"class":163},[36,1929,1677],{"class":98},[559,1931,1933],{"id":1932},"_15运算符","1.5运算符",[588,1935,1937],{"id":1936},"_151算术运算符","1.5.1算术运算符",[14,1939,1940,1944],{},[1941,1942],"img",{"alt":31,"src":1943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[571,1946,1947,1950,1953],{},[574,1948,1949],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[574,1951,1952],{},"两个小数不可以做取模运算",[574,1954,1955],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[588,1957,1959],{"id":1958},"_152赋值运算符","1.5.2赋值运算符",[14,1961,1962],{},[1941,1963],{"alt":31,"src":1964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[588,1966,1968],{"id":1967},"_153比较运算符","1.5.3比较运算符",[14,1970,1971],{},[1941,1972],{"alt":31,"src":1973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[588,1975,1977],{"id":1976},"_154逻辑运算符","1.5.4逻辑运算符",[14,1979,1980],{},[1941,1981],{"alt":31,"src":1982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[559,1984,1986],{"id":1985},"_16程序流程结构","1.6程序流程结构",[588,1988,1990],{"id":1989},"_161选择结构","1.6.1选择结构",[571,1992,1993],{},[574,1994,1995],{},"if语句\n单行、多行、多条件if语句",[26,1997,1999],{"className":609,"code":1998,"language":611,"meta":31,"style":31},"\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",[33,2000,2001,2006,2021,2026,2040,2045,2050,2059,2072,2076,2089,2093,2098,2102,2115,2119,2124,2144,2148,2161,2165,2193,2197,2213,2217,2221,2225,2238,2242],{"__ignoreMap":31},[36,2002,2003],{"class":38,"line":39},[36,2004,2005],{"class":42},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[36,2007,2008,2011,2014,2016,2019],{"class":38,"line":46},[36,2009,2010],{"class":163},"if",[36,2012,2013],{"class":98},"(score",[36,2015,173],{"class":163},[36,2017,2018],{"class":109},"600",[36,2020,627],{"class":98},[36,2022,2023],{"class":38,"line":52},[36,2024,2025],{"class":98},"{\n",[36,2027,2028,2031,2033,2036,2038],{"class":38,"line":66},[36,2029,2030],{"class":98},"    cout",[36,2032,1655],{"class":163},[36,2034,2035],{"class":59},"'这是单行if语句'",[36,2037,1655],{"class":163},[36,2039,1677],{"class":98},[36,2041,2042],{"class":38,"line":72},[36,2043,2044],{"class":98},"}\n",[36,2046,2047],{"class":38,"line":82},[36,2048,2049],{"class":42},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[36,2051,2052,2054,2056],{"class":38,"line":88},[36,2053,1905],{"class":98},[36,2055,1908],{"class":163},[36,2057,2058],{"class":98}," score\n",[36,2060,2061,2063,2065,2068,2070],{"class":38,"line":113},[36,2062,2010],{"class":163},[36,2064,2013],{"class":98},[36,2066,2067],{"class":163},"\u003C=",[36,2069,2018],{"class":109},[36,2071,627],{"class":98},[36,2073,2074],{"class":38,"line":119},[36,2075,2025],{"class":98},[36,2077,2078,2080,2082,2085,2087],{"class":38,"line":131},[36,2079,2030],{"class":98},[36,2081,1908],{"class":163},[36,2083,2084],{"class":59},"\"小于等于600\"",[36,2086,1655],{"class":163},[36,2088,1677],{"class":98},[36,2090,2091],{"class":38,"line":137},[36,2092,2044],{"class":98},[36,2094,2095],{"class":38,"line":147},[36,2096,2097],{"class":163},"else\n",[36,2099,2100],{"class":38,"line":153},[36,2101,2025],{"class":98},[36,2103,2104,2106,2108,2111,2113],{"class":38,"line":191},[36,2105,2030],{"class":98},[36,2107,1908],{"class":163},[36,2109,2110],{"class":59},"\"大于600\"",[36,2112,1908],{"class":163},[36,2114,1677],{"class":98},[36,2116,2117],{"class":38,"line":197},[36,2118,2044],{"class":98},[36,2120,2121],{"class":38,"line":217},[36,2122,2123],{"class":42},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[36,2125,2126,2128,2131,2133,2135,2138,2140,2142],{"class":38,"line":223},[36,2127,2010],{"class":163},[36,2129,2130],{"class":98}," (",[36,2132,807],{"class":109},[36,2134,179],{"class":163},[36,2136,2137],{"class":98},"num",[36,2139,179],{"class":163},[36,2141,926],{"class":109},[36,2143,627],{"class":98},[36,2145,2146],{"class":38,"line":243},[36,2147,2025],{"class":98},[36,2149,2150,2152,2154,2157,2159],{"class":38,"line":250},[36,2151,2030],{"class":98},[36,2153,1655],{"class":163},[36,2155,2156],{"class":59},"\"小于100\"",[36,2158,1655],{"class":163},[36,2160,1677],{"class":98},[36,2162,2163],{"class":38,"line":256},[36,2164,2044],{"class":98},[36,2166,2167,2170,2173,2176,2179,2181,2184,2186,2188,2191],{"class":38,"line":273},[36,2168,2169],{"class":163},"else",[36,2171,2172],{"class":163}," if",[36,2174,2175],{"class":98}," (nmu",[36,2177,2178],{"class":163},">=",[36,2180,926],{"class":109},[36,2182,2183],{"class":163},"&&",[36,2185,2137],{"class":98},[36,2187,179],{"class":163},[36,2189,2190],{"class":109},"200",[36,2192,627],{"class":98},[36,2194,2195],{"class":38,"line":278},[36,2196,2025],{"class":98},[36,2198,2199,2201,2203,2206,2208,2210],{"class":38,"line":284},[36,2200,2030],{"class":98},[36,2202,1655],{"class":163},[36,2204,2205],{"class":59},"\"不小于100且小于200\"",[36,2207,1655],{"class":163},[36,2209,1720],{"class":98},[36,2211,2212],{"class":42}," \u002F\u002F可以无限else if,python中是elif：\n",[36,2214,2215],{"class":38,"line":315},[36,2216,2044],{"class":98},[36,2218,2219],{"class":38,"line":320},[36,2220,2097],{"class":163},[36,2222,2223],{"class":38,"line":326},[36,2224,2025],{"class":98},[36,2226,2227,2229,2231,2234,2236],{"class":38,"line":343},[36,2228,2030],{"class":98},[36,2230,1655],{"class":163},[36,2232,2233],{"class":59},"\"不小于200\"",[36,2235,1655],{"class":163},[36,2237,1677],{"class":98},[36,2239,2240],{"class":38,"line":348},[36,2241,2044],{"class":98},[36,2243,2244],{"class":38,"line":354},[36,2245,2246],{"class":42},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[571,2248,2249],{"start":46},[574,2250,2251],{},"三目运算符",[26,2253,2255],{"className":609,"code":2254,"language":611,"meta":31,"style":31},"\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",[33,2256,2257,2262,2267,2293,2315,2332,2337,2360,2375],{"__ignoreMap":31},[36,2258,2259],{"class":38,"line":39},[36,2260,2261],{"class":42},"\u002F\u002F创建三个变量a,b,c\n",[36,2263,2264],{"class":38,"line":46},[36,2265,2266],{"class":42},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[36,2268,2269,2271,2273,2275,2277,2280,2282,2284,2287,2289,2291],{"class":38,"line":52},[36,2270,624],{"class":163},[36,2272,1877],{"class":98},[36,2274,176],{"class":163},[36,2276,1313],{"class":109},[36,2278,2279],{"class":98},",b",[36,2281,176],{"class":163},[36,2283,1060],{"class":109},[36,2285,2286],{"class":98},",c",[36,2288,176],{"class":163},[36,2290,807],{"class":109},[36,2292,1772],{"class":98},[36,2294,2295,2297,2299,2302,2304,2306,2308,2310,2312],{"class":38,"line":66},[36,2296,903],{"class":98},[36,2298,176],{"class":163},[36,2300,2301],{"class":98},"(a",[36,2303,173],{"class":163},[36,2305,878],{"class":98},[36,2307,1597],{"class":163},[36,2309,20],{"class":98},[36,2311,1472],{"class":163},[36,2313,2314],{"class":98},"b)\n",[36,2316,2317,2319,2321,2324,2326,2328,2330],{"class":38,"line":72},[36,2318,1848],{"class":98},[36,2320,1655],{"class":163},[36,2322,2323],{"class":59},"\"c=\"",[36,2325,1655],{"class":163},[36,2327,903],{"class":98},[36,2329,1655],{"class":163},[36,2331,1677],{"class":98},[36,2333,2334],{"class":38,"line":82},[36,2335,2336],{"class":42},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[36,2338,2339,2341,2343,2345,2347,2349,2351,2354,2356,2358],{"class":38,"line":88},[36,2340,2301],{"class":98},[36,2342,173],{"class":163},[36,2344,878],{"class":98},[36,2346,1597],{"class":163},[36,2348,20],{"class":98},[36,2350,1472],{"class":163},[36,2352,2353],{"class":98},"b)",[36,2355,176],{"class":163},[36,2357,926],{"class":109},[36,2359,1772],{"class":98},[36,2361,2362,2364,2366,2368,2370,2372],{"class":38,"line":113},[36,2363,1848],{"class":98},[36,2365,1655],{"class":163},[36,2367,20],{"class":98},[36,2369,1655],{"class":163},[36,2371,1720],{"class":98},[36,2373,2374],{"class":42}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[36,2376,2377,2379,2381,2383,2385,2387],{"class":38,"line":119},[36,2378,1848],{"class":98},[36,2380,1655],{"class":163},[36,2382,878],{"class":98},[36,2384,1655],{"class":163},[36,2386,1720],{"class":98},[36,2388,2389],{"class":42}," \u002F\u002F10   a>b,b还是原值\n",[571,2391,2392],{"start":52},[574,2393,2394],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[26,2396,2398],{"className":609,"code":2397,"language":611,"meta":31,"style":31},"\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",[33,2399,2400,2405,2413,2426,2436,2440,2454,2467,2477,2485,2490,2515,2536,2558,2579,2601,2622,2642,2647],{"__ignoreMap":31},[36,2401,2402],{"class":38,"line":39},[36,2403,2404],{"class":42},"\u002F\u002F案例-电影打分\n",[36,2406,2407,2410],{"class":38,"line":46},[36,2408,2409],{"class":163},"#include",[36,2411,2412],{"class":59},"\u003Ciostream>\n",[36,2414,2415,2418,2421,2424],{"class":38,"line":52},[36,2416,2417],{"class":163},"using",[36,2419,2420],{"class":163}," namespace",[36,2422,2423],{"class":55}," std",[36,2425,1772],{"class":98},[36,2427,2428,2430,2433],{"class":38,"line":66},[36,2429,624],{"class":163},[36,2431,2432],{"class":55}," main",[36,2434,2435],{"class":98},"()\n",[36,2437,2438],{"class":38,"line":72},[36,2439,2025],{"class":98},[36,2441,2442,2445,2448,2450,2452],{"class":38,"line":82},[36,2443,2444],{"class":163},"    int",[36,2446,2447],{"class":98}," score",[36,2449,176],{"class":163},[36,2451,807],{"class":109},[36,2453,1772],{"class":98},[36,2455,2456,2458,2460,2463,2465],{"class":38,"line":88},[36,2457,2030],{"class":98},[36,2459,1655],{"class":163},[36,2461,2462],{"class":59},"\"电影打分：\"",[36,2464,1655],{"class":163},[36,2466,1677],{"class":98},[36,2468,2469,2472,2474],{"class":38,"line":113},[36,2470,2471],{"class":98},"    cin",[36,2473,1908],{"class":163},[36,2475,2476],{"class":98},"score;\n",[36,2478,2479,2482],{"class":38,"line":119},[36,2480,2481],{"class":163},"    switch",[36,2483,2484],{"class":98},"(score)\n",[36,2486,2487],{"class":38,"line":131},[36,2488,2489],{"class":98},"    {\n",[36,2491,2492,2495,2498,2501,2503,2506,2508,2510,2513],{"class":38,"line":137},[36,2493,2494],{"class":163},"        case",[36,2496,2497],{"class":109}," 10",[36,2499,2500],{"class":98},":cout",[36,2502,1655],{"class":163},[36,2504,2505],{"class":59},"\"经典\"",[36,2507,1655],{"class":163},[36,2509,1720],{"class":98},[36,2511,2512],{"class":163},"break",[36,2514,1772],{"class":98},[36,2516,2517,2519,2522,2524,2526,2528,2530,2532,2534],{"class":38,"line":147},[36,2518,2494],{"class":163},[36,2520,2521],{"class":109}," 9",[36,2523,2500],{"class":98},[36,2525,1655],{"class":163},[36,2527,2505],{"class":59},[36,2529,1655],{"class":163},[36,2531,1720],{"class":98},[36,2533,2512],{"class":163},[36,2535,1772],{"class":98},[36,2537,2538,2540,2543,2545,2547,2550,2552,2554,2556],{"class":38,"line":153},[36,2539,2494],{"class":163},[36,2541,2542],{"class":109}," 8",[36,2544,2500],{"class":98},[36,2546,1655],{"class":163},[36,2548,2549],{"class":59},"\"非常好\"",[36,2551,1655],{"class":163},[36,2553,1720],{"class":98},[36,2555,2512],{"class":163},[36,2557,1772],{"class":98},[36,2559,2560,2562,2565,2567,2569,2571,2573,2575,2577],{"class":38,"line":191},[36,2561,2494],{"class":163},[36,2563,2564],{"class":109}," 7",[36,2566,2500],{"class":98},[36,2568,1655],{"class":163},[36,2570,2549],{"class":59},[36,2572,1655],{"class":163},[36,2574,1720],{"class":98},[36,2576,2512],{"class":163},[36,2578,1772],{"class":98},[36,2580,2581,2583,2586,2588,2590,2593,2595,2597,2599],{"class":38,"line":197},[36,2582,2494],{"class":163},[36,2584,2585],{"class":109}," 6",[36,2587,2500],{"class":98},[36,2589,1655],{"class":163},[36,2591,2592],{"class":59},"\"一般\"",[36,2594,1655],{"class":163},[36,2596,1720],{"class":98},[36,2598,2512],{"class":163},[36,2600,1772],{"class":98},[36,2602,2603,2605,2608,2610,2612,2614,2616,2618,2620],{"class":38,"line":217},[36,2604,2494],{"class":163},[36,2606,2607],{"class":109}," 5",[36,2609,2500],{"class":98},[36,2611,1655],{"class":163},[36,2613,2592],{"class":59},[36,2615,1655],{"class":163},[36,2617,1720],{"class":98},[36,2619,2512],{"class":163},[36,2621,1772],{"class":98},[36,2623,2624,2627,2629,2631,2634,2636,2638,2640],{"class":38,"line":223},[36,2625,2626],{"class":163},"        default",[36,2628,2500],{"class":98},[36,2630,1655],{"class":163},[36,2632,2633],{"class":59},"\"烂片\"",[36,2635,1655],{"class":163},[36,2637,1720],{"class":98},[36,2639,2512],{"class":163},[36,2641,1772],{"class":98},[36,2643,2644],{"class":38,"line":243},[36,2645,2646],{"class":98},"    }\n",[36,2648,2649],{"class":38,"line":250},[36,2650,2044],{"class":98},[14,2652,2653],{},"if和switch区别：",[1618,2655,2656,2659],{},[574,2657,2658],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[574,2660,2661],{},"switch优点：结构清晰，执行效率高",[588,2663,2665],{"id":2664},"_162循环结构","1.6.2循环结构",[571,2667,2668],{},[574,2669,2670],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[26,2672,2674],{"className":609,"code":2673,"language":611,"meta":31,"style":31},"\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",[33,2675,2676,2681,2689,2693,2706,2720,2724,2744,2754,2758,2770],{"__ignoreMap":31},[36,2677,2678],{"class":38,"line":39},[36,2679,2680],{"class":42},"\u002F\u002F打印0-9数字\n",[36,2682,2683,2685,2687],{"class":38,"line":46},[36,2684,624],{"class":163},[36,2686,2432],{"class":55},[36,2688,2435],{"class":98},[36,2690,2691],{"class":38,"line":52},[36,2692,2025],{"class":98},[36,2694,2695,2697,2700,2702,2704],{"class":38,"line":66},[36,2696,2444],{"class":163},[36,2698,2699],{"class":98}," num",[36,2701,176],{"class":163},[36,2703,807],{"class":109},[36,2705,1772],{"class":98},[36,2707,2708,2711,2714,2716,2718],{"class":38,"line":72},[36,2709,2710],{"class":163},"    while",[36,2712,2713],{"class":98},"(num",[36,2715,179],{"class":163},[36,2717,1060],{"class":109},[36,2719,627],{"class":98},[36,2721,2722],{"class":38,"line":82},[36,2723,2489],{"class":98},[36,2725,2726,2729,2732,2734,2736,2738,2741],{"class":38,"line":88},[36,2727,2728],{"class":55},"       std",[36,2730,2731],{"class":98},"::cout",[36,2733,1655],{"class":163},[36,2735,2137],{"class":98},[36,2737,1655],{"class":163},[36,2739,2740],{"class":55},"std",[36,2742,2743],{"class":98},"::endl;\n",[36,2745,2746,2749,2752],{"class":38,"line":113},[36,2747,2748],{"class":98},"        num",[36,2750,2751],{"class":163},"++",[36,2753,1772],{"class":98},[36,2755,2756],{"class":38,"line":119},[36,2757,2646],{"class":98},[36,2759,2760,2763,2765,2768],{"class":38,"line":131},[36,2761,2762],{"class":55},"    system",[36,2764,621],{"class":98},[36,2766,2767],{"class":59},"\"pause\"",[36,2769,627],{"class":98},[36,2771,2772],{"class":38,"line":137},[36,2773,2044],{"class":98},[14,2775,2776],{},"注意：写好循环条件，避免死循环情况",[26,2778,2780],{"className":609,"code":2779,"language":611,"meta":31,"style":31},"\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",[33,2781,2782,2787,2794,2801,2811,2819,2823,2828,2855,2859,2864,2872,2899,2904,2909,2922,2932,2936,2946,2951,2964,2969,2983,2988,3003,3007,3020,3024,3029,3033,3046,3053,3057,3062,3067,3071],{"__ignoreMap":31},[36,2783,2784],{"class":38,"line":39},[36,2785,2786],{"class":42},"\u002F\u002F循环结构-猜数字\n",[36,2788,2789,2791],{"class":38,"line":46},[36,2790,2409],{"class":163},[36,2792,2793],{"class":59}," \u003Ciostream>\n",[36,2795,2796,2798],{"class":38,"line":52},[36,2797,2409],{"class":163},[36,2799,2800],{"class":59}," \u003Cctime>\n",[36,2802,2803,2805,2807,2809],{"class":38,"line":66},[36,2804,2417],{"class":163},[36,2806,2420],{"class":163},[36,2808,2423],{"class":55},[36,2810,1772],{"class":98},[36,2812,2813,2815,2817],{"class":38,"line":72},[36,2814,624],{"class":163},[36,2816,2432],{"class":55},[36,2818,2435],{"class":98},[36,2820,2821],{"class":38,"line":82},[36,2822,2025],{"class":98},[36,2824,2825],{"class":38,"line":88},[36,2826,2827],{"class":42},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[36,2829,2830,2833,2836,2839,2842,2844,2847,2849,2852],{"class":38,"line":113},[36,2831,2832],{"class":55},"    srand",[36,2834,2835],{"class":98},"((",[36,2837,2838],{"class":163},"unsigned",[36,2840,2841],{"class":163}," int",[36,2843,1043],{"class":98},[36,2845,2846],{"class":55},"time",[36,2848,621],{"class":98},[36,2850,2851],{"class":109},"NULL",[36,2853,2854],{"class":98},"));\n",[36,2856,2857],{"class":38,"line":119},[36,2858,247],{"emptyLinePlaceholder":246},[36,2860,2861],{"class":38,"line":131},[36,2862,2863],{"class":42},"    \u002F\u002F1.系统生成随机数\n",[36,2865,2866,2869],{"class":38,"line":137},[36,2867,2868],{"class":42},"    \u002F\u002Frand()%100",[36,2870,2871],{"class":42}," \u002F\u002F生成0-99的随机数\n",[36,2873,2874,2876,2878,2880,2883,2886,2888,2890,2892,2894,2896],{"class":38,"line":147},[36,2875,2444],{"class":163},[36,2877,2699],{"class":98},[36,2879,176],{"class":163},[36,2881,2882],{"class":55},"rand",[36,2884,2885],{"class":98},"()",[36,2887,942],{"class":163},[36,2889,926],{"class":109},[36,2891,1095],{"class":163},[36,2893,833],{"class":109},[36,2895,674],{"class":98},[36,2897,2898],{"class":42}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[36,2900,2901],{"class":38,"line":153},[36,2902,2903],{"class":42},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[36,2905,2906],{"class":38,"line":191},[36,2907,2908],{"class":42},"    \u002F\u002F2.玩家猜测\n",[36,2910,2911,2913,2916,2918,2920],{"class":38,"line":197},[36,2912,2444],{"class":163},[36,2914,2915],{"class":98}," val",[36,2917,176],{"class":163},[36,2919,807],{"class":109},[36,2921,1772],{"class":98},[36,2923,2924,2926,2928,2930],{"class":38,"line":217},[36,2925,2710],{"class":163},[36,2927,2130],{"class":98},[36,2929,833],{"class":109},[36,2931,627],{"class":98},[36,2933,2934],{"class":38,"line":223},[36,2935,2489],{"class":98},[36,2937,2938,2941,2943],{"class":38,"line":243},[36,2939,2940],{"class":98},"        cin",[36,2942,1908],{"class":163},[36,2944,2945],{"class":98},"val;\n",[36,2947,2948],{"class":38,"line":250},[36,2949,2950],{"class":42},"        \u002F\u002F3.判断玩家猜测\n",[36,2952,2953,2956,2959,2961],{"class":38,"line":256},[36,2954,2955],{"class":163},"        if",[36,2957,2958],{"class":98},"(val",[36,2960,179],{"class":163},[36,2962,2963],{"class":98},"num) \n",[36,2965,2966],{"class":38,"line":273},[36,2967,2968],{"class":98},"        {\n",[36,2970,2971,2974,2976,2979,2981],{"class":38,"line":278},[36,2972,2973],{"class":98},"            cout",[36,2975,1655],{"class":163},[36,2977,2978],{"class":59},"\"猜小了！\"",[36,2980,1655],{"class":163},[36,2982,1677],{"class":98},[36,2984,2985],{"class":38,"line":284},[36,2986,2987],{"class":98},"        }\n",[36,2989,2990,2993,2995,2998,3000],{"class":38,"line":315},[36,2991,2992],{"class":163},"        else",[36,2994,2172],{"class":163},[36,2996,2997],{"class":98}," (val",[36,2999,173],{"class":163},[36,3001,3002],{"class":98},"num)\n",[36,3004,3005],{"class":38,"line":320},[36,3006,2968],{"class":98},[36,3008,3009,3011,3013,3016,3018],{"class":38,"line":326},[36,3010,2973],{"class":98},[36,3012,1655],{"class":163},[36,3014,3015],{"class":59},"\"猜大了！\"",[36,3017,1655],{"class":163},[36,3019,1677],{"class":98},[36,3021,3022],{"class":38,"line":343},[36,3023,2987],{"class":98},[36,3025,3026],{"class":38,"line":348},[36,3027,3028],{"class":163},"        else\n",[36,3030,3031],{"class":38,"line":354},[36,3032,2968],{"class":98},[36,3034,3035,3037,3039,3042,3044],{"class":38,"line":370},[36,3036,2973],{"class":98},[36,3038,1655],{"class":163},[36,3040,3041],{"class":59},"\"猜对了！\"",[36,3043,1655],{"class":163},[36,3045,1677],{"class":98},[36,3047,3048,3051],{"class":38,"line":375},[36,3049,3050],{"class":163},"            break",[36,3052,1772],{"class":98},[36,3054,3055],{"class":38,"line":381},[36,3056,2987],{"class":98},[36,3058,3059],{"class":38,"line":399},[36,3060,3061],{"class":42},"        \u002F\u002F猜对 退出游戏\n",[36,3063,3064],{"class":38,"line":404},[36,3065,3066],{"class":42},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[36,3068,3069],{"class":38,"line":410},[36,3070,2646],{"class":98},[36,3072,3073],{"class":38,"line":423},[36,3074,2044],{"class":98},[571,3076,3077],{"start":46},[574,3078,3079,3080,3083],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[765,3081,3082],{},"do...while会先执行一次循环语句","，在判断循环语句",[26,3085,3087],{"className":609,"code":3086,"language":611,"meta":31,"style":31},"\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",[33,3088,3089,3094,3102,3106,3118,3126,3130,3147,3154,3158,3171,3181],{"__ignoreMap":31},[36,3090,3091],{"class":38,"line":39},[36,3092,3093],{"class":42},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[36,3095,3096,3098,3100],{"class":38,"line":46},[36,3097,624],{"class":163},[36,3099,2432],{"class":55},[36,3101,2435],{"class":98},[36,3103,3104],{"class":38,"line":52},[36,3105,2025],{"class":98},[36,3107,3108,3110,3112,3114,3116],{"class":38,"line":66},[36,3109,2444],{"class":163},[36,3111,2699],{"class":98},[36,3113,176],{"class":163},[36,3115,807],{"class":109},[36,3117,1772],{"class":98},[36,3119,3120,3123],{"class":38,"line":72},[36,3121,3122],{"class":163},"    do",[36,3124,3125],{"class":98}," \n",[36,3127,3128],{"class":38,"line":82},[36,3129,2489],{"class":98},[36,3131,3132,3135,3137,3139,3141,3143,3145],{"class":38,"line":88},[36,3133,3134],{"class":55},"        std",[36,3136,2731],{"class":98},[36,3138,1655],{"class":163},[36,3140,2137],{"class":98},[36,3142,1655],{"class":163},[36,3144,2740],{"class":55},[36,3146,2743],{"class":98},[36,3148,3149,3151],{"class":38,"line":113},[36,3150,2748],{"class":98},[36,3152,3153],{"class":163},"++\n",[36,3155,3156],{"class":38,"line":119},[36,3157,2646],{"class":98},[36,3159,3160,3162,3164,3166,3168],{"class":38,"line":131},[36,3161,2710],{"class":163},[36,3163,2713],{"class":98},[36,3165,179],{"class":163},[36,3167,1060],{"class":109},[36,3169,3170],{"class":98},");\n",[36,3172,3173,3175,3177,3179],{"class":38,"line":137},[36,3174,2762],{"class":55},[36,3176,621],{"class":98},[36,3178,2767],{"class":59},[36,3180,3170],{"class":98},[36,3182,3183],{"class":38,"line":147},[36,3184,2044],{"class":98},[14,3186,3187],{},"案例-水仙花数",[14,3189,3190],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,3192,3193],{},"例如：1^3+5^3+3^3=153",[14,3195,3196],{},"请用do...while语句，求出所有3位数的水仙花数",[26,3198,3200],{"className":609,"code":3199,"language":611,"meta":31,"style":31},"#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",[33,3201,3202,3208,3218,3226,3230,3235,3247,3253,3257,3262,3278,3294,3310,3325,3344,3359,3407,3411,3423,3427,3435,3439,3453],{"__ignoreMap":31},[36,3203,3204,3206],{"class":38,"line":39},[36,3205,2409],{"class":163},[36,3207,2793],{"class":59},[36,3209,3210,3212,3214,3216],{"class":38,"line":46},[36,3211,2417],{"class":163},[36,3213,2420],{"class":163},[36,3215,2423],{"class":55},[36,3217,1772],{"class":98},[36,3219,3220,3222,3224],{"class":38,"line":52},[36,3221,624],{"class":163},[36,3223,2432],{"class":55},[36,3225,2435],{"class":98},[36,3227,3228],{"class":38,"line":66},[36,3229,2025],{"class":98},[36,3231,3232],{"class":38,"line":72},[36,3233,3234],{"class":42},"    \u002F\u002F1.先打印所有三位数字\n",[36,3236,3237,3239,3241,3243,3245],{"class":38,"line":82},[36,3238,2444],{"class":163},[36,3240,2699],{"class":98},[36,3242,176],{"class":163},[36,3244,926],{"class":109},[36,3246,1772],{"class":98},[36,3248,3249,3251],{"class":38,"line":88},[36,3250,3122],{"class":163},[36,3252,3125],{"class":98},[36,3254,3255],{"class":38,"line":113},[36,3256,2489],{"class":98},[36,3258,3259],{"class":38,"line":119},[36,3260,3261],{"class":42},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[36,3263,3264,3267,3269,3271,3273,3275],{"class":38,"line":131},[36,3265,3266],{"class":163},"        int",[36,3268,1877],{"class":98},[36,3270,176],{"class":163},[36,3272,807],{"class":109},[36,3274,674],{"class":98},[36,3276,3277],{"class":42}," \u002F\u002F个位\n",[36,3279,3280,3282,3285,3287,3289,3291],{"class":38,"line":137},[36,3281,3266],{"class":163},[36,3283,3284],{"class":98}," b",[36,3286,176],{"class":163},[36,3288,807],{"class":109},[36,3290,674],{"class":98},[36,3292,3293],{"class":42}," \u002F\u002F十位\n",[36,3295,3296,3298,3301,3303,3305,3307],{"class":38,"line":147},[36,3297,3266],{"class":163},[36,3299,3300],{"class":98}," c",[36,3302,176],{"class":163},[36,3304,807],{"class":109},[36,3306,674],{"class":98},[36,3308,3309],{"class":42}," \u002F\u002F百位\n",[36,3311,3312,3315,3317,3319,3321,3323],{"class":38,"line":153},[36,3313,3314],{"class":98},"        a",[36,3316,176],{"class":163},[36,3318,2137],{"class":98},[36,3320,942],{"class":163},[36,3322,1060],{"class":109},[36,3324,1772],{"class":98},[36,3326,3327,3330,3332,3334,3336,3338,3340,3342],{"class":38,"line":191},[36,3328,3329],{"class":98},"        b",[36,3331,176],{"class":163},[36,3333,2137],{"class":98},[36,3335,1198],{"class":163},[36,3337,1060],{"class":109},[36,3339,942],{"class":163},[36,3341,1060],{"class":109},[36,3343,1772],{"class":98},[36,3345,3346,3349,3351,3353,3355,3357],{"class":38,"line":197},[36,3347,3348],{"class":98},"        c",[36,3350,176],{"class":163},[36,3352,2137],{"class":98},[36,3354,1198],{"class":163},[36,3356,926],{"class":109},[36,3358,1772],{"class":98},[36,3360,3361,3363,3365,3367,3369,3371,3373,3375,3377,3379,3381,3383,3385,3387,3389,3391,3393,3395,3398,3401,3404],{"class":38,"line":217},[36,3362,2955],{"class":163},[36,3364,2301],{"class":98},[36,3366,1069],{"class":163},[36,3368,20],{"class":98},[36,3370,1069],{"class":163},[36,3372,20],{"class":98},[36,3374,1095],{"class":163},[36,3376,878],{"class":98},[36,3378,1069],{"class":163},[36,3380,878],{"class":98},[36,3382,1069],{"class":163},[36,3384,878],{"class":98},[36,3386,1095],{"class":163},[36,3388,903],{"class":98},[36,3390,1069],{"class":163},[36,3392,903],{"class":98},[36,3394,1069],{"class":163},[36,3396,3397],{"class":98},"c ",[36,3399,3400],{"class":163},"==",[36,3402,3403],{"class":98}," num)",[36,3405,3406],{"class":42}," \u002F\u002F如果是水仙花数，才打印\n",[36,3408,3409],{"class":38,"line":223},[36,3410,2968],{"class":98},[36,3412,3413,3415,3417,3419,3421],{"class":38,"line":243},[36,3414,2973],{"class":98},[36,3416,1655],{"class":163},[36,3418,2137],{"class":98},[36,3420,1655],{"class":163},[36,3422,1677],{"class":98},[36,3424,3425],{"class":38,"line":250},[36,3426,2987],{"class":98},[36,3428,3429,3431,3433],{"class":38,"line":256},[36,3430,2748],{"class":98},[36,3432,2751],{"class":163},[36,3434,1772],{"class":98},[36,3436,3437],{"class":38,"line":273},[36,3438,2646],{"class":98},[36,3440,3441,3443,3446,3448,3451],{"class":38,"line":278},[36,3442,2710],{"class":163},[36,3444,3445],{"class":98}," (num ",[36,3447,179],{"class":163},[36,3449,3450],{"class":109}," 1000",[36,3452,3170],{"class":98},[36,3454,3455],{"class":38,"line":284},[36,3456,2044],{"class":98},[571,3458,3459],{"start":52},[574,3460,3461],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[26,3463,3465],{"className":609,"code":3464,"language":611,"meta":31,"style":31},"\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",[33,3466,3467,3472,3501,3505,3517,3521,3526,3537,3544,3548,3562,3566,3573,3577,3589,3598],{"__ignoreMap":31},[36,3468,3469],{"class":38,"line":39},[36,3470,3471],{"class":42},"\u002F\u002F从数字0-9打印\n",[36,3473,3474,3477,3479,3481,3484,3486,3488,3491,3493,3495,3497,3499],{"class":38,"line":46},[36,3475,3476],{"class":163},"for",[36,3478,621],{"class":98},[36,3480,624],{"class":163},[36,3482,3483],{"class":98}," i",[36,3485,176],{"class":163},[36,3487,807],{"class":109},[36,3489,3490],{"class":98},";i",[36,3492,179],{"class":163},[36,3494,1060],{"class":109},[36,3496,3490],{"class":98},[36,3498,2751],{"class":163},[36,3500,627],{"class":98},[36,3502,3503],{"class":38,"line":52},[36,3504,2025],{"class":98},[36,3506,3507,3509,3511,3513,3515],{"class":38,"line":66},[36,3508,2030],{"class":98},[36,3510,1655],{"class":163},[36,3512,1055],{"class":98},[36,3514,1655],{"class":163},[36,3516,1677],{"class":98},[36,3518,3519],{"class":38,"line":72},[36,3520,2044],{"class":98},[36,3522,3523],{"class":38,"line":82},[36,3524,3525],{"class":42},"\u002F\u002F上式可以进行拆分\n",[36,3527,3528,3530,3532,3534],{"class":38,"line":88},[36,3529,624],{"class":163},[36,3531,3483],{"class":98},[36,3533,176],{"class":163},[36,3535,3536],{"class":109},"0\n",[36,3538,3539,3541],{"class":38,"line":113},[36,3540,3476],{"class":163},[36,3542,3543],{"class":98},"(;;;)\n",[36,3545,3546],{"class":38,"line":119},[36,3547,2025],{"class":98},[36,3549,3550,3553,3556,3558,3560],{"class":38,"line":131},[36,3551,3552],{"class":163},"    if",[36,3554,3555],{"class":98},"(i",[36,3557,2178],{"class":163},[36,3559,1060],{"class":109},[36,3561,627],{"class":98},[36,3563,3564],{"class":38,"line":137},[36,3565,2489],{"class":98},[36,3567,3568,3571],{"class":38,"line":147},[36,3569,3570],{"class":163},"        break",[36,3572,1772],{"class":98},[36,3574,3575],{"class":38,"line":153},[36,3576,2646],{"class":98},[36,3578,3579,3581,3583,3585,3587],{"class":38,"line":191},[36,3580,2030],{"class":98},[36,3582,1655],{"class":163},[36,3584,1055],{"class":98},[36,3586,1655],{"class":163},[36,3588,1677],{"class":98},[36,3590,3591,3594,3596],{"class":38,"line":197},[36,3592,3593],{"class":98},"    i",[36,3595,2751],{"class":163},[36,3597,1772],{"class":98},[36,3599,3600],{"class":38,"line":217},[36,3601,2044],{"class":98},[14,3603,3604],{},"小练习",[26,3606,3608],{"className":609,"code":3607,"language":611,"meta":31,"style":31},"#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",[33,3609,3610,3616,3626,3634,3638,3643,3648,3676,3680,3685,3690,3731,3735,3748,3752,3756,3760,3772,3776,3780],{"__ignoreMap":31},[36,3611,3612,3614],{"class":38,"line":39},[36,3613,2409],{"class":163},[36,3615,2412],{"class":59},[36,3617,3618,3620,3622,3624],{"class":38,"line":46},[36,3619,2417],{"class":163},[36,3621,2420],{"class":163},[36,3623,2423],{"class":55},[36,3625,1772],{"class":98},[36,3627,3628,3630,3632],{"class":38,"line":52},[36,3629,624],{"class":163},[36,3631,2432],{"class":55},[36,3633,2435],{"class":98},[36,3635,3636],{"class":38,"line":66},[36,3637,2025],{"class":98},[36,3639,3640],{"class":38,"line":72},[36,3641,3642],{"class":42},"    \u002F\u002F敲桌子案例\n",[36,3644,3645],{"class":38,"line":82},[36,3646,3647],{"class":42},"    \u002F\u002F1.先输出1-100的数字\n",[36,3649,3650,3653,3655,3657,3659,3661,3663,3666,3668,3670,3672,3674],{"class":38,"line":88},[36,3651,3652],{"class":163},"    for",[36,3654,621],{"class":98},[36,3656,624],{"class":163},[36,3658,3483],{"class":98},[36,3660,176],{"class":163},[36,3662,833],{"class":109},[36,3664,3665],{"class":98},"; i",[36,3667,2067],{"class":163},[36,3669,926],{"class":109},[36,3671,3665],{"class":98},[36,3673,2751],{"class":163},[36,3675,627],{"class":98},[36,3677,3678],{"class":38,"line":113},[36,3679,2489],{"class":98},[36,3681,3682],{"class":38,"line":119},[36,3683,3684],{"class":42},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[36,3686,3687],{"class":38,"line":131},[36,3688,3689],{"class":42},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[36,3691,3692,3694,3696,3698,3700,3702,3704,3707,3709,3711,3713,3715,3717,3719,3721,3723,3725,3727,3729],{"class":38,"line":137},[36,3693,2955],{"class":163},[36,3695,3555],{"class":98},[36,3697,942],{"class":163},[36,3699,983],{"class":109},[36,3701,3400],{"class":163},[36,3703,807],{"class":109},[36,3705,3706],{"class":163}," ||",[36,3708,3483],{"class":98},[36,3710,942],{"class":163},[36,3712,1060],{"class":109},[36,3714,3400],{"class":163},[36,3716,983],{"class":109},[36,3718,3706],{"class":163},[36,3720,3483],{"class":98},[36,3722,1198],{"class":163},[36,3724,1060],{"class":109},[36,3726,3400],{"class":163},[36,3728,983],{"class":109},[36,3730,627],{"class":98},[36,3732,3733],{"class":38,"line":147},[36,3734,2968],{"class":98},[36,3736,3737,3739,3741,3744,3746],{"class":38,"line":153},[36,3738,2973],{"class":98},[36,3740,1655],{"class":163},[36,3742,3743],{"class":59},"\"敲桌子\"",[36,3745,1655],{"class":163},[36,3747,1677],{"class":98},[36,3749,3750],{"class":38,"line":191},[36,3751,2987],{"class":98},[36,3753,3754],{"class":38,"line":197},[36,3755,3028],{"class":163},[36,3757,3758],{"class":38,"line":217},[36,3759,2968],{"class":98},[36,3761,3762,3764,3766,3768,3770],{"class":38,"line":223},[36,3763,2973],{"class":98},[36,3765,1655],{"class":163},[36,3767,1055],{"class":98},[36,3769,1655],{"class":163},[36,3771,1677],{"class":98},[36,3773,3774],{"class":38,"line":243},[36,3775,2987],{"class":98},[36,3777,3778],{"class":38,"line":250},[36,3779,2646],{"class":98},[36,3781,3782],{"class":38,"line":256},[36,3783,2044],{"class":98},[14,3785,3786],{},"嵌套实现星图",[26,3788,3790],{"className":609,"code":3789,"language":611,"meta":31,"style":31},"#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",[33,3791,3792,3798,3808,3816,3820,3846,3850,3879,3883,3894,3898,3907,3911],{"__ignoreMap":31},[36,3793,3794,3796],{"class":38,"line":39},[36,3795,2409],{"class":163},[36,3797,2412],{"class":59},[36,3799,3800,3802,3804,3806],{"class":38,"line":46},[36,3801,2417],{"class":163},[36,3803,2420],{"class":163},[36,3805,2423],{"class":55},[36,3807,1772],{"class":98},[36,3809,3810,3812,3814],{"class":38,"line":52},[36,3811,624],{"class":163},[36,3813,2432],{"class":55},[36,3815,2435],{"class":98},[36,3817,3818],{"class":38,"line":66},[36,3819,2025],{"class":98},[36,3821,3822,3824,3826,3828,3830,3832,3834,3836,3838,3840,3842,3844],{"class":38,"line":72},[36,3823,3652],{"class":163},[36,3825,2130],{"class":98},[36,3827,624],{"class":163},[36,3829,3483],{"class":98},[36,3831,176],{"class":163},[36,3833,807],{"class":109},[36,3835,3490],{"class":98},[36,3837,179],{"class":163},[36,3839,1060],{"class":109},[36,3841,3490],{"class":98},[36,3843,2751],{"class":163},[36,3845,627],{"class":98},[36,3847,3848],{"class":38,"line":82},[36,3849,2489],{"class":98},[36,3851,3852,3855,3857,3859,3862,3864,3866,3869,3871,3873,3875,3877],{"class":38,"line":88},[36,3853,3854],{"class":163},"        for",[36,3856,2130],{"class":98},[36,3858,624],{"class":163},[36,3860,3861],{"class":98}," j",[36,3863,176],{"class":163},[36,3865,807],{"class":109},[36,3867,3868],{"class":98},";j",[36,3870,179],{"class":163},[36,3872,1060],{"class":109},[36,3874,3868],{"class":98},[36,3876,2751],{"class":163},[36,3878,627],{"class":98},[36,3880,3881],{"class":38,"line":113},[36,3882,2968],{"class":98},[36,3884,3885,3887,3889,3892],{"class":38,"line":119},[36,3886,2973],{"class":98},[36,3888,1655],{"class":163},[36,3890,3891],{"class":59},"\"*\"",[36,3893,1772],{"class":98},[36,3895,3896],{"class":38,"line":131},[36,3897,2987],{"class":98},[36,3899,3900,3903,3905],{"class":38,"line":137},[36,3901,3902],{"class":98},"        cout",[36,3904,1655],{"class":163},[36,3906,1677],{"class":98},[36,3908,3909],{"class":38,"line":147},[36,3910,2646],{"class":98},[36,3912,3913],{"class":38,"line":153},[36,3914,2044],{"class":98},[14,3916,3917],{},"乘法口诀表",[26,3919,3921],{"className":609,"code":3920,"language":611,"meta":31,"style":31},"#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",[33,3922,3923,3929,3939,3947,3951,3977,3981,4006,4010,4050,4054,4062,4066],{"__ignoreMap":31},[36,3924,3925,3927],{"class":38,"line":39},[36,3926,2409],{"class":163},[36,3928,2793],{"class":59},[36,3930,3931,3933,3935,3937],{"class":38,"line":46},[36,3932,2417],{"class":163},[36,3934,2420],{"class":163},[36,3936,2423],{"class":55},[36,3938,1772],{"class":98},[36,3940,3941,3943,3945],{"class":38,"line":52},[36,3942,624],{"class":163},[36,3944,2432],{"class":55},[36,3946,2435],{"class":98},[36,3948,3949],{"class":38,"line":66},[36,3950,2025],{"class":98},[36,3952,3953,3955,3957,3959,3961,3963,3965,3967,3969,3971,3973,3975],{"class":38,"line":72},[36,3954,3652],{"class":163},[36,3956,621],{"class":98},[36,3958,624],{"class":163},[36,3960,3483],{"class":98},[36,3962,176],{"class":163},[36,3964,833],{"class":109},[36,3966,3490],{"class":98},[36,3968,179],{"class":163},[36,3970,1060],{"class":109},[36,3972,3490],{"class":98},[36,3974,2751],{"class":163},[36,3976,627],{"class":98},[36,3978,3979],{"class":38,"line":82},[36,3980,2489],{"class":98},[36,3982,3983,3985,3987,3989,3991,3993,3995,3997,3999,4002,4004],{"class":38,"line":88},[36,3984,3854],{"class":163},[36,3986,621],{"class":98},[36,3988,624],{"class":163},[36,3990,3861],{"class":98},[36,3992,176],{"class":163},[36,3994,833],{"class":109},[36,3996,3868],{"class":98},[36,3998,2067],{"class":163},[36,4000,4001],{"class":98},"i;j",[36,4003,2751],{"class":163},[36,4005,627],{"class":98},[36,4007,4008],{"class":38,"line":113},[36,4009,2968],{"class":98},[36,4011,4012,4014,4016,4018,4020,4022,4024,4026,4028,4031,4033,4035,4037,4039,4041,4044,4046,4048],{"class":38,"line":119},[36,4013,2973],{"class":98},[36,4015,1655],{"class":163},[36,4017,1081],{"class":98},[36,4019,1655],{"class":163},[36,4021,3891],{"class":59},[36,4023,1655],{"class":163},[36,4025,1055],{"class":98},[36,4027,1655],{"class":163},[36,4029,4030],{"class":59},"\"=\"",[36,4032,1655],{"class":163},[36,4034,1055],{"class":98},[36,4036,1069],{"class":163},[36,4038,1081],{"class":98},[36,4040,1655],{"class":163},[36,4042,4043],{"class":59},"'",[36,4045,1712],{"class":109},[36,4047,4043],{"class":59},[36,4049,1772],{"class":98},[36,4051,4052],{"class":38,"line":131},[36,4053,2987],{"class":98},[36,4055,4056,4058,4060],{"class":38,"line":137},[36,4057,3902],{"class":98},[36,4059,1655],{"class":163},[36,4061,1677],{"class":98},[36,4063,4064],{"class":38,"line":147},[36,4065,2646],{"class":98},[36,4067,4068],{"class":38,"line":153},[36,4069,2044],{"class":98},[588,4071,4073],{"id":4072},"_163跳出语句","1.6.3跳出语句",[571,4075,4076],{},[574,4077,4078],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,4080,4081],{},"break使用时机：",[1618,4083,4084,4087,4090],{},[574,4085,4086],{},"出现在switch条件语句中，作用是终止case并跳出switch",[574,4088,4089],{},"出现在循环结构中，作用是跳出当前的循环结构",[574,4091,4092],{},"出现在嵌套循环中，跳出最近的内层循环语句",[571,4094,4095,4098],{"start":46},[574,4096,4097],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[574,4099,4100],{},"goto语句\n语法：goto 标记;",[14,4102,4103],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[26,4105,4107],{"className":609,"code":4106,"language":611,"meta":31,"style":31},"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",[33,4108,4109,4117,4121,4134,4144,4157,4170,4183,4191,4207],{"__ignoreMap":31},[36,4110,4111,4113,4115],{"class":38,"line":39},[36,4112,624],{"class":163},[36,4114,2432],{"class":55},[36,4116,2435],{"class":98},[36,4118,4119],{"class":38,"line":46},[36,4120,2025],{"class":98},[36,4122,4123,4125,4127,4130,4132],{"class":38,"line":52},[36,4124,2030],{"class":98},[36,4126,1655],{"class":163},[36,4128,4129],{"class":59},"\"1\"",[36,4131,1655],{"class":163},[36,4133,1677],{"class":98},[36,4135,4136,4139,4142],{"class":38,"line":66},[36,4137,4138],{"class":163},"    goto",[36,4140,4141],{"class":55}," FLAG",[36,4143,1772],{"class":98},[36,4145,4146,4148,4150,4153,4155],{"class":38,"line":72},[36,4147,2030],{"class":98},[36,4149,1655],{"class":163},[36,4151,4152],{"class":59},"\"2\"",[36,4154,1655],{"class":163},[36,4156,1677],{"class":98},[36,4158,4159,4161,4163,4166,4168],{"class":38,"line":82},[36,4160,2030],{"class":98},[36,4162,1655],{"class":163},[36,4164,4165],{"class":59},"\"3\"",[36,4167,1655],{"class":163},[36,4169,1677],{"class":98},[36,4171,4172,4174,4176,4179,4181],{"class":38,"line":88},[36,4173,2030],{"class":98},[36,4175,1655],{"class":163},[36,4177,4178],{"class":59},"\"4\"",[36,4180,1655],{"class":163},[36,4182,1677],{"class":98},[36,4184,4185,4188],{"class":38,"line":113},[36,4186,4187],{"class":55},"    FLAG",[36,4189,4190],{"class":98},":\n",[36,4192,4193,4195,4197,4200,4202,4204],{"class":38,"line":119},[36,4194,2030],{"class":98},[36,4196,1655],{"class":163},[36,4198,4199],{"class":59},"\"5\"",[36,4201,1655],{"class":163},[36,4203,1720],{"class":98},[36,4205,4206],{"class":42},"\u002F\u002F跳过了2,3,4,直接到5\n",[36,4208,4209],{"class":38,"line":131},[36,4210,2044],{"class":98},[559,4212,4214],{"id":4213},"_17数组","1.7数组",[588,4216,4218],{"id":4217},"_171一维数组","1.7.1一维数组",[571,4220,4221],{},[574,4222,4223],{},"一维数组定义方式",[753,4225,4226,4236],{},[756,4227,4228],{},[759,4229,4230,4233],{},[762,4231,4232],{},"方式",[762,4234,4235],{},"注意事项",[800,4237,4238,4252,4262],{},[759,4239,4240,4246],{},[805,4241,4242,4243,674],{},"数据类型 数组名",[36,4244,4245],{},"数组长度",[805,4247,4248,4249,4251],{},"这种方式是先定义再arr",[36,4250,1055],{},"赋值",[759,4253,4254,4259],{},[805,4255,4242,4256,4258],{},[36,4257,4245],{},"={值1,值2....};",[805,4260,4261],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[759,4263,4264,4268],{},[805,4265,4242,4266,4258],{},[36,4267],{},[805,4269,4270,4271,4273],{},"int arr",[36,4272],{},";这是不正确的，按照这样的方式定义必须有初始长度",[571,4275,4276],{"start":46},[574,4277,4278],{},"一维数组数组名\n用途：",[1618,4280,4281],{},[574,4282,4283],{},"1.可以统计整个数组在内存中的长度：",[26,4285,4287],{"className":609,"code":4286,"language":611,"meta":31,"style":31},"sizeof(arr);\nsizeof(arr[0]);\n",[33,4288,4289,4296],{"__ignoreMap":31},[36,4290,4291,4293],{"class":38,"line":39},[36,4292,618],{"class":163},[36,4294,4295],{"class":98},"(arr);\n",[36,4297,4298,4300,4303,4305],{"class":38,"line":46},[36,4299,618],{"class":163},[36,4301,4302],{"class":98},"(arr[",[36,4304,807],{"class":109},[36,4306,4307],{"class":98},"]);\n",[1618,4309,4310],{},[574,4311,4312],{},"2.可以获取数组在内存中的首地址:",[26,4314,4316],{"className":609,"code":4315,"language":611,"meta":31,"style":31},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[33,4317,4318,4323,4336,4341],{"__ignoreMap":31},[36,4319,4320],{"class":38,"line":39},[36,4321,4322],{"class":42},"\u002F\u002F查看16进制的首地址\n",[36,4324,4325,4327,4329,4332,4334],{"class":38,"line":46},[36,4326,1848],{"class":98},[36,4328,1655],{"class":163},[36,4330,4331],{"class":98},"arr",[36,4333,1655],{"class":163},[36,4335,1677],{"class":98},[36,4337,4338],{"class":38,"line":52},[36,4339,4340],{"class":42},"\u002F\u002F看10进制数\n",[36,4342,4343,4345,4347,4349,4351,4353,4355,4358,4360,4362,4364],{"class":38,"line":66},[36,4344,1848],{"class":98},[36,4346,1655],{"class":163},[36,4348,621],{"class":98},[36,4350,624],{"class":163},[36,4352,1043],{"class":98},[36,4354,967],{"class":163},[36,4356,4357],{"class":98},"arr[",[36,4359,807],{"class":109},[36,4361,1552],{"class":98},[36,4363,1655],{"class":163},[36,4365,1677],{"class":98},[14,4367,4368],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1618,4370,4371],{},[574,4372,4373],{},"1️⃣五只小猪称体重",[26,4375,4377],{"className":609,"code":4376,"language":611,"meta":31,"style":31},"#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",[33,4378,4379,4385,4395,4403,4407,4447,4460,4486,4490,4502,4506,4516,4520,4524,4537,4547],{"__ignoreMap":31},[36,4380,4381,4383],{"class":38,"line":39},[36,4382,2409],{"class":163},[36,4384,2412],{"class":59},[36,4386,4387,4389,4391,4393],{"class":38,"line":46},[36,4388,2417],{"class":163},[36,4390,2420],{"class":163},[36,4392,2423],{"class":55},[36,4394,1772],{"class":98},[36,4396,4397,4399,4401],{"class":38,"line":52},[36,4398,624],{"class":163},[36,4400,2432],{"class":55},[36,4402,2435],{"class":98},[36,4404,4405],{"class":38,"line":66},[36,4406,2025],{"class":98},[36,4408,4409,4411,4414,4416,4418,4420,4422,4425,4427,4430,4432,4434,4436,4439,4441,4444],{"class":38,"line":72},[36,4410,2444],{"class":163},[36,4412,4413],{"class":98}," arr[",[36,4415,933],{"class":109},[36,4417,1552],{"class":98},[36,4419,176],{"class":163},[36,4421,1509],{"class":98},[36,4423,4424],{"class":109},"300",[36,4426,992],{"class":98},[36,4428,4429],{"class":109},"350",[36,4431,992],{"class":98},[36,4433,2190],{"class":109},[36,4435,992],{"class":98},[36,4437,4438],{"class":109},"400",[36,4440,992],{"class":98},[36,4442,4443],{"class":109},"250",[36,4445,4446],{"class":98},"};\n",[36,4448,4449,4451,4454,4456,4458],{"class":38,"line":82},[36,4450,2444],{"class":163},[36,4452,4453],{"class":98}," tmp",[36,4455,176],{"class":163},[36,4457,807],{"class":109},[36,4459,1772],{"class":98},[36,4461,4462,4464,4466,4468,4470,4472,4474,4476,4478,4480,4482,4484],{"class":38,"line":88},[36,4463,3652],{"class":163},[36,4465,2130],{"class":98},[36,4467,624],{"class":163},[36,4469,3483],{"class":98},[36,4471,176],{"class":163},[36,4473,807],{"class":109},[36,4475,3490],{"class":98},[36,4477,179],{"class":163},[36,4479,933],{"class":109},[36,4481,3490],{"class":98},[36,4483,2751],{"class":163},[36,4485,627],{"class":98},[36,4487,4488],{"class":38,"line":113},[36,4489,2489],{"class":98},[36,4491,4492,4494,4497,4499],{"class":38,"line":119},[36,4493,2955],{"class":163},[36,4495,4496],{"class":98},"(tmp",[36,4498,179],{"class":163},[36,4500,4501],{"class":98},"arr[i])\n",[36,4503,4504],{"class":38,"line":131},[36,4505,2968],{"class":98},[36,4507,4508,4511,4513],{"class":38,"line":137},[36,4509,4510],{"class":98},"            tmp",[36,4512,176],{"class":163},[36,4514,4515],{"class":98},"arr[i];\n",[36,4517,4518],{"class":38,"line":147},[36,4519,2987],{"class":98},[36,4521,4522],{"class":38,"line":153},[36,4523,2646],{"class":98},[36,4525,4526,4528,4530,4533,4535],{"class":38,"line":191},[36,4527,2030],{"class":98},[36,4529,1655],{"class":163},[36,4531,4532],{"class":98},"tmp",[36,4534,1655],{"class":163},[36,4536,1677],{"class":98},[36,4538,4539,4542,4545],{"class":38,"line":197},[36,4540,4541],{"class":163},"    return",[36,4543,4544],{"class":109}," 0",[36,4546,1772],{"class":98},[36,4548,4549],{"class":38,"line":217},[36,4550,2044],{"class":98},[1618,4552,4553],{},[574,4554,4555],{},"2️⃣数组元素逆置",[26,4557,4559],{"className":609,"code":4558,"language":611,"meta":31,"style":31},"\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",[33,4560,4561,4566,4572,4582,4590,4594,4629,4645,4677,4690,4695,4700,4712,4722,4732,4737,4746,4756,4761,4766,4793,4797,4813,4817,4828,4837],{"__ignoreMap":31},[36,4562,4563],{"class":38,"line":39},[36,4564,4565],{"class":42},"\u002F\u002F元素逆置\n",[36,4567,4568,4570],{"class":38,"line":46},[36,4569,2409],{"class":163},[36,4571,2412],{"class":59},[36,4573,4574,4576,4578,4580],{"class":38,"line":52},[36,4575,2417],{"class":163},[36,4577,2420],{"class":163},[36,4579,2423],{"class":55},[36,4581,1772],{"class":98},[36,4583,4584,4586,4588],{"class":38,"line":66},[36,4585,624],{"class":163},[36,4587,2432],{"class":55},[36,4589,2435],{"class":98},[36,4591,4592],{"class":38,"line":72},[36,4593,2025],{"class":98},[36,4595,4596,4599,4601,4603,4605,4607,4609,4611,4613,4615,4617,4619,4621,4623,4625,4627],{"class":38,"line":82},[36,4597,4598],{"class":163},"   int",[36,4600,4413],{"class":98},[36,4602,933],{"class":109},[36,4604,1552],{"class":98},[36,4606,176],{"class":163},[36,4608,1509],{"class":98},[36,4610,833],{"class":109},[36,4612,992],{"class":98},[36,4614,694],{"class":109},[36,4616,992],{"class":98},[36,4618,689],{"class":109},[36,4620,992],{"class":98},[36,4622,908],{"class":109},[36,4624,992],{"class":98},[36,4626,933],{"class":109},[36,4628,4446],{"class":98},[36,4630,4631,4633,4636,4638,4640,4642],{"class":38,"line":88},[36,4632,4598],{"class":163},[36,4634,4635],{"class":98}," start",[36,4637,176],{"class":163},[36,4639,807],{"class":109},[36,4641,674],{"class":98},[36,4643,4644],{"class":42},"\u002F\u002F起始下标\n",[36,4646,4647,4649,4652,4655,4658,4661,4663,4665,4668,4670,4672,4674],{"class":38,"line":113},[36,4648,4598],{"class":163},[36,4650,4651],{"class":98}," end",[36,4653,4654],{"class":163},"=sizeof",[36,4656,4657],{"class":98},"(arr)",[36,4659,4660],{"class":163},"\u002Fsizeof",[36,4662,4302],{"class":98},[36,4664,807],{"class":109},[36,4666,4667],{"class":98},"])",[36,4669,1146],{"class":163},[36,4671,833],{"class":109},[36,4673,674],{"class":98},[36,4675,4676],{"class":42},"\u002F\u002F结束下标\n",[36,4678,4679,4682,4685,4687],{"class":38,"line":119},[36,4680,4681],{"class":163},"   while",[36,4683,4684],{"class":98}," (start",[36,4686,179],{"class":163},[36,4688,4689],{"class":98},"end)\n",[36,4691,4692],{"class":38,"line":131},[36,4693,4694],{"class":98},"   {\n",[36,4696,4697],{"class":38,"line":137},[36,4698,4699],{"class":42},"    \u002F\u002F实现元素互换代码\n",[36,4701,4702,4704,4707,4709],{"class":38,"line":147},[36,4703,2444],{"class":163},[36,4705,4706],{"class":98}," temp",[36,4708,176],{"class":163},[36,4710,4711],{"class":98},"arr[start];\n",[36,4713,4714,4717,4719],{"class":38,"line":153},[36,4715,4716],{"class":98},"    arr[start]",[36,4718,176],{"class":163},[36,4720,4721],{"class":98},"arr[end];\n",[36,4723,4724,4727,4729],{"class":38,"line":191},[36,4725,4726],{"class":98},"    arr[end]",[36,4728,176],{"class":163},[36,4730,4731],{"class":98},"temp;\n",[36,4733,4734],{"class":38,"line":197},[36,4735,4736],{"class":42},"    \u002F\u002F下标更新\n",[36,4738,4739,4742,4744],{"class":38,"line":217},[36,4740,4741],{"class":98},"    start",[36,4743,2751],{"class":163},[36,4745,1772],{"class":98},[36,4747,4748,4751,4754],{"class":38,"line":223},[36,4749,4750],{"class":98},"    end",[36,4752,4753],{"class":163},"--",[36,4755,1772],{"class":98},[36,4757,4758],{"class":38,"line":243},[36,4759,4760],{"class":98},"   }\n",[36,4762,4763],{"class":38,"line":250},[36,4764,4765],{"class":42},"   \u002F\u002F输出逆置后的数组\n",[36,4767,4768,4771,4773,4775,4777,4779,4781,4783,4785,4787,4789,4791],{"class":38,"line":256},[36,4769,4770],{"class":163},"   for",[36,4772,2130],{"class":98},[36,4774,624],{"class":163},[36,4776,3483],{"class":98},[36,4778,176],{"class":163},[36,4780,807],{"class":109},[36,4782,3490],{"class":98},[36,4784,179],{"class":163},[36,4786,933],{"class":109},[36,4788,3490],{"class":98},[36,4790,2751],{"class":163},[36,4792,627],{"class":98},[36,4794,4795],{"class":38,"line":273},[36,4796,4694],{"class":98},[36,4798,4799,4801,4803,4806,4808,4811],{"class":38,"line":278},[36,4800,2030],{"class":98},[36,4802,1655],{"class":163},[36,4804,4805],{"class":98},"arr[i]",[36,4807,1655],{"class":163},[36,4809,4810],{"class":59},"\" \"",[36,4812,1772],{"class":98},[36,4814,4815],{"class":38,"line":284},[36,4816,4760],{"class":98},[36,4818,4819,4822,4824,4826],{"class":38,"line":315},[36,4820,4821],{"class":55},"   system",[36,4823,621],{"class":98},[36,4825,2767],{"class":59},[36,4827,3170],{"class":98},[36,4829,4830,4833,4835],{"class":38,"line":320},[36,4831,4832],{"class":163},"   return",[36,4834,4544],{"class":109},[36,4836,1772],{"class":98},[36,4838,4839],{"class":38,"line":326},[36,4840,2044],{"class":98},[1618,4842,4843],{},[574,4844,4845],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[26,4847,4849],{"className":609,"code":4848,"language":611,"meta":31,"style":31},"\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",[33,4850,4851,4856,4862,4872,4880,4884,4936,4949,4975,4979,4993,4997,5002,5007,5037,5041,5046,5080,5084,5089,5109,5114,5126,5142,5157,5162,5166,5170,5183,5209,5213,5227,5231,5239],{"__ignoreMap":31},[36,4852,4853],{"class":38,"line":39},[36,4854,4855],{"class":42},"\u002F\u002F冒泡排序,升序\n",[36,4857,4858,4860],{"class":38,"line":46},[36,4859,2409],{"class":163},[36,4861,2412],{"class":59},[36,4863,4864,4866,4868,4870],{"class":38,"line":52},[36,4865,2417],{"class":163},[36,4867,2420],{"class":163},[36,4869,2423],{"class":55},[36,4871,1772],{"class":98},[36,4873,4874,4876,4878],{"class":38,"line":66},[36,4875,624],{"class":163},[36,4877,2432],{"class":55},[36,4879,2435],{"class":98},[36,4881,4882],{"class":38,"line":72},[36,4883,2025],{"class":98},[36,4885,4886,4888,4890,4892,4895,4897,4900,4902,4904,4906,4908,4910,4912,4914,4916,4918,4920,4922,4924,4926,4928,4930,4932,4934],{"class":38,"line":82},[36,4887,2444],{"class":163},[36,4889,4413],{"class":98},[36,4891,1034],{"class":109},[36,4893,4894],{"class":98},"] ",[36,4896,176],{"class":163},[36,4898,4899],{"class":98}," {",[36,4901,908],{"class":109},[36,4903,992],{"class":98},[36,4905,694],{"class":109},[36,4907,992],{"class":98},[36,4909,1009],{"class":109},[36,4911,992],{"class":98},[36,4913,807],{"class":109},[36,4915,992],{"class":98},[36,4917,933],{"class":109},[36,4919,992],{"class":98},[36,4921,983],{"class":109},[36,4923,992],{"class":98},[36,4925,833],{"class":109},[36,4927,992],{"class":98},[36,4929,689],{"class":109},[36,4931,992],{"class":98},[36,4933,1034],{"class":109},[36,4935,4446],{"class":98},[36,4937,4938,4940,4942,4945,4947],{"class":38,"line":88},[36,4939,2030],{"class":98},[36,4941,1655],{"class":163},[36,4943,4944],{"class":59},"\"排序前：\"",[36,4946,1655],{"class":163},[36,4948,1677],{"class":98},[36,4950,4951,4953,4955,4957,4959,4961,4963,4965,4967,4969,4971,4973],{"class":38,"line":113},[36,4952,3652],{"class":163},[36,4954,2130],{"class":98},[36,4956,624],{"class":163},[36,4958,3483],{"class":98},[36,4960,176],{"class":163},[36,4962,807],{"class":109},[36,4964,3490],{"class":98},[36,4966,179],{"class":163},[36,4968,1034],{"class":109},[36,4970,3490],{"class":98},[36,4972,2751],{"class":163},[36,4974,627],{"class":98},[36,4976,4977],{"class":38,"line":119},[36,4978,2489],{"class":98},[36,4980,4981,4983,4985,4987,4989,4991],{"class":38,"line":131},[36,4982,3902],{"class":98},[36,4984,1655],{"class":163},[36,4986,4805],{"class":98},[36,4988,1655],{"class":163},[36,4990,4810],{"class":59},[36,4992,1772],{"class":98},[36,4994,4995],{"class":38,"line":137},[36,4996,2646],{"class":98},[36,4998,4999],{"class":38,"line":147},[36,5000,5001],{"class":42},"    \u002F\u002F开始冒泡排序\n",[36,5003,5004],{"class":38,"line":153},[36,5005,5006],{"class":42},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[36,5008,5009,5011,5013,5015,5017,5019,5021,5023,5025,5027,5029,5031,5033,5035],{"class":38,"line":191},[36,5010,3652],{"class":163},[36,5012,2130],{"class":98},[36,5014,624],{"class":163},[36,5016,3483],{"class":98},[36,5018,176],{"class":163},[36,5020,807],{"class":109},[36,5022,3490],{"class":98},[36,5024,179],{"class":163},[36,5026,1034],{"class":109},[36,5028,1146],{"class":163},[36,5030,833],{"class":109},[36,5032,3490],{"class":98},[36,5034,2751],{"class":163},[36,5036,627],{"class":98},[36,5038,5039],{"class":38,"line":197},[36,5040,2489],{"class":98},[36,5042,5043],{"class":38,"line":217},[36,5044,5045],{"class":42},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[36,5047,5048,5050,5052,5054,5056,5058,5060,5062,5064,5066,5068,5070,5072,5074,5076,5078],{"class":38,"line":223},[36,5049,3854],{"class":163},[36,5051,2130],{"class":98},[36,5053,624],{"class":163},[36,5055,3861],{"class":98},[36,5057,176],{"class":163},[36,5059,807],{"class":109},[36,5061,3868],{"class":98},[36,5063,179],{"class":163},[36,5065,1034],{"class":109},[36,5067,1146],{"class":163},[36,5069,1055],{"class":98},[36,5071,1146],{"class":163},[36,5073,833],{"class":109},[36,5075,3868],{"class":98},[36,5077,2751],{"class":163},[36,5079,627],{"class":98},[36,5081,5082],{"class":38,"line":243},[36,5083,2968],{"class":98},[36,5085,5086],{"class":38,"line":250},[36,5087,5088],{"class":42},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[36,5090,5091,5094,5097,5099,5102,5104,5106],{"class":38,"line":256},[36,5092,5093],{"class":163},"            if",[36,5095,5096],{"class":98},"(arr[j]",[36,5098,173],{"class":163},[36,5100,5101],{"class":98},"arr[j",[36,5103,1095],{"class":163},[36,5105,833],{"class":109},[36,5107,5108],{"class":98},"])\n",[36,5110,5111],{"class":38,"line":273},[36,5112,5113],{"class":98},"            {\n",[36,5115,5116,5119,5121,5123],{"class":38,"line":278},[36,5117,5118],{"class":163},"                int",[36,5120,4706],{"class":98},[36,5122,176],{"class":163},[36,5124,5125],{"class":98},"arr[j];\n",[36,5127,5128,5131,5133,5135,5137,5139],{"class":38,"line":284},[36,5129,5130],{"class":98},"                arr[j]",[36,5132,176],{"class":163},[36,5134,5101],{"class":98},[36,5136,1095],{"class":163},[36,5138,833],{"class":109},[36,5140,5141],{"class":98},"];\n",[36,5143,5144,5147,5149,5151,5153,5155],{"class":38,"line":315},[36,5145,5146],{"class":98},"                arr[j",[36,5148,1095],{"class":163},[36,5150,833],{"class":109},[36,5152,1552],{"class":98},[36,5154,176],{"class":163},[36,5156,4731],{"class":98},[36,5158,5159],{"class":38,"line":320},[36,5160,5161],{"class":98},"            }\n",[36,5163,5164],{"class":38,"line":326},[36,5165,2987],{"class":98},[36,5167,5168],{"class":38,"line":343},[36,5169,2646],{"class":98},[36,5171,5172,5174,5176,5179,5181],{"class":38,"line":348},[36,5173,2030],{"class":98},[36,5175,1655],{"class":163},[36,5177,5178],{"class":59},"\"排序后：\"",[36,5180,1655],{"class":163},[36,5182,1677],{"class":98},[36,5184,5185,5187,5189,5191,5193,5195,5197,5199,5201,5203,5205,5207],{"class":38,"line":354},[36,5186,3652],{"class":163},[36,5188,2130],{"class":98},[36,5190,624],{"class":163},[36,5192,3483],{"class":98},[36,5194,176],{"class":163},[36,5196,807],{"class":109},[36,5198,3490],{"class":98},[36,5200,179],{"class":163},[36,5202,1034],{"class":109},[36,5204,3490],{"class":98},[36,5206,2751],{"class":163},[36,5208,627],{"class":98},[36,5210,5211],{"class":38,"line":370},[36,5212,2489],{"class":98},[36,5214,5215,5217,5219,5221,5223,5225],{"class":38,"line":375},[36,5216,3902],{"class":98},[36,5218,1655],{"class":163},[36,5220,4805],{"class":98},[36,5222,1655],{"class":163},[36,5224,4810],{"class":59},[36,5226,1772],{"class":98},[36,5228,5229],{"class":38,"line":381},[36,5230,2646],{"class":98},[36,5232,5233,5235,5237],{"class":38,"line":399},[36,5234,4541],{"class":163},[36,5236,4544],{"class":109},[36,5238,1772],{"class":98},[36,5240,5241],{"class":38,"line":404},[36,5242,2044],{"class":98},[588,5244,5246],{"id":5245},"_172二维数组","1.7.2二维数组",[571,5248,5249],{},[574,5250,5251],{},"二维数组的四种定义方式",[753,5253,5254,5263],{},[756,5255,5256],{},[759,5257,5258,5261],{},[762,5259,5260],{},"序号",[762,5262,4232],{},[800,5264,5265,5275,5284,5293,5302],{},[759,5266,5267,5269],{},[805,5268,833],{},[805,5270,5271,5272,674],{},"数据类型 数组名[行数]",[36,5273,5274],{},"列数",[759,5276,5277,5279],{},[805,5278,694],{},[805,5280,5271,5281,5283],{},[36,5282,5274],{},"={ {数据1,数据2}，{数据3，数据4}... }",[759,5285,5286,5288],{},[805,5287,689],{},[805,5289,5271,5290,5292],{},[36,5291,5274],{},"={数据1,数据2,数据3...}",[759,5294,5295,5297],{},[805,5296,908],{},[805,5298,5299,5300,5292],{},"数据类型 数组名[]",[36,5301,5274],{},[759,5303,5304,5307],{},[805,5305,5306],{},"注意：不能只省略列数",[805,5308],{},[571,5310,5311],{"start":46},[574,5312,5313],{},"二维数组数组名",[1618,5315,5316,5319],{},[574,5317,5318],{},"1.查看二维数组所占内存空间",[574,5320,5321],{},"2.获取二维数组首地址",[14,5323,5324],{},"已知二维数组，求二维数组的行数与列数",[26,5326,5328],{"className":609,"code":5327,"language":611,"meta":31,"style":31},"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",[33,5329,5330,5338,5342,5360,5364,5382,5398,5403,5428,5461],{"__ignoreMap":31},[36,5331,5332,5334,5336],{"class":38,"line":39},[36,5333,624],{"class":163},[36,5335,2432],{"class":55},[36,5337,2435],{"class":98},[36,5339,5340],{"class":38,"line":46},[36,5341,2025],{"class":98},[36,5343,5344,5346,5348,5350,5353,5355,5357],{"class":38,"line":52},[36,5345,2444],{"class":163},[36,5347,4413],{"class":98},[36,5349,694],{"class":109},[36,5351,5352],{"class":98},"][",[36,5354,689],{"class":109},[36,5356,1552],{"class":98},[36,5358,5359],{"class":163},"=\n",[36,5361,5362],{"class":38,"line":66},[36,5363,2489],{"class":98},[36,5365,5366,5369,5371,5373,5375,5377,5379],{"class":38,"line":72},[36,5367,5368],{"class":98},"        {",[36,5370,833],{"class":109},[36,5372,992],{"class":98},[36,5374,694],{"class":109},[36,5376,992],{"class":98},[36,5378,689],{"class":109},[36,5380,5381],{"class":98},"},\n",[36,5383,5384,5386,5388,5390,5392,5394,5396],{"class":38,"line":82},[36,5385,5368],{"class":98},[36,5387,908],{"class":109},[36,5389,992],{"class":98},[36,5391,933],{"class":109},[36,5393,992],{"class":98},[36,5395,958],{"class":109},[36,5397,2044],{"class":98},[36,5399,5400],{"class":38,"line":88},[36,5401,5402],{"class":98},"    };\n",[36,5404,5405,5407,5409,5412,5414,5416,5418,5420,5422,5424,5426],{"class":38,"line":113},[36,5406,2030],{"class":98},[36,5408,1655],{"class":163},[36,5410,5411],{"class":59},"\"二维数组的行数\"",[36,5413,1851],{"class":163},[36,5415,4657],{"class":98},[36,5417,4660],{"class":163},[36,5419,4302],{"class":98},[36,5421,807],{"class":109},[36,5423,4667],{"class":98},[36,5425,1655],{"class":163},[36,5427,1677],{"class":98},[36,5429,5430,5432,5434,5437,5439,5441,5443,5445,5447,5449,5451,5453,5455,5457,5459],{"class":38,"line":119},[36,5431,2030],{"class":98},[36,5433,1655],{"class":163},[36,5435,5436],{"class":59},"\"二维数组的列数\"",[36,5438,1851],{"class":163},[36,5440,4302],{"class":98},[36,5442,807],{"class":109},[36,5444,4667],{"class":98},[36,5446,4660],{"class":163},[36,5448,4302],{"class":98},[36,5450,807],{"class":109},[36,5452,5352],{"class":98},[36,5454,807],{"class":109},[36,5456,4667],{"class":98},[36,5458,1655],{"class":163},[36,5460,1677],{"class":98},[36,5462,5463],{"class":38,"line":131},[36,5464,2044],{"class":98},[14,5466,5467],{},"查看二维数组首地址",[26,5469,5471],{"className":609,"code":5470,"language":611,"meta":31,"style":31},"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",[33,5472,5473,5490,5516,5541],{"__ignoreMap":31},[36,5474,5475,5477,5479,5482,5484,5486,5488],{"class":38,"line":39},[36,5476,1848],{"class":98},[36,5478,1655],{"class":163},[36,5480,5481],{"class":59},"\"二维数组首地址：\"",[36,5483,1655],{"class":163},[36,5485,4331],{"class":98},[36,5487,1655],{"class":163},[36,5489,1677],{"class":98},[36,5491,5492,5494,5496,5499,5501,5503,5505,5508,5510,5512,5514],{"class":38,"line":46},[36,5493,1848],{"class":98},[36,5495,1655],{"class":163},[36,5497,5498],{"class":59},"\"二维数组第一行的首地址：\"",[36,5500,1655],{"class":163},[36,5502,621],{"class":98},[36,5504,624],{"class":163},[36,5506,5507],{"class":98},")arr[",[36,5509,807],{"class":109},[36,5511,1552],{"class":98},[36,5513,1655],{"class":163},[36,5515,1677],{"class":98},[36,5517,5518,5520,5522,5525,5527,5529,5531,5533,5535,5537,5539],{"class":38,"line":52},[36,5519,1848],{"class":98},[36,5521,1655],{"class":163},[36,5523,5524],{"class":59},"\"二维数组第二行的首地址：\"",[36,5526,1655],{"class":163},[36,5528,621],{"class":98},[36,5530,624],{"class":163},[36,5532,5507],{"class":98},[36,5534,833],{"class":109},[36,5536,1552],{"class":98},[36,5538,1655],{"class":163},[36,5540,1677],{"class":98},[36,5542,5543,5545,5547,5550,5552,5554,5556,5558,5560,5562,5564,5566,5568,5570,5572,5574],{"class":38,"line":66},[36,5544,1848],{"class":98},[36,5546,1655],{"class":163},[36,5548,5549],{"class":59},"\"二维数组第一个元素的首地址:\"",[36,5551,1655],{"class":163},[36,5553,621],{"class":98},[36,5555,624],{"class":163},[36,5557,1043],{"class":98},[36,5559,967],{"class":163},[36,5561,4357],{"class":98},[36,5563,807],{"class":109},[36,5565,5352],{"class":98},[36,5567,807],{"class":109},[36,5569,1552],{"class":98},[36,5571,1655],{"class":163},[36,5573,1720],{"class":98},[36,5575,5576],{"class":42},"\u002F\u002F对于数，要加取址符\n",[537,5578,5579],{},"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":31,"searchDepth":46,"depth":46,"links":5581},[5582,5583,5584,5592,5593,5599,5604],{"id":561,"depth":46,"text":562},{"id":568,"depth":46,"text":569},{"id":585,"depth":46,"text":586,"children":5585},[5586,5587,5588,5589,5590,5591],{"id":590,"depth":52,"text":591},{"id":637,"depth":52,"text":638},{"id":702,"depth":52,"text":703},{"id":1636,"depth":52,"text":1637},{"id":1726,"depth":52,"text":1727},{"id":1822,"depth":52,"text":1823},{"id":1864,"depth":46,"text":1865},{"id":1932,"depth":46,"text":1933,"children":5594},[5595,5596,5597,5598],{"id":1936,"depth":52,"text":1937},{"id":1958,"depth":52,"text":1959},{"id":1967,"depth":52,"text":1968},{"id":1976,"depth":52,"text":1977},{"id":1985,"depth":46,"text":1986,"children":5600},[5601,5602,5603],{"id":1989,"depth":52,"text":1990},{"id":2664,"depth":52,"text":2665},{"id":4072,"depth":52,"text":4073},{"id":4213,"depth":46,"text":4214,"children":5605},[5606,5607],{"id":4217,"depth":52,"text":4218},{"id":5245,"depth":52,"text":5246},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":552,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5614,"title":5615,"body":5616,"description":31,"extension":543,"meta":6716,"navigation":246,"path":6717,"seo":6718,"stem":6719,"__hash__":6720},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5617,"toc":6708},[5618,5621,5625,5633,5641,5644,5710,5714,5717,5793,5797,5800,5803,5806,6019,6023,6028,6092,6097,6164,6169,6260,6263,6368,6372,6375,6381,6525,6529,6532,6546,6549,6594,6597,6705],[10,5619,5615],{"id":5620},"_2函数",[559,5622,5624],{"id":5623},"_21函数概述","2.1函数概述",[571,5626,5627,5630],{},[574,5628,5629],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[574,5631,5632],{},"语法：",[26,5634,5639],{"className":5635,"code":5637,"language":5638,"meta":31},[5636],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[33,5640,5637],{"__ignoreMap":31},[14,5642,5643],{},"小案例",[26,5645,5647],{"className":609,"code":5646,"language":611,"meta":31,"style":31},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[33,5648,5649,5654,5678,5682,5699,5706],{"__ignoreMap":31},[36,5650,5651],{"class":38,"line":39},[36,5652,5653],{"class":42},"\u002F\u002Fnum1,num2形参\n",[36,5655,5656,5658,5661,5663,5665,5669,5671,5673,5676],{"class":38,"line":46},[36,5657,624],{"class":163},[36,5659,5660],{"class":55}," add",[36,5662,621],{"class":98},[36,5664,624],{"class":163},[36,5666,5668],{"class":5667},"s4XuR"," num1",[36,5670,992],{"class":98},[36,5672,624],{"class":163},[36,5674,5675],{"class":5667}," num2",[36,5677,627],{"class":98},[36,5679,5680],{"class":38,"line":52},[36,5681,2025],{"class":98},[36,5683,5684,5686,5689,5691,5694,5696],{"class":38,"line":66},[36,5685,2444],{"class":163},[36,5687,5688],{"class":98}," sum",[36,5690,176],{"class":163},[36,5692,5693],{"class":98},"num1",[36,5695,1095],{"class":163},[36,5697,5698],{"class":98},"num2;\n",[36,5700,5701,5703],{"class":38,"line":72},[36,5702,4541],{"class":163},[36,5704,5705],{"class":98}," sum;\n",[36,5707,5708],{"class":38,"line":82},[36,5709,2044],{"class":98},[559,5711,5713],{"id":5712},"_22函数调用","2.2函数调用",[14,5715,5716],{},"调用刚刚写的求和函数",[26,5718,5720],{"className":609,"code":5719,"language":611,"meta":31,"style":31},"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",[33,5721,5722,5730,5734,5739,5751,5763,5772,5777,5789],{"__ignoreMap":31},[36,5723,5724,5726,5728],{"class":38,"line":39},[36,5725,624],{"class":163},[36,5727,2432],{"class":55},[36,5729,2435],{"class":98},[36,5731,5732],{"class":38,"line":46},[36,5733,2025],{"class":98},[36,5735,5736],{"class":38,"line":52},[36,5737,5738],{"class":42},"    \u002F\u002Fa,b实参\n",[36,5740,5741,5743,5745,5747,5749],{"class":38,"line":66},[36,5742,2444],{"class":163},[36,5744,1877],{"class":98},[36,5746,176],{"class":163},[36,5748,807],{"class":109},[36,5750,1772],{"class":98},[36,5752,5753,5755,5757,5759,5761],{"class":38,"line":72},[36,5754,2444],{"class":163},[36,5756,3284],{"class":98},[36,5758,176],{"class":163},[36,5760,807],{"class":109},[36,5762,1772],{"class":98},[36,5764,5765,5767,5769],{"class":38,"line":82},[36,5766,2471],{"class":98},[36,5768,1908],{"class":163},[36,5770,5771],{"class":98},"a,b;\n",[36,5773,5774],{"class":38,"line":88},[36,5775,5776],{"class":42},"    \u002F\u002F调用函数时，实参值传给了形参\n",[36,5778,5779,5781,5783,5786],{"class":38,"line":113},[36,5780,2030],{"class":98},[36,5782,1655],{"class":163},[36,5784,5785],{"class":55},"add",[36,5787,5788],{"class":98},"(a,b);\n",[36,5790,5791],{"class":38,"line":119},[36,5792,2044],{"class":98},[559,5794,5796],{"id":5795},"_23值传递","2.3值传递",[14,5798,5799],{},"值传递就是函数调用时实参将数值传给形参",[14,5801,5802],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,5804,5805],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[26,5807,5809],{"className":609,"code":5808,"language":611,"meta":31,"style":31},"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",[33,5810,5811,5833,5837,5850,5867,5885,5896,5905,5914,5927,5943,5959,5968,5972,5980,5984,5996,6008,6015],{"__ignoreMap":31},[36,5812,5813,5816,5819,5821,5823,5825,5827,5829,5831],{"class":38,"line":39},[36,5814,5815],{"class":163},"void",[36,5817,5818],{"class":55}," swap",[36,5820,621],{"class":98},[36,5822,624],{"class":163},[36,5824,5668],{"class":5667},[36,5826,992],{"class":98},[36,5828,624],{"class":163},[36,5830,5675],{"class":5667},[36,5832,627],{"class":98},[36,5834,5835],{"class":38,"line":46},[36,5836,2025],{"class":98},[36,5838,5839,5841,5843,5846,5848],{"class":38,"line":52},[36,5840,2030],{"class":98},[36,5842,1655],{"class":163},[36,5844,5845],{"class":59},"\"交换前：\"",[36,5847,1655],{"class":163},[36,5849,1677],{"class":98},[36,5851,5852,5854,5856,5859,5861,5863,5865],{"class":38,"line":66},[36,5853,2030],{"class":98},[36,5855,1655],{"class":163},[36,5857,5858],{"class":59},"\"num1=\"",[36,5860,1655],{"class":163},[36,5862,5693],{"class":98},[36,5864,1655],{"class":163},[36,5866,1677],{"class":98},[36,5868,5869,5871,5873,5876,5878,5881,5883],{"class":38,"line":72},[36,5870,2030],{"class":98},[36,5872,1655],{"class":163},[36,5874,5875],{"class":59},"\"num2=\"",[36,5877,1655],{"class":163},[36,5879,5880],{"class":98},"num2",[36,5882,1655],{"class":163},[36,5884,1677],{"class":98},[36,5886,5887,5889,5891,5893],{"class":38,"line":82},[36,5888,2444],{"class":163},[36,5890,4706],{"class":98},[36,5892,176],{"class":163},[36,5894,5895],{"class":98},"num1;\n",[36,5897,5898,5901,5903],{"class":38,"line":88},[36,5899,5900],{"class":98},"    num1",[36,5902,176],{"class":163},[36,5904,5698],{"class":98},[36,5906,5907,5910,5912],{"class":38,"line":113},[36,5908,5909],{"class":98},"    num2",[36,5911,176],{"class":163},[36,5913,4731],{"class":98},[36,5915,5916,5918,5920,5923,5925],{"class":38,"line":119},[36,5917,2030],{"class":98},[36,5919,1655],{"class":163},[36,5921,5922],{"class":59},"\"交换后：\"",[36,5924,1655],{"class":163},[36,5926,1677],{"class":98},[36,5928,5929,5931,5933,5935,5937,5939,5941],{"class":38,"line":131},[36,5930,2030],{"class":98},[36,5932,1655],{"class":163},[36,5934,5858],{"class":59},[36,5936,1655],{"class":163},[36,5938,5693],{"class":98},[36,5940,1655],{"class":163},[36,5942,1677],{"class":98},[36,5944,5945,5947,5949,5951,5953,5955,5957],{"class":38,"line":137},[36,5946,2030],{"class":98},[36,5948,1655],{"class":163},[36,5950,5875],{"class":59},[36,5952,1655],{"class":163},[36,5954,5880],{"class":98},[36,5956,1655],{"class":163},[36,5958,1677],{"class":98},[36,5960,5961,5963,5965],{"class":38,"line":147},[36,5962,4541],{"class":163},[36,5964,674],{"class":98},[36,5966,5967],{"class":42},"\u002F\u002F或者不写\n",[36,5969,5970],{"class":38,"line":153},[36,5971,2044],{"class":98},[36,5973,5974,5976,5978],{"class":38,"line":191},[36,5975,624],{"class":163},[36,5977,2432],{"class":55},[36,5979,2435],{"class":98},[36,5981,5982],{"class":38,"line":197},[36,5983,2025],{"class":98},[36,5985,5986,5988,5990,5992,5994],{"class":38,"line":217},[36,5987,2444],{"class":163},[36,5989,1877],{"class":98},[36,5991,176],{"class":163},[36,5993,1060],{"class":109},[36,5995,1772],{"class":98},[36,5997,5998,6000,6002,6004,6006],{"class":38,"line":223},[36,5999,2444],{"class":163},[36,6001,3284],{"class":98},[36,6003,176],{"class":163},[36,6005,1313],{"class":109},[36,6007,1772],{"class":98},[36,6009,6010,6013],{"class":38,"line":243},[36,6011,6012],{"class":55},"    swap",[36,6014,5788],{"class":98},[36,6016,6017],{"class":38,"line":250},[36,6018,2044],{"class":98},[559,6020,6022],{"id":6021},"_24函数的常见形式","2.4函数的常见形式",[571,6024,6025],{},[574,6026,6027],{},"无参无返",[26,6029,6031],{"className":609,"code":6030,"language":611,"meta":31,"style":31},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[33,6032,6033,6042,6046,6059,6063,6071,6075,6080,6088],{"__ignoreMap":31},[36,6034,6035,6037,6040],{"class":38,"line":39},[36,6036,5815],{"class":163},[36,6038,6039],{"class":55}," test01",[36,6041,2435],{"class":98},[36,6043,6044],{"class":38,"line":46},[36,6045,2025],{"class":98},[36,6047,6048,6050,6052,6055,6057],{"class":38,"line":52},[36,6049,2030],{"class":98},[36,6051,1655],{"class":163},[36,6053,6054],{"class":59},"\"你好\"",[36,6056,1655],{"class":163},[36,6058,1677],{"class":98},[36,6060,6061],{"class":38,"line":66},[36,6062,2044],{"class":98},[36,6064,6065,6067,6069],{"class":38,"line":72},[36,6066,624],{"class":163},[36,6068,2432],{"class":55},[36,6070,2435],{"class":98},[36,6072,6073],{"class":38,"line":82},[36,6074,2025],{"class":98},[36,6076,6077],{"class":38,"line":88},[36,6078,6079],{"class":42},"    \u002F\u002F函数调用\n",[36,6081,6082,6085],{"class":38,"line":113},[36,6083,6084],{"class":55},"    test01",[36,6086,6087],{"class":98},"();\n",[36,6089,6090],{"class":38,"line":119},[36,6091,2044],{"class":98},[571,6093,6094],{"start":46},[574,6095,6096],{},"有参无返",[26,6098,6100],{"className":609,"code":6099,"language":611,"meta":31,"style":31},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[33,6101,6102,6117,6121,6133,6137,6145,6149,6160],{"__ignoreMap":31},[36,6103,6104,6106,6109,6111,6113,6115],{"class":38,"line":39},[36,6105,5815],{"class":163},[36,6107,6108],{"class":55}," test02",[36,6110,621],{"class":98},[36,6112,624],{"class":163},[36,6114,1877],{"class":5667},[36,6116,627],{"class":98},[36,6118,6119],{"class":38,"line":46},[36,6120,2025],{"class":98},[36,6122,6123,6125,6127,6129,6131],{"class":38,"line":52},[36,6124,2030],{"class":98},[36,6126,1655],{"class":163},[36,6128,6054],{"class":59},[36,6130,1655],{"class":163},[36,6132,1677],{"class":98},[36,6134,6135],{"class":38,"line":66},[36,6136,2044],{"class":98},[36,6138,6139,6141,6143],{"class":38,"line":72},[36,6140,624],{"class":163},[36,6142,2432],{"class":55},[36,6144,2435],{"class":98},[36,6146,6147],{"class":38,"line":82},[36,6148,2025],{"class":98},[36,6150,6151,6154,6156,6158],{"class":38,"line":88},[36,6152,6153],{"class":55},"    test02",[36,6155,621],{"class":98},[36,6157,926],{"class":109},[36,6159,3170],{"class":98},[36,6161,6162],{"class":38,"line":113},[36,6163,2044],{"class":98},[571,6165,6166],{"start":52},[574,6167,6168],{},"无参有返",[26,6170,6172],{"className":609,"code":6171,"language":611,"meta":31,"style":31},"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",[33,6173,6174,6183,6187,6199,6208,6212,6220,6224,6237,6256],{"__ignoreMap":31},[36,6175,6176,6178,6181],{"class":38,"line":39},[36,6177,624],{"class":163},[36,6179,6180],{"class":55}," test03",[36,6182,2435],{"class":98},[36,6184,6185],{"class":38,"line":46},[36,6186,2025],{"class":98},[36,6188,6189,6191,6193,6195,6197],{"class":38,"line":52},[36,6190,2030],{"class":98},[36,6192,1655],{"class":163},[36,6194,6054],{"class":59},[36,6196,1655],{"class":163},[36,6198,1677],{"class":98},[36,6200,6201,6203,6206],{"class":38,"line":66},[36,6202,4541],{"class":163},[36,6204,6205],{"class":109}," 100",[36,6207,1772],{"class":98},[36,6209,6210],{"class":38,"line":72},[36,6211,2044],{"class":98},[36,6213,6214,6216,6218],{"class":38,"line":82},[36,6215,624],{"class":163},[36,6217,2432],{"class":55},[36,6219,2435],{"class":98},[36,6221,6222],{"class":38,"line":88},[36,6223,2025],{"class":98},[36,6225,6226,6228,6230,6232,6235],{"class":38,"line":113},[36,6227,2444],{"class":163},[36,6229,5668],{"class":98},[36,6231,176],{"class":163},[36,6233,6234],{"class":55},"test03",[36,6236,6087],{"class":98},[36,6238,6239,6241,6243,6245,6247,6249,6251,6253],{"class":38,"line":119},[36,6240,2030],{"class":98},[36,6242,1655],{"class":163},[36,6244,5858],{"class":59},[36,6246,1655],{"class":163},[36,6248,5693],{"class":98},[36,6250,1655],{"class":163},[36,6252,1720],{"class":98},[36,6254,6255],{"class":42}," \u002F\u002F100\n",[36,6257,6258],{"class":38,"line":131},[36,6259,2044],{"class":98},[14,6261,6262],{},"4.有参有返",[26,6264,6266],{"className":609,"code":6265,"language":611,"meta":31,"style":31},"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",[33,6267,6268,6283,6287,6300,6306,6310,6319,6323,6335,6349,6364],{"__ignoreMap":31},[36,6269,6270,6272,6275,6277,6279,6281],{"class":38,"line":39},[36,6271,624],{"class":163},[36,6273,6274],{"class":55}," test04",[36,6276,621],{"class":98},[36,6278,624],{"class":163},[36,6280,1877],{"class":5667},[36,6282,627],{"class":98},[36,6284,6285],{"class":38,"line":46},[36,6286,2025],{"class":98},[36,6288,6289,6291,6293,6296,6298],{"class":38,"line":52},[36,6290,2030],{"class":98},[36,6292,1655],{"class":163},[36,6294,6295],{"class":59},"\"hello\"",[36,6297,1655],{"class":163},[36,6299,1677],{"class":98},[36,6301,6302,6304],{"class":38,"line":66},[36,6303,4541],{"class":163},[36,6305,1911],{"class":98},[36,6307,6308],{"class":38,"line":72},[36,6309,2044],{"class":98},[36,6311,6312,6314,6317],{"class":38,"line":82},[36,6313,624],{"class":163},[36,6315,6316],{"class":55}," mian",[36,6318,2435],{"class":98},[36,6320,6321],{"class":38,"line":88},[36,6322,2025],{"class":98},[36,6324,6325,6327,6329,6331,6333],{"class":38,"line":113},[36,6326,2444],{"class":163},[36,6328,3284],{"class":98},[36,6330,176],{"class":163},[36,6332,833],{"class":109},[36,6334,1772],{"class":98},[36,6336,6337,6339,6341,6343,6346],{"class":38,"line":119},[36,6338,2444],{"class":163},[36,6340,3300],{"class":98},[36,6342,176],{"class":163},[36,6344,6345],{"class":55},"test04",[36,6347,6348],{"class":98},"(b);\n",[36,6350,6351,6353,6355,6357,6359,6361],{"class":38,"line":131},[36,6352,2030],{"class":98},[36,6354,1655],{"class":163},[36,6356,903],{"class":98},[36,6358,1655],{"class":163},[36,6360,1720],{"class":98},[36,6362,6363],{"class":42}," \u002F\u002F1\n",[36,6365,6366],{"class":38,"line":137},[36,6367,2044],{"class":98},[559,6369,6371],{"id":6370},"_25函数的声明","2.5函数的声明",[14,6373,6374],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,6376,6377,6378],{},"函数的",[765,6379,6380],{},"声明可以多次，但是函数的定义只能有一次",[26,6382,6384],{"className":609,"code":6383,"language":611,"meta":31,"style":31},"\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",[33,6385,6386,6391,6396,6421,6430,6434,6446,6458,6474,6478,6498,6502,6521],{"__ignoreMap":31},[36,6387,6388],{"class":38,"line":39},[36,6389,6390],{"class":42},"\u002F\u002F函数声明\n",[36,6392,6393],{"class":38,"line":46},[36,6394,6395],{"class":42},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[36,6397,6398,6400,6403,6405,6407,6409,6411,6413,6415,6418],{"class":38,"line":52},[36,6399,624],{"class":163},[36,6401,6402],{"class":55}," max",[36,6404,621],{"class":98},[36,6406,624],{"class":163},[36,6408,1877],{"class":5667},[36,6410,992],{"class":98},[36,6412,624],{"class":163},[36,6414,3284],{"class":5667},[36,6416,6417],{"class":98},");",[36,6419,6420],{"class":42},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[36,6422,6423,6425,6427],{"class":38,"line":66},[36,6424,624],{"class":163},[36,6426,2432],{"class":55},[36,6428,6429],{"class":98},"() \n",[36,6431,6432],{"class":38,"line":72},[36,6433,2025],{"class":98},[36,6435,6436,6438,6440,6442,6444],{"class":38,"line":82},[36,6437,2444],{"class":163},[36,6439,1877],{"class":98},[36,6441,176],{"class":163},[36,6443,1060],{"class":109},[36,6445,1772],{"class":98},[36,6447,6448,6450,6452,6454,6456],{"class":38,"line":88},[36,6449,2444],{"class":163},[36,6451,3284],{"class":98},[36,6453,176],{"class":163},[36,6455,1313],{"class":109},[36,6457,1772],{"class":98},[36,6459,6460,6462,6464,6467,6470,6472],{"class":38,"line":113},[36,6461,2030],{"class":98},[36,6463,1655],{"class":163},[36,6465,6466],{"class":55},"max",[36,6468,6469],{"class":98},"(a,b)",[36,6471,1655],{"class":163},[36,6473,1677],{"class":98},[36,6475,6476],{"class":38,"line":119},[36,6477,2044],{"class":98},[36,6479,6480,6482,6484,6486,6488,6490,6492,6494,6496],{"class":38,"line":131},[36,6481,624],{"class":163},[36,6483,6402],{"class":55},[36,6485,621],{"class":98},[36,6487,624],{"class":163},[36,6489,1877],{"class":5667},[36,6491,992],{"class":98},[36,6493,624],{"class":163},[36,6495,3284],{"class":5667},[36,6497,627],{"class":98},[36,6499,6500],{"class":38,"line":137},[36,6501,2025],{"class":98},[36,6503,6504,6506,6508,6510,6512,6514,6516,6518],{"class":38,"line":147},[36,6505,4541],{"class":163},[36,6507,1877],{"class":98},[36,6509,173],{"class":163},[36,6511,878],{"class":98},[36,6513,1597],{"class":163},[36,6515,20],{"class":98},[36,6517,1472],{"class":163},[36,6519,6520],{"class":98},"b;\n",[36,6522,6523],{"class":38,"line":153},[36,6524,2044],{"class":98},[559,6526,6528],{"id":6527},"_26函数的分文件编写","2.6函数的分文件编写",[14,6530,6531],{},"4个步骤：",[1618,6533,6534,6537,6540,6543],{},[574,6535,6536],{},"1.创建后缀名为.h的头文件",[574,6538,6539],{},"2.创建后缀名为.cpp的源文件",[574,6541,6542],{},"3.在头文件中写函数的定义",[574,6544,6545],{},"4.在源文件中写函数的定义\n示例：",[14,6547,6548],{},"头文件：swap.h",[26,6550,6552],{"className":609,"code":6551,"language":611,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[33,6553,6554,6560,6570,6574],{"__ignoreMap":31},[36,6555,6556,6558],{"class":38,"line":39},[36,6557,2409],{"class":163},[36,6559,2412],{"class":59},[36,6561,6562,6564,6566,6568],{"class":38,"line":46},[36,6563,2417],{"class":163},[36,6565,2420],{"class":163},[36,6567,2423],{"class":55},[36,6569,1772],{"class":98},[36,6571,6572],{"class":38,"line":52},[36,6573,6390],{"class":42},[36,6575,6576,6578,6580,6582,6584,6586,6588,6590,6592],{"class":38,"line":66},[36,6577,5815],{"class":163},[36,6579,5818],{"class":55},[36,6581,621],{"class":98},[36,6583,624],{"class":163},[36,6585,1877],{"class":5667},[36,6587,992],{"class":98},[36,6589,624],{"class":163},[36,6591,3284],{"class":5667},[36,6593,3170],{"class":98},[14,6595,6596],{},"源文件：swap.cpp",[26,6598,6600],{"className":609,"code":6599,"language":611,"meta":31,"style":31},"#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",[33,6601,6602,6609,6614,6634,6638,6649,6658,6667,6684,6701],{"__ignoreMap":31},[36,6603,6604,6606],{"class":38,"line":39},[36,6605,2409],{"class":163},[36,6607,6608],{"class":59}," \"swap.h\"\n",[36,6610,6611],{"class":38,"line":46},[36,6612,6613],{"class":42},"\u002F\u002F函数的定义\n",[36,6615,6616,6618,6620,6622,6624,6626,6628,6630,6632],{"class":38,"line":52},[36,6617,5815],{"class":163},[36,6619,5818],{"class":55},[36,6621,621],{"class":98},[36,6623,624],{"class":163},[36,6625,1877],{"class":5667},[36,6627,992],{"class":98},[36,6629,624],{"class":163},[36,6631,3284],{"class":5667},[36,6633,627],{"class":98},[36,6635,6636],{"class":38,"line":66},[36,6637,2025],{"class":98},[36,6639,6640,6642,6644,6646],{"class":38,"line":72},[36,6641,2444],{"class":163},[36,6643,4706],{"class":98},[36,6645,176],{"class":163},[36,6647,6648],{"class":98},"a;\n",[36,6650,6651,6654,6656],{"class":38,"line":82},[36,6652,6653],{"class":98},"    a",[36,6655,176],{"class":163},[36,6657,6520],{"class":98},[36,6659,6660,6663,6665],{"class":38,"line":88},[36,6661,6662],{"class":98},"    b",[36,6664,176],{"class":163},[36,6666,4731],{"class":98},[36,6668,6669,6671,6673,6676,6678,6680,6682],{"class":38,"line":113},[36,6670,2030],{"class":98},[36,6672,1655],{"class":163},[36,6674,6675],{"class":59},"\"a=\"",[36,6677,1655],{"class":163},[36,6679,20],{"class":98},[36,6681,1655],{"class":163},[36,6683,1677],{"class":98},[36,6685,6686,6688,6690,6693,6695,6697,6699],{"class":38,"line":119},[36,6687,2030],{"class":98},[36,6689,1655],{"class":163},[36,6691,6692],{"class":59},"\"b=\"",[36,6694,1655],{"class":163},[36,6696,878],{"class":98},[36,6698,1655],{"class":163},[36,6700,1677],{"class":98},[36,6702,6703],{"class":38,"line":131},[36,6704,2044],{"class":98},[537,6706,6707],{},"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":31,"searchDepth":46,"depth":46,"links":6709},[6710,6711,6712,6713,6714,6715],{"id":5623,"depth":46,"text":5624},{"id":5712,"depth":46,"text":5713},{"id":5795,"depth":46,"text":5796},{"id":6021,"depth":46,"text":6022},{"id":6370,"depth":46,"text":6371},{"id":6527,"depth":46,"text":6528},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5615,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6722,"title":6723,"body":6724,"description":6731,"extension":543,"meta":8136,"navigation":246,"path":8137,"seo":8138,"stem":8139,"__hash__":8140},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6725,"toc":8126},[6726,6729,6732,6736,6898,6902,6905,6908,6911,6914,7054,7058,7061,7064,7067,7132,7136,7141,7208,7211,7215,7218,7229,7234,7254,7257,7262,7281,7284,7288,7307,7310,7314,7549,7553,7556,7559,7562,7724,7727,7731,7734,7740,8123],[10,6727,6723],{"id":6728},"_3指针",[14,6730,6731],{},"通过指针保存一个地址，指针就是个地址",[559,6733,6735],{"id":6734},"_31定义指针","3.1定义指针",[26,6737,6739],{"className":609,"code":6738,"language":611,"meta":31,"style":31},"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",[33,6740,6741,6749,6753,6758,6770,6775,6783,6793,6811,6831,6835,6840,6845,6850,6864,6880,6894],{"__ignoreMap":31},[36,6742,6743,6745,6747],{"class":38,"line":39},[36,6744,624],{"class":163},[36,6746,2432],{"class":55},[36,6748,2435],{"class":98},[36,6750,6751],{"class":38,"line":46},[36,6752,2025],{"class":98},[36,6754,6755],{"class":38,"line":52},[36,6756,6757],{"class":42},"    \u002F\u002F1.定义指针\n",[36,6759,6760,6762,6764,6766,6768],{"class":38,"line":66},[36,6761,2444],{"class":163},[36,6763,1877],{"class":98},[36,6765,176],{"class":163},[36,6767,1060],{"class":109},[36,6769,1772],{"class":98},[36,6771,6772],{"class":38,"line":72},[36,6773,6774],{"class":42},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[36,6776,6777,6780],{"class":38,"line":82},[36,6778,6779],{"class":163},"    int*",[36,6781,6782],{"class":98},"p;\n",[36,6784,6785,6788,6791],{"class":38,"line":88},[36,6786,6787],{"class":98},"    p",[36,6789,6790],{"class":163},"=&",[36,6792,6648],{"class":98},[36,6794,6795,6797,6799,6802,6805,6807,6809],{"class":38,"line":113},[36,6796,2030],{"class":98},[36,6798,1655],{"class":163},[36,6800,6801],{"class":59},"\"a的地址为：\"",[36,6803,6804],{"class":163},"\u003C\u003C&",[36,6806,20],{"class":98},[36,6808,1655],{"class":163},[36,6810,1677],{"class":98},[36,6812,6813,6815,6817,6820,6822,6824,6826,6828],{"class":38,"line":119},[36,6814,2030],{"class":98},[36,6816,1655],{"class":163},[36,6818,6819],{"class":59},"\"指针p为：\"",[36,6821,1655],{"class":163},[36,6823,14],{"class":98},[36,6825,1655],{"class":163},[36,6827,1720],{"class":98},[36,6829,6830],{"class":42},"\u002F\u002F指针p表示的就是a的地址\n",[36,6832,6833],{"class":38,"line":131},[36,6834,247],{"emptyLinePlaceholder":246},[36,6836,6837],{"class":38,"line":137},[36,6838,6839],{"class":42},"    \u002F\u002F2.使用指针\n",[36,6841,6842],{"class":38,"line":147},[36,6843,6844],{"class":42},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[36,6846,6847],{"class":38,"line":153},[36,6848,6849],{"class":42},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[36,6851,6852,6855,6857,6859,6862],{"class":38,"line":191},[36,6853,6854],{"class":163},"    *",[36,6856,14],{"class":98},[36,6858,176],{"class":163},[36,6860,6861],{"class":109},"1000",[36,6863,1772],{"class":98},[36,6865,6866,6868,6871,6873,6875,6877],{"class":38,"line":197},[36,6867,2030],{"class":98},[36,6869,6870],{"class":163},"\u003C\u003C*",[36,6872,14],{"class":98},[36,6874,1655],{"class":163},[36,6876,1720],{"class":98},[36,6878,6879],{"class":42},"\u002F\u002F1000\n",[36,6881,6882,6884,6886,6888,6890,6892],{"class":38,"line":217},[36,6883,2030],{"class":98},[36,6885,1655],{"class":163},[36,6887,20],{"class":98},[36,6889,1655],{"class":163},[36,6891,1720],{"class":98},[36,6893,6879],{"class":42},[36,6895,6896],{"class":38,"line":223},[36,6897,2044],{"class":98},[559,6899,6901],{"id":6900},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,6903,6904],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,6906,6907],{},"在32位操作系统下：占用4个字节空间",[14,6909,6910],{},"在64位操作系统下：占用8个字节空间",[14,6912,6913],{},"上方是不管啥数据类型的",[26,6915,6917],{"className":609,"code":6916,"language":611,"meta":31,"style":31},"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",[33,6918,6919,6927,6931,6936,6948,6953,6958,6963,6976,6998,7024,7050],{"__ignoreMap":31},[36,6920,6921,6923,6925],{"class":38,"line":39},[36,6922,624],{"class":163},[36,6924,2432],{"class":55},[36,6926,2435],{"class":98},[36,6928,6929],{"class":38,"line":46},[36,6930,2025],{"class":98},[36,6932,6933],{"class":38,"line":52},[36,6934,6935],{"class":42},"    \u002F\u002F指针所占内存空间\n",[36,6937,6938,6940,6942,6944,6946],{"class":38,"line":66},[36,6939,2444],{"class":163},[36,6941,1877],{"class":98},[36,6943,176],{"class":163},[36,6945,1060],{"class":109},[36,6947,1772],{"class":98},[36,6949,6950],{"class":38,"line":72},[36,6951,6952],{"class":42},"    \u002F\u002Fint *p;\n",[36,6954,6955],{"class":38,"line":82},[36,6956,6957],{"class":42},"    \u002F\u002Fp=&a;\n",[36,6959,6960],{"class":38,"line":88},[36,6961,6962],{"class":42},"    \u002F\u002F上述可以写为以下：\n",[36,6964,6965,6967,6970,6972,6974],{"class":38,"line":113},[36,6966,2444],{"class":163},[36,6968,6969],{"class":163}," *",[36,6971,14],{"class":98},[36,6973,6790],{"class":163},[36,6975,6648],{"class":98},[36,6977,6978,6981,6983,6986,6988,6991,6993,6995],{"class":38,"line":119},[36,6979,6980],{"class":98},"    cout ",[36,6982,1655],{"class":163},[36,6984,6985],{"class":59},"\"sizeof(int *)\"",[36,6987,1851],{"class":163},[36,6989,6990],{"class":98},"(p)",[36,6992,1655],{"class":163},[36,6994,1720],{"class":98},[36,6996,6997],{"class":42},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[36,6999,7000,7002,7004,7006,7008,7010,7012,7014,7016,7018,7021],{"class":38,"line":131},[36,7001,6980],{"class":98},[36,7003,1655],{"class":163},[36,7005,6985],{"class":59},[36,7007,1851],{"class":163},[36,7009,621],{"class":98},[36,7011,624],{"class":163},[36,7013,6969],{"class":163},[36,7015,1043],{"class":98},[36,7017,1655],{"class":163},[36,7019,7020],{"class":98},"endl",[36,7022,7023],{"class":42},"  \u002F\u002F4字节(32位的话)\n",[36,7025,7026,7028,7030,7033,7035,7037,7039,7041,7043,7045,7047],{"class":38,"line":137},[36,7027,6980],{"class":98},[36,7029,1655],{"class":163},[36,7031,7032],{"class":59},"\"sizeof(char *)\"",[36,7034,1851],{"class":163},[36,7036,621],{"class":98},[36,7038,713],{"class":163},[36,7040,6969],{"class":163},[36,7042,1043],{"class":98},[36,7044,1655],{"class":163},[36,7046,1720],{"class":98},[36,7048,7049],{"class":42}," \u002F\u002F4字节(32位的话)\n",[36,7051,7052],{"class":38,"line":147},[36,7053,2044],{"class":98},[559,7055,7057],{"id":7056},"_33空指针","3.3空指针",[14,7059,7060],{},"空指针：指针变量指向内存中编号为0的空间",[14,7062,7063],{},"用途：初始化指针变量",[14,7065,7066],{},"注意：空指针指向的内存是不可以访问的",[26,7068,7070],{"className":609,"code":7069,"language":611,"meta":31,"style":31},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[33,7071,7072,7080,7084,7089,7103,7108,7123,7128],{"__ignoreMap":31},[36,7073,7074,7076,7078],{"class":38,"line":39},[36,7075,624],{"class":163},[36,7077,2432],{"class":55},[36,7079,2435],{"class":98},[36,7081,7082],{"class":38,"line":46},[36,7083,2025],{"class":98},[36,7085,7086],{"class":38,"line":52},[36,7087,7088],{"class":42},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[36,7090,7091,7093,7095,7097,7099,7101],{"class":38,"line":66},[36,7092,2444],{"class":163},[36,7094,6969],{"class":163},[36,7096,14],{"class":98},[36,7098,176],{"class":163},[36,7100,2851],{"class":109},[36,7102,1772],{"class":98},[36,7104,7105],{"class":38,"line":72},[36,7106,7107],{"class":42},"    \u002F\u002F2.空指针不能进行访问\n",[36,7109,7110,7112,7114,7116,7118,7120],{"class":38,"line":82},[36,7111,6854],{"class":163},[36,7113,14],{"class":98},[36,7115,176],{"class":163},[36,7117,926],{"class":109},[36,7119,674],{"class":98},[36,7121,7122],{"class":42},"\u002F\u002F直接报错，压根不能访问\n",[36,7124,7125],{"class":38,"line":88},[36,7126,7127],{"class":42},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[36,7129,7130],{"class":38,"line":113},[36,7131,2044],{"class":98},[559,7133,7135],{"id":7134},"_34野指针","3.4野指针",[14,7137,7138],{},[765,7139,7140],{},"指针变量指向非法的内存空间",[26,7142,7144],{"className":609,"code":7143,"language":611,"meta":31,"style":31},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[33,7145,7146,7154,7158,7187,7192,7204],{"__ignoreMap":31},[36,7147,7148,7150,7152],{"class":38,"line":39},[36,7149,624],{"class":163},[36,7151,2432],{"class":55},[36,7153,2435],{"class":98},[36,7155,7156],{"class":38,"line":46},[36,7157,2025],{"class":98},[36,7159,7160,7162,7164,7166,7168,7170,7172,7174,7176,7179,7182,7184],{"class":38,"line":52},[36,7161,2444],{"class":163},[36,7163,6969],{"class":163},[36,7165,14],{"class":98},[36,7167,176],{"class":163},[36,7169,621],{"class":98},[36,7171,624],{"class":163},[36,7173,6969],{"class":163},[36,7175,1043],{"class":98},[36,7177,7178],{"class":163},"0x",[36,7180,7181],{"class":109},"1100",[36,7183,674],{"class":98},[36,7185,7186],{"class":42}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[36,7188,7189],{"class":38,"line":66},[36,7190,7191],{"class":42},"    \u002F\u002F访问野指针报错\n",[36,7193,7194,7196,7198,7200,7202],{"class":38,"line":72},[36,7195,2030],{"class":98},[36,7197,6870],{"class":163},[36,7199,14],{"class":98},[36,7201,1655],{"class":163},[36,7203,1677],{"class":98},[36,7205,7206],{"class":38,"line":82},[36,7207,2044],{"class":98},[14,7209,7210],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[559,7212,7214],{"id":7213},"_35const修饰指针","3.5const修饰指针",[14,7216,7217],{},"三种情况：",[1618,7219,7220,7223,7226],{},[574,7221,7222],{},"const修饰指针 常量指针",[574,7224,7225],{},"const修饰常量 指针常量",[574,7227,7228],{},"const即修饰指针，又修饰常量",[571,7230,7231],{},[574,7232,7233],{},"常量指针",[26,7235,7237],{"className":609,"code":7236,"language":611,"meta":31,"style":31},"const int *p=&a;\n",[33,7238,7239],{"__ignoreMap":31},[36,7240,7241,7244,7246,7248,7250,7252],{"class":38,"line":39},[36,7242,7243],{"class":163},"const",[36,7245,2841],{"class":163},[36,7247,6969],{"class":163},[36,7249,14],{"class":98},[36,7251,6790],{"class":163},[36,7253,6648],{"class":98},[14,7255,7256],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[571,7258,7259],{"start":46},[574,7260,7261],{},"指针常量",[26,7263,7265],{"className":609,"code":7264,"language":611,"meta":31,"style":31},"int *const p=&a;\n",[33,7266,7267],{"__ignoreMap":31},[36,7268,7269,7271,7274,7277,7279],{"class":38,"line":39},[36,7270,624],{"class":163},[36,7272,7273],{"class":163}," *const",[36,7275,7276],{"class":98}," p",[36,7278,6790],{"class":163},[36,7280,6648],{"class":98},[14,7282,7283],{},"指针的指向不可以改，指针指向的值可以改",[571,7285,7286],{"start":52},[574,7287,7228],{},[26,7289,7291],{"className":609,"code":7290,"language":611,"meta":31,"style":31},"const int *const p=&a;\n",[33,7292,7293],{"__ignoreMap":31},[36,7294,7295,7297,7299,7301,7303,7305],{"class":38,"line":39},[36,7296,7243],{"class":163},[36,7298,2841],{"class":163},[36,7300,7273],{"class":163},[36,7302,7276],{"class":98},[36,7304,6790],{"class":163},[36,7306,6648],{"class":98},[14,7308,7309],{},"指针的指向和指针指向的值都不可以改变",[559,7311,7313],{"id":7312},"_36指针和数组","3.6指针和数组",[26,7315,7317],{"className":609,"code":7316,"language":611,"meta":31,"style":31},"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",[33,7318,7319,7327,7331,7336,7390,7411,7427,7443,7454,7471,7476,7490,7516,7520,7532,7541,7545],{"__ignoreMap":31},[36,7320,7321,7323,7325],{"class":38,"line":39},[36,7322,624],{"class":163},[36,7324,2432],{"class":55},[36,7326,2435],{"class":98},[36,7328,7329],{"class":38,"line":46},[36,7330,2025],{"class":98},[36,7332,7333],{"class":38,"line":52},[36,7334,7335],{"class":42},"    \u002F\u002F利用指针访问数组中的元素\n",[36,7337,7338,7340,7342,7344,7346,7348,7350,7352,7354,7356,7358,7360,7362,7364,7366,7368,7370,7372,7374,7376,7378,7380,7382,7384,7386,7388],{"class":38,"line":66},[36,7339,2444],{"class":163},[36,7341,4413],{"class":98},[36,7343,1060],{"class":109},[36,7345,1552],{"class":98},[36,7347,176],{"class":163},[36,7349,1509],{"class":98},[36,7351,833],{"class":109},[36,7353,992],{"class":98},[36,7355,694],{"class":109},[36,7357,992],{"class":98},[36,7359,689],{"class":109},[36,7361,992],{"class":98},[36,7363,908],{"class":109},[36,7365,992],{"class":98},[36,7367,933],{"class":109},[36,7369,992],{"class":98},[36,7371,958],{"class":109},[36,7373,992],{"class":98},[36,7375,983],{"class":109},[36,7377,992],{"class":98},[36,7379,1009],{"class":109},[36,7381,992],{"class":98},[36,7383,1034],{"class":109},[36,7385,992],{"class":98},[36,7387,1060],{"class":109},[36,7389,4446],{"class":98},[36,7391,7392,7394,7396,7399,7401,7403,7405,7407,7409],{"class":38,"line":72},[36,7393,2030],{"class":98},[36,7395,1655],{"class":163},[36,7397,7398],{"class":59},"\"数组的第一个元素为：\"",[36,7400,1655],{"class":163},[36,7402,4357],{"class":98},[36,7404,807],{"class":109},[36,7406,1552],{"class":98},[36,7408,1655],{"class":163},[36,7410,1677],{"class":98},[36,7412,7413,7415,7417,7419,7421,7424],{"class":38,"line":82},[36,7414,2444],{"class":163},[36,7416,6969],{"class":163},[36,7418,14],{"class":98},[36,7420,176],{"class":163},[36,7422,7423],{"class":98},"arr;",[36,7425,7426],{"class":42},"\u002F\u002F注意数才要加取地址符号&\n",[36,7428,7429,7431,7433,7435,7437,7439,7441],{"class":38,"line":88},[36,7430,2030],{"class":98},[36,7432,1655],{"class":163},[36,7434,7398],{"class":59},[36,7436,6870],{"class":163},[36,7438,14],{"class":98},[36,7440,1655],{"class":163},[36,7442,1677],{"class":98},[36,7444,7445,7447,7449,7451],{"class":38,"line":113},[36,7446,6787],{"class":98},[36,7448,2751],{"class":163},[36,7450,674],{"class":98},[36,7452,7453],{"class":42}," \u002F\u002F让指针向后偏移4个字节\n",[36,7455,7456,7458,7460,7463,7465,7467,7469],{"class":38,"line":119},[36,7457,2030],{"class":98},[36,7459,1655],{"class":163},[36,7461,7462],{"class":59},"\"数组的第二个元素为：\"",[36,7464,6870],{"class":163},[36,7466,14],{"class":98},[36,7468,1655],{"class":163},[36,7470,1677],{"class":98},[36,7472,7473],{"class":38,"line":131},[36,7474,7475],{"class":42},"    \u002F\u002F利用指针遍历数组\n",[36,7477,7478,7480,7482,7485,7487],{"class":38,"line":137},[36,7479,2444],{"class":163},[36,7481,6969],{"class":163},[36,7483,7484],{"class":98},"p2",[36,7486,176],{"class":163},[36,7488,7489],{"class":98},"arr;\n",[36,7491,7492,7494,7496,7498,7500,7502,7504,7506,7508,7510,7512,7514],{"class":38,"line":147},[36,7493,3652],{"class":163},[36,7495,2130],{"class":98},[36,7497,624],{"class":163},[36,7499,3483],{"class":98},[36,7501,176],{"class":163},[36,7503,807],{"class":109},[36,7505,3490],{"class":98},[36,7507,179],{"class":163},[36,7509,1060],{"class":109},[36,7511,3490],{"class":98},[36,7513,2751],{"class":163},[36,7515,627],{"class":98},[36,7517,7518],{"class":38,"line":153},[36,7519,2489],{"class":98},[36,7521,7522,7524,7526,7528,7530],{"class":38,"line":191},[36,7523,3902],{"class":98},[36,7525,6870],{"class":163},[36,7527,7484],{"class":98},[36,7529,1655],{"class":163},[36,7531,1677],{"class":98},[36,7533,7534,7537,7539],{"class":38,"line":197},[36,7535,7536],{"class":98},"        p2",[36,7538,2751],{"class":163},[36,7540,1772],{"class":98},[36,7542,7543],{"class":38,"line":217},[36,7544,2646],{"class":98},[36,7546,7547],{"class":38,"line":223},[36,7548,2044],{"class":98},[559,7550,7552],{"id":7551},"_37指针和函数","3.7指针和函数",[14,7554,7555],{},"利用指针做函数参数，可以修改实参的值",[14,7557,7558],{},"值传递：只改变形参，不改变实参",[14,7560,7561],{},"地址传递：",[26,7563,7565],{"className":609,"code":7564,"language":611,"meta":31,"style":31},"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",[33,7566,7567,7592,7596,7608,7619,7629,7633,7641,7645,7657,7669,7674,7690,7705,7720],{"__ignoreMap":31},[36,7568,7569,7571,7573,7575,7577,7579,7582,7584,7586,7588,7590],{"class":38,"line":39},[36,7570,5815],{"class":163},[36,7572,5818],{"class":55},[36,7574,621],{"class":98},[36,7576,624],{"class":163},[36,7578,6969],{"class":163},[36,7580,7581],{"class":5667},"p1",[36,7583,992],{"class":98},[36,7585,624],{"class":163},[36,7587,6969],{"class":163},[36,7589,7484],{"class":5667},[36,7591,627],{"class":98},[36,7593,7594],{"class":38,"line":46},[36,7595,2025],{"class":98},[36,7597,7598,7600,7602,7605],{"class":38,"line":52},[36,7599,2444],{"class":163},[36,7601,4706],{"class":98},[36,7603,7604],{"class":163},"=*",[36,7606,7607],{"class":98},"p1;\n",[36,7609,7610,7612,7614,7616],{"class":38,"line":66},[36,7611,6854],{"class":163},[36,7613,7581],{"class":98},[36,7615,7604],{"class":163},[36,7617,7618],{"class":98},"p2;\n",[36,7620,7621,7623,7625,7627],{"class":38,"line":72},[36,7622,6854],{"class":163},[36,7624,7484],{"class":98},[36,7626,176],{"class":163},[36,7628,4731],{"class":98},[36,7630,7631],{"class":38,"line":82},[36,7632,2044],{"class":98},[36,7634,7635,7637,7639],{"class":38,"line":88},[36,7636,624],{"class":163},[36,7638,2432],{"class":55},[36,7640,2435],{"class":98},[36,7642,7643],{"class":38,"line":113},[36,7644,2025],{"class":98},[36,7646,7647,7649,7651,7653,7655],{"class":38,"line":119},[36,7648,2444],{"class":163},[36,7650,1877],{"class":98},[36,7652,176],{"class":163},[36,7654,1060],{"class":109},[36,7656,1772],{"class":98},[36,7658,7659,7661,7663,7665,7667],{"class":38,"line":131},[36,7660,2444],{"class":163},[36,7662,3284],{"class":98},[36,7664,176],{"class":163},[36,7666,1313],{"class":109},[36,7668,1772],{"class":98},[36,7670,7671],{"class":38,"line":137},[36,7672,7673],{"class":42},"    \u002F\u002F地址传递\n",[36,7675,7676,7678,7680,7682,7685,7687],{"class":38,"line":147},[36,7677,6012],{"class":55},[36,7679,621],{"class":98},[36,7681,967],{"class":163},[36,7683,7684],{"class":98},"a,",[36,7686,967],{"class":163},[36,7688,7689],{"class":98},"b);\n",[36,7691,7692,7694,7696,7698,7700,7702],{"class":38,"line":153},[36,7693,2030],{"class":98},[36,7695,1655],{"class":163},[36,7697,20],{"class":98},[36,7699,1655],{"class":163},[36,7701,1720],{"class":98},[36,7703,7704],{"class":42},"\u002F\u002F20\n",[36,7706,7707,7709,7711,7713,7715,7717],{"class":38,"line":191},[36,7708,2030],{"class":98},[36,7710,1655],{"class":163},[36,7712,878],{"class":98},[36,7714,1655],{"class":163},[36,7716,1720],{"class":98},[36,7718,7719],{"class":42},"\u002F\u002F10\n",[36,7721,7722],{"class":38,"line":197},[36,7723,2044],{"class":98},[14,7725,7726],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[559,7728,7730],{"id":7729},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,7732,7733],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,7735,7736,7737,7739],{},"例如数组：int arr",[36,7738,1060],{},"={4,3,6,9,1,2,10,8,7,5}",[26,7741,7743],{"className":609,"code":7742,"language":611,"meta":31,"style":31},"#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",[33,7744,7745,7751,7761,7785,7789,7820,7824,7858,7862,7880,7884,7895,7910,7925,7929,7933,7937,7941,7945,7953,7957,7962,8016,8028,8040,8045,8053,8057,8062,8087,8091,8106,8115,8119],{"__ignoreMap":31},[36,7746,7747,7749],{"class":38,"line":39},[36,7748,2409],{"class":163},[36,7750,2412],{"class":59},[36,7752,7753,7755,7757,7759],{"class":38,"line":46},[36,7754,2417],{"class":163},[36,7756,2420],{"class":163},[36,7758,2423],{"class":55},[36,7760,1772],{"class":98},[36,7762,7763,7765,7768,7770,7772,7774,7776,7778,7780,7783],{"class":38,"line":52},[36,7764,5815],{"class":163},[36,7766,7767],{"class":55}," bubbleSort",[36,7769,621],{"class":98},[36,7771,624],{"class":163},[36,7773,6969],{"class":163},[36,7775,14],{"class":5667},[36,7777,992],{"class":98},[36,7779,624],{"class":163},[36,7781,7782],{"class":5667}," len",[36,7784,627],{"class":98},[36,7786,7787],{"class":38,"line":66},[36,7788,2025],{"class":98},[36,7790,7791,7793,7795,7797,7799,7801,7803,7805,7807,7810,7812,7814,7816,7818],{"class":38,"line":72},[36,7792,3652],{"class":163},[36,7794,621],{"class":98},[36,7796,624],{"class":163},[36,7798,3483],{"class":98},[36,7800,176],{"class":163},[36,7802,807],{"class":109},[36,7804,3490],{"class":98},[36,7806,179],{"class":163},[36,7808,7809],{"class":98},"len",[36,7811,1146],{"class":163},[36,7813,833],{"class":109},[36,7815,3490],{"class":98},[36,7817,2751],{"class":163},[36,7819,627],{"class":98},[36,7821,7822],{"class":38,"line":82},[36,7823,2489],{"class":98},[36,7825,7826,7828,7830,7832,7834,7836,7838,7840,7842,7844,7846,7848,7850,7852,7854,7856],{"class":38,"line":88},[36,7827,3854],{"class":163},[36,7829,621],{"class":98},[36,7831,624],{"class":163},[36,7833,3861],{"class":98},[36,7835,176],{"class":163},[36,7837,807],{"class":109},[36,7839,3868],{"class":98},[36,7841,179],{"class":163},[36,7843,7809],{"class":98},[36,7845,1146],{"class":163},[36,7847,1055],{"class":98},[36,7849,1146],{"class":163},[36,7851,833],{"class":109},[36,7853,3868],{"class":98},[36,7855,2751],{"class":163},[36,7857,627],{"class":98},[36,7859,7860],{"class":38,"line":113},[36,7861,2968],{"class":98},[36,7863,7864,7866,7869,7871,7874,7876,7878],{"class":38,"line":119},[36,7865,5093],{"class":163},[36,7867,7868],{"class":98},"(p[j]",[36,7870,173],{"class":163},[36,7872,7873],{"class":98},"p[j",[36,7875,1095],{"class":163},[36,7877,833],{"class":109},[36,7879,5108],{"class":98},[36,7881,7882],{"class":38,"line":131},[36,7883,5113],{"class":98},[36,7885,7886,7888,7890,7892],{"class":38,"line":137},[36,7887,5118],{"class":163},[36,7889,4706],{"class":98},[36,7891,176],{"class":163},[36,7893,7894],{"class":98},"p[j];\n",[36,7896,7897,7900,7902,7904,7906,7908],{"class":38,"line":147},[36,7898,7899],{"class":98},"                p[j]",[36,7901,176],{"class":163},[36,7903,7873],{"class":98},[36,7905,1095],{"class":163},[36,7907,833],{"class":109},[36,7909,5141],{"class":98},[36,7911,7912,7915,7917,7919,7921,7923],{"class":38,"line":153},[36,7913,7914],{"class":98},"                p[j",[36,7916,1095],{"class":163},[36,7918,833],{"class":109},[36,7920,1552],{"class":98},[36,7922,176],{"class":163},[36,7924,4731],{"class":98},[36,7926,7927],{"class":38,"line":191},[36,7928,5161],{"class":98},[36,7930,7931],{"class":38,"line":197},[36,7932,2987],{"class":98},[36,7934,7935],{"class":38,"line":217},[36,7936,2646],{"class":98},[36,7938,7939],{"class":38,"line":223},[36,7940,2044],{"class":98},[36,7942,7943],{"class":38,"line":243},[36,7944,247],{"emptyLinePlaceholder":246},[36,7946,7947,7949,7951],{"class":38,"line":250},[36,7948,624],{"class":163},[36,7950,2432],{"class":55},[36,7952,2435],{"class":98},[36,7954,7955],{"class":38,"line":256},[36,7956,2025],{"class":98},[36,7958,7959],{"class":38,"line":273},[36,7960,7961],{"class":42},"    \u002F\u002F 1.创建数组\n",[36,7963,7964,7966,7968,7970,7972,7974,7976,7978,7980,7982,7984,7986,7988,7990,7992,7994,7996,7998,8000,8002,8004,8006,8008,8010,8012,8014],{"class":38,"line":278},[36,7965,2444],{"class":163},[36,7967,4413],{"class":98},[36,7969,1060],{"class":109},[36,7971,1552],{"class":98},[36,7973,176],{"class":163},[36,7975,1509],{"class":98},[36,7977,908],{"class":109},[36,7979,992],{"class":98},[36,7981,689],{"class":109},[36,7983,992],{"class":98},[36,7985,958],{"class":109},[36,7987,992],{"class":98},[36,7989,1034],{"class":109},[36,7991,992],{"class":98},[36,7993,833],{"class":109},[36,7995,992],{"class":98},[36,7997,694],{"class":109},[36,7999,992],{"class":98},[36,8001,1060],{"class":109},[36,8003,992],{"class":98},[36,8005,1009],{"class":109},[36,8007,992],{"class":98},[36,8009,983],{"class":109},[36,8011,992],{"class":98},[36,8013,933],{"class":109},[36,8015,4446],{"class":98},[36,8017,8018,8020,8022,8024,8026],{"class":38,"line":284},[36,8019,2444],{"class":163},[36,8021,7782],{"class":98},[36,8023,176],{"class":163},[36,8025,1060],{"class":109},[36,8027,1772],{"class":98},[36,8029,8030,8032,8034,8036,8038],{"class":38,"line":315},[36,8031,2444],{"class":163},[36,8033,6969],{"class":163},[36,8035,14],{"class":98},[36,8037,176],{"class":163},[36,8039,7489],{"class":98},[36,8041,8042],{"class":38,"line":320},[36,8043,8044],{"class":42},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[36,8046,8047,8050],{"class":38,"line":326},[36,8048,8049],{"class":55},"    bubbleSort",[36,8051,8052],{"class":98},"(p,len);\n",[36,8054,8055],{"class":38,"line":343},[36,8056,247],{"emptyLinePlaceholder":246},[36,8058,8059],{"class":38,"line":348},[36,8060,8061],{"class":42},"    \u002F\u002F 3.打印排序后的数组\n",[36,8063,8064,8066,8068,8070,8072,8074,8076,8078,8080,8083,8085],{"class":38,"line":354},[36,8065,3652],{"class":163},[36,8067,2130],{"class":98},[36,8069,624],{"class":163},[36,8071,3483],{"class":98},[36,8073,176],{"class":163},[36,8075,807],{"class":109},[36,8077,3665],{"class":98},[36,8079,179],{"class":163},[36,8081,8082],{"class":98},"len; i",[36,8084,2751],{"class":163},[36,8086,627],{"class":98},[36,8088,8089],{"class":38,"line":370},[36,8090,2489],{"class":98},[36,8092,8093,8095,8097,8099,8101,8104],{"class":38,"line":375},[36,8094,3902],{"class":98},[36,8096,6870],{"class":163},[36,8098,14],{"class":98},[36,8100,1655],{"class":163},[36,8102,8103],{"class":59},"\"\"",[36,8105,1772],{"class":98},[36,8107,8108,8111,8113],{"class":38,"line":381},[36,8109,8110],{"class":98},"        p",[36,8112,2751],{"class":163},[36,8114,1772],{"class":98},[36,8116,8117],{"class":38,"line":399},[36,8118,2646],{"class":98},[36,8120,8121],{"class":38,"line":404},[36,8122,2044],{"class":98},[537,8124,8125],{},"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":31,"searchDepth":46,"depth":46,"links":8127},[8128,8129,8130,8131,8132,8133,8134,8135],{"id":6734,"depth":46,"text":6735},{"id":6900,"depth":46,"text":6901},{"id":7056,"depth":46,"text":7057},{"id":7134,"depth":46,"text":7135},{"id":7213,"depth":46,"text":7214},{"id":7312,"depth":46,"text":7313},{"id":7551,"depth":46,"text":7552},{"id":7729,"depth":46,"text":7730},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6723,"description":6731},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":8142,"title":8143,"body":8144,"description":8151,"extension":543,"meta":11113,"navigation":246,"path":11114,"seo":11115,"stem":11116,"__hash__":11117},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":8145,"toc":11104},[8146,8149,8152,8156,8159,8162,8173,8501,8504,8508,8511,8518,8773,8777,8780,8783,8938,8942,8945,8948,9154,9158,9161,9464,9467,9475,9479,9482,9633,9635,9646,9703,9707,9712,10367,10375,10378,10472,10475,11095,11101],[10,8147,8143],{"id":8148},"_4结构体",[14,8150,8151],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[559,8153,8155],{"id":8154},"_41结构体定义与使用","4.1结构体定义与使用",[14,8157,8158],{},"语法：struct 结构体名 {结构体成员列表}；",[14,8160,8161],{},"通过结构体创建变量的方式：",[1618,8163,8164,8167,8170],{},[574,8165,8166],{},"struct 结构体名 变量名",[574,8168,8169],{},"struct 结构体名 变量名={成员1值，成员2值...}",[574,8171,8172],{},"定义结构体时顺便创建变量",[26,8174,8176],{"className":609,"code":8175,"language":611,"meta":31,"style":31},"#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",[33,8177,8178,8184,8194,8201,8206,8214,8218,8223,8227,8232,8237,8242,8249,8254,8261,8265,8272,8276,8280,8284,8288,8292,8296,8302,8306,8312,8320,8328,8332,8337,8342,8353,8358,8370,8381,8392,8397,8420,8424,8429,8455,8459,8464,8475,8486,8497],{"__ignoreMap":31},[36,8179,8180,8182],{"class":38,"line":39},[36,8181,2409],{"class":163},[36,8183,2412],{"class":59},[36,8185,8186,8188,8190,8192],{"class":38,"line":46},[36,8187,2417],{"class":163},[36,8189,2420],{"class":163},[36,8191,2423],{"class":55},[36,8193,1772],{"class":98},[36,8195,8196,8198],{"class":38,"line":52},[36,8197,2409],{"class":163},[36,8199,8200],{"class":59},"\u003Cstring>\n",[36,8202,8203],{"class":38,"line":66},[36,8204,8205],{"class":42},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[36,8207,8208,8211],{"class":38,"line":72},[36,8209,8210],{"class":163},"struct",[36,8212,8213],{"class":55}," Student\n",[36,8215,8216],{"class":38,"line":82},[36,8217,2025],{"class":98},[36,8219,8220],{"class":38,"line":88},[36,8221,8222],{"class":42},"    \u002F\u002F成员列表\n",[36,8224,8225],{"class":38,"line":113},[36,8226,247],{"emptyLinePlaceholder":246},[36,8228,8229],{"class":38,"line":119},[36,8230,8231],{"class":42},"    \u002F\u002F姓名\n",[36,8233,8234],{"class":38,"line":131},[36,8235,8236],{"class":98},"    string name;\n",[36,8238,8239],{"class":38,"line":137},[36,8240,8241],{"class":42},"    \u002F\u002F年龄\n",[36,8243,8244,8246],{"class":38,"line":147},[36,8245,2444],{"class":163},[36,8247,8248],{"class":98}," age;\n",[36,8250,8251],{"class":38,"line":153},[36,8252,8253],{"class":42},"    \u002F\u002F分数\n",[36,8255,8256,8258],{"class":38,"line":191},[36,8257,2444],{"class":163},[36,8259,8260],{"class":98}," score;\n",[36,8262,8263],{"class":38,"line":197},[36,8264,4446],{"class":98},[36,8266,8267,8269],{"class":38,"line":217},[36,8268,8210],{"class":163},[36,8270,8271],{"class":55}," School\n",[36,8273,8274],{"class":38,"line":223},[36,8275,2025],{"class":98},[36,8277,8278],{"class":38,"line":243},[36,8279,8222],{"class":42},[36,8281,8282],{"class":38,"line":250},[36,8283,247],{"emptyLinePlaceholder":246},[36,8285,8286],{"class":38,"line":256},[36,8287,8231],{"class":42},[36,8289,8290],{"class":38,"line":273},[36,8291,8236],{"class":98},[36,8293,8294],{"class":38,"line":278},[36,8295,8241],{"class":42},[36,8297,8298,8300],{"class":38,"line":284},[36,8299,2444],{"class":163},[36,8301,8248],{"class":98},[36,8303,8304],{"class":38,"line":315},[36,8305,8253],{"class":42},[36,8307,8308,8310],{"class":38,"line":320},[36,8309,2444],{"class":163},[36,8311,8260],{"class":98},[36,8313,8314,8317],{"class":38,"line":326},[36,8315,8316],{"class":98},"} s3;",[36,8318,8319],{"class":42}," \u002F\u002F创建结构体时就创建了变量\n",[36,8321,8322,8324,8326],{"class":38,"line":343},[36,8323,624],{"class":163},[36,8325,2432],{"class":55},[36,8327,2435],{"class":98},[36,8329,8330],{"class":38,"line":348},[36,8331,2025],{"class":98},[36,8333,8334],{"class":38,"line":354},[36,8335,8336],{"class":42},"    \u002F\u002F2.通过学生类型创建具体学生\n",[36,8338,8339],{"class":38,"line":370},[36,8340,8341],{"class":42},"    \u002F\u002F2.1 struct Student s1;\n",[36,8343,8344,8347,8350],{"class":38,"line":375},[36,8345,8346],{"class":163},"    struct",[36,8348,8349],{"class":55}," Student",[36,8351,8352],{"class":98}," s1;\n",[36,8354,8355],{"class":38,"line":381},[36,8356,8357],{"class":42},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[36,8359,8360,8363,8365,8368],{"class":38,"line":399},[36,8361,8362],{"class":98},"    s1.name",[36,8364,176],{"class":163},[36,8366,8367],{"class":59},"\"张三\"",[36,8369,1772],{"class":98},[36,8371,8372,8375,8377,8379],{"class":38,"line":404},[36,8373,8374],{"class":98},"    s1.age",[36,8376,176],{"class":163},[36,8378,1264],{"class":109},[36,8380,1772],{"class":98},[36,8382,8383,8386,8388,8390],{"class":38,"line":410},[36,8384,8385],{"class":98},"    s1.score",[36,8387,176],{"class":163},[36,8389,869],{"class":109},[36,8391,1772],{"class":98},[36,8393,8394],{"class":38,"line":423},[36,8395,8396],{"class":42},"    \u002F\u002F输出结果\n",[36,8398,8399,8401,8403,8406,8408,8411,8413,8416,8418],{"class":38,"line":436},[36,8400,2030],{"class":98},[36,8402,1655],{"class":163},[36,8404,8405],{"class":98},"s1.name",[36,8407,1655],{"class":163},[36,8409,8410],{"class":98},"s1.age",[36,8412,1655],{"class":163},[36,8414,8415],{"class":98},"s1.score",[36,8417,1655],{"class":163},[36,8419,1677],{"class":98},[36,8421,8422],{"class":38,"line":441},[36,8423,247],{"emptyLinePlaceholder":246},[36,8425,8426],{"class":38,"line":447},[36,8427,8428],{"class":42},"    \u002F\u002F2.2 struct Student s2={...}\n",[36,8430,8431,8433,8435,8438,8440,8442,8445,8447,8449,8451,8453],{"class":38,"line":465},[36,8432,8346],{"class":163},[36,8434,8349],{"class":55},[36,8436,8437],{"class":98}," s2",[36,8439,176],{"class":163},[36,8441,1509],{"class":98},[36,8443,8444],{"class":59},"\"王五\"",[36,8446,992],{"class":98},[36,8448,1264],{"class":109},[36,8450,992],{"class":98},[36,8452,869],{"class":109},[36,8454,4446],{"class":98},[36,8456,8457],{"class":38,"line":470},[36,8458,247],{"emptyLinePlaceholder":246},[36,8460,8461],{"class":38,"line":476},[36,8462,8463],{"class":42},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[36,8465,8466,8469,8471,8473],{"class":38,"line":496},[36,8467,8468],{"class":98},"    s3.name",[36,8470,176],{"class":163},[36,8472,4129],{"class":59},[36,8474,1772],{"class":98},[36,8476,8477,8480,8482,8484],{"class":38,"line":501},[36,8478,8479],{"class":98},"    s3.age",[36,8481,176],{"class":163},[36,8483,1264],{"class":109},[36,8485,1772],{"class":98},[36,8487,8488,8491,8493,8495],{"class":38,"line":507},[36,8489,8490],{"class":98},"    s3.score",[36,8492,176],{"class":163},[36,8494,1313],{"class":109},[36,8496,1772],{"class":98},[36,8498,8499],{"class":38,"line":517},[36,8500,2044],{"class":98},[14,8502,8503],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[559,8505,8507],{"id":8506},"_42结构体数组","4.2结构体数组",[14,8509,8510],{},"将自定义的结构体放入到数组中方便维护",[14,8512,8513,8514,8517],{},"语法：struct 结构体名 数组名",[36,8515,8516],{},"元素个数","={ {}，{},...{} };",[26,8519,8521],{"className":609,"code":8520,"language":611,"meta":31,"style":31},"#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",[33,8522,8523,8529,8539,8545,8550,8556,8560,8564,8570,8576,8580,8584,8592,8596,8601,8616,8620,8636,8652,8656,8661,8677,8692,8707,8712,8738,8742,8765,8769],{"__ignoreMap":31},[36,8524,8525,8527],{"class":38,"line":39},[36,8526,2409],{"class":163},[36,8528,2412],{"class":59},[36,8530,8531,8533,8535,8537],{"class":38,"line":46},[36,8532,2417],{"class":163},[36,8534,2420],{"class":163},[36,8536,2423],{"class":55},[36,8538,1772],{"class":98},[36,8540,8541,8543],{"class":38,"line":52},[36,8542,2409],{"class":163},[36,8544,8200],{"class":59},[36,8546,8547],{"class":38,"line":66},[36,8548,8549],{"class":42},"\u002F\u002F1.定义结构体\n",[36,8551,8552,8554],{"class":38,"line":72},[36,8553,8210],{"class":163},[36,8555,8213],{"class":55},[36,8557,8558],{"class":38,"line":82},[36,8559,2025],{"class":98},[36,8561,8562],{"class":38,"line":88},[36,8563,8236],{"class":98},[36,8565,8566,8568],{"class":38,"line":113},[36,8567,2444],{"class":163},[36,8569,8248],{"class":98},[36,8571,8572,8574],{"class":38,"line":119},[36,8573,2444],{"class":163},[36,8575,8260],{"class":98},[36,8577,8578],{"class":38,"line":131},[36,8579,247],{"emptyLinePlaceholder":246},[36,8581,8582],{"class":38,"line":137},[36,8583,4446],{"class":98},[36,8585,8586,8588,8590],{"class":38,"line":147},[36,8587,624],{"class":163},[36,8589,2432],{"class":55},[36,8591,2435],{"class":98},[36,8593,8594],{"class":38,"line":153},[36,8595,2025],{"class":98},[36,8597,8598],{"class":38,"line":191},[36,8599,8600],{"class":42},"    \u002F\u002F2.创建结构体数组\n",[36,8602,8603,8605,8607,8610,8612,8614],{"class":38,"line":197},[36,8604,8346],{"class":163},[36,8606,8349],{"class":55},[36,8608,8609],{"class":98}," stuArray[",[36,8611,694],{"class":109},[36,8613,1552],{"class":98},[36,8615,5359],{"class":163},[36,8617,8618],{"class":38,"line":217},[36,8619,2489],{"class":98},[36,8621,8622,8624,8626,8628,8630,8632,8634],{"class":38,"line":223},[36,8623,5368],{"class":98},[36,8625,8367],{"class":59},[36,8627,992],{"class":98},[36,8629,1264],{"class":109},[36,8631,992],{"class":98},[36,8633,926],{"class":109},[36,8635,5381],{"class":98},[36,8637,8638,8640,8642,8644,8646,8648,8650],{"class":38,"line":243},[36,8639,5368],{"class":98},[36,8641,4129],{"class":59},[36,8643,992],{"class":98},[36,8645,1189],{"class":109},[36,8647,992],{"class":98},[36,8649,1189],{"class":109},[36,8651,2044],{"class":98},[36,8653,8654],{"class":38,"line":250},[36,8655,2646],{"class":98},[36,8657,8658],{"class":38,"line":256},[36,8659,8660],{"class":42},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[36,8662,8663,8666,8668,8671,8673,8675],{"class":38,"line":273},[36,8664,8665],{"class":98},"    stuArray[",[36,8667,833],{"class":109},[36,8669,8670],{"class":98},"].name",[36,8672,176],{"class":163},[36,8674,4152],{"class":59},[36,8676,1772],{"class":98},[36,8678,8679,8681,8683,8686,8688,8690],{"class":38,"line":278},[36,8680,8665],{"class":98},[36,8682,833],{"class":109},[36,8684,8685],{"class":98},"].age",[36,8687,176],{"class":163},[36,8689,694],{"class":109},[36,8691,1772],{"class":98},[36,8693,8694,8696,8698,8701,8703,8705],{"class":38,"line":284},[36,8695,8665],{"class":98},[36,8697,833],{"class":109},[36,8699,8700],{"class":98},"].score",[36,8702,176],{"class":163},[36,8704,694],{"class":109},[36,8706,1772],{"class":98},[36,8708,8709],{"class":38,"line":315},[36,8710,8711],{"class":42},"    \u002F\u002F4.遍历结构体数组\n",[36,8713,8714,8716,8718,8720,8722,8724,8726,8728,8730,8732,8734,8736],{"class":38,"line":320},[36,8715,3652],{"class":163},[36,8717,2130],{"class":98},[36,8719,624],{"class":163},[36,8721,3483],{"class":98},[36,8723,176],{"class":163},[36,8725,807],{"class":109},[36,8727,3490],{"class":98},[36,8729,179],{"class":163},[36,8731,694],{"class":109},[36,8733,3490],{"class":98},[36,8735,2751],{"class":163},[36,8737,627],{"class":98},[36,8739,8740],{"class":38,"line":326},[36,8741,2489],{"class":98},[36,8743,8744,8746,8748,8751,8753,8756,8758,8761,8763],{"class":38,"line":343},[36,8745,3902],{"class":98},[36,8747,1655],{"class":163},[36,8749,8750],{"class":98},"stuArray[i].name",[36,8752,1655],{"class":163},[36,8754,8755],{"class":98},"stuArray[i].age",[36,8757,1655],{"class":163},[36,8759,8760],{"class":98},"stuArray[i].score",[36,8762,1655],{"class":163},[36,8764,1677],{"class":98},[36,8766,8767],{"class":38,"line":348},[36,8768,2646],{"class":98},[36,8770,8771],{"class":38,"line":354},[36,8772,2044],{"class":98},[559,8774,8776],{"id":8775},"_43结构体指针","4.3结构体指针",[14,8778,8779],{},"作用：通过指针访问结构体中的成员",[14,8781,8782],{},"利用操作符->可以通过结构体指针访问结构体属性",[26,8784,8786],{"className":609,"code":8785,"language":611,"meta":31,"style":31},"#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",[33,8787,8788,8794,8804,8810,8814,8820,8824,8828,8834,8840,8844,8852,8856,8861,8886,8891,8906,8911,8934],{"__ignoreMap":31},[36,8789,8790,8792],{"class":38,"line":39},[36,8791,2409],{"class":163},[36,8793,2412],{"class":59},[36,8795,8796,8798,8800,8802],{"class":38,"line":46},[36,8797,2417],{"class":163},[36,8799,2420],{"class":163},[36,8801,2423],{"class":55},[36,8803,1772],{"class":98},[36,8805,8806,8808],{"class":38,"line":52},[36,8807,2409],{"class":163},[36,8809,8200],{"class":59},[36,8811,8812],{"class":38,"line":66},[36,8813,8549],{"class":42},[36,8815,8816,8818],{"class":38,"line":72},[36,8817,8210],{"class":163},[36,8819,8213],{"class":55},[36,8821,8822],{"class":38,"line":82},[36,8823,2025],{"class":98},[36,8825,8826],{"class":38,"line":88},[36,8827,8236],{"class":98},[36,8829,8830,8832],{"class":38,"line":113},[36,8831,2444],{"class":163},[36,8833,8248],{"class":98},[36,8835,8836,8838],{"class":38,"line":119},[36,8837,2444],{"class":163},[36,8839,8260],{"class":98},[36,8841,8842],{"class":38,"line":131},[36,8843,4446],{"class":98},[36,8845,8846,8848,8850],{"class":38,"line":137},[36,8847,624],{"class":163},[36,8849,2432],{"class":55},[36,8851,2435],{"class":98},[36,8853,8854],{"class":38,"line":147},[36,8855,2025],{"class":98},[36,8857,8858],{"class":38,"line":153},[36,8859,8860],{"class":42},"    \u002F\u002F创建学生结构体变量\n",[36,8862,8863,8865,8867,8870,8872,8874,8876,8878,8880,8882,8884],{"class":38,"line":191},[36,8864,8346],{"class":163},[36,8866,8349],{"class":55},[36,8868,8869],{"class":98}," s",[36,8871,176],{"class":163},[36,8873,1509],{"class":98},[36,8875,8367],{"class":59},[36,8877,992],{"class":98},[36,8879,1264],{"class":109},[36,8881,992],{"class":98},[36,8883,2190],{"class":109},[36,8885,4446],{"class":98},[36,8887,8888],{"class":38,"line":197},[36,8889,8890],{"class":42},"    \u002F\u002F通过指针指向结构体变量\n",[36,8892,8893,8895,8897,8899,8901,8903],{"class":38,"line":217},[36,8894,8346],{"class":163},[36,8896,8349],{"class":55},[36,8898,6969],{"class":163},[36,8900,14],{"class":98},[36,8902,6790],{"class":163},[36,8904,8905],{"class":98},"s\n",[36,8907,8908],{"class":38,"line":223},[36,8909,8910],{"class":42},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[36,8912,8913,8915,8917,8920,8922,8925,8927,8930,8932],{"class":38,"line":243},[36,8914,2030],{"class":98},[36,8916,1655],{"class":163},[36,8918,8919],{"class":98},"p->name",[36,8921,1655],{"class":163},[36,8923,8924],{"class":98},"p->age",[36,8926,1655],{"class":163},[36,8928,8929],{"class":98},"p->score",[36,8931,1655],{"class":163},[36,8933,1677],{"class":98},[36,8935,8936],{"class":38,"line":250},[36,8937,2044],{"class":98},[559,8939,8941],{"id":8940},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,8943,8944],{},"作用：结构体中的成员可以是另一个结构体",[14,8946,8947],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[26,8949,8951],{"className":609,"code":8950,"language":611,"meta":31,"style":31},"#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",[33,8952,8953,8959,8969,8975,8980,8988,8992,8996,9002,9008,9012,9017,9024,9028,9035,9039,9045,9050,9054,9062,9066,9071,9076,9081,9092,9104,9115,9128,9139,9150],{"__ignoreMap":31},[36,8954,8955,8957],{"class":38,"line":39},[36,8956,2409],{"class":163},[36,8958,2412],{"class":59},[36,8960,8961,8963,8965,8967],{"class":38,"line":46},[36,8962,2417],{"class":163},[36,8964,2420],{"class":163},[36,8966,2423],{"class":55},[36,8968,1772],{"class":98},[36,8970,8971,8973],{"class":38,"line":52},[36,8972,2409],{"class":163},[36,8974,8200],{"class":59},[36,8976,8977],{"class":38,"line":66},[36,8978,8979],{"class":42},"\u002F\u002F定义学生结构体\n",[36,8981,8982,8984,8986],{"class":38,"line":72},[36,8983,8210],{"class":163},[36,8985,8349],{"class":55},[36,8987,3125],{"class":98},[36,8989,8990],{"class":38,"line":82},[36,8991,2025],{"class":98},[36,8993,8994],{"class":38,"line":88},[36,8995,8236],{"class":98},[36,8997,8998,9000],{"class":38,"line":113},[36,8999,2444],{"class":163},[36,9001,8248],{"class":98},[36,9003,9004,9006],{"class":38,"line":119},[36,9005,2444],{"class":163},[36,9007,8260],{"class":98},[36,9009,9010],{"class":38,"line":131},[36,9011,2044],{"class":98},[36,9013,9014],{"class":38,"line":137},[36,9015,9016],{"class":42},"\u002F\u002F定义老师结构体\n",[36,9018,9019,9021],{"class":38,"line":147},[36,9020,8210],{"class":163},[36,9022,9023],{"class":55}," Teacher\n",[36,9025,9026],{"class":38,"line":153},[36,9027,2025],{"class":98},[36,9029,9030,9032],{"class":38,"line":191},[36,9031,2444],{"class":163},[36,9033,9034],{"class":98}," id;\n",[36,9036,9037],{"class":38,"line":197},[36,9038,8236],{"class":98},[36,9040,9041,9043],{"class":38,"line":217},[36,9042,2444],{"class":163},[36,9044,8248],{"class":98},[36,9046,9047],{"class":38,"line":223},[36,9048,9049],{"class":98},"    Student stu;\n",[36,9051,9052],{"class":38,"line":243},[36,9053,2044],{"class":98},[36,9055,9056,9058,9060],{"class":38,"line":250},[36,9057,624],{"class":163},[36,9059,2432],{"class":55},[36,9061,6429],{"class":98},[36,9063,9064],{"class":38,"line":256},[36,9065,2025],{"class":98},[36,9067,9068],{"class":38,"line":273},[36,9069,9070],{"class":42},"    \u002F\u002F结构体嵌套结构体\n",[36,9072,9073],{"class":38,"line":278},[36,9074,9075],{"class":42},"    \u002F\u002F创建老师\n",[36,9077,9078],{"class":38,"line":284},[36,9079,9080],{"class":98},"    Teacher t;\n",[36,9082,9083,9086,9088,9090],{"class":38,"line":315},[36,9084,9085],{"class":98},"    t.id",[36,9087,176],{"class":163},[36,9089,926],{"class":109},[36,9091,1772],{"class":98},[36,9093,9094,9097,9099,9102],{"class":38,"line":320},[36,9095,9096],{"class":98},"    t.name",[36,9098,176],{"class":163},[36,9100,9101],{"class":59},"\"老王\"",[36,9103,1772],{"class":98},[36,9105,9106,9109,9111,9113],{"class":38,"line":326},[36,9107,9108],{"class":98},"    t.age",[36,9110,176],{"class":163},[36,9112,1264],{"class":109},[36,9114,1772],{"class":98},[36,9116,9117,9120,9122,9125],{"class":38,"line":343},[36,9118,9119],{"class":98},"    t.stu.name",[36,9121,176],{"class":163},[36,9123,9124],{"class":59},"\"小王\"",[36,9126,9127],{"class":98},"；\n",[36,9129,9130,9133,9135,9137],{"class":38,"line":348},[36,9131,9132],{"class":98},"    t.stu.age",[36,9134,176],{"class":163},[36,9136,1313],{"class":109},[36,9138,1772],{"class":98},[36,9140,9141,9144,9146,9148],{"class":38,"line":354},[36,9142,9143],{"class":98},"    t.stu.score",[36,9145,176],{"class":163},[36,9147,958],{"class":109},[36,9149,1772],{"class":98},[36,9151,9152],{"class":38,"line":370},[36,9153,2044],{"class":98},[559,9155,9157],{"id":9156},"_45结构体做函数参数","4.5结构体做函数参数",[14,9159,9160],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[26,9162,9164],{"className":609,"code":9163,"language":611,"meta":31,"style":31},"#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",[33,9165,9166,9172,9182,9188,9194,9198,9202,9208,9214,9218,9223,9228,9245,9249,9282,9286,9291,9310,9314,9345,9349,9357,9361,9370,9382,9394,9406,9419,9427,9440,9452,9460],{"__ignoreMap":31},[36,9167,9168,9170],{"class":38,"line":39},[36,9169,2409],{"class":163},[36,9171,2412],{"class":59},[36,9173,9174,9176,9178,9180],{"class":38,"line":46},[36,9175,2417],{"class":163},[36,9177,2420],{"class":163},[36,9179,2423],{"class":55},[36,9181,1772],{"class":98},[36,9183,9184,9186],{"class":38,"line":52},[36,9185,2409],{"class":163},[36,9187,8200],{"class":59},[36,9189,9190,9192],{"class":38,"line":66},[36,9191,8210],{"class":163},[36,9193,8213],{"class":55},[36,9195,9196],{"class":38,"line":72},[36,9197,2025],{"class":98},[36,9199,9200],{"class":38,"line":82},[36,9201,8236],{"class":98},[36,9203,9204,9206],{"class":38,"line":88},[36,9205,2444],{"class":163},[36,9207,8248],{"class":98},[36,9209,9210,9212],{"class":38,"line":113},[36,9211,2444],{"class":163},[36,9213,8260],{"class":98},[36,9215,9216],{"class":38,"line":119},[36,9217,4446],{"class":98},[36,9219,9220],{"class":38,"line":131},[36,9221,9222],{"class":42},"\u002F\u002F打印学生信息的函数\n",[36,9224,9225],{"class":38,"line":137},[36,9226,9227],{"class":42},"\u002F\u002F值传递\n",[36,9229,9230,9232,9235,9237,9239,9241,9243],{"class":38,"line":147},[36,9231,5815],{"class":163},[36,9233,9234],{"class":55}," printStudent1",[36,9236,621],{"class":98},[36,9238,8210],{"class":163},[36,9240,8349],{"class":55},[36,9242,8869],{"class":5667},[36,9244,627],{"class":98},[36,9246,9247],{"class":38,"line":153},[36,9248,2025],{"class":98},[36,9250,9251,9253,9255,9258,9260,9263,9265,9268,9270,9272,9274,9277,9279],{"class":38,"line":191},[36,9252,6980],{"class":98},[36,9254,1655],{"class":163},[36,9256,9257],{"class":98}," s.name ",[36,9259,1655],{"class":163},[36,9261,9262],{"class":59}," \" \"",[36,9264,1923],{"class":163},[36,9266,9267],{"class":98}," s.age ",[36,9269,1655],{"class":163},[36,9271,9262],{"class":59},[36,9273,1923],{"class":163},[36,9275,9276],{"class":98}," s.score ",[36,9278,1655],{"class":163},[36,9280,9281],{"class":98}," endl;\n",[36,9283,9284],{"class":38,"line":197},[36,9285,2044],{"class":98},[36,9287,9288],{"class":38,"line":217},[36,9289,9290],{"class":42},"\u002F\u002F地址传递\n",[36,9292,9293,9295,9298,9300,9302,9304,9306,9308],{"class":38,"line":223},[36,9294,5815],{"class":163},[36,9296,9297],{"class":55}," printStudent2",[36,9299,621],{"class":98},[36,9301,8210],{"class":163},[36,9303,8349],{"class":55},[36,9305,6969],{"class":163},[36,9307,1308],{"class":5667},[36,9309,627],{"class":98},[36,9311,9312],{"class":38,"line":243},[36,9313,2025],{"class":98},[36,9315,9316,9318,9320,9323,9325,9327,9329,9332,9334,9336,9338,9341,9343],{"class":38,"line":250},[36,9317,6980],{"class":98},[36,9319,1655],{"class":163},[36,9321,9322],{"class":98}," s->name ",[36,9324,1655],{"class":163},[36,9326,9262],{"class":59},[36,9328,1923],{"class":163},[36,9330,9331],{"class":98}," s->age ",[36,9333,1655],{"class":163},[36,9335,9262],{"class":59},[36,9337,1923],{"class":163},[36,9339,9340],{"class":98}," s->score ",[36,9342,1655],{"class":163},[36,9344,9281],{"class":98},[36,9346,9347],{"class":38,"line":256},[36,9348,2044],{"class":98},[36,9350,9351,9353,9355],{"class":38,"line":273},[36,9352,624],{"class":163},[36,9354,2432],{"class":55},[36,9356,2435],{"class":98},[36,9358,9359],{"class":38,"line":278},[36,9360,2025],{"class":98},[36,9362,9363,9365,9367],{"class":38,"line":284},[36,9364,8346],{"class":163},[36,9366,8349],{"class":55},[36,9368,9369],{"class":98}," s;\n",[36,9371,9372,9375,9377,9380],{"class":38,"line":315},[36,9373,9374],{"class":98},"    s.name ",[36,9376,176],{"class":163},[36,9378,9379],{"class":59}," \"张三\"",[36,9381,1772],{"class":98},[36,9383,9384,9387,9389,9392],{"class":38,"line":320},[36,9385,9386],{"class":98},"    s.age ",[36,9388,176],{"class":163},[36,9390,9391],{"class":109}," 20",[36,9393,1772],{"class":98},[36,9395,9396,9399,9401,9404],{"class":38,"line":326},[36,9397,9398],{"class":98},"    s.score ",[36,9400,176],{"class":163},[36,9402,9403],{"class":109}," 85",[36,9405,1772],{"class":98},[36,9407,9408,9410,9412,9415,9417],{"class":38,"line":343},[36,9409,2030],{"class":98},[36,9411,1655],{"class":163},[36,9413,9414],{"class":59},"\"值传递:\"",[36,9416,1655],{"class":163},[36,9418,1677],{"class":98},[36,9420,9421,9424],{"class":38,"line":348},[36,9422,9423],{"class":55},"    printStudent1",[36,9425,9426],{"class":98},"(s);\n",[36,9428,9429,9431,9433,9436,9438],{"class":38,"line":354},[36,9430,2030],{"class":98},[36,9432,1655],{"class":163},[36,9434,9435],{"class":59},"\"地址传递:\"",[36,9437,1655],{"class":163},[36,9439,1677],{"class":98},[36,9441,9442,9445,9447,9449],{"class":38,"line":370},[36,9443,9444],{"class":55},"    printStudent2",[36,9446,621],{"class":98},[36,9448,967],{"class":163},[36,9450,9451],{"class":98},"s); \n",[36,9453,9454,9456,9458],{"class":38,"line":375},[36,9455,4541],{"class":163},[36,9457,4544],{"class":109},[36,9459,1772],{"class":98},[36,9461,9462],{"class":38,"line":381},[36,9463,2044],{"class":98},[14,9465,9466],{},"注意：",[1618,9468,9469,9472],{},[574,9470,9471],{},"1.先定义结构体，不要在函数中写结构体的定义",[574,9473,9474],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[559,9476,9478],{"id":9477},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,9480,9481],{},"用const防止误操作",[26,9483,9485],{"className":609,"code":9484,"language":611,"meta":31,"style":31},"#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",[33,9486,9487,9493,9503,9509,9514,9518,9522,9528,9534,9538,9554,9558,9581,9585,9593,9597,9618,9625,9629],{"__ignoreMap":31},[36,9488,9489,9491],{"class":38,"line":39},[36,9490,2409],{"class":163},[36,9492,2412],{"class":59},[36,9494,9495,9497,9499,9501],{"class":38,"line":46},[36,9496,2417],{"class":163},[36,9498,2420],{"class":163},[36,9500,2423],{"class":55},[36,9502,1772],{"class":98},[36,9504,9505,9507],{"class":38,"line":52},[36,9506,2409],{"class":163},[36,9508,8200],{"class":59},[36,9510,9511],{"class":38,"line":66},[36,9512,9513],{"class":98},"sctuct Student\n",[36,9515,9516],{"class":38,"line":72},[36,9517,2025],{"class":98},[36,9519,9520],{"class":38,"line":82},[36,9521,8236],{"class":98},[36,9523,9524,9526],{"class":38,"line":88},[36,9525,2444],{"class":163},[36,9527,8248],{"class":98},[36,9529,9530,9532],{"class":38,"line":113},[36,9531,2444],{"class":163},[36,9533,8260],{"class":98},[36,9535,9536],{"class":38,"line":119},[36,9537,4446],{"class":98},[36,9539,9540,9542,9545,9547,9550,9552],{"class":38,"line":131},[36,9541,5815],{"class":163},[36,9543,9544],{"class":55}," printStudents",[36,9546,621],{"class":98},[36,9548,9549],{"class":55},"student",[36,9551,8869],{"class":5667},[36,9553,627],{"class":98},[36,9555,9556],{"class":38,"line":137},[36,9557,2025],{"class":98},[36,9559,9560,9562,9564,9567,9569,9572,9574,9577,9579],{"class":38,"line":147},[36,9561,2030],{"class":98},[36,9563,1655],{"class":163},[36,9565,9566],{"class":98},"s.name",[36,9568,1655],{"class":163},[36,9570,9571],{"class":98},"s.age",[36,9573,1655],{"class":163},[36,9575,9576],{"class":98},"s.score",[36,9578,1655],{"class":163},[36,9580,1677],{"class":98},[36,9582,9583],{"class":38,"line":153},[36,9584,2044],{"class":98},[36,9586,9587,9589,9591],{"class":38,"line":191},[36,9588,624],{"class":163},[36,9590,2432],{"class":55},[36,9592,6429],{"class":98},[36,9594,9595],{"class":38,"line":197},[36,9596,2025],{"class":98},[36,9598,9599,9602,9604,9606,9608,9610,9612,9614,9616],{"class":38,"line":217},[36,9600,9601],{"class":98},"    Student s",[36,9603,176],{"class":163},[36,9605,1509],{"class":98},[36,9607,8367],{"class":59},[36,9609,992],{"class":98},[36,9611,1264],{"class":109},[36,9613,992],{"class":98},[36,9615,1264],{"class":109},[36,9617,4446],{"class":98},[36,9619,9620,9623],{"class":38,"line":223},[36,9621,9622],{"class":55},"    printStudent",[36,9624,9426],{"class":98},[36,9626,9627],{"class":38,"line":243},[36,9628,247],{"emptyLinePlaceholder":246},[36,9630,9631],{"class":38,"line":250},[36,9632,2044],{"class":98},[14,9634,9466],{},[1618,9636,9637,9640,9643],{},[574,9638,9639],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[574,9641,9642],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[574,9644,9645],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[26,9647,9649],{"className":609,"code":9648,"language":611,"meta":31,"style":31},"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",[33,9650,9651,9670,9674,9679,9699],{"__ignoreMap":31},[36,9652,9653,9655,9657,9659,9661,9664,9666,9668],{"class":38,"line":39},[36,9654,5815],{"class":163},[36,9656,9544],{"class":55},[36,9658,621],{"class":98},[36,9660,7243],{"class":163},[36,9662,9663],{"class":55}," student",[36,9665,6969],{"class":163},[36,9667,1308],{"class":5667},[36,9669,627],{"class":98},[36,9671,9672],{"class":38,"line":46},[36,9673,2025],{"class":98},[36,9675,9676],{"class":38,"line":52},[36,9677,9678],{"class":42},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[36,9680,9681,9683,9685,9687,9689,9691,9693,9695,9697],{"class":38,"line":66},[36,9682,2030],{"class":98},[36,9684,1655],{"class":163},[36,9686,9566],{"class":98},[36,9688,1655],{"class":163},[36,9690,9571],{"class":98},[36,9692,1655],{"class":163},[36,9694,9576],{"class":98},[36,9696,1655],{"class":163},[36,9698,1677],{"class":98},[36,9700,9701],{"class":38,"line":72},[36,9702,2044],{"class":98},[559,9704,9706],{"id":9705},"_47案例","4.7案例",[571,9708,9709],{},[574,9710,9711],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[26,9713,9715],{"className":609,"code":9714,"language":611,"meta":31,"style":31},"#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",[33,9716,9717,9723,9733,9739,9746,9750,9756,9760,9765,9771,9777,9781,9785,9791,9795,9800,9805,9818,9822,9827,9853,9857,9869,9896,9900,9912,9922,9926,9931,9960,9964,9976,9985,10012,10023,10033,10037,10041,10045,10050,10074,10078,10102,10106,10125,10151,10155,10179,10201,10225,10230,10235,10240,10249,10254,10260,10281,10287,10301,10307,10334,10343,10349,10357,10362],{"__ignoreMap":31},[36,9718,9719,9721],{"class":38,"line":39},[36,9720,2409],{"class":163},[36,9722,2412],{"class":59},[36,9724,9725,9727,9729,9731],{"class":38,"line":46},[36,9726,2417],{"class":163},[36,9728,2420],{"class":163},[36,9730,2423],{"class":55},[36,9732,1772],{"class":98},[36,9734,9735,9737],{"class":38,"line":52},[36,9736,2409],{"class":163},[36,9738,8200],{"class":59},[36,9740,9741,9743],{"class":38,"line":66},[36,9742,2409],{"class":163},[36,9744,9745],{"class":59},"\u003Cctime>\n",[36,9747,9748],{"class":38,"line":72},[36,9749,8979],{"class":42},[36,9751,9752,9754],{"class":38,"line":82},[36,9753,8210],{"class":163},[36,9755,8213],{"class":55},[36,9757,9758],{"class":38,"line":88},[36,9759,2025],{"class":98},[36,9761,9762],{"class":38,"line":113},[36,9763,9764],{"class":98},"    string sName;\n",[36,9766,9767,9769],{"class":38,"line":119},[36,9768,2444],{"class":163},[36,9770,8248],{"class":98},[36,9772,9773,9775],{"class":38,"line":131},[36,9774,2444],{"class":163},[36,9776,8260],{"class":98},[36,9778,9779],{"class":38,"line":137},[36,9780,4446],{"class":98},[36,9782,9783],{"class":38,"line":147},[36,9784,9016],{"class":42},[36,9786,9787,9789],{"class":38,"line":153},[36,9788,8210],{"class":163},[36,9790,9023],{"class":55},[36,9792,9793],{"class":38,"line":191},[36,9794,2025],{"class":98},[36,9796,9797],{"class":38,"line":197},[36,9798,9799],{"class":98},"    string tName;\n",[36,9801,9802],{"class":38,"line":217},[36,9803,9804],{"class":42},"    \u002F\u002F学生数组\n",[36,9806,9807,9809,9811,9814,9816],{"class":38,"line":223},[36,9808,8346],{"class":163},[36,9810,8349],{"class":55},[36,9812,9813],{"class":98}," sArray[",[36,9815,933],{"class":109},[36,9817,5141],{"class":98},[36,9819,9820],{"class":38,"line":243},[36,9821,4446],{"class":98},[36,9823,9824],{"class":38,"line":250},[36,9825,9826],{"class":42},"\u002F\u002F给老师和学生赋值的函数\n",[36,9828,9829,9831,9834,9836,9838,9841,9844,9847,9849,9851],{"class":38,"line":256},[36,9830,5815],{"class":163},[36,9832,9833],{"class":55}," allocateSpace",[36,9835,621],{"class":98},[36,9837,8210],{"class":163},[36,9839,9840],{"class":55}," Teacher",[36,9842,9843],{"class":5667}," tArray",[36,9845,9846],{"class":98},"[],",[36,9848,624],{"class":163},[36,9850,7782],{"class":5667},[36,9852,627],{"class":98},[36,9854,9855],{"class":38,"line":273},[36,9856,2025],{"class":98},[36,9858,9859,9862,9864,9867],{"class":38,"line":278},[36,9860,9861],{"class":98},"    string nameSeed",[36,9863,176],{"class":163},[36,9865,9866],{"class":59},"\"ABCDE\"",[36,9868,1772],{"class":98},[36,9870,9871,9873,9875,9877,9880,9882,9884,9887,9889,9892,9894],{"class":38,"line":284},[36,9872,3652],{"class":163},[36,9874,2130],{"class":98},[36,9876,624],{"class":163},[36,9878,9879],{"class":98}," i ",[36,9881,176],{"class":163},[36,9883,4544],{"class":109},[36,9885,9886],{"class":98},"; i ",[36,9888,179],{"class":163},[36,9890,9891],{"class":98}," len; i",[36,9893,2751],{"class":163},[36,9895,627],{"class":98},[36,9897,9898],{"class":38,"line":315},[36,9899,2489],{"class":98},[36,9901,9902,9905,9907,9910],{"class":38,"line":320},[36,9903,9904],{"class":98},"        tArray[i].tName ",[36,9906,176],{"class":163},[36,9908,9909],{"class":59}," \"Teacher_\"",[36,9911,1772],{"class":98},[36,9913,9914,9916,9919],{"class":38,"line":326},[36,9915,9904],{"class":98},[36,9917,9918],{"class":163},"+=",[36,9920,9921],{"class":98},"nameSeed[i];\n",[36,9923,9924],{"class":38,"line":343},[36,9925,247],{"emptyLinePlaceholder":246},[36,9927,9928],{"class":38,"line":348},[36,9929,9930],{"class":42},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[36,9932,9933,9935,9937,9939,9942,9944,9946,9949,9951,9953,9956,9958],{"class":38,"line":354},[36,9934,3854],{"class":163},[36,9936,2130],{"class":98},[36,9938,624],{"class":163},[36,9940,9941],{"class":98}," j ",[36,9943,176],{"class":163},[36,9945,4544],{"class":109},[36,9947,9948],{"class":98},"; j ",[36,9950,179],{"class":163},[36,9952,2607],{"class":109},[36,9954,9955],{"class":98},"; j",[36,9957,2751],{"class":163},[36,9959,627],{"class":98},[36,9961,9962],{"class":38,"line":370},[36,9963,2968],{"class":98},[36,9965,9966,9969,9971,9974],{"class":38,"line":375},[36,9967,9968],{"class":98},"            tArray[i].sArray[j].sName ",[36,9970,176],{"class":163},[36,9972,9973],{"class":59}," \"Student_\"",[36,9975,1772],{"class":98},[36,9977,9978,9980,9982],{"class":38,"line":381},[36,9979,9968],{"class":98},[36,9981,9918],{"class":163},[36,9983,9984],{"class":98}," nameSeed[j];\n",[36,9986,9987,9990,9993,9995,9997,9999,10001,10003,10005,10007,10009],{"class":38,"line":399},[36,9988,9989],{"class":163},"            int",[36,9991,9992],{"class":98}," random",[36,9994,176],{"class":163},[36,9996,2882],{"class":55},[36,9998,2885],{"class":98},[36,10000,942],{"class":163},[36,10002,1520],{"class":109},[36,10004,1095],{"class":163},[36,10006,1015],{"class":109},[36,10008,674],{"class":98},[36,10010,10011],{"class":42},"\u002F\u002F40~99\n",[36,10013,10014,10017,10019,10021],{"class":38,"line":404},[36,10015,10016],{"class":98},"            tArray[i].sArray[j].age ",[36,10018,176],{"class":163},[36,10020,9391],{"class":109},[36,10022,1772],{"class":98},[36,10024,10025,10028,10030],{"class":38,"line":410},[36,10026,10027],{"class":98},"            tArray[i].sArray[j].score ",[36,10029,176],{"class":163},[36,10031,10032],{"class":98}," random;\n",[36,10034,10035],{"class":38,"line":423},[36,10036,2987],{"class":98},[36,10038,10039],{"class":38,"line":436},[36,10040,2646],{"class":98},[36,10042,10043],{"class":38,"line":441},[36,10044,2044],{"class":98},[36,10046,10047],{"class":38,"line":447},[36,10048,10049],{"class":42},"\u002F\u002F打印所有信息的函数\n",[36,10051,10052,10054,10057,10059,10061,10063,10065,10068,10070,10072],{"class":38,"line":465},[36,10053,5815],{"class":163},[36,10055,10056],{"class":55}," printInfo",[36,10058,621],{"class":98},[36,10060,8210],{"class":163},[36,10062,9840],{"class":55},[36,10064,9843],{"class":5667},[36,10066,10067],{"class":98},"[], ",[36,10069,624],{"class":163},[36,10071,7782],{"class":5667},[36,10073,627],{"class":98},[36,10075,10076],{"class":38,"line":470},[36,10077,2025],{"class":98},[36,10079,10080,10082,10084,10086,10088,10090,10092,10094,10096,10098,10100],{"class":38,"line":476},[36,10081,3652],{"class":163},[36,10083,2130],{"class":98},[36,10085,624],{"class":163},[36,10087,9879],{"class":98},[36,10089,176],{"class":163},[36,10091,4544],{"class":109},[36,10093,9886],{"class":98},[36,10095,179],{"class":163},[36,10097,9891],{"class":98},[36,10099,2751],{"class":163},[36,10101,627],{"class":98},[36,10103,10104],{"class":38,"line":496},[36,10105,2489],{"class":98},[36,10107,10108,10111,10113,10116,10118,10121,10123],{"class":38,"line":501},[36,10109,10110],{"class":98},"        cout ",[36,10112,1655],{"class":163},[36,10114,10115],{"class":59}," \"Teacher: \"",[36,10117,1923],{"class":163},[36,10119,10120],{"class":98}," tArray[i].tName ",[36,10122,1655],{"class":163},[36,10124,9281],{"class":98},[36,10126,10127,10129,10131,10133,10135,10137,10139,10141,10143,10145,10147,10149],{"class":38,"line":507},[36,10128,3854],{"class":163},[36,10130,2130],{"class":98},[36,10132,624],{"class":163},[36,10134,9941],{"class":98},[36,10136,176],{"class":163},[36,10138,4544],{"class":109},[36,10140,9948],{"class":98},[36,10142,179],{"class":163},[36,10144,2607],{"class":109},[36,10146,9955],{"class":98},[36,10148,2751],{"class":163},[36,10150,627],{"class":98},[36,10152,10153],{"class":38,"line":517},[36,10154,2968],{"class":98},[36,10156,10157,10160,10162,10165,10167,10170,10172,10175,10177],{"class":38,"line":522},[36,10158,10159],{"class":98},"            cout ",[36,10161,1655],{"class":163},[36,10163,10164],{"class":59}," \"",[36,10166,1712],{"class":109},[36,10168,10169],{"class":59},"Student: \"",[36,10171,1923],{"class":163},[36,10173,10174],{"class":98}," tArray[i].sArray[j].sName",[36,10176,1655],{"class":163},[36,10178,1677],{"class":98},[36,10180,10181,10183,10185,10187,10189,10192,10194,10197,10199],{"class":38,"line":528},[36,10182,10159],{"class":98},[36,10184,1655],{"class":163},[36,10186,10164],{"class":59},[36,10188,1712],{"class":109},[36,10190,10191],{"class":59},"Age: \"",[36,10193,1923],{"class":163},[36,10195,10196],{"class":98}," tArray[i].sArray[j].age ",[36,10198,1655],{"class":163},[36,10200,9281],{"class":98},[36,10202,10204,10206,10208,10210,10212,10215,10217,10220,10222],{"class":38,"line":10203},49,[36,10205,10159],{"class":98},[36,10207,1655],{"class":163},[36,10209,10164],{"class":59},[36,10211,1712],{"class":109},[36,10213,10214],{"class":59},"Score: \"",[36,10216,1923],{"class":163},[36,10218,10219],{"class":98}," tArray[i].sArray[j].score ",[36,10221,1655],{"class":163},[36,10223,10224],{"class":98}," endl;   \n",[36,10226,10228],{"class":38,"line":10227},50,[36,10229,2987],{"class":98},[36,10231,10233],{"class":38,"line":10232},51,[36,10234,2646],{"class":98},[36,10236,10238],{"class":38,"line":10237},52,[36,10239,2044],{"class":98},[36,10241,10243,10245,10247],{"class":38,"line":10242},53,[36,10244,624],{"class":163},[36,10246,2432],{"class":55},[36,10248,2435],{"class":98},[36,10250,10252],{"class":38,"line":10251},54,[36,10253,2025],{"class":98},[36,10255,10257],{"class":38,"line":10256},55,[36,10258,10259],{"class":42},"    \u002F\u002F随机数种子\n",[36,10261,10263,10265,10267,10269,10271,10273,10275,10277,10279],{"class":38,"line":10262},56,[36,10264,2832],{"class":55},[36,10266,2835],{"class":98},[36,10268,2838],{"class":163},[36,10270,2841],{"class":163},[36,10272,1043],{"class":98},[36,10274,2846],{"class":55},[36,10276,621],{"class":98},[36,10278,2851],{"class":109},[36,10280,2854],{"class":98},[36,10282,10284],{"class":38,"line":10283},57,[36,10285,10286],{"class":42},"    \u002F\u002F1.创建3名老师的数组\n",[36,10288,10290,10292,10294,10297,10299],{"class":38,"line":10289},58,[36,10291,8346],{"class":163},[36,10293,9840],{"class":55},[36,10295,10296],{"class":98}," tArray[",[36,10298,689],{"class":109},[36,10300,5141],{"class":98},[36,10302,10304],{"class":38,"line":10303},59,[36,10305,10306],{"class":42},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[36,10308,10310,10312,10315,10317,10320,10323,10325,10327,10330,10332],{"class":38,"line":10309},60,[36,10311,2444],{"class":163},[36,10313,10314],{"class":98}," len ",[36,10316,176],{"class":163},[36,10318,10319],{"class":163}," sizeof",[36,10321,10322],{"class":98},"(tArray) ",[36,10324,1198],{"class":163},[36,10326,10319],{"class":163},[36,10328,10329],{"class":98},"(tArray[",[36,10331,807],{"class":109},[36,10333,4307],{"class":98},[36,10335,10337,10340],{"class":38,"line":10336},61,[36,10338,10339],{"class":55},"    allocateSpace",[36,10341,10342],{"class":98},"(tArray, len);\n",[36,10344,10346],{"class":38,"line":10345},62,[36,10347,10348],{"class":42},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[36,10350,10352,10355],{"class":38,"line":10351},63,[36,10353,10354],{"class":55},"    printInfo",[36,10356,10342],{"class":98},[36,10358,10360],{"class":38,"line":10359},64,[36,10361,247],{"emptyLinePlaceholder":246},[36,10363,10365],{"class":38,"line":10364},65,[36,10366,2044],{"class":98},[571,10368,10369],{"start":46},[574,10370,10371,10374],{},[765,10372,10373],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,10376,10377],{},"五名英雄信息如下：",[26,10379,10383],{"className":10380,"code":10381,"language":10382,"meta":31,"style":31},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[33,10384,10385,10403,10420,10437,10454],{"__ignoreMap":31},[36,10386,10387,10389,10392,10394,10396,10398,10401],{"class":38,"line":39},[36,10388,5368],{"class":98},[36,10390,10391],{"class":59},"\"刘备\"",[36,10393,992],{"class":98},[36,10395,1388],{"class":109},[36,10397,992],{"class":98},[36,10399,10400],{"class":59},"\"男\"",[36,10402,5381],{"class":98},[36,10404,10405,10407,10410,10412,10414,10416,10418],{"class":38,"line":46},[36,10406,5368],{"class":98},[36,10408,10409],{"class":59},"\"关羽\"",[36,10411,992],{"class":98},[36,10413,1363],{"class":109},[36,10415,992],{"class":98},[36,10417,10400],{"class":59},[36,10419,5381],{"class":98},[36,10421,10422,10424,10427,10429,10431,10433,10435],{"class":38,"line":52},[36,10423,5368],{"class":98},[36,10425,10426],{"class":59},"\"张飞\"",[36,10428,992],{"class":98},[36,10430,1313],{"class":109},[36,10432,992],{"class":98},[36,10434,10400],{"class":59},[36,10436,5381],{"class":98},[36,10438,10439,10441,10444,10446,10448,10450,10452],{"class":38,"line":66},[36,10440,5368],{"class":98},[36,10442,10443],{"class":59},"\"赵云\"",[36,10445,992],{"class":98},[36,10447,1338],{"class":109},[36,10449,992],{"class":98},[36,10451,10400],{"class":59},[36,10453,5381],{"class":98},[36,10455,10456,10458,10461,10463,10465,10467,10470],{"class":38,"line":72},[36,10457,5368],{"class":98},[36,10459,10460],{"class":59},"\"貂蝉\"",[36,10462,992],{"class":98},[36,10464,1288],{"class":109},[36,10466,992],{"class":98},[36,10468,10469],{"class":59},"\"女\"",[36,10471,5381],{"class":98},[14,10473,10474],{},"代码：",[26,10476,10478],{"className":609,"code":10477,"language":611,"meta":31,"style":31},"#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",[33,10479,10480,10486,10496,10502,10509,10513,10517,10523,10528,10532,10537,10560,10564,10589,10593,10626,10631,10660,10665,10680,10706,10726,10731,10736,10740,10744,10749,10771,10775,10799,10803,10865,10869,10873,10881,10885,10890,10901,10905,10921,10937,10953,10969,10985,10989,11009,11031,11036,11049,11056,11061,11067,11072,11085,11091],{"__ignoreMap":31},[36,10481,10482,10484],{"class":38,"line":39},[36,10483,2409],{"class":163},[36,10485,2412],{"class":59},[36,10487,10488,10490,10492,10494],{"class":38,"line":46},[36,10489,2417],{"class":163},[36,10491,2420],{"class":163},[36,10493,2423],{"class":55},[36,10495,1772],{"class":98},[36,10497,10498,10500],{"class":38,"line":52},[36,10499,2409],{"class":163},[36,10501,8200],{"class":59},[36,10503,10504,10506],{"class":38,"line":66},[36,10505,8210],{"class":163},[36,10507,10508],{"class":55}," Sanguo\n",[36,10510,10511],{"class":38,"line":72},[36,10512,2025],{"class":98},[36,10514,10515],{"class":38,"line":82},[36,10516,8236],{"class":98},[36,10518,10519,10521],{"class":38,"line":88},[36,10520,2444],{"class":163},[36,10522,8248],{"class":98},[36,10524,10525],{"class":38,"line":113},[36,10526,10527],{"class":98},"    string gender;\n",[36,10529,10530],{"class":38,"line":119},[36,10531,4446],{"class":98},[36,10533,10534],{"class":38,"line":131},[36,10535,10536],{"class":42},"\u002F\u002F定义排序函数\n",[36,10538,10539,10541,10543,10545,10548,10550,10552,10554,10556,10558],{"class":38,"line":137},[36,10540,5815],{"class":163},[36,10542,7767],{"class":55},[36,10544,621],{"class":98},[36,10546,10547],{"class":55},"Sanguo",[36,10549,6969],{"class":163},[36,10551,1308],{"class":5667},[36,10553,992],{"class":98},[36,10555,624],{"class":163},[36,10557,7782],{"class":5667},[36,10559,627],{"class":98},[36,10561,10562],{"class":38,"line":147},[36,10563,2025],{"class":98},[36,10565,10566,10568,10570,10572,10574,10576,10578,10580,10582,10585,10587],{"class":38,"line":153},[36,10567,3652],{"class":163},[36,10569,621],{"class":98},[36,10571,624],{"class":163},[36,10573,3483],{"class":98},[36,10575,176],{"class":163},[36,10577,807],{"class":109},[36,10579,3490],{"class":98},[36,10581,179],{"class":163},[36,10583,10584],{"class":98},"len;i",[36,10586,2751],{"class":163},[36,10588,627],{"class":98},[36,10590,10591],{"class":38,"line":191},[36,10592,2489],{"class":98},[36,10594,10595,10598,10600,10602,10604,10606,10608,10610,10612,10614,10616,10618,10620,10622,10624],{"class":38,"line":197},[36,10596,10597],{"class":163},"     for",[36,10599,2130],{"class":98},[36,10601,624],{"class":163},[36,10603,3861],{"class":98},[36,10605,176],{"class":163},[36,10607,807],{"class":109},[36,10609,3868],{"class":98},[36,10611,179],{"class":163},[36,10613,7809],{"class":98},[36,10615,1146],{"class":163},[36,10617,833],{"class":109},[36,10619,1146],{"class":163},[36,10621,4001],{"class":98},[36,10623,2751],{"class":163},[36,10625,627],{"class":98},[36,10627,10628],{"class":38,"line":217},[36,10629,10630],{"class":98},"     {\n",[36,10632,10633,10636,10639,10641,10644,10646,10649,10651,10653,10655,10657],{"class":38,"line":223},[36,10634,10635],{"class":163},"         if",[36,10637,10638],{"class":98}," ((s",[36,10640,1095],{"class":163},[36,10642,10643],{"class":98},"j)->age ",[36,10645,173],{"class":163},[36,10647,10648],{"class":98}," (s",[36,10650,1095],{"class":163},[36,10652,1081],{"class":98},[36,10654,1095],{"class":163},[36,10656,833],{"class":109},[36,10658,10659],{"class":98},")->age)\n",[36,10661,10662],{"class":38,"line":243},[36,10663,10664],{"class":98},"         {\n",[36,10666,10667,10670,10672,10675,10677],{"class":38,"line":250},[36,10668,10669],{"class":98},"             Sanguo temp",[36,10671,7604],{"class":163},[36,10673,10674],{"class":98},"(s",[36,10676,1095],{"class":163},[36,10678,10679],{"class":98},"j);\n",[36,10681,10682,10685,10687,10689,10692,10694,10696,10698,10700,10702,10704],{"class":38,"line":256},[36,10683,10684],{"class":163},"             *",[36,10686,10674],{"class":98},[36,10688,1095],{"class":163},[36,10690,10691],{"class":98},"j)",[36,10693,7604],{"class":163},[36,10695,10674],{"class":98},[36,10697,1095],{"class":163},[36,10699,1081],{"class":98},[36,10701,1095],{"class":163},[36,10703,833],{"class":109},[36,10705,3170],{"class":98},[36,10707,10708,10710,10712,10714,10716,10718,10720,10722,10724],{"class":38,"line":273},[36,10709,10684],{"class":163},[36,10711,10674],{"class":98},[36,10713,1095],{"class":163},[36,10715,1081],{"class":98},[36,10717,1095],{"class":163},[36,10719,833],{"class":109},[36,10721,1043],{"class":98},[36,10723,176],{"class":163},[36,10725,4731],{"class":98},[36,10727,10728],{"class":38,"line":278},[36,10729,10730],{"class":98},"         }\n",[36,10732,10733],{"class":38,"line":284},[36,10734,10735],{"class":98},"     }\n",[36,10737,10738],{"class":38,"line":315},[36,10739,2646],{"class":98},[36,10741,10742],{"class":38,"line":320},[36,10743,2044],{"class":98},[36,10745,10746],{"class":38,"line":326},[36,10747,10748],{"class":42},"\u002F\u002F定义打印函数\n",[36,10750,10751,10753,10755,10757,10759,10761,10763,10765,10767,10769],{"class":38,"line":343},[36,10752,5815],{"class":163},[36,10754,10056],{"class":55},[36,10756,621],{"class":98},[36,10758,10547],{"class":55},[36,10760,6969],{"class":163},[36,10762,1308],{"class":5667},[36,10764,992],{"class":98},[36,10766,624],{"class":163},[36,10768,7782],{"class":5667},[36,10770,627],{"class":98},[36,10772,10773],{"class":38,"line":348},[36,10774,2025],{"class":98},[36,10776,10777,10779,10781,10783,10785,10787,10789,10791,10793,10795,10797],{"class":38,"line":354},[36,10778,3652],{"class":163},[36,10780,2130],{"class":98},[36,10782,624],{"class":163},[36,10784,3483],{"class":98},[36,10786,176],{"class":163},[36,10788,807],{"class":109},[36,10790,3490],{"class":98},[36,10792,179],{"class":163},[36,10794,10584],{"class":98},[36,10796,2751],{"class":163},[36,10798,627],{"class":98},[36,10800,10801],{"class":38,"line":370},[36,10802,2489],{"class":98},[36,10804,10805,10807,10809,10811,10813,10816,10818,10820,10822,10825,10827,10829,10831,10834,10836,10838,10840,10843,10845,10847,10849,10852,10854,10856,10858,10861,10863],{"class":38,"line":375},[36,10806,3902],{"class":98},[36,10808,1655],{"class":163},[36,10810,866],{"class":59},[36,10812,1712],{"class":109},[36,10814,10815],{"class":59},"姓名：\"",[36,10817,1655],{"class":163},[36,10819,10674],{"class":98},[36,10821,1095],{"class":163},[36,10823,10824],{"class":98},"i)->name",[36,10826,1655],{"class":163},[36,10828,866],{"class":59},[36,10830,1712],{"class":109},[36,10832,10833],{"class":59},"年龄：\"",[36,10835,1655],{"class":163},[36,10837,10674],{"class":98},[36,10839,1095],{"class":163},[36,10841,10842],{"class":98},"i)->age",[36,10844,1655],{"class":163},[36,10846,866],{"class":59},[36,10848,1712],{"class":109},[36,10850,10851],{"class":59},"性别：\"",[36,10853,1655],{"class":163},[36,10855,10674],{"class":98},[36,10857,1095],{"class":163},[36,10859,10860],{"class":98},"i)->gender",[36,10862,1655],{"class":163},[36,10864,1677],{"class":98},[36,10866,10867],{"class":38,"line":381},[36,10868,2646],{"class":98},[36,10870,10871],{"class":38,"line":399},[36,10872,2044],{"class":98},[36,10874,10875,10877,10879],{"class":38,"line":404},[36,10876,624],{"class":163},[36,10878,2432],{"class":55},[36,10880,2435],{"class":98},[36,10882,10883],{"class":38,"line":410},[36,10884,2025],{"class":98},[36,10886,10887],{"class":38,"line":423},[36,10888,10889],{"class":42},"    \u002F\u002F定义结构体变量\n",[36,10891,10892,10895,10897,10899],{"class":38,"line":436},[36,10893,10894],{"class":98},"    Sanguo s1[",[36,10896,933],{"class":109},[36,10898,1552],{"class":98},[36,10900,5359],{"class":163},[36,10902,10903],{"class":38,"line":441},[36,10904,2489],{"class":98},[36,10906,10907,10909,10911,10913,10915,10917,10919],{"class":38,"line":447},[36,10908,5368],{"class":98},[36,10910,10391],{"class":59},[36,10912,992],{"class":98},[36,10914,1388],{"class":109},[36,10916,992],{"class":98},[36,10918,10400],{"class":59},[36,10920,5381],{"class":98},[36,10922,10923,10925,10927,10929,10931,10933,10935],{"class":38,"line":465},[36,10924,5368],{"class":98},[36,10926,10409],{"class":59},[36,10928,992],{"class":98},[36,10930,1363],{"class":109},[36,10932,992],{"class":98},[36,10934,10400],{"class":59},[36,10936,5381],{"class":98},[36,10938,10939,10941,10943,10945,10947,10949,10951],{"class":38,"line":470},[36,10940,5368],{"class":98},[36,10942,10426],{"class":59},[36,10944,992],{"class":98},[36,10946,1313],{"class":109},[36,10948,992],{"class":98},[36,10950,10400],{"class":59},[36,10952,5381],{"class":98},[36,10954,10955,10957,10959,10961,10963,10965,10967],{"class":38,"line":476},[36,10956,5368],{"class":98},[36,10958,10443],{"class":59},[36,10960,992],{"class":98},[36,10962,1338],{"class":109},[36,10964,992],{"class":98},[36,10966,10400],{"class":59},[36,10968,5381],{"class":98},[36,10970,10971,10973,10975,10977,10979,10981,10983],{"class":38,"line":496},[36,10972,5368],{"class":98},[36,10974,10460],{"class":59},[36,10976,992],{"class":98},[36,10978,1288],{"class":109},[36,10980,992],{"class":98},[36,10982,10469],{"class":59},[36,10984,5381],{"class":98},[36,10986,10987],{"class":38,"line":501},[36,10988,5402],{"class":98},[36,10990,10991,10993,10995,10997,11000,11002,11005,11007],{"class":38,"line":507},[36,10992,2444],{"class":163},[36,10994,7782],{"class":98},[36,10996,4654],{"class":163},[36,10998,10999],{"class":98},"(s1)",[36,11001,4660],{"class":163},[36,11003,11004],{"class":98},"(s1[",[36,11006,807],{"class":109},[36,11008,4307],{"class":98},[36,11010,11011,11014,11016,11019,11021,11024,11027,11029],{"class":38,"line":517},[36,11012,11013],{"class":98},"    Sanguo ",[36,11015,1069],{"class":163},[36,11017,11018],{"class":98},"s ",[36,11020,176],{"class":163},[36,11022,11023],{"class":163}," &",[36,11025,11026],{"class":98},"s1[",[36,11028,807],{"class":109},[36,11030,5141],{"class":98},[36,11032,11033],{"class":38,"line":522},[36,11034,11035],{"class":42},"    \u002F\u002F排序前：\n",[36,11037,11038,11040,11042,11045,11047],{"class":38,"line":528},[36,11039,6980],{"class":98},[36,11041,1655],{"class":163},[36,11043,11044],{"class":59}," \"排序前：\"",[36,11046,1923],{"class":163},[36,11048,9281],{"class":98},[36,11050,11051,11053],{"class":38,"line":10203},[36,11052,10354],{"class":55},[36,11054,11055],{"class":98},"(s,len);\n",[36,11057,11058],{"class":38,"line":10227},[36,11059,11060],{"class":42},"    \u002F\u002F调用排序函数\n",[36,11062,11063,11065],{"class":38,"line":10232},[36,11064,8049],{"class":55},[36,11066,11055],{"class":98},[36,11068,11069],{"class":38,"line":10237},[36,11070,11071],{"class":42},"    \u002F\u002F排序后\n",[36,11073,11074,11076,11078,11081,11083],{"class":38,"line":10242},[36,11075,6980],{"class":98},[36,11077,1655],{"class":163},[36,11079,11080],{"class":59}," \"排序后：\"",[36,11082,1923],{"class":163},[36,11084,9281],{"class":98},[36,11086,11087,11089],{"class":38,"line":10251},[36,11088,10354],{"class":55},[36,11090,11055],{"class":98},[36,11092,11093],{"class":38,"line":10256},[36,11094,2044],{"class":98},[14,11096,11097,11098,11100],{},"注意：使用指针时直接用传首地址**&s",[36,11099,807],{},"**",[537,11102,11103],{},"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":31,"searchDepth":46,"depth":46,"links":11105},[11106,11107,11108,11109,11110,11111,11112],{"id":8154,"depth":46,"text":8155},{"id":8506,"depth":46,"text":8507},{"id":8775,"depth":46,"text":8776},{"id":8940,"depth":46,"text":8941},{"id":9156,"depth":46,"text":9157},{"id":9477,"depth":46,"text":9478},{"id":9705,"depth":46,"text":9706},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":8143,"description":8151},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":11119,"title":11120,"body":11121,"description":31,"extension":543,"meta":12464,"navigation":246,"path":12465,"seo":12466,"stem":12467,"__hash__":12468},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":11122,"toc":12458},[11123,11126,11130,11136,11150,11155,11158,11162,11169,11175,11178,11185,11191,11196,11199,11202,11205,11769,11772,11786,11790,11795,11811,11951,11954,11960,11963,11968,11976,12084,12087,12092,12095,12100,12103,12109,12112,12455],[10,11124,11120],{"id":11125},"_5程序内存模型",[559,11127,11129],{"id":11128},"_51内存分区模型","5.1内存分区模型",[14,11131,11132,11133],{},"C++程序在执行时，将内存大方向划分为",[765,11134,11135],{},"4个区域",[1618,11137,11138,11141,11144,11147],{},[574,11139,11140],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[574,11142,11143],{},"全局区：存放全局变量和静态变量以及常量",[574,11145,11146],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[574,11148,11149],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,11151,11152],{},[765,11153,11154],{},"内存四区意义：",[14,11156,11157],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[588,11159,11161],{"id":11160},"_511程序运行前","5.1.1程序运行前",[14,11163,11164,11165,11168],{},"​\t在程序编译后，生成了exe可执行程序，",[765,11166,11167],{},"未执行该程序前","分为两个区域",[14,11170,11171,11172],{},"​\t",[765,11173,11174],{},"代码区：",[14,11176,11177],{},"​\t\t存放 CPU 执行的机器指令",[14,11179,11180,11181,11184],{},"​\t\t代码区是",[765,11182,11183],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,11186,11180,11187,11190],{},[765,11188,11189],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,11192,11171,11193],{},[765,11194,11195],{},"全局区：",[14,11197,11198],{},"​\t\t全局变量和静态变量存放在此.",[14,11200,11201],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,11203,11204],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[26,11206,11208],{"className":609,"code":11207,"language":611,"meta":31,"style":31},"\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",[33,11209,11210,11215,11228,11241,11245,11250,11265,11280,11284,11293,11297,11302,11315,11328,11332,11337,11363,11389,11393,11420,11446,11450,11455,11471,11486,11490,11516,11542,11546,11571,11596,11600,11626,11652,11656,11672,11687,11713,11739,11743,11753,11757,11765],{"__ignoreMap":31},[36,11211,11212],{"class":38,"line":39},[36,11213,11214],{"class":42},"\u002F\u002F全局变量\n",[36,11216,11217,11219,11222,11224,11226],{"class":38,"line":46},[36,11218,624],{"class":163},[36,11220,11221],{"class":98}," g_a ",[36,11223,176],{"class":163},[36,11225,2497],{"class":109},[36,11227,1772],{"class":98},[36,11229,11230,11232,11235,11237,11239],{"class":38,"line":52},[36,11231,624],{"class":163},[36,11233,11234],{"class":98}," g_b ",[36,11236,176],{"class":163},[36,11238,2497],{"class":109},[36,11240,1772],{"class":98},[36,11242,11243],{"class":38,"line":66},[36,11244,247],{"emptyLinePlaceholder":246},[36,11246,11247],{"class":38,"line":72},[36,11248,11249],{"class":42},"\u002F\u002F全局常量\n",[36,11251,11252,11254,11256,11259,11261,11263],{"class":38,"line":82},[36,11253,7243],{"class":163},[36,11255,2841],{"class":163},[36,11257,11258],{"class":98}," c_g_a ",[36,11260,176],{"class":163},[36,11262,2497],{"class":109},[36,11264,1772],{"class":98},[36,11266,11267,11269,11271,11274,11276,11278],{"class":38,"line":88},[36,11268,7243],{"class":163},[36,11270,2841],{"class":163},[36,11272,11273],{"class":98}," c_g_b ",[36,11275,176],{"class":163},[36,11277,2497],{"class":109},[36,11279,1772],{"class":98},[36,11281,11282],{"class":38,"line":113},[36,11283,247],{"emptyLinePlaceholder":246},[36,11285,11286,11288,11290],{"class":38,"line":119},[36,11287,624],{"class":163},[36,11289,2432],{"class":55},[36,11291,11292],{"class":98},"() {\n",[36,11294,11295],{"class":38,"line":131},[36,11296,247],{"emptyLinePlaceholder":246},[36,11298,11299],{"class":38,"line":137},[36,11300,11301],{"class":42},"    \u002F\u002F局部变量\n",[36,11303,11304,11306,11309,11311,11313],{"class":38,"line":147},[36,11305,2444],{"class":163},[36,11307,11308],{"class":98}," a ",[36,11310,176],{"class":163},[36,11312,2497],{"class":109},[36,11314,1772],{"class":98},[36,11316,11317,11319,11322,11324,11326],{"class":38,"line":153},[36,11318,2444],{"class":163},[36,11320,11321],{"class":98}," b ",[36,11323,176],{"class":163},[36,11325,2497],{"class":109},[36,11327,1772],{"class":98},[36,11329,11330],{"class":38,"line":191},[36,11331,247],{"emptyLinePlaceholder":246},[36,11333,11334],{"class":38,"line":197},[36,11335,11336],{"class":42},"    \u002F\u002F打印地址\n",[36,11338,11339,11341,11343,11346,11348,11350,11352,11354,11356,11359,11361],{"class":38,"line":217},[36,11340,6980],{"class":98},[36,11342,1655],{"class":163},[36,11344,11345],{"class":59}," \"局部变量a地址为： \"",[36,11347,1923],{"class":163},[36,11349,2130],{"class":98},[36,11351,624],{"class":163},[36,11353,1043],{"class":98},[36,11355,967],{"class":163},[36,11357,11358],{"class":98},"a ",[36,11360,1655],{"class":163},[36,11362,9281],{"class":98},[36,11364,11365,11367,11369,11372,11374,11376,11378,11380,11382,11385,11387],{"class":38,"line":223},[36,11366,6980],{"class":98},[36,11368,1655],{"class":163},[36,11370,11371],{"class":59}," \"局部变量b地址为： \"",[36,11373,1923],{"class":163},[36,11375,2130],{"class":98},[36,11377,624],{"class":163},[36,11379,1043],{"class":98},[36,11381,967],{"class":163},[36,11383,11384],{"class":98},"b ",[36,11386,1655],{"class":163},[36,11388,9281],{"class":98},[36,11390,11391],{"class":38,"line":243},[36,11392,247],{"emptyLinePlaceholder":246},[36,11394,11395,11397,11399,11402,11404,11407,11409,11411,11413,11416,11418],{"class":38,"line":250},[36,11396,6980],{"class":98},[36,11398,1655],{"class":163},[36,11400,11401],{"class":59}," \"全局变量g_a地址为： \"",[36,11403,1923],{"class":163},[36,11405,11406],{"class":98},"  (",[36,11408,624],{"class":163},[36,11410,1043],{"class":98},[36,11412,967],{"class":163},[36,11414,11415],{"class":98},"g_a ",[36,11417,1655],{"class":163},[36,11419,9281],{"class":98},[36,11421,11422,11424,11426,11429,11431,11433,11435,11437,11439,11442,11444],{"class":38,"line":256},[36,11423,6980],{"class":98},[36,11425,1655],{"class":163},[36,11427,11428],{"class":59}," \"全局变量g_b地址为： \"",[36,11430,1923],{"class":163},[36,11432,11406],{"class":98},[36,11434,624],{"class":163},[36,11436,1043],{"class":98},[36,11438,967],{"class":163},[36,11440,11441],{"class":98},"g_b ",[36,11443,1655],{"class":163},[36,11445,9281],{"class":98},[36,11447,11448],{"class":38,"line":273},[36,11449,247],{"emptyLinePlaceholder":246},[36,11451,11452],{"class":38,"line":278},[36,11453,11454],{"class":42},"    \u002F\u002F静态变量\n",[36,11456,11457,11460,11462,11465,11467,11469],{"class":38,"line":284},[36,11458,11459],{"class":163},"    static",[36,11461,2841],{"class":163},[36,11463,11464],{"class":98}," s_a ",[36,11466,176],{"class":163},[36,11468,2497],{"class":109},[36,11470,1772],{"class":98},[36,11472,11473,11475,11477,11480,11482,11484],{"class":38,"line":315},[36,11474,11459],{"class":163},[36,11476,2841],{"class":163},[36,11478,11479],{"class":98}," s_b ",[36,11481,176],{"class":163},[36,11483,2497],{"class":109},[36,11485,1772],{"class":98},[36,11487,11488],{"class":38,"line":320},[36,11489,247],{"emptyLinePlaceholder":246},[36,11491,11492,11494,11496,11499,11501,11503,11505,11507,11509,11512,11514],{"class":38,"line":326},[36,11493,6980],{"class":98},[36,11495,1655],{"class":163},[36,11497,11498],{"class":59}," \"静态变量s_a地址为： \"",[36,11500,1923],{"class":163},[36,11502,2130],{"class":98},[36,11504,624],{"class":163},[36,11506,1043],{"class":98},[36,11508,967],{"class":163},[36,11510,11511],{"class":98},"s_a ",[36,11513,1655],{"class":163},[36,11515,9281],{"class":98},[36,11517,11518,11520,11522,11525,11527,11529,11531,11533,11535,11538,11540],{"class":38,"line":343},[36,11519,6980],{"class":98},[36,11521,1655],{"class":163},[36,11523,11524],{"class":59}," \"静态变量s_b地址为： \"",[36,11526,1923],{"class":163},[36,11528,2130],{"class":98},[36,11530,624],{"class":163},[36,11532,1043],{"class":98},[36,11534,967],{"class":163},[36,11536,11537],{"class":98},"s_b ",[36,11539,1655],{"class":163},[36,11541,9281],{"class":98},[36,11543,11544],{"class":38,"line":348},[36,11545,247],{"emptyLinePlaceholder":246},[36,11547,11548,11550,11552,11555,11557,11559,11561,11563,11565,11567,11569],{"class":38,"line":354},[36,11549,6980],{"class":98},[36,11551,1655],{"class":163},[36,11553,11554],{"class":59}," \"字符串常量地址为： \"",[36,11556,1923],{"class":163},[36,11558,2130],{"class":98},[36,11560,624],{"class":163},[36,11562,1043],{"class":98},[36,11564,967],{"class":163},[36,11566,1672],{"class":59},[36,11568,1923],{"class":163},[36,11570,9281],{"class":98},[36,11572,11573,11575,11577,11579,11581,11583,11585,11587,11589,11592,11594],{"class":38,"line":370},[36,11574,6980],{"class":98},[36,11576,1655],{"class":163},[36,11578,11554],{"class":59},[36,11580,1923],{"class":163},[36,11582,2130],{"class":98},[36,11584,624],{"class":163},[36,11586,1043],{"class":98},[36,11588,967],{"class":163},[36,11590,11591],{"class":59},"\"hello world1\"",[36,11593,1923],{"class":163},[36,11595,9281],{"class":98},[36,11597,11598],{"class":38,"line":375},[36,11599,247],{"emptyLinePlaceholder":246},[36,11601,11602,11604,11606,11609,11611,11613,11615,11617,11619,11622,11624],{"class":38,"line":381},[36,11603,6980],{"class":98},[36,11605,1655],{"class":163},[36,11607,11608],{"class":59}," \"全局常量c_g_a地址为： \"",[36,11610,1923],{"class":163},[36,11612,2130],{"class":98},[36,11614,624],{"class":163},[36,11616,1043],{"class":98},[36,11618,967],{"class":163},[36,11620,11621],{"class":98},"c_g_a ",[36,11623,1655],{"class":163},[36,11625,9281],{"class":98},[36,11627,11628,11630,11632,11635,11637,11639,11641,11643,11645,11648,11650],{"class":38,"line":399},[36,11629,6980],{"class":98},[36,11631,1655],{"class":163},[36,11633,11634],{"class":59}," \"全局常量c_g_b地址为： \"",[36,11636,1923],{"class":163},[36,11638,2130],{"class":98},[36,11640,624],{"class":163},[36,11642,1043],{"class":98},[36,11644,967],{"class":163},[36,11646,11647],{"class":98},"c_g_b ",[36,11649,1655],{"class":163},[36,11651,9281],{"class":98},[36,11653,11654],{"class":38,"line":404},[36,11655,247],{"emptyLinePlaceholder":246},[36,11657,11658,11661,11663,11666,11668,11670],{"class":38,"line":410},[36,11659,11660],{"class":163},"    const",[36,11662,2841],{"class":163},[36,11664,11665],{"class":98}," c_l_a ",[36,11667,176],{"class":163},[36,11669,2497],{"class":109},[36,11671,1772],{"class":98},[36,11673,11674,11676,11678,11681,11683,11685],{"class":38,"line":423},[36,11675,11660],{"class":163},[36,11677,2841],{"class":163},[36,11679,11680],{"class":98}," c_l_b ",[36,11682,176],{"class":163},[36,11684,2497],{"class":109},[36,11686,1772],{"class":98},[36,11688,11689,11691,11693,11696,11698,11700,11702,11704,11706,11709,11711],{"class":38,"line":436},[36,11690,6980],{"class":98},[36,11692,1655],{"class":163},[36,11694,11695],{"class":59}," \"局部常量c_l_a地址为： \"",[36,11697,1923],{"class":163},[36,11699,2130],{"class":98},[36,11701,624],{"class":163},[36,11703,1043],{"class":98},[36,11705,967],{"class":163},[36,11707,11708],{"class":98},"c_l_a ",[36,11710,1655],{"class":163},[36,11712,9281],{"class":98},[36,11714,11715,11717,11719,11722,11724,11726,11728,11730,11732,11735,11737],{"class":38,"line":441},[36,11716,6980],{"class":98},[36,11718,1655],{"class":163},[36,11720,11721],{"class":59}," \"局部常量c_l_b地址为： \"",[36,11723,1923],{"class":163},[36,11725,2130],{"class":98},[36,11727,624],{"class":163},[36,11729,1043],{"class":98},[36,11731,967],{"class":163},[36,11733,11734],{"class":98},"c_l_b ",[36,11736,1655],{"class":163},[36,11738,9281],{"class":98},[36,11740,11741],{"class":38,"line":447},[36,11742,247],{"emptyLinePlaceholder":246},[36,11744,11745,11747,11749,11751],{"class":38,"line":465},[36,11746,2762],{"class":55},[36,11748,621],{"class":98},[36,11750,2767],{"class":59},[36,11752,3170],{"class":98},[36,11754,11755],{"class":38,"line":470},[36,11756,247],{"emptyLinePlaceholder":246},[36,11758,11759,11761,11763],{"class":38,"line":476},[36,11760,4541],{"class":163},[36,11762,4544],{"class":109},[36,11764,1772],{"class":98},[36,11766,11767],{"class":38,"line":496},[36,11768,2044],{"class":98},[14,11770,11771],{},"总结：",[1618,11773,11774,11777,11780,11783],{},[574,11775,11776],{},"c++中程序运行前分为全局区和代码区",[574,11778,11779],{},"代码区特点是共享和只读",[574,11781,11782],{},"全局区中存放全局变量、静态变量、常量",[574,11784,11785],{},"常量区中存放const修饰的全局常量和字符串常量",[588,11787,11789],{"id":11788},"_512程序运行后","5.1.2程序运行后",[571,11791,11792],{},[574,11793,11794],{},"栈区：",[1618,11796,11797,11804],{},[574,11798,11799,11800,11803],{},"由编译器自动分配释放, 存放",[765,11801,11802],{},"函数的参数值,局部变量","等",[574,11805,11806,11807,11810],{},"注意事项：",[765,11808,11809],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[26,11812,11814],{"className":609,"code":11813,"language":611,"meta":31,"style":31},"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",[33,11815,11816,11827,11831,11846,11858,11862,11866,11874,11879,11894,11912,11929,11939,11947],{"__ignoreMap":31},[36,11817,11818,11820,11822,11825],{"class":38,"line":39},[36,11819,624],{"class":163},[36,11821,6969],{"class":163},[36,11823,11824],{"class":55}," func",[36,11826,2435],{"class":98},[36,11828,11829],{"class":38,"line":46},[36,11830,2025],{"class":98},[36,11832,11833,11835,11837,11839,11841,11843],{"class":38,"line":52},[36,11834,2444],{"class":163},[36,11836,11308],{"class":98},[36,11838,176],{"class":163},[36,11840,2497],{"class":109},[36,11842,674],{"class":98},[36,11844,11845],{"class":42}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[36,11847,11848,11850,11852,11855],{"class":38,"line":66},[36,11849,4541],{"class":163},[36,11851,11023],{"class":163},[36,11853,11854],{"class":98},"a;",[36,11856,11857],{"class":42}," \u002F\u002F放回局部变量的地址\n",[36,11859,11860],{"class":38,"line":72},[36,11861,2044],{"class":98},[36,11863,11864],{"class":38,"line":82},[36,11865,247],{"emptyLinePlaceholder":246},[36,11867,11868,11870,11872],{"class":38,"line":88},[36,11869,624],{"class":163},[36,11871,2432],{"class":55},[36,11873,11292],{"class":98},[36,11875,11876],{"class":38,"line":113},[36,11877,11878],{"class":42},"    \u002F\u002F接受func的返回值\n",[36,11880,11881,11883,11885,11888,11890,11892],{"class":38,"line":119},[36,11882,2444],{"class":163},[36,11884,6969],{"class":163},[36,11886,11887],{"class":98},"p ",[36,11889,176],{"class":163},[36,11891,11824],{"class":55},[36,11893,6087],{"class":98},[36,11895,11896,11898,11900,11902,11904,11906,11909],{"class":38,"line":131},[36,11897,6980],{"class":98},[36,11899,1655],{"class":163},[36,11901,6969],{"class":163},[36,11903,11887],{"class":98},[36,11905,1655],{"class":163},[36,11907,11908],{"class":98}," endl;",[36,11910,11911],{"class":42}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[36,11913,11914,11916,11918,11920,11922,11924,11926],{"class":38,"line":137},[36,11915,6980],{"class":98},[36,11917,1655],{"class":163},[36,11919,6969],{"class":163},[36,11921,11887],{"class":98},[36,11923,1655],{"class":163},[36,11925,11908],{"class":98},[36,11927,11928],{"class":42}," \u002F\u002F第二次这个数据不再保留\n",[36,11930,11931,11933,11935,11937],{"class":38,"line":147},[36,11932,2762],{"class":55},[36,11934,621],{"class":98},[36,11936,2767],{"class":59},[36,11938,3170],{"class":98},[36,11940,11941,11943,11945],{"class":38,"line":153},[36,11942,4541],{"class":163},[36,11944,4544],{"class":109},[36,11946,1772],{"class":98},[36,11948,11949],{"class":38,"line":191},[36,11950,2044],{"class":98},[14,11952,11953],{},"输出结果：",[14,11955,11956],{},[1941,11957],{"alt":11958,"src":11959},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,11961,11962],{},"总结：不要返回局部变量的地址",[571,11964,11965],{"start":46},[574,11966,11967],{},"堆区",[1618,11969,11970,11973],{},[574,11971,11972],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[574,11974,11975],{},"在c++中主要利用new在堆区开辟内存",[26,11977,11979],{"className":609,"code":11978,"language":611,"meta":31,"style":31},"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",[33,11980,11981,11996,12000,12005,12026,12033,12037,12045,12049,12054,12068,12080],{"__ignoreMap":31},[36,11982,11983,11985,11988,11991,11993],{"class":38,"line":39},[36,11984,624],{"class":163},[36,11986,11987],{"class":163},"  *",[36,11989,11990],{"class":55},"func",[36,11992,2885],{"class":98},[36,11994,11995],{"class":42},"  \u002F\u002F函数返回指针\n",[36,11997,11998],{"class":38,"line":46},[36,11999,2025],{"class":98},[36,12001,12002],{"class":38,"line":52},[36,12003,12004],{"class":42},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[36,12006,12007,12009,12011,12013,12015,12018,12020,12022,12024],{"class":38,"line":66},[36,12008,4598],{"class":163},[36,12010,6969],{"class":163},[36,12012,14],{"class":98},[36,12014,176],{"class":163},[36,12016,12017],{"class":163}," new",[36,12019,2841],{"class":163},[36,12021,621],{"class":98},[36,12023,1060],{"class":109},[36,12025,3170],{"class":98},[36,12027,12028,12030],{"class":38,"line":72},[36,12029,4832],{"class":163},[36,12031,12032],{"class":98}," p;\n",[36,12034,12035],{"class":38,"line":82},[36,12036,2044],{"class":98},[36,12038,12039,12041,12043],{"class":38,"line":88},[36,12040,624],{"class":163},[36,12042,2432],{"class":55},[36,12044,2435],{"class":98},[36,12046,12047],{"class":38,"line":113},[36,12048,2025],{"class":98},[36,12050,12051],{"class":38,"line":119},[36,12052,12053],{"class":42},"    \u002F\u002F在堆区开辟数据\n",[36,12055,12056,12058,12060,12062,12064,12066],{"class":38,"line":131},[36,12057,2444],{"class":163},[36,12059,6969],{"class":163},[36,12061,14],{"class":98},[36,12063,176],{"class":163},[36,12065,11990],{"class":55},[36,12067,6087],{"class":98},[36,12069,12070,12072,12074,12076,12078],{"class":38,"line":137},[36,12071,2030],{"class":98},[36,12073,6870],{"class":163},[36,12075,14],{"class":98},[36,12077,1655],{"class":163},[36,12079,1677],{"class":98},[36,12081,12082],{"class":38,"line":147},[36,12083,2044],{"class":98},[14,12085,12086],{},"图片展示：",[14,12088,12089],{},[1941,12090],{"alt":11958,"src":12091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,12093,12094],{},"堆区内存由程序员管生死！！！",[571,12096,12097],{"start":52},[574,12098,12099],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,12101,12102],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,12104,12105,12106],{},"​语法：",[33,12107,12108],{}," new 数据类型",[14,12110,12111],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[26,12113,12115],{"className":609,"code":12114,"language":611,"meta":31,"style":31},"\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",[33,12116,12117,12122,12132,12136,12141,12146,12168,12172,12180,12184,12198,12210,12222,12234,12239,12244,12255,12259,12264,12272,12276,12281,12303,12329,12333,12351,12355,12381,12385,12397,12401,12406,12411,12419,12423,12427,12435,12439,12445,12451],{"__ignoreMap":31},[36,12118,12119],{"class":38,"line":39},[36,12120,12121],{"class":42},"\u002F\u002F1.new的基本语法\n",[36,12123,12124,12126,12128,12130],{"class":38,"line":46},[36,12125,624],{"class":163},[36,12127,6969],{"class":163},[36,12129,11990],{"class":55},[36,12131,2435],{"class":98},[36,12133,12134],{"class":38,"line":52},[36,12135,2025],{"class":98},[36,12137,12138],{"class":38,"line":66},[36,12139,12140],{"class":42},"    \u002F\u002F在堆区创建整型数据\n",[36,12142,12143],{"class":38,"line":72},[36,12144,12145],{"class":42},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[36,12147,12148,12150,12152,12154,12157,12159,12161,12163,12165],{"class":38,"line":82},[36,12149,2444],{"class":163},[36,12151,6969],{"class":163},[36,12153,14],{"class":98},[36,12155,12156],{"class":163},"=new",[36,12158,2841],{"class":163},[36,12160,621],{"class":98},[36,12162,1060],{"class":109},[36,12164,6417],{"class":98},[36,12166,12167],{"class":42},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[36,12169,12170],{"class":38,"line":88},[36,12171,2044],{"class":98},[36,12173,12174,12176,12178],{"class":38,"line":113},[36,12175,5815],{"class":163},[36,12177,6039],{"class":55},[36,12179,2435],{"class":98},[36,12181,12182],{"class":38,"line":119},[36,12183,2025],{"class":98},[36,12185,12186,12188,12190,12192,12194,12196],{"class":38,"line":131},[36,12187,2444],{"class":163},[36,12189,6969],{"class":163},[36,12191,14],{"class":98},[36,12193,176],{"class":163},[36,12195,11990],{"class":55},[36,12197,6087],{"class":98},[36,12199,12200,12202,12204,12206,12208],{"class":38,"line":137},[36,12201,2030],{"class":98},[36,12203,6870],{"class":163},[36,12205,14],{"class":98},[36,12207,1655],{"class":163},[36,12209,1677],{"class":98},[36,12211,12212,12214,12216,12218,12220],{"class":38,"line":147},[36,12213,2030],{"class":98},[36,12215,6870],{"class":163},[36,12217,14],{"class":98},[36,12219,1655],{"class":163},[36,12221,1677],{"class":98},[36,12223,12224,12226,12228,12230,12232],{"class":38,"line":153},[36,12225,2030],{"class":98},[36,12227,6870],{"class":163},[36,12229,14],{"class":98},[36,12231,1655],{"class":163},[36,12233,1677],{"class":98},[36,12235,12236],{"class":38,"line":191},[36,12237,12238],{"class":42},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[36,12240,12241],{"class":38,"line":197},[36,12242,12243],{"class":42},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[36,12245,12246,12249,12252],{"class":38,"line":217},[36,12247,12248],{"class":163},"    delete",[36,12250,12251],{"class":98}," p;",[36,12253,12254],{"class":42},"\u002F\u002F删除这块地址\n",[36,12256,12257],{"class":38,"line":223},[36,12258,2044],{"class":98},[36,12260,12261],{"class":38,"line":243},[36,12262,12263],{"class":42},"\u002F\u002F2.在堆区利用new开辟数组\n",[36,12265,12266,12268,12270],{"class":38,"line":250},[36,12267,5815],{"class":163},[36,12269,6108],{"class":55},[36,12271,2435],{"class":98},[36,12273,12274],{"class":38,"line":256},[36,12275,2025],{"class":98},[36,12277,12278],{"class":38,"line":273},[36,12279,12280],{"class":42},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[36,12282,12283,12285,12287,12289,12291,12293,12295,12297,12300],{"class":38,"line":278},[36,12284,2444],{"class":163},[36,12286,6969],{"class":163},[36,12288,4331],{"class":98},[36,12290,12156],{"class":163},[36,12292,2841],{"class":163},[36,12294,1503],{"class":98},[36,12296,1060],{"class":109},[36,12298,12299],{"class":98},"];",[36,12301,12302],{"class":42},"\u002F\u002F10代表数组有10个元素\n",[36,12304,12305,12307,12309,12311,12313,12315,12317,12319,12321,12323,12325,12327],{"class":38,"line":284},[36,12306,3652],{"class":163},[36,12308,2130],{"class":98},[36,12310,624],{"class":163},[36,12312,3483],{"class":98},[36,12314,176],{"class":163},[36,12316,807],{"class":109},[36,12318,3490],{"class":98},[36,12320,179],{"class":163},[36,12322,1060],{"class":109},[36,12324,3490],{"class":98},[36,12326,2751],{"class":163},[36,12328,627],{"class":98},[36,12330,12331],{"class":38,"line":315},[36,12332,2489],{"class":98},[36,12334,12335,12338,12340,12342,12344,12346,12348],{"class":38,"line":320},[36,12336,12337],{"class":98},"        arr[i]",[36,12339,176],{"class":163},[36,12341,1055],{"class":98},[36,12343,1095],{"class":163},[36,12345,926],{"class":109},[36,12347,674],{"class":98},[36,12349,12350],{"class":42},"\u002F\u002F给10个元素赋值100～109\n",[36,12352,12353],{"class":38,"line":326},[36,12354,2646],{"class":98},[36,12356,12357,12359,12361,12363,12365,12367,12369,12371,12373,12375,12377,12379],{"class":38,"line":343},[36,12358,3652],{"class":163},[36,12360,2130],{"class":98},[36,12362,624],{"class":163},[36,12364,3483],{"class":98},[36,12366,176],{"class":163},[36,12368,807],{"class":109},[36,12370,3490],{"class":98},[36,12372,179],{"class":163},[36,12374,1060],{"class":109},[36,12376,3490],{"class":98},[36,12378,2751],{"class":163},[36,12380,627],{"class":98},[36,12382,12383],{"class":38,"line":348},[36,12384,2489],{"class":98},[36,12386,12387,12389,12391,12393,12395],{"class":38,"line":354},[36,12388,3902],{"class":98},[36,12390,1655],{"class":163},[36,12392,4805],{"class":98},[36,12394,1655],{"class":163},[36,12396,1677],{"class":98},[36,12398,12399],{"class":38,"line":370},[36,12400,2646],{"class":98},[36,12402,12403],{"class":38,"line":375},[36,12404,12405],{"class":42},"    \u002F\u002F释放堆区数组\n",[36,12407,12408],{"class":38,"line":381},[36,12409,12410],{"class":42},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[36,12412,12413,12416],{"class":38,"line":399},[36,12414,12415],{"class":163},"    delete[]",[36,12417,12418],{"class":98}," arr;\n",[36,12420,12421],{"class":38,"line":404},[36,12422,2044],{"class":98},[36,12424,12425],{"class":38,"line":410},[36,12426,247],{"emptyLinePlaceholder":246},[36,12428,12429,12431,12433],{"class":38,"line":423},[36,12430,624],{"class":163},[36,12432,2432],{"class":55},[36,12434,2435],{"class":98},[36,12436,12437],{"class":38,"line":436},[36,12438,2025],{"class":98},[36,12440,12441,12443],{"class":38,"line":441},[36,12442,6084],{"class":55},[36,12444,6087],{"class":98},[36,12446,12447,12449],{"class":38,"line":447},[36,12448,6153],{"class":55},[36,12450,6087],{"class":98},[36,12452,12453],{"class":38,"line":465},[36,12454,2044],{"class":98},[537,12456,12457],{},"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":31,"searchDepth":46,"depth":46,"links":12459},[12460],{"id":11128,"depth":46,"text":11129,"children":12461},[12462,12463],{"id":11160,"depth":52,"text":11161},{"id":11788,"depth":52,"text":11789},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":11120,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12470,"title":12471,"body":12472,"description":31,"extension":543,"meta":13953,"navigation":246,"path":13954,"seo":13955,"stem":13956,"__hash__":13957},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12473,"toc":13945},[12474,12477,12481,12484,12487,12656,12660,12665,12682,12687,12839,12843,12846,12849,13243,13247,13250,13255,13258,13570,13574,13580,13740,13742,13750,13754,13757,13764,13942],[10,12475,12471],{"id":12476},"_6引用",[559,12478,12480],{"id":12479},"_61引用基本用法","6.1引用基本用法",[14,12482,12483],{},"引用的本质：给变量起别名",[14,12485,12486],{},"语法：数据类型 &别名=原名",[26,12488,12490],{"className":609,"code":12489,"language":611,"meta":31,"style":31},"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",[33,12491,12492,12500,12504,12516,12528,12532,12551,12570,12574,12585,12589,12608,12626,12630,12640,12644,12652],{"__ignoreMap":31},[36,12493,12494,12496,12498],{"class":38,"line":39},[36,12495,624],{"class":163},[36,12497,2432],{"class":55},[36,12499,11292],{"class":98},[36,12501,12502],{"class":38,"line":46},[36,12503,247],{"emptyLinePlaceholder":246},[36,12505,12506,12508,12510,12512,12514],{"class":38,"line":52},[36,12507,2444],{"class":163},[36,12509,11308],{"class":98},[36,12511,176],{"class":163},[36,12513,2497],{"class":109},[36,12515,1772],{"class":98},[36,12517,12518,12520,12522,12524,12526],{"class":38,"line":66},[36,12519,2444],{"class":163},[36,12521,11023],{"class":163},[36,12523,11384],{"class":98},[36,12525,176],{"class":163},[36,12527,1911],{"class":98},[36,12529,12530],{"class":38,"line":72},[36,12531,247],{"emptyLinePlaceholder":246},[36,12533,12534,12536,12538,12541,12543,12545,12547,12549],{"class":38,"line":82},[36,12535,6980],{"class":98},[36,12537,1655],{"class":163},[36,12539,12540],{"class":59}," \"a = \"",[36,12542,1923],{"class":163},[36,12544,11308],{"class":98},[36,12546,1655],{"class":163},[36,12548,11908],{"class":98},[36,12550,7719],{"class":42},[36,12552,12553,12555,12557,12560,12562,12564,12566,12568],{"class":38,"line":88},[36,12554,6980],{"class":98},[36,12556,1655],{"class":163},[36,12558,12559],{"class":59}," \"b = \"",[36,12561,1923],{"class":163},[36,12563,11321],{"class":98},[36,12565,1655],{"class":163},[36,12567,11908],{"class":98},[36,12569,7719],{"class":42},[36,12571,12572],{"class":38,"line":113},[36,12573,247],{"emptyLinePlaceholder":246},[36,12575,12576,12579,12581,12583],{"class":38,"line":119},[36,12577,12578],{"class":98},"    b ",[36,12580,176],{"class":163},[36,12582,6205],{"class":109},[36,12584,1772],{"class":98},[36,12586,12587],{"class":38,"line":131},[36,12588,247],{"emptyLinePlaceholder":246},[36,12590,12591,12593,12595,12597,12599,12601,12603,12605],{"class":38,"line":137},[36,12592,6980],{"class":98},[36,12594,1655],{"class":163},[36,12596,12540],{"class":59},[36,12598,1923],{"class":163},[36,12600,11308],{"class":98},[36,12602,1655],{"class":163},[36,12604,11908],{"class":98},[36,12606,12607],{"class":42},"\u002F\u002F100\n",[36,12609,12610,12612,12614,12616,12618,12620,12622,12624],{"class":38,"line":147},[36,12611,6980],{"class":98},[36,12613,1655],{"class":163},[36,12615,12559],{"class":59},[36,12617,1923],{"class":163},[36,12619,11321],{"class":98},[36,12621,1655],{"class":163},[36,12623,11908],{"class":98},[36,12625,12607],{"class":42},[36,12627,12628],{"class":38,"line":153},[36,12629,247],{"emptyLinePlaceholder":246},[36,12631,12632,12634,12636,12638],{"class":38,"line":191},[36,12633,2762],{"class":55},[36,12635,621],{"class":98},[36,12637,2767],{"class":59},[36,12639,3170],{"class":98},[36,12641,12642],{"class":38,"line":197},[36,12643,247],{"emptyLinePlaceholder":246},[36,12645,12646,12648,12650],{"class":38,"line":217},[36,12647,4541],{"class":163},[36,12649,4544],{"class":109},[36,12651,1772],{"class":98},[36,12653,12654],{"class":38,"line":223},[36,12655,2044],{"class":98},[559,12657,12659],{"id":12658},"_62引用的注意事项","6.2引用的注意事项",[571,12661,12662],{},[574,12663,12664],{},"引用必须要初始化",[26,12666,12668],{"className":609,"code":12667,"language":611,"meta":31,"style":31},"int &b;\u002F\u002F非常错误！\n",[33,12669,12670],{"__ignoreMap":31},[36,12671,12672,12674,12676,12679],{"class":38,"line":39},[36,12673,624],{"class":163},[36,12675,11023],{"class":163},[36,12677,12678],{"class":98},"b;",[36,12680,12681],{"class":42},"\u002F\u002F非常错误！\n",[571,12683,12684],{"start":46},[574,12685,12686],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[26,12688,12690],{"className":609,"code":12689,"language":611,"meta":31,"style":31},"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",[33,12691,12692,12700,12712,12724,12732,12748,12761,12779,12797,12817,12827,12835],{"__ignoreMap":31},[36,12693,12694,12696,12698],{"class":38,"line":39},[36,12695,624],{"class":163},[36,12697,2432],{"class":55},[36,12699,11292],{"class":98},[36,12701,12702,12704,12706,12708,12710],{"class":38,"line":46},[36,12703,2444],{"class":163},[36,12705,11308],{"class":98},[36,12707,176],{"class":163},[36,12709,2497],{"class":109},[36,12711,1772],{"class":98},[36,12713,12714,12716,12718,12720,12722],{"class":38,"line":52},[36,12715,2444],{"class":163},[36,12717,11321],{"class":98},[36,12719,176],{"class":163},[36,12721,9391],{"class":109},[36,12723,1772],{"class":98},[36,12725,12726,12729],{"class":38,"line":66},[36,12727,12728],{"class":42},"    \u002F\u002Fint &c;",[36,12730,12731],{"class":42}," \u002F\u002F错误，引用必须初始化\n",[36,12733,12734,12736,12738,12740,12742,12745],{"class":38,"line":72},[36,12735,2444],{"class":163},[36,12737,11023],{"class":163},[36,12739,3397],{"class":98},[36,12741,176],{"class":163},[36,12743,12744],{"class":98}," a;",[36,12746,12747],{"class":42}," \u002F\u002F一旦初始化后，就不可以更改\n",[36,12749,12750,12753,12755,12758],{"class":38,"line":82},[36,12751,12752],{"class":98},"    c ",[36,12754,176],{"class":163},[36,12756,12757],{"class":98}," b;",[36,12759,12760],{"class":42}," \u002F\u002F这是赋值操作，不是更改引用\n",[36,12762,12763,12765,12767,12769,12771,12773,12775,12777],{"class":38,"line":88},[36,12764,6980],{"class":98},[36,12766,1655],{"class":163},[36,12768,12540],{"class":59},[36,12770,1923],{"class":163},[36,12772,11308],{"class":98},[36,12774,1655],{"class":163},[36,12776,11908],{"class":98},[36,12778,7704],{"class":42},[36,12780,12781,12783,12785,12787,12789,12791,12793,12795],{"class":38,"line":113},[36,12782,6980],{"class":98},[36,12784,1655],{"class":163},[36,12786,12559],{"class":59},[36,12788,1923],{"class":163},[36,12790,11321],{"class":98},[36,12792,1655],{"class":163},[36,12794,11908],{"class":98},[36,12796,7704],{"class":42},[36,12798,12799,12801,12803,12806,12808,12811,12813,12815],{"class":38,"line":119},[36,12800,6980],{"class":98},[36,12802,1655],{"class":163},[36,12804,12805],{"class":59}," \"c = \"",[36,12807,1923],{"class":163},[36,12809,12810],{"class":98}," c ",[36,12812,1655],{"class":163},[36,12814,11908],{"class":98},[36,12816,7704],{"class":42},[36,12818,12819,12821,12823,12825],{"class":38,"line":131},[36,12820,2762],{"class":55},[36,12822,621],{"class":98},[36,12824,2767],{"class":59},[36,12826,3170],{"class":98},[36,12828,12829,12831,12833],{"class":38,"line":137},[36,12830,4541],{"class":163},[36,12832,4544],{"class":109},[36,12834,1772],{"class":98},[36,12836,12837],{"class":38,"line":147},[36,12838,2044],{"class":98},[559,12840,12842],{"id":12841},"_63引用做函数参数","6.3引用做函数参数",[14,12844,12845],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,12847,12848],{},"优点：可以简化指针修改实参",[26,12850,12852],{"className":609,"code":12851,"language":611,"meta":31,"style":31},"\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",[33,12853,12854,12859,12882,12893,12903,12912,12916,12920,12925,12947,12959,12971,12981,12985,12989,12994,13016,13026,13034,13042,13046,13050,13058,13062,13074,13086,13090,13101,13127,13131,13151,13175,13179,13189,13213,13217,13227,13231,13239],{"__ignoreMap":31},[36,12855,12856],{"class":38,"line":39},[36,12857,12858],{"class":42},"\u002F\u002F1. 值传递\n",[36,12860,12861,12863,12866,12868,12870,12872,12875,12877,12879],{"class":38,"line":46},[36,12862,5815],{"class":163},[36,12864,12865],{"class":55}," mySwap01",[36,12867,621],{"class":98},[36,12869,624],{"class":163},[36,12871,1877],{"class":5667},[36,12873,12874],{"class":98},", ",[36,12876,624],{"class":163},[36,12878,3284],{"class":5667},[36,12880,12881],{"class":98},") {\n",[36,12883,12884,12886,12889,12891],{"class":38,"line":52},[36,12885,2444],{"class":163},[36,12887,12888],{"class":98}," temp ",[36,12890,176],{"class":163},[36,12892,1911],{"class":98},[36,12894,12895,12898,12900],{"class":38,"line":66},[36,12896,12897],{"class":98},"    a ",[36,12899,176],{"class":163},[36,12901,12902],{"class":98}," b;\n",[36,12904,12905,12907,12909],{"class":38,"line":72},[36,12906,12578],{"class":98},[36,12908,176],{"class":163},[36,12910,12911],{"class":98}," temp;\n",[36,12913,12914],{"class":38,"line":82},[36,12915,2044],{"class":98},[36,12917,12918],{"class":38,"line":88},[36,12919,247],{"emptyLinePlaceholder":246},[36,12921,12922],{"class":38,"line":113},[36,12923,12924],{"class":42},"\u002F\u002F2. 地址传递\n",[36,12926,12927,12929,12932,12934,12937,12939,12941,12943,12945],{"class":38,"line":119},[36,12928,5815],{"class":163},[36,12930,12931],{"class":55}," mySwap02",[36,12933,621],{"class":98},[36,12935,12936],{"class":163},"int*",[36,12938,1877],{"class":5667},[36,12940,12874],{"class":98},[36,12942,12936],{"class":163},[36,12944,3284],{"class":5667},[36,12946,12881],{"class":98},[36,12948,12949,12951,12953,12955,12957],{"class":38,"line":131},[36,12950,2444],{"class":163},[36,12952,12888],{"class":98},[36,12954,176],{"class":163},[36,12956,6969],{"class":163},[36,12958,6648],{"class":98},[36,12960,12961,12963,12965,12967,12969],{"class":38,"line":137},[36,12962,6854],{"class":163},[36,12964,11358],{"class":98},[36,12966,176],{"class":163},[36,12968,6969],{"class":163},[36,12970,6520],{"class":98},[36,12972,12973,12975,12977,12979],{"class":38,"line":147},[36,12974,6854],{"class":163},[36,12976,11384],{"class":98},[36,12978,176],{"class":163},[36,12980,12911],{"class":98},[36,12982,12983],{"class":38,"line":153},[36,12984,2044],{"class":98},[36,12986,12987],{"class":38,"line":191},[36,12988,247],{"emptyLinePlaceholder":246},[36,12990,12991],{"class":38,"line":197},[36,12992,12993],{"class":42},"\u002F\u002F3. 引用传递\n",[36,12995,12996,12998,13001,13003,13006,13008,13010,13012,13014],{"class":38,"line":217},[36,12997,5815],{"class":163},[36,12999,13000],{"class":55}," mySwap03",[36,13002,621],{"class":98},[36,13004,13005],{"class":163},"int&",[36,13007,1877],{"class":5667},[36,13009,12874],{"class":98},[36,13011,13005],{"class":163},[36,13013,3284],{"class":5667},[36,13015,12881],{"class":98},[36,13017,13018,13020,13022,13024],{"class":38,"line":223},[36,13019,2444],{"class":163},[36,13021,12888],{"class":98},[36,13023,176],{"class":163},[36,13025,1911],{"class":98},[36,13027,13028,13030,13032],{"class":38,"line":243},[36,13029,12897],{"class":98},[36,13031,176],{"class":163},[36,13033,12902],{"class":98},[36,13035,13036,13038,13040],{"class":38,"line":250},[36,13037,12578],{"class":98},[36,13039,176],{"class":163},[36,13041,12911],{"class":98},[36,13043,13044],{"class":38,"line":256},[36,13045,2044],{"class":98},[36,13047,13048],{"class":38,"line":273},[36,13049,247],{"emptyLinePlaceholder":246},[36,13051,13052,13054,13056],{"class":38,"line":278},[36,13053,624],{"class":163},[36,13055,2432],{"class":55},[36,13057,11292],{"class":98},[36,13059,13060],{"class":38,"line":284},[36,13061,247],{"emptyLinePlaceholder":246},[36,13063,13064,13066,13068,13070,13072],{"class":38,"line":315},[36,13065,2444],{"class":163},[36,13067,11308],{"class":98},[36,13069,176],{"class":163},[36,13071,2497],{"class":109},[36,13073,1772],{"class":98},[36,13075,13076,13078,13080,13082,13084],{"class":38,"line":320},[36,13077,2444],{"class":163},[36,13079,11321],{"class":98},[36,13081,176],{"class":163},[36,13083,9391],{"class":109},[36,13085,1772],{"class":98},[36,13087,13088],{"class":38,"line":326},[36,13089,247],{"emptyLinePlaceholder":246},[36,13091,13092,13095,13098],{"class":38,"line":343},[36,13093,13094],{"class":55},"    mySwap01",[36,13096,13097],{"class":98},"(a, b);",[36,13099,13100],{"class":42},"\u002F\u002F值传递，形参不会修饰实参\n",[36,13102,13103,13105,13107,13110,13112,13114,13116,13119,13121,13123,13125],{"class":38,"line":348},[36,13104,6980],{"class":98},[36,13106,1655],{"class":163},[36,13108,13109],{"class":59}," \"a:\"",[36,13111,1923],{"class":163},[36,13113,11308],{"class":98},[36,13115,1655],{"class":163},[36,13117,13118],{"class":59}," \" b:\"",[36,13120,1923],{"class":163},[36,13122,11321],{"class":98},[36,13124,1655],{"class":163},[36,13126,9281],{"class":98},[36,13128,13129],{"class":38,"line":354},[36,13130,247],{"emptyLinePlaceholder":246},[36,13132,13133,13136,13138,13140,13143,13145,13148],{"class":38,"line":370},[36,13134,13135],{"class":55},"    mySwap02",[36,13137,621],{"class":98},[36,13139,967],{"class":163},[36,13141,13142],{"class":98},"a, ",[36,13144,967],{"class":163},[36,13146,13147],{"class":98},"b);",[36,13149,13150],{"class":42},"\u002F\u002F地址传递，形参会修饰实参\n",[36,13152,13153,13155,13157,13159,13161,13163,13165,13167,13169,13171,13173],{"class":38,"line":375},[36,13154,6980],{"class":98},[36,13156,1655],{"class":163},[36,13158,13109],{"class":59},[36,13160,1923],{"class":163},[36,13162,11308],{"class":98},[36,13164,1655],{"class":163},[36,13166,13118],{"class":59},[36,13168,1923],{"class":163},[36,13170,11321],{"class":98},[36,13172,1655],{"class":163},[36,13174,9281],{"class":98},[36,13176,13177],{"class":38,"line":381},[36,13178,247],{"emptyLinePlaceholder":246},[36,13180,13181,13184,13186],{"class":38,"line":399},[36,13182,13183],{"class":55},"    mySwap03",[36,13185,13097],{"class":98},[36,13187,13188],{"class":42},"\u002F\u002F引用传递，形参会修饰实参\n",[36,13190,13191,13193,13195,13197,13199,13201,13203,13205,13207,13209,13211],{"class":38,"line":404},[36,13192,6980],{"class":98},[36,13194,1655],{"class":163},[36,13196,13109],{"class":59},[36,13198,1923],{"class":163},[36,13200,11308],{"class":98},[36,13202,1655],{"class":163},[36,13204,13118],{"class":59},[36,13206,1923],{"class":163},[36,13208,11321],{"class":98},[36,13210,1655],{"class":163},[36,13212,9281],{"class":98},[36,13214,13215],{"class":38,"line":410},[36,13216,247],{"emptyLinePlaceholder":246},[36,13218,13219,13221,13223,13225],{"class":38,"line":423},[36,13220,2762],{"class":55},[36,13222,621],{"class":98},[36,13224,2767],{"class":59},[36,13226,3170],{"class":98},[36,13228,13229],{"class":38,"line":436},[36,13230,247],{"emptyLinePlaceholder":246},[36,13232,13233,13235,13237],{"class":38,"line":441},[36,13234,4541],{"class":163},[36,13236,4544],{"class":109},[36,13238,1772],{"class":98},[36,13240,13241],{"class":38,"line":447},[36,13242,2044],{"class":98},[559,13244,13246],{"id":13245},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,13248,13249],{},"作用：引用是可以作为函数的返回值存在的",[14,13251,9466,13252],{},[765,13253,13254],{},"不要返回局部变量引用",[14,13256,13257],{},"用法：函数调用作为左值",[26,13259,13261],{"className":10380,"code":13260,"language":10382,"meta":31,"style":31},"\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",[33,13262,13263,13268,13276,13291,13297,13301,13305,13310,13318,13335,13341,13345,13349,13357,13361,13366,13380,13400,13419,13423,13428,13441,13461,13479,13483,13499,13503,13522,13540,13544,13554,13558,13566],{"__ignoreMap":31},[36,13264,13265],{"class":38,"line":39},[36,13266,13267],{"class":42},"\u002F\u002F返回局部变量引用\n",[36,13269,13270,13272,13274],{"class":38,"line":46},[36,13271,13005],{"class":163},[36,13273,6039],{"class":55},[36,13275,11292],{"class":98},[36,13277,13278,13280,13282,13284,13286,13288],{"class":38,"line":52},[36,13279,2444],{"class":163},[36,13281,11308],{"class":98},[36,13283,176],{"class":163},[36,13285,2497],{"class":109},[36,13287,674],{"class":98},[36,13289,13290],{"class":42}," \u002F\u002F局部变量\n",[36,13292,13293,13295],{"class":38,"line":66},[36,13294,4541],{"class":163},[36,13296,1911],{"class":98},[36,13298,13299],{"class":38,"line":72},[36,13300,2044],{"class":98},[36,13302,13303],{"class":38,"line":82},[36,13304,247],{"emptyLinePlaceholder":246},[36,13306,13307],{"class":38,"line":88},[36,13308,13309],{"class":42},"\u002F\u002F返回静态变量引用\n",[36,13311,13312,13314,13316],{"class":38,"line":113},[36,13313,13005],{"class":163},[36,13315,6108],{"class":55},[36,13317,11292],{"class":98},[36,13319,13320,13322,13324,13326,13328,13330,13332],{"class":38,"line":119},[36,13321,11459],{"class":163},[36,13323,2841],{"class":163},[36,13325,11308],{"class":98},[36,13327,176],{"class":163},[36,13329,9391],{"class":109},[36,13331,674],{"class":98},[36,13333,13334],{"class":42},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[36,13336,13337,13339],{"class":38,"line":131},[36,13338,4541],{"class":163},[36,13340,1911],{"class":98},[36,13342,13343],{"class":38,"line":137},[36,13344,2044],{"class":98},[36,13346,13347],{"class":38,"line":147},[36,13348,247],{"emptyLinePlaceholder":246},[36,13350,13351,13353,13355],{"class":38,"line":153},[36,13352,624],{"class":163},[36,13354,2432],{"class":55},[36,13356,11292],{"class":98},[36,13358,13359],{"class":38,"line":191},[36,13360,247],{"emptyLinePlaceholder":246},[36,13362,13363],{"class":38,"line":197},[36,13364,13365],{"class":42},"    \u002F\u002F不能返回局部变量的引用\n",[36,13367,13368,13371,13374,13376,13378],{"class":38,"line":217},[36,13369,13370],{"class":163},"    int&",[36,13372,13373],{"class":98}," ref ",[36,13375,176],{"class":163},[36,13377,6039],{"class":55},[36,13379,6087],{"class":98},[36,13381,13382,13384,13386,13389,13391,13393,13395,13397],{"class":38,"line":223},[36,13383,6980],{"class":98},[36,13385,1655],{"class":163},[36,13387,13388],{"class":59}," \"ref = \"",[36,13390,1923],{"class":163},[36,13392,13373],{"class":98},[36,13394,1655],{"class":163},[36,13396,11908],{"class":98},[36,13398,13399],{"class":42},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[36,13401,13402,13404,13406,13408,13410,13412,13414,13416],{"class":38,"line":243},[36,13403,6980],{"class":98},[36,13405,1655],{"class":163},[36,13407,13388],{"class":59},[36,13409,1923],{"class":163},[36,13411,13373],{"class":98},[36,13413,1655],{"class":163},[36,13415,11908],{"class":98},[36,13417,13418],{"class":42},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[36,13420,13421],{"class":38,"line":250},[36,13422,247],{"emptyLinePlaceholder":246},[36,13424,13425],{"class":38,"line":256},[36,13426,13427],{"class":42},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[36,13429,13430,13432,13435,13437,13439],{"class":38,"line":273},[36,13431,13370],{"class":163},[36,13433,13434],{"class":98}," ref2 ",[36,13436,176],{"class":163},[36,13438,6108],{"class":55},[36,13440,6087],{"class":98},[36,13442,13443,13445,13447,13450,13452,13454,13456,13458],{"class":38,"line":278},[36,13444,6980],{"class":98},[36,13446,1655],{"class":163},[36,13448,13449],{"class":59}," \"ref2 = \"",[36,13451,1923],{"class":163},[36,13453,13434],{"class":98},[36,13455,1655],{"class":163},[36,13457,11908],{"class":98},[36,13459,13460],{"class":42}," \u002F\u002F20\n",[36,13462,13463,13465,13467,13469,13471,13473,13475,13477],{"class":38,"line":284},[36,13464,6980],{"class":98},[36,13466,1655],{"class":163},[36,13468,13449],{"class":59},[36,13470,1923],{"class":163},[36,13472,13434],{"class":98},[36,13474,1655],{"class":163},[36,13476,11908],{"class":98},[36,13478,13460],{"class":42},[36,13480,13481],{"class":38,"line":315},[36,13482,247],{"emptyLinePlaceholder":246},[36,13484,13485,13487,13490,13492,13494,13496],{"class":38,"line":320},[36,13486,6153],{"class":55},[36,13488,13489],{"class":98},"() ",[36,13491,176],{"class":163},[36,13493,3450],{"class":109},[36,13495,674],{"class":98},[36,13497,13498],{"class":42},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[36,13500,13501],{"class":38,"line":326},[36,13502,247],{"emptyLinePlaceholder":246},[36,13504,13505,13507,13509,13511,13513,13515,13517,13519],{"class":38,"line":343},[36,13506,6980],{"class":98},[36,13508,1655],{"class":163},[36,13510,13449],{"class":59},[36,13512,1923],{"class":163},[36,13514,13434],{"class":98},[36,13516,1655],{"class":163},[36,13518,11908],{"class":98},[36,13520,13521],{"class":42}," \u002F\u002F1000\n",[36,13523,13524,13526,13528,13530,13532,13534,13536,13538],{"class":38,"line":348},[36,13525,6980],{"class":98},[36,13527,1655],{"class":163},[36,13529,13449],{"class":59},[36,13531,1923],{"class":163},[36,13533,13434],{"class":98},[36,13535,1655],{"class":163},[36,13537,11908],{"class":98},[36,13539,13521],{"class":42},[36,13541,13542],{"class":38,"line":354},[36,13543,247],{"emptyLinePlaceholder":246},[36,13545,13546,13548,13550,13552],{"class":38,"line":370},[36,13547,2762],{"class":55},[36,13549,621],{"class":98},[36,13551,2767],{"class":59},[36,13553,3170],{"class":98},[36,13555,13556],{"class":38,"line":375},[36,13557,247],{"emptyLinePlaceholder":246},[36,13559,13560,13562,13564],{"class":38,"line":381},[36,13561,4541],{"class":163},[36,13563,4544],{"class":109},[36,13565,1772],{"class":98},[36,13567,13568],{"class":38,"line":399},[36,13569,2044],{"class":98},[559,13571,13573],{"id":13572},"_65引用的本质","6.5引用的本质",[14,13575,13576,13577],{},"本质：",[765,13578,13579],{},"引用的本质在c++内部实现是一个指针常量.",[26,13581,13583],{"className":609,"code":13582,"language":611,"meta":31,"style":31},"\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",[33,13584,13585,13590,13606,13620,13624,13633,13645,13650,13655,13666,13679,13683,13699,13716,13720,13728,13736],{"__ignoreMap":31},[36,13586,13587],{"class":38,"line":39},[36,13588,13589],{"class":42},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[36,13591,13592,13594,13596,13598,13600,13603],{"class":38,"line":46},[36,13593,5815],{"class":163},[36,13595,11824],{"class":55},[36,13597,621],{"class":98},[36,13599,13005],{"class":163},[36,13601,13602],{"class":5667}," ref",[36,13604,13605],{"class":98},"){\n",[36,13607,13608,13611,13613,13615,13617],{"class":38,"line":52},[36,13609,13610],{"class":98},"    ref ",[36,13612,176],{"class":163},[36,13614,6205],{"class":109},[36,13616,674],{"class":98},[36,13618,13619],{"class":42}," \u002F\u002F ref是引用，转换为*ref = 100\n",[36,13621,13622],{"class":38,"line":66},[36,13623,2044],{"class":98},[36,13625,13626,13628,13630],{"class":38,"line":72},[36,13627,624],{"class":163},[36,13629,2432],{"class":55},[36,13631,13632],{"class":98},"(){\n",[36,13634,13635,13637,13639,13641,13643],{"class":38,"line":82},[36,13636,2444],{"class":163},[36,13638,11308],{"class":98},[36,13640,176],{"class":163},[36,13642,2497],{"class":109},[36,13644,1772],{"class":98},[36,13646,13647],{"class":38,"line":88},[36,13648,13649],{"class":98},"    \n",[36,13651,13652],{"class":38,"line":113},[36,13653,13654],{"class":42},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[36,13656,13657,13659,13661,13663],{"class":38,"line":119},[36,13658,13370],{"class":163},[36,13660,13373],{"class":98},[36,13662,176],{"class":163},[36,13664,13665],{"class":98}," a; \n",[36,13667,13668,13670,13672,13674,13676],{"class":38,"line":131},[36,13669,13610],{"class":98},[36,13671,176],{"class":163},[36,13673,9391],{"class":109},[36,13675,674],{"class":98},[36,13677,13678],{"class":42}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[36,13680,13681],{"class":38,"line":137},[36,13682,13649],{"class":98},[36,13684,13685,13687,13689,13691,13693,13695,13697],{"class":38,"line":147},[36,13686,6980],{"class":98},[36,13688,1655],{"class":163},[36,13690,13109],{"class":59},[36,13692,1923],{"class":163},[36,13694,11308],{"class":98},[36,13696,1655],{"class":163},[36,13698,9281],{"class":98},[36,13700,13701,13703,13705,13708,13710,13712,13714],{"class":38,"line":153},[36,13702,6980],{"class":98},[36,13704,1655],{"class":163},[36,13706,13707],{"class":59}," \"ref:\"",[36,13709,1923],{"class":163},[36,13711,13373],{"class":98},[36,13713,1655],{"class":163},[36,13715,9281],{"class":98},[36,13717,13718],{"class":38,"line":191},[36,13719,13649],{"class":98},[36,13721,13722,13725],{"class":38,"line":197},[36,13723,13724],{"class":55},"    func",[36,13726,13727],{"class":98},"(a);\n",[36,13729,13730,13732,13734],{"class":38,"line":217},[36,13731,4541],{"class":163},[36,13733,4544],{"class":109},[36,13735,1772],{"class":98},[36,13737,13738],{"class":38,"line":223},[36,13739,2044],{"class":98},[14,13741,11771],{},[571,13743,13744,13747],{},[574,13745,13746],{},"引用的本质，就是一个指针常量",[574,13748,13749],{},"引用一旦初始化，就不可以发生改变",[559,13751,13753],{"id":13752},"_66常量引用","6.6常量引用",[14,13755,13756],{},"作用：常量引用主要用来修饰形参",[14,13758,13759,13760,13763],{},"在函数形参列表中，可以加",[765,13761,13762],{},"const修饰形参","，防止形参改变实参",[26,13765,13767],{"className":609,"code":13766,"language":611,"meta":31,"style":31},"\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",[33,13768,13769,13774,13779,13798,13803,13816,13820,13824,13832,13836,13841,13846,13860,13864,13872,13884,13888,13893,13905,13912,13916,13926,13930,13938],{"__ignoreMap":31},[36,13770,13771],{"class":38,"line":39},[36,13772,13773],{"class":42},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[36,13775,13776],{"class":38,"line":46},[36,13777,13778],{"class":42},"\u002F\u002F加上const就不能修改实参的\n",[36,13780,13781,13783,13786,13788,13790,13793,13796],{"class":38,"line":52},[36,13782,5815],{"class":163},[36,13784,13785],{"class":55}," showValue",[36,13787,621],{"class":98},[36,13789,7243],{"class":163},[36,13791,13792],{"class":163}," int&",[36,13794,13795],{"class":5667}," v",[36,13797,12881],{"class":98},[36,13799,13800],{"class":38,"line":66},[36,13801,13802],{"class":42},"    \u002F\u002Fv += 100;\n",[36,13804,13805,13807,13809,13812,13814],{"class":38,"line":72},[36,13806,6980],{"class":98},[36,13808,1655],{"class":163},[36,13810,13811],{"class":98}," v ",[36,13813,1655],{"class":163},[36,13815,9281],{"class":98},[36,13817,13818],{"class":38,"line":82},[36,13819,2044],{"class":98},[36,13821,13822],{"class":38,"line":88},[36,13823,247],{"emptyLinePlaceholder":246},[36,13825,13826,13828,13830],{"class":38,"line":113},[36,13827,624],{"class":163},[36,13829,2432],{"class":55},[36,13831,11292],{"class":98},[36,13833,13834],{"class":38,"line":119},[36,13835,247],{"emptyLinePlaceholder":246},[36,13837,13838],{"class":38,"line":131},[36,13839,13840],{"class":42},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[36,13842,13843],{"class":38,"line":137},[36,13844,13845],{"class":42},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[36,13847,13848,13850,13852,13854,13856,13858],{"class":38,"line":147},[36,13849,11660],{"class":163},[36,13851,13792],{"class":163},[36,13853,13373],{"class":98},[36,13855,176],{"class":163},[36,13857,2497],{"class":109},[36,13859,1772],{"class":98},[36,13861,13862],{"class":38,"line":153},[36,13863,247],{"emptyLinePlaceholder":246},[36,13865,13866,13869],{"class":38,"line":191},[36,13867,13868],{"class":42},"    \u002F\u002Fref = 100;",[36,13870,13871],{"class":42},"  \u002F\u002F加入const后不可以修改变量\n",[36,13873,13874,13876,13878,13880,13882],{"class":38,"line":197},[36,13875,6980],{"class":98},[36,13877,1655],{"class":163},[36,13879,13373],{"class":98},[36,13881,1655],{"class":163},[36,13883,9281],{"class":98},[36,13885,13886],{"class":38,"line":217},[36,13887,247],{"emptyLinePlaceholder":246},[36,13889,13890],{"class":38,"line":223},[36,13891,13892],{"class":42},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[36,13894,13895,13897,13899,13901,13903],{"class":38,"line":243},[36,13896,2444],{"class":163},[36,13898,11308],{"class":98},[36,13900,176],{"class":163},[36,13902,2497],{"class":109},[36,13904,1772],{"class":98},[36,13906,13907,13910],{"class":38,"line":250},[36,13908,13909],{"class":55},"    showValue",[36,13911,13727],{"class":98},[36,13913,13914],{"class":38,"line":256},[36,13915,247],{"emptyLinePlaceholder":246},[36,13917,13918,13920,13922,13924],{"class":38,"line":273},[36,13919,2762],{"class":55},[36,13921,621],{"class":98},[36,13923,2767],{"class":59},[36,13925,3170],{"class":98},[36,13927,13928],{"class":38,"line":278},[36,13929,247],{"emptyLinePlaceholder":246},[36,13931,13932,13934,13936],{"class":38,"line":284},[36,13933,4541],{"class":163},[36,13935,4544],{"class":109},[36,13937,1772],{"class":98},[36,13939,13940],{"class":38,"line":315},[36,13941,2044],{"class":98},[537,13943,13944],{},"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":31,"searchDepth":46,"depth":46,"links":13946},[13947,13948,13949,13950,13951,13952],{"id":12479,"depth":46,"text":12480},{"id":12658,"depth":46,"text":12659},{"id":12841,"depth":46,"text":12842},{"id":13245,"depth":46,"text":13246},{"id":13572,"depth":46,"text":13573},{"id":13752,"depth":46,"text":13753},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12471,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13959,"title":13960,"body":13961,"description":31,"extension":543,"meta":15042,"navigation":246,"path":15043,"seo":15044,"stem":15045,"__hash__":15046},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13962,"toc":15034},[13963,13966,13970,13973,13978,14210,14212,14223,14227,14230,14238,14342,14345,14349,14352,14356,14359,14364,14386,14392,14719,14722,14726,14734,15031],[10,13964,13960],{"id":13965},"_7函数高级部分",[559,13967,13969],{"id":13968},"_71函数默认参数","7.1函数默认参数",[14,13971,13972],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,13974,5632,13975],{},[33,13976,13977],{}," 返回值类型  函数名 （参数= 默认值）{}",[26,13979,13981],{"className":609,"code":13980,"language":611,"meta":31,"style":31},"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",[33,13982,13983,14018,14033,14037,14041,14046,14051,14080,14100,14110,14114,14118,14126,14130,14158,14180,14184,14194,14198,14206],{"__ignoreMap":31},[36,13984,13985,13987,13989,13991,13993,13995,13997,13999,14001,14004,14006,14008,14010,14012,14014,14016],{"class":38,"line":39},[36,13986,624],{"class":163},[36,13988,11824],{"class":55},[36,13990,621],{"class":98},[36,13992,624],{"class":163},[36,13994,1877],{"class":5667},[36,13996,12874],{"class":98},[36,13998,624],{"class":163},[36,14000,3284],{"class":5667},[36,14002,14003],{"class":163}," =",[36,14005,2497],{"class":109},[36,14007,12874],{"class":98},[36,14009,624],{"class":163},[36,14011,3300],{"class":5667},[36,14013,14003],{"class":163},[36,14015,2497],{"class":109},[36,14017,12881],{"class":98},[36,14019,14020,14022,14024,14026,14028,14030],{"class":38,"line":46},[36,14021,4541],{"class":163},[36,14023,11308],{"class":98},[36,14025,1095],{"class":163},[36,14027,11321],{"class":98},[36,14029,1095],{"class":163},[36,14031,14032],{"class":98}," c;\n",[36,14034,14035],{"class":38,"line":52},[36,14036,2044],{"class":98},[36,14038,14039],{"class":38,"line":66},[36,14040,247],{"emptyLinePlaceholder":246},[36,14042,14043],{"class":38,"line":72},[36,14044,14045],{"class":42},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[36,14047,14048],{"class":38,"line":82},[36,14049,14050],{"class":42},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[36,14052,14053,14055,14058,14060,14062,14064,14066,14068,14070,14072,14074,14076,14078],{"class":38,"line":88},[36,14054,624],{"class":163},[36,14056,14057],{"class":55}," func2",[36,14059,621],{"class":98},[36,14061,624],{"class":163},[36,14063,1877],{"class":5667},[36,14065,14003],{"class":163},[36,14067,2497],{"class":109},[36,14069,12874],{"class":98},[36,14071,624],{"class":163},[36,14073,3284],{"class":5667},[36,14075,14003],{"class":163},[36,14077,2497],{"class":109},[36,14079,3170],{"class":98},[36,14081,14082,14084,14086,14088,14090,14092,14094,14096,14098],{"class":38,"line":113},[36,14083,624],{"class":163},[36,14085,14057],{"class":55},[36,14087,621],{"class":98},[36,14089,624],{"class":163},[36,14091,1877],{"class":5667},[36,14093,12874],{"class":98},[36,14095,624],{"class":163},[36,14097,3284],{"class":5667},[36,14099,12881],{"class":98},[36,14101,14102,14104,14106,14108],{"class":38,"line":119},[36,14103,4541],{"class":163},[36,14105,11308],{"class":98},[36,14107,1095],{"class":163},[36,14109,12902],{"class":98},[36,14111,14112],{"class":38,"line":131},[36,14113,2044],{"class":98},[36,14115,14116],{"class":38,"line":137},[36,14117,247],{"emptyLinePlaceholder":246},[36,14119,14120,14122,14124],{"class":38,"line":147},[36,14121,624],{"class":163},[36,14123,2432],{"class":55},[36,14125,11292],{"class":98},[36,14127,14128],{"class":38,"line":153},[36,14129,247],{"emptyLinePlaceholder":246},[36,14131,14132,14134,14136,14139,14141,14143,14145,14147,14149,14151,14154,14156],{"class":38,"line":191},[36,14133,6980],{"class":98},[36,14135,1655],{"class":163},[36,14137,14138],{"class":59}," \"ret = \"",[36,14140,1923],{"class":163},[36,14142,11824],{"class":55},[36,14144,621],{"class":98},[36,14146,1313],{"class":109},[36,14148,12874],{"class":98},[36,14150,1313],{"class":109},[36,14152,14153],{"class":98},") ",[36,14155,1655],{"class":163},[36,14157,9281],{"class":98},[36,14159,14160,14162,14164,14166,14168,14170,14172,14174,14176,14178],{"class":38,"line":197},[36,14161,6980],{"class":98},[36,14163,1655],{"class":163},[36,14165,14138],{"class":59},[36,14167,1923],{"class":163},[36,14169,11824],{"class":55},[36,14171,621],{"class":98},[36,14173,926],{"class":109},[36,14175,14153],{"class":98},[36,14177,1655],{"class":163},[36,14179,9281],{"class":98},[36,14181,14182],{"class":38,"line":217},[36,14183,247],{"emptyLinePlaceholder":246},[36,14185,14186,14188,14190,14192],{"class":38,"line":223},[36,14187,2762],{"class":55},[36,14189,621],{"class":98},[36,14191,2767],{"class":59},[36,14193,3170],{"class":98},[36,14195,14196],{"class":38,"line":243},[36,14197,247],{"emptyLinePlaceholder":246},[36,14199,14200,14202,14204],{"class":38,"line":250},[36,14201,4541],{"class":163},[36,14203,4544],{"class":109},[36,14205,1772],{"class":98},[36,14207,14208],{"class":38,"line":256},[36,14209,2044],{"class":98},[14,14211,11771],{},[571,14213,14214,14217,14220],{},[574,14215,14216],{},"我传就用我；没传就用你",[574,14218,14219],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[574,14221,14222],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[559,14224,14226],{"id":14225},"_72函数的占位参数","7.2函数的占位参数",[14,14228,14229],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,14231,14232,14234,14235],{},[765,14233,5632],{}," ",[33,14236,14237],{},"返回值类型 函数名 (数据类型){}",[26,14239,14241],{"className":609,"code":14240,"language":611,"meta":31,"style":31},"\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",[33,14242,14243,14248,14266,14279,14283,14291,14295,14312,14316,14326,14330,14338],{"__ignoreMap":31},[36,14244,14245],{"class":38,"line":39},[36,14246,14247],{"class":42},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[36,14249,14250,14252,14254,14256,14258,14260,14262,14264],{"class":38,"line":46},[36,14251,5815],{"class":163},[36,14253,11824],{"class":55},[36,14255,621],{"class":98},[36,14257,624],{"class":163},[36,14259,1877],{"class":5667},[36,14261,12874],{"class":98},[36,14263,624],{"class":163},[36,14265,12881],{"class":98},[36,14267,14268,14270,14272,14275,14277],{"class":38,"line":52},[36,14269,6980],{"class":98},[36,14271,1655],{"class":163},[36,14273,14274],{"class":59}," \"this is func\"",[36,14276,1923],{"class":163},[36,14278,9281],{"class":98},[36,14280,14281],{"class":38,"line":66},[36,14282,2044],{"class":98},[36,14284,14285,14287,14289],{"class":38,"line":72},[36,14286,624],{"class":163},[36,14288,2432],{"class":55},[36,14290,11292],{"class":98},[36,14292,14293],{"class":38,"line":82},[36,14294,247],{"emptyLinePlaceholder":246},[36,14296,14297,14299,14301,14303,14305,14307,14309],{"class":38,"line":88},[36,14298,13724],{"class":55},[36,14300,621],{"class":98},[36,14302,1060],{"class":109},[36,14304,992],{"class":98},[36,14306,1060],{"class":109},[36,14308,6417],{"class":98},[36,14310,14311],{"class":42}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[36,14313,14314],{"class":38,"line":113},[36,14315,247],{"emptyLinePlaceholder":246},[36,14317,14318,14320,14322,14324],{"class":38,"line":119},[36,14319,2762],{"class":55},[36,14321,621],{"class":98},[36,14323,2767],{"class":59},[36,14325,3170],{"class":98},[36,14327,14328],{"class":38,"line":131},[36,14329,247],{"emptyLinePlaceholder":246},[36,14331,14332,14334,14336],{"class":38,"line":137},[36,14333,4541],{"class":163},[36,14335,4544],{"class":109},[36,14337,1772],{"class":98},[36,14339,14340],{"class":38,"line":147},[36,14341,2044],{"class":98},[14,14343,14344],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[559,14346,14348],{"id":14347},"_73函数重载","7.3函数重载",[14,14350,14351],{},"意思是函数名是可以相同的",[588,14353,14355],{"id":14354},"_731基本语法","7.3.1基本语法",[14,14357,14358],{},"作用：函数名可以相同，提高复用性",[14,14360,14361],{},[765,14362,14363],{},"函数重载满足条件：",[1618,14365,14366,14369,14372],{},[574,14367,14368],{},"同一个作用域下",[574,14370,14371],{},"函数名称相同",[574,14373,14374,14375,14378,14379,14382,14383],{},"函数参数",[765,14376,14377],{},"类型不同","  或者 ",[765,14380,14381],{},"个数不同"," 或者 ",[765,14384,14385],{},"顺序不同",[14,14387,14388,14391],{},[765,14389,14390],{},"注意:","  函数的返回值不可以作为函数重载的条件",[26,14393,14395],{"className":10380,"code":14394,"language":10382,"meta":31,"style":31},"\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",[33,14396,14397,14402,14410,14414,14427,14431,14445,14449,14462,14466,14481,14485,14498,14502,14523,14527,14540,14544,14564,14568,14581,14585,14589,14594,14599,14604,14609,14614,14618,14622,14630,14634,14640,14650,14660,14674,14689,14693,14703,14707,14715],{"__ignoreMap":31},[36,14398,14399],{"class":38,"line":39},[36,14400,14401],{"class":42},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[36,14403,14404,14406,14408],{"class":38,"line":46},[36,14405,5815],{"class":163},[36,14407,11824],{"class":55},[36,14409,2435],{"class":98},[36,14411,14412],{"class":38,"line":52},[36,14413,2025],{"class":98},[36,14415,14416,14418,14420,14423,14425],{"class":38,"line":66},[36,14417,6980],{"class":98},[36,14419,1655],{"class":163},[36,14421,14422],{"class":59}," \"func 的调用！\"",[36,14424,1923],{"class":163},[36,14426,9281],{"class":98},[36,14428,14429],{"class":38,"line":72},[36,14430,2044],{"class":98},[36,14432,14433,14435,14437,14439,14441,14443],{"class":38,"line":82},[36,14434,5815],{"class":163},[36,14436,11824],{"class":55},[36,14438,621],{"class":98},[36,14440,624],{"class":163},[36,14442,1877],{"class":5667},[36,14444,627],{"class":98},[36,14446,14447],{"class":38,"line":88},[36,14448,2025],{"class":98},[36,14450,14451,14453,14455,14458,14460],{"class":38,"line":113},[36,14452,6980],{"class":98},[36,14454,1655],{"class":163},[36,14456,14457],{"class":59}," \"func (int a) 的调用！\"",[36,14459,1923],{"class":163},[36,14461,9281],{"class":98},[36,14463,14464],{"class":38,"line":119},[36,14465,2044],{"class":98},[36,14467,14468,14470,14472,14474,14477,14479],{"class":38,"line":131},[36,14469,5815],{"class":163},[36,14471,11824],{"class":55},[36,14473,621],{"class":98},[36,14475,14476],{"class":163},"double",[36,14478,1877],{"class":5667},[36,14480,627],{"class":98},[36,14482,14483],{"class":38,"line":137},[36,14484,2025],{"class":98},[36,14486,14487,14489,14491,14494,14496],{"class":38,"line":147},[36,14488,6980],{"class":98},[36,14490,1655],{"class":163},[36,14492,14493],{"class":59}," \"func (double a)的调用！\"",[36,14495,1923],{"class":163},[36,14497,9281],{"class":98},[36,14499,14500],{"class":38,"line":153},[36,14501,2044],{"class":98},[36,14503,14504,14506,14508,14510,14512,14514,14517,14519,14521],{"class":38,"line":191},[36,14505,5815],{"class":163},[36,14507,11824],{"class":55},[36,14509,621],{"class":98},[36,14511,624],{"class":163},[36,14513,1877],{"class":5667},[36,14515,14516],{"class":98}," ,",[36,14518,14476],{"class":163},[36,14520,3284],{"class":5667},[36,14522,627],{"class":98},[36,14524,14525],{"class":38,"line":197},[36,14526,2025],{"class":98},[36,14528,14529,14531,14533,14536,14538],{"class":38,"line":217},[36,14530,6980],{"class":98},[36,14532,1655],{"class":163},[36,14534,14535],{"class":59}," \"func (int a ,double b) 的调用！\"",[36,14537,1923],{"class":163},[36,14539,9281],{"class":98},[36,14541,14542],{"class":38,"line":223},[36,14543,2044],{"class":98},[36,14545,14546,14548,14550,14552,14554,14556,14558,14560,14562],{"class":38,"line":243},[36,14547,5815],{"class":163},[36,14549,11824],{"class":55},[36,14551,621],{"class":98},[36,14553,14476],{"class":163},[36,14555,1877],{"class":5667},[36,14557,14516],{"class":98},[36,14559,624],{"class":163},[36,14561,3284],{"class":5667},[36,14563,627],{"class":98},[36,14565,14566],{"class":38,"line":250},[36,14567,2025],{"class":98},[36,14569,14570,14572,14574,14577,14579],{"class":38,"line":256},[36,14571,6980],{"class":98},[36,14573,1655],{"class":163},[36,14575,14576],{"class":59}," \"func (double a ,int b)的调用！\"",[36,14578,1923],{"class":163},[36,14580,9281],{"class":98},[36,14582,14583],{"class":38,"line":273},[36,14584,2044],{"class":98},[36,14586,14587],{"class":38,"line":278},[36,14588,247],{"emptyLinePlaceholder":246},[36,14590,14591],{"class":38,"line":284},[36,14592,14593],{"class":42},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[36,14595,14596],{"class":38,"line":315},[36,14597,14598],{"class":42},"\u002F\u002Fint func(double a, int b)\n",[36,14600,14601],{"class":38,"line":320},[36,14602,14603],{"class":42},"\u002F\u002F{\n",[36,14605,14606],{"class":38,"line":326},[36,14607,14608],{"class":42},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[36,14610,14611],{"class":38,"line":343},[36,14612,14613],{"class":42},"\u002F\u002F}\n",[36,14615,14616],{"class":38,"line":348},[36,14617,247],{"emptyLinePlaceholder":246},[36,14619,14620],{"class":38,"line":354},[36,14621,247],{"emptyLinePlaceholder":246},[36,14623,14624,14626,14628],{"class":38,"line":370},[36,14625,624],{"class":163},[36,14627,2432],{"class":55},[36,14629,11292],{"class":98},[36,14631,14632],{"class":38,"line":375},[36,14633,247],{"emptyLinePlaceholder":246},[36,14635,14636,14638],{"class":38,"line":381},[36,14637,13724],{"class":55},[36,14639,6087],{"class":98},[36,14641,14642,14644,14646,14648],{"class":38,"line":399},[36,14643,13724],{"class":55},[36,14645,621],{"class":98},[36,14647,1060],{"class":109},[36,14649,3170],{"class":98},[36,14651,14652,14654,14656,14658],{"class":38,"line":404},[36,14653,13724],{"class":55},[36,14655,621],{"class":98},[36,14657,668],{"class":109},[36,14659,3170],{"class":98},[36,14661,14662,14664,14666,14668,14670,14672],{"class":38,"line":410},[36,14663,13724],{"class":55},[36,14665,621],{"class":98},[36,14667,1060],{"class":109},[36,14669,992],{"class":98},[36,14671,668],{"class":109},[36,14673,3170],{"class":98},[36,14675,14676,14678,14680,14682,14685,14687],{"class":38,"line":423},[36,14677,13724],{"class":55},[36,14679,621],{"class":98},[36,14681,668],{"class":109},[36,14683,14684],{"class":98}," , ",[36,14686,1060],{"class":109},[36,14688,3170],{"class":98},[36,14690,14691],{"class":38,"line":436},[36,14692,13649],{"class":98},[36,14694,14695,14697,14699,14701],{"class":38,"line":441},[36,14696,2762],{"class":55},[36,14698,621],{"class":98},[36,14700,2767],{"class":59},[36,14702,3170],{"class":98},[36,14704,14705],{"class":38,"line":447},[36,14706,247],{"emptyLinePlaceholder":246},[36,14708,14709,14711,14713],{"class":38,"line":465},[36,14710,4541],{"class":163},[36,14712,4544],{"class":109},[36,14714,1772],{"class":98},[36,14716,14717],{"class":38,"line":470},[36,14718,2044],{"class":98},[14,14720,14721],{},"重点：函数返回值不可以作为函数重载条件！",[588,14723,14725],{"id":14724},"_732注意事项","7.3.2注意事项",[1618,14727,14728,14731],{},[574,14729,14730],{},"引用作为重载条件!!!",[574,14732,14733],{},"函数重载碰到函数默认参数",[26,14735,14737],{"className":609,"code":14736,"language":611,"meta":31,"style":31},"\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",[33,14738,14739,14744,14749,14753,14769,14773,14786,14790,14794,14812,14816,14829,14833,14837,14841,14846,14850,14874,14878,14891,14895,14899,14913,14917,14930,14934,14938,14946,14950,14962,14972,14985,14989,14993,15001,15005,15015,15019,15027],{"__ignoreMap":31},[36,14740,14741],{"class":38,"line":39},[36,14742,14743],{"class":42},"\u002F\u002F函数重载注意事项\n",[36,14745,14746],{"class":38,"line":46},[36,14747,14748],{"class":42},"\u002F\u002F1、引用作为重载条件\n",[36,14750,14751],{"class":38,"line":52},[36,14752,247],{"emptyLinePlaceholder":246},[36,14754,14755,14757,14759,14761,14763,14765,14767],{"class":38,"line":66},[36,14756,5815],{"class":163},[36,14758,11824],{"class":55},[36,14760,621],{"class":98},[36,14762,624],{"class":163},[36,14764,11023],{"class":163},[36,14766,20],{"class":5667},[36,14768,627],{"class":98},[36,14770,14771],{"class":38,"line":72},[36,14772,2025],{"class":98},[36,14774,14775,14777,14779,14782,14784],{"class":38,"line":82},[36,14776,6980],{"class":98},[36,14778,1655],{"class":163},[36,14780,14781],{"class":59}," \"func (int &a) 调用 \"",[36,14783,1923],{"class":163},[36,14785,9281],{"class":98},[36,14787,14788],{"class":38,"line":88},[36,14789,2044],{"class":98},[36,14791,14792],{"class":38,"line":113},[36,14793,247],{"emptyLinePlaceholder":246},[36,14795,14796,14798,14800,14802,14804,14806,14808,14810],{"class":38,"line":119},[36,14797,5815],{"class":163},[36,14799,11824],{"class":55},[36,14801,621],{"class":98},[36,14803,7243],{"class":163},[36,14805,2841],{"class":163},[36,14807,11023],{"class":163},[36,14809,20],{"class":5667},[36,14811,627],{"class":98},[36,14813,14814],{"class":38,"line":131},[36,14815,2025],{"class":98},[36,14817,14818,14820,14822,14825,14827],{"class":38,"line":137},[36,14819,6980],{"class":98},[36,14821,1655],{"class":163},[36,14823,14824],{"class":59}," \"func (const int &a) 调用 \"",[36,14826,1923],{"class":163},[36,14828,9281],{"class":98},[36,14830,14831],{"class":38,"line":147},[36,14832,2044],{"class":98},[36,14834,14835],{"class":38,"line":153},[36,14836,247],{"emptyLinePlaceholder":246},[36,14838,14839],{"class":38,"line":191},[36,14840,247],{"emptyLinePlaceholder":246},[36,14842,14843],{"class":38,"line":197},[36,14844,14845],{"class":42},"\u002F\u002F2、函数重载碰到函数默认参数\n",[36,14847,14848],{"class":38,"line":217},[36,14849,247],{"emptyLinePlaceholder":246},[36,14851,14852,14854,14856,14858,14860,14862,14864,14866,14868,14870,14872],{"class":38,"line":223},[36,14853,5815],{"class":163},[36,14855,14057],{"class":55},[36,14857,621],{"class":98},[36,14859,624],{"class":163},[36,14861,1877],{"class":5667},[36,14863,12874],{"class":98},[36,14865,624],{"class":163},[36,14867,3284],{"class":5667},[36,14869,14003],{"class":163},[36,14871,2497],{"class":109},[36,14873,627],{"class":98},[36,14875,14876],{"class":38,"line":243},[36,14877,2025],{"class":98},[36,14879,14880,14882,14884,14887,14889],{"class":38,"line":250},[36,14881,6980],{"class":98},[36,14883,1655],{"class":163},[36,14885,14886],{"class":59}," \"func2(int a, int b = 10) 调用\"",[36,14888,1923],{"class":163},[36,14890,9281],{"class":98},[36,14892,14893],{"class":38,"line":256},[36,14894,2044],{"class":98},[36,14896,14897],{"class":38,"line":273},[36,14898,247],{"emptyLinePlaceholder":246},[36,14900,14901,14903,14905,14907,14909,14911],{"class":38,"line":278},[36,14902,5815],{"class":163},[36,14904,14057],{"class":55},[36,14906,621],{"class":98},[36,14908,624],{"class":163},[36,14910,1877],{"class":5667},[36,14912,627],{"class":98},[36,14914,14915],{"class":38,"line":284},[36,14916,2025],{"class":98},[36,14918,14919,14921,14923,14926,14928],{"class":38,"line":315},[36,14920,6980],{"class":98},[36,14922,1655],{"class":163},[36,14924,14925],{"class":59}," \"func2(int a) 调用\"",[36,14927,1923],{"class":163},[36,14929,9281],{"class":98},[36,14931,14932],{"class":38,"line":320},[36,14933,2044],{"class":98},[36,14935,14936],{"class":38,"line":326},[36,14937,247],{"emptyLinePlaceholder":246},[36,14939,14940,14942,14944],{"class":38,"line":343},[36,14941,624],{"class":163},[36,14943,2432],{"class":55},[36,14945,11292],{"class":98},[36,14947,14948],{"class":38,"line":348},[36,14949,13649],{"class":98},[36,14951,14952,14954,14956,14958,14960],{"class":38,"line":354},[36,14953,2444],{"class":163},[36,14955,11308],{"class":98},[36,14957,176],{"class":163},[36,14959,2497],{"class":109},[36,14961,1772],{"class":98},[36,14963,14964,14966,14969],{"class":38,"line":370},[36,14965,13724],{"class":55},[36,14967,14968],{"class":98},"(a);",[36,14970,14971],{"class":42}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[36,14973,14974,14976,14978,14980,14982],{"class":38,"line":375},[36,14975,13724],{"class":55},[36,14977,621],{"class":98},[36,14979,1060],{"class":109},[36,14981,6417],{"class":98},[36,14983,14984],{"class":42},"\u002F\u002F调用有const   10是个常量\n",[36,14986,14987],{"class":38,"line":381},[36,14988,247],{"emptyLinePlaceholder":246},[36,14990,14991],{"class":38,"line":399},[36,14992,247],{"emptyLinePlaceholder":246},[36,14994,14995,14998],{"class":38,"line":404},[36,14996,14997],{"class":42},"    \u002F\u002Ffunc2(10);",[36,14999,15000],{"class":42}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[36,15002,15003],{"class":38,"line":410},[36,15004,247],{"emptyLinePlaceholder":246},[36,15006,15007,15009,15011,15013],{"class":38,"line":423},[36,15008,2762],{"class":55},[36,15010,621],{"class":98},[36,15012,2767],{"class":59},[36,15014,3170],{"class":98},[36,15016,15017],{"class":38,"line":436},[36,15018,247],{"emptyLinePlaceholder":246},[36,15020,15021,15023,15025],{"class":38,"line":441},[36,15022,4541],{"class":163},[36,15024,4544],{"class":109},[36,15026,1772],{"class":98},[36,15028,15029],{"class":38,"line":447},[36,15030,2044],{"class":98},[537,15032,15033],{},"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":31,"searchDepth":46,"depth":46,"links":15035},[15036,15037,15038],{"id":13968,"depth":46,"text":13969},{"id":14225,"depth":46,"text":14226},{"id":14347,"depth":46,"text":14348,"children":15039},[15040,15041],{"id":14354,"depth":52,"text":14355},{"id":14724,"depth":52,"text":14725},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13960,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":15048,"title":15049,"body":15050,"description":23804,"extension":543,"meta":23805,"navigation":246,"path":23806,"seo":23807,"stem":23808,"__hash__":23809},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":15051,"toc":23785},[15052,15055,15061,15068,15073,15076,15079,15082,15086,15090,15093,15096,15104,15109,15112,15119,15124,15283,15286,15539,15542,15545,15548,15553,15556,15559,15570,15575,15811,15815,15825,15828,15836,15983,15987,15990,15993,15997,16442,16446,16454,16462,17374,17381,17386,18014,18017,18020,18023,18142,18145,18232,18235,18361,18364,18458,18461,18814,18818,18826,18830,18837,18840,18843,18854,18860,18865,18877,18885,18905,18913,18930,19116,19119,19123,19126,19129,19132,19135,19138,19141,19144,19604,19610,19614,19617,19628,20215,20218,20707,20711,20714,20717,20720,20723,20726,20734,21130,21134,21137,21140,21587,21590,21593,21598,21601,21606,21609,21613,21616,21618,21624,21627,21933,21943,21984,21988,21991,21993,22026,22029,22336,22338,22353,22356,22379,22388,22394,22397,22401,22404,22407,22412,22423,22428,22436,22441,22571,22574,22577,22752,22757,22969,22973,22976,23090,23095,23334,23338,23342,23345,23348,23353,23458,23461,23464,23467,23471,23582,23585,23588,23593,23645,23648,23651,23656,23702,23705,23710,23778,23780,23783],[10,15053,15049],{"id":15054},"_8类和对象",[14,15056,15057,15058],{},"C++面向对象的三大特性为",[765,15059,15060],{},"封装、继承、多态",[14,15062,15063,15064,15067],{},"C++认为",[765,15065,15066],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,15069,15070],{},[765,15071,15072],{},"例如：",[14,15074,15075],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,15077,15078],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,15080,15081],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[559,15083,15085],{"id":15084},"_81封装","8.1封装",[588,15087,15089],{"id":15088},"_811封装的意义","8.1.1封装的意义",[14,15091,15092],{},"封装是C++面向对象三大特性之一",[14,15094,15095],{},"封装的意义：",[1618,15097,15098,15101],{},[574,15099,15100],{},"将属性和行为作为一个整体，表现生活中的事物",[574,15102,15103],{},"将属性和行为加以权限控制",[14,15105,15106],{},[765,15107,15108],{},"封装意义一：",[14,15110,15111],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,15113,15114,14234,15116],{},[765,15115,5632],{},[33,15117,15118],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[571,15120,15121],{},[574,15122,15123],{},"**示例1：**设计一个圆类，求圆的周长",[26,15125,15127],{"className":609,"code":15126,"language":611,"meta":31,"style":31},"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",[33,15128,15129,15137,15141,15146,15151,15156,15161,15168,15173,15183,15187,15205,15209,15213,15221,15225,15230,15235,15240,15245,15256,15279],{"__ignoreMap":31},[36,15130,15131,15134],{"class":38,"line":39},[36,15132,15133],{"class":163},"class",[36,15135,15136],{"class":55}," Circle\n",[36,15138,15139],{"class":38,"line":46},[36,15140,2025],{"class":98},[36,15142,15143],{"class":38,"line":52},[36,15144,15145],{"class":42},"    \u002F\u002F访问权限\n",[36,15147,15148],{"class":38,"line":66},[36,15149,15150],{"class":42},"    \u002F\u002F公共权限\n",[36,15152,15153],{"class":38,"line":72},[36,15154,15155],{"class":163},"public:\n",[36,15157,15158],{"class":38,"line":82},[36,15159,15160],{"class":42},"    \u002F\u002F属性\n",[36,15162,15163,15165],{"class":38,"line":88},[36,15164,2444],{"class":163},[36,15166,15167],{"class":98}," m_r;\n",[36,15169,15170],{"class":38,"line":113},[36,15171,15172],{"class":42},"    \u002F\u002F行为\n",[36,15174,15175,15178,15181],{"class":38,"line":119},[36,15176,15177],{"class":163},"    double",[36,15179,15180],{"class":55}," calculateZC",[36,15182,2435],{"class":98},[36,15184,15185],{"class":38,"line":131},[36,15186,2489],{"class":98},[36,15188,15189,15192,15195,15197,15200,15202],{"class":38,"line":137},[36,15190,15191],{"class":163},"        return",[36,15193,15194],{"class":109}," 2",[36,15196,1069],{"class":163},[36,15198,15199],{"class":98},"PI",[36,15201,1069],{"class":163},[36,15203,15204],{"class":98},"m_r;\n",[36,15206,15207],{"class":38,"line":147},[36,15208,2646],{"class":98},[36,15210,15211],{"class":38,"line":153},[36,15212,4446],{"class":98},[36,15214,15215,15217,15219],{"class":38,"line":191},[36,15216,624],{"class":163},[36,15218,2432],{"class":55},[36,15220,2435],{"class":98},[36,15222,15223],{"class":38,"line":197},[36,15224,2025],{"class":98},[36,15226,15227],{"class":38,"line":217},[36,15228,15229],{"class":42},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[36,15231,15232],{"class":38,"line":223},[36,15233,15234],{"class":42},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[36,15236,15237],{"class":38,"line":243},[36,15238,15239],{"class":98},"    Circle c1;\n",[36,15241,15242],{"class":38,"line":250},[36,15243,15244],{"class":42},"    \u002F\u002F给圆对象 的属性进行赋值\n",[36,15246,15247,15250,15252,15254],{"class":38,"line":256},[36,15248,15249],{"class":98},"    c1.m_r",[36,15251,176],{"class":163},[36,15253,1060],{"class":109},[36,15255,1772],{"class":98},[36,15257,15258,15260,15262,15265,15267,15270,15273,15275,15277],{"class":38,"line":273},[36,15259,2030],{"class":98},[36,15261,1655],{"class":163},[36,15263,15264],{"class":59},"\"圆的周长\"",[36,15266,1655],{"class":163},[36,15268,15269],{"class":98},"c1.",[36,15271,15272],{"class":55},"calculateZC",[36,15274,2885],{"class":98},[36,15276,1655],{"class":163},[36,15278,1677],{"class":98},[36,15280,15281],{"class":38,"line":278},[36,15282,2044],{"class":98},[14,15284,15285],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[26,15287,15289],{"className":609,"code":15288,"language":611,"meta":31,"style":31},"#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",[33,15290,15291,15297,15307,15313,15319,15323,15327,15332,15339,15344,15362,15366,15376,15380,15385,15401,15405,15415,15419,15424,15432,15436,15468,15472,15476,15484,15488,15493,15498,15512,15526,15535],{"__ignoreMap":31},[36,15292,15293,15295],{"class":38,"line":39},[36,15294,2409],{"class":163},[36,15296,2412],{"class":59},[36,15298,15299,15301,15303,15305],{"class":38,"line":46},[36,15300,2417],{"class":163},[36,15302,2420],{"class":163},[36,15304,2423],{"class":55},[36,15306,1772],{"class":98},[36,15308,15309,15311],{"class":38,"line":52},[36,15310,2409],{"class":163},[36,15312,8200],{"class":59},[36,15314,15315,15317],{"class":38,"line":66},[36,15316,15133],{"class":163},[36,15318,8213],{"class":55},[36,15320,15321],{"class":38,"line":72},[36,15322,2025],{"class":98},[36,15324,15325],{"class":38,"line":82},[36,15326,15155],{"class":163},[36,15328,15329],{"class":38,"line":88},[36,15330,15331],{"class":98},"    string m_name;\n",[36,15333,15334,15336],{"class":38,"line":113},[36,15335,2444],{"class":163},[36,15337,15338],{"class":98}," m_id;\n",[36,15340,15341],{"class":38,"line":119},[36,15342,15343],{"class":42},"    \u002F\u002F赋值姓名\n",[36,15345,15346,15349,15352,15354,15357,15360],{"class":38,"line":131},[36,15347,15348],{"class":163},"    void",[36,15350,15351],{"class":55}," setName",[36,15353,621],{"class":98},[36,15355,15356],{"class":55},"string",[36,15358,15359],{"class":5667}," name",[36,15361,627],{"class":98},[36,15363,15364],{"class":38,"line":137},[36,15365,2489],{"class":98},[36,15367,15368,15371,15373],{"class":38,"line":147},[36,15369,15370],{"class":98},"        m_name",[36,15372,176],{"class":163},[36,15374,15375],{"class":98},"name;\n",[36,15377,15378],{"class":38,"line":153},[36,15379,2646],{"class":98},[36,15381,15382],{"class":38,"line":191},[36,15383,15384],{"class":42},"    \u002F\u002F赋值学号\n",[36,15386,15387,15389,15392,15394,15396,15399],{"class":38,"line":197},[36,15388,15348],{"class":163},[36,15390,15391],{"class":55}," setId",[36,15393,621],{"class":98},[36,15395,624],{"class":163},[36,15397,15398],{"class":5667}," id",[36,15400,627],{"class":98},[36,15402,15403],{"class":38,"line":217},[36,15404,2489],{"class":98},[36,15406,15407,15410,15412],{"class":38,"line":223},[36,15408,15409],{"class":98},"        m_id",[36,15411,176],{"class":163},[36,15413,15414],{"class":98},"id;\n",[36,15416,15417],{"class":38,"line":243},[36,15418,2646],{"class":98},[36,15420,15421],{"class":38,"line":250},[36,15422,15423],{"class":42},"    \u002F\u002F打印学生信息\n",[36,15425,15426,15428,15430],{"class":38,"line":256},[36,15427,15348],{"class":163},[36,15429,10056],{"class":55},[36,15431,2435],{"class":98},[36,15433,15434],{"class":38,"line":273},[36,15435,2489],{"class":98},[36,15437,15438,15440,15442,15445,15447,15450,15452,15454,15456,15459,15461,15464,15466],{"class":38,"line":278},[36,15439,3902],{"class":98},[36,15441,1655],{"class":163},[36,15443,15444],{"class":59},"\"姓名：\"",[36,15446,1655],{"class":163},[36,15448,15449],{"class":98},"m_name",[36,15451,1655],{"class":163},[36,15453,4810],{"class":59},[36,15455,1655],{"class":163},[36,15457,15458],{"class":59},"\"学号：\"",[36,15460,1655],{"class":163},[36,15462,15463],{"class":98},"m_id",[36,15465,1655],{"class":163},[36,15467,1677],{"class":98},[36,15469,15470],{"class":38,"line":284},[36,15471,2646],{"class":98},[36,15473,15474],{"class":38,"line":315},[36,15475,4446],{"class":98},[36,15477,15478,15480,15482],{"class":38,"line":320},[36,15479,624],{"class":163},[36,15481,2432],{"class":55},[36,15483,2435],{"class":98},[36,15485,15486],{"class":38,"line":326},[36,15487,2025],{"class":98},[36,15489,15490],{"class":38,"line":343},[36,15491,15492],{"class":42},"    \u002F\u002F实例化\n",[36,15494,15495],{"class":38,"line":348},[36,15496,15497],{"class":98},"    Student s1;\n",[36,15499,15500,15503,15506,15508,15510],{"class":38,"line":354},[36,15501,15502],{"class":98},"    s1.",[36,15504,15505],{"class":55},"setName",[36,15507,621],{"class":98},[36,15509,8367],{"class":59},[36,15511,3170],{"class":98},[36,15513,15514,15516,15519,15521,15524],{"class":38,"line":370},[36,15515,15502],{"class":98},[36,15517,15518],{"class":55},"setId",[36,15520,621],{"class":98},[36,15522,15523],{"class":109},"123456",[36,15525,3170],{"class":98},[36,15527,15528,15530,15533],{"class":38,"line":375},[36,15529,15502],{"class":98},[36,15531,15532],{"class":55},"printInfo",[36,15534,6087],{"class":98},[36,15536,15537],{"class":38,"line":381},[36,15538,2044],{"class":98},[14,15540,15541],{},"类中的属性和行为统称为成员",[14,15543,15544],{},"属性：成员属性(成员变量)",[14,15546,15547],{},"方法：成员函数(成员方法)",[14,15549,15550],{},[765,15551,15552],{},"封装意义二：",[14,15554,15555],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,15557,15558],{},"访问权限有三种：",[571,15560,15561,15564,15567],{},[574,15562,15563],{},"public        公共权限",[574,15565,15566],{},"protected 保护权限",[574,15568,15569],{},"private      私有权限",[14,15571,15572],{},[765,15573,15574],{},"示例：",[26,15576,15578],{"className":10380,"code":15577,"language":10382,"meta":31,"style":31},"\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",[33,15579,15580,15585,15590,15595,15600,15604,15611,15615,15620,15624,15629,15633,15638,15643,15648,15652,15657,15662,15669,15673,15677,15685,15689,15700,15712,15724,15728,15732,15736,15744,15748,15753,15765,15773,15781,15785,15795,15799,15807],{"__ignoreMap":31},[36,15581,15582],{"class":38,"line":39},[36,15583,15584],{"class":42},"\u002F\u002F三种权限\n",[36,15586,15587],{"class":38,"line":46},[36,15588,15589],{"class":42},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[36,15591,15592],{"class":38,"line":52},[36,15593,15594],{"class":42},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[36,15596,15597],{"class":38,"line":66},[36,15598,15599],{"class":42},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[36,15601,15602],{"class":38,"line":72},[36,15603,247],{"emptyLinePlaceholder":246},[36,15605,15606,15608],{"class":38,"line":82},[36,15607,15133],{"class":163},[36,15609,15610],{"class":55}," Person\n",[36,15612,15613],{"class":38,"line":88},[36,15614,2025],{"class":98},[36,15616,15617],{"class":38,"line":113},[36,15618,15619],{"class":42},"    \u002F\u002F姓名  公共权限\n",[36,15621,15622],{"class":38,"line":119},[36,15623,15155],{"class":163},[36,15625,15626],{"class":38,"line":131},[36,15627,15628],{"class":98},"    string m_Name;\n",[36,15630,15631],{"class":38,"line":137},[36,15632,247],{"emptyLinePlaceholder":246},[36,15634,15635],{"class":38,"line":147},[36,15636,15637],{"class":42},"    \u002F\u002F汽车  保护权限\n",[36,15639,15640],{"class":38,"line":153},[36,15641,15642],{"class":163},"protected:\n",[36,15644,15645],{"class":38,"line":191},[36,15646,15647],{"class":98},"    string m_Car;\n",[36,15649,15650],{"class":38,"line":197},[36,15651,247],{"emptyLinePlaceholder":246},[36,15653,15654],{"class":38,"line":217},[36,15655,15656],{"class":42},"    \u002F\u002F银行卡密码  私有权限\n",[36,15658,15659],{"class":38,"line":223},[36,15660,15661],{"class":163},"private:\n",[36,15663,15664,15666],{"class":38,"line":243},[36,15665,2444],{"class":163},[36,15667,15668],{"class":98}," m_Password;\n",[36,15670,15671],{"class":38,"line":250},[36,15672,247],{"emptyLinePlaceholder":246},[36,15674,15675],{"class":38,"line":256},[36,15676,15155],{"class":163},[36,15678,15679,15681,15683],{"class":38,"line":273},[36,15680,15348],{"class":163},[36,15682,11824],{"class":55},[36,15684,2435],{"class":98},[36,15686,15687],{"class":38,"line":278},[36,15688,2489],{"class":98},[36,15690,15691,15694,15696,15698],{"class":38,"line":284},[36,15692,15693],{"class":98},"        m_Name ",[36,15695,176],{"class":163},[36,15697,9379],{"class":59},[36,15699,1772],{"class":98},[36,15701,15702,15705,15707,15710],{"class":38,"line":315},[36,15703,15704],{"class":98},"        m_Car ",[36,15706,176],{"class":163},[36,15708,15709],{"class":59}," \"拖拉机\"",[36,15711,1772],{"class":98},[36,15713,15714,15717,15719,15722],{"class":38,"line":320},[36,15715,15716],{"class":98},"        m_Password ",[36,15718,176],{"class":163},[36,15720,15721],{"class":109}," 123456",[36,15723,1772],{"class":98},[36,15725,15726],{"class":38,"line":326},[36,15727,2646],{"class":98},[36,15729,15730],{"class":38,"line":343},[36,15731,4446],{"class":98},[36,15733,15734],{"class":38,"line":348},[36,15735,247],{"emptyLinePlaceholder":246},[36,15737,15738,15740,15742],{"class":38,"line":354},[36,15739,624],{"class":163},[36,15741,2432],{"class":55},[36,15743,11292],{"class":98},[36,15745,15746],{"class":38,"line":370},[36,15747,247],{"emptyLinePlaceholder":246},[36,15749,15750],{"class":38,"line":375},[36,15751,15752],{"class":98},"    Person p;\n",[36,15754,15755,15758,15760,15763],{"class":38,"line":381},[36,15756,15757],{"class":98},"    p.m_Name ",[36,15759,176],{"class":163},[36,15761,15762],{"class":59}," \"李四\"",[36,15764,1772],{"class":98},[36,15766,15767,15770],{"class":38,"line":399},[36,15768,15769],{"class":42},"    \u002F\u002Fp.m_Car = \"奔驰\";",[36,15771,15772],{"class":42},"  \u002F\u002F保护权限类外访问不到\n",[36,15774,15775,15778],{"class":38,"line":404},[36,15776,15777],{"class":42},"    \u002F\u002Fp.m_Password = 123;",[36,15779,15780],{"class":42}," \u002F\u002F私有权限类外访问不到\n",[36,15782,15783],{"class":38,"line":410},[36,15784,247],{"emptyLinePlaceholder":246},[36,15786,15787,15789,15791,15793],{"class":38,"line":423},[36,15788,2762],{"class":55},[36,15790,621],{"class":98},[36,15792,2767],{"class":59},[36,15794,3170],{"class":98},[36,15796,15797],{"class":38,"line":436},[36,15798,247],{"emptyLinePlaceholder":246},[36,15800,15801,15803,15805],{"class":38,"line":441},[36,15802,4541],{"class":163},[36,15804,4544],{"class":109},[36,15806,1772],{"class":98},[36,15808,15809],{"class":38,"line":447},[36,15810,2044],{"class":98},[588,15812,15814],{"id":15813},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,15816,15817,15818,15821,15822],{},"在C++中 struct和class唯一的",[765,15819,15820],{},"区别","就在于 ",[765,15823,15824],{},"默认的访问权限不同",[14,15826,15827],{},"区别：",[1618,15829,15830,15833],{},[574,15831,15832],{},"struct 默认权限为公共",[574,15834,15835],{},"class   默认权限为私有",[26,15837,15839],{"className":10380,"code":15838,"language":10382,"meta":31,"style":31},"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",[33,15840,15841,15848,15852,15862,15866,15870,15877,15881,15891,15895,15899,15907,15911,15916,15930,15934,15939,15953,15957,15967,15971,15979],{"__ignoreMap":31},[36,15842,15843,15845],{"class":38,"line":39},[36,15844,15133],{"class":163},[36,15846,15847],{"class":55}," C1\n",[36,15849,15850],{"class":38,"line":46},[36,15851,2025],{"class":98},[36,15853,15854,15856,15859],{"class":38,"line":52},[36,15855,2444],{"class":163},[36,15857,15858],{"class":98},"  m_A;",[36,15860,15861],{"class":42}," \u002F\u002F默认是私有权限\n",[36,15863,15864],{"class":38,"line":66},[36,15865,4446],{"class":98},[36,15867,15868],{"class":38,"line":72},[36,15869,247],{"emptyLinePlaceholder":246},[36,15871,15872,15874],{"class":38,"line":82},[36,15873,8210],{"class":163},[36,15875,15876],{"class":55}," C2\n",[36,15878,15879],{"class":38,"line":88},[36,15880,2025],{"class":98},[36,15882,15883,15885,15888],{"class":38,"line":113},[36,15884,2444],{"class":163},[36,15886,15887],{"class":98}," m_A;",[36,15889,15890],{"class":42},"  \u002F\u002F默认是公共权限\n",[36,15892,15893],{"class":38,"line":119},[36,15894,4446],{"class":98},[36,15896,15897],{"class":38,"line":131},[36,15898,247],{"emptyLinePlaceholder":246},[36,15900,15901,15903,15905],{"class":38,"line":137},[36,15902,624],{"class":163},[36,15904,2432],{"class":55},[36,15906,11292],{"class":98},[36,15908,15909],{"class":38,"line":147},[36,15910,247],{"emptyLinePlaceholder":246},[36,15912,15913],{"class":38,"line":153},[36,15914,15915],{"class":98},"    C1 c1;\n",[36,15917,15918,15921,15923,15925,15927],{"class":38,"line":191},[36,15919,15920],{"class":98},"    c1.m_A ",[36,15922,176],{"class":163},[36,15924,2497],{"class":109},[36,15926,674],{"class":98},[36,15928,15929],{"class":42}," \u002F\u002F错误，访问权限是私有\n",[36,15931,15932],{"class":38,"line":197},[36,15933,247],{"emptyLinePlaceholder":246},[36,15935,15936],{"class":38,"line":217},[36,15937,15938],{"class":98},"    C2 c2;\n",[36,15940,15941,15944,15946,15948,15950],{"class":38,"line":223},[36,15942,15943],{"class":98},"    c2.m_A ",[36,15945,176],{"class":163},[36,15947,2497],{"class":109},[36,15949,674],{"class":98},[36,15951,15952],{"class":42}," \u002F\u002F正确，访问权限是公共\n",[36,15954,15955],{"class":38,"line":243},[36,15956,247],{"emptyLinePlaceholder":246},[36,15958,15959,15961,15963,15965],{"class":38,"line":250},[36,15960,2762],{"class":55},[36,15962,621],{"class":98},[36,15964,2767],{"class":59},[36,15966,3170],{"class":98},[36,15968,15969],{"class":38,"line":256},[36,15970,247],{"emptyLinePlaceholder":246},[36,15972,15973,15975,15977],{"class":38,"line":273},[36,15974,4541],{"class":163},[36,15976,4544],{"class":109},[36,15978,1772],{"class":98},[36,15980,15981],{"class":38,"line":278},[36,15982,2044],{"class":98},[588,15984,15986],{"id":15985},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,15988,15989],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,15991,15992],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,15994,15995],{},[765,15996,15574],{},[26,15998,16000],{"className":10380,"code":15999,"language":10382,"meta":31,"style":31},"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",[33,16001,16002,16012,16016,16020,16025,16039,16048,16052,16062,16066,16073,16077,16081,16085,16090,16099,16106,16110,16115,16131,16154,16167,16174,16178,16187,16191,16195,16200,16216,16226,16230,16234,16238,16246,16250,16260,16264,16272,16276,16280,16288,16292,16296,16301,16314,16337,16341,16346,16359,16381,16385,16390,16404,16412,16416,16426,16430,16438],{"__ignoreMap":31},[36,16003,16004,16006,16009],{"class":38,"line":39},[36,16005,15133],{"class":163},[36,16007,16008],{"class":55}," Person",[36,16010,16011],{"class":98}," {\n",[36,16013,16014],{"class":38,"line":46},[36,16015,15155],{"class":163},[36,16017,16018],{"class":38,"line":52},[36,16019,247],{"emptyLinePlaceholder":246},[36,16021,16022],{"class":38,"line":66},[36,16023,16024],{"class":42},"    \u002F\u002F姓名设置可读可写\n",[36,16026,16027,16029,16031,16033,16035,16037],{"class":38,"line":72},[36,16028,15348],{"class":163},[36,16030,15351],{"class":55},[36,16032,621],{"class":98},[36,16034,15356],{"class":55},[36,16036,15359],{"class":5667},[36,16038,12881],{"class":98},[36,16040,16041,16043,16045],{"class":38,"line":82},[36,16042,15693],{"class":98},[36,16044,176],{"class":163},[36,16046,16047],{"class":98}," name;\n",[36,16049,16050],{"class":38,"line":88},[36,16051,2646],{"class":98},[36,16053,16054,16057,16060],{"class":38,"line":113},[36,16055,16056],{"class":55},"    string",[36,16058,16059],{"class":55}," getName",[36,16061,2435],{"class":98},[36,16063,16064],{"class":38,"line":119},[36,16065,2489],{"class":98},[36,16067,16068,16070],{"class":38,"line":131},[36,16069,15191],{"class":163},[36,16071,16072],{"class":98}," m_Name;\n",[36,16074,16075],{"class":38,"line":137},[36,16076,2646],{"class":98},[36,16078,16079],{"class":38,"line":147},[36,16080,247],{"emptyLinePlaceholder":246},[36,16082,16083],{"class":38,"line":153},[36,16084,247],{"emptyLinePlaceholder":246},[36,16086,16087],{"class":38,"line":191},[36,16088,16089],{"class":42},"    \u002F\u002F获取年龄 \n",[36,16091,16092,16094,16097],{"class":38,"line":197},[36,16093,2444],{"class":163},[36,16095,16096],{"class":55}," getAge",[36,16098,11292],{"class":98},[36,16100,16101,16103],{"class":38,"line":217},[36,16102,15191],{"class":163},[36,16104,16105],{"class":98}," m_Age;\n",[36,16107,16108],{"class":38,"line":223},[36,16109,2646],{"class":98},[36,16111,16112],{"class":38,"line":243},[36,16113,16114],{"class":42},"    \u002F\u002F设置年龄\n",[36,16116,16117,16119,16122,16124,16126,16129],{"class":38,"line":250},[36,16118,15348],{"class":163},[36,16120,16121],{"class":55}," setAge",[36,16123,621],{"class":98},[36,16125,624],{"class":163},[36,16127,16128],{"class":5667}," age",[36,16130,12881],{"class":98},[36,16132,16133,16135,16138,16140,16142,16144,16147,16149,16152],{"class":38,"line":256},[36,16134,2955],{"class":163},[36,16136,16137],{"class":98}," (age ",[36,16139,179],{"class":163},[36,16141,4544],{"class":109},[36,16143,3706],{"class":163},[36,16145,16146],{"class":98}," age ",[36,16148,173],{"class":163},[36,16150,16151],{"class":109}," 150",[36,16153,12881],{"class":98},[36,16155,16156,16158,16160,16163,16165],{"class":38,"line":273},[36,16157,10159],{"class":98},[36,16159,1655],{"class":163},[36,16161,16162],{"class":59}," \"你个老妖精!\"",[36,16164,1923],{"class":163},[36,16166,9281],{"class":98},[36,16168,16169,16172],{"class":38,"line":278},[36,16170,16171],{"class":163},"            return",[36,16173,1772],{"class":98},[36,16175,16176],{"class":38,"line":284},[36,16177,2987],{"class":98},[36,16179,16180,16183,16185],{"class":38,"line":315},[36,16181,16182],{"class":98},"        m_Age ",[36,16184,176],{"class":163},[36,16186,8248],{"class":98},[36,16188,16189],{"class":38,"line":320},[36,16190,2646],{"class":98},[36,16192,16193],{"class":38,"line":326},[36,16194,247],{"emptyLinePlaceholder":246},[36,16196,16197],{"class":38,"line":343},[36,16198,16199],{"class":42},"    \u002F\u002F情人设置为只写\n",[36,16201,16202,16204,16207,16209,16211,16214],{"class":38,"line":348},[36,16203,15348],{"class":163},[36,16205,16206],{"class":55}," setLover",[36,16208,621],{"class":98},[36,16210,15356],{"class":55},[36,16212,16213],{"class":5667}," lover",[36,16215,12881],{"class":98},[36,16217,16218,16221,16223],{"class":38,"line":354},[36,16219,16220],{"class":98},"        m_Lover ",[36,16222,176],{"class":163},[36,16224,16225],{"class":98}," lover;\n",[36,16227,16228],{"class":38,"line":370},[36,16229,2646],{"class":98},[36,16231,16232],{"class":38,"line":375},[36,16233,247],{"emptyLinePlaceholder":246},[36,16235,16236],{"class":38,"line":381},[36,16237,15661],{"class":163},[36,16239,16240,16243],{"class":38,"line":399},[36,16241,16242],{"class":98},"    string m_Name;",[36,16244,16245],{"class":42}," \u002F\u002F可读可写  姓名\n",[36,16247,16248],{"class":38,"line":404},[36,16249,13649],{"class":98},[36,16251,16252,16254,16257],{"class":38,"line":410},[36,16253,2444],{"class":163},[36,16255,16256],{"class":98}," m_Age;",[36,16258,16259],{"class":42}," \u002F\u002F只读  年龄\n",[36,16261,16262],{"class":38,"line":423},[36,16263,247],{"emptyLinePlaceholder":246},[36,16265,16266,16269],{"class":38,"line":436},[36,16267,16268],{"class":98},"    string m_Lover;",[36,16270,16271],{"class":42}," \u002F\u002F只写  情人\n",[36,16273,16274],{"class":38,"line":441},[36,16275,4446],{"class":98},[36,16277,16278],{"class":38,"line":447},[36,16279,247],{"emptyLinePlaceholder":246},[36,16281,16282,16284,16286],{"class":38,"line":465},[36,16283,624],{"class":163},[36,16285,2432],{"class":55},[36,16287,11292],{"class":98},[36,16289,16290],{"class":38,"line":470},[36,16291,247],{"emptyLinePlaceholder":246},[36,16293,16294],{"class":38,"line":476},[36,16295,15752],{"class":98},[36,16297,16298],{"class":38,"line":496},[36,16299,16300],{"class":42},"    \u002F\u002F姓名设置\n",[36,16302,16303,16306,16308,16310,16312],{"class":38,"line":501},[36,16304,16305],{"class":98},"    p.",[36,16307,15505],{"class":55},[36,16309,621],{"class":98},[36,16311,8367],{"class":59},[36,16313,3170],{"class":98},[36,16315,16316,16318,16320,16323,16325,16328,16331,16333,16335],{"class":38,"line":507},[36,16317,6980],{"class":98},[36,16319,1655],{"class":163},[36,16321,16322],{"class":59}," \"姓名： \"",[36,16324,1923],{"class":163},[36,16326,16327],{"class":98}," p.",[36,16329,16330],{"class":55},"getName",[36,16332,13489],{"class":98},[36,16334,1655],{"class":163},[36,16336,9281],{"class":98},[36,16338,16339],{"class":38,"line":517},[36,16340,247],{"emptyLinePlaceholder":246},[36,16342,16343],{"class":38,"line":522},[36,16344,16345],{"class":42},"    \u002F\u002F年龄设置\n",[36,16347,16348,16350,16353,16355,16357],{"class":38,"line":528},[36,16349,16305],{"class":98},[36,16351,16352],{"class":55},"setAge",[36,16354,621],{"class":98},[36,16356,1270],{"class":109},[36,16358,3170],{"class":98},[36,16360,16361,16363,16365,16368,16370,16372,16375,16377,16379],{"class":38,"line":10203},[36,16362,6980],{"class":98},[36,16364,1655],{"class":163},[36,16366,16367],{"class":59}," \"年龄： \"",[36,16369,1923],{"class":163},[36,16371,16327],{"class":98},[36,16373,16374],{"class":55},"getAge",[36,16376,13489],{"class":98},[36,16378,1655],{"class":163},[36,16380,9281],{"class":98},[36,16382,16383],{"class":38,"line":10227},[36,16384,247],{"emptyLinePlaceholder":246},[36,16386,16387],{"class":38,"line":10232},[36,16388,16389],{"class":42},"    \u002F\u002F情人设置\n",[36,16391,16392,16394,16397,16399,16402],{"class":38,"line":10237},[36,16393,16305],{"class":98},[36,16395,16396],{"class":55},"setLover",[36,16398,621],{"class":98},[36,16400,16401],{"class":59},"\"苍井\"",[36,16403,3170],{"class":98},[36,16405,16406,16409],{"class":38,"line":10242},[36,16407,16408],{"class":42},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[36,16410,16411],{"class":42},"  \u002F\u002F只写属性，不可以读取\n",[36,16413,16414],{"class":38,"line":10251},[36,16415,247],{"emptyLinePlaceholder":246},[36,16417,16418,16420,16422,16424],{"class":38,"line":10256},[36,16419,2762],{"class":55},[36,16421,621],{"class":98},[36,16423,2767],{"class":59},[36,16425,3170],{"class":98},[36,16427,16428],{"class":38,"line":10262},[36,16429,247],{"emptyLinePlaceholder":246},[36,16431,16432,16434,16436],{"class":38,"line":10283},[36,16433,4541],{"class":163},[36,16435,4544],{"class":109},[36,16437,1772],{"class":98},[36,16439,16440],{"class":38,"line":10289},[36,16441,2044],{"class":98},[588,16443,16445],{"id":16444},"_814封装案例","8.1.4封装案例",[571,16447,16448],{},[574,16449,16450,16453],{},[765,16451,16452],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1618,16455,16456,16459],{},[574,16457,16458],{},"求出立方体的面积和体积",[574,16460,16461],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[26,16463,16465],{"className":609,"code":16464,"language":611,"meta":31,"style":31},"#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",[33,16466,16467,16473,16483,16490,16494,16498,16503,16533,16537,16547,16557,16567,16571,16580,16584,16620,16624,16633,16637,16653,16657,16662,16671,16675,16682,16686,16695,16699,16706,16710,16719,16723,16730,16734,16739,16756,16760,16806,16810,16819,16823,16827,16831,16840,16844,16848,16853,16857,16863,16869,16875,16879,16883,16888,16910,16914,16968,16972,16980,16984,16989,16994,17007,17014,17030,17041,17047,17070,17076,17099,17113,17133,17139,17150,17173,17195,17200,17206,17220,17233,17238,17252,17257,17263,17268,17282,17287,17292,17306,17318,17323,17336,17341,17346,17351,17364,17369],{"__ignoreMap":31},[36,16468,16469,16471],{"class":38,"line":39},[36,16470,2409],{"class":163},[36,16472,2412],{"class":59},[36,16474,16475,16477,16479,16481],{"class":38,"line":46},[36,16476,2417],{"class":163},[36,16478,2420],{"class":163},[36,16480,2423],{"class":55},[36,16482,1772],{"class":98},[36,16484,16485,16487],{"class":38,"line":52},[36,16486,15133],{"class":163},[36,16488,16489],{"class":55}," Cube\n",[36,16491,16492],{"class":38,"line":66},[36,16493,2025],{"class":98},[36,16495,16496],{"class":38,"line":72},[36,16497,15155],{"class":163},[36,16499,16500],{"class":38,"line":82},[36,16501,16502],{"class":42},"    \u002F\u002F输入长宽高\n",[36,16504,16505,16507,16510,16512,16514,16517,16519,16521,16524,16526,16528,16531],{"class":38,"line":88},[36,16506,15348],{"class":163},[36,16508,16509],{"class":55}," setLwh",[36,16511,621],{"class":98},[36,16513,624],{"class":163},[36,16515,16516],{"class":5667}," l",[36,16518,992],{"class":98},[36,16520,624],{"class":163},[36,16522,16523],{"class":5667}," w",[36,16525,992],{"class":98},[36,16527,624],{"class":163},[36,16529,16530],{"class":5667}," h",[36,16532,627],{"class":98},[36,16534,16535],{"class":38,"line":113},[36,16536,2489],{"class":98},[36,16538,16539,16542,16544],{"class":38,"line":119},[36,16540,16541],{"class":98},"        m_L",[36,16543,176],{"class":163},[36,16545,16546],{"class":98},"l;\n",[36,16548,16549,16552,16554],{"class":38,"line":131},[36,16550,16551],{"class":98},"        m_W",[36,16553,176],{"class":163},[36,16555,16556],{"class":98},"w;\n",[36,16558,16559,16562,16564],{"class":38,"line":137},[36,16560,16561],{"class":98},"        m_H",[36,16563,176],{"class":163},[36,16565,16566],{"class":98},"h;\n",[36,16568,16569],{"class":38,"line":147},[36,16570,2646],{"class":98},[36,16572,16573,16575,16578],{"class":38,"line":153},[36,16574,2444],{"class":163},[36,16576,16577],{"class":55}," mianji",[36,16579,2435],{"class":98},[36,16581,16582],{"class":38,"line":191},[36,16583,2489],{"class":98},[36,16585,16586,16588,16590,16592,16595,16597,16600,16602,16605,16607,16610,16612,16615,16617],{"class":38,"line":197},[36,16587,15191],{"class":163},[36,16589,15194],{"class":109},[36,16591,1069],{"class":163},[36,16593,16594],{"class":98},"(m_L",[36,16596,1069],{"class":163},[36,16598,16599],{"class":98},"m_W ",[36,16601,1095],{"class":163},[36,16603,16604],{"class":98}," m_L",[36,16606,1069],{"class":163},[36,16608,16609],{"class":98},"m_H ",[36,16611,1095],{"class":163},[36,16613,16614],{"class":98}," m_W",[36,16616,1069],{"class":163},[36,16618,16619],{"class":98},"m_H);\n",[36,16621,16622],{"class":38,"line":217},[36,16623,2646],{"class":98},[36,16625,16626,16628,16631],{"class":38,"line":223},[36,16627,2444],{"class":163},[36,16629,16630],{"class":55}," tiji",[36,16632,2435],{"class":98},[36,16634,16635],{"class":38,"line":243},[36,16636,2489],{"class":98},[36,16638,16639,16641,16643,16645,16648,16650],{"class":38,"line":250},[36,16640,15191],{"class":163},[36,16642,16604],{"class":98},[36,16644,1069],{"class":163},[36,16646,16647],{"class":98},"m_W",[36,16649,1069],{"class":163},[36,16651,16652],{"class":98},"m_H;\n",[36,16654,16655],{"class":38,"line":256},[36,16656,2646],{"class":98},[36,16658,16659],{"class":38,"line":273},[36,16660,16661],{"class":42},"    \u002F\u002F获取长宽高\n",[36,16663,16664,16666,16669],{"class":38,"line":278},[36,16665,2444],{"class":163},[36,16667,16668],{"class":55}," getLength",[36,16670,2435],{"class":98},[36,16672,16673],{"class":38,"line":284},[36,16674,2489],{"class":98},[36,16676,16677,16679],{"class":38,"line":315},[36,16678,15191],{"class":163},[36,16680,16681],{"class":98}," m_L;\n",[36,16683,16684],{"class":38,"line":320},[36,16685,2646],{"class":98},[36,16687,16688,16690,16693],{"class":38,"line":326},[36,16689,2444],{"class":163},[36,16691,16692],{"class":55}," getWidth",[36,16694,2435],{"class":98},[36,16696,16697],{"class":38,"line":343},[36,16698,2489],{"class":98},[36,16700,16701,16703],{"class":38,"line":348},[36,16702,15191],{"class":163},[36,16704,16705],{"class":98}," m_W;\n",[36,16707,16708],{"class":38,"line":354},[36,16709,2646],{"class":98},[36,16711,16712,16714,16717],{"class":38,"line":370},[36,16713,2444],{"class":163},[36,16715,16716],{"class":55}," getHeight",[36,16718,2435],{"class":98},[36,16720,16721],{"class":38,"line":375},[36,16722,2489],{"class":98},[36,16724,16725,16727],{"class":38,"line":381},[36,16726,15191],{"class":163},[36,16728,16729],{"class":98}," m_H;\n",[36,16731,16732],{"class":38,"line":399},[36,16733,2646],{"class":98},[36,16735,16736],{"class":38,"line":404},[36,16737,16738],{"class":42},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[36,16740,16741,16744,16747,16749,16752,16754],{"class":38,"line":410},[36,16742,16743],{"class":163},"    bool",[36,16745,16746],{"class":55}," isEqual",[36,16748,621],{"class":98},[36,16750,16751],{"class":55},"Cube",[36,16753,3300],{"class":5667},[36,16755,627],{"class":98},[36,16757,16758],{"class":38,"line":423},[36,16759,2489],{"class":98},[36,16761,16762,16764,16767,16770,16772,16774,16777,16779,16782,16785,16787,16789,16792,16794,16796,16799,16801,16803],{"class":38,"line":436},[36,16763,2955],{"class":163},[36,16765,16766],{"class":98}," (c.",[36,16768,16769],{"class":55},"getLength",[36,16771,13489],{"class":98},[36,16773,3400],{"class":163},[36,16775,16776],{"class":98}," m_L ",[36,16778,2183],{"class":163},[36,16780,16781],{"class":98}," c.",[36,16783,16784],{"class":55},"getWidth",[36,16786,13489],{"class":98},[36,16788,3400],{"class":163},[36,16790,16791],{"class":98}," m_W ",[36,16793,2183],{"class":163},[36,16795,16781],{"class":98},[36,16797,16798],{"class":55},"getHeight",[36,16800,13489],{"class":98},[36,16802,3400],{"class":163},[36,16804,16805],{"class":98}," m_H)\n",[36,16807,16808],{"class":38,"line":441},[36,16809,2968],{"class":98},[36,16811,16812,16814,16817],{"class":38,"line":447},[36,16813,16171],{"class":163},[36,16815,16816],{"class":109}," true",[36,16818,1772],{"class":98},[36,16820,16821],{"class":38,"line":465},[36,16822,2987],{"class":98},[36,16824,16825],{"class":38,"line":470},[36,16826,3028],{"class":163},[36,16828,16829],{"class":38,"line":476},[36,16830,2968],{"class":98},[36,16832,16833,16835,16838],{"class":38,"line":496},[36,16834,16171],{"class":163},[36,16836,16837],{"class":109}," false",[36,16839,1772],{"class":98},[36,16841,16842],{"class":38,"line":501},[36,16843,2987],{"class":98},[36,16845,16846],{"class":38,"line":507},[36,16847,2646],{"class":98},[36,16849,16850],{"class":38,"line":517},[36,16851,16852],{"class":42},"    \u002F\u002F私有属性\n",[36,16854,16855],{"class":38,"line":522},[36,16856,15661],{"class":163},[36,16858,16859,16861],{"class":38,"line":528},[36,16860,2444],{"class":163},[36,16862,16681],{"class":98},[36,16864,16865,16867],{"class":38,"line":10203},[36,16866,2444],{"class":163},[36,16868,16705],{"class":98},[36,16870,16871,16873],{"class":38,"line":10227},[36,16872,2444],{"class":163},[36,16874,16729],{"class":98},[36,16876,16877],{"class":38,"line":10232},[36,16878,247],{"emptyLinePlaceholder":246},[36,16880,16881],{"class":38,"line":10237},[36,16882,4446],{"class":98},[36,16884,16885],{"class":38,"line":10242},[36,16886,16887],{"class":42},"\u002F\u002F全局函数判断两个立方体是否相等\n",[36,16889,16890,16892,16894,16896,16898,16901,16903,16905,16908],{"class":38,"line":10251},[36,16891,1833],{"class":163},[36,16893,16746],{"class":55},[36,16895,621],{"class":98},[36,16897,16751],{"class":55},[36,16899,16900],{"class":5667}," c1",[36,16902,992],{"class":98},[36,16904,16751],{"class":55},[36,16906,16907],{"class":5667}," c2",[36,16909,627],{"class":98},[36,16911,16912],{"class":38,"line":10256},[36,16913,2025],{"class":98},[36,16915,16916,16918,16921,16923,16925,16927,16930,16932,16935,16937,16939,16941,16943,16945,16947,16949,16951,16953,16955,16957,16959,16961,16963,16965],{"class":38,"line":10262},[36,16917,4541],{"class":163},[36,16919,16920],{"class":98}," (c1.",[36,16922,16769],{"class":55},[36,16924,13489],{"class":98},[36,16926,3400],{"class":163},[36,16928,16929],{"class":98}," c2.",[36,16931,16769],{"class":55},[36,16933,16934],{"class":98},"()) ",[36,16936,2183],{"class":163},[36,16938,16920],{"class":98},[36,16940,16784],{"class":55},[36,16942,13489],{"class":98},[36,16944,3400],{"class":163},[36,16946,16929],{"class":98},[36,16948,16784],{"class":55},[36,16950,16934],{"class":98},[36,16952,2183],{"class":163},[36,16954,16920],{"class":98},[36,16956,16798],{"class":55},[36,16958,13489],{"class":98},[36,16960,3400],{"class":163},[36,16962,16929],{"class":98},[36,16964,16798],{"class":55},[36,16966,16967],{"class":98},"());\n",[36,16969,16970],{"class":38,"line":10283},[36,16971,2044],{"class":98},[36,16973,16974,16976,16978],{"class":38,"line":10289},[36,16975,624],{"class":163},[36,16977,2432],{"class":55},[36,16979,2435],{"class":98},[36,16981,16982],{"class":38,"line":10303},[36,16983,2025],{"class":98},[36,16985,16986],{"class":38,"line":10309},[36,16987,16988],{"class":98},"    Cube c1;\n",[36,16990,16991],{"class":38,"line":10336},[36,16992,16993],{"class":42},"    \u002F\u002F输入立方体的长宽高\n",[36,16995,16996,16998,17000,17003,17005],{"class":38,"line":10345},[36,16997,2030],{"class":98},[36,16999,1655],{"class":163},[36,17001,17002],{"class":59},"\"请输入第一个立方体的长、宽、高：\"",[36,17004,1655],{"class":163},[36,17006,1677],{"class":98},[36,17008,17009,17011],{"class":38,"line":10351},[36,17010,2444],{"class":163},[36,17012,17013],{"class":98}," l,w,h,l1,w1,h1;\n",[36,17015,17016,17018,17020,17022,17024,17026,17028],{"class":38,"line":10359},[36,17017,2471],{"class":98},[36,17019,1908],{"class":163},[36,17021,1132],{"class":98},[36,17023,1908],{"class":163},[36,17025,1408],{"class":98},[36,17027,1908],{"class":163},[36,17029,16566],{"class":98},[36,17031,17032,17035,17038],{"class":38,"line":10364},[36,17033,17034],{"class":98},"    c1.",[36,17036,17037],{"class":55},"setLwh",[36,17039,17040],{"class":98},"(l,w,h);\n",[36,17042,17044],{"class":38,"line":17043},66,[36,17045,17046],{"class":42},"    \u002F\u002F面积\n",[36,17048,17050,17052,17054,17057,17059,17061,17064,17066,17068],{"class":38,"line":17049},67,[36,17051,2030],{"class":98},[36,17053,1655],{"class":163},[36,17055,17056],{"class":59},"\"立方体的表面积为：\"",[36,17058,1655],{"class":163},[36,17060,15269],{"class":98},[36,17062,17063],{"class":55},"mianji",[36,17065,2885],{"class":98},[36,17067,1655],{"class":163},[36,17069,1677],{"class":98},[36,17071,17073],{"class":38,"line":17072},68,[36,17074,17075],{"class":42},"    \u002F\u002F体积\n",[36,17077,17079,17081,17083,17086,17088,17090,17093,17095,17097],{"class":38,"line":17078},69,[36,17080,2030],{"class":98},[36,17082,1655],{"class":163},[36,17084,17085],{"class":59},"\"立方体的体积为：\"",[36,17087,1655],{"class":163},[36,17089,15269],{"class":98},[36,17091,17092],{"class":55},"tiji",[36,17094,2885],{"class":98},[36,17096,1655],{"class":163},[36,17098,1677],{"class":98},[36,17100,17102,17104,17106,17109,17111],{"class":38,"line":17101},70,[36,17103,2030],{"class":98},[36,17105,1655],{"class":163},[36,17107,17108],{"class":59},"\"请输入第二个立方体的长、宽、高：\"",[36,17110,1655],{"class":163},[36,17112,1677],{"class":98},[36,17114,17116,17118,17120,17123,17125,17128,17130],{"class":38,"line":17115},71,[36,17117,2471],{"class":98},[36,17119,1908],{"class":163},[36,17121,17122],{"class":98},"l1",[36,17124,1908],{"class":163},[36,17126,17127],{"class":98},"w1",[36,17129,1908],{"class":163},[36,17131,17132],{"class":98},"h1;\n",[36,17134,17136],{"class":38,"line":17135},72,[36,17137,17138],{"class":98},"    Cube c2;\n",[36,17140,17142,17145,17147],{"class":38,"line":17141},73,[36,17143,17144],{"class":98},"    c2.",[36,17146,17037],{"class":55},[36,17148,17149],{"class":98},"(l1,w1,h1);\n",[36,17151,17153,17155,17157,17160,17162,17165,17167,17169,17171],{"class":38,"line":17152},74,[36,17154,2030],{"class":98},[36,17156,1655],{"class":163},[36,17158,17159],{"class":59},"\"第二个立方体的表面积为：\"",[36,17161,1655],{"class":163},[36,17163,17164],{"class":98},"c2.",[36,17166,17063],{"class":55},[36,17168,2885],{"class":98},[36,17170,1655],{"class":163},[36,17172,1677],{"class":98},[36,17174,17176,17178,17180,17183,17185,17187,17189,17191,17193],{"class":38,"line":17175},75,[36,17177,2030],{"class":98},[36,17179,1655],{"class":163},[36,17181,17182],{"class":59},"\"第二个立方体的体积为：\"",[36,17184,1655],{"class":163},[36,17186,17164],{"class":98},[36,17188,17092],{"class":55},[36,17190,2885],{"class":98},[36,17192,1655],{"class":163},[36,17194,1677],{"class":98},[36,17196,17198],{"class":38,"line":17197},76,[36,17199,247],{"emptyLinePlaceholder":246},[36,17201,17203],{"class":38,"line":17202},77,[36,17204,17205],{"class":42},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[36,17207,17209,17211,17213,17216,17218],{"class":38,"line":17208},78,[36,17210,2030],{"class":98},[36,17212,1655],{"class":163},[36,17214,17215],{"class":59},"\"内部函数判断结果：\"",[36,17217,1655],{"class":163},[36,17219,1677],{"class":98},[36,17221,17223,17225,17227,17230],{"class":38,"line":17222},79,[36,17224,3552],{"class":163},[36,17226,16920],{"class":98},[36,17228,17229],{"class":55},"isEqual",[36,17231,17232],{"class":98},"(c2))\n",[36,17234,17236],{"class":38,"line":17235},80,[36,17237,2489],{"class":98},[36,17239,17241,17243,17245,17248,17250],{"class":38,"line":17240},81,[36,17242,3902],{"class":98},[36,17244,1655],{"class":163},[36,17246,17247],{"class":59},"\"两个立方体相等\"",[36,17249,1655],{"class":163},[36,17251,1677],{"class":98},[36,17253,17255],{"class":38,"line":17254},82,[36,17256,2646],{"class":98},[36,17258,17260],{"class":38,"line":17259},83,[36,17261,17262],{"class":163},"    else\n",[36,17264,17266],{"class":38,"line":17265},84,[36,17267,2489],{"class":98},[36,17269,17271,17273,17275,17278,17280],{"class":38,"line":17270},85,[36,17272,3902],{"class":98},[36,17274,1655],{"class":163},[36,17276,17277],{"class":59},"\"两个立方体不相等\"",[36,17279,1655],{"class":163},[36,17281,1677],{"class":98},[36,17283,17285],{"class":38,"line":17284},86,[36,17286,2646],{"class":98},[36,17288,17290],{"class":38,"line":17289},87,[36,17291,247],{"emptyLinePlaceholder":246},[36,17293,17295,17297,17299,17302,17304],{"class":38,"line":17294},88,[36,17296,2030],{"class":98},[36,17298,1655],{"class":163},[36,17300,17301],{"class":59},"\"全局函数判断结果：\"",[36,17303,1655],{"class":163},[36,17305,1677],{"class":98},[36,17307,17309,17311,17313,17315],{"class":38,"line":17308},89,[36,17310,3552],{"class":163},[36,17312,2130],{"class":98},[36,17314,17229],{"class":55},[36,17316,17317],{"class":98},"(c1, c2))\n",[36,17319,17321],{"class":38,"line":17320},90,[36,17322,2489],{"class":98},[36,17324,17326,17328,17330,17332,17334],{"class":38,"line":17325},91,[36,17327,3902],{"class":98},[36,17329,1655],{"class":163},[36,17331,17247],{"class":59},[36,17333,1655],{"class":163},[36,17335,1677],{"class":98},[36,17337,17339],{"class":38,"line":17338},92,[36,17340,2646],{"class":98},[36,17342,17344],{"class":38,"line":17343},93,[36,17345,17262],{"class":163},[36,17347,17349],{"class":38,"line":17348},94,[36,17350,2489],{"class":98},[36,17352,17354,17356,17358,17360,17362],{"class":38,"line":17353},95,[36,17355,3902],{"class":98},[36,17357,1655],{"class":163},[36,17359,17277],{"class":59},[36,17361,1655],{"class":163},[36,17363,1677],{"class":98},[36,17365,17367],{"class":38,"line":17366},96,[36,17368,2646],{"class":98},[36,17370,17372],{"class":38,"line":17371},97,[36,17373,2044],{"class":98},[571,17375,17376],{"start":46},[574,17377,17378],{},[765,17379,17380],{},"练习案例2：点和圆的关系",[1618,17382,17383],{},[574,17384,17385],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[26,17387,17389],{"className":609,"code":17388,"language":611,"meta":31,"style":31},"#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",[33,17390,17391,17397,17407,17414,17421,17425,17429,17434,17468,17473,17489,17503,17507,17511,17518,17525,17529,17535,17539,17543,17547,17569,17592,17597,17611,17626,17630,17634,17640,17645,17650,17654,17680,17684,17714,17742,17770,17787,17791,17804,17808,17812,17816,17829,17833,17837,17845,17849,17853,17857,17862,17866,17877,17884,17893,17903,17914,17921,17934,17945,17955,17966,17973,17987,17992,18002,18010],{"__ignoreMap":31},[36,17392,17393,17395],{"class":38,"line":39},[36,17394,2409],{"class":163},[36,17396,2412],{"class":59},[36,17398,17399,17401,17403,17405],{"class":38,"line":46},[36,17400,2417],{"class":163},[36,17402,2420],{"class":163},[36,17404,2423],{"class":55},[36,17406,1772],{"class":98},[36,17408,17409,17411],{"class":38,"line":52},[36,17410,2409],{"class":163},[36,17412,17413],{"class":59},"\u003Ccmath>\n",[36,17415,17416,17418],{"class":38,"line":66},[36,17417,15133],{"class":163},[36,17419,17420],{"class":55}," Point\n",[36,17422,17423],{"class":38,"line":72},[36,17424,2025],{"class":98},[36,17426,17427],{"class":38,"line":82},[36,17428,15155],{"class":163},[36,17430,17431],{"class":38,"line":88},[36,17432,17433],{"class":42},"    \u002F\u002F赋值\n",[36,17435,17436,17438,17441,17443,17445,17448,17450,17452,17455,17458,17460,17463,17465],{"class":38,"line":113},[36,17437,15348],{"class":163},[36,17439,17440],{"class":55}," setPoint",[36,17442,621],{"class":98},[36,17444,14476],{"class":163},[36,17446,17447],{"class":5667}," x",[36,17449,12874],{"class":98},[36,17451,14476],{"class":163},[36,17453,17454],{"class":5667}," y",[36,17456,17457],{"class":98},") { m_x ",[36,17459,176],{"class":163},[36,17461,17462],{"class":98}," x; m_y ",[36,17464,176],{"class":163},[36,17466,17467],{"class":98}," y; }\n",[36,17469,17470],{"class":38,"line":119},[36,17471,17472],{"class":42},"    \u002F\u002F获取坐标\n",[36,17474,17475,17477,17480,17483,17486],{"class":38,"line":131},[36,17476,15177],{"class":163},[36,17478,17479],{"class":55}," getX",[36,17481,17482],{"class":98},"() { ",[36,17484,17485],{"class":163},"return",[36,17487,17488],{"class":98}," m_x; }\n",[36,17490,17491,17493,17496,17498,17500],{"class":38,"line":137},[36,17492,15177],{"class":163},[36,17494,17495],{"class":55}," getY",[36,17497,17482],{"class":98},[36,17499,17485],{"class":163},[36,17501,17502],{"class":98}," m_y; }\n",[36,17504,17505],{"class":38,"line":147},[36,17506,247],{"emptyLinePlaceholder":246},[36,17508,17509],{"class":38,"line":153},[36,17510,15661],{"class":163},[36,17512,17513,17515],{"class":38,"line":191},[36,17514,15177],{"class":163},[36,17516,17517],{"class":98}," m_x;\n",[36,17519,17520,17522],{"class":38,"line":197},[36,17521,15177],{"class":163},[36,17523,17524],{"class":98}," m_y;\n",[36,17526,17527],{"class":38,"line":217},[36,17528,4446],{"class":98},[36,17530,17531,17533],{"class":38,"line":223},[36,17532,15133],{"class":163},[36,17534,15136],{"class":55},[36,17536,17537],{"class":38,"line":243},[36,17538,2025],{"class":98},[36,17540,17541],{"class":38,"line":250},[36,17542,15155],{"class":163},[36,17544,17545],{"class":38,"line":256},[36,17546,17433],{"class":42},[36,17548,17549,17551,17554,17556,17558,17561,17564,17566],{"class":38,"line":273},[36,17550,15348],{"class":163},[36,17552,17553],{"class":55}," setRadius",[36,17555,621],{"class":98},[36,17557,14476],{"class":163},[36,17559,17560],{"class":5667}," r",[36,17562,17563],{"class":98},") { m_r ",[36,17565,176],{"class":163},[36,17567,17568],{"class":98}," r; }\n",[36,17570,17571,17573,17576,17578,17581,17584,17587,17589],{"class":38,"line":278},[36,17572,15348],{"class":163},[36,17574,17575],{"class":55}," setCenter",[36,17577,621],{"class":98},[36,17579,17580],{"class":55},"Point",[36,17582,17583],{"class":5667}," center",[36,17585,17586],{"class":98},") { m_center ",[36,17588,176],{"class":163},[36,17590,17591],{"class":98}," center; }\n",[36,17593,17594],{"class":38,"line":284},[36,17595,17596],{"class":42},"    \u002F\u002F获取属性\n",[36,17598,17599,17601,17604,17606,17608],{"class":38,"line":315},[36,17600,15177],{"class":163},[36,17602,17603],{"class":55}," getRadius",[36,17605,17482],{"class":98},[36,17607,17485],{"class":163},[36,17609,17610],{"class":98}," m_r; }\n",[36,17612,17613,17616,17619,17621,17623],{"class":38,"line":320},[36,17614,17615],{"class":55},"    Point",[36,17617,17618],{"class":55}," getCenter",[36,17620,17482],{"class":98},[36,17622,17485],{"class":163},[36,17624,17625],{"class":98}," m_center; }\n",[36,17627,17628],{"class":38,"line":326},[36,17629,247],{"emptyLinePlaceholder":246},[36,17631,17632],{"class":38,"line":343},[36,17633,15661],{"class":163},[36,17635,17636,17638],{"class":38,"line":348},[36,17637,15177],{"class":163},[36,17639,15167],{"class":98},[36,17641,17642],{"class":38,"line":354},[36,17643,17644],{"class":42},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[36,17646,17647],{"class":38,"line":370},[36,17648,17649],{"class":98},"    Point m_center;\n",[36,17651,17652],{"class":38,"line":375},[36,17653,4446],{"class":98},[36,17655,17656,17658,17661,17663,17666,17668,17670,17672,17674,17676,17678],{"class":38,"line":381},[36,17657,5815],{"class":163},[36,17659,17660],{"class":55}," isInCircle",[36,17662,621],{"class":98},[36,17664,17665],{"class":55},"Circle",[36,17667,11023],{"class":163},[36,17669,903],{"class":5667},[36,17671,992],{"class":98},[36,17673,17580],{"class":55},[36,17675,11023],{"class":163},[36,17677,14],{"class":5667},[36,17679,627],{"class":98},[36,17681,17682],{"class":38,"line":399},[36,17683,2025],{"class":98},[36,17685,17686,17688,17691,17693,17695,17698,17701,17704,17706,17708,17710,17712],{"class":38,"line":404},[36,17687,15177],{"class":163},[36,17689,17690],{"class":98}," dx ",[36,17692,176],{"class":163},[36,17694,16781],{"class":98},[36,17696,17697],{"class":55},"getCenter",[36,17699,17700],{"class":98},"().",[36,17702,17703],{"class":55},"getX",[36,17705,13489],{"class":98},[36,17707,1146],{"class":163},[36,17709,16327],{"class":98},[36,17711,17703],{"class":55},[36,17713,6087],{"class":98},[36,17715,17716,17718,17721,17723,17725,17727,17729,17732,17734,17736,17738,17740],{"class":38,"line":410},[36,17717,15177],{"class":163},[36,17719,17720],{"class":98}," dy ",[36,17722,176],{"class":163},[36,17724,16781],{"class":98},[36,17726,17697],{"class":55},[36,17728,17700],{"class":98},[36,17730,17731],{"class":55},"getY",[36,17733,13489],{"class":98},[36,17735,1146],{"class":163},[36,17737,16327],{"class":98},[36,17739,17731],{"class":55},[36,17741,6087],{"class":98},[36,17743,17744,17746,17749,17751,17754,17757,17759,17761,17763,17765,17767],{"class":38,"line":423},[36,17745,15177],{"class":163},[36,17747,17748],{"class":98}," distance ",[36,17750,176],{"class":163},[36,17752,17753],{"class":55}," sqrt",[36,17755,17756],{"class":98},"(dx ",[36,17758,1069],{"class":163},[36,17760,17690],{"class":98},[36,17762,1095],{"class":163},[36,17764,17720],{"class":98},[36,17766,1069],{"class":163},[36,17768,17769],{"class":98}," dy);\n",[36,17771,17772,17774,17777,17779,17781,17784],{"class":38,"line":436},[36,17773,3552],{"class":163},[36,17775,17776],{"class":98}," (distance ",[36,17778,179],{"class":163},[36,17780,16781],{"class":98},[36,17782,17783],{"class":55},"getRadius",[36,17785,17786],{"class":98},"())\n",[36,17788,17789],{"class":38,"line":441},[36,17790,2489],{"class":98},[36,17792,17793,17795,17797,17800,17802],{"class":38,"line":447},[36,17794,10110],{"class":98},[36,17796,1655],{"class":163},[36,17798,17799],{"class":59}," \"点在圆内\"",[36,17801,1923],{"class":163},[36,17803,9281],{"class":98},[36,17805,17806],{"class":38,"line":465},[36,17807,2646],{"class":98},[36,17809,17810],{"class":38,"line":470},[36,17811,17262],{"class":163},[36,17813,17814],{"class":38,"line":476},[36,17815,2489],{"class":98},[36,17817,17818,17820,17822,17825,17827],{"class":38,"line":496},[36,17819,10110],{"class":98},[36,17821,1655],{"class":163},[36,17823,17824],{"class":59}," \"点在圆外\"",[36,17826,1923],{"class":163},[36,17828,9281],{"class":98},[36,17830,17831],{"class":38,"line":501},[36,17832,2646],{"class":98},[36,17834,17835],{"class":38,"line":507},[36,17836,2044],{"class":98},[36,17838,17839,17841,17843],{"class":38,"line":517},[36,17840,624],{"class":163},[36,17842,2432],{"class":55},[36,17844,2435],{"class":98},[36,17846,17847],{"class":38,"line":522},[36,17848,2025],{"class":98},[36,17850,17851],{"class":38,"line":528},[36,17852,15492],{"class":42},[36,17854,17855],{"class":38,"line":10203},[36,17856,15239],{"class":98},[36,17858,17859],{"class":38,"line":10227},[36,17860,17861],{"class":98},"    Point p1;\n",[36,17863,17864],{"class":38,"line":10232},[36,17865,17433],{"class":42},[36,17867,17868,17870,17872,17875],{"class":38,"line":10237},[36,17869,2030],{"class":98},[36,17871,1655],{"class":163},[36,17873,17874],{"class":59},"\"请输入圆的半径：\"",[36,17876,1772],{"class":98},[36,17878,17879,17881],{"class":38,"line":10242},[36,17880,15177],{"class":163},[36,17882,17883],{"class":98}," r;\n",[36,17885,17886,17888,17890],{"class":38,"line":10251},[36,17887,2471],{"class":98},[36,17889,1908],{"class":163},[36,17891,17892],{"class":98},"r;\n",[36,17894,17895,17897,17900],{"class":38,"line":10256},[36,17896,17034],{"class":98},[36,17898,17899],{"class":55},"setRadius",[36,17901,17902],{"class":98},"(r);\n",[36,17904,17905,17907,17909,17912],{"class":38,"line":10262},[36,17906,2030],{"class":98},[36,17908,1655],{"class":163},[36,17910,17911],{"class":59},"\"请输入圆心坐标：\"",[36,17913,1772],{"class":98},[36,17915,17916,17918],{"class":38,"line":10283},[36,17917,15177],{"class":163},[36,17919,17920],{"class":98}," x, y;\n",[36,17922,17923,17925,17927,17929,17931],{"class":38,"line":10289},[36,17924,2471],{"class":98},[36,17926,1908],{"class":163},[36,17928,1433],{"class":98},[36,17930,1908],{"class":163},[36,17932,17933],{"class":98},"y;\n",[36,17935,17936,17939,17942],{"class":38,"line":10303},[36,17937,17938],{"class":98},"    p1.",[36,17940,17941],{"class":55},"setPoint",[36,17943,17944],{"class":98},"(x, y);\n",[36,17946,17947,17949,17952],{"class":38,"line":10309},[36,17948,17034],{"class":98},[36,17950,17951],{"class":55},"setCenter",[36,17953,17954],{"class":98},"(p1);\n",[36,17956,17957,17959,17961,17964],{"class":38,"line":10336},[36,17958,2030],{"class":98},[36,17960,1655],{"class":163},[36,17962,17963],{"class":59},"\"请输入测试点坐标：\"",[36,17965,1772],{"class":98},[36,17967,17968,17970],{"class":38,"line":10345},[36,17969,15177],{"class":163},[36,17971,17972],{"class":98}," x1, y1;\n",[36,17974,17975,17977,17979,17982,17984],{"class":38,"line":10351},[36,17976,2471],{"class":98},[36,17978,1908],{"class":163},[36,17980,17981],{"class":98},"x1",[36,17983,1908],{"class":163},[36,17985,17986],{"class":98},"y1;\n",[36,17988,17989],{"class":38,"line":10359},[36,17990,17991],{"class":98},"    Point p2;\n",[36,17993,17994,17997,17999],{"class":38,"line":10364},[36,17995,17996],{"class":98},"    p2.",[36,17998,17941],{"class":55},[36,18000,18001],{"class":98},"(x1, y1);\n",[36,18003,18004,18007],{"class":38,"line":17043},[36,18005,18006],{"class":55},"    isInCircle",[36,18008,18009],{"class":98},"(c1, p2);\n",[36,18011,18012],{"class":38,"line":17049},[36,18013,2044],{"class":98},[14,18015,18016],{},"在类中可以让另一个类作为本来的成员",[14,18018,18019],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,18021,18022],{},"创建point.h",[26,18024,18026],{"className":609,"code":18025,"language":611,"meta":31,"style":31},"#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",[33,18027,18028,18039,18045,18055,18061,18065,18070,18074,18078,18098,18102,18110,18118,18122,18126,18132,18138],{"__ignoreMap":31},[36,18029,18030,18033,18036],{"class":38,"line":39},[36,18031,18032],{"class":163},"#pragma",[36,18034,18035],{"class":55}," once",[36,18037,18038],{"class":42}," \u002F\u002F防止头文件重复包含\n",[36,18040,18041,18043],{"class":38,"line":46},[36,18042,2409],{"class":163},[36,18044,2412],{"class":59},[36,18046,18047,18049,18051,18053],{"class":38,"line":52},[36,18048,2417],{"class":163},[36,18050,2420],{"class":163},[36,18052,2423],{"class":55},[36,18054,1772],{"class":98},[36,18056,18057,18059],{"class":38,"line":66},[36,18058,15133],{"class":163},[36,18060,17420],{"class":55},[36,18062,18063],{"class":38,"line":72},[36,18064,2025],{"class":98},[36,18066,18067],{"class":38,"line":82},[36,18068,18069],{"class":42},"\u002F\u002F做好声明与变量定义就可以\n",[36,18071,18072],{"class":38,"line":88},[36,18073,15155],{"class":163},[36,18075,18076],{"class":38,"line":113},[36,18077,17433],{"class":42},[36,18079,18080,18082,18084,18086,18088,18090,18092,18094,18096],{"class":38,"line":119},[36,18081,15348],{"class":163},[36,18083,17440],{"class":55},[36,18085,621],{"class":98},[36,18087,14476],{"class":163},[36,18089,17447],{"class":5667},[36,18091,12874],{"class":98},[36,18093,14476],{"class":163},[36,18095,17454],{"class":5667},[36,18097,3170],{"class":98},[36,18099,18100],{"class":38,"line":131},[36,18101,17472],{"class":42},[36,18103,18104,18106,18108],{"class":38,"line":137},[36,18105,15177],{"class":163},[36,18107,17479],{"class":55},[36,18109,6087],{"class":98},[36,18111,18112,18114,18116],{"class":38,"line":147},[36,18113,15177],{"class":163},[36,18115,17495],{"class":55},[36,18117,6087],{"class":98},[36,18119,18120],{"class":38,"line":153},[36,18121,247],{"emptyLinePlaceholder":246},[36,18123,18124],{"class":38,"line":191},[36,18125,15661],{"class":163},[36,18127,18128,18130],{"class":38,"line":197},[36,18129,15177],{"class":163},[36,18131,17517],{"class":98},[36,18133,18134,18136],{"class":38,"line":217},[36,18135,15177],{"class":163},[36,18137,17524],{"class":98},[36,18139,18140],{"class":38,"line":223},[36,18141,4446],{"class":98},[14,18143,18144],{},"创建point.cpp",[26,18146,18148],{"className":609,"code":18147,"language":611,"meta":31,"style":31},"#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",[33,18149,18150,18157,18162,18196,18200,18216],{"__ignoreMap":31},[36,18151,18152,18154],{"class":38,"line":39},[36,18153,2409],{"class":163},[36,18155,18156],{"class":59},"\u003Cpoint.h>\n",[36,18158,18159],{"class":38,"line":46},[36,18160,18161],{"class":42},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[36,18163,18164,18166,18169,18172,18174,18176,18178,18180,18182,18184,18186,18188,18190,18192,18194],{"class":38,"line":52},[36,18165,15348],{"class":163},[36,18167,18168],{"class":55}," Point",[36,18170,18171],{"class":98},"::",[36,18173,17941],{"class":55},[36,18175,621],{"class":98},[36,18177,14476],{"class":163},[36,18179,17447],{"class":5667},[36,18181,12874],{"class":98},[36,18183,14476],{"class":163},[36,18185,17454],{"class":5667},[36,18187,17457],{"class":98},[36,18189,176],{"class":163},[36,18191,17462],{"class":98},[36,18193,176],{"class":163},[36,18195,17467],{"class":98},[36,18197,18198],{"class":38,"line":66},[36,18199,17472],{"class":42},[36,18201,18202,18204,18206,18208,18210,18212,18214],{"class":38,"line":72},[36,18203,15177],{"class":163},[36,18205,18168],{"class":55},[36,18207,18171],{"class":98},[36,18209,17703],{"class":55},[36,18211,17482],{"class":98},[36,18213,17485],{"class":163},[36,18215,17488],{"class":98},[36,18217,18218,18220,18222,18224,18226,18228,18230],{"class":38,"line":82},[36,18219,15177],{"class":163},[36,18221,18168],{"class":55},[36,18223,18171],{"class":98},[36,18225,17731],{"class":55},[36,18227,17482],{"class":98},[36,18229,17485],{"class":163},[36,18231,17502],{"class":98},[14,18233,18234],{},"创建circle.h",[26,18236,18238],{"className":609,"code":18237,"language":611,"meta":31,"style":31},"#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",[33,18239,18240,18247,18253,18263,18269,18275,18279,18283,18287,18301,18315,18319,18327,18335,18339,18343,18349,18353,18357],{"__ignoreMap":31},[36,18241,18242,18244],{"class":38,"line":39},[36,18243,18032],{"class":163},[36,18245,18246],{"class":55}," once\n",[36,18248,18249,18251],{"class":38,"line":46},[36,18250,2409],{"class":163},[36,18252,2412],{"class":59},[36,18254,18255,18257,18259,18261],{"class":38,"line":52},[36,18256,2417],{"class":163},[36,18258,2420],{"class":163},[36,18260,2423],{"class":55},[36,18262,1772],{"class":98},[36,18264,18265,18267],{"class":38,"line":66},[36,18266,2409],{"class":163},[36,18268,18156],{"class":59},[36,18270,18271,18273],{"class":38,"line":72},[36,18272,15133],{"class":163},[36,18274,15136],{"class":55},[36,18276,18277],{"class":38,"line":82},[36,18278,2025],{"class":98},[36,18280,18281],{"class":38,"line":88},[36,18282,15155],{"class":163},[36,18284,18285],{"class":38,"line":113},[36,18286,17433],{"class":42},[36,18288,18289,18291,18293,18295,18297,18299],{"class":38,"line":119},[36,18290,15348],{"class":163},[36,18292,17553],{"class":55},[36,18294,621],{"class":98},[36,18296,14476],{"class":163},[36,18298,17560],{"class":5667},[36,18300,3170],{"class":98},[36,18302,18303,18305,18307,18309,18311,18313],{"class":38,"line":131},[36,18304,15348],{"class":163},[36,18306,17575],{"class":55},[36,18308,621],{"class":98},[36,18310,17580],{"class":55},[36,18312,17583],{"class":5667},[36,18314,3170],{"class":98},[36,18316,18317],{"class":38,"line":137},[36,18318,17596],{"class":42},[36,18320,18321,18323,18325],{"class":38,"line":147},[36,18322,15177],{"class":163},[36,18324,17603],{"class":55},[36,18326,6087],{"class":98},[36,18328,18329,18331,18333],{"class":38,"line":153},[36,18330,17615],{"class":55},[36,18332,17618],{"class":55},[36,18334,6087],{"class":98},[36,18336,18337],{"class":38,"line":191},[36,18338,247],{"emptyLinePlaceholder":246},[36,18340,18341],{"class":38,"line":197},[36,18342,15661],{"class":163},[36,18344,18345,18347],{"class":38,"line":217},[36,18346,15177],{"class":163},[36,18348,15167],{"class":98},[36,18350,18351],{"class":38,"line":223},[36,18352,17644],{"class":42},[36,18354,18355],{"class":38,"line":243},[36,18356,17649],{"class":98},[36,18358,18359],{"class":38,"line":250},[36,18360,4446],{"class":98},[14,18362,18363],{},"创建circle.cpp",[26,18365,18367],{"className":609,"code":18366,"language":611,"meta":31,"style":31},"#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",[33,18368,18369,18376,18399,18421,18426,18442],{"__ignoreMap":31},[36,18370,18371,18373],{"class":38,"line":39},[36,18372,2409],{"class":163},[36,18374,18375],{"class":59},"\u003Ccircle.h>\n",[36,18377,18378,18380,18383,18385,18387,18389,18391,18393,18395,18397],{"class":38,"line":46},[36,18379,5815],{"class":163},[36,18381,18382],{"class":55}," Circle",[36,18384,18171],{"class":98},[36,18386,17899],{"class":55},[36,18388,621],{"class":98},[36,18390,14476],{"class":163},[36,18392,17560],{"class":5667},[36,18394,17563],{"class":98},[36,18396,176],{"class":163},[36,18398,17568],{"class":98},[36,18400,18401,18403,18405,18407,18409,18411,18413,18415,18417,18419],{"class":38,"line":52},[36,18402,5815],{"class":163},[36,18404,18382],{"class":55},[36,18406,18171],{"class":98},[36,18408,17951],{"class":55},[36,18410,621],{"class":98},[36,18412,17580],{"class":55},[36,18414,17583],{"class":5667},[36,18416,17586],{"class":98},[36,18418,176],{"class":163},[36,18420,17591],{"class":98},[36,18422,18423],{"class":38,"line":66},[36,18424,18425],{"class":42},"\u002F\u002F获取属性\n",[36,18427,18428,18430,18432,18434,18436,18438,18440],{"class":38,"line":72},[36,18429,14476],{"class":163},[36,18431,18382],{"class":55},[36,18433,18171],{"class":98},[36,18435,17783],{"class":55},[36,18437,17482],{"class":98},[36,18439,17485],{"class":163},[36,18441,17610],{"class":98},[36,18443,18444,18446,18448,18450,18452,18454,18456],{"class":38,"line":82},[36,18445,17580],{"class":55},[36,18447,18382],{"class":55},[36,18449,18171],{"class":98},[36,18451,17697],{"class":55},[36,18453,17482],{"class":98},[36,18455,17485],{"class":163},[36,18457,17625],{"class":98},[14,18459,18460],{},"使用封装的类",[26,18462,18464],{"className":609,"code":18463,"language":611,"meta":31,"style":31},"#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",[33,18465,18466,18472,18482,18488,18494,18518,18522,18548,18574,18598,18612,18616,18628,18632,18636,18640,18652,18656,18660,18668,18672,18676,18680,18684,18688,18698,18704,18712,18720,18730,18736,18748,18756,18764,18774,18780,18792,18796,18804,18810],{"__ignoreMap":31},[36,18467,18468,18470],{"class":38,"line":39},[36,18469,2409],{"class":163},[36,18471,2412],{"class":59},[36,18473,18474,18476,18478,18480],{"class":38,"line":46},[36,18475,2417],{"class":163},[36,18477,2420],{"class":163},[36,18479,2423],{"class":55},[36,18481,1772],{"class":98},[36,18483,18484,18486],{"class":38,"line":52},[36,18485,2409],{"class":163},[36,18487,18375],{"class":59},[36,18489,18490,18492],{"class":38,"line":66},[36,18491,2409],{"class":163},[36,18493,18156],{"class":59},[36,18495,18496,18498,18500,18502,18504,18506,18508,18510,18512,18514,18516],{"class":38,"line":72},[36,18497,5815],{"class":163},[36,18499,17660],{"class":55},[36,18501,621],{"class":98},[36,18503,17665],{"class":55},[36,18505,11023],{"class":163},[36,18507,903],{"class":5667},[36,18509,992],{"class":98},[36,18511,17580],{"class":55},[36,18513,11023],{"class":163},[36,18515,14],{"class":5667},[36,18517,627],{"class":98},[36,18519,18520],{"class":38,"line":82},[36,18521,2025],{"class":98},[36,18523,18524,18526,18528,18530,18532,18534,18536,18538,18540,18542,18544,18546],{"class":38,"line":88},[36,18525,15177],{"class":163},[36,18527,17690],{"class":98},[36,18529,176],{"class":163},[36,18531,16781],{"class":98},[36,18533,17697],{"class":55},[36,18535,17700],{"class":98},[36,18537,17703],{"class":55},[36,18539,13489],{"class":98},[36,18541,1146],{"class":163},[36,18543,16327],{"class":98},[36,18545,17703],{"class":55},[36,18547,6087],{"class":98},[36,18549,18550,18552,18554,18556,18558,18560,18562,18564,18566,18568,18570,18572],{"class":38,"line":113},[36,18551,15177],{"class":163},[36,18553,17720],{"class":98},[36,18555,176],{"class":163},[36,18557,16781],{"class":98},[36,18559,17697],{"class":55},[36,18561,17700],{"class":98},[36,18563,17731],{"class":55},[36,18565,13489],{"class":98},[36,18567,1146],{"class":163},[36,18569,16327],{"class":98},[36,18571,17731],{"class":55},[36,18573,6087],{"class":98},[36,18575,18576,18578,18580,18582,18584,18586,18588,18590,18592,18594,18596],{"class":38,"line":119},[36,18577,15177],{"class":163},[36,18579,17748],{"class":98},[36,18581,176],{"class":163},[36,18583,17753],{"class":55},[36,18585,17756],{"class":98},[36,18587,1069],{"class":163},[36,18589,17690],{"class":98},[36,18591,1095],{"class":163},[36,18593,17720],{"class":98},[36,18595,1069],{"class":163},[36,18597,17769],{"class":98},[36,18599,18600,18602,18604,18606,18608,18610],{"class":38,"line":131},[36,18601,3552],{"class":163},[36,18603,17776],{"class":98},[36,18605,179],{"class":163},[36,18607,16781],{"class":98},[36,18609,17783],{"class":55},[36,18611,17786],{"class":98},[36,18613,18614],{"class":38,"line":137},[36,18615,2489],{"class":98},[36,18617,18618,18620,18622,18624,18626],{"class":38,"line":147},[36,18619,10110],{"class":98},[36,18621,1655],{"class":163},[36,18623,17799],{"class":59},[36,18625,1923],{"class":163},[36,18627,9281],{"class":98},[36,18629,18630],{"class":38,"line":153},[36,18631,2646],{"class":98},[36,18633,18634],{"class":38,"line":191},[36,18635,17262],{"class":163},[36,18637,18638],{"class":38,"line":197},[36,18639,2489],{"class":98},[36,18641,18642,18644,18646,18648,18650],{"class":38,"line":217},[36,18643,10110],{"class":98},[36,18645,1655],{"class":163},[36,18647,17824],{"class":59},[36,18649,1923],{"class":163},[36,18651,9281],{"class":98},[36,18653,18654],{"class":38,"line":223},[36,18655,2646],{"class":98},[36,18657,18658],{"class":38,"line":243},[36,18659,2044],{"class":98},[36,18661,18662,18664,18666],{"class":38,"line":250},[36,18663,624],{"class":163},[36,18665,2432],{"class":55},[36,18667,2435],{"class":98},[36,18669,18670],{"class":38,"line":256},[36,18671,2025],{"class":98},[36,18673,18674],{"class":38,"line":273},[36,18675,15492],{"class":42},[36,18677,18678],{"class":38,"line":278},[36,18679,15239],{"class":98},[36,18681,18682],{"class":38,"line":284},[36,18683,17861],{"class":98},[36,18685,18686],{"class":38,"line":315},[36,18687,17433],{"class":42},[36,18689,18690,18692,18694,18696],{"class":38,"line":320},[36,18691,2030],{"class":98},[36,18693,1655],{"class":163},[36,18695,17874],{"class":59},[36,18697,1772],{"class":98},[36,18699,18700,18702],{"class":38,"line":326},[36,18701,15177],{"class":163},[36,18703,17883],{"class":98},[36,18705,18706,18708,18710],{"class":38,"line":343},[36,18707,2471],{"class":98},[36,18709,1908],{"class":163},[36,18711,17892],{"class":98},[36,18713,18714,18716,18718],{"class":38,"line":348},[36,18715,17034],{"class":98},[36,18717,17899],{"class":55},[36,18719,17902],{"class":98},[36,18721,18722,18724,18726,18728],{"class":38,"line":354},[36,18723,2030],{"class":98},[36,18725,1655],{"class":163},[36,18727,17911],{"class":59},[36,18729,1772],{"class":98},[36,18731,18732,18734],{"class":38,"line":370},[36,18733,15177],{"class":163},[36,18735,17920],{"class":98},[36,18737,18738,18740,18742,18744,18746],{"class":38,"line":375},[36,18739,2471],{"class":98},[36,18741,1908],{"class":163},[36,18743,1433],{"class":98},[36,18745,1908],{"class":163},[36,18747,17933],{"class":98},[36,18749,18750,18752,18754],{"class":38,"line":381},[36,18751,17938],{"class":98},[36,18753,17941],{"class":55},[36,18755,17944],{"class":98},[36,18757,18758,18760,18762],{"class":38,"line":399},[36,18759,17034],{"class":98},[36,18761,17951],{"class":55},[36,18763,17954],{"class":98},[36,18765,18766,18768,18770,18772],{"class":38,"line":404},[36,18767,2030],{"class":98},[36,18769,1655],{"class":163},[36,18771,17963],{"class":59},[36,18773,1772],{"class":98},[36,18775,18776,18778],{"class":38,"line":410},[36,18777,15177],{"class":163},[36,18779,17972],{"class":98},[36,18781,18782,18784,18786,18788,18790],{"class":38,"line":423},[36,18783,2471],{"class":98},[36,18785,1908],{"class":163},[36,18787,17981],{"class":98},[36,18789,1908],{"class":163},[36,18791,17986],{"class":98},[36,18793,18794],{"class":38,"line":436},[36,18795,17991],{"class":98},[36,18797,18798,18800,18802],{"class":38,"line":441},[36,18799,17996],{"class":98},[36,18801,17941],{"class":55},[36,18803,18001],{"class":98},[36,18805,18806,18808],{"class":38,"line":447},[36,18807,18006],{"class":55},[36,18809,18009],{"class":98},[36,18811,18812],{"class":38,"line":465},[36,18813,2044],{"class":98},[559,18815,18817],{"id":18816},"_82对象的初始化清理","8.2对象的初始化清理",[1618,18819,18820,18823],{},[574,18821,18822],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[574,18824,18825],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[588,18827,18829],{"id":18828},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,18831,18832,18833,18836],{},"对象的",[765,18834,18835],{},"初始化和清理","也是两个非常重要的安全问题",[14,18838,18839],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,18841,18842],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,18844,18845,18846,18849,18850,18853],{},"c++利用了",[765,18847,18848],{},"构造函数","和",[765,18851,18852],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,18855,18856,18857],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[765,18858,18859],{},"我们不提供构造和析构，编译器会提供",[14,18861,18862],{},[765,18863,18864],{},"编译器提供的构造函数和析构函数是空实现。",[1618,18866,18867,18870],{},[574,18868,18869],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[574,18871,18872,18873,18876],{},"析构函数：主要作用在于对象",[765,18874,18875],{},"销毁前","系统自动调用，执行一些清理工作。",[14,18878,18879,18882],{},[765,18880,18881],{},"构造函数语法：",[33,18883,18884],{},"类名(){}",[571,18886,18887,18890,18893,18896,18899],{},[574,18888,18889],{},"构造函数，没有返回值也不写void",[574,18891,18892],{},"函数名称与类名相同",[574,18894,18895],{},"构造函数可以有参数，因此可以发生重载",[574,18897,18898],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[574,18900,18901,18902,1043],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[33,18903,18904],{},"Person(){}",[14,18906,18907,14234,18910],{},[765,18908,18909],{},"析构函数语法：",[33,18911,18912],{},"~类名(){}",[571,18914,18915,18918,18921,18927],{},[574,18916,18917],{},"析构函数，没有返回值也不写void",[574,18919,18920],{},"函数名称与类名相同,在名称前加上符号  ~",[574,18922,18923,18924],{},"析构函数不可以有参数，因此",[765,18925,18926],{},"不可以发生重载",[574,18928,18929],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[26,18931,18933],{"className":609,"code":18932,"language":611,"meta":31,"style":31},"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",[33,18934,18935,18941,18945,18949,18954,18961,18965,18978,18982,18987,18994,18998,19011,19015,19019,19023,19027,19035,19039,19047,19051,19055,19063,19067,19072,19076,19083,19087,19100,19104,19112],{"__ignoreMap":31},[36,18936,18937,18939],{"class":38,"line":39},[36,18938,15133],{"class":163},[36,18940,15610],{"class":55},[36,18942,18943],{"class":38,"line":46},[36,18944,2025],{"class":98},[36,18946,18947],{"class":38,"line":52},[36,18948,15155],{"class":163},[36,18950,18951],{"class":38,"line":66},[36,18952,18953],{"class":42},"    \u002F\u002F构造函数\n",[36,18955,18956,18959],{"class":38,"line":72},[36,18957,18958],{"class":55},"    Person",[36,18960,2435],{"class":98},[36,18962,18963],{"class":38,"line":82},[36,18964,2489],{"class":98},[36,18966,18967,18969,18971,18974,18976],{"class":38,"line":88},[36,18968,10110],{"class":98},[36,18970,1655],{"class":163},[36,18972,18973],{"class":59}," \"Person的构造函数调用\"",[36,18975,1923],{"class":163},[36,18977,9281],{"class":98},[36,18979,18980],{"class":38,"line":113},[36,18981,2646],{"class":98},[36,18983,18984],{"class":38,"line":119},[36,18985,18986],{"class":42},"    \u002F\u002F析构函数\n",[36,18988,18989,18992],{"class":38,"line":131},[36,18990,18991],{"class":55},"    ~Person",[36,18993,2435],{"class":98},[36,18995,18996],{"class":38,"line":137},[36,18997,2489],{"class":98},[36,18999,19000,19002,19004,19007,19009],{"class":38,"line":147},[36,19001,10110],{"class":98},[36,19003,1655],{"class":163},[36,19005,19006],{"class":59}," \"Person的析构函数调用\"",[36,19008,1923],{"class":163},[36,19010,9281],{"class":98},[36,19012,19013],{"class":38,"line":153},[36,19014,2646],{"class":98},[36,19016,19017],{"class":38,"line":191},[36,19018,247],{"emptyLinePlaceholder":246},[36,19020,19021],{"class":38,"line":197},[36,19022,4446],{"class":98},[36,19024,19025],{"class":38,"line":217},[36,19026,247],{"emptyLinePlaceholder":246},[36,19028,19029,19031,19033],{"class":38,"line":223},[36,19030,5815],{"class":163},[36,19032,6039],{"class":55},[36,19034,2435],{"class":98},[36,19036,19037],{"class":38,"line":243},[36,19038,2025],{"class":98},[36,19040,19041,19044],{"class":38,"line":250},[36,19042,19043],{"class":98},"    Person p;",[36,19045,19046],{"class":42},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[36,19048,19049],{"class":38,"line":256},[36,19050,2044],{"class":98},[36,19052,19053],{"class":38,"line":273},[36,19054,247],{"emptyLinePlaceholder":246},[36,19056,19057,19059,19061],{"class":38,"line":278},[36,19058,624],{"class":163},[36,19060,2432],{"class":55},[36,19062,11292],{"class":98},[36,19064,19065],{"class":38,"line":284},[36,19066,13649],{"class":98},[36,19068,19069],{"class":38,"line":315},[36,19070,19071],{"class":42},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[36,19073,19074],{"class":38,"line":320},[36,19075,247],{"emptyLinePlaceholder":246},[36,19077,19078,19080],{"class":38,"line":326},[36,19079,19043],{"class":98},[36,19081,19082],{"class":42},"\u002F\u002F只有构造函数\n",[36,19084,19085],{"class":38,"line":343},[36,19086,247],{"emptyLinePlaceholder":246},[36,19088,19089,19091,19093,19095,19097],{"class":38,"line":348},[36,19090,2762],{"class":55},[36,19092,621],{"class":98},[36,19094,2767],{"class":59},[36,19096,6417],{"class":98},[36,19098,19099],{"class":42},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[36,19101,19102],{"class":38,"line":354},[36,19103,247],{"emptyLinePlaceholder":246},[36,19105,19106,19108,19110],{"class":38,"line":370},[36,19107,4541],{"class":163},[36,19109,4544],{"class":109},[36,19111,1772],{"class":98},[36,19113,19114],{"class":38,"line":375},[36,19115,2044],{"class":98},[14,19117,19118],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[588,19120,19122],{"id":19121},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,19124,19125],{},"两种分类方式：",[14,19127,19128],{},"​\t按参数分为： 有参构造和无参构造",[14,19130,19131],{},"​\t按类型分为： 普通构造和拷贝构造",[14,19133,19134],{},"三种调用方式：",[14,19136,19137],{},"​\t括号法",[14,19139,19140],{},"​\t显示法",[14,19142,19143],{},"​\t隐式转换法",[26,19145,19147],{"className":609,"code":19146,"language":611,"meta":31,"style":31},"#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",[33,19148,19149,19155,19165,19170,19175,19180,19185,19189,19197,19201,19205,19209,19215,19219,19232,19236,19248,19252,19261,19274,19278,19282,19288,19292,19305,19309,19314,19330,19334,19339,19348,19361,19365,19371,19375,19380,19388,19392,19397,19401,19409,19413,19418,19423,19428,19433,19438,19442,19447,19452,19457,19462,19466,19471,19476,19492,19504,19509,19513,19518,19523,19528,19532,19537,19551,19564,19568,19576,19580,19586,19592,19600],{"__ignoreMap":31},[36,19150,19151,19153],{"class":38,"line":39},[36,19152,2409],{"class":163},[36,19154,2412],{"class":59},[36,19156,19157,19159,19161,19163],{"class":38,"line":46},[36,19158,2417],{"class":163},[36,19160,2420],{"class":163},[36,19162,2423],{"class":55},[36,19164,1772],{"class":98},[36,19166,19167],{"class":38,"line":52},[36,19168,19169],{"class":42},"\u002F\u002F1.构造函数的分类及调用\n",[36,19171,19172],{"class":38,"line":66},[36,19173,19174],{"class":42},"\u002F\u002F分类\n",[36,19176,19177],{"class":38,"line":72},[36,19178,19179],{"class":42},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[36,19181,19182],{"class":38,"line":82},[36,19183,19184],{"class":42},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[36,19186,19187],{"class":38,"line":88},[36,19188,247],{"emptyLinePlaceholder":246},[36,19190,19191,19193,19195],{"class":38,"line":113},[36,19192,15133],{"class":163},[36,19194,16008],{"class":55},[36,19196,3125],{"class":98},[36,19198,19199],{"class":38,"line":119},[36,19200,2025],{"class":98},[36,19202,19203],{"class":38,"line":131},[36,19204,15155],{"class":163},[36,19206,19207],{"class":38,"line":137},[36,19208,18953],{"class":42},[36,19210,19211,19213],{"class":38,"line":147},[36,19212,18958],{"class":55},[36,19214,2435],{"class":98},[36,19216,19217],{"class":38,"line":153},[36,19218,2489],{"class":98},[36,19220,19221,19223,19225,19228,19230],{"class":38,"line":191},[36,19222,3902],{"class":98},[36,19224,1655],{"class":163},[36,19226,19227],{"class":59},"\"Person构造函数无参构造\"",[36,19229,1655],{"class":163},[36,19231,1677],{"class":98},[36,19233,19234],{"class":38,"line":197},[36,19235,2646],{"class":98},[36,19237,19238,19240,19242,19244,19246],{"class":38,"line":217},[36,19239,18958],{"class":55},[36,19241,621],{"class":98},[36,19243,624],{"class":163},[36,19245,1877],{"class":5667},[36,19247,627],{"class":98},[36,19249,19250],{"class":38,"line":223},[36,19251,2489],{"class":98},[36,19253,19254,19257,19259],{"class":38,"line":243},[36,19255,19256],{"class":98},"        age",[36,19258,176],{"class":163},[36,19260,6648],{"class":98},[36,19262,19263,19265,19267,19270,19272],{"class":38,"line":250},[36,19264,3902],{"class":98},[36,19266,1655],{"class":163},[36,19268,19269],{"class":59},"\"Person构造函数有参构造\"",[36,19271,1655],{"class":163},[36,19273,1677],{"class":98},[36,19275,19276],{"class":38,"line":256},[36,19277,2646],{"class":98},[36,19279,19280],{"class":38,"line":273},[36,19281,18986],{"class":42},[36,19283,19284,19286],{"class":38,"line":278},[36,19285,18991],{"class":55},[36,19287,2435],{"class":98},[36,19289,19290],{"class":38,"line":284},[36,19291,2489],{"class":98},[36,19293,19294,19296,19298,19301,19303],{"class":38,"line":315},[36,19295,3902],{"class":98},[36,19297,1655],{"class":163},[36,19299,19300],{"class":59},"\"Person析构函数被调用\"",[36,19302,1655],{"class":163},[36,19304,1677],{"class":98},[36,19306,19307],{"class":38,"line":320},[36,19308,2646],{"class":98},[36,19310,19311],{"class":38,"line":326},[36,19312,19313],{"class":42},"    \u002F\u002F拷贝构造函数\n",[36,19315,19316,19318,19320,19322,19324,19326,19328],{"class":38,"line":343},[36,19317,18958],{"class":55},[36,19319,621],{"class":98},[36,19321,7243],{"class":163},[36,19323,16008],{"class":55},[36,19325,11023],{"class":163},[36,19327,14],{"class":5667},[36,19329,627],{"class":98},[36,19331,19332],{"class":38,"line":348},[36,19333,2489],{"class":98},[36,19335,19336],{"class":38,"line":354},[36,19337,19338],{"class":42},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[36,19340,19341,19343,19345],{"class":38,"line":370},[36,19342,19256],{"class":98},[36,19344,176],{"class":163},[36,19346,19347],{"class":98},"p.age;\n",[36,19349,19350,19352,19354,19357,19359],{"class":38,"line":375},[36,19351,3902],{"class":98},[36,19353,1655],{"class":163},[36,19355,19356],{"class":59},"\"Person拷贝构造函数被调用\"",[36,19358,1655],{"class":163},[36,19360,1677],{"class":98},[36,19362,19363],{"class":38,"line":381},[36,19364,2646],{"class":98},[36,19366,19367,19369],{"class":38,"line":399},[36,19368,2444],{"class":163},[36,19370,8248],{"class":98},[36,19372,19373],{"class":38,"line":404},[36,19374,4446],{"class":98},[36,19376,19377],{"class":38,"line":410},[36,19378,19379],{"class":42},"\u002F\u002F调用\n",[36,19381,19382,19384,19386],{"class":38,"line":423},[36,19383,5815],{"class":163},[36,19385,6039],{"class":55},[36,19387,2435],{"class":98},[36,19389,19390],{"class":38,"line":436},[36,19391,2025],{"class":98},[36,19393,19394],{"class":38,"line":441},[36,19395,19396],{"class":42},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[36,19398,19399],{"class":38,"line":447},[36,19400,2044],{"class":98},[36,19402,19403,19405,19407],{"class":38,"line":465},[36,19404,5815],{"class":163},[36,19406,6108],{"class":55},[36,19408,2435],{"class":98},[36,19410,19411],{"class":38,"line":470},[36,19412,2025],{"class":98},[36,19414,19415],{"class":38,"line":476},[36,19416,19417],{"class":42},"    \u002F\u002F1.括号法\n",[36,19419,19420],{"class":38,"line":496},[36,19421,19422],{"class":42},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[36,19424,19425],{"class":38,"line":501},[36,19426,19427],{"class":42},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[36,19429,19430],{"class":38,"line":507},[36,19431,19432],{"class":42},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[36,19434,19435],{"class":38,"line":517},[36,19436,19437],{"class":42},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[36,19439,19440],{"class":38,"line":522},[36,19441,247],{"emptyLinePlaceholder":246},[36,19443,19444],{"class":38,"line":528},[36,19445,19446],{"class":42},"    \u002F\u002F注意事项\n",[36,19448,19449],{"class":38,"line":10203},[36,19450,19451],{"class":42},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[36,19453,19454],{"class":38,"line":10227},[36,19455,19456],{"class":42},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[36,19458,19459],{"class":38,"line":10232},[36,19460,19461],{"class":42},"    \u002F\u002F Person p4();\n",[36,19463,19464],{"class":38,"line":10237},[36,19465,247],{"emptyLinePlaceholder":246},[36,19467,19468],{"class":38,"line":10242},[36,19469,19470],{"class":42},"    \u002F\u002F2.显示法\n",[36,19472,19473],{"class":38,"line":10251},[36,19474,19475],{"class":98},"    Person p1;\n",[36,19477,19478,19481,19483,19486,19488,19490],{"class":38,"line":10256},[36,19479,19480],{"class":98},"    Person p2",[36,19482,176],{"class":163},[36,19484,19485],{"class":55},"Person",[36,19487,621],{"class":98},[36,19489,1060],{"class":109},[36,19491,3170],{"class":98},[36,19493,19494,19497,19499,19501],{"class":38,"line":10262},[36,19495,19496],{"class":98},"    Person p3",[36,19498,176],{"class":163},[36,19500,19485],{"class":55},[36,19502,19503],{"class":98},"(p2);\n",[36,19505,19506],{"class":38,"line":10283},[36,19507,19508],{"class":42},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[36,19510,19511],{"class":38,"line":10289},[36,19512,247],{"emptyLinePlaceholder":246},[36,19514,19515],{"class":38,"line":10303},[36,19516,19517],{"class":42},"    \u002F\u002F 注意事项2\n",[36,19519,19520],{"class":38,"line":10309},[36,19521,19522],{"class":42},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[36,19524,19525],{"class":38,"line":10336},[36,19526,19527],{"class":42},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[36,19529,19530],{"class":38,"line":10345},[36,19531,247],{"emptyLinePlaceholder":246},[36,19533,19534],{"class":38,"line":10351},[36,19535,19536],{"class":42},"    \u002F\u002F3.隐士转换法\n",[36,19538,19539,19542,19544,19546,19548],{"class":38,"line":10359},[36,19540,19541],{"class":98},"    Person p4",[36,19543,176],{"class":163},[36,19545,1060],{"class":109},[36,19547,674],{"class":98},[36,19549,19550],{"class":42},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[36,19552,19553,19556,19558,19561],{"class":38,"line":10364},[36,19554,19555],{"class":98},"    Person p5",[36,19557,176],{"class":163},[36,19559,19560],{"class":98},"p4;",[36,19562,19563],{"class":42}," \u002F\u002F 这里会调用拷贝构造函数\n",[36,19565,19566],{"class":38,"line":17043},[36,19567,2044],{"class":98},[36,19569,19570,19572,19574],{"class":38,"line":17049},[36,19571,624],{"class":163},[36,19573,2432],{"class":55},[36,19575,2435],{"class":98},[36,19577,19578],{"class":38,"line":17072},[36,19579,2025],{"class":98},[36,19581,19582,19584],{"class":38,"line":17078},[36,19583,6084],{"class":55},[36,19585,6087],{"class":98},[36,19587,19588,19590],{"class":38,"line":17101},[36,19589,6153],{"class":55},[36,19591,6087],{"class":98},[36,19593,19594,19596,19598],{"class":38,"line":17115},[36,19595,4541],{"class":163},[36,19597,4544],{"class":109},[36,19599,1772],{"class":98},[36,19601,19602],{"class":38,"line":17135},[36,19603,2044],{"class":98},[14,19605,19606,19609],{},[765,19607,19608],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[588,19611,19613],{"id":19612},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,19615,19616],{},"C++中拷贝构造函数调用时机通常有三种情况",[1618,19618,19619,19622,19625],{},[574,19620,19621],{},"使用一个已经创建完毕的对象来初始化一个新对象",[574,19623,19624],{},"值传递的方式给函数参数传值",[574,19626,19627],{},"以值方式返回局部对象",[26,19629,19631],{"className":609,"code":19630,"language":611,"meta":31,"style":31},"#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",[33,19632,19633,19639,19649,19653,19658,19662,19667,19672,19677,19683,19687,19691,19697,19701,19714,19718,19723,19735,19739,19747,19760,19764,19768,19784,19788,19797,19810,19814,19820,19824,19836,19840,19846,19850,19854,19862,19866,19879,19887,19905,19909,19914,19919,19934,19938,19951,19955,19963,19967,19971,19979,19983,19988,19997,20001,20005,20030,20040,20044,20052,20056,20067,20092,20096,20100,20104,20112,20116,20121,20126,20133,20138,20143,20148,20153,20157,20162,20166,20171,20175,20180,20185,20189,20193,20198,20203,20211],{"__ignoreMap":31},[36,19634,19635,19637],{"class":38,"line":39},[36,19636,2409],{"class":163},[36,19638,2412],{"class":59},[36,19640,19641,19643,19645,19647],{"class":38,"line":46},[36,19642,2417],{"class":163},[36,19644,2420],{"class":163},[36,19646,2423],{"class":55},[36,19648,1772],{"class":98},[36,19650,19651],{"class":38,"line":52},[36,19652,247],{"emptyLinePlaceholder":246},[36,19654,19655],{"class":38,"line":66},[36,19656,19657],{"class":42},"\u002F\u002F拷贝构造函数调用时机\n",[36,19659,19660],{"class":38,"line":72},[36,19661,247],{"emptyLinePlaceholder":246},[36,19663,19664],{"class":38,"line":82},[36,19665,19666],{"class":42},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[36,19668,19669],{"class":38,"line":88},[36,19670,19671],{"class":42},"\u002F\u002F2.值传递的方式给函数参数传值\n",[36,19673,19674],{"class":38,"line":113},[36,19675,19676],{"class":42},"\u002F\u002F3.以值方式返回局部对象\n",[36,19678,19679,19681],{"class":38,"line":119},[36,19680,15133],{"class":163},[36,19682,15610],{"class":55},[36,19684,19685],{"class":38,"line":131},[36,19686,2025],{"class":98},[36,19688,19689],{"class":38,"line":137},[36,19690,15155],{"class":163},[36,19692,19693,19695],{"class":38,"line":147},[36,19694,18958],{"class":55},[36,19696,2435],{"class":98},[36,19698,19699],{"class":38,"line":153},[36,19700,2489],{"class":98},[36,19702,19703,19705,19707,19710,19712],{"class":38,"line":191},[36,19704,10110],{"class":98},[36,19706,1655],{"class":163},[36,19708,19709],{"class":59}," \"Person的默认构造函数调用\"",[36,19711,1923],{"class":163},[36,19713,9281],{"class":98},[36,19715,19716],{"class":38,"line":197},[36,19717,2646],{"class":98},[36,19719,19720],{"class":38,"line":217},[36,19721,19722],{"class":42},"    \u002F\u002F有参构造\n",[36,19724,19725,19727,19729,19731,19733],{"class":38,"line":223},[36,19726,18958],{"class":55},[36,19728,621],{"class":98},[36,19730,624],{"class":163},[36,19732,16128],{"class":5667},[36,19734,627],{"class":98},[36,19736,19737],{"class":38,"line":243},[36,19738,2489],{"class":98},[36,19740,19741,19743,19745],{"class":38,"line":250},[36,19742,16182],{"class":98},[36,19744,176],{"class":163},[36,19746,8248],{"class":98},[36,19748,19749,19751,19753,19756,19758],{"class":38,"line":256},[36,19750,10110],{"class":98},[36,19752,1655],{"class":163},[36,19754,19755],{"class":59}," \"Person的有参构造函数调用\"",[36,19757,1923],{"class":163},[36,19759,9281],{"class":98},[36,19761,19762],{"class":38,"line":273},[36,19763,2646],{"class":98},[36,19765,19766],{"class":38,"line":278},[36,19767,19313],{"class":42},[36,19769,19770,19772,19774,19776,19778,19780,19782],{"class":38,"line":284},[36,19771,18958],{"class":55},[36,19773,621],{"class":98},[36,19775,7243],{"class":163},[36,19777,16008],{"class":55},[36,19779,11023],{"class":163},[36,19781,14],{"class":5667},[36,19783,627],{"class":98},[36,19785,19786],{"class":38,"line":315},[36,19787,2489],{"class":98},[36,19789,19790,19792,19794],{"class":38,"line":320},[36,19791,16182],{"class":98},[36,19793,176],{"class":163},[36,19795,19796],{"class":98}," p.m_Age;\n",[36,19798,19799,19801,19803,19806,19808],{"class":38,"line":326},[36,19800,10110],{"class":98},[36,19802,1655],{"class":163},[36,19804,19805],{"class":59}," \"Person的拷贝构造函数调用\"",[36,19807,1923],{"class":163},[36,19809,9281],{"class":98},[36,19811,19812],{"class":38,"line":343},[36,19813,2646],{"class":98},[36,19815,19816,19818],{"class":38,"line":348},[36,19817,18991],{"class":55},[36,19819,2435],{"class":98},[36,19821,19822],{"class":38,"line":354},[36,19823,2489],{"class":98},[36,19825,19826,19828,19830,19832,19834],{"class":38,"line":370},[36,19827,10110],{"class":98},[36,19829,1655],{"class":163},[36,19831,19006],{"class":59},[36,19833,1923],{"class":163},[36,19835,9281],{"class":98},[36,19837,19838],{"class":38,"line":375},[36,19839,2646],{"class":98},[36,19841,19842,19844],{"class":38,"line":381},[36,19843,2444],{"class":163},[36,19845,16105],{"class":98},[36,19847,19848],{"class":38,"line":399},[36,19849,4446],{"class":98},[36,19851,19852],{"class":38,"line":404},[36,19853,19666],{"class":42},[36,19855,19856,19858,19860],{"class":38,"line":410},[36,19857,5815],{"class":163},[36,19859,6039],{"class":55},[36,19861,2435],{"class":98},[36,19863,19864],{"class":38,"line":423},[36,19865,2025],{"class":98},[36,19867,19868,19871,19873,19875,19877],{"class":38,"line":436},[36,19869,19870],{"class":98},"    Person ",[36,19872,7581],{"class":55},[36,19874,621],{"class":98},[36,19876,1313],{"class":109},[36,19878,3170],{"class":98},[36,19880,19881,19883,19885],{"class":38,"line":441},[36,19882,19870],{"class":98},[36,19884,7484],{"class":55},[36,19886,17954],{"class":98},[36,19888,19889,19891,19893,19896,19898,19901,19903],{"class":38,"line":447},[36,19890,2030],{"class":98},[36,19892,1655],{"class":163},[36,19894,19895],{"class":59},"\"P2的年龄为：\"",[36,19897,1655],{"class":163},[36,19899,19900],{"class":98},"p2.m_Age",[36,19902,1655],{"class":163},[36,19904,1677],{"class":98},[36,19906,19907],{"class":38,"line":465},[36,19908,2044],{"class":98},[36,19910,19911],{"class":38,"line":470},[36,19912,19913],{"class":42},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[36,19915,19916],{"class":38,"line":476},[36,19917,19918],{"class":42},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[36,19920,19921,19923,19926,19928,19930,19932],{"class":38,"line":496},[36,19922,5815],{"class":163},[36,19924,19925],{"class":55}," doWork",[36,19927,621],{"class":98},[36,19929,19485],{"class":55},[36,19931,7276],{"class":5667},[36,19933,627],{"class":98},[36,19935,19936],{"class":38,"line":501},[36,19937,2025],{"class":98},[36,19939,19940,19942,19944,19947,19949],{"class":38,"line":507},[36,19941,6980],{"class":98},[36,19943,1655],{"class":163},[36,19945,19946],{"class":59}," \"doWork函数调用\"",[36,19948,1923],{"class":163},[36,19950,9281],{"class":98},[36,19952,19953],{"class":38,"line":517},[36,19954,2044],{"class":98},[36,19956,19957,19959,19961],{"class":38,"line":522},[36,19958,5815],{"class":163},[36,19960,6108],{"class":55},[36,19962,2435],{"class":98},[36,19964,19965],{"class":38,"line":528},[36,19966,2025],{"class":98},[36,19968,19969],{"class":38,"line":10203},[36,19970,15752],{"class":98},[36,19972,19973,19976],{"class":38,"line":10227},[36,19974,19975],{"class":55},"    doWork",[36,19977,19978],{"class":98},"(p);\n",[36,19980,19981],{"class":38,"line":10232},[36,19982,2044],{"class":98},[36,19984,19985],{"class":38,"line":10237},[36,19986,19987],{"class":42},"\u002F\u002F 3.以值方式返回局部对象\n",[36,19989,19990,19992,19995],{"class":38,"line":10242},[36,19991,19485],{"class":55},[36,19993,19994],{"class":55}," doWork2",[36,19996,2435],{"class":98},[36,19998,19999],{"class":38,"line":10251},[36,20000,2025],{"class":98},[36,20002,20003],{"class":38,"line":10256},[36,20004,19475],{"class":98},[36,20006,20007,20009,20011,20013,20015,20017,20019,20021,20023,20025,20027],{"class":38,"line":10262},[36,20008,2030],{"class":98},[36,20010,1655],{"class":163},[36,20012,621],{"class":98},[36,20014,624],{"class":163},[36,20016,6969],{"class":163},[36,20018,1043],{"class":98},[36,20020,967],{"class":163},[36,20022,7581],{"class":98},[36,20024,1655],{"class":163},[36,20026,1720],{"class":98},[36,20028,20029],{"class":42},"\u002F\u002F打印p1的地址\n",[36,20031,20032,20034,20037],{"class":38,"line":10283},[36,20033,4541],{"class":163},[36,20035,20036],{"class":98}," p1;",[36,20038,20039],{"class":42},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[36,20041,20042],{"class":38,"line":10289},[36,20043,2044],{"class":98},[36,20045,20046,20048,20050],{"class":38,"line":10303},[36,20047,5815],{"class":163},[36,20049,6180],{"class":55},[36,20051,2435],{"class":98},[36,20053,20054],{"class":38,"line":10309},[36,20055,2025],{"class":98},[36,20057,20058,20061,20063,20065],{"class":38,"line":10336},[36,20059,20060],{"class":98},"    Person p ",[36,20062,176],{"class":163},[36,20064,19994],{"class":55},[36,20066,6087],{"class":98},[36,20068,20069,20071,20073,20075,20077,20079,20081,20083,20085,20087,20089],{"class":38,"line":10345},[36,20070,2030],{"class":98},[36,20072,1655],{"class":163},[36,20074,621],{"class":98},[36,20076,624],{"class":163},[36,20078,6969],{"class":163},[36,20080,1043],{"class":98},[36,20082,967],{"class":163},[36,20084,14],{"class":98},[36,20086,1655],{"class":163},[36,20088,1720],{"class":98},[36,20090,20091],{"class":42},"\u002F\u002F打印p的地址\n",[36,20093,20094],{"class":38,"line":10351},[36,20095,2044],{"class":98},[36,20097,20098],{"class":38,"line":10359},[36,20099,247],{"emptyLinePlaceholder":246},[36,20101,20102],{"class":38,"line":10364},[36,20103,247],{"emptyLinePlaceholder":246},[36,20105,20106,20108,20110],{"class":38,"line":17043},[36,20107,624],{"class":163},[36,20109,2432],{"class":55},[36,20111,2435],{"class":98},[36,20113,20114],{"class":38,"line":17049},[36,20115,2025],{"class":98},[36,20117,20118],{"class":38,"line":17072},[36,20119,20120],{"class":42},"    \u002F\u002F test01();\n",[36,20122,20123],{"class":38,"line":17078},[36,20124,20125],{"class":42},"    \u002F\u002F test02();\n",[36,20127,20128,20131],{"class":38,"line":17101},[36,20129,20130],{"class":55},"    test03",[36,20132,6087],{"class":98},[36,20134,20135],{"class":38,"line":17115},[36,20136,20137],{"class":42},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[36,20139,20140],{"class":38,"line":17135},[36,20141,20142],{"class":42},"\u002F\u002F 输出结果如下：\n",[36,20144,20145],{"class":38,"line":17141},[36,20146,20147],{"class":42},"\u002F\u002F Person的默认构造函数调用\n",[36,20149,20150],{"class":38,"line":17152},[36,20151,20152],{"class":42},"\u002F\u002F 0x7fffffffceec\n",[36,20154,20155],{"class":38,"line":17175},[36,20156,20152],{"class":42},[36,20158,20159],{"class":38,"line":17197},[36,20160,20161],{"class":42},"\u002F\u002F Person的析构函数调用\n",[36,20163,20164],{"class":38,"line":17202},[36,20165,247],{"emptyLinePlaceholder":246},[36,20167,20168],{"class":38,"line":17208},[36,20169,20170],{"class":42},"\u002F\u002F 之前的输出结果如下：\n",[36,20172,20173],{"class":38,"line":17222},[36,20174,20147],{"class":42},[36,20176,20177],{"class":38,"line":17235},[36,20178,20179],{"class":42},"\u002F\u002F 地址\n",[36,20181,20182],{"class":38,"line":17240},[36,20183,20184],{"class":42},"\u002F\u002F Person的拷贝构造函数调用\n",[36,20186,20187],{"class":38,"line":17254},[36,20188,20161],{"class":42},[36,20190,20191],{"class":38,"line":17259},[36,20192,20179],{"class":42},[36,20194,20195],{"class":38,"line":17265},[36,20196,20197],{"class":42},"\u002F\u002F (这两次输出的地址也是不同的) \n",[36,20199,20200],{"class":38,"line":17270},[36,20201,20202],{"class":42},"\u002F\u002F Person的析构函数调用     \n",[36,20204,20205,20207,20209],{"class":38,"line":17284},[36,20206,4541],{"class":163},[36,20208,4544],{"class":109},[36,20210,1772],{"class":98},[36,20212,20213],{"class":38,"line":17289},[36,20214,2044],{"class":98},[14,20216,20217],{},"简化版理解",[26,20219,20221],{"className":609,"code":20220,"language":611,"meta":31,"style":31},"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",[33,20222,20223,20231,20235,20241,20254,20265,20269,20281,20294,20302,20306,20322,20335,20344,20348,20353,20359,20372,20376,20380,20387,20391,20395,20400,20408,20412,20428,20441,20454,20458,20463,20471,20475,20479,20484,20489,20505,20513,20520,20526,20530,20534,20539,20547,20551,20555,20578,20585,20589,20593,20601,20605,20615,20637,20641,20645,20649,20657,20661,20666,20671,20677,20681,20691,20695,20703],{"__ignoreMap":31},[36,20224,20225,20227,20229],{"class":38,"line":39},[36,20226,15133],{"class":163},[36,20228,16008],{"class":55},[36,20230,16011],{"class":98},[36,20232,20233],{"class":38,"line":46},[36,20234,15155],{"class":163},[36,20236,20237,20239],{"class":38,"line":52},[36,20238,18958],{"class":55},[36,20240,11292],{"class":98},[36,20242,20243,20245,20247,20250,20252],{"class":38,"line":66},[36,20244,10110],{"class":98},[36,20246,1655],{"class":163},[36,20248,20249],{"class":59}," \"无参构造函数!\"",[36,20251,1923],{"class":163},[36,20253,9281],{"class":98},[36,20255,20256,20259,20261,20263],{"class":38,"line":72},[36,20257,20258],{"class":98},"        mAge ",[36,20260,176],{"class":163},[36,20262,4544],{"class":109},[36,20264,1772],{"class":98},[36,20266,20267],{"class":38,"line":82},[36,20268,2646],{"class":98},[36,20270,20271,20273,20275,20277,20279],{"class":38,"line":88},[36,20272,18958],{"class":55},[36,20274,621],{"class":98},[36,20276,624],{"class":163},[36,20278,16128],{"class":5667},[36,20280,12881],{"class":98},[36,20282,20283,20285,20287,20290,20292],{"class":38,"line":113},[36,20284,10110],{"class":98},[36,20286,1655],{"class":163},[36,20288,20289],{"class":59}," \"有参构造函数!\"",[36,20291,1923],{"class":163},[36,20293,9281],{"class":98},[36,20295,20296,20298,20300],{"class":38,"line":119},[36,20297,20258],{"class":98},[36,20299,176],{"class":163},[36,20301,8248],{"class":98},[36,20303,20304],{"class":38,"line":131},[36,20305,2646],{"class":98},[36,20307,20308,20310,20312,20314,20316,20318,20320],{"class":38,"line":137},[36,20309,18958],{"class":55},[36,20311,621],{"class":98},[36,20313,7243],{"class":163},[36,20315,16008],{"class":55},[36,20317,967],{"class":163},[36,20319,7276],{"class":5667},[36,20321,12881],{"class":98},[36,20323,20324,20326,20328,20331,20333],{"class":38,"line":147},[36,20325,10110],{"class":98},[36,20327,1655],{"class":163},[36,20329,20330],{"class":59}," \"拷贝构造函数!\"",[36,20332,1923],{"class":163},[36,20334,9281],{"class":98},[36,20336,20337,20339,20341],{"class":38,"line":153},[36,20338,20258],{"class":98},[36,20340,176],{"class":163},[36,20342,20343],{"class":98}," p.mAge;\n",[36,20345,20346],{"class":38,"line":191},[36,20347,2646],{"class":98},[36,20349,20350],{"class":38,"line":197},[36,20351,20352],{"class":42},"    \u002F\u002F析构函数在释放内存之前调用\n",[36,20354,20355,20357],{"class":38,"line":217},[36,20356,18991],{"class":55},[36,20358,11292],{"class":98},[36,20360,20361,20363,20365,20368,20370],{"class":38,"line":223},[36,20362,10110],{"class":98},[36,20364,1655],{"class":163},[36,20366,20367],{"class":59}," \"析构函数!\"",[36,20369,1923],{"class":163},[36,20371,9281],{"class":98},[36,20373,20374],{"class":38,"line":243},[36,20375,2646],{"class":98},[36,20377,20378],{"class":38,"line":250},[36,20379,15155],{"class":163},[36,20381,20382,20384],{"class":38,"line":256},[36,20383,2444],{"class":163},[36,20385,20386],{"class":98}," mAge;\n",[36,20388,20389],{"class":38,"line":273},[36,20390,4446],{"class":98},[36,20392,20393],{"class":38,"line":278},[36,20394,247],{"emptyLinePlaceholder":246},[36,20396,20397],{"class":38,"line":284},[36,20398,20399],{"class":42},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[36,20401,20402,20404,20406],{"class":38,"line":315},[36,20403,5815],{"class":163},[36,20405,6039],{"class":55},[36,20407,11292],{"class":98},[36,20409,20410],{"class":38,"line":320},[36,20411,247],{"emptyLinePlaceholder":246},[36,20413,20414,20416,20419,20421,20423,20425],{"class":38,"line":326},[36,20415,19870],{"class":98},[36,20417,20418],{"class":55},"man",[36,20420,621],{"class":98},[36,20422,926],{"class":109},[36,20424,6417],{"class":98},[36,20426,20427],{"class":42}," \u002F\u002Fp对象已经创建完毕\n",[36,20429,20430,20432,20435,20438],{"class":38,"line":343},[36,20431,19870],{"class":98},[36,20433,20434],{"class":55},"newman",[36,20436,20437],{"class":98},"(man);",[36,20439,20440],{"class":42}," \u002F\u002F调用拷贝构造函数\n",[36,20442,20443,20446,20448,20451],{"class":38,"line":348},[36,20444,20445],{"class":98},"    Person newman2 ",[36,20447,176],{"class":163},[36,20449,20450],{"class":98}," man;",[36,20452,20453],{"class":42}," \u002F\u002F拷贝构造\n",[36,20455,20456],{"class":38,"line":354},[36,20457,247],{"emptyLinePlaceholder":246},[36,20459,20460],{"class":38,"line":370},[36,20461,20462],{"class":42},"    \u002F\u002FPerson newman3;\n",[36,20464,20465,20468],{"class":38,"line":375},[36,20466,20467],{"class":42},"    \u002F\u002Fnewman3 = man;",[36,20469,20470],{"class":42}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[36,20472,20473],{"class":38,"line":381},[36,20474,2044],{"class":98},[36,20476,20477],{"class":38,"line":399},[36,20478,247],{"emptyLinePlaceholder":246},[36,20480,20481],{"class":38,"line":404},[36,20482,20483],{"class":42},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[36,20485,20486],{"class":38,"line":410},[36,20487,20488],{"class":42},"\u002F\u002F相当于Person p1 = p;\n",[36,20490,20491,20493,20495,20497,20499,20502],{"class":38,"line":423},[36,20492,5815],{"class":163},[36,20494,19925],{"class":55},[36,20496,621],{"class":98},[36,20498,19485],{"class":55},[36,20500,20501],{"class":5667}," p1",[36,20503,20504],{"class":98},") {}\n",[36,20506,20507,20509,20511],{"class":38,"line":436},[36,20508,5815],{"class":163},[36,20510,6108],{"class":55},[36,20512,11292],{"class":98},[36,20514,20515,20517],{"class":38,"line":441},[36,20516,19043],{"class":98},[36,20518,20519],{"class":42}," \u002F\u002F无参构造函数\n",[36,20521,20522,20524],{"class":38,"line":447},[36,20523,19975],{"class":55},[36,20525,19978],{"class":98},[36,20527,20528],{"class":38,"line":465},[36,20529,2044],{"class":98},[36,20531,20532],{"class":38,"line":470},[36,20533,247],{"emptyLinePlaceholder":246},[36,20535,20536],{"class":38,"line":476},[36,20537,20538],{"class":42},"\u002F\u002F3. 以值方式返回局部对象\n",[36,20540,20541,20543,20545],{"class":38,"line":496},[36,20542,19485],{"class":55},[36,20544,19994],{"class":55},[36,20546,2435],{"class":98},[36,20548,20549],{"class":38,"line":501},[36,20550,2025],{"class":98},[36,20552,20553],{"class":38,"line":507},[36,20554,19475],{"class":98},[36,20556,20557,20559,20561,20563,20565,20567,20569,20571,20574,20576],{"class":38,"line":517},[36,20558,6980],{"class":98},[36,20560,1655],{"class":163},[36,20562,2130],{"class":98},[36,20564,624],{"class":163},[36,20566,6969],{"class":163},[36,20568,1043],{"class":98},[36,20570,967],{"class":163},[36,20572,20573],{"class":98},"p1 ",[36,20575,1655],{"class":163},[36,20577,9281],{"class":98},[36,20579,20580,20582],{"class":38,"line":522},[36,20581,4541],{"class":163},[36,20583,20584],{"class":98}," p1;\n",[36,20586,20587],{"class":38,"line":528},[36,20588,2044],{"class":98},[36,20590,20591],{"class":38,"line":10203},[36,20592,247],{"emptyLinePlaceholder":246},[36,20594,20595,20597,20599],{"class":38,"line":10227},[36,20596,5815],{"class":163},[36,20598,6180],{"class":55},[36,20600,2435],{"class":98},[36,20602,20603],{"class":38,"line":10232},[36,20604,2025],{"class":98},[36,20606,20607,20609,20611,20613],{"class":38,"line":10237},[36,20608,20060],{"class":98},[36,20610,176],{"class":163},[36,20612,19994],{"class":55},[36,20614,6087],{"class":98},[36,20616,20617,20619,20621,20623,20625,20627,20629,20631,20633,20635],{"class":38,"line":10242},[36,20618,6980],{"class":98},[36,20620,1655],{"class":163},[36,20622,2130],{"class":98},[36,20624,624],{"class":163},[36,20626,6969],{"class":163},[36,20628,1043],{"class":98},[36,20630,967],{"class":163},[36,20632,11887],{"class":98},[36,20634,1655],{"class":163},[36,20636,9281],{"class":98},[36,20638,20639],{"class":38,"line":10251},[36,20640,2044],{"class":98},[36,20642,20643],{"class":38,"line":10256},[36,20644,247],{"emptyLinePlaceholder":246},[36,20646,20647],{"class":38,"line":10262},[36,20648,247],{"emptyLinePlaceholder":246},[36,20650,20651,20653,20655],{"class":38,"line":10283},[36,20652,624],{"class":163},[36,20654,2432],{"class":55},[36,20656,11292],{"class":98},[36,20658,20659],{"class":38,"line":10289},[36,20660,247],{"emptyLinePlaceholder":246},[36,20662,20663],{"class":38,"line":10303},[36,20664,20665],{"class":42},"    \u002F\u002Ftest01();\n",[36,20667,20668],{"class":38,"line":10309},[36,20669,20670],{"class":42},"    \u002F\u002Ftest02();\n",[36,20672,20673,20675],{"class":38,"line":10336},[36,20674,20130],{"class":55},[36,20676,6087],{"class":98},[36,20678,20679],{"class":38,"line":10345},[36,20680,247],{"emptyLinePlaceholder":246},[36,20682,20683,20685,20687,20689],{"class":38,"line":10351},[36,20684,2762],{"class":55},[36,20686,621],{"class":98},[36,20688,2767],{"class":59},[36,20690,3170],{"class":98},[36,20692,20693],{"class":38,"line":10359},[36,20694,247],{"emptyLinePlaceholder":246},[36,20696,20697,20699,20701],{"class":38,"line":10364},[36,20698,4541],{"class":163},[36,20700,4544],{"class":109},[36,20702,1772],{"class":98},[36,20704,20705],{"class":38,"line":17043},[36,20706,2044],{"class":98},[588,20708,20710],{"id":20709},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,20712,20713],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,20715,20716],{},"1．默认构造函数(无参，函数体为空)",[14,20718,20719],{},"2．默认析构函数(无参，函数体为空)",[14,20721,20722],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,20724,20725],{},"构造函数调用规则如下：",[1618,20727,20728,20731],{},[574,20729,20730],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[574,20732,20733],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[26,20735,20737],{"className":609,"code":20736,"language":611,"meta":31,"style":31},"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",[33,20738,20739,20747,20751,20756,20762,20774,20778,20783,20795,20804,20816,20820,20824,20840,20849,20861,20865,20869,20875,20887,20891,20895,20901,20905,20909,20917,20921,20933,20938,20946,20950,20968,20972,20976,20984,20988,20993,21001,21016,21029,21033,21038,21045,21061,21074,21078,21082,21090,21094,21100,21104,21114,21118,21126],{"__ignoreMap":31},[36,20740,20741,20743,20745],{"class":38,"line":39},[36,20742,15133],{"class":163},[36,20744,16008],{"class":55},[36,20746,16011],{"class":98},[36,20748,20749],{"class":38,"line":46},[36,20750,15155],{"class":163},[36,20752,20753],{"class":38,"line":52},[36,20754,20755],{"class":42},"    \u002F\u002F无参（默认）构造函数\n",[36,20757,20758,20760],{"class":38,"line":66},[36,20759,18958],{"class":55},[36,20761,11292],{"class":98},[36,20763,20764,20766,20768,20770,20772],{"class":38,"line":72},[36,20765,10110],{"class":98},[36,20767,1655],{"class":163},[36,20769,20249],{"class":59},[36,20771,1923],{"class":163},[36,20773,9281],{"class":98},[36,20775,20776],{"class":38,"line":82},[36,20777,2646],{"class":98},[36,20779,20780],{"class":38,"line":88},[36,20781,20782],{"class":42},"    \u002F\u002F有参构造函数\n",[36,20784,20785,20787,20789,20791,20793],{"class":38,"line":113},[36,20786,18958],{"class":55},[36,20788,621],{"class":98},[36,20790,624],{"class":163},[36,20792,1877],{"class":5667},[36,20794,12881],{"class":98},[36,20796,20797,20800,20802],{"class":38,"line":119},[36,20798,20799],{"class":98},"        age ",[36,20801,176],{"class":163},[36,20803,1911],{"class":98},[36,20805,20806,20808,20810,20812,20814],{"class":38,"line":131},[36,20807,10110],{"class":98},[36,20809,1655],{"class":163},[36,20811,20289],{"class":59},[36,20813,1923],{"class":163},[36,20815,9281],{"class":98},[36,20817,20818],{"class":38,"line":137},[36,20819,2646],{"class":98},[36,20821,20822],{"class":38,"line":147},[36,20823,19313],{"class":42},[36,20825,20826,20828,20830,20832,20834,20836,20838],{"class":38,"line":153},[36,20827,18958],{"class":55},[36,20829,621],{"class":98},[36,20831,7243],{"class":163},[36,20833,16008],{"class":55},[36,20835,967],{"class":163},[36,20837,7276],{"class":5667},[36,20839,12881],{"class":98},[36,20841,20842,20844,20846],{"class":38,"line":191},[36,20843,20799],{"class":98},[36,20845,176],{"class":163},[36,20847,20848],{"class":98}," p.age;\n",[36,20850,20851,20853,20855,20857,20859],{"class":38,"line":197},[36,20852,10110],{"class":98},[36,20854,1655],{"class":163},[36,20856,20330],{"class":59},[36,20858,1923],{"class":163},[36,20860,9281],{"class":98},[36,20862,20863],{"class":38,"line":217},[36,20864,2646],{"class":98},[36,20866,20867],{"class":38,"line":223},[36,20868,18986],{"class":42},[36,20870,20871,20873],{"class":38,"line":243},[36,20872,18991],{"class":55},[36,20874,11292],{"class":98},[36,20876,20877,20879,20881,20883,20885],{"class":38,"line":250},[36,20878,10110],{"class":98},[36,20880,1655],{"class":163},[36,20882,20367],{"class":59},[36,20884,1923],{"class":163},[36,20886,9281],{"class":98},[36,20888,20889],{"class":38,"line":256},[36,20890,2646],{"class":98},[36,20892,20893],{"class":38,"line":273},[36,20894,15155],{"class":163},[36,20896,20897,20899],{"class":38,"line":278},[36,20898,2444],{"class":163},[36,20900,8248],{"class":98},[36,20902,20903],{"class":38,"line":284},[36,20904,4446],{"class":98},[36,20906,20907],{"class":38,"line":315},[36,20908,247],{"emptyLinePlaceholder":246},[36,20910,20911,20913,20915],{"class":38,"line":320},[36,20912,5815],{"class":163},[36,20914,6039],{"class":55},[36,20916,2435],{"class":98},[36,20918,20919],{"class":38,"line":326},[36,20920,2025],{"class":98},[36,20922,20923,20925,20927,20929,20931],{"class":38,"line":343},[36,20924,19870],{"class":98},[36,20926,7581],{"class":55},[36,20928,621],{"class":98},[36,20930,1264],{"class":109},[36,20932,3170],{"class":98},[36,20934,20935],{"class":38,"line":348},[36,20936,20937],{"class":42},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[36,20939,20940,20942,20944],{"class":38,"line":354},[36,20941,19870],{"class":98},[36,20943,7484],{"class":55},[36,20945,17954],{"class":98},[36,20947,20948],{"class":38,"line":370},[36,20949,247],{"emptyLinePlaceholder":246},[36,20951,20952,20954,20956,20959,20961,20964,20966],{"class":38,"line":375},[36,20953,6980],{"class":98},[36,20955,1655],{"class":163},[36,20957,20958],{"class":59}," \"p2的年龄为： \"",[36,20960,1923],{"class":163},[36,20962,20963],{"class":98}," p2.age ",[36,20965,1655],{"class":163},[36,20967,9281],{"class":98},[36,20969,20970],{"class":38,"line":381},[36,20971,2044],{"class":98},[36,20973,20974],{"class":38,"line":399},[36,20975,247],{"emptyLinePlaceholder":246},[36,20977,20978,20980,20982],{"class":38,"line":404},[36,20979,5815],{"class":163},[36,20981,6108],{"class":55},[36,20983,2435],{"class":98},[36,20985,20986],{"class":38,"line":410},[36,20987,2025],{"class":98},[36,20989,20990],{"class":38,"line":423},[36,20991,20992],{"class":42},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[36,20994,20995,20998],{"class":38,"line":436},[36,20996,20997],{"class":98},"    Person p1;",[36,20999,21000],{"class":42}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[36,21002,21003,21005,21007,21009,21011,21013],{"class":38,"line":441},[36,21004,19870],{"class":98},[36,21006,7484],{"class":55},[36,21008,621],{"class":98},[36,21010,1060],{"class":109},[36,21012,6417],{"class":98},[36,21014,21015],{"class":42}," \u002F\u002F用户提供的有参\n",[36,21017,21018,21020,21023,21026],{"class":38,"line":447},[36,21019,19870],{"class":98},[36,21021,21022],{"class":55},"p3",[36,21024,21025],{"class":98},"(p2);",[36,21027,21028],{"class":42}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[36,21030,21031],{"class":38,"line":465},[36,21032,247],{"emptyLinePlaceholder":246},[36,21034,21035],{"class":38,"line":470},[36,21036,21037],{"class":42},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[36,21039,21040,21043],{"class":38,"line":476},[36,21041,21042],{"class":98},"    Person p4;",[36,21044,21000],{"class":42},[36,21046,21047,21049,21052,21054,21056,21058],{"class":38,"line":496},[36,21048,19870],{"class":98},[36,21050,21051],{"class":55},"p5",[36,21053,621],{"class":98},[36,21055,1060],{"class":109},[36,21057,6417],{"class":98},[36,21059,21060],{"class":42}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[36,21062,21063,21065,21068,21071],{"class":38,"line":501},[36,21064,19870],{"class":98},[36,21066,21067],{"class":55},"p6",[36,21069,21070],{"class":98},"(p5);",[36,21072,21073],{"class":42}," \u002F\u002F用户自己提供拷贝构造\n",[36,21075,21076],{"class":38,"line":507},[36,21077,2044],{"class":98},[36,21079,21080],{"class":38,"line":517},[36,21081,247],{"emptyLinePlaceholder":246},[36,21083,21084,21086,21088],{"class":38,"line":522},[36,21085,624],{"class":163},[36,21087,2432],{"class":55},[36,21089,11292],{"class":98},[36,21091,21092],{"class":38,"line":528},[36,21093,247],{"emptyLinePlaceholder":246},[36,21095,21096,21098],{"class":38,"line":10203},[36,21097,6084],{"class":55},[36,21099,6087],{"class":98},[36,21101,21102],{"class":38,"line":10227},[36,21103,247],{"emptyLinePlaceholder":246},[36,21105,21106,21108,21110,21112],{"class":38,"line":10232},[36,21107,2762],{"class":55},[36,21109,621],{"class":98},[36,21111,2767],{"class":59},[36,21113,3170],{"class":98},[36,21115,21116],{"class":38,"line":10237},[36,21117,247],{"emptyLinePlaceholder":246},[36,21119,21120,21122,21124],{"class":38,"line":10242},[36,21121,4541],{"class":163},[36,21123,4544],{"class":109},[36,21125,1772],{"class":98},[36,21127,21128],{"class":38,"line":10251},[36,21129,2044],{"class":98},[588,21131,21133],{"id":21132},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,21135,21136],{},"浅拷贝：简单的赋值拷贝操作",[14,21138,21139],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[26,21141,21143],{"className":609,"code":21142,"language":611,"meta":31,"style":31},"#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",[33,21144,21145,21151,21161,21167,21171,21175,21180,21186,21190,21203,21207,21211,21218,21222,21232,21247,21260,21264,21269,21274,21290,21294,21307,21312,21317,21322,21331,21336,21351,21355,21359,21363,21369,21373,21378,21393,21397,21408,21422,21426,21435,21439,21445,21457,21461,21469,21473,21490,21521,21529,21557,21561,21565,21573,21577,21583],{"__ignoreMap":31},[36,21146,21147,21149],{"class":38,"line":39},[36,21148,2409],{"class":163},[36,21150,2412],{"class":59},[36,21152,21153,21155,21157,21159],{"class":38,"line":46},[36,21154,2417],{"class":163},[36,21156,2420],{"class":163},[36,21158,2423],{"class":55},[36,21160,1772],{"class":98},[36,21162,21163,21165],{"class":38,"line":52},[36,21164,15133],{"class":163},[36,21166,15610],{"class":55},[36,21168,21169],{"class":38,"line":66},[36,21170,2025],{"class":98},[36,21172,21173],{"class":38,"line":72},[36,21174,15155],{"class":163},[36,21176,21177],{"class":38,"line":82},[36,21178,21179],{"class":42},"    \u002F\u002F默认构造函数\n",[36,21181,21182,21184],{"class":38,"line":88},[36,21183,18958],{"class":55},[36,21185,2435],{"class":98},[36,21187,21188],{"class":38,"line":113},[36,21189,2489],{"class":98},[36,21191,21192,21194,21196,21199,21201],{"class":38,"line":119},[36,21193,3902],{"class":98},[36,21195,1655],{"class":163},[36,21197,21198],{"class":59},"\"默认构造函数\"",[36,21200,1655],{"class":163},[36,21202,1677],{"class":98},[36,21204,21205],{"class":38,"line":131},[36,21206,2646],{"class":98},[36,21208,21209],{"class":38,"line":137},[36,21210,20782],{"class":42},[36,21212,21213,21215],{"class":38,"line":147},[36,21214,18991],{"class":55},[36,21216,21217],{"class":98},"(int age,int height)\n",[36,21219,21220],{"class":38,"line":153},[36,21221,2489],{"class":98},[36,21223,21224,21227,21229],{"class":38,"line":191},[36,21225,21226],{"class":98},"        m_Age",[36,21228,176],{"class":163},[36,21230,21231],{"class":98},"age;\n",[36,21233,21234,21237,21239,21241,21244],{"class":38,"line":197},[36,21235,21236],{"class":98},"        m_Height",[36,21238,12156],{"class":163},[36,21240,2841],{"class":163},[36,21242,21243],{"class":98},"(height);",[36,21245,21246],{"class":42},"\u002F\u002F放到堆区\n",[36,21248,21249,21251,21253,21256,21258],{"class":38,"line":217},[36,21250,3902],{"class":98},[36,21252,1655],{"class":163},[36,21254,21255],{"class":59},"\"有参构造函数\"",[36,21257,1655],{"class":163},[36,21259,1677],{"class":98},[36,21261,21262],{"class":38,"line":223},[36,21263,2646],{"class":98},[36,21265,21266],{"class":38,"line":243},[36,21267,21268],{"class":42},"    \u002F\u002F深拷贝解决上述问题\n",[36,21270,21271],{"class":38,"line":250},[36,21272,21273],{"class":42},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[36,21275,21276,21278,21280,21282,21284,21286,21288],{"class":38,"line":256},[36,21277,18958],{"class":55},[36,21279,621],{"class":98},[36,21281,7243],{"class":163},[36,21283,16008],{"class":55},[36,21285,11023],{"class":163},[36,21287,14],{"class":5667},[36,21289,627],{"class":98},[36,21291,21292],{"class":38,"line":273},[36,21293,2489],{"class":98},[36,21295,21296,21298,21300,21303,21305],{"class":38,"line":278},[36,21297,3902],{"class":98},[36,21299,1655],{"class":163},[36,21301,21302],{"class":59},"\"拷贝构造函数\"",[36,21304,1655],{"class":163},[36,21306,1677],{"class":98},[36,21308,21309],{"class":38,"line":284},[36,21310,21311],{"class":42},"        \u002F\u002F编译器默认的写如下注释部分\n",[36,21313,21314],{"class":38,"line":315},[36,21315,21316],{"class":42},"        \u002F\u002Fm_Age=p.m_Age;\n",[36,21318,21319],{"class":38,"line":320},[36,21320,21321],{"class":42},"        \u002F\u002Fm_Height=p.m_Height;\n",[36,21323,21324,21326,21328],{"class":38,"line":326},[36,21325,21226],{"class":98},[36,21327,176],{"class":163},[36,21329,21330],{"class":98},"p.m_Age;\n",[36,21332,21333],{"class":38,"line":343},[36,21334,21335],{"class":42},"        \u002F\u002F深拷贝操作\n",[36,21337,21338,21340,21342,21344,21346,21348],{"class":38,"line":348},[36,21339,21236],{"class":98},[36,21341,12156],{"class":163},[36,21343,2841],{"class":163},[36,21345,621],{"class":98},[36,21347,1069],{"class":163},[36,21349,21350],{"class":98},"p.m_Height);\n",[36,21352,21353],{"class":38,"line":354},[36,21354,2646],{"class":98},[36,21356,21357],{"class":38,"line":370},[36,21358,247],{"emptyLinePlaceholder":246},[36,21360,21361],{"class":38,"line":375},[36,21362,18986],{"class":42},[36,21364,21365,21367],{"class":38,"line":381},[36,21366,18991],{"class":55},[36,21368,2435],{"class":98},[36,21370,21371],{"class":38,"line":399},[36,21372,2489],{"class":98},[36,21374,21375],{"class":38,"line":404},[36,21376,21377],{"class":42},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[36,21379,21380,21382,21385,21388,21391],{"class":38,"line":410},[36,21381,2955],{"class":163},[36,21383,21384],{"class":98},"(m_Height ",[36,21386,21387],{"class":163},"!=",[36,21389,21390],{"class":109}," NULL",[36,21392,627],{"class":98},[36,21394,21395],{"class":38,"line":423},[36,21396,2968],{"class":98},[36,21398,21399,21402,21405],{"class":38,"line":436},[36,21400,21401],{"class":163},"            delete",[36,21403,21404],{"class":98}," m_Height;",[36,21406,21407],{"class":42}," \u002F\u002F释放堆区内存\n",[36,21409,21410,21413,21415,21417,21419],{"class":38,"line":441},[36,21411,21412],{"class":98},"            m_Height",[36,21414,176],{"class":163},[36,21416,2851],{"class":109},[36,21418,674],{"class":98},[36,21420,21421],{"class":42}," \u002F\u002F防止野指针\n",[36,21423,21424],{"class":38,"line":447},[36,21425,2987],{"class":98},[36,21427,21428,21430,21432],{"class":38,"line":465},[36,21429,3902],{"class":98},[36,21431,1655],{"class":163},[36,21433,21434],{"class":59},"\"Person的析构函数调用\"\n",[36,21436,21437],{"class":38,"line":470},[36,21438,2646],{"class":98},[36,21440,21441,21443],{"class":38,"line":476},[36,21442,2444],{"class":163},[36,21444,16105],{"class":98},[36,21446,21447,21449,21451,21454],{"class":38,"line":496},[36,21448,2444],{"class":163},[36,21450,6969],{"class":163},[36,21452,21453],{"class":98},"m_Height;",[36,21455,21456],{"class":42}," \u002F\u002F定义一个指针，指向身高\n",[36,21458,21459],{"class":38,"line":501},[36,21460,4446],{"class":98},[36,21462,21463,21465,21467],{"class":38,"line":507},[36,21464,5815],{"class":163},[36,21466,6039],{"class":55},[36,21468,2435],{"class":98},[36,21470,21471],{"class":38,"line":517},[36,21472,2025],{"class":98},[36,21474,21475,21477,21479,21481,21483,21485,21488],{"class":38,"line":522},[36,21476,19870],{"class":98},[36,21478,7581],{"class":55},[36,21480,621],{"class":98},[36,21482,1264],{"class":109},[36,21484,992],{"class":98},[36,21486,21487],{"class":109},"160",[36,21489,3170],{"class":98},[36,21491,21492,21494,21496,21499,21501,21504,21506,21509,21511,21514,21516,21518],{"class":38,"line":528},[36,21493,2030],{"class":98},[36,21495,1655],{"class":163},[36,21497,21498],{"class":59},"\"p1的年龄为:\"",[36,21500,1655],{"class":163},[36,21502,21503],{"class":98},"p1.m_Age",[36,21505,1655],{"class":163},[36,21507,21508],{"class":59},"\"身高为：\"",[36,21510,6870],{"class":163},[36,21512,21513],{"class":98},"p1.m_Height",[36,21515,1655],{"class":163},[36,21517,1720],{"class":98},[36,21519,21520],{"class":42},"  \u002F\u002F18\n",[36,21522,21523,21525,21527],{"class":38,"line":10203},[36,21524,19870],{"class":98},[36,21526,7484],{"class":55},[36,21528,17954],{"class":98},[36,21530,21531,21533,21535,21538,21540,21542,21544,21546,21548,21551,21553,21555],{"class":38,"line":10227},[36,21532,2030],{"class":98},[36,21534,1655],{"class":163},[36,21536,21537],{"class":59},"\"p2的年龄为：\"",[36,21539,1655],{"class":163},[36,21541,19900],{"class":98},[36,21543,1655],{"class":163},[36,21545,21508],{"class":59},[36,21547,6870],{"class":163},[36,21549,21550],{"class":98},"p2.m_Height",[36,21552,1655],{"class":163},[36,21554,1720],{"class":98},[36,21556,21520],{"class":42},[36,21558,21559],{"class":38,"line":10232},[36,21560,13649],{"class":98},[36,21562,21563],{"class":38,"line":10237},[36,21564,2044],{"class":98},[36,21566,21567,21569,21571],{"class":38,"line":10242},[36,21568,624],{"class":163},[36,21570,2432],{"class":55},[36,21572,2435],{"class":98},[36,21574,21575],{"class":38,"line":10251},[36,21576,2025],{"class":98},[36,21578,21579,21581],{"class":38,"line":10256},[36,21580,6084],{"class":55},[36,21582,6087],{"class":98},[36,21584,21585],{"class":38,"line":10262},[36,21586,2044],{"class":98},[14,21588,21589],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,21591,21592],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,21594,21595],{},[1941,21596],{"alt":31,"src":21597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,21599,21600],{},"浅拷贝问题要使用深拷贝来解决",[14,21602,21603],{},[1941,21604],{"alt":31,"src":21605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,21607,21608],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[588,21610,21612],{"id":21611},"_826初始化列表","8.2.6初始化列表",[14,21614,21615],{},"作用：初始化属性",[14,21617,5632],{},[26,21619,21622],{"className":21620,"code":21621,"language":5638},[5636],"构造函数():属性1(值1),属性2(值2).....{}\n",[33,21623,21621],{"__ignoreMap":31},[14,21625,21626],{},"例子",[26,21628,21630],{"className":609,"code":21629,"language":611,"meta":31,"style":31},"#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",[33,21631,21632,21638,21648,21654,21658,21663,21667,21672,21677,21682,21687,21692,21697,21701,21706,21711,21754,21763,21781,21799,21817,21821,21825,21832,21839,21846,21850,21854,21862,21866,21870,21890,21899,21903,21907,21917,21921,21929],{"__ignoreMap":31},[36,21633,21634,21636],{"class":38,"line":39},[36,21635,2409],{"class":163},[36,21637,2412],{"class":59},[36,21639,21640,21642,21644,21646],{"class":38,"line":46},[36,21641,2417],{"class":163},[36,21643,2420],{"class":163},[36,21645,2423],{"class":55},[36,21647,1772],{"class":98},[36,21649,21650,21652],{"class":38,"line":52},[36,21651,15133],{"class":163},[36,21653,15610],{"class":55},[36,21655,21656],{"class":38,"line":66},[36,21657,2025],{"class":98},[36,21659,21660],{"class":38,"line":72},[36,21661,21662],{"class":163},"    public:\n",[36,21664,21665],{"class":38,"line":82},[36,21666,247],{"emptyLinePlaceholder":246},[36,21668,21669],{"class":38,"line":88},[36,21670,21671],{"class":42},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[36,21673,21674],{"class":38,"line":113},[36,21675,21676],{"class":42},"    \u002F\u002FPerson(int a, int b, int c) {\n",[36,21678,21679],{"class":38,"line":119},[36,21680,21681],{"class":42},"    \u002F\u002F  m_A = a;\n",[36,21683,21684],{"class":38,"line":131},[36,21685,21686],{"class":42},"    \u002F\u002F  m_B = b;\n",[36,21688,21689],{"class":38,"line":137},[36,21690,21691],{"class":42},"    \u002F\u002F  m_C = c;\n",[36,21693,21694],{"class":38,"line":147},[36,21695,21696],{"class":42},"    \u002F\u002F}\n",[36,21698,21699],{"class":38,"line":153},[36,21700,247],{"emptyLinePlaceholder":246},[36,21702,21703],{"class":38,"line":191},[36,21704,21705],{"class":42},"    \u002F\u002F初始化列表方式初始化\n",[36,21707,21708],{"class":38,"line":197},[36,21709,21710],{"class":42},"    \u002F\u002F使用有参构造函数\n",[36,21712,21713,21715,21717,21719,21721,21723,21725,21727,21729,21731,21733,21736,21739,21742,21745,21748,21751],{"class":38,"line":217},[36,21714,18958],{"class":55},[36,21716,621],{"class":98},[36,21718,624],{"class":163},[36,21720,1877],{"class":5667},[36,21722,12874],{"class":98},[36,21724,624],{"class":163},[36,21726,3284],{"class":5667},[36,21728,12874],{"class":98},[36,21730,624],{"class":163},[36,21732,3300],{"class":5667},[36,21734,21735],{"class":98},") :",[36,21737,21738],{"class":55},"m_A",[36,21740,21741],{"class":98},"(a), ",[36,21743,21744],{"class":55},"m_B",[36,21746,21747],{"class":98},"(b), ",[36,21749,21750],{"class":55},"m_C",[36,21752,21753],{"class":98},"(c) {}\n",[36,21755,21756,21758,21761],{"class":38,"line":223},[36,21757,15348],{"class":163},[36,21759,21760],{"class":55}," PrintPerson",[36,21762,11292],{"class":98},[36,21764,21765,21767,21769,21772,21774,21777,21779],{"class":38,"line":243},[36,21766,10110],{"class":98},[36,21768,1655],{"class":163},[36,21770,21771],{"class":59}," \"mA:\"",[36,21773,1923],{"class":163},[36,21775,21776],{"class":98}," m_A ",[36,21778,1655],{"class":163},[36,21780,9281],{"class":98},[36,21782,21783,21785,21787,21790,21792,21795,21797],{"class":38,"line":250},[36,21784,10110],{"class":98},[36,21786,1655],{"class":163},[36,21788,21789],{"class":59}," \"mB:\"",[36,21791,1923],{"class":163},[36,21793,21794],{"class":98}," m_B ",[36,21796,1655],{"class":163},[36,21798,9281],{"class":98},[36,21800,21801,21803,21805,21808,21810,21813,21815],{"class":38,"line":256},[36,21802,10110],{"class":98},[36,21804,1655],{"class":163},[36,21806,21807],{"class":59}," \"mC:\"",[36,21809,1923],{"class":163},[36,21811,21812],{"class":98}," m_C ",[36,21814,1655],{"class":163},[36,21816,9281],{"class":98},[36,21818,21819],{"class":38,"line":273},[36,21820,2646],{"class":98},[36,21822,21823],{"class":38,"line":278},[36,21824,15661],{"class":163},[36,21826,21827,21829],{"class":38,"line":284},[36,21828,2444],{"class":163},[36,21830,21831],{"class":98}," m_A;\n",[36,21833,21834,21836],{"class":38,"line":315},[36,21835,2444],{"class":163},[36,21837,21838],{"class":98}," m_B;\n",[36,21840,21841,21843],{"class":38,"line":320},[36,21842,2444],{"class":163},[36,21844,21845],{"class":98}," m_C;\n",[36,21847,21848],{"class":38,"line":326},[36,21849,4446],{"class":98},[36,21851,21852],{"class":38,"line":343},[36,21853,247],{"emptyLinePlaceholder":246},[36,21855,21856,21858,21860],{"class":38,"line":348},[36,21857,624],{"class":163},[36,21859,2432],{"class":55},[36,21861,6429],{"class":98},[36,21863,21864],{"class":38,"line":354},[36,21865,2025],{"class":98},[36,21867,21868],{"class":38,"line":370},[36,21869,247],{"emptyLinePlaceholder":246},[36,21871,21872,21874,21876,21878,21880,21882,21884,21886,21888],{"class":38,"line":375},[36,21873,19870],{"class":98},[36,21875,14],{"class":55},[36,21877,621],{"class":98},[36,21879,833],{"class":109},[36,21881,12874],{"class":98},[36,21883,694],{"class":109},[36,21885,12874],{"class":98},[36,21887,689],{"class":109},[36,21889,3170],{"class":98},[36,21891,21892,21894,21897],{"class":38,"line":381},[36,21893,16305],{"class":98},[36,21895,21896],{"class":55},"PrintPerson",[36,21898,6087],{"class":98},[36,21900,21901],{"class":38,"line":399},[36,21902,247],{"emptyLinePlaceholder":246},[36,21904,21905],{"class":38,"line":404},[36,21906,247],{"emptyLinePlaceholder":246},[36,21908,21909,21911,21913,21915],{"class":38,"line":410},[36,21910,2762],{"class":55},[36,21912,621],{"class":98},[36,21914,2767],{"class":59},[36,21916,3170],{"class":98},[36,21918,21919],{"class":38,"line":423},[36,21920,247],{"emptyLinePlaceholder":246},[36,21922,21923,21925,21927],{"class":38,"line":436},[36,21924,4541],{"class":163},[36,21926,4544],{"class":109},[36,21928,1772],{"class":98},[36,21930,21931],{"class":38,"line":441},[36,21932,2044],{"class":98},[14,21934,21935,21936,21939,21940],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[765,21937,21938],{},"参数名就是定义的对象属性","，",[765,21941,21942],{},"属性后面的值为有参构造函数的形参",[26,21944,21946],{"className":609,"code":21945,"language":611,"meta":31,"style":31},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[33,21947,21948],{"__ignoreMap":31},[36,21949,21950,21952,21954,21956,21959,21961,21964,21966,21969,21971,21974,21976,21979,21981],{"class":38,"line":39},[36,21951,19485],{"class":55},[36,21953,621],{"class":98},[36,21955,624],{"class":163},[36,21957,21958],{"class":98}," a.",[36,21960,624],{"class":163},[36,21962,21963],{"class":98}," b,",[36,21965,624],{"class":163},[36,21967,21968],{"class":98}," b):",[36,21970,21738],{"class":55},[36,21972,21973],{"class":98},"(a),",[36,21975,21744],{"class":55},[36,21977,21978],{"class":98},"(c),",[36,21980,21750],{"class":55},[36,21982,21983],{"class":98},"(b) {}\n",[588,21985,21987],{"id":21986},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,21989,21990],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,21992,15072],{},[26,21994,21996],{"className":609,"code":21995,"language":611,"meta":31,"style":31},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[33,21997,21998,22003,22008,22012,22017,22021],{"__ignoreMap":31},[36,21999,22000],{"class":38,"line":39},[36,22001,22002],{"class":98},"A{};\n",[36,22004,22005],{"class":38,"line":46},[36,22006,22007],{"class":98},"B\n",[36,22009,22010],{"class":38,"line":52},[36,22011,2025],{"class":98},[36,22013,22014],{"class":38,"line":66},[36,22015,22016],{"class":98},"    A a;\n",[36,22018,22019],{"class":38,"line":72},[36,22020,2044],{"class":98},[36,22022,22023],{"class":38,"line":82},[36,22024,22025],{"class":42},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,22027,22028],{},"案例",[26,22030,22032],{"className":609,"code":22031,"language":611,"meta":31,"style":31},"\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",[33,22033,22034,22039,22046,22050,22055,22060,22074,22078,22088,22099,22103,22110,22114,22127,22131,22136,22141,22145,22151,22155,22159,22163,22194,22198,22209,22213,22219,22223,22236,22240,22244,22248,22253,22258,22262,22270,22274,22291,22310,22314,22322,22326,22332],{"__ignoreMap":31},[36,22035,22036],{"class":38,"line":39},[36,22037,22038],{"class":42},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[36,22040,22041,22043],{"class":38,"line":46},[36,22042,15133],{"class":163},[36,22044,22045],{"class":55}," Phone\n",[36,22047,22048],{"class":38,"line":52},[36,22049,2025],{"class":98},[36,22051,22052],{"class":38,"line":66},[36,22053,22054],{"class":98},"public：\n",[36,22056,22057],{"class":38,"line":72},[36,22058,22059],{"class":42},"    \u002F\u002F 赋值(构造函数)\n",[36,22061,22062,22065,22067,22069,22072],{"class":38,"line":82},[36,22063,22064],{"class":55},"    Phone",[36,22066,621],{"class":98},[36,22068,15356],{"class":55},[36,22070,22071],{"class":5667}," pName",[36,22073,627],{"class":98},[36,22075,22076],{"class":38,"line":88},[36,22077,2489],{"class":98},[36,22079,22080,22083,22085],{"class":38,"line":113},[36,22081,22082],{"class":98},"        m_pName",[36,22084,176],{"class":163},[36,22086,22087],{"class":98},"pName;\n",[36,22089,22090,22092,22094,22097],{"class":38,"line":119},[36,22091,3902],{"class":98},[36,22093,1655],{"class":163},[36,22095,22096],{"class":59},"\"Phone的构造函数调用\"",[36,22098,1772],{"class":98},[36,22100,22101],{"class":38,"line":131},[36,22102,2646],{"class":98},[36,22104,22105,22108],{"class":38,"line":137},[36,22106,22107],{"class":55},"    ~Phone",[36,22109,2435],{"class":98},[36,22111,22112],{"class":38,"line":147},[36,22113,2489],{"class":98},[36,22115,22116,22118,22120,22123,22125],{"class":38,"line":153},[36,22117,3902],{"class":98},[36,22119,1655],{"class":163},[36,22121,22122],{"class":59},"\"Phone析构函数调用\"",[36,22124,1655],{"class":163},[36,22126,1677],{"class":98},[36,22128,22129],{"class":38,"line":191},[36,22130,2646],{"class":98},[36,22132,22133],{"class":38,"line":197},[36,22134,22135],{"class":42},"    \u002F\u002F\n",[36,22137,22138],{"class":38,"line":217},[36,22139,22140],{"class":98},"    string m_PName;\n",[36,22142,22143],{"class":38,"line":223},[36,22144,4446],{"class":98},[36,22146,22147,22149],{"class":38,"line":243},[36,22148,15133],{"class":163},[36,22150,15610],{"class":55},[36,22152,22153],{"class":38,"line":250},[36,22154,2025],{"class":98},[36,22156,22157],{"class":38,"line":256},[36,22158,15155],{"class":163},[36,22160,22161],{"class":38,"line":273},[36,22162,17433],{"class":42},[36,22164,22165,22167,22169,22171,22173,22175,22177,22180,22183,22185,22188,22191],{"class":38,"line":278},[36,22166,18958],{"class":55},[36,22168,621],{"class":98},[36,22170,15356],{"class":55},[36,22172,15359],{"class":5667},[36,22174,992],{"class":98},[36,22176,15356],{"class":55},[36,22178,22179],{"class":5667}," pname",[36,22181,22182],{"class":98},"):",[36,22184,15449],{"class":55},[36,22186,22187],{"class":98},"(name),m_phone.",[36,22189,22190],{"class":55},"m_PName",[36,22192,22193],{"class":98},"(pname) \n",[36,22195,22196],{"class":38,"line":284},[36,22197,2489],{"class":98},[36,22199,22200,22202,22204,22207],{"class":38,"line":315},[36,22201,3902],{"class":98},[36,22203,1655],{"class":163},[36,22205,22206],{"class":59},"\"Person的构造函数调用\"",[36,22208,1772],{"class":98},[36,22210,22211],{"class":38,"line":320},[36,22212,2646],{"class":98},[36,22214,22215,22217],{"class":38,"line":326},[36,22216,18991],{"class":55},[36,22218,2435],{"class":98},[36,22220,22221],{"class":38,"line":343},[36,22222,2489],{"class":98},[36,22224,22225,22227,22229,22232,22234],{"class":38,"line":348},[36,22226,3902],{"class":98},[36,22228,1655],{"class":163},[36,22230,22231],{"class":59},"\"Person析构函数调用\"",[36,22233,1655],{"class":163},[36,22235,1677],{"class":98},[36,22237,22238],{"class":38,"line":354},[36,22239,2646],{"class":98},[36,22241,22242],{"class":38,"line":370},[36,22243,8231],{"class":42},[36,22245,22246],{"class":38,"line":375},[36,22247,15331],{"class":98},[36,22249,22250],{"class":38,"line":381},[36,22251,22252],{"class":42},"    \u002F\u002F手机\n",[36,22254,22255],{"class":38,"line":399},[36,22256,22257],{"class":98},"    Phone m_Phone;\n",[36,22259,22260],{"class":38,"line":404},[36,22261,4446],{"class":98},[36,22263,22264,22266,22268],{"class":38,"line":410},[36,22265,5815],{"class":163},[36,22267,6039],{"class":55},[36,22269,2435],{"class":98},[36,22271,22272],{"class":38,"line":423},[36,22273,2025],{"class":98},[36,22275,22276,22278,22280,22282,22284,22286,22289],{"class":38,"line":436},[36,22277,19870],{"class":98},[36,22279,14],{"class":55},[36,22281,621],{"class":98},[36,22283,8367],{"class":59},[36,22285,992],{"class":98},[36,22287,22288],{"class":59},"\"安卓\"",[36,22290,3170],{"class":98},[36,22292,22293,22295,22297,22300,22302,22305,22307],{"class":38,"line":441},[36,22294,2030],{"class":98},[36,22296,1655],{"class":163},[36,22298,22299],{"class":98},"p.Name",[36,22301,1655],{"class":163},[36,22303,22304],{"class":59},"\"拿着：\"",[36,22306,1655],{"class":163},[36,22308,22309],{"class":98},"p.m_phone.m_PName;\n",[36,22311,22312],{"class":38,"line":447},[36,22313,2044],{"class":98},[36,22315,22316,22318,22320],{"class":38,"line":465},[36,22317,624],{"class":163},[36,22319,2432],{"class":55},[36,22321,2435],{"class":98},[36,22323,22324],{"class":38,"line":470},[36,22325,2025],{"class":98},[36,22327,22328,22330],{"class":38,"line":476},[36,22329,6084],{"class":55},[36,22331,6087],{"class":98},[36,22333,22334],{"class":38,"line":496},[36,22335,2044],{"class":98},[14,22337,9466],{},[26,22339,22341],{"className":609,"code":22340,"language":611,"meta":31,"style":31},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[33,22342,22343,22348],{"__ignoreMap":31},[36,22344,22345],{"class":38,"line":39},[36,22346,22347],{"class":42},"    \u002F\u002F不需要写这个：\n",[36,22349,22350],{"class":38,"line":46},[36,22351,22352],{"class":42},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,22354,22355],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[26,22357,22359],{"className":609,"code":22358,"language":611,"meta":31,"style":31},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[33,22360,22361],{"__ignoreMap":31},[36,22362,22363,22365,22368,22370,22373,22376],{"class":38,"line":39},[36,22364,19485],{"class":55},[36,22366,22367],{"class":98},"(string name.string pname):",[36,22369,15449],{"class":55},[36,22371,22372],{"class":98},"(name),",[36,22374,22375],{"class":55},"m_phone",[36,22377,22378],{"class":98},"(pname) {}\n",[14,22380,22381,22382,176,22385],{},"采用的是隐式转换法，实际为如下：\n",[33,22383,22384],{},"m_phone(pname)",[33,22386,22387],{},"Phone m_phone=pname",[14,22389,22390,22393],{},[765,22391,22392],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,22395,22396],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[588,22398,22400],{"id":22399},"_828静态对象","8.2.8静态对象",[14,22402,22403],{},"静态对象在成员对象前static，称为静态对象",[14,22405,22406],{},"静态对象分为两类：",[571,22408,22409],{},[574,22410,22411],{},"静态成员变量",[1618,22413,22414,22417,22420],{},[574,22415,22416],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[574,22418,22419],{},"②在编译阶段分配内存",[574,22421,22422],{},"③类内声明，类外初始化",[571,22424,22425],{"start":46},[574,22426,22427],{},"静态成员函数",[1618,22429,22430,22433],{},[574,22431,22432],{},"①所有对象共享同一个函数",[574,22434,22435],{},"②静态成员函数只能访问静态成员变量",[22437,22438,22440],"h4",{"id":22439},"_8281静态成员变量","8.2.8.1静态成员变量",[26,22442,22444],{"className":609,"code":22443,"language":611,"meta":31,"style":31},"#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",[33,22445,22446,22452,22462,22468,22472,22476,22481,22486,22491,22499,22503,22507,22511,22519,22523,22527,22532,22545,22549,22557,22561,22567],{"__ignoreMap":31},[36,22447,22448,22450],{"class":38,"line":39},[36,22449,2409],{"class":163},[36,22451,2412],{"class":59},[36,22453,22454,22456,22458,22460],{"class":38,"line":46},[36,22455,2417],{"class":163},[36,22457,2420],{"class":163},[36,22459,2423],{"class":55},[36,22461,1772],{"class":98},[36,22463,22464,22466],{"class":38,"line":52},[36,22465,15133],{"class":163},[36,22467,15610],{"class":55},[36,22469,22470],{"class":38,"line":66},[36,22471,2025],{"class":98},[36,22473,22474],{"class":38,"line":72},[36,22475,15155],{"class":163},[36,22477,22478],{"class":38,"line":82},[36,22479,22480],{"class":42},"    \u002F\u002F非静态成员变量\n",[36,22482,22483],{"class":38,"line":88},[36,22484,22485],{"class":42},"    \u002F\u002F int m_A;\n",[36,22487,22488],{"class":38,"line":113},[36,22489,22490],{"class":42},"    \u002F\u002F定义静态成员变量\n",[36,22492,22493,22495,22497],{"class":38,"line":119},[36,22494,11459],{"class":163},[36,22496,2841],{"class":163},[36,22498,21831],{"class":98},[36,22500,22501],{"class":38,"line":131},[36,22502,247],{"emptyLinePlaceholder":246},[36,22504,22505],{"class":38,"line":137},[36,22506,247],{"emptyLinePlaceholder":246},[36,22508,22509],{"class":38,"line":147},[36,22510,4446],{"class":98},[36,22512,22513,22515,22517],{"class":38,"line":153},[36,22514,5815],{"class":163},[36,22516,6039],{"class":55},[36,22518,2435],{"class":98},[36,22520,22521],{"class":38,"line":191},[36,22522,2025],{"class":98},[36,22524,22525],{"class":38,"line":197},[36,22526,15752],{"class":98},[36,22528,22529],{"class":38,"line":217},[36,22530,22531],{"class":42},"    \u002F\u002F输出类成员变量这块内存\n",[36,22533,22534,22536,22538,22541,22543],{"class":38,"line":223},[36,22535,2030],{"class":98},[36,22537,1655],{"class":163},[36,22539,22540],{"class":98},"p.m_A",[36,22542,1655],{"class":163},[36,22544,1677],{"class":98},[36,22546,22547],{"class":38,"line":243},[36,22548,2044],{"class":98},[36,22550,22551,22553,22555],{"class":38,"line":250},[36,22552,624],{"class":163},[36,22554,2432],{"class":55},[36,22556,2435],{"class":98},[36,22558,22559],{"class":38,"line":256},[36,22560,2025],{"class":98},[36,22562,22563,22565],{"class":38,"line":273},[36,22564,6084],{"class":55},[36,22566,2435],{"class":98},[36,22568,22569],{"class":38,"line":278},[36,22570,2044],{"class":98},[14,22572,22573],{},"此时输出是报错的：无法解析外部命令",[14,22575,22576],{},"解决这一问题：必须用到类内声明，类外初始化操作",[26,22578,22580],{"className":609,"code":22579,"language":611,"meta":31,"style":31},"#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",[33,22581,22582,22588,22598,22604,22608,22612,22617,22625,22629,22634,22649,22657,22661,22665,22670,22675,22687,22692,22703,22708,22713,22726,22730,22738,22742,22748],{"__ignoreMap":31},[36,22583,22584,22586],{"class":38,"line":39},[36,22585,2409],{"class":163},[36,22587,2412],{"class":59},[36,22589,22590,22592,22594,22596],{"class":38,"line":46},[36,22591,2417],{"class":163},[36,22593,2420],{"class":163},[36,22595,2423],{"class":55},[36,22597,1772],{"class":98},[36,22599,22600,22602],{"class":38,"line":52},[36,22601,15133],{"class":163},[36,22603,15610],{"class":55},[36,22605,22606],{"class":38,"line":66},[36,22607,2025],{"class":98},[36,22609,22610],{"class":38,"line":72},[36,22611,15155],{"class":163},[36,22613,22614],{"class":38,"line":82},[36,22615,22616],{"class":42},"    \u002F\u002F类内声明\n",[36,22618,22619,22621,22623],{"class":38,"line":88},[36,22620,11459],{"class":163},[36,22622,2841],{"class":163},[36,22624,21831],{"class":98},[36,22626,22627],{"class":38,"line":113},[36,22628,4446],{"class":98},[36,22630,22631],{"class":38,"line":119},[36,22632,22633],{"class":42},"\u002F\u002F类外初始化\n",[36,22635,22636,22638,22640,22643,22645,22647],{"class":38,"line":131},[36,22637,624],{"class":163},[36,22639,16008],{"class":55},[36,22641,22642],{"class":98},"::m_A",[36,22644,176],{"class":163},[36,22646,1060],{"class":109},[36,22648,1772],{"class":98},[36,22650,22651,22653,22655],{"class":38,"line":137},[36,22652,5815],{"class":163},[36,22654,6039],{"class":55},[36,22656,2435],{"class":98},[36,22658,22659],{"class":38,"line":147},[36,22660,2025],{"class":98},[36,22662,22663],{"class":38,"line":153},[36,22664,15752],{"class":98},[36,22666,22667],{"class":38,"line":191},[36,22668,22669],{"class":42},"    \u002F\u002F访问变量的原内存空间\n",[36,22671,22672],{"class":38,"line":197},[36,22673,22674],{"class":42},"    \u002F\u002F100\n",[36,22676,22677,22679,22681,22683,22685],{"class":38,"line":217},[36,22678,2030],{"class":98},[36,22680,1655],{"class":163},[36,22682,22540],{"class":98},[36,22684,1655],{"class":163},[36,22686,1677],{"class":98},[36,22688,22689],{"class":38,"line":223},[36,22690,22691],{"class":98},"    Person p2;\n",[36,22693,22694,22697,22699,22701],{"class":38,"line":243},[36,22695,22696],{"class":98},"    p2.m_A",[36,22698,176],{"class":163},[36,22700,2190],{"class":109},[36,22702,1772],{"class":98},[36,22704,22705],{"class":38,"line":250},[36,22706,22707],{"class":42},"    \u002F\u002F继续访问这片空间\n",[36,22709,22710],{"class":38,"line":256},[36,22711,22712],{"class":42},"    \u002F\u002F200\n",[36,22714,22715,22717,22719,22722,22724],{"class":38,"line":273},[36,22716,2030],{"class":98},[36,22718,1655],{"class":163},[36,22720,22721],{"class":98},"p2.m_A",[36,22723,1655],{"class":163},[36,22725,1677],{"class":98},[36,22727,22728],{"class":38,"line":278},[36,22729,2044],{"class":98},[36,22731,22732,22734,22736],{"class":38,"line":284},[36,22733,624],{"class":163},[36,22735,2432],{"class":55},[36,22737,2435],{"class":98},[36,22739,22740],{"class":38,"line":315},[36,22741,2025],{"class":98},[36,22743,22744,22746],{"class":38,"line":320},[36,22745,6084],{"class":55},[36,22747,6087],{"class":98},[36,22749,22750],{"class":38,"line":326},[36,22751,2044],{"class":98},[14,22753,22754],{},[765,22755,22756],{},"静态变量的访问",[26,22758,22760],{"className":609,"code":22759,"language":611,"meta":31,"style":31},"#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",[33,22761,22762,22768,22778,22784,22788,22792,22796,22804,22808,22813,22821,22825,22829,22843,22858,22866,22870,22875,22880,22885,22890,22902,22907,22912,22926,22943,22947,22955,22959,22965],{"__ignoreMap":31},[36,22763,22764,22766],{"class":38,"line":39},[36,22765,2409],{"class":163},[36,22767,2412],{"class":59},[36,22769,22770,22772,22774,22776],{"class":38,"line":46},[36,22771,2417],{"class":163},[36,22773,2420],{"class":163},[36,22775,2423],{"class":55},[36,22777,1772],{"class":98},[36,22779,22780,22782],{"class":38,"line":52},[36,22781,15133],{"class":163},[36,22783,15610],{"class":55},[36,22785,22786],{"class":38,"line":66},[36,22787,2025],{"class":98},[36,22789,22790],{"class":38,"line":72},[36,22791,15155],{"class":163},[36,22793,22794],{"class":38,"line":82},[36,22795,22616],{"class":42},[36,22797,22798,22800,22802],{"class":38,"line":88},[36,22799,11459],{"class":163},[36,22801,2841],{"class":163},[36,22803,21831],{"class":98},[36,22805,22806],{"class":38,"line":113},[36,22807,15661],{"class":163},[36,22809,22810],{"class":38,"line":119},[36,22811,22812],{"class":42},"    \u002F\u002F静态成员变量也是有访问权限的\n",[36,22814,22815,22817,22819],{"class":38,"line":131},[36,22816,11459],{"class":163},[36,22818,2841],{"class":163},[36,22820,21838],{"class":98},[36,22822,22823],{"class":38,"line":137},[36,22824,4446],{"class":98},[36,22826,22827],{"class":38,"line":147},[36,22828,22633],{"class":42},[36,22830,22831,22833,22835,22837,22839,22841],{"class":38,"line":153},[36,22832,624],{"class":163},[36,22834,16008],{"class":55},[36,22836,22642],{"class":98},[36,22838,176],{"class":163},[36,22840,1060],{"class":109},[36,22842,1772],{"class":98},[36,22844,22845,22847,22849,22852,22854,22856],{"class":38,"line":191},[36,22846,624],{"class":163},[36,22848,16008],{"class":55},[36,22850,22851],{"class":98},"::m_B",[36,22853,176],{"class":163},[36,22855,1313],{"class":109},[36,22857,1772],{"class":98},[36,22859,22860,22862,22864],{"class":38,"line":197},[36,22861,5815],{"class":163},[36,22863,6108],{"class":55},[36,22865,2435],{"class":98},[36,22867,22868],{"class":38,"line":217},[36,22869,2025],{"class":98},[36,22871,22872],{"class":38,"line":223},[36,22873,22874],{"class":42},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[36,22876,22877],{"class":38,"line":243},[36,22878,22879],{"class":42},"    \u002F\u002F静态成员变量有两种访问方式：\n",[36,22881,22882],{"class":38,"line":250},[36,22883,22884],{"class":42},"    \u002F\u002F1.通过对象进行访问\n",[36,22886,22887],{"class":38,"line":256},[36,22888,22889],{"class":98},"    Person p;  \n",[36,22891,22892,22894,22896,22898,22900],{"class":38,"line":273},[36,22893,2030],{"class":98},[36,22895,1655],{"class":163},[36,22897,22540],{"class":98},[36,22899,1655],{"class":163},[36,22901,1677],{"class":98},[36,22903,22904],{"class":38,"line":278},[36,22905,22906],{"class":42},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[36,22908,22909],{"class":38,"line":284},[36,22910,22911],{"class":42},"    \u002F\u002F2.通过类名进行访问\n",[36,22913,22914,22916,22918,22920,22922,22924],{"class":38,"line":315},[36,22915,2030],{"class":98},[36,22917,1655],{"class":163},[36,22919,19485],{"class":55},[36,22921,22642],{"class":98},[36,22923,1655],{"class":163},[36,22925,1677],{"class":98},[36,22927,22928,22930,22932,22934,22936,22938,22940],{"class":38,"line":320},[36,22929,2030],{"class":98},[36,22931,1655],{"class":163},[36,22933,19485],{"class":55},[36,22935,22851],{"class":98},[36,22937,1655],{"class":163},[36,22939,1720],{"class":98},[36,22941,22942],{"class":42}," \u002F\u002F没有访问权限，报错\n",[36,22944,22945],{"class":38,"line":326},[36,22946,2044],{"class":98},[36,22948,22949,22951,22953],{"class":38,"line":343},[36,22950,624],{"class":163},[36,22952,2432],{"class":55},[36,22954,2435],{"class":98},[36,22956,22957],{"class":38,"line":348},[36,22958,2025],{"class":98},[36,22960,22961,22963],{"class":38,"line":354},[36,22962,6153],{"class":55},[36,22964,6087],{"class":98},[36,22966,22967],{"class":38,"line":370},[36,22968,2044],{"class":98},[22437,22970,22972],{"id":22971},"_8282静态成员函数","8.2.8.2静态成员函数",[14,22974,22975],{},"1.静态成员函数定义与访问",[26,22977,22979],{"className":609,"code":22978,"language":611,"meta":31,"style":31},"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",[33,22980,22981,22987,22991,22995,23000,23011,23015,23029,23033,23037,23045,23049,23054,23059,23063,23071,23076,23086],{"__ignoreMap":31},[36,22982,22983,22985],{"class":38,"line":39},[36,22984,15133],{"class":163},[36,22986,15610],{"class":55},[36,22988,22989],{"class":38,"line":46},[36,22990,2025],{"class":98},[36,22992,22993],{"class":38,"line":52},[36,22994,15155],{"class":163},[36,22996,22997],{"class":38,"line":66},[36,22998,22999],{"class":42},"    \u002F\u002F在公共权限下定义静态成员函数\n",[36,23001,23002,23004,23007,23009],{"class":38,"line":72},[36,23003,11459],{"class":163},[36,23005,23006],{"class":163}," void",[36,23008,11824],{"class":55},[36,23010,2435],{"class":98},[36,23012,23013],{"class":38,"line":82},[36,23014,2489],{"class":98},[36,23016,23017,23020,23022,23025,23027],{"class":38,"line":88},[36,23018,23019],{"class":98},"        coout",[36,23021,1655],{"class":163},[36,23023,23024],{"class":59},"\"静态成员函数的调用\"",[36,23026,1655],{"class":163},[36,23028,1677],{"class":98},[36,23030,23031],{"class":38,"line":113},[36,23032,2646],{"class":98},[36,23034,23035],{"class":38,"line":119},[36,23036,4446],{"class":98},[36,23038,23039,23041,23043],{"class":38,"line":131},[36,23040,5815],{"class":163},[36,23042,6039],{"class":55},[36,23044,2435],{"class":98},[36,23046,23047],{"class":38,"line":137},[36,23048,2025],{"class":98},[36,23050,23051],{"class":38,"line":147},[36,23052,23053],{"class":42},"    \u002F\u002F静态成员函数的调用方式:\n",[36,23055,23056],{"class":38,"line":153},[36,23057,23058],{"class":42},"    \u002F\u002F1.通过对象访问\n",[36,23060,23061],{"class":38,"line":191},[36,23062,15752],{"class":98},[36,23064,23065,23067,23069],{"class":38,"line":197},[36,23066,16305],{"class":98},[36,23068,11990],{"class":55},[36,23070,6087],{"class":98},[36,23072,23073],{"class":38,"line":217},[36,23074,23075],{"class":42},"    \u002F\u002F2.通过类名访问\n",[36,23077,23078,23080,23082,23084],{"class":38,"line":223},[36,23079,18958],{"class":55},[36,23081,18171],{"class":98},[36,23083,11990],{"class":55},[36,23085,6087],{"class":98},[36,23087,23088],{"class":38,"line":243},[36,23089,2044],{"class":98},[571,23091,23092],{"start":46},[574,23093,23094],{},"静态成员函数只能访问静态成员变量",[26,23096,23098],{"className":609,"code":23097,"language":611,"meta":31,"style":31},"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",[33,23099,23100,23106,23110,23114,23118,23128,23132,23146,23151,23163,23167,23178,23188,23192,23196,23200,23210,23214,23227,23231,23235,23239,23243,23257,23265,23269,23273,23277,23281,23289,23293,23303,23308,23312,23320,23324,23330],{"__ignoreMap":31},[36,23101,23102,23104],{"class":38,"line":39},[36,23103,15133],{"class":163},[36,23105,15610],{"class":55},[36,23107,23108],{"class":38,"line":46},[36,23109,2025],{"class":98},[36,23111,23112],{"class":38,"line":52},[36,23113,15155],{"class":163},[36,23115,23116],{"class":38,"line":66},[36,23117,22999],{"class":42},[36,23119,23120,23122,23124,23126],{"class":38,"line":72},[36,23121,11459],{"class":163},[36,23123,23006],{"class":163},[36,23125,11824],{"class":55},[36,23127,2435],{"class":98},[36,23129,23130],{"class":38,"line":82},[36,23131,2489],{"class":98},[36,23133,23134,23137,23139,23141,23143],{"class":38,"line":88},[36,23135,23136],{"class":98},"        m_A",[36,23138,176],{"class":163},[36,23140,926],{"class":109},[36,23142,674],{"class":98},[36,23144,23145],{"class":42}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[36,23147,23148],{"class":38,"line":113},[36,23149,23150],{"class":42},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[36,23152,23153,23155,23157,23159,23161],{"class":38,"line":119},[36,23154,23019],{"class":98},[36,23156,1655],{"class":163},[36,23158,23024],{"class":59},[36,23160,1655],{"class":163},[36,23162,1677],{"class":98},[36,23164,23165],{"class":38,"line":131},[36,23166,2646],{"class":98},[36,23168,23169,23171,23173,23175],{"class":38,"line":137},[36,23170,11459],{"class":163},[36,23172,2841],{"class":163},[36,23174,15887],{"class":98},[36,23176,23177],{"class":42}," \u002F\u002F静态成员变量\n",[36,23179,23180,23182,23185],{"class":38,"line":147},[36,23181,2444],{"class":163},[36,23183,23184],{"class":98}," m_B;",[36,23186,23187],{"class":42}," \u002F\u002F非静态成员变量\n",[36,23189,23190],{"class":38,"line":153},[36,23191,247],{"emptyLinePlaceholder":246},[36,23193,23194],{"class":38,"line":191},[36,23195,15661],{"class":163},[36,23197,23198],{"class":38,"line":197},[36,23199,22812],{"class":42},[36,23201,23202,23204,23206,23208],{"class":38,"line":217},[36,23203,11459],{"class":163},[36,23205,23006],{"class":163},[36,23207,14057],{"class":55},[36,23209,2435],{"class":98},[36,23211,23212],{"class":38,"line":223},[36,23213,2489],{"class":98},[36,23215,23216,23218,23220,23223,23225],{"class":38,"line":243},[36,23217,3902],{"class":98},[36,23219,1655],{"class":163},[36,23221,23222],{"class":59},"\"这是私有权限下的静态函数调用\"",[36,23224,1655],{"class":163},[36,23226,1677],{"class":98},[36,23228,23229],{"class":38,"line":250},[36,23230,2646],{"class":98},[36,23232,23233],{"class":38,"line":256},[36,23234,247],{"emptyLinePlaceholder":246},[36,23236,23237],{"class":38,"line":273},[36,23238,247],{"emptyLinePlaceholder":246},[36,23240,23241],{"class":38,"line":278},[36,23242,4446],{"class":98},[36,23244,23245,23247,23249,23251,23253,23255],{"class":38,"line":284},[36,23246,624],{"class":163},[36,23248,16008],{"class":55},[36,23250,22642],{"class":98},[36,23252,176],{"class":163},[36,23254,807],{"class":109},[36,23256,1772],{"class":98},[36,23258,23259,23261,23263],{"class":38,"line":315},[36,23260,5815],{"class":163},[36,23262,6039],{"class":55},[36,23264,2435],{"class":98},[36,23266,23267],{"class":38,"line":320},[36,23268,2025],{"class":98},[36,23270,23271],{"class":38,"line":326},[36,23272,23053],{"class":42},[36,23274,23275],{"class":38,"line":343},[36,23276,23058],{"class":42},[36,23278,23279],{"class":38,"line":348},[36,23280,15752],{"class":98},[36,23282,23283,23285,23287],{"class":38,"line":354},[36,23284,16305],{"class":98},[36,23286,11990],{"class":55},[36,23288,6087],{"class":98},[36,23290,23291],{"class":38,"line":370},[36,23292,23075],{"class":42},[36,23294,23295,23297,23299,23301],{"class":38,"line":375},[36,23296,18958],{"class":55},[36,23298,18171],{"class":98},[36,23300,11990],{"class":55},[36,23302,6087],{"class":98},[36,23304,23305],{"class":38,"line":381},[36,23306,23307],{"class":42},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[36,23309,23310],{"class":38,"line":399},[36,23311,2044],{"class":98},[36,23313,23314,23316,23318],{"class":38,"line":404},[36,23315,624],{"class":163},[36,23317,2432],{"class":55},[36,23319,2435],{"class":98},[36,23321,23322],{"class":38,"line":410},[36,23323,2025],{"class":98},[36,23325,23326,23328],{"class":38,"line":423},[36,23327,6084],{"class":55},[36,23329,6087],{"class":98},[36,23331,23332],{"class":38,"line":436},[36,23333,2044],{"class":98},[588,23335,23337],{"id":23336},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22437,23339,23341],{"id":23340},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,23343,23344],{},"在c++中，类内的成员变量和成员函数分开存储",[14,23346,23347],{},"只有非静态成员变量才属于类的对象上",[23349,23350,23352],"h5",{"id":23351},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[26,23354,23356],{"className":609,"code":23355,"language":611,"meta":31,"style":31},"#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",[33,23357,23358,23365,23375,23381,23385,23389,23393,23401,23405,23409,23432,23436,23444,23448,23454],{"__ignoreMap":31},[36,23359,23360,23362],{"class":38,"line":39},[36,23361,2409],{"class":163},[36,23363,23364],{"class":59},"\u003Ciostraem>\n",[36,23366,23367,23369,23371,23373],{"class":38,"line":46},[36,23368,2417],{"class":163},[36,23370,2420],{"class":163},[36,23372,2423],{"class":55},[36,23374,1772],{"class":98},[36,23376,23377,23379],{"class":38,"line":52},[36,23378,15133],{"class":163},[36,23380,15610],{"class":55},[36,23382,23383],{"class":38,"line":66},[36,23384,2025],{"class":98},[36,23386,23387],{"class":38,"line":72},[36,23388,247],{"emptyLinePlaceholder":246},[36,23390,23391],{"class":38,"line":82},[36,23392,4446],{"class":98},[36,23394,23395,23397,23399],{"class":38,"line":88},[36,23396,5815],{"class":163},[36,23398,6039],{"class":55},[36,23400,2435],{"class":98},[36,23402,23403],{"class":38,"line":113},[36,23404,2025],{"class":98},[36,23406,23407],{"class":38,"line":119},[36,23408,15752],{"class":98},[36,23410,23411,23413,23415,23418,23420,23423,23425,23427,23429],{"class":38,"line":131},[36,23412,2030],{"class":98},[36,23414,1655],{"class":163},[36,23416,23417],{"class":59},"\"size of p=\"",[36,23419,1655],{"class":163},[36,23421,23422],{"class":55},"sizeoif",[36,23424,6990],{"class":98},[36,23426,1655],{"class":163},[36,23428,1720],{"class":98},[36,23430,23431],{"class":42}," \u002F\u002F查看这个空类的占用的内存空间\n",[36,23433,23434],{"class":38,"line":137},[36,23435,2044],{"class":98},[36,23437,23438,23440,23442],{"class":38,"line":147},[36,23439,624],{"class":163},[36,23441,2432],{"class":55},[36,23443,2435],{"class":98},[36,23445,23446],{"class":38,"line":153},[36,23447,2025],{"class":98},[36,23449,23450,23452],{"class":38,"line":191},[36,23451,6084],{"class":55},[36,23453,6087],{"class":98},[36,23455,23456],{"class":38,"line":197},[36,23457,2044],{"class":98},[14,23459,23460],{},"输出结果为：size of p=1",[14,23462,23463],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,23465,23466],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23349,23468,23470],{"id":23469},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[26,23472,23474],{"className":609,"code":23473,"language":611,"meta":31,"style":31},"#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",[33,23475,23476,23482,23492,23500,23504,23513,23517,23525,23529,23533,23552,23556,23560,23568,23572,23578],{"__ignoreMap":31},[36,23477,23478,23480],{"class":38,"line":39},[36,23479,2409],{"class":163},[36,23481,2412],{"class":59},[36,23483,23484,23486,23488,23490],{"class":38,"line":46},[36,23485,2417],{"class":163},[36,23487,2420],{"class":163},[36,23489,2423],{"class":55},[36,23491,1772],{"class":98},[36,23493,23494,23496,23498],{"class":38,"line":52},[36,23495,15133],{"class":163},[36,23497,16008],{"class":55},[36,23499,3125],{"class":98},[36,23501,23502],{"class":38,"line":66},[36,23503,2025],{"class":98},[36,23505,23506,23508,23510],{"class":38,"line":72},[36,23507,2444],{"class":163},[36,23509,15887],{"class":98},[36,23511,23512],{"class":42},"\u002F\u002F非静态成员变量\n",[36,23514,23515],{"class":38,"line":82},[36,23516,4446],{"class":98},[36,23518,23519,23521,23523],{"class":38,"line":88},[36,23520,5815],{"class":163},[36,23522,6039],{"class":55},[36,23524,2435],{"class":98},[36,23526,23527],{"class":38,"line":113},[36,23528,2025],{"class":98},[36,23530,23531],{"class":38,"line":119},[36,23532,15752],{"class":98},[36,23534,23535,23537,23539,23541,23543,23545,23547,23549],{"class":38,"line":131},[36,23536,2030],{"class":98},[36,23538,1655],{"class":163},[36,23540,23417],{"class":59},[36,23542,1851],{"class":163},[36,23544,6990],{"class":98},[36,23546,1655],{"class":163},[36,23548,1720],{"class":98},[36,23550,23551],{"class":42}," \u002F\u002F查看不是空对象时占用多少内存\n",[36,23553,23554],{"class":38,"line":137},[36,23555,247],{"emptyLinePlaceholder":246},[36,23557,23558],{"class":38,"line":147},[36,23559,2044],{"class":98},[36,23561,23562,23564,23566],{"class":38,"line":153},[36,23563,624],{"class":163},[36,23565,2432],{"class":55},[36,23567,2435],{"class":98},[36,23569,23570],{"class":38,"line":191},[36,23571,2025],{"class":98},[36,23573,23574,23576],{"class":38,"line":197},[36,23575,6084],{"class":55},[36,23577,6087],{"class":98},[36,23579,23580],{"class":38,"line":217},[36,23581,2044],{"class":98},[14,23583,23584],{},"输出结果：size of p=4",[14,23586,23587],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[571,23589,23590],{},[574,23591,23592],{},"如果加上非静态成员变量，Person类修改如下",[26,23594,23596],{"className":609,"code":23595,"language":611,"meta":31,"style":31},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[33,23597,23598,23604,23608,23614,23622,23626,23631],{"__ignoreMap":31},[36,23599,23600,23602],{"class":38,"line":39},[36,23601,15133],{"class":163},[36,23603,15610],{"class":55},[36,23605,23606],{"class":38,"line":46},[36,23607,2025],{"class":98},[36,23609,23610,23612],{"class":38,"line":52},[36,23611,2444],{"class":163},[36,23613,21831],{"class":98},[36,23615,23616,23618,23620],{"class":38,"line":66},[36,23617,11459],{"class":163},[36,23619,2841],{"class":163},[36,23621,21838],{"class":98},[36,23623,23624],{"class":38,"line":72},[36,23625,4446],{"class":98},[36,23627,23628],{"class":38,"line":82},[36,23629,23630],{"class":42},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[36,23632,23633,23635,23637,23639,23641,23643],{"class":38,"line":88},[36,23634,624],{"class":163},[36,23636,16008],{"class":55},[36,23638,22851],{"class":98},[36,23640,176],{"class":163},[36,23642,807],{"class":109},[36,23644,1772],{"class":98},[14,23646,23647],{},"输出结果：4",[14,23649,23650],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[571,23652,23653],{"start":46},[574,23654,23655],{},"加上非静态成员函数",[26,23657,23659],{"className":609,"code":23658,"language":611,"meta":31,"style":31},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[33,23660,23661,23668,23672,23678,23686,23690,23694,23698],{"__ignoreMap":31},[36,23662,23663,23665],{"class":38,"line":39},[36,23664,15133],{"class":163},[36,23666,23667],{"class":55},"  Person\n",[36,23669,23670],{"class":38,"line":46},[36,23671,2025],{"class":98},[36,23673,23674,23676],{"class":38,"line":52},[36,23675,2444],{"class":163},[36,23677,21831],{"class":98},[36,23679,23680,23682,23684],{"class":38,"line":66},[36,23681,15348],{"class":163},[36,23683,11824],{"class":55},[36,23685,2435],{"class":98},[36,23687,23688],{"class":38,"line":72},[36,23689,2489],{"class":98},[36,23691,23692],{"class":38,"line":82},[36,23693,247],{"emptyLinePlaceholder":246},[36,23695,23696],{"class":38,"line":88},[36,23697,2646],{"class":98},[36,23699,23700],{"class":38,"line":113},[36,23701,4446],{"class":98},[14,23703,23704],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[571,23706,23707],{"start":52},[574,23708,23709],{},"加上静态成员函数",[26,23711,23713],{"className":609,"code":23712,"language":611,"meta":31,"style":31},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[33,23714,23715,23721,23725,23731,23739,23743,23747,23751,23762,23766,23770,23774],{"__ignoreMap":31},[36,23716,23717,23719],{"class":38,"line":39},[36,23718,15133],{"class":163},[36,23720,23667],{"class":55},[36,23722,23723],{"class":38,"line":46},[36,23724,2025],{"class":98},[36,23726,23727,23729],{"class":38,"line":52},[36,23728,2444],{"class":163},[36,23730,21831],{"class":98},[36,23732,23733,23735,23737],{"class":38,"line":66},[36,23734,15348],{"class":163},[36,23736,11824],{"class":55},[36,23738,2435],{"class":98},[36,23740,23741],{"class":38,"line":72},[36,23742,2489],{"class":98},[36,23744,23745],{"class":38,"line":82},[36,23746,247],{"emptyLinePlaceholder":246},[36,23748,23749],{"class":38,"line":88},[36,23750,2646],{"class":98},[36,23752,23753,23755,23757,23760],{"class":38,"line":113},[36,23754,11459],{"class":163},[36,23756,23006],{"class":163},[36,23758,23759],{"class":55}," func1",[36,23761,2435],{"class":98},[36,23763,23764],{"class":38,"line":119},[36,23765,2489],{"class":98},[36,23767,23768],{"class":38,"line":131},[36,23769,247],{"emptyLinePlaceholder":246},[36,23771,23772],{"class":38,"line":137},[36,23773,2646],{"class":98},[36,23775,23776],{"class":38,"line":147},[36,23777,4446],{"class":98},[14,23779,23647],{},[14,23781,23782],{},"解释：静态成员函数也不属于类上",[537,23784,8125],{},{"title":31,"searchDepth":46,"depth":46,"links":23786},[23787,23793],{"id":15084,"depth":46,"text":15085,"children":23788},[23789,23790,23791,23792],{"id":15088,"depth":52,"text":15089},{"id":15813,"depth":52,"text":15814},{"id":15985,"depth":52,"text":15986},{"id":16444,"depth":52,"text":16445},{"id":18816,"depth":46,"text":18817,"children":23794},[23795,23796,23797,23798,23799,23800,23801,23802,23803],{"id":18828,"depth":52,"text":18829},{"id":19121,"depth":52,"text":19122},{"id":19612,"depth":52,"text":19613},{"id":20709,"depth":52,"text":20710},{"id":21132,"depth":52,"text":21133},{"id":21611,"depth":52,"text":21612},{"id":21986,"depth":52,"text":21987},{"id":22399,"depth":52,"text":22400},{"id":23336,"depth":52,"text":23337},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":15049,"description":23804},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23811,"title":611,"body":23812,"description":542,"extension":543,"meta":23816,"navigation":246,"path":23818,"seo":23819,"stem":23820,"__hash__":23821},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23813,"toc":23814},[],{"title":31,"searchDepth":46,"depth":46,"links":23815},[],{"category":23817},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":611,"description":542},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23823,"title":23824,"body":23825,"description":31,"extension":543,"meta":24414,"navigation":246,"path":24415,"seo":24416,"stem":24417,"__hash__":24418},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23826,"toc":24396},[23827,23830,23834,23837,23840,23843,23861,23866,23869,23872,23875,23878,23883,23886,23891,23894,23897,23901,23904,23907,23913,23916,23934,23938,23942,23945,23950,23953,23957,23960,23973,23976,23980,23983,23986,23989,24014,24017,24026,24037,24052,24084,24088,24095,24103,24107,24110,24113,24118,24122,24125,24128,24133,24136,24140,24143,24146,24151,24154,24158,24163,24167,24234,24238,24241,24244,24247,24250,24253,24259,24279,24282,24296,24304,24308,24311,24314,24319,24322,24327,24332,24335,24338,24343,24348,24351,24356,24361,24364,24369,24374,24377,24380,24385,24388,24393],[10,23828,23824],{"id":23829},"_1强化学习基本认识",[559,23831,23833],{"id":23832},"_11什么是强化学习","1.1.什么是强化学习",[14,23835,23836],{},"强化学习有两部分组成：智能体和环境；",[14,23838,23839],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,23841,23842],{},"强化学习与监督学习的区别:",[571,23844,23845,23848,23851,23854],{},[574,23846,23847],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[574,23849,23850],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[574,23852,23853],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[574,23855,23856,23857,23860],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[765,23858,23859],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,23862,23863],{},[1941,23864],{"alt":31,"src":23865},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,23867,23868],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,23870,23871],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,23873,23874],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,23876,23877],{},"获取奖励",[14,23879,23880],{},[1941,23881],{"alt":31,"src":23882},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,23884,23885],{},"强化学习可以分成标准强化学习和深度强化学习",[14,23887,23888],{},[1941,23889],{"alt":31,"src":23890},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,23892,23893],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,23895,23896],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[559,23898,23900],{"id":23899},"_12强化学习应用场景","1.2.强化学习应用场景",[14,23902,23903],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,23905,23906],{},"具身智能中的应用",[14,23908,23909,23912],{},[765,23910,23911],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,23914,23915],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,23917,23918,23919,23922,23923,23926,23927,23930,23931],{},"机器人是",[765,23920,23921],{},"躯体","，深度学习是",[765,23924,23925],{},"神经元****网络","，VLA是",[765,23928,23929],{},"通用的行为逻辑","，而强化学习是",[765,23932,23933],{},"教练",[559,23935,23937],{"id":23936},"_13序列决策","1.3.序列决策",[588,23939,23941],{"id":23940},"_131智能体与环境","1.3.1.智能体与环境",[14,23943,23944],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,23946,23947],{},[1941,23948],{"alt":31,"src":23949},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,23951,23952],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[588,23954,23956],{"id":23955},"_132奖励","1.3.2.奖励",[14,23958,23959],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,23961,23962,23963,23972],{},"取某个策略的表现如何。强化学习的目的就是",[765,23964,23965,23966,23971],{},"最大化",[765,23967,23968],{},[765,23969,23970],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,23974,23975],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[588,23977,23979],{"id":23978},"_133序列决策","1.3.3.序列决策",[14,23981,23982],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,23984,23985],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,23987,23988],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,23990,23991,23995,23996,23998,23999,24001,24002,24004,24005,14234,24008,14234,24011],{},[23992,23993,23994],"em",{},"Ht"," = ",[23992,23997,1210],{},"1*, a",[23992,24000,833],{},", r",[23992,24003,833],{},", . . . ,* ",[23992,24006,24007],{},"ot",[23992,24009,24010],{},", at ,",[23992,24012,24013],{},"rt",[14,24015,24016],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,24018,24019,23995,24022,2130,24024,1043],{},[23992,24020,24021],{},"st",[23992,24023,671],{},[23992,24025,23994],{},[14,24027,24028,24029,24032,24033,24036],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[765,24030,24031],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[765,24034,24035],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,24038,24039,24040,24043,24044,24047,24048,24051],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[765,24041,24042],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[765,24045,24046],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23992,24049,24050],{},"S, A, T, R, Ω, O, γ",")。",[14,24053,24054,24055,24057,24058,24060,24061,621,24063,24066,24067,24069,24070,621,24073,24076,24077,24079,24080,24083],{},"其中 ",[23992,24056,1302],{}," 表示状态空间，为隐变量，",[23992,24059,848],{}," 为动作空间，",[23992,24062,1327],{},[23992,24064,24065],{},"s ′ |s, a",") 为状态转移概率，",[23992,24068,1278],{}," 为奖励函数，",[23992,24071,24072],{},"Ω",[23992,24074,24075],{},"o|s, a",") 为观测概率，",[23992,24078,1204],{}," 为观测空间，",[23992,24081,24082],{},"γ"," 为折扣因子。",[559,24085,24087],{"id":24086},"_14动作空间","1.4.动作空间",[14,24089,24090,24091,24094],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[765,24092,24093],{},"动作空间"," ，动作空间分为:",[571,24096,24097,24100],{},[574,24098,24099],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[574,24101,24102],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[559,24104,24106],{"id":24105},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,24108,24109],{},"由策略、价值函数、模型三部分组成",[14,24111,24112],{},"这三者组成马尔可夫决策过程",[14,24114,24115],{},[1941,24116],{"alt":31,"src":24117},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[588,24119,24121],{"id":24120},"_151策略","1.5.1.策略",[14,24123,24124],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,24126,24127],{},"策略可分为两种：",[14,24129,24130],{},[1941,24131],{"alt":31,"src":24132},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,24134,24135],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[588,24137,24139],{"id":24138},"_152价值函数","1.5.2.价值函数",[14,24141,24142],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,24144,24145],{},"价值函数中有一个折扣因子，类似于存款利息",[14,24147,24148],{},[1941,24149],{"alt":31,"src":24150},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,24152,24153],{},"进入某个状态采取的最优动作可以通过Q函数得到",[588,24155,24157],{"id":24156},"_153模型","1.5.3.模型",[14,24159,24160],{},[1941,24161],{"alt":31,"src":24162},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[559,24164,24166],{"id":24165},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[753,24168,24169,24180],{},[756,24170,24171],{},[759,24172,24173,24177],{},[762,24174,24176],{"align":24175},"left","类型",[762,24178,24179],{"align":24175},"特点",[800,24181,24182,24192,24202,24212,24224],{},[759,24183,24184,24189],{},[805,24185,24186],{"align":24175},[765,24187,24188],{},"基于价值的智能体",[805,24190,24191],{"align":24175},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[759,24193,24194,24199],{},[805,24195,24196],{"align":24175},[765,24197,24198],{},"基于策略的智能体",[805,24200,24201],{"align":24175},"直接学习策略，没有学习价值函数",[759,24203,24204,24209],{},[805,24205,24206],{"align":24175},[765,24207,24208],{},"演员-评论员智能体",[805,24210,24211],{"align":24175},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[759,24213,24214,24219],{},[805,24215,24216],{"align":24175},[765,24217,24218],{},"有模型强化学习智能体",[805,24220,24221],{"align":24175},[1941,24222],{"alt":31,"src":24223},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[759,24225,24226,24231],{},[805,24227,24228],{"align":24175},[765,24229,24230],{},"免模型强化学习智能体",[805,24232,24233],{"align":24175},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[559,24235,24237],{"id":24236},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,24239,24240],{},"学习和规划是序列决策的两个基本问题",[14,24242,24243],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,24245,24246],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,24248,24249],{},"强化学习用到的库：Gym",[14,24251,24252],{},"Gym可以检验强化学习算法的优劣",[14,24254,24255,24258],{},[765,24256,24257],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[26,24260,24264],{"className":24261,"code":24262,"language":24263,"meta":31,"style":31},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[33,24265,24266],{"__ignoreMap":31},[36,24267,24268,24271,24273,24276],{"class":38,"line":39},[36,24269,24270],{"class":55},"pip",[36,24272,160],{"class":59},[36,24274,24275],{"class":59}," gym==",[36,24277,24278],{"class":109},"0.25.2\n",[14,24280,24281],{},"显示图形界面需要",[26,24283,24285],{"className":24261,"code":24284,"language":24263,"meta":31,"style":31},"pip install pygame\n",[33,24286,24287],{"__ignoreMap":31},[36,24288,24289,24291,24293],{"class":38,"line":39},[36,24290,24270],{"class":55},[36,24292,160],{"class":59},[36,24294,24295],{"class":59}," pygame\n",[14,24297,24298,24299],{},"有关Gym库的相关文档介绍：",[20,24300,24303],{"href":24301,"rel":24302},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[559,24305,24307],{"id":24306},"_18一些补充基础概念","1.8.一些补充基础概念",[14,24309,24310],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,24312,24313],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,24315,24316],{},[1941,24317],{"alt":31,"src":24318},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,24320,24321],{},"折扣率需要自己来设定",[14,24323,24324],{},[1941,24325],{"alt":31,"src":24326},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[571,24328,24329],{},[574,24330,24331],{},"状态转移函数：",[14,24333,24334],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,24336,24337],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,24339,24340],{},[1941,24341],{"alt":31,"src":24342},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[571,24344,24345],{"start":46},[574,24346,24347],{},"动作价值函数：",[14,24349,24350],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,24352,24353],{},[1941,24354],{"alt":31,"src":24355},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[571,24357,24358],{"start":52},[574,24359,24360],{},"最优动作价值函数：",[14,24362,24363],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[14,24365,24366],{},[1941,24367],{"alt":31,"src":24368},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[571,24370,24371],{"start":66},[574,24372,24373],{},"状态价值函数:",[14,24375,24376],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,24378,24379],{},"它衡量的是“一个具体动作”的长期价值",[14,24381,24382],{},[1941,24383],{"alt":31,"src":24384},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,24386,24387],{},"几个价值函数之间的比较：",[14,24389,24390],{},[1941,24391],{"alt":31,"src":24392},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[537,24394,24395],{},"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":31,"searchDepth":46,"depth":46,"links":24397},[24398,24399,24400,24405,24406,24411,24412,24413],{"id":23832,"depth":46,"text":23833},{"id":23899,"depth":46,"text":23900},{"id":23936,"depth":46,"text":23937,"children":24401},[24402,24403,24404],{"id":23940,"depth":52,"text":23941},{"id":23955,"depth":52,"text":23956},{"id":23978,"depth":52,"text":23979},{"id":24086,"depth":46,"text":24087},{"id":24105,"depth":46,"text":24106,"children":24407},[24408,24409,24410],{"id":24120,"depth":52,"text":24121},{"id":24138,"depth":52,"text":24139},{"id":24156,"depth":52,"text":24157},{"id":24165,"depth":46,"text":24166},{"id":24236,"depth":46,"text":24237},{"id":24306,"depth":46,"text":24307},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23824,"description":31},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24420,"title":24421,"body":24422,"description":24429,"extension":543,"meta":24440,"navigation":246,"path":24441,"seo":24442,"stem":24443,"__hash__":24444},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24423,"toc":24438},[24424,24427,24430,24435],[10,24425,24421],{"id":24426},"_2马尔可夫决策过程",[14,24428,24429],{},"这是强化学习的基本框架",[14,24431,24432],{},[1941,24433],{"alt":31,"src":24434},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,24436,24437],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":31,"searchDepth":46,"depth":46,"links":24439},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24421,"description":24429},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24446,"title":24447,"body":24448,"description":31,"extension":543,"meta":24564,"navigation":246,"path":24565,"seo":24566,"stem":24567,"__hash__":24568},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24449,"toc":24559},[24450,24453,24457,24460,24465,24470,24473,24478,24481,24486,24489,24493,24498,24501,24506,24511,24516,24519,24523,24528,24531,24536,24541,24546,24551,24554],[10,24451,24447],{"id":24452},"_3动作价值函数",[559,24454,24456],{"id":24455},"_31dqn","3.1.DQN",[14,24458,24459],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,24461,24462],{},[1941,24463],{"alt":31,"src":24464},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,24466,24467],{},[1941,24468],{"alt":31,"src":24469},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,24471,24472],{},"DQN算法的描述：",[14,24474,24475],{},[1941,24476],{"alt":31,"src":24477},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,24479,24480],{},"这里的Dense指的是全连接层",[14,24482,24483],{},[1941,24484],{"alt":31,"src":24485},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,24487,24488],{},"当前观测的状态为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算法",[559,24490,24492],{"id":24491},"_32dqn的举例","3.2.DQN的举例",[14,24494,24495],{},[1941,24496],{"alt":31,"src":24497},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,24499,24500],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,24502,24503],{},[1941,24504],{"alt":31,"src":24505},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,24507,24508],{},[1941,24509],{"alt":31,"src":24510},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,24512,24513],{},[1941,24514],{"alt":31,"src":24515},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,24517,24518],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[559,24520,24522],{"id":24521},"_33td算法","3.3.TD算法",[14,24524,24525],{},[1941,24526],{"alt":31,"src":24527},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,24529,24530],{},"强化学习TD算法公式的粗略解释：",[14,24532,24533],{},[1941,24534],{"alt":31,"src":24535},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,24537,24538],{},[1941,24539],{"alt":31,"src":24540},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,24542,24543],{},[1941,24544],{"alt":31,"src":24545},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,24547,24548],{},[1941,24549],{"alt":31,"src":24550},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,24552,24553],{},"TD算法总结：",[14,24555,24556],{},[1941,24557],{"alt":31,"src":24558},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":31,"searchDepth":46,"depth":46,"links":24560},[24561,24562,24563],{"id":24455,"depth":46,"text":24456},{"id":24491,"depth":46,"text":24492},{"id":24521,"depth":46,"text":24522},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24447,"description":31},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24570,"title":24571,"body":24572,"description":31,"extension":543,"meta":24805,"navigation":246,"path":24806,"seo":24807,"stem":24808,"__hash__":24809},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24573,"toc":24801},[24574,24577,24581,24584,24587,24592,24597,24600,24605,24610,24613,24618,24621,24626,24629,24634,24637,24642,24645,24650,24655,24658,24663,24666,24669,24674,24677,24682,24687,24691,24694,24697,24702,24707,24710,24715,24720,24723,24728,24731,24734,24739,24742,24747,24750,24755,24760,24763,24768,24773,24776,24781,24784,24789,24792],[10,24575,24571],{"id":24576},"_4策略学习",[559,24578,24580],{"id":24579},"_41概念描述","4.1.概念描述",[14,24582,24583],{},"用神经网络（策略网络）近似策略函数",[14,24585,24586],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,24588,24589],{},[1941,24590],{"alt":31,"src":24591},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,24593,24594],{},[1941,24595],{"alt":31,"src":24596},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,24598,24599],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,24601,24602],{},[1941,24603],{"alt":31,"src":24604},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,24606,24607],{},[1941,24608],{"alt":31,"src":24609},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,24611,24612],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,24614,24615],{},[1941,24616],{"alt":31,"src":24617},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,24619,24620],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,24622,24623],{},[1941,24624],{"alt":31,"src":24625},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,24627,24628],{},"改进theta要用到策略梯度算法",[14,24630,24631],{},[1941,24632],{"alt":31,"src":24633},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,24635,24636],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,24638,24639],{},[1941,24640],{"alt":31,"src":24641},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,24643,24644],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,24646,24647],{},[1941,24648],{"alt":31,"src":24649},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,24651,24652],{},[1941,24653],{"alt":31,"src":24654},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,24656,24657],{},"梯度公式总结：",[14,24659,24660],{},[1941,24661],{"alt":31,"src":24662},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,24664,24665],{},"两个公式的分别应用场景：",[14,24667,24668],{},"对于离散的动作：",[14,24670,24671],{},[1941,24672],{"alt":31,"src":24673},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,24675,24676],{},"对于连续的动作：",[14,24678,24679],{},[1941,24680],{"alt":31,"src":24681},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,24683,24684],{},[1941,24685],{"alt":31,"src":24686},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[559,24688,24690],{"id":24689},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,24692,24693],{},"使用蒙特卡洛来近似计算策略梯度",[14,24695,24696],{},"蒙特卡洛法的解释如下：",[14,24698,24699],{},[1941,24700],{"alt":31,"src":24701},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,24703,24704],{},[1941,24705],{"alt":31,"src":24706},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,24708,24709],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[571,24711,24712],{},[574,24713,24714],{},"方法一：reinforce算法",[14,24716,24717],{},[1941,24718],{"alt":31,"src":24719},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,24721,24722],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[571,24724,24725],{"start":46},[574,24726,24727],{},"方法二：actor-critic算法",[14,24729,24730],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,24732,24733],{},"两个网络的构建：",[14,24735,24736],{},[1941,24737],{"alt":31,"src":24738},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,24740,24741],{},"actor网路：",[14,24743,24744],{},[1941,24745],{"alt":31,"src":24746},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,24748,24749],{},"critic网络",[14,24751,24752],{},[1941,24753],{"alt":31,"src":24754},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[571,24756,24757],{"start":52},[574,24758,24759],{},"网络的训练",[14,24761,24762],{},"网络描述",[14,24764,24765],{},[1941,24766],{"alt":31,"src":24767},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,24769,24770],{},[1941,24771],{"alt":31,"src":24772},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,24774,24775],{},"TD算法更新梯度：",[14,24777,24778],{},[1941,24779],{"alt":31,"src":24780},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,24782,24783],{},"策略网络更新梯度：",[14,24785,24786],{},[1941,24787],{"alt":31,"src":24788},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,24790,24791],{},"训练整个流程的具体描述：",[14,24793,24794,24797,24798],{},[1941,24795],{"alt":31,"src":24796},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1941,24799],{"alt":31,"src":24800},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":31,"searchDepth":46,"depth":46,"links":24802},[24803,24804],{"id":24579,"depth":46,"text":24580},{"id":24689,"depth":46,"text":24690},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24571,"description":31},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24811,"title":24812,"body":24813,"description":24820,"extension":543,"meta":24870,"navigation":246,"path":24871,"seo":24872,"stem":24873,"__hash__":24874},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24814,"toc":24866},[24815,24818,24821,24825,24828,24833,24837,24840,24845,24848,24853,24858,24861],[10,24816,24812],{"id":24817},"_5alphago算法",[14,24819,24820],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[559,24822,24824],{"id":24823},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,24826,24827],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,24829,24830],{},[1941,24831],{"alt":31,"src":24832},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[559,24834,24836],{"id":24835},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,24838,24839],{},"采用强化学习的方式训练策略网络",[14,24841,24842],{},[1941,24843],{"alt":31,"src":24844},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,24846,24847],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,24849,24850],{},[1941,24851],{"alt":31,"src":24852},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,24854,24855],{},[1941,24856],{"alt":31,"src":24857},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,24859,24860],{},"强化学习训练策略网络的总结：",[14,24862,24863],{},[1941,24864],{"alt":31,"src":24865},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":31,"searchDepth":46,"depth":46,"links":24867},[24868,24869],{"id":24823,"depth":46,"text":24824},{"id":24835,"depth":46,"text":24836},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24812,"description":24820},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24876,"title":24877,"body":24878,"description":24885,"extension":543,"meta":24888,"navigation":246,"path":24889,"seo":24890,"stem":24891,"__hash__":24892},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24879,"toc":24886},[24880,24883],[10,24881,24877],{"id":24882},"_6价值网络",[14,24884,24885],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":31,"searchDepth":46,"depth":46,"links":24887},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24877,"description":24885},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24894,"title":24895,"body":24896,"description":24900,"extension":543,"meta":24901,"navigation":246,"path":24902,"seo":24903,"stem":24904,"__hash__":24905},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24897,"toc":24898},[],{"title":31,"searchDepth":46,"depth":46,"links":24899},[],"记录自己的强化学习笔记。",{"category":23817},"\u002Fwiki\u002F2025-12-04",{"title":24895,"description":24900},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24907,"title":24908,"body":24909,"description":542,"extension":543,"meta":24948,"navigation":246,"path":24949,"seo":24950,"stem":24951,"__hash__":24952},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24910,"toc":24946},[24911,24914,24917,24923,24926,24932,24935,24940,24943],[10,24912,24908],{"id":24913},"_1-项目概览与官方资源",[14,24915,24916],{},"官方文档：",[14,24918,24919],{},[20,24920,24921],{"href":24921,"rel":24922},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24],[14,24924,24925],{},"官方代码仓库：",[14,24927,24928],{},[20,24929,24930],{"href":24930,"rel":24931},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24],[14,24933,24934],{},"复现大体流程：",[14,24936,24937],{},[1941,24938],{"alt":31,"src":24939},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,24941,24942],{},"本教程的目标是打通这条链路：",[14,24944,24945],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":31,"searchDepth":46,"depth":46,"links":24947},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24908,"description":542},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24954,"title":24955,"body":24956,"description":542,"extension":543,"meta":25071,"navigation":246,"path":25072,"seo":25073,"stem":25074,"__hash__":25075},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24957,"toc":25066},[24958,24961,24965,24968,24975,24979,24982,24991,25001,25005,25034,25037,25063],[10,24959,24955],{"id":24960},"_2-环境准备与设备连接",[559,24962,24964],{"id":24963},"_21-系统与环境","2.1 系统与环境",[14,24966,24967],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,24969,24970,24971,24974],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[33,24972,24973],{},"lerobot"," 依赖。",[559,24976,24978],{"id":24977},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,24980,24981],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[26,24983,24985],{"className":24261,"code":24984,"language":24263,"meta":31,"style":31},"lerobot-find-out\n",[33,24986,24987],{"__ignoreMap":31},[36,24988,24989],{"class":38,"line":39},[36,24990,24984],{"class":55},[14,24992,24993,24994,828,24997,25000],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[33,24995,24996],{},"\u002Fdev\u002FttyACM0",[33,24998,24999],{},"\u002Fdev\u002FttyACM1","）。",[559,25002,25004],{"id":25003},"_23-串口授权","2.3 串口授权",[26,25006,25008],{"className":24261,"code":25007,"language":24263,"meta":31,"style":31},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[33,25009,25010,25023],{"__ignoreMap":31},[36,25011,25012,25014,25017,25020],{"class":38,"line":39},[36,25013,56],{"class":55},[36,25015,25016],{"class":59}," chmod",[36,25018,25019],{"class":109}," 666",[36,25021,25022],{"class":59}," \u002Fdev\u002FttyACM0\n",[36,25024,25025,25027,25029,25031],{"class":38,"line":46},[36,25026,56],{"class":55},[36,25028,25016],{"class":59},[36,25030,25019],{"class":109},[36,25032,25033],{"class":59}," \u002Fdev\u002FttyACM1\n",[14,25035,25036],{},"说明：",[1618,25038,25039,25044,25050,25060],{},[574,25040,25041,25043],{},[33,25042,56],{},"：以 root 权限执行命令。",[574,25045,25046,25049],{},[33,25047,25048],{},"chmod","：修改设备节点权限。",[574,25051,25052,25055,25056,25059],{},[33,25053,25054],{},"666","：",[33,25057,25058],{},"rw-rw-rw-","，所有用户可读写。",[574,25061,25062],{},"串口号必须替换为你机器上的真实端口。",[537,25064,25065],{},"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":31,"searchDepth":46,"depth":46,"links":25067},[25068,25069,25070],{"id":24963,"depth":46,"text":24964},{"id":24977,"depth":46,"text":24978},{"id":25003,"depth":46,"text":25004},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24955,"description":542},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":25077,"title":25078,"body":25079,"description":542,"extension":543,"meta":25240,"navigation":246,"path":25241,"seo":25242,"stem":25243,"__hash__":25244},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":25080,"toc":25236},[25081,25085,25089,25095,25098,25155,25158,25162,25165,25233],[10,25082,25084],{"id":25083},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[559,25086,25088],{"id":25087},"_31-配置电机-id","3.1 配置电机 ID",[14,25090,25091,25092,25094],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[33,25093,833],{},"，需要改成机械臂链路里不冲突的编号。",[14,25096,25097],{},"方式一：用 LeRobot 命令逐步写入。",[26,25099,25101],{"className":24261,"code":25100,"language":24263,"meta":31,"style":31},"# 主臂舵机配置 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",[33,25102,25103,25108,25116,25123,25128,25132,25137,25143,25150],{"__ignoreMap":31},[36,25104,25105],{"class":38,"line":39},[36,25106,25107],{"class":42},"# 主臂舵机配置 ID\n",[36,25109,25110,25113],{"class":38,"line":46},[36,25111,25112],{"class":55},"lerobot-setup-motors",[36,25114,25115],{"class":109}," \\\n",[36,25117,25118,25121],{"class":38,"line":52},[36,25119,25120],{"class":109},"  --teleop.type=so101_leader",[36,25122,25115],{"class":109},[36,25124,25125],{"class":38,"line":66},[36,25126,25127],{"class":109},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[36,25129,25130],{"class":38,"line":72},[36,25131,247],{"emptyLinePlaceholder":246},[36,25133,25134],{"class":38,"line":82},[36,25135,25136],{"class":42},"# 从臂舵机配置 ID\n",[36,25138,25139,25141],{"class":38,"line":88},[36,25140,25112],{"class":55},[36,25142,25115],{"class":109},[36,25144,25145,25148],{"class":38,"line":113},[36,25146,25147],{"class":109},"  --robot.type=so101_follower",[36,25149,25115],{"class":109},[36,25151,25152],{"class":38,"line":119},[36,25153,25154],{"class":109},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,25156,25157],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[559,25159,25161],{"id":25160},"_32-机械臂校准","3.2 机械臂校准",[14,25163,25164],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[26,25166,25168],{"className":24261,"code":25167,"language":24263,"meta":31,"style":31},"# 主臂校准\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",[33,25169,25170,25175,25182,25188,25195,25200,25204,25209,25215,25221,25228],{"__ignoreMap":31},[36,25171,25172],{"class":38,"line":39},[36,25173,25174],{"class":42},"# 主臂校准\n",[36,25176,25177,25180],{"class":38,"line":46},[36,25178,25179],{"class":55},"lerobot-calibrate",[36,25181,25115],{"class":109},[36,25183,25184,25186],{"class":38,"line":52},[36,25185,25120],{"class":109},[36,25187,25115],{"class":109},[36,25189,25190,25193],{"class":38,"line":66},[36,25191,25192],{"class":109},"  --teleop.port=\u002Fdev\u002FttyACM0",[36,25194,25115],{"class":109},[36,25196,25197],{"class":38,"line":72},[36,25198,25199],{"class":109},"  --teleop.id=my_awesome_leader_arm\n",[36,25201,25202],{"class":38,"line":82},[36,25203,247],{"emptyLinePlaceholder":246},[36,25205,25206],{"class":38,"line":88},[36,25207,25208],{"class":42},"# 从臂校准\n",[36,25210,25211,25213],{"class":38,"line":113},[36,25212,25179],{"class":55},[36,25214,25115],{"class":109},[36,25216,25217,25219],{"class":38,"line":119},[36,25218,25147],{"class":109},[36,25220,25115],{"class":109},[36,25222,25223,25226],{"class":38,"line":131},[36,25224,25225],{"class":109},"  --robot.port=\u002Fdev\u002FttyACM1",[36,25227,25115],{"class":109},[36,25229,25230],{"class":38,"line":137},[36,25231,25232],{"class":109},"  --robot.id=my_awesome_follower_arm\n",[537,25234,25235],{},"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":31,"searchDepth":46,"depth":46,"links":25237},[25238,25239],{"id":25087,"depth":46,"text":25088},{"id":25160,"depth":46,"text":25161},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":25078,"description":542},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25246,"title":25247,"body":25248,"description":542,"extension":543,"meta":25439,"navigation":246,"path":25440,"seo":25441,"stem":25442,"__hash__":25443},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25249,"toc":25435},[25250,25253,25257,25304,25308,25321,25384,25387,25432],[10,25251,25247],{"id":25252},"_4-遥操与相机接入",[559,25254,25256],{"id":25255},"_41-不带相机遥操","4.1 不带相机遥操",[26,25258,25260],{"className":24261,"code":25259,"language":24263,"meta":31,"style":31},"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",[33,25261,25262,25269,25275,25281,25288,25294,25300],{"__ignoreMap":31},[36,25263,25264,25267],{"class":38,"line":39},[36,25265,25266],{"class":55},"lerobot-teleoperate",[36,25268,25115],{"class":109},[36,25270,25271,25273],{"class":38,"line":46},[36,25272,25147],{"class":109},[36,25274,25115],{"class":109},[36,25276,25277,25279],{"class":38,"line":52},[36,25278,25225],{"class":109},[36,25280,25115],{"class":109},[36,25282,25283,25286],{"class":38,"line":66},[36,25284,25285],{"class":109},"  --robot.id=my_awesome_follower_arm",[36,25287,25115],{"class":109},[36,25289,25290,25292],{"class":38,"line":72},[36,25291,25120],{"class":109},[36,25293,25115],{"class":109},[36,25295,25296,25298],{"class":38,"line":82},[36,25297,25192],{"class":109},[36,25299,25115],{"class":109},[36,25301,25302],{"class":38,"line":88},[36,25303,25199],{"class":109},[559,25305,25307],{"id":25306},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[26,25309,25311],{"className":24261,"code":25310,"language":24263,"meta":31,"style":31},"lerobot-find-cameras opencv\n",[33,25312,25313],{"__ignoreMap":31},[36,25314,25315,25318],{"class":38,"line":39},[36,25316,25317],{"class":55},"lerobot-find-cameras",[36,25319,25320],{"class":59}," opencv\n",[26,25322,25324],{"className":24261,"code":25323,"language":24263,"meta":31,"style":31},"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",[33,25325,25326,25332,25338,25344,25350,25360,25366,25372,25379],{"__ignoreMap":31},[36,25327,25328,25330],{"class":38,"line":39},[36,25329,25266],{"class":55},[36,25331,25115],{"class":109},[36,25333,25334,25336],{"class":38,"line":46},[36,25335,25147],{"class":109},[36,25337,25115],{"class":109},[36,25339,25340,25342],{"class":38,"line":52},[36,25341,25225],{"class":109},[36,25343,25115],{"class":109},[36,25345,25346,25348],{"class":38,"line":66},[36,25347,25285],{"class":109},[36,25349,25115],{"class":109},[36,25351,25352,25355,25358],{"class":38,"line":72},[36,25353,25354],{"class":109},"  --robot.cameras=",[36,25356,25357],{"class":59},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[36,25359,25115],{"class":109},[36,25361,25362,25364],{"class":38,"line":82},[36,25363,25120],{"class":109},[36,25365,25115],{"class":109},[36,25367,25368,25370],{"class":38,"line":88},[36,25369,25192],{"class":109},[36,25371,25115],{"class":109},[36,25373,25374,25377],{"class":38,"line":113},[36,25375,25376],{"class":109},"  --teleop.id=my_awesome_leader_arm",[36,25378,25115],{"class":109},[36,25380,25381],{"class":38,"line":119},[36,25382,25383],{"class":109},"  --display_data=true\n",[14,25385,25386],{},"相机参数说明：",[1618,25388,25389,25395,25401,25410,25420,25426],{},[574,25390,25391,25394],{},[33,25392,25393],{},"front","：相机名称。",[574,25396,25397,25400],{},[33,25398,25399],{},"type: opencv","：相机驱动类型。",[574,25402,25403,25406,25407,25000],{},[33,25404,25405],{},"index_or_path","：设备编号或设备路径（如 ",[33,25408,25409],{},"\u002Fdev\u002Fvideo4",[574,25411,25412,25415,25416,25419],{},[33,25413,25414],{},"width"," \u002F ",[33,25417,25418],{},"height","：图像分辨率。",[574,25421,25422,25425],{},[33,25423,25424],{},"fps","：采样帧率。",[574,25427,25428,25431],{},[33,25429,25430],{},"--display_data=true","：启用实时可视化。",[537,25433,25434],{},"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":31,"searchDepth":46,"depth":46,"links":25436},[25437,25438],{"id":25255,"depth":46,"text":25256},{"id":25306,"depth":46,"text":25307},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25247,"description":542},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25445,"title":25446,"body":25447,"description":542,"extension":543,"meta":25619,"navigation":246,"path":25620,"seo":25621,"stem":25622,"__hash__":25623},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25448,"toc":25614},[25449,25453,25457,25462,25467,25470,25512,25518,25522,25571,25576,25580,25583,25591,25596,25601,25606,25611],[10,25450,25452],{"id":25451},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[559,25454,25456],{"id":25455},"_51-生成访问令牌","5.1 生成访问令牌",[14,25458,25459],{},[1941,25460],{"alt":31,"src":25461},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,25463,25464],{},[1941,25465],{"alt":31,"src":25466},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,25468,25469],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[26,25471,25473],{"className":24261,"code":25472,"language":24263,"meta":31,"style":31},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[33,25474,25475,25488],{"__ignoreMap":31},[36,25476,25477,25480,25483,25485],{"class":38,"line":39},[36,25478,25479],{"class":163},"export",[36,25481,25482],{"class":98}," HF_TOKEN",[36,25484,176],{"class":163},[36,25486,25487],{"class":59},"\"your_huggingface_token\"\n",[36,25489,25490,25493,25496,25499,25502,25504,25507,25509],{"class":38,"line":46},[36,25491,25492],{"class":55},"hf",[36,25494,25495],{"class":59}," auth",[36,25497,25498],{"class":59}," login",[36,25500,25501],{"class":109}," --token",[36,25503,10164],{"class":59},[36,25505,25506],{"class":98},"$HF_TOKEN",[36,25508,866],{"class":59},[36,25510,25511],{"class":109}," --add-to-git-credential\n",[14,25513,25514,25517],{},[33,25515,25516],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[559,25519,25521],{"id":25520},"_52-验证登录","5.2 验证登录",[26,25523,25525],{"className":24261,"code":25524,"language":24263,"meta":31,"style":31},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[33,25526,25527,25558],{"__ignoreMap":31},[36,25528,25529,25532,25534,25537,25539,25541,25544,25547,25550,25553,25556],{"class":38,"line":39},[36,25530,25531],{"class":98},"HF_USER",[36,25533,176],{"class":163},[36,25535,25536],{"class":98},"$(",[36,25538,25492],{"class":55},[36,25540,25495],{"class":59},[36,25542,25543],{"class":59}," whoami",[36,25545,25546],{"class":163}," |",[36,25548,25549],{"class":55}," head",[36,25551,25552],{"class":109}," -n",[36,25554,25555],{"class":109}," 1",[36,25557,627],{"class":98},[36,25559,25560,25563,25565,25568],{"class":38,"line":46},[36,25561,25562],{"class":109},"echo",[36,25564,10164],{"class":59},[36,25566,25567],{"class":98},"$HF_USER",[36,25569,25570],{"class":59},"\"\n",[14,25572,25573],{},[1941,25574],{"alt":31,"src":25575},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[559,25577,25579],{"id":25578},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,25581,25582],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1618,25584,25585,25588],{},[574,25586,25587],{},"Dataset Repo（用于上传演示数据）",[574,25589,25590],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,25592,25593],{},[1941,25594],{"alt":31,"src":25595},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,25597,25598],{},[1941,25599],{"alt":31,"src":25600},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,25602,25603],{},[1941,25604],{"alt":31,"src":25605},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,25607,25608],{},[1941,25609],{"alt":31,"src":25610},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[537,25612,25613],{},"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":31,"searchDepth":46,"depth":46,"links":25615},[25616,25617,25618],{"id":25455,"depth":46,"text":25456},{"id":25520,"depth":46,"text":25521},{"id":25578,"depth":46,"text":25579},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25446,"description":542},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25625,"title":25626,"body":25627,"description":542,"extension":543,"meta":25824,"navigation":246,"path":25825,"seo":25826,"stem":25827,"__hash__":25828},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25628,"toc":25819},[25629,25633,25637,25733,25741,25746,25750,25766,25769,25773,25816],[10,25630,25632],{"id":25631},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[559,25634,25636],{"id":25635},"_61-录制示教数据","6.1 录制示教数据",[26,25638,25640],{"className":24261,"code":25639,"language":24263,"meta":31,"style":31},"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",[33,25641,25642,25649,25655,25661,25667,25676,25682,25688,25694,25701,25711,25718,25728],{"__ignoreMap":31},[36,25643,25644,25647],{"class":38,"line":39},[36,25645,25646],{"class":55},"lerobot-record",[36,25648,25115],{"class":109},[36,25650,25651,25653],{"class":38,"line":46},[36,25652,25147],{"class":109},[36,25654,25115],{"class":109},[36,25656,25657,25659],{"class":38,"line":52},[36,25658,25225],{"class":109},[36,25660,25115],{"class":109},[36,25662,25663,25665],{"class":38,"line":66},[36,25664,25285],{"class":109},[36,25666,25115],{"class":109},[36,25668,25669,25671,25674],{"class":38,"line":72},[36,25670,25354],{"class":109},[36,25672,25673],{"class":59},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[36,25675,25115],{"class":109},[36,25677,25678,25680],{"class":38,"line":82},[36,25679,25120],{"class":109},[36,25681,25115],{"class":109},[36,25683,25684,25686],{"class":38,"line":88},[36,25685,25192],{"class":109},[36,25687,25115],{"class":109},[36,25689,25690,25692],{"class":38,"line":113},[36,25691,25376],{"class":109},[36,25693,25115],{"class":109},[36,25695,25696,25699],{"class":38,"line":119},[36,25697,25698],{"class":109},"  --display_data=true",[36,25700,25115],{"class":109},[36,25702,25703,25706,25709],{"class":38,"line":131},[36,25704,25705],{"class":109},"  --dataset.repo_id=",[36,25707,25708],{"class":59},"\"Embodied-AI-6\u002Fso101_test\"",[36,25710,25115],{"class":109},[36,25712,25713,25716],{"class":38,"line":137},[36,25714,25715],{"class":109},"  --dataset.num_episodes=10",[36,25717,25115],{"class":109},[36,25719,25720,25723,25726],{"class":38,"line":147},[36,25721,25722],{"class":109},"  --dataset.single_task=",[36,25724,25725],{"class":59},"\"Grab the green cube\"",[36,25727,25115],{"class":109},[36,25729,25730],{"class":38,"line":153},[36,25731,25732],{"class":109},"  --resume=true\n",[1618,25734,25735],{},[574,25736,25737,25740],{},[33,25738,25739],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,25742,25743],{},[1941,25744],{"alt":31,"src":25745},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[559,25747,25749],{"id":25748},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[26,25751,25753],{"className":24261,"code":25752,"language":24263,"meta":31,"style":31},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[33,25754,25755],{"__ignoreMap":31},[36,25756,25757,25760,25763],{"class":38,"line":39},[36,25758,25759],{"class":55},"rm",[36,25761,25762],{"class":109}," -rf",[36,25764,25765],{"class":59}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,25767,25768],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[559,25770,25772],{"id":25771},"_63-回放指定-episode","6.3 回放指定 episode",[26,25774,25776],{"className":24261,"code":25775,"language":24263,"meta":31,"style":31},"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",[33,25777,25778,25785,25791,25797,25803,25811],{"__ignoreMap":31},[36,25779,25780,25783],{"class":38,"line":39},[36,25781,25782],{"class":55},"lerobot-replay",[36,25784,25115],{"class":109},[36,25786,25787,25789],{"class":38,"line":46},[36,25788,25147],{"class":109},[36,25790,25115],{"class":109},[36,25792,25793,25795],{"class":38,"line":52},[36,25794,25225],{"class":109},[36,25796,25115],{"class":109},[36,25798,25799,25801],{"class":38,"line":66},[36,25800,25285],{"class":109},[36,25802,25115],{"class":109},[36,25804,25805,25807,25809],{"class":38,"line":72},[36,25806,25705],{"class":109},[36,25808,25708],{"class":59},[36,25810,25115],{"class":109},[36,25812,25813],{"class":38,"line":82},[36,25814,25815],{"class":109},"  --dataset.episode=0\n",[537,25817,25818],{},"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":31,"searchDepth":46,"depth":46,"links":25820},[25821,25822,25823],{"id":25635,"depth":46,"text":25636},{"id":25748,"depth":46,"text":25749},{"id":25771,"depth":46,"text":25772},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25626,"description":542},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25830,"title":25831,"body":25832,"description":542,"extension":543,"meta":25960,"navigation":246,"path":25961,"seo":25962,"stem":25963,"__hash__":25964},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25833,"toc":25958},[25834,25838,25901,25904,25951,25956],[10,25835,25837],{"id":25836},"_7-act-模型训练","7. ACT 模型训练",[26,25839,25841],{"className":24261,"code":25840,"language":24263,"meta":31,"style":31},"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",[33,25842,25843,25850,25858,25865,25872,25879,25886,25893],{"__ignoreMap":31},[36,25844,25845,25848],{"class":38,"line":39},[36,25846,25847],{"class":55},"lerobot-train",[36,25849,25115],{"class":109},[36,25851,25852,25854,25856],{"class":38,"line":46},[36,25853,25705],{"class":109},[36,25855,25708],{"class":59},[36,25857,25115],{"class":109},[36,25859,25860,25863],{"class":38,"line":52},[36,25861,25862],{"class":109},"  --policy.type=act",[36,25864,25115],{"class":109},[36,25866,25867,25870],{"class":38,"line":66},[36,25868,25869],{"class":109},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[36,25871,25115],{"class":109},[36,25873,25874,25877],{"class":38,"line":72},[36,25875,25876],{"class":109},"  --job_name=act_so101_test",[36,25878,25115],{"class":109},[36,25880,25881,25884],{"class":38,"line":82},[36,25882,25883],{"class":109},"  --policy.device=cuda",[36,25885,25115],{"class":109},[36,25887,25888,25891],{"class":38,"line":88},[36,25889,25890],{"class":109},"  --wandb.enable=false",[36,25892,25115],{"class":109},[36,25894,25895,25898],{"class":38,"line":113},[36,25896,25897],{"class":109},"  --policy.repo_id=",[36,25899,25900],{"class":59},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,25902,25903],{},"参数说明：",[1618,25905,25906,25912,25918,25924,25930,25939,25945],{},[574,25907,25908,25911],{},[33,25909,25910],{},"--dataset.repo_id","：训练数据集仓库。",[574,25913,25914,25917],{},[33,25915,25916],{},"--policy.type=act","：策略模型类型为 ACT。",[574,25919,25920,25923],{},[33,25921,25922],{},"--output_dir","：本地训练输出目录。",[574,25925,25926,25929],{},[33,25927,25928],{},"--job_name","：训练任务名称。",[574,25931,25932,25935,25936,25000],{},[33,25933,25934],{},"--policy.device","：训练设备（如 ",[33,25937,25938],{},"cuda",[574,25940,25941,25944],{},[33,25942,25943],{},"--wandb.enable","：是否启用 WandB 可视化。",[574,25946,25947,25950],{},[33,25948,25949],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,25952,25953],{},[1941,25954],{"alt":31,"src":25955},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[537,25957,25818],{},{"title":31,"searchDepth":46,"depth":46,"links":25959},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25831,"description":542},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25966,"title":25967,"body":25968,"description":542,"extension":543,"meta":26055,"navigation":246,"path":26056,"seo":26057,"stem":26058,"__hash__":26059},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25969,"toc":26053},[25970,25973,25976,26043,26051],[10,25971,25967],{"id":25972},"_8-策略部署与自动采集",[14,25974,25975],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[26,25977,25979],{"className":24261,"code":25978,"language":24263,"meta":31,"style":31},"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",[33,25980,25981,25987,25993,25999,26007,26013,26020,26028,26036],{"__ignoreMap":31},[36,25982,25983,25985],{"class":38,"line":39},[36,25984,25646],{"class":55},[36,25986,25115],{"class":109},[36,25988,25989,25991],{"class":38,"line":46},[36,25990,25147],{"class":109},[36,25992,25115],{"class":109},[36,25994,25995,25997],{"class":38,"line":52},[36,25996,25225],{"class":109},[36,25998,25115],{"class":109},[36,26000,26001,26003,26005],{"class":38,"line":66},[36,26002,25354],{"class":109},[36,26004,25673],{"class":59},[36,26006,25115],{"class":109},[36,26008,26009,26011],{"class":38,"line":72},[36,26010,25285],{"class":109},[36,26012,25115],{"class":109},[36,26014,26015,26018],{"class":38,"line":82},[36,26016,26017],{"class":109},"  --display_data=false",[36,26019,25115],{"class":109},[36,26021,26022,26024,26026],{"class":38,"line":88},[36,26023,25705],{"class":109},[36,26025,25708],{"class":59},[36,26027,25115],{"class":109},[36,26029,26030,26032,26034],{"class":38,"line":113},[36,26031,25722],{"class":109},[36,26033,25725],{"class":59},[36,26035,25115],{"class":109},[36,26037,26038,26041],{"class":38,"line":119},[36,26039,26040],{"class":109},"  --policy.path=",[36,26042,25900],{"class":59},[1618,26044,26045],{},[574,26046,26047,26050],{},[33,26048,26049],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[537,26052,25818],{},{"title":31,"searchDepth":46,"depth":46,"links":26054},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25967,"description":542},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":26061,"title":26062,"body":26063,"description":542,"extension":543,"meta":26092,"navigation":246,"path":26093,"seo":26094,"stem":26095,"__hash__":26096},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":26064,"toc":26090},[26065,26069,26072,26078,26081,26087],[10,26066,26068],{"id":26067},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,26070,26071],{},"项目地址：",[14,26073,26074],{},[20,26075,26076],{"href":26076,"rel":26077},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24],[14,26079,26080],{},"参考教程：",[14,26082,26083],{},[20,26084,26085],{"href":26085,"rel":26086},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24],[14,26088,26089],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":31,"searchDepth":46,"depth":46,"links":26091},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":26062,"description":542},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":26098,"title":26099,"body":26100,"description":26104,"extension":543,"meta":26105,"navigation":246,"path":26106,"seo":26107,"stem":26108,"__hash__":26109},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":26101,"toc":26102},[],{"title":31,"searchDepth":46,"depth":46,"links":26103},[],"act复现",{"category":23817},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":26099,"description":26104},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":26111,"title":26112,"body":26113,"description":31,"extension":543,"meta":26415,"navigation":246,"path":26416,"seo":26417,"stem":26418,"__hash__":26419},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":26114,"toc":26407},[26115,26118,26122,26132,26139,26146,26149,26156,26159,26162,26166,26178,26182,26228,26231,26234,26237,26240,26243,26247,26285,26291,26295,26349,26354,26357,26360,26365,26368,26373,26376,26379,26383,26386,26389,26393],[10,26116,26112],{"id":26117},"_1简介",[588,26119,26121],{"id":26120},"_11什么是-docker","1.1什么是 Docker？",[14,26123,26124,26125,26128,26129],{},"Docker 是一个开源的 ",[765,26126,26127],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[765,26130,26131],{},"一次构建，到处运行。",[14,26133,26134,26135,26138],{},"“ ",[765,26136,26137],{},"一次构建，到处运行"," ”也就是说：",[571,26140,26141],{},[574,26142,26143],{},[765,26144,26145],{},"之前：",[14,26147,26148],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[571,26150,26151],{},[574,26152,26153],{},[765,26154,26155],{},"使用docker后：",[14,26157,26158],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,26160,26161],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[588,26163,26165],{"id":26164},"_12它是怎么工作的","1.2.它是怎么工作的？",[1618,26167,26168,26171],{},[574,26169,26170],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[574,26172,26173,26174,26177],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[765,26175,26176],{},"无论在哪运行都一样稳定"," 。",[588,26179,26181],{"id":26180},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[753,26183,26184,26194],{},[756,26185,26186],{},[759,26187,26188,26191],{},[762,26189,26190],{"align":24175},"概念",[762,26192,26193],{"align":24175},"解释",[800,26195,26196,26204,26212,26220],{},[759,26197,26198,26201],{},[805,26199,26200],{"align":24175},"镜像",[805,26202,26203],{"align":24175},"Image，运行容器的模板，像是一个应用快照",[759,26205,26206,26209],{},[805,26207,26208],{"align":24175},"容器",[805,26210,26211],{"align":24175},"Container，运行中的镜像实例，有自己的文件系统、网络等",[759,26213,26214,26217],{},[805,26215,26216],{"align":24175},"Dockerfile",[805,26218,26219],{"align":24175},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[759,26221,26222,26225],{},[805,26223,26224],{"align":24175},"仓库",[805,26226,26227],{"align":24175},"Registry，存放镜像的地方，比如 Docker Hub",[14,26229,26230],{},"抽象化理解:",[14,26232,26233],{},"Docker镜像≈C++类",[14,26235,26236],{},"Docker容器≈C++类实例(即对象)",[14,26238,26239],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,26241,26242],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[588,26244,26246],{"id":26245},"_14类比理解","1.4.类比理解",[753,26248,26249,26259],{},[756,26250,26251],{},[759,26252,26253,26256],{},[762,26254,26255],{"align":24175},"传统部署",[762,26257,26258],{"align":24175},"Docker部署",[800,26260,26261,26269,26277],{},[759,26262,26263,26266],{},[805,26264,26265],{"align":24175},"手动安装依赖、调试版本不一致问题",[805,26267,26268],{"align":24175},"一次打包环境和代码",[759,26270,26271,26274],{},[805,26272,26273],{"align":24175},"程序“裸奔”跑在系统上",[805,26275,26276],{"align":24175},"程序“穿着容器”隔离运行",[759,26278,26279,26282],{},[805,26280,26281],{"align":24175},"容易“在我电脑上能跑”",[805,26283,26284],{"align":24175},"保证“无论在哪都能跑”",[14,26286,26287,26288],{},"就像快递包裹： ",[765,26289,26290],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[588,26292,26294],{"id":26293},"_15docker-的核心优势","1.5.Docker 的核心优势",[753,26296,26297,26307],{},[756,26298,26299],{},[759,26300,26301,26304],{},[762,26302,26303],{"align":24175},"优势",[762,26305,26306],{"align":24175},"说明",[800,26308,26309,26317,26325,26333,26341],{},[759,26310,26311,26314],{},[805,26312,26313],{"align":24175},"轻量级",[805,26315,26316],{"align":24175},"基于系统内核共享，启动速度快，占资源少",[759,26318,26319,26322],{},[805,26320,26321],{"align":24175},"跨平台",[805,26323,26324],{"align":24175},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[759,26326,26327,26330],{},[805,26328,26329],{"align":24175},"易于迁移部署",[805,26331,26332],{"align":24175},"应用和环境一起封装，不怕依赖不一致",[759,26334,26335,26338],{},[805,26336,26337],{"align":24175},"易于版本控制",[805,26339,26340],{"align":24175},"镜像版本可控，支持回滚",[759,26342,26343,26346],{},[805,26344,26345],{"align":24175},"生态丰富",[805,26347,26348],{"align":24175},"Docker Hub 上有成千上万的现成镜像可用",[571,26350,26351],{},[574,26352,26353],{},"在Linux上可以几乎实现无性能损失。",[14,26355,26356],{},"docker里的发行版和本机共用Linux内核。",[14,26358,26359],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[571,26361,26362],{},[574,26363,26364],{},"可以快速部署在绝大多数Linux发行版",[14,26366,26367],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[571,26369,26370],{},[574,26371,26372],{},"配置环境简单",[14,26374,26375],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,26377,26378],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[571,26380,26381],{},[574,26382,26345],{},[14,26384,26385],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,26387,26388],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[588,26390,26392],{"id":26391},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1618,26394,26395,26398,26401,26404],{},[574,26396,26397],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[574,26399,26400],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[574,26402,26403],{},"微服务架构：每个服务一个容器，灵活组合",[574,26405,26406],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":31,"searchDepth":46,"depth":46,"links":26408},[26409,26410,26411,26412,26413,26414],{"id":26120,"depth":52,"text":26121},{"id":26164,"depth":52,"text":26165},{"id":26180,"depth":52,"text":26181},{"id":26245,"depth":52,"text":26246},{"id":26293,"depth":52,"text":26294},{"id":26391,"depth":52,"text":26392},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":26112,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26421,"title":26422,"body":26423,"description":31,"extension":543,"meta":27153,"navigation":246,"path":27154,"seo":27155,"stem":27156,"__hash__":27157},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26424,"toc":27148},[26425,26428,26432,26435,26438,26444,26450,26454,26463,26466,26522,26525,26576,26579,26661,26664,26700,26704,26715,26728,26735,26738,26818,26821,26871,26874,26897,26901,26908,26911,26927,26933,26936,26952,26958,26961,26977,26991,26997,27017,27023,27026,27038,27044,27047,27061,27067,27070,27090,27095,27098,27101,27105,27108,27111,27114,27121,27124,27127,27130,27135,27140,27145],[10,26426,26422],{"id":26427},"_2安装docker",[588,26429,26431],{"id":26430},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,26433,26434],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,26436,26437],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,26439,26440],{},[20,26441,26442],{"href":26442,"rel":26443},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24],[14,26445,26446],{},[20,26447,26448],{"href":26448,"rel":26449},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24],[22437,26451,26453],{"id":26452},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,26455,26456,26457,26462],{},"以下内容根据 ",[20,26458,26461],{"href":26459,"rel":26460},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24],"官方文档"," 修改而来。",[14,26464,26465],{},"如果你过去安装过 docker，先删掉：",[26,26467,26469],{"className":24261,"code":26468,"language":24263,"meta":31,"style":31},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[33,26470,26471],{"__ignoreMap":31},[36,26472,26473,26475,26478,26481,26484,26487,26490,26493,26496,26499,26502,26505,26508,26511,26514,26516,26519],{"class":38,"line":39},[36,26474,3476],{"class":163},[36,26476,26477],{"class":98}," pkg ",[36,26479,26480],{"class":163},"in",[36,26482,26483],{"class":59}," docker.io",[36,26485,26486],{"class":59}," docker-doc",[36,26488,26489],{"class":59}," docker-compose",[36,26491,26492],{"class":59}," docker-compose-v2",[36,26494,26495],{"class":59}," podman-docker",[36,26497,26498],{"class":59}," containerd",[36,26500,26501],{"class":59}," runc",[36,26503,26504],{"class":98},"; ",[36,26506,26507],{"class":163},"do",[36,26509,26510],{"class":55}," sudo",[36,26512,26513],{"class":59}," apt-get",[36,26515,388],{"class":59},[36,26517,26518],{"class":98}," $pkg; ",[36,26520,26521],{"class":163},"done\n",[14,26523,26524],{},"首先安装依赖和GPG：",[26,26526,26530],{"className":26527,"code":26528,"language":26529,"meta":31,"style":31},"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",[33,26531,26532,26537,26542,26547,26552,26557,26562,26566,26571],{"__ignoreMap":31},[36,26533,26534],{"class":38,"line":39},[36,26535,26536],{},"# Add Docker's official GPG key:\n",[36,26538,26539],{"class":38,"line":46},[36,26540,26541],{},"sudo apt-get update\n",[36,26543,26544],{"class":38,"line":52},[36,26545,26546],{},"sudo apt-get install ca-certificates curl\n",[36,26548,26549],{"class":38,"line":66},[36,26550,26551],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[36,26553,26554],{"class":38,"line":72},[36,26555,26556],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[36,26558,26559],{"class":38,"line":82},[36,26560,26561],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[36,26563,26564],{"class":38,"line":88},[36,26565,247],{"emptyLinePlaceholder":246},[36,26567,26568],{"class":38,"line":113},[36,26569,26570],{},"# 如果上面这行报错就弄下面这行\n",[36,26572,26573],{"class":38,"line":119},[36,26574,26575],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,26577,26578],{},"信任 Docker 的 GPG 公钥并添加仓库：",[26,26580,26582],{"className":24261,"code":26581,"language":24263,"meta":31,"style":31},"# 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",[33,26583,26584,26589,26595,26612,26644],{"__ignoreMap":31},[36,26585,26586],{"class":38,"line":39},[36,26587,26588],{"class":42},"# Add the repository to Apt sources:\n",[36,26590,26591,26593],{"class":38,"line":46},[36,26592,25562],{"class":109},[36,26594,25115],{"class":109},[36,26596,26597,26600,26603,26606,26609],{"class":38,"line":52},[36,26598,26599],{"class":59},"  \"deb [arch=$(",[36,26601,26602],{"class":55},"dpkg",[36,26604,26605],{"class":109}," --print-architecture",[36,26607,26608],{"class":59},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[36,26610,26611],{"class":109},"\\\n",[36,26613,26614,26617,26619,26621,26624,26626,26628,26630,26633,26635,26637,26640,26642],{"class":38,"line":66},[36,26615,26616],{"class":59},"  \"",[36,26618,25536],{"class":98},[36,26620,1172],{"class":109},[36,26622,26623],{"class":59}," \u002Fetc\u002Fos-release",[36,26625,99],{"class":98},[36,26627,25562],{"class":109},[36,26629,10164],{"class":59},[36,26631,26632],{"class":98},"$VERSION_CODENAME",[36,26634,866],{"class":59},[36,26636,1043],{"class":98},[36,26638,26639],{"class":59},"\" stable\"",[36,26641,25546],{"class":163},[36,26643,25115],{"class":109},[36,26645,26646,26649,26652,26655,26658],{"class":38,"line":72},[36,26647,26648],{"class":55},"  sudo",[36,26650,26651],{"class":59}," tee",[36,26653,26654],{"class":59}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[36,26656,26657],{"class":163}," >",[36,26659,26660],{"class":59}," \u002Fdev\u002Fnull\n",[14,26662,26663],{},"最后安装",[26,26665,26667],{"className":24261,"code":26666,"language":24263,"meta":31,"style":31},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[33,26668,26669,26677],{"__ignoreMap":31},[36,26670,26671,26673,26675],{"class":38,"line":39},[36,26672,56],{"class":55},[36,26674,26513],{"class":59},[36,26676,63],{"class":59},[36,26678,26679,26681,26683,26685,26688,26691,26694,26697],{"class":38,"line":46},[36,26680,56],{"class":55},[36,26682,26513],{"class":59},[36,26684,160],{"class":59},[36,26686,26687],{"class":59}," docker-ce",[36,26689,26690],{"class":59}," docker-ce-cli",[36,26692,26693],{"class":59}," containerd.io",[36,26695,26696],{"class":59}," docker-buildx-plugin",[36,26698,26699],{"class":59}," docker-compose-plugin\n",[22437,26701,26703],{"id":26702},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,26705,26706,26707,26710,26711,26714],{},"查看自己自己包管理工具版本（dnf是 ",[765,26708,26709],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[765,26712,26713],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[26,26716,26718],{"className":24261,"code":26717,"language":24263,"meta":31,"style":31},"dnf --version\n",[33,26719,26720],{"__ignoreMap":31},[36,26721,26722,26725],{"class":38,"line":39},[36,26723,26724],{"class":55},"dnf",[36,26726,26727],{"class":109}," --version\n",[14,26729,26456,26730,26734],{},[20,26731,26461],{"href":26732,"rel":26733},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,26736,26737],{},"如果你之前安装过 docker，请先删掉",[26,26739,26741],{"className":24261,"code":26740,"language":24263,"meta":31,"style":31},"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",[33,26742,26743,26757,26764,26771,26778,26785,26792,26799,26806,26813],{"__ignoreMap":31},[36,26744,26745,26747,26750,26752,26755],{"class":38,"line":39},[36,26746,56],{"class":55},[36,26748,26749],{"class":59}," dnf",[36,26751,388],{"class":59},[36,26753,26754],{"class":59}," docker",[36,26756,25115],{"class":109},[36,26758,26759,26762],{"class":38,"line":46},[36,26760,26761],{"class":59},"                  docker-client",[36,26763,25115],{"class":109},[36,26765,26766,26769],{"class":38,"line":52},[36,26767,26768],{"class":59},"                  docker-client-latest",[36,26770,25115],{"class":109},[36,26772,26773,26776],{"class":38,"line":66},[36,26774,26775],{"class":59},"                  docker-common",[36,26777,25115],{"class":109},[36,26779,26780,26783],{"class":38,"line":72},[36,26781,26782],{"class":59},"                  docker-latest",[36,26784,25115],{"class":109},[36,26786,26787,26790],{"class":38,"line":82},[36,26788,26789],{"class":59},"                  docker-latest-logrotate",[36,26791,25115],{"class":109},[36,26793,26794,26797],{"class":38,"line":88},[36,26795,26796],{"class":59},"                  docker-logrotate",[36,26798,25115],{"class":109},[36,26800,26801,26804],{"class":38,"line":113},[36,26802,26803],{"class":59},"                  docker-selinux",[36,26805,25115],{"class":109},[36,26807,26808,26811],{"class":38,"line":119},[36,26809,26810],{"class":59},"                  docker-engine-selinux",[36,26812,25115],{"class":109},[36,26814,26815],{"class":38,"line":131},[36,26816,26817],{"class":59},"                  docker-engine\n",[14,26819,26820],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[26,26822,26824],{"className":24261,"code":26823,"language":24263,"meta":31,"style":31},"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",[33,26825,26826,26840,26855],{"__ignoreMap":31},[36,26827,26828,26830,26832,26835,26837],{"class":38,"line":39},[36,26829,56],{"class":55},[36,26831,26749],{"class":59},[36,26833,26834],{"class":109}," -y",[36,26836,160],{"class":59},[36,26838,26839],{"class":59}," dnf-plugins-core\n",[36,26841,26842,26844,26846,26849,26852],{"class":38,"line":46},[36,26843,56],{"class":55},[36,26845,26749],{"class":59},[36,26847,26848],{"class":59}," config-manager",[36,26850,26851],{"class":59}," addrepo",[36,26853,26854],{"class":109}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[36,26856,26857,26859,26862,26865,26868],{"class":38,"line":52},[36,26858,56],{"class":55},[36,26860,26861],{"class":59}," sed",[36,26863,26864],{"class":109}," -i",[36,26866,26867],{"class":59}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[36,26869,26870],{"class":59}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,26872,26873],{},"最后安装：",[26,26875,26877],{"className":24261,"code":26876,"language":24263,"meta":31,"style":31},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[33,26878,26879],{"__ignoreMap":31},[36,26880,26881,26883,26885,26887,26889,26891,26893,26895],{"class":38,"line":39},[36,26882,56],{"class":55},[36,26884,26749],{"class":59},[36,26886,160],{"class":59},[36,26888,26687],{"class":59},[36,26890,26690],{"class":59},[36,26892,26693],{"class":59},[36,26894,26696],{"class":59},[36,26896,26699],{"class":59},[588,26898,26900],{"id":26899},"_22配置环境","2.2.配置环境",[22437,26902,26904,26907],{"id":26903},"_221检查-docker-服务状态",[765,26905,26906],{},"2.2.1.检查 Docker 服务状态"," ：",[14,26909,26910],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[26,26912,26914],{"className":24261,"code":26913,"language":24263,"meta":31,"style":31},"systemctl status docker\n",[33,26915,26916],{"__ignoreMap":31},[36,26917,26918,26921,26924],{"class":38,"line":39},[36,26919,26920],{"class":55},"systemctl",[36,26922,26923],{"class":59}," status",[36,26925,26926],{"class":59}," docker\n",[22437,26928,26930,26907],{"id":26929},"_222启动-docker-服务",[765,26931,26932],{},"2.2.2.启动 Docker 服务",[14,26934,26935],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[26,26937,26939],{"className":24261,"code":26938,"language":24263,"meta":31,"style":31},"sudo systemctl start docker\n",[33,26940,26941],{"__ignoreMap":31},[36,26942,26943,26945,26948,26950],{"class":38,"line":39},[36,26944,56],{"class":55},[36,26946,26947],{"class":59}," systemctl",[36,26949,4635],{"class":59},[36,26951,26926],{"class":59},[22437,26953,26955,26907],{"id":26954},"_223设置-docker-开机自启",[765,26956,26957],{},"2.2.3.设置 Docker 开机自启",[14,26959,26960],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[26,26962,26964],{"className":24261,"code":26963,"language":24263,"meta":31,"style":31},"sudo systemctl enable docker\n",[33,26965,26966],{"__ignoreMap":31},[36,26967,26968,26970,26972,26975],{"class":38,"line":39},[36,26969,56],{"class":55},[36,26971,26947],{"class":59},[36,26973,26974],{"class":59}," enable",[36,26976,26926],{"class":59},[22437,26978,26980,14234,26983,14234,26988,26907],{"id":26979},"_224将用户添加到-docker-组",[765,26981,26982],{},"2.2.4.将用户添加到",[765,26984,26985],{},[33,26986,26987],{},"docker",[765,26989,26990],{},"组",[14,26992,26993,26994,26996],{},"使用以下命令将当前用户添加到 ",[33,26995,26987],{}," 组：",[26,26998,27000],{"className":24261,"code":26999,"language":24263,"meta":31,"style":31},"sudo usermod -aG docker $USER\n",[33,27001,27002],{"__ignoreMap":31},[36,27003,27004,27006,27009,27012,27014],{"class":38,"line":39},[36,27005,56],{"class":55},[36,27007,27008],{"class":59}," usermod",[36,27010,27011],{"class":109}," -aG",[36,27013,26754],{"class":59},[36,27015,27016],{"class":98}," $USER\n",[22437,27018,27020,26907],{"id":27019},"_225退出并重新登录",[765,27021,27022],{},"2.2.5.退出并重新登录",[14,27024,27025],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[26,27027,27029],{"className":24261,"code":27028,"language":24263,"meta":31,"style":31},"newgrp docker\n",[33,27030,27031],{"__ignoreMap":31},[36,27032,27033,27036],{"class":38,"line":39},[36,27034,27035],{"class":55},"newgrp",[36,27037,26926],{"class":59},[22437,27039,27041,26907],{"id":27040},"_226重新启动-docker-服务如果需要",[765,27042,27043],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,27045,27046],{},"确保 Docker 服务正在运行，可以使用以下命令：",[26,27048,27049],{"className":24261,"code":26938,"language":24263,"meta":31,"style":31},[33,27050,27051],{"__ignoreMap":31},[36,27052,27053,27055,27057,27059],{"class":38,"line":39},[36,27054,56],{"class":55},[36,27056,26947],{"class":59},[36,27058,4635],{"class":59},[36,27060,26926],{"class":59},[22437,27062,27064,26907],{"id":27063},"_227重启电脑后检查-docker-服务状态",[765,27065,27066],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,27068,27069],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[26,27071,27073],{"className":24261,"code":27072,"language":24263,"meta":31,"style":31},"sudo reboot\nsystemctl status docker\n",[33,27074,27075,27082],{"__ignoreMap":31},[36,27076,27077,27079],{"class":38,"line":39},[36,27078,56],{"class":55},[36,27080,27081],{"class":59}," reboot\n",[36,27083,27084,27086,27088],{"class":38,"line":46},[36,27085,26920],{"class":55},[36,27087,26923],{"class":59},[36,27089,26926],{"class":59},[14,27091,27092],{},[1941,27093],{"alt":31,"src":27094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,27096,27097],{},"第三行显示enabled说明开机自启动成功",[14,27099,27100],{},"按q退出",[588,27102,27104],{"id":27103},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,27106,27107],{},"优先使用linux来使用docker是比较好的",[14,27109,27110],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,27112,27113],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,27115,27116,27117],{},"官方下载安装:",[20,27118,27119],{"href":27119,"rel":27120},"https:\u002F\u002Fwww.docker.com\u002F",[24],[14,27122,27123],{},"Windows的Docker显卡直通与USB直通:",[14,27125,27126],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,27128,27129],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,27131,27132],{},[1941,27133],{"alt":31,"src":27134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,27136,27137],{},[1941,27138],{"alt":31,"src":27139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,27141,27142],{},[1941,27143],{"alt":31,"src":27144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[537,27146,27147],{},"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":31,"searchDepth":46,"depth":46,"links":27149},[27150,27151,27152],{"id":26430,"depth":52,"text":26431},{"id":26899,"depth":52,"text":26900},{"id":27103,"depth":52,"text":27104},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26422,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":27159,"title":27160,"body":27161,"description":27168,"extension":543,"meta":27861,"navigation":246,"path":27862,"seo":27863,"stem":27864,"__hash__":27865},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27162,"toc":27855},[27163,27166,27169,27173,27178,27183,27186,27214,27219,27228,27231,27236,27240,27247,27252,27258,27262,27265,27269,27274,27366,27371,27389,27394,27415,27420,27436,27440,27445,27474,27479,27525,27530,27574,27582,27599,27604,27620,27625,27639,27642,27645,27648,27651,27680,27683,27688,27692,27695,27698,27704,27707,27710,27713,27775,27782,27787,27790,27808,27812,27815,27832,27835,27838,27852],[10,27164,27160],{"id":27165},"_3docker直通",[14,27167,27168],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[588,27170,27172],{"id":27171},"_31usb直通","3.1.USB直通",[14,27174,27175],{},[1941,27176],{"alt":31,"src":27177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[571,27179,27180],{},[574,27181,27182],{},"方法一(不是很推荐新手)：",[14,27184,27185],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[26,27187,27189],{"className":24261,"code":27188,"language":24263,"meta":31,"style":31},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[33,27190,27191,27199,27204],{"__ignoreMap":31},[36,27192,27193,27196],{"class":38,"line":39},[36,27194,27195],{"class":55},"ls",[36,27197,27198],{"class":59}," \u002Fdev\n",[36,27200,27201],{"class":38,"line":46},[36,27202,27203],{"class":42},"#例如\n",[36,27205,27206,27209,27211],{"class":38,"line":52},[36,27207,27208],{"class":98},"--device",[36,27210,176],{"class":163},[36,27212,27213],{"class":59},"\u002Fdev\u002Ftty_USB0\n",[571,27215,27216],{"start":46},[574,27217,27218],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[26,27220,27222],{"className":24261,"code":27221,"language":24263,"meta":31,"style":31},"--privileged\n",[33,27223,27224],{"__ignoreMap":31},[36,27225,27226],{"class":38,"line":39},[36,27227,27221],{"class":55},[14,27229,27230],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,27232,27233],{},[1941,27234],{"alt":31,"src":27235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[588,27237,27239],{"id":27238},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,27241,27242,27243,27246],{},"NVIDIA Container Toolkit使用户 ",[765,27244,27245],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,27248,27249],{},[1941,27250],{"alt":31,"src":27251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,27253,27254],{},[20,27255,27256],{"href":27256,"rel":27257},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24],[22437,27259,27261],{"id":27260},"_321安装","3.2.1.安装",[14,27263,27264],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23349,27266,27268],{"id":27267},"_3211ubuntu","3.2.1.1.Ubuntu",[571,27270,27271],{},[574,27272,27273],{},"配置存储库 并更新",[26,27275,27277],{"className":24261,"code":27276,"language":24263,"meta":31,"style":31},"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",[33,27278,27279,27308,27328,27340,27352,27358],{"__ignoreMap":31},[36,27280,27281,27284,27287,27290,27292,27294,27297,27300,27303,27306],{"class":38,"line":39},[36,27282,27283],{"class":55},"curl",[36,27285,27286],{"class":109}," -fsSL",[36,27288,27289],{"class":59}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[36,27291,25546],{"class":163},[36,27293,26510],{"class":55},[36,27295,27296],{"class":59}," gpg",[36,27298,27299],{"class":109}," --dearmor",[36,27301,27302],{"class":109}," -o",[36,27304,27305],{"class":59}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[36,27307,25115],{"class":109},[36,27309,27310,27313,27315,27318,27321,27324,27326],{"class":38,"line":46},[36,27311,27312],{"class":98},"  && ",[36,27314,27283],{"class":55},[36,27316,27317],{"class":109}," -s",[36,27319,27320],{"class":109}," -L",[36,27322,27323],{"class":59}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[36,27325,25546],{"class":163},[36,27327,25115],{"class":109},[36,27329,27330,27333,27336,27338],{"class":38,"line":52},[36,27331,27332],{"class":55},"    sed",[36,27334,27335],{"class":59}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[36,27337,25546],{"class":163},[36,27339,25115],{"class":109},[36,27341,27342,27345,27347,27350],{"class":38,"line":66},[36,27343,27344],{"class":55},"    sudo",[36,27346,26651],{"class":59},[36,27348,27349],{"class":59}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[36,27351,25115],{"class":109},[36,27353,27354,27356],{"class":38,"line":72},[36,27355,27312],{"class":98},[36,27357,26611],{"class":109},[36,27359,27360,27362,27364],{"class":38,"line":82},[36,27361,27344],{"class":55},[36,27363,26513],{"class":59},[36,27365,63],{"class":59},[571,27367,27368],{"start":46},[574,27369,27370],{},"安装nvidia-docker2",[26,27372,27374],{"className":24261,"code":27373,"language":24263,"meta":31,"style":31},"sudo apt-get install -y nvidia-docker2\n",[33,27375,27376],{"__ignoreMap":31},[36,27377,27378,27380,27382,27384,27386],{"class":38,"line":39},[36,27379,56],{"class":55},[36,27381,26513],{"class":59},[36,27383,160],{"class":59},[36,27385,26834],{"class":109},[36,27387,27388],{"class":59}," nvidia-docker2\n",[571,27390,27391],{"start":52},[574,27392,27393],{},"使用nvidia-ctk命令配置container runtime",[26,27395,27397],{"className":24261,"code":27396,"language":24263,"meta":31,"style":31},"sudo nvidia-ctk runtime configure --runtime=docker\n",[33,27398,27399],{"__ignoreMap":31},[36,27400,27401,27403,27406,27409,27412],{"class":38,"line":39},[36,27402,56],{"class":55},[36,27404,27405],{"class":59}," nvidia-ctk",[36,27407,27408],{"class":59}," runtime",[36,27410,27411],{"class":59}," configure",[36,27413,27414],{"class":109}," --runtime=docker\n",[571,27416,27417],{"start":66},[574,27418,27419],{},"重启docker服务:",[26,27421,27423],{"className":24261,"code":27422,"language":24263,"meta":31,"style":31},"sudo systemctl restart docker\n",[33,27424,27425],{"__ignoreMap":31},[36,27426,27427,27429,27431,27434],{"class":38,"line":39},[36,27428,56],{"class":55},[36,27430,26947],{"class":59},[36,27432,27433],{"class":59}," restart",[36,27435,26926],{"class":59},[23349,27437,27439],{"id":27438},"_3212fedora","3.2.1.2.Fedora",[571,27441,27442],{},[574,27443,27444],{},"配置存储库",[26,27446,27448],{"className":24261,"code":27447,"language":24263,"meta":31,"style":31},"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",[33,27449,27450,27465],{"__ignoreMap":31},[36,27451,27452,27454,27456,27458,27461,27463],{"class":38,"line":39},[36,27453,27283],{"class":55},[36,27455,27317],{"class":109},[36,27457,27320],{"class":109},[36,27459,27460],{"class":59}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[36,27462,25546],{"class":163},[36,27464,25115],{"class":109},[36,27466,27467,27469,27471],{"class":38,"line":46},[36,27468,56],{"class":55},[36,27470,26651],{"class":59},[36,27472,27473],{"class":59}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[571,27475,27476],{"start":46},[574,27477,27478],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[26,27480,27482],{"className":24261,"code":27481,"language":24263,"meta":31,"style":31},"# 如果是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",[33,27483,27484,27489,27503,27507,27512],{"__ignoreMap":31},[36,27485,27486],{"class":38,"line":39},[36,27487,27488],{"class":42},"# 如果是RHEL或者Rocky（DNF4）\n",[36,27490,27491,27493,27495,27497,27500],{"class":38,"line":46},[36,27492,56],{"class":55},[36,27494,26749],{"class":59},[36,27496,26848],{"class":59},[36,27498,27499],{"class":109}," --add-repo",[36,27501,27502],{"class":59}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[36,27504,27505],{"class":38,"line":52},[36,27506,247],{"emptyLinePlaceholder":246},[36,27508,27509],{"class":38,"line":66},[36,27510,27511],{"class":42},"# 如果是Feodra41+（DNF5）\n",[36,27513,27514,27516,27518,27520,27522],{"class":38,"line":72},[36,27515,56],{"class":55},[36,27517,26749],{"class":59},[36,27519,26848],{"class":59},[36,27521,26851],{"class":59},[36,27523,27524],{"class":109}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[571,27526,27527],{"start":52},[574,27528,27529],{},"安装NVIDIA Container Toolki包",[26,27531,27533],{"className":24261,"code":27532,"language":24263,"meta":31,"style":31},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[33,27534,27535,27540,27553,27557,27562],{"__ignoreMap":31},[36,27536,27537],{"class":38,"line":39},[36,27538,27539],{"class":42},"# 如果是RHEL或者Rocky\n",[36,27541,27542,27544,27546,27548,27550],{"class":38,"line":46},[36,27543,56],{"class":55},[36,27545,26749],{"class":59},[36,27547,160],{"class":59},[36,27549,26834],{"class":109},[36,27551,27552],{"class":59}," nvidia-container-toolkit\n",[36,27554,27555],{"class":38,"line":52},[36,27556,247],{"emptyLinePlaceholder":246},[36,27558,27559],{"class":38,"line":66},[36,27560,27561],{"class":42},"# 如果是Fedora\n",[36,27563,27564,27566,27568,27570,27572],{"class":38,"line":72},[36,27565,56],{"class":55},[36,27567,26749],{"class":59},[36,27569,160],{"class":59},[36,27571,26834],{"class":109},[36,27573,27552],{"class":59},[571,27575,27576],{"start":66},[574,27577,27578,27579,27581],{},"安装nvidia-docker2 ： 在Fedora上使用",[33,27580,26724],{},"进行安装",[26,27583,27585],{"className":24261,"code":27584,"language":24263,"meta":31,"style":31},"sudo dnf install -y nvidia-docker2\n",[33,27586,27587],{"__ignoreMap":31},[36,27588,27589,27591,27593,27595,27597],{"class":38,"line":39},[36,27590,56],{"class":55},[36,27592,26749],{"class":59},[36,27594,160],{"class":59},[36,27596,26834],{"class":109},[36,27598,27388],{"class":59},[571,27600,27601],{"start":72},[574,27602,27603],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[26,27605,27606],{"className":24261,"code":27396,"language":24263,"meta":31,"style":31},[33,27607,27608],{"__ignoreMap":31},[36,27609,27610,27612,27614,27616,27618],{"class":38,"line":39},[36,27611,56],{"class":55},[36,27613,27405],{"class":59},[36,27615,27408],{"class":59},[36,27617,27411],{"class":59},[36,27619,27414],{"class":109},[571,27621,27622],{"start":82},[574,27623,27624],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[26,27626,27627],{"className":24261,"code":27422,"language":24263,"meta":31,"style":31},[33,27628,27629],{"__ignoreMap":31},[36,27630,27631,27633,27635,27637],{"class":38,"line":39},[36,27632,56],{"class":55},[36,27634,26947],{"class":59},[36,27636,27433],{"class":59},[36,27638,26926],{"class":59},[14,27640,27641],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,27643,27644],{},"方法：",[14,27646,27647],{},"1️⃣nvidia-smi",[14,27649,27650],{},"2️⃣运行nvidia cuda 容器进行测试",[26,27652,27654],{"className":24261,"code":27653,"language":24263,"meta":31,"style":31},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[33,27655,27656],{"__ignoreMap":31},[36,27657,27658,27660,27662,27665,27668,27671,27674,27677],{"class":38,"line":39},[36,27659,56],{"class":55},[36,27661,26754],{"class":59},[36,27663,27664],{"class":59}," run",[36,27666,27667],{"class":109}," --rm",[36,27669,27670],{"class":109}," --gpus",[36,27672,27673],{"class":59}," all",[36,27675,27676],{"class":59}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[36,27678,27679],{"class":59}," nvidia-smi\n",[14,27681,27682],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,27684,27685],{},[1941,27686],{"alt":31,"src":27687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[588,27689,27691],{"id":27690},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,27693,27694],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,27696,27697],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,27699,27700],{},[20,27701,27702],{"href":27702,"rel":27703},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24],[14,27705,27706],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,27708,27709],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,27711,27712],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[753,27714,27715,27731],{},[756,27716,27717],{},[759,27718,27719,27722,27725,27728],{},[762,27720,27721],{"align":24175},"镜像类型",[762,27723,27724],{"align":24175},"适用场景",[762,27726,27727],{"align":24175},"示例标签",[762,27729,27730],{"align":24175},"大小",[800,27732,27733,27747,27761],{},[759,27734,27735,27738,27741,27744],{},[805,27736,27737],{"align":24175},"base",[805,27739,27740],{"align":24175},"仅需 CUDA 运行时库",[805,27742,27743],{"align":24175},"12.4.0-base-ubuntu22.04",[805,27745,27746],{"align":24175},"~240MB",[759,27748,27749,27752,27755,27758],{},[805,27750,27751],{"align":24175},"runtime",[805,27753,27754],{"align":24175},"部署编译后的应用（含数学库）",[805,27756,27757],{"align":24175},"12.4.0-runtime-ubuntu22.04",[805,27759,27760],{"align":24175},"~2GB",[759,27762,27763,27766,27769,27772],{},[805,27764,27765],{"align":24175},"devel",[805,27767,27768],{"align":24175},"开发环境（含编译工具）",[805,27770,27771],{"align":24175},"12.4.0-devel-ubuntu22.04",[805,27773,27774],{"align":24175},"~3GB",[14,27776,27777,27778,27781],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[33,27779,27780],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,27783,27784],{},[1941,27785],{"alt":31,"src":27786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,27788,27789],{},"在dockerfile里就可以开头这么写：",[26,27791,27793],{"className":24261,"code":27792,"language":24263,"meta":31,"style":31},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[33,27794,27795,27800],{"__ignoreMap":31},[36,27796,27797],{"class":38,"line":39},[36,27798,27799],{"class":42},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[36,27801,27802,27805],{"class":38,"line":46},[36,27803,27804],{"class":55},"FROM",[36,27806,27807],{"class":59}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[588,27809,27811],{"id":27810},"_34配置以太网","3.4.配置以太网",[14,27813,27814],{},"指定网络模式",[26,27816,27818],{"className":24261,"code":27817,"language":24263,"meta":31,"style":31},"--net=host \\\n",[33,27819,27820],{"__ignoreMap":31},[36,27821,27822,27825,27827,27830],{"class":38,"line":39},[36,27823,27824],{"class":98},"--net",[36,27826,176],{"class":163},[36,27828,27829],{"class":59},"host",[36,27831,25115],{"class":55},[14,27833,27834],{},"启动参数里加上这行即可。具体在下方",[14,27836,27837],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1618,27839,27840,27843,27846,27849],{},[574,27841,27842],{},"--net=bridge:默认选项，表示连接到默认的网桥",[574,27844,27845],{},"--net=host:容器使用宿主机的网络",[574,27847,27848],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[574,27850,27851],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[537,27853,27854],{},"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":31,"searchDepth":46,"depth":46,"links":27856},[27857,27858,27859,27860],{"id":27171,"depth":52,"text":27172},{"id":27238,"depth":52,"text":27239},{"id":27690,"depth":52,"text":27691},{"id":27810,"depth":52,"text":27811},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27160,"description":27168},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27867,"title":27868,"body":27869,"description":27876,"extension":543,"meta":27882,"navigation":246,"path":27883,"seo":27884,"stem":27885,"__hash__":27886},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27870,"toc":27880},[27871,27874,27877],[10,27872,27868],{"id":27873},"_4dockerhub换源",[14,27875,27876],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,27878,27879],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":31,"searchDepth":46,"depth":46,"links":27881},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27868,"description":27876},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27888,"title":27889,"body":27890,"description":31,"extension":543,"meta":28902,"navigation":246,"path":28903,"seo":28904,"stem":28905,"__hash__":28906},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27891,"toc":28897},[27892,27895,27899,27905,27909,27912,28252,28255,28258,28261,28266,28271,28274,28277,28280,28283,28302,28305,28316,28322,28504,28514,28530,28793,28795,28820,28835,28844,28894],[10,27893,27889],{"id":27894},"_5docker命令学习",[588,27896,27898],{"id":27897},"_51参考文档","5.1.参考文档",[14,27900,27901],{},[20,27902,27903],{"href":27903,"rel":27904},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24],[588,27906,27908],{"id":27907},"_52常用命令","5.2.常用命令",[14,27910,27911],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[753,27913,27914,27927],{},[756,27915,27916],{},[759,27917,27918,27921,27924],{},[762,27919,27920],{"align":24175},"命令",[762,27922,27923],{"align":24175},"描述",[762,27925,27926],{"align":24175},"示例",[800,27928,27929,27940,27951,27962,27973,27984,27995,28006,28016,28027,28038,28049,28059,28070,28081,28092,28102,28112,28122,28132,28143,28154,28165,28176,28187,28198,28208,28219,28230,28241],{},[759,27930,27931,27934,27937],{},[805,27932,27933],{"align":24175},"docker run",[805,27935,27936],{"align":24175},"创建并启动一个新的容器。",[805,27938,27939],{"align":24175},"docker run -it ubuntu bash",[759,27941,27942,27945,27948],{},[805,27943,27944],{"align":24175},"docker build",[805,27946,27947],{"align":24175},"通过指定的 Dockerfile 创建一个新的镜像。",[805,27949,27950],{"align":24175},"docker build -t myimage .",[759,27952,27953,27956,27959],{},[805,27954,27955],{"align":24175},"docker pull",[805,27957,27958],{"align":24175},"从 Docker 仓库拉取镜像。",[805,27960,27961],{"align":24175},"docker pull ubuntu",[759,27963,27964,27967,27970],{},[805,27965,27966],{"align":24175},"docker push",[805,27968,27969],{"align":24175},"将本地镜像推送到 Docker 仓库。",[805,27971,27972],{"align":24175},"docker push myimage",[759,27974,27975,27978,27981],{},[805,27976,27977],{"align":24175},"docker stop",[805,27979,27980],{"align":24175},"停止一个正在运行的容器。",[805,27982,27983],{"align":24175},"docker stop container_id",[759,27985,27986,27989,27992],{},[805,27987,27988],{"align":24175},"docker start",[805,27990,27991],{"align":24175},"启动一个已经存在的容器。",[805,27993,27994],{"align":24175},"docker start container_id",[759,27996,27997,28000,28003],{},[805,27998,27999],{"align":24175},"docker restart",[805,28001,28002],{"align":24175},"重新启动容器。",[805,28004,28005],{"align":24175},"docker restart container_id",[759,28007,28008,28011,28014],{},[805,28009,28010],{"align":24175},"docker ps",[805,28012,28013],{"align":24175},"列出当前正在运行的容器。",[805,28015,28010],{"align":24175},[759,28017,28018,28021,28024],{},[805,28019,28020],{"align":24175},"docker rm",[805,28022,28023],{"align":24175},"删除一个或多个停止的容器。",[805,28025,28026],{"align":24175},"docker rm container_id",[759,28028,28029,28032,28035],{},[805,28030,28031],{"align":24175},"docker exec",[805,28033,28034],{"align":24175},"在一个正在运行的容器中执行命令。",[805,28036,28037],{"align":24175},"docker exec -it container_id bash",[759,28039,28040,28043,28046],{},[805,28041,28042],{"align":24175},"docker logs",[805,28044,28045],{"align":24175},"查看容器的日志输出。",[805,28047,28048],{"align":24175},"docker logs container_id",[759,28050,28051,28054,28057],{},[805,28052,28053],{"align":24175},"docker images",[805,28055,28056],{"align":24175},"列出本地所有镜像。",[805,28058,28053],{"align":24175},[759,28060,28061,28064,28067],{},[805,28062,28063],{"align":24175},"docker rmi",[805,28065,28066],{"align":24175},"删除一个或多个镜像。",[805,28068,28069],{"align":24175},"docker rmi myimage",[759,28071,28072,28075,28078],{},[805,28073,28074],{"align":24175},"docker network",[805,28076,28077],{"align":24175},"管理 Docker 网络。",[805,28079,28080],{"align":24175},"docker network ls",[759,28082,28083,28086,28089],{},[805,28084,28085],{"align":24175},"docker volume",[805,28087,28088],{"align":24175},"管理 Docker 数据卷。",[805,28090,28091],{"align":24175},"docker volume ls",[759,28093,28094,28097,28100],{},[805,28095,28096],{"align":24175},"docker-compose up",[805,28098,28099],{"align":24175},"启动 docker-compose.yml 中定义的所有服务。",[805,28101,28096],{"align":24175},[759,28103,28104,28107,28110],{},[805,28105,28106],{"align":24175},"docker-compose down",[805,28108,28109],{"align":24175},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[805,28111,28106],{"align":24175},[759,28113,28114,28117,28120],{},[805,28115,28116],{"align":24175},"docker info",[805,28118,28119],{"align":24175},"显示 Docker 系统的详细信息。",[805,28121,28116],{"align":24175},[759,28123,28124,28127,28130],{},[805,28125,28126],{"align":24175},"docker stats",[805,28128,28129],{"align":24175},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[805,28131,28126],{"align":24175},[759,28133,28134,28137,28140],{},[805,28135,28136],{"align":24175},"docker inspect",[805,28138,28139],{"align":24175},"查看容器或镜像的详细信息（JSON 格式）。",[805,28141,28142],{"align":24175},"docker inspect container_id",[759,28144,28145,28148,28151],{},[805,28146,28147],{"align":24175},"docker save",[805,28149,28150],{"align":24175},"将一个镜像保存为 tar 文件。",[805,28152,28153],{"align":24175},"docker save -o myimage.tar myimage",[759,28155,28156,28159,28162],{},[805,28157,28158],{"align":24175},"docker load",[805,28160,28161],{"align":24175},"从 tar 文件中加载镜像。",[805,28163,28164],{"align":24175},"docker load -i myimage.tar",[759,28166,28167,28170,28173],{},[805,28168,28169],{"align":24175},"docker tag",[805,28171,28172],{"align":24175},"为镜像添加标签（tag）。",[805,28174,28175],{"align":24175},"docker tag myimage myimage:v1",[759,28177,28178,28181,28184],{},[805,28179,28180],{"align":24175},"docker buildx build",[805,28182,28183],{"align":24175},"使用 Buildx 构建多架构镜像。",[805,28185,28186],{"align":24175},"docker buildx build -t myimage .",[759,28188,28189,28192,28195],{},[805,28190,28191],{"align":24175},"docker buildx create",[805,28193,28194],{"align":24175},"创建一个新的 Buildx 构建实例。",[805,28196,28197],{"align":24175},"docker buildx create –use",[759,28199,28200,28203,28206],{},[805,28201,28202],{"align":24175},"docker buildx ls",[805,28204,28205],{"align":24175},"列出所有可用的 Buildx 构建实例。",[805,28207,28202],{"align":24175},[759,28209,28210,28213,28216],{},[805,28211,28212],{"align":24175},"docker buildx use",[805,28214,28215],{"align":24175},"设置当前的 Buildx 构建实例。",[805,28217,28218],{"align":24175},"docker buildx use mybuilder",[759,28220,28221,28224,28227],{},[805,28222,28223],{"align":24175},"docker buildx bake",[805,28225,28226],{"align":24175},"使用 Bake 文件批量构建镜像。",[805,28228,28229],{"align":24175},"docker buildx bake -f bake.hcl",[759,28231,28232,28235,28238],{},[805,28233,28234],{"align":24175},"docker buildx build –push",[805,28236,28237],{"align":24175},"构建镜像并推送到镜像仓库。",[805,28239,28240],{"align":24175},"docker buildx build –push -t myimage .",[759,28242,28243,28246,28249],{},[805,28244,28245],{"align":24175},"docker buildx build –platform",[805,28247,28248],{"align":24175},"构建镜像并为多个平台生成支持。",[805,28250,28251],{"align":24175},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,28253,28254],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,28256,28257],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,28259,28260],{},"docker images 可以查看已经下载的镜像",[14,28262,28263],{},[1941,28264],{"alt":31,"src":28265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,28267,28268],{},[765,28269,28270],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,28272,28273],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,28275,28276],{},"docker container logs 查看容器日志",[14,28278,28279],{},"docker top 查看容器里的进程",[14,28281,28282],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[26,28284,28286],{"className":24261,"code":28285,"language":24263,"meta":31,"style":31},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[33,28287,28288],{"__ignoreMap":31},[36,28289,28290,28293,28296,28299],{"class":38,"line":39},[36,28291,28292],{"class":55},"如：docker",[36,28294,28295],{"class":59}," cp",[36,28297,28298],{"class":59}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[36,28300,28301],{"class":59}," \u002Fmydata\u002Fnginx\n",[14,28303,28304],{},"docker run时在启动容器的时候会有几个常用的选项：",[1618,28306,28307,28310,28313],{},[574,28308,28309],{},"-d选项：表示后台运行",[574,28311,28312],{},"-P选项：随机端口映射",[574,28314,28315],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[588,28317,28319],{"id":28318},"_53run命令的参数非常重要",[765,28320,28321],{},"5.3.run命令的参数（非常重要）",[753,28323,28324,28337],{},[756,28325,28326],{},[759,28327,28328,28331,28334],{},[762,28329,28330],{"align":24175},"参数\u002F配置",[762,28332,28333],{"align":24175},"功能说明",[762,28335,28336],{"align":24175},"重要性与参考依据",[800,28338,28339,28350,28361,28372,28383,28394,28405,28416,28427,28438,28449,28460,28471,28482,28493],{},[759,28340,28341,28344,28347],{},[805,28342,28343],{"align":24175},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[805,28345,28346],{"align":24175},"指定容器名称，便于后续管理",[805,28348,28349],{"align":24175},"替代随机生成的容器名。",[759,28351,28352,28355,28358],{},[805,28353,28354],{"align":24175},"–gpus all",[805,28356,28357],{"align":24175},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[805,28359,28360],{"align":24175},"用于CUDA加速等GPU依赖任务。",[759,28362,28363,28366,28369],{},[805,28364,28365],{"align":24175},"-e NVIDIA_DRIVER_CAPABILITIES=all",[805,28367,28368],{"align":24175},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[805,28370,28371],{"align":24175},"确保容器内GPU功能完整67。",[759,28373,28374,28377,28380],{},[805,28375,28376],{"align":24175},"-dit",[805,28378,28379],{"align":24175},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[805,28381,28382],{"align":24175},"允许容器在后台运行并支持交互操作。",[759,28384,28385,28388,28391],{},[805,28386,28387],{"align":24175},"–privileged",[805,28389,28390],{"align":24175},"赋予容器完全主机权限（可访问设备、内核模块等）",[805,28392,28393],{"align":24175},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[759,28395,28396,28399,28402],{},[805,28397,28398],{"align":24175},"–net=host",[805,28400,28401],{"align":24175},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[805,28403,28404],{"align":24175},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[759,28406,28407,28410,28413],{},[805,28408,28409],{"align":24175},"–group-add audio–group-add video–group-add dialout",[805,28411,28412],{"align":24175},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[805,28414,28415],{"align":24175},"避免权限问题（如避免无法调用摄像头、麦克风）。",[759,28417,28418,28421,28424],{},[805,28419,28420],{"align":24175},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[805,28422,28423],{"align":24175},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[805,28425,28426],{"align":24175},"支持容器内运行图形界面应用（如OpenCV可视化）。",[759,28428,28429,28432,28435],{},[805,28430,28431],{"align":24175},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[805,28433,28434],{"align":24175},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[805,28436,28437],{"align":24175},"实现容器内图形显示。",[759,28439,28440,28443,28446],{},[805,28441,28442],{"align":24175},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[805,28444,28445],{"align":24175},"挂载X11认证文件（只读）",[805,28447,28448],{"align":24175},"确保容器有权连接宿主机显示服务。",[759,28450,28451,28454,28457],{},[805,28452,28453],{"align":24175},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[805,28455,28456],{"align":24175},"挂载Wayland显示协议相关目录",[805,28458,28459],{"align":24175},"支持Wayland协议的图形显示。",[759,28461,28462,28465,28468],{},[805,28463,28464],{"align":24175},"–ulimit nofile=1024:524288",[805,28466,28467],{"align":24175},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[805,28469,28470],{"align":24175},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[759,28472,28473,28476,28479],{},[805,28474,28475],{"align":24175},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[805,28477,28478],{"align":24175},"挂载宿主机用户目录到容器内同名路径",[805,28480,28481],{"align":24175},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[759,28483,28484,28487,28490],{},[805,28485,28486],{"align":24175},"-w \u002Fhome\u002Ftungchiahui",[805,28488,28489],{"align":24175},"设置容器启动后的默认工作目录",[805,28491,28492],{"align":24175},"直接进入项目路径，方便执行命令2324。",[759,28494,28495,28498,28501],{},[805,28496,28497],{"align":24175},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[805,28499,28500],{"align":24175},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[805,28502,28503],{"align":24175},"提供预配置的深度学习与机器人开发环境。",[14,28505,28506,28507,28509,28510,28513],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[33,28508,56],{},"加不加",[33,28511,28512],{},"sudo -E","都无所谓。",[14,28515,28516,28517,28519,28520,28522,28523,28526,28527,28529],{},"用户已经被加到docker组了，不用",[33,28518,56],{},"也行跑，其次，",[33,28521,56],{},"运行的话，你的",[33,28524,28525],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[33,28528,28525],{},"更不可能变了。",[26,28531,28533],{"className":24261,"code":28532,"language":24263,"meta":31,"style":31},"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",[33,28534,28535,28548,28558,28568,28580,28587,28594,28601,28611,28620,28629,28643,28655,28667,28676,28686,28695,28710,28743,28770,28781,28788],{"__ignoreMap":31},[36,28536,28537,28539,28541,28543,28546],{"class":38,"line":39},[36,28538,56],{"class":55},[36,28540,26754],{"class":59},[36,28542,27664],{"class":59},[36,28544,28545],{"class":109}," --name=ros_opencv_cuda",[36,28547,25115],{"class":109},[36,28549,28550,28553,28556],{"class":38,"line":46},[36,28551,28552],{"class":98},"--gpus ",[36,28554,28555],{"class":59},"all",[36,28557,25115],{"class":109},[36,28559,28560,28563,28566],{"class":38,"line":52},[36,28561,28562],{"class":98},"-e ",[36,28564,28565],{"class":59},"NVIDIA_DRIVER_CAPABILITIES=all",[36,28567,25115],{"class":109},[36,28569,28570,28572,28575,28578],{"class":38,"line":66},[36,28571,28562],{"class":98},[36,28573,28574],{"class":59},"DISPLAY=",[36,28576,28577],{"class":98},"$DISPLAY ",[36,28579,26611],{"class":109},[36,28581,28582,28585],{"class":38,"line":72},[36,28583,28584],{"class":98},"-dit ",[36,28586,26611],{"class":109},[36,28588,28589,28592],{"class":38,"line":82},[36,28590,28591],{"class":98},"--privileged ",[36,28593,26611],{"class":109},[36,28595,28596,28599],{"class":38,"line":88},[36,28597,28598],{"class":98},"--net=host ",[36,28600,26611],{"class":109},[36,28602,28603,28606,28609],{"class":38,"line":113},[36,28604,28605],{"class":98},"--group-add ",[36,28607,28608],{"class":59},"audio",[36,28610,25115],{"class":109},[36,28612,28613,28615,28618],{"class":38,"line":119},[36,28614,28605],{"class":98},[36,28616,28617],{"class":59},"video",[36,28619,25115],{"class":109},[36,28621,28622,28624,28627],{"class":38,"line":131},[36,28623,28605],{"class":98},[36,28625,28626],{"class":59},"dialout",[36,28628,25115],{"class":109},[36,28630,28631,28633,28636,28638,28641],{"class":38,"line":137},[36,28632,28562],{"class":98},[36,28634,28635],{"class":59},"XAUTHORITY=",[36,28637,28525],{"class":98},[36,28639,28640],{"class":59},"\u002F.Xauthority",[36,28642,25115],{"class":109},[36,28644,28645,28647,28650,28653],{"class":38,"line":147},[36,28646,28562],{"class":98},[36,28648,28649],{"class":59},"WAYLAND_DISPLAY=",[36,28651,28652],{"class":98},"$WAYLAND_DISPLAY ",[36,28654,26611],{"class":109},[36,28656,28657,28659,28662,28665],{"class":38,"line":153},[36,28658,28562],{"class":98},[36,28660,28661],{"class":59},"XDG_RUNTIME_DIR=",[36,28663,28664],{"class":98},"$XDG_RUNTIME_DIR ",[36,28666,26611],{"class":109},[36,28668,28669,28671,28674],{"class":38,"line":191},[36,28670,28562],{"class":98},[36,28672,28673],{"class":59},"QT_QPA_PLATFORM=xcb",[36,28675,25115],{"class":109},[36,28677,28678,28681,28684],{"class":38,"line":197},[36,28679,28680],{"class":98},"-v ",[36,28682,28683],{"class":59},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[36,28685,25115],{"class":109},[36,28687,28688,28690,28693],{"class":38,"line":217},[36,28689,28680],{"class":98},[36,28691,28692],{"class":59},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[36,28694,25115],{"class":109},[36,28696,28697,28700,28703,28705,28708],{"class":38,"line":223},[36,28698,28699],{"class":98},"-v $HOME",[36,28701,28702],{"class":59},"\u002F.Xauthority:",[36,28704,28525],{"class":98},[36,28706,28707],{"class":59},"\u002F.Xauthority:ro",[36,28709,25115],{"class":109},[36,28711,28712,28714,28717,28719,28722,28725,28727,28730,28732,28734,28736,28738,28741],{"class":38,"line":243},[36,28713,28680],{"class":98},[36,28715,28716],{"class":59},"\u002Frun\u002Fuser\u002F",[36,28718,25536],{"class":98},[36,28720,28721],{"class":55},"id",[36,28723,28724],{"class":109}," -u",[36,28726,1043],{"class":98},[36,28728,28729],{"class":59},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[36,28731,25536],{"class":98},[36,28733,28721],{"class":55},[36,28735,28724],{"class":109},[36,28737,1043],{"class":98},[36,28739,28740],{"class":59},"\u002Fwayland-0",[36,28742,25115],{"class":109},[36,28744,28745,28747,28749,28751,28753,28755,28757,28760,28762,28764,28766,28768],{"class":38,"line":250},[36,28746,28680],{"class":98},[36,28748,28716],{"class":59},[36,28750,25536],{"class":98},[36,28752,28721],{"class":55},[36,28754,28724],{"class":109},[36,28756,1043],{"class":98},[36,28758,28759],{"class":59},":\u002Frun\u002Fuser\u002F",[36,28761,25536],{"class":98},[36,28763,28721],{"class":55},[36,28765,28724],{"class":109},[36,28767,14153],{"class":98},[36,28769,26611],{"class":109},[36,28771,28772,28774,28776,28779],{"class":38,"line":256},[36,28773,28699],{"class":98},[36,28775,1472],{"class":59},[36,28777,28778],{"class":98},"$HOME ",[36,28780,26611],{"class":109},[36,28782,28783,28786],{"class":38,"line":273},[36,28784,28785],{"class":98},"-w $HOME ",[36,28787,26611],{"class":109},[36,28789,28790],{"class":38,"line":278},[36,28791,28792],{"class":98},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,28794,9466],{},[571,28796,28797,28805,28808,28811],{},[574,28798,28799,14234,28801,28804],{},[33,28800,28565],{},[33,28802,28803],{},"--gpus all","没有英伟达显卡请注释。",[574,28806,28807],{},"--name后面请自己为容器起名。",[574,28809,28810],{},"最后一行仓库名称请你自己找对应的镜像填上。",[574,28812,28813,28814,28819],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23992,28815,28816],{},[765,28817,28818],{},"请不要加","。",[26,28821,28823],{"className":24261,"code":28822,"language":24263,"meta":31,"style":31},"--ulimit nofile=1024:524288 \\\n",[33,28824,28825],{"__ignoreMap":31},[36,28826,28827,28830,28833],{"class":38,"line":39},[36,28828,28829],{"class":55},"--ulimit",[36,28831,28832],{"class":59}," nofile=1024:524288",[36,28834,25115],{"class":109},[14,28836,28837,28838,28843],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23992,28839,28840],{},[765,28841,28842],{},"不建议","**.**",[26,28845,28847],{"className":24261,"code":28846,"language":24263,"meta":31,"style":31},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[33,28848,28849,28876,28885],{"__ignoreMap":31},[36,28850,28851,28854,28857,28859,28861,28863,28865,28867,28869,28872,28874],{"class":38,"line":39},[36,28852,28853],{"class":55},"--user",[36,28855,28856],{"class":98}," $(",[36,28858,28721],{"class":55},[36,28860,28724],{"class":109},[36,28862,1043],{"class":98},[36,28864,1472],{"class":59},[36,28866,25536],{"class":98},[36,28868,28721],{"class":55},[36,28870,28871],{"class":109}," -g",[36,28873,14153],{"class":98},[36,28875,26611],{"class":109},[36,28877,28878,28880,28883],{"class":38,"line":46},[36,28879,28680],{"class":98},[36,28881,28882],{"class":59},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[36,28884,25115],{"class":109},[36,28886,28887,28889,28892],{"class":38,"line":52},[36,28888,28680],{"class":98},[36,28890,28891],{"class":59},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[36,28893,25115],{"class":109},[537,28895,28896],{},"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":31,"searchDepth":46,"depth":46,"links":28898},[28899,28900,28901],{"id":27897,"depth":52,"text":27898},{"id":27907,"depth":52,"text":27908},{"id":28318,"depth":52,"text":28321},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27889,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28908,"title":28909,"body":28910,"description":31,"extension":543,"meta":30532,"navigation":246,"path":30533,"seo":30534,"stem":30535,"__hash__":30536},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28911,"toc":30527},[28912,28915,28919,28922,29144,29148,29152,29155,29261,29266,29269,29274,29277,29282,29285,29290,29293,29305,29308,29313,29320,29347,29354,29430,29435,29438,29461,29463,29538,29543,29546,29550,29558,29563,29568,29572,29583,29589,29592,29595,29619,29622,29625,29653,29656,29659,30124,30127,30132,30137,30141,30164,30169,30173,30177,30180,30183,30186,30213,30216,30219,30237,30240,30243,30265,30273,30278,30283,30287,30290,30293,30296,30299,30344,30347,30365,30368,30373,30376,30397,30400,30456,30459,30464,30468,30471,30478,30481,30484,30489,30492,30508,30511,30524],[10,28913,28909],{"id":28914},"_6手动创建docker镜像",[588,28916,28918],{"id":28917},"_61dockerfile","6.1.DockerFile",[14,28920,28921],{},"常用命令：",[753,28923,28924,28935],{},[756,28925,28926],{},[759,28927,28928,28931,28933],{},[762,28929,28930],{"align":24175},"指令",[762,28932,26306],{"align":24175},[762,28934,27926],{"align":24175},[800,28936,28937,28947,28963,28974,28985,28996,29007,29018,29029,29043,29057,29068,29082,29093,29104,29118,29133],{},[759,28938,28939,28941,28944],{},[805,28940,27804],{"align":24175},[805,28942,28943],{"align":24175},"指定基础镜像，是 Dockerfile 的起点",[805,28945,28946],{"align":24175},"FROM ubuntu:22.04",[759,28948,28949,28952,28955],{},[805,28950,28951],{"align":24175},"LABEL",[805,28953,28954],{"align":24175},"添加元数据（如作者、版本等）",[805,28956,28957,28958,28962],{"align":24175},"LABEL maintainer=”",[20,28959,28961],{"href":28960},"mailto:you@example.com","you@example.com","”",[759,28964,28965,28968,28971],{},[805,28966,28967],{"align":24175},"ENV",[805,28969,28970],{"align":24175},"设置环境变量",[805,28972,28973],{"align":24175},"ENV PORT=8080",[759,28975,28976,28979,28982],{},[805,28977,28978],{"align":24175},"ARG",[805,28980,28981],{"align":24175},"构建参数，只在构建期间可用",[805,28983,28984],{"align":24175},"ARG VERSION=1.0",[759,28986,28987,28990,28993],{},[805,28988,28989],{"align":24175},"RUN",[805,28991,28992],{"align":24175},"构建镜像时运行命令",[805,28994,28995],{"align":24175},"RUN apt-get update && apt-get install -y curl",[759,28997,28998,29001,29004],{},[805,28999,29000],{"align":24175},"COPY",[805,29002,29003],{"align":24175},"复制文件到镜像中",[805,29005,29006],{"align":24175},"COPY . \u002Fapp",[759,29008,29009,29012,29015],{},[805,29010,29011],{"align":24175},"ADD",[805,29013,29014],{"align":24175},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[805,29016,29017],{"align":24175},"ADD archive.tar.gz \u002Fdata\u002F",[759,29019,29020,29023,29026],{},[805,29021,29022],{"align":24175},"WORKDIR",[805,29024,29025],{"align":24175},"设置工作目录",[805,29027,29028],{"align":24175},"WORKDIR \u002Fopt",[759,29030,29031,29034,29037],{},[805,29032,29033],{"align":24175},"CMD",[805,29035,29036],{"align":24175},"设置容器启动时默认命令（可被 docker run 覆盖）",[805,29038,29039,29040],{"align":24175},"CMD ",[36,29041,29042],{},"“node”, “index.js”",[759,29044,29045,29048,29051],{},[805,29046,29047],{"align":24175},"ENTRYPOINT",[805,29049,29050],{"align":24175},"设置容器启动时固定命令（通常用于 CLI 工具等）",[805,29052,29053,29054],{"align":24175},"ENTRYPOINT ",[36,29055,29056],{},"“python3”",[759,29058,29059,29062,29065],{},[805,29060,29061],{"align":24175},"EXPOSE",[805,29063,29064],{"align":24175},"声明镜像内服务监听的端口（不会自动映射）",[805,29066,29067],{"align":24175},"EXPOSE 80",[759,29069,29070,29073,29076],{},[805,29071,29072],{"align":24175},"VOLUME",[805,29074,29075],{"align":24175},"声明数据卷挂载点",[805,29077,29078,29079],{"align":24175},"VOLUME ",[36,29080,29081],{},"“\u002Fdata”",[759,29083,29084,29087,29090],{},[805,29085,29086],{"align":24175},"USER",[805,29088,29089],{"align":24175},"设置后续命令执行的用户",[805,29091,29092],{"align":24175},"USER appuser",[759,29094,29095,29098,29101],{},[805,29096,29097],{"align":24175},"ONBUILD",[805,29099,29100],{"align":24175},"当镜像作为其他镜像基础镜像时触发的构建指令",[805,29102,29103],{"align":24175},"ONBUILD COPY . \u002Fsrc",[759,29105,29106,29109,29112],{},[805,29107,29108],{"align":24175},"SHELL",[805,29110,29111],{"align":24175},"更改默认 shell，比如将 sh -c 改为 bash -c",[805,29113,29114,29115],{"align":24175},"SHELL ",[36,29116,29117],{},"“\u002Fbin\u002Fbash”, “-c”",[759,29119,29120,29123,29126],{},[805,29121,29122],{"align":24175},"HEALTHCHECK",[805,29124,29125],{"align":24175},"定义容器运行时的健康检查命令",[805,29127,29128,29129],{"align":24175},"`HEALTHCHECK CMD curl –fail ",[20,29130,29131],{"href":29131,"rel":29132},"http:\u002F\u002Flocalhost:8080",[24],[759,29134,29135,29138,29141],{},[805,29136,29137],{"align":24175},"STOPSIGNAL",[805,29139,29140],{"align":24175},"容器停止时发送的信号",[805,29142,29143],{"align":24175},"STOPSIGNAL SIGKILL",[588,29145,29147],{"id":29146},"_62自己创建容器","6.2.自己创建容器",[22437,29149,29151],{"id":29150},"_621手动创建","6.2.1.手动创建",[14,29153,29154],{},"在x86电脑上编译x86的：",[26,29156,29158],{"className":24261,"code":29157,"language":24263,"meta":31,"style":31},"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",[33,29159,29160,29176,29180,29193,29197,29210,29214,29227,29231,29244,29248],{"__ignoreMap":31},[36,29161,29162,29164,29167,29170,29173],{"class":38,"line":39},[36,29163,26987],{"class":55},[36,29165,29166],{"class":59}," build",[36,29168,29169],{"class":109}," -t",[36,29171,29172],{"class":59}," ros-melodic-cuda118-cudnn8-bionic:latest",[36,29174,29175],{"class":59}," .\n",[36,29177,29178],{"class":38,"line":46},[36,29179,247],{"emptyLinePlaceholder":246},[36,29181,29182,29184,29186,29188,29191],{"class":38,"line":52},[36,29183,26987],{"class":55},[36,29185,29166],{"class":59},[36,29187,29169],{"class":109},[36,29189,29190],{"class":59}," ros-noetic-focal:latest",[36,29192,29175],{"class":59},[36,29194,29195],{"class":38,"line":66},[36,29196,247],{"emptyLinePlaceholder":246},[36,29198,29199,29201,29203,29205,29208],{"class":38,"line":72},[36,29200,26987],{"class":55},[36,29202,29166],{"class":59},[36,29204,29169],{"class":109},[36,29206,29207],{"class":59}," ros-humble-jammy:latest",[36,29209,29175],{"class":59},[36,29211,29212],{"class":38,"line":82},[36,29213,247],{"emptyLinePlaceholder":246},[36,29215,29216,29218,29220,29222,29225],{"class":38,"line":88},[36,29217,26987],{"class":55},[36,29219,29166],{"class":59},[36,29221,29169],{"class":109},[36,29223,29224],{"class":59}," ros-jazzy-noble:latest",[36,29226,29175],{"class":59},[36,29228,29229],{"class":38,"line":113},[36,29230,247],{"emptyLinePlaceholder":246},[36,29232,29233,29235,29237,29239,29242],{"class":38,"line":119},[36,29234,26987],{"class":55},[36,29236,29166],{"class":59},[36,29238,29169],{"class":109},[36,29240,29241],{"class":59}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[36,29243,29175],{"class":59},[36,29245,29246],{"class":38,"line":131},[36,29247,247],{"emptyLinePlaceholder":246},[36,29249,29250,29252,29254,29256,29259],{"class":38,"line":137},[36,29251,26987],{"class":55},[36,29253,29166],{"class":59},[36,29255,29169],{"class":109},[36,29257,29258],{"class":59}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[36,29260,29175],{"class":59},[14,29262,29263],{},[1941,29264],{"alt":31,"src":29265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,29267,29268],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,29270,29271],{},[1941,29272],{"alt":31,"src":29273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,29275,29276],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[571,29278,29279],{},[574,29280,29281],{},"创建 Docker Hub 账户",[14,29283,29284],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[571,29286,29287],{"start":46},[574,29288,29289],{},"登录 Docker Hub",[14,29291,29292],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[26,29294,29296],{"className":24261,"code":29295,"language":24263,"meta":31,"style":31},"docker login\n",[33,29297,29298],{"__ignoreMap":31},[36,29299,29300,29302],{"class":38,"line":39},[36,29301,26987],{"class":55},[36,29303,29304],{"class":59}," login\n",[14,29306,29307],{},"输入你的 Docker Hub 用户名和密码进行验证。",[571,29309,29310],{},[574,29311,29312],{},"为你的镜像打标签",[14,29314,29315,29316,29319],{},"Docker Hub 使用 ",[33,29317,29318],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[26,29321,29323],{"className":24261,"code":29322,"language":24263,"meta":31,"style":31},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[33,29324,29325],{"__ignoreMap":31},[36,29326,29327,29329,29332,29334,29336,29339,29342,29344],{"class":38,"line":39},[36,29328,26987],{"class":55},[36,29330,29331],{"class":59}," tag",[36,29333,29224],{"class":59},[36,29335,164],{"class":163},[36,29337,29338],{"class":59},"你的用户",[36,29340,29341],{"class":98},"名",[36,29343,173],{"class":163},[36,29345,29346],{"class":59},"\u002Fros-jazzy-noble:latest\n",[14,29348,29349,29350,29353],{},"例如，如果你的 Docker Hub 用户名是 ",[33,29351,29352],{},"tungchiahui","，你应该执行：",[26,29355,29357],{"className":24261,"code":29356,"language":24263,"meta":31,"style":31},"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",[33,29358,29359,29370,29374,29385,29389,29400,29404,29415,29419],{"__ignoreMap":31},[36,29360,29361,29363,29365,29367],{"class":38,"line":39},[36,29362,26987],{"class":55},[36,29364,29331],{"class":59},[36,29366,29190],{"class":59},[36,29368,29369],{"class":59}," tungchiahui\u002Fros-noetic-focal:latest\n",[36,29371,29372],{"class":38,"line":46},[36,29373,247],{"emptyLinePlaceholder":246},[36,29375,29376,29378,29380,29382],{"class":38,"line":52},[36,29377,26987],{"class":55},[36,29379,29331],{"class":59},[36,29381,29207],{"class":59},[36,29383,29384],{"class":59}," tungchiahui\u002Fros-humble-jammy:latest\n",[36,29386,29387],{"class":38,"line":66},[36,29388,247],{"emptyLinePlaceholder":246},[36,29390,29391,29393,29395,29397],{"class":38,"line":72},[36,29392,26987],{"class":55},[36,29394,29331],{"class":59},[36,29396,29224],{"class":59},[36,29398,29399],{"class":59}," tungchiahui\u002Fros-jazzy-noble:latest\n",[36,29401,29402],{"class":38,"line":82},[36,29403,247],{"emptyLinePlaceholder":246},[36,29405,29406,29408,29410,29412],{"class":38,"line":88},[36,29407,26987],{"class":55},[36,29409,29331],{"class":59},[36,29411,29241],{"class":59},[36,29413,29414],{"class":59}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[36,29416,29417],{"class":38,"line":113},[36,29418,247],{"emptyLinePlaceholder":246},[36,29420,29421,29423,29425,29427],{"class":38,"line":119},[36,29422,26987],{"class":55},[36,29424,29331],{"class":59},[36,29426,29258],{"class":59},[36,29428,29429],{"class":59}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[571,29431,29432],{"start":46},[574,29433,29434],{},"推送镜像到 Docker Hub",[14,29436,29437],{},"使用以下命令将镜像推送到 Docker Hub：",[26,29439,29441],{"className":24261,"code":29440,"language":24263,"meta":31,"style":31},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[33,29442,29443],{"__ignoreMap":31},[36,29444,29445,29447,29450,29452,29454,29456,29458],{"class":38,"line":39},[36,29446,26987],{"class":55},[36,29448,29449],{"class":59}," push",[36,29451,164],{"class":163},[36,29453,29338],{"class":59},[36,29455,29341],{"class":98},[36,29457,173],{"class":163},[36,29459,29460],{"class":59},"\u002Fros-noetic-jazzy-noble:latest\n",[14,29462,15072],{},[26,29464,29466],{"className":24261,"code":29465,"language":24263,"meta":31,"style":31},"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",[33,29467,29468,29476,29480,29488,29492,29500,29504,29513,29517,29525,29529],{"__ignoreMap":31},[36,29469,29470,29472,29474],{"class":38,"line":39},[36,29471,26987],{"class":55},[36,29473,29449],{"class":59},[36,29475,29369],{"class":59},[36,29477,29478],{"class":38,"line":46},[36,29479,247],{"emptyLinePlaceholder":246},[36,29481,29482,29484,29486],{"class":38,"line":52},[36,29483,26987],{"class":55},[36,29485,29449],{"class":59},[36,29487,29384],{"class":59},[36,29489,29490],{"class":38,"line":66},[36,29491,247],{"emptyLinePlaceholder":246},[36,29493,29494,29496,29498],{"class":38,"line":72},[36,29495,26987],{"class":55},[36,29497,29449],{"class":59},[36,29499,29399],{"class":59},[36,29501,29502],{"class":38,"line":82},[36,29503,247],{"emptyLinePlaceholder":246},[36,29505,29506,29508,29510],{"class":38,"line":88},[36,29507,26987],{"class":55},[36,29509,29449],{"class":59},[36,29511,29512],{"class":59}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[36,29514,29515],{"class":38,"line":113},[36,29516,247],{"emptyLinePlaceholder":246},[36,29518,29519,29521,29523],{"class":38,"line":119},[36,29520,26987],{"class":55},[36,29522,29449],{"class":59},[36,29524,29429],{"class":59},[36,29526,29527],{"class":38,"line":131},[36,29528,247],{"emptyLinePlaceholder":246},[36,29530,29531,29533,29535],{"class":38,"line":137},[36,29532,26987],{"class":55},[36,29534,29449],{"class":59},[36,29536,29537],{"class":59}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[571,29539,29540],{"start":52},[574,29541,29542],{},"验证推送成功",[14,29544,29545],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,29547,29548],{},[765,29549,4235],{},[1618,29551,29552,29555],{},[574,29553,29554],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[574,29556,29557],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,29559,29560],{},[1941,29561],{"alt":31,"src":29562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,29564,29565],{},[1941,29566],{"alt":31,"src":29567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22437,29569,29571],{"id":29570},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,29573,29574,29575,29578,29579,29582],{},"如果您想在 ",[765,29576,29577],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[765,29580,29581],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,29584,29585,29586],{},"1. ",[765,29587,29588],{},"启用 Docker 跨平台构建",[14,29590,29591],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,29593,29594],{},"第一步：启用 buildx（只需执行一次）",[26,29596,29598],{"className":24261,"code":29597,"language":24263,"meta":31,"style":31},"docker buildx create --name multiarch_builder --use\n",[33,29599,29600],{"__ignoreMap":31},[36,29601,29602,29604,29607,29610,29613,29616],{"class":38,"line":39},[36,29603,26987],{"class":55},[36,29605,29606],{"class":59}," buildx",[36,29608,29609],{"class":59}," create",[36,29611,29612],{"class":109}," --name",[36,29614,29615],{"class":59}," multiarch_builder",[36,29617,29618],{"class":109}," --use\n",[14,29620,29621],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,29623,29624],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[26,29626,29628],{"className":24261,"code":29627,"language":24263,"meta":31,"style":31},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[33,29629,29630],{"__ignoreMap":31},[36,29631,29632,29634,29636,29638,29641,29644,29647,29650],{"class":38,"line":39},[36,29633,26987],{"class":55},[36,29635,27664],{"class":59},[36,29637,27667],{"class":109},[36,29639,29640],{"class":109}," --privileged",[36,29642,29643],{"class":59}," multiarch\u002Fqemu-user-static",[36,29645,29646],{"class":109}," --reset",[36,29648,29649],{"class":109}," -p",[36,29651,29652],{"class":59}," yes\n",[14,29654,29655],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,29657,29658],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[26,29660,29662],{"className":24261,"code":29661,"language":24263,"meta":31,"style":31},"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",[33,29663,29664,29706,29710,29715,29725,29735,29744,29750,29754,29758,29768,29776,29785,29791,29795,29799,29809,29817,29826,29832,29836,29840,29850,29858,29867,29873,29877,29881,29891,29899,29908,29914,29918,29922,29932,29940,29949,29955,29959,29963,29973,29981,29990,29996,30000,30004,30014,30022,30031,30037,30041,30045,30055,30063,30072,30078,30082,30086,30097,30105,30114,30120],{"__ignoreMap":31},[36,29665,29666,29668,29670,29672,29675,29678,29680,29682,29685,29687,29689,29691,29693,29696,29699,29701,29704],{"class":38,"line":39},[36,29667,26987],{"class":55},[36,29669,29606],{"class":59},[36,29671,29166],{"class":59},[36,29673,29674],{"class":109}," --platform",[36,29676,29677],{"class":59}," linux\u002Famd64,linux\u002Farm64",[36,29679,29169],{"class":109},[36,29681,164],{"class":163},[36,29683,29684],{"class":59},"你的镜像",[36,29686,29341],{"class":98},[36,29688,173],{"class":163},[36,29690,1472],{"class":59},[36,29692,179],{"class":163},[36,29694,29695],{"class":59},"标",[36,29697,29698],{"class":98},"签",[36,29700,173],{"class":163},[36,29702,29703],{"class":109}," --push",[36,29705,29175],{"class":59},[36,29707,29708],{"class":38,"line":46},[36,29709,247],{"emptyLinePlaceholder":246},[36,29711,29712],{"class":38,"line":52},[36,29713,29714],{"class":42},"# 例子：\n",[36,29716,29717,29719,29721,29723],{"class":38,"line":66},[36,29718,26987],{"class":55},[36,29720,29606],{"class":59},[36,29722,29166],{"class":59},[36,29724,25115],{"class":109},[36,29726,29727,29730,29733],{"class":38,"line":72},[36,29728,29729],{"class":98},"--platform ",[36,29731,29732],{"class":59},"linux\u002Famd64,linux\u002Farm64",[36,29734,25115],{"class":109},[36,29736,29737,29739,29742],{"class":38,"line":82},[36,29738,29169],{"class":109},[36,29740,29741],{"class":59}," tungchiahui\u002Fros:noetic-focal",[36,29743,25115],{"class":109},[36,29745,29746,29748],{"class":38,"line":88},[36,29747,29703],{"class":109},[36,29749,25115],{"class":109},[36,29751,29752],{"class":38,"line":113},[36,29753,29175],{"class":59},[36,29755,29756],{"class":38,"line":119},[36,29757,247],{"emptyLinePlaceholder":246},[36,29759,29760,29762,29764,29766],{"class":38,"line":131},[36,29761,26987],{"class":55},[36,29763,29606],{"class":59},[36,29765,29166],{"class":59},[36,29767,25115],{"class":109},[36,29769,29770,29772,29774],{"class":38,"line":137},[36,29771,29729],{"class":98},[36,29773,29732],{"class":59},[36,29775,25115],{"class":109},[36,29777,29778,29780,29783],{"class":38,"line":147},[36,29779,29169],{"class":109},[36,29781,29782],{"class":59}," tungchiahui\u002Fros:humble-jammy",[36,29784,25115],{"class":109},[36,29786,29787,29789],{"class":38,"line":153},[36,29788,29703],{"class":109},[36,29790,25115],{"class":109},[36,29792,29793],{"class":38,"line":191},[36,29794,29175],{"class":59},[36,29796,29797],{"class":38,"line":197},[36,29798,247],{"emptyLinePlaceholder":246},[36,29800,29801,29803,29805,29807],{"class":38,"line":217},[36,29802,26987],{"class":55},[36,29804,29606],{"class":59},[36,29806,29166],{"class":59},[36,29808,25115],{"class":109},[36,29810,29811,29813,29815],{"class":38,"line":223},[36,29812,29729],{"class":98},[36,29814,29732],{"class":59},[36,29816,25115],{"class":109},[36,29818,29819,29821,29824],{"class":38,"line":243},[36,29820,29169],{"class":109},[36,29822,29823],{"class":59}," tungchiahui\u002Fros:jazzy-noble",[36,29825,25115],{"class":109},[36,29827,29828,29830],{"class":38,"line":250},[36,29829,29703],{"class":109},[36,29831,25115],{"class":109},[36,29833,29834],{"class":38,"line":256},[36,29835,29175],{"class":59},[36,29837,29838],{"class":38,"line":273},[36,29839,247],{"emptyLinePlaceholder":246},[36,29841,29842,29844,29846,29848],{"class":38,"line":278},[36,29843,26754],{"class":55},[36,29845,29606],{"class":59},[36,29847,29166],{"class":59},[36,29849,25115],{"class":109},[36,29851,29852,29854,29856],{"class":38,"line":284},[36,29853,29729],{"class":98},[36,29855,29732],{"class":59},[36,29857,25115],{"class":109},[36,29859,29860,29862,29865],{"class":38,"line":315},[36,29861,29169],{"class":109},[36,29863,29864],{"class":59}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[36,29866,25115],{"class":109},[36,29868,29869,29871],{"class":38,"line":320},[36,29870,29703],{"class":109},[36,29872,25115],{"class":109},[36,29874,29875],{"class":38,"line":326},[36,29876,29175],{"class":59},[36,29878,29879],{"class":38,"line":343},[36,29880,247],{"emptyLinePlaceholder":246},[36,29882,29883,29885,29887,29889],{"class":38,"line":348},[36,29884,26987],{"class":55},[36,29886,29606],{"class":59},[36,29888,29166],{"class":59},[36,29890,25115],{"class":109},[36,29892,29893,29895,29897],{"class":38,"line":354},[36,29894,29729],{"class":98},[36,29896,29732],{"class":59},[36,29898,25115],{"class":109},[36,29900,29901,29903,29906],{"class":38,"line":370},[36,29902,29169],{"class":109},[36,29904,29905],{"class":59}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[36,29907,25115],{"class":109},[36,29909,29910,29912],{"class":38,"line":375},[36,29911,29703],{"class":109},[36,29913,25115],{"class":109},[36,29915,29916],{"class":38,"line":381},[36,29917,29175],{"class":59},[36,29919,29920],{"class":38,"line":399},[36,29921,247],{"emptyLinePlaceholder":246},[36,29923,29924,29926,29928,29930],{"class":38,"line":404},[36,29925,26754],{"class":55},[36,29927,29606],{"class":59},[36,29929,29166],{"class":59},[36,29931,25115],{"class":109},[36,29933,29934,29936,29938],{"class":38,"line":410},[36,29935,29729],{"class":98},[36,29937,29732],{"class":59},[36,29939,25115],{"class":109},[36,29941,29942,29944,29947],{"class":38,"line":423},[36,29943,29169],{"class":109},[36,29945,29946],{"class":59}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[36,29948,25115],{"class":109},[36,29950,29951,29953],{"class":38,"line":436},[36,29952,29703],{"class":109},[36,29954,25115],{"class":109},[36,29956,29957],{"class":38,"line":441},[36,29958,29175],{"class":59},[36,29960,29961],{"class":38,"line":447},[36,29962,247],{"emptyLinePlaceholder":246},[36,29964,29965,29967,29969,29971],{"class":38,"line":465},[36,29966,26987],{"class":55},[36,29968,29606],{"class":59},[36,29970,29166],{"class":59},[36,29972,25115],{"class":109},[36,29974,29975,29977,29979],{"class":38,"line":470},[36,29976,29729],{"class":98},[36,29978,29732],{"class":59},[36,29980,25115],{"class":109},[36,29982,29983,29985,29988],{"class":38,"line":476},[36,29984,29169],{"class":109},[36,29986,29987],{"class":59}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[36,29989,25115],{"class":109},[36,29991,29992,29994],{"class":38,"line":496},[36,29993,29703],{"class":109},[36,29995,25115],{"class":109},[36,29997,29998],{"class":38,"line":501},[36,29999,29175],{"class":59},[36,30001,30002],{"class":38,"line":507},[36,30003,247],{"emptyLinePlaceholder":246},[36,30005,30006,30008,30010,30012],{"class":38,"line":517},[36,30007,26987],{"class":55},[36,30009,29606],{"class":59},[36,30011,29166],{"class":59},[36,30013,25115],{"class":109},[36,30015,30016,30018,30020],{"class":38,"line":522},[36,30017,29729],{"class":98},[36,30019,29732],{"class":59},[36,30021,25115],{"class":109},[36,30023,30024,30026,30029],{"class":38,"line":528},[36,30025,29169],{"class":109},[36,30027,30028],{"class":59}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[36,30030,25115],{"class":109},[36,30032,30033,30035],{"class":38,"line":10203},[36,30034,29703],{"class":109},[36,30036,25115],{"class":109},[36,30038,30039],{"class":38,"line":10227},[36,30040,29175],{"class":59},[36,30042,30043],{"class":38,"line":10232},[36,30044,247],{"emptyLinePlaceholder":246},[36,30046,30047,30049,30051,30053],{"class":38,"line":10237},[36,30048,26754],{"class":55},[36,30050,29606],{"class":59},[36,30052,29166],{"class":59},[36,30054,25115],{"class":109},[36,30056,30057,30059,30061],{"class":38,"line":10242},[36,30058,29729],{"class":98},[36,30060,29732],{"class":59},[36,30062,25115],{"class":109},[36,30064,30065,30067,30070],{"class":38,"line":10251},[36,30066,29169],{"class":109},[36,30068,30069],{"class":59}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[36,30071,25115],{"class":109},[36,30073,30074,30076],{"class":38,"line":10256},[36,30075,29703],{"class":109},[36,30077,25115],{"class":109},[36,30079,30080],{"class":38,"line":10262},[36,30081,29175],{"class":59},[36,30083,30084],{"class":38,"line":10283},[36,30085,247],{"emptyLinePlaceholder":246},[36,30087,30088,30091,30093,30095],{"class":38,"line":10289},[36,30089,30090],{"class":55},"  docker",[36,30092,29606],{"class":59},[36,30094,29166],{"class":59},[36,30096,25115],{"class":109},[36,30098,30099,30101,30103],{"class":38,"line":10303},[36,30100,29729],{"class":98},[36,30102,29732],{"class":59},[36,30104,25115],{"class":109},[36,30106,30107,30109,30112],{"class":38,"line":10309},[36,30108,29169],{"class":109},[36,30110,30111],{"class":59}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[36,30113,25115],{"class":109},[36,30115,30116,30118],{"class":38,"line":10336},[36,30117,29703],{"class":109},[36,30119,25115],{"class":109},[36,30121,30122],{"class":38,"line":10345},[36,30123,29175],{"class":59},[14,30125,30126],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,30128,30129],{},[1941,30130],{"alt":31,"src":30131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,30133,30134],{},[1941,30135],{"alt":31,"src":30136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22437,30138,30140],{"id":30139},"_623清除构建缓存","6.2.3.清除构建缓存",[26,30142,30144],{"className":24261,"code":30143,"language":24263,"meta":31,"style":31},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[33,30145,30146,30151],{"__ignoreMap":31},[36,30147,30148],{"class":38,"line":39},[36,30149,30150],{"class":42},"# 清理BuildKit构建缓存\n",[36,30152,30153,30155,30158,30161],{"class":38,"line":46},[36,30154,26987],{"class":55},[36,30156,30157],{"class":59}," builder",[36,30159,30160],{"class":59}," prune",[36,30162,30163],{"class":109}," -f\n",[14,30165,30166],{},[1941,30167],{"alt":31,"src":30168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[588,30170,30172],{"id":30171},"_63补充","6.3.补充",[22437,30174,30176],{"id":30175},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,30178,30179],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,30181,30182],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,30184,30185],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[26,30187,30189],{"className":24261,"code":30188,"language":24263,"meta":31,"style":31},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[33,30190,30191,30198],{"__ignoreMap":31},[36,30192,30193,30195],{"class":38,"line":39},[36,30194,27804],{"class":55},[36,30196,30197],{"class":59}," nginx\n",[36,30199,30200,30202,30205,30208,30210],{"class":38,"line":46},[36,30201,28989],{"class":55},[36,30203,30204],{"class":59}," echo",[36,30206,30207],{"class":59}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[36,30209,26657],{"class":163},[36,30211,30212],{"class":59}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,30214,30215],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,30217,30218],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[26,30220,30222],{"className":24261,"code":30221,"language":24263,"meta":31,"style":31},"docker build -t nginx:tuling .\n",[33,30223,30224],{"__ignoreMap":31},[36,30225,30226,30228,30230,30232,30235],{"class":38,"line":39},[36,30227,26987],{"class":55},[36,30229,29166],{"class":59},[36,30231,29169],{"class":109},[36,30233,30234],{"class":59}," nginx:tuling",[36,30236,29175],{"class":59},[14,30238,30239],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,30241,30242],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[26,30244,30246],{"className":24261,"code":30245,"language":24263,"meta":31,"style":31},"docker run -d -p 92:80 nginx:tuling\n",[33,30247,30248],{"__ignoreMap":31},[36,30249,30250,30252,30254,30257,30259,30262],{"class":38,"line":39},[36,30251,26987],{"class":55},[36,30253,27664],{"class":59},[36,30255,30256],{"class":109}," -d",[36,30258,29649],{"class":109},[36,30260,30261],{"class":59}," 92:80",[36,30263,30264],{"class":59}," nginx:tuling\n",[14,30266,30267,30268],{},"4、访问 ",[20,30269,30272],{"href":30270,"rel":30271},"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",[24],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,30274,30275],{},[1941,30276],{"alt":31,"src":30277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,30279,30280],{},[1941,30281],{"alt":31,"src":30282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22437,30284,30286],{"id":30285},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,30288,30289],{},"只需要知道大体流程即可",[14,30291,30292],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,30294,30295],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,30297,30298],{},"2、在Dockerfile中添加以下内容",[26,30300,30302],{"className":26527,"code":30301,"language":26529,"meta":31,"style":31},"# 基于哪个镜像\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",[33,30303,30304,30309,30314,30319,30324,30329,30334,30339],{"__ignoreMap":31},[36,30305,30306],{"class":38,"line":39},[36,30307,30308],{},"# 基于哪个镜像\n",[36,30310,30311],{"class":38,"line":46},[36,30312,30313],{},"From java:8\n",[36,30315,30316],{"class":38,"line":52},[36,30317,30318],{},"# 复制文件到容器\n",[36,30320,30321],{"class":38,"line":66},[36,30322,30323],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[36,30325,30326],{"class":38,"line":72},[36,30327,30328],{},"# 声明需要暴露的端口\n",[36,30330,30331],{"class":38,"line":82},[36,30332,30333],{},"EXPOSE 8877\n",[36,30335,30336],{"class":38,"line":88},[36,30337,30338],{},"# 配置容器启动后执行的命令\n",[36,30340,30341],{"class":38,"line":113},[36,30342,30343],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,30345,30346],{},"3、使用docker build命令构建镜像",[26,30348,30350],{"className":24261,"code":30349,"language":24263,"meta":31,"style":31},"docker build -t tulingmall-member:0.0.5 .\n",[33,30351,30352],{"__ignoreMap":31},[36,30353,30354,30356,30358,30360,30363],{"class":38,"line":39},[36,30355,26987],{"class":55},[36,30357,29166],{"class":59},[36,30359,29169],{"class":109},[36,30361,30362],{"class":59}," tulingmall-member:0.0.5",[36,30364,29175],{"class":59},[14,30366,30367],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,30369,30370],{},[1941,30371],{"alt":31,"src":30372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,30374,30375],{},"4、启动镜像，加-d可在后台启动",[26,30377,30379],{"className":24261,"code":30378,"language":24263,"meta":31,"style":31},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[33,30380,30381],{"__ignoreMap":31},[36,30382,30383,30385,30387,30389,30391,30394],{"class":38,"line":39},[36,30384,26987],{"class":55},[36,30386,27664],{"class":59},[36,30388,30256],{"class":109},[36,30390,29649],{"class":109},[36,30392,30393],{"class":59}," 8877:8877",[36,30395,30396],{"class":59}," tulingmall-member:0.0.5\n",[14,30398,30399],{},"加上JVM参数：",[26,30401,30403],{"className":24261,"code":30402,"language":24263,"meta":31,"style":31},"# --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",[33,30404,30405,30410,30425,30435,30444,30451],{"__ignoreMap":31},[36,30406,30407],{"class":38,"line":39},[36,30408,30409],{"class":42},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[36,30411,30412,30414,30416,30419,30421,30423],{"class":38,"line":46},[36,30413,26987],{"class":55},[36,30415,27664],{"class":59},[36,30417,30418],{"class":109},"  -d",[36,30420,29649],{"class":109},[36,30422,30393],{"class":59},[36,30424,25115],{"class":109},[36,30426,30427,30429,30432],{"class":38,"line":52},[36,30428,28562],{"class":98},[36,30430,30431],{"class":59},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[36,30433,30434],{"class":109},"  \\\n",[36,30436,30437,30439,30442],{"class":38,"line":66},[36,30438,28562],{"class":98},[36,30440,30441],{"class":59},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[36,30443,30434],{"class":109},[36,30445,30446,30449],{"class":38,"line":72},[36,30447,30448],{"class":98},"--cap-add=SYS_PTRACE  ",[36,30450,26611],{"class":109},[36,30452,30453],{"class":38,"line":82},[36,30454,30455],{"class":98},"tulingmall-member:0.0.5\n",[14,30457,30458],{},"5、访问会员服务接口",[14,30460,30461],{},[1941,30462],{"alt":31,"src":30463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22437,30465,30467],{"id":30466},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,30469,30470],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,30472,30473,30474],{},"阿里云docker镜像仓库：",[20,30475,30476],{"href":30476,"rel":30477},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24],[14,30479,30480],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,30482,30483],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,30485,30486],{},[1941,30487],{"alt":31,"src":30488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,30490,30491],{},"要把镜像推送到镜像仓库",[26,30493,30495],{"className":24261,"code":30494,"language":24263,"meta":31,"style":31},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[33,30496,30497],{"__ignoreMap":31},[36,30498,30499,30501,30503,30505],{"class":38,"line":39},[36,30500,26987],{"class":55},[36,30502,29331],{"class":59},[36,30504,30362],{"class":59},[36,30506,30507],{"class":59}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,30509,30510],{},"最后将镜像推送到远程仓库",[26,30512,30514],{"className":24261,"code":30513,"language":24263,"meta":31,"style":31},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[33,30515,30516],{"__ignoreMap":31},[36,30517,30518,30520,30522],{"class":38,"line":39},[36,30519,26987],{"class":55},[36,30521,29449],{"class":59},[36,30523,30507],{"class":59},[537,30525,30526],{},"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":31,"searchDepth":46,"depth":46,"links":30528},[30529,30530,30531],{"id":28917,"depth":52,"text":28918},{"id":29146,"depth":52,"text":29147},{"id":30171,"depth":52,"text":30172},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28909,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30538,"title":30539,"body":30540,"description":31,"extension":543,"meta":30683,"navigation":246,"path":30684,"seo":30685,"stem":30686,"__hash__":30687},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30541,"toc":30681},[30542,30545,30550,30555,30558,30563,30568,30571,30576,30581,30584,30589,30592,30595,30598,30601,30604,30607,30627,30649,30652,30655,30675,30678],[10,30543,30539],{"id":30544},"_7vscode远程开发",[571,30546,30547],{},[574,30548,30549],{},"插件1：微软Docker工具",[14,30551,30552],{},[1941,30553],{"alt":31,"src":30554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,30556,30557],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,30559,30560],{},[1941,30561],{"alt":31,"src":30562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[571,30564,30565],{"start":46},[574,30566,30567],{},"插件2：微软Docker远程开发工具",[14,30569,30570],{},"下面这是远程开发的插件。",[14,30572,30573],{},[1941,30574],{"alt":31,"src":30575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,30577,30578],{},[1941,30579],{"alt":31,"src":30580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,30582,30583],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,30585,30586],{},[1941,30587],{"alt":31,"src":30588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,30590,30591],{},"安装完拓展之后，vscode进行链接：",[14,30593,30594],{},"1.按ctrl+shift+p",[14,30596,30597],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,30599,30600],{},"3.选择目前运行的容器",[14,30602,30603],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,30605,30606],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[26,30608,30610],{"className":24261,"code":30609,"language":24263,"meta":31,"style":31},"docker run -v 主机目录:容器目录 image-name\n",[33,30611,30612],{"__ignoreMap":31},[36,30613,30614,30616,30618,30621,30624],{"class":38,"line":39},[36,30615,26987],{"class":55},[36,30617,27664],{"class":59},[36,30619,30620],{"class":109}," -v",[36,30622,30623],{"class":59}," 主机目录:容器目录",[36,30625,30626],{"class":59}," image-name\n",[26,30628,30630],{"className":24261,"code":30629,"language":24263,"meta":31,"style":31},"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",[33,30631,30632],{"__ignoreMap":31},[36,30633,30634,30636,30638,30641,30643,30646],{"class":38,"line":39},[36,30635,26987],{"class":55},[36,30637,27664],{"class":59},[36,30639,30640],{"class":109}," -it",[36,30642,30620],{"class":109},[36,30644,30645],{"class":59}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[36,30647,30648],{"class":59}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,30650,30651],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,30653,30654],{},"查看挂载情况：",[26,30656,30658],{"className":24261,"code":30657,"language":24263,"meta":31,"style":31},"mount | grep -i project\n",[33,30659,30660],{"__ignoreMap":31},[36,30661,30662,30665,30667,30670,30672],{"class":38,"line":39},[36,30663,30664],{"class":55},"mount",[36,30666,25546],{"class":163},[36,30668,30669],{"class":55}," grep",[36,30671,26864],{"class":109},[36,30673,30674],{"class":59}," project\n",[14,30676,30677],{},"也可以通过ls来进行查看",[537,30679,30680],{},"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":31,"searchDepth":46,"depth":46,"links":30682},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30539,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30689,"title":30690,"body":30691,"description":542,"extension":543,"meta":30695,"navigation":246,"path":30697,"seo":30698,"stem":30699,"__hash__":30700},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30692,"toc":30693},[],{"title":31,"searchDepth":46,"depth":46,"links":30694},[],{"category":30696},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30690,"description":542},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30702,"title":30703,"body":30704,"description":542,"extension":543,"meta":30708,"navigation":246,"path":30709,"seo":30710,"stem":30711,"__hash__":30712},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30705,"toc":30706},[],{"title":31,"searchDepth":46,"depth":46,"links":30707},[],{"category":30696},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30703,"description":542},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30714,"title":30715,"body":30716,"description":542,"extension":543,"meta":31009,"navigation":246,"path":31010,"seo":31011,"stem":31012,"__hash__":31013},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30717,"toc":31007},[30718,30721,30729,30744,30749,30800,30803,30809,30996,31001,31004],[10,30719,30715],{"id":30720},"_1验证深度学习环境",[14,30722,30723,30724],{},"关于环境的安装，看",[20,30725,30728],{"href":30726,"rel":30727},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24],"Pytorch-->深度学习",[14,30730,30731,30732,30735,30736,30739,30740,30743],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[33,30733,30734],{},"pytorch-cuda=12.4"," 是一个“ ",[765,30737,30738],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[765,30741,30742],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,30745,30746],{},[1941,30747],{"alt":31,"src":30748},"\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",[26,30750,30752],{"className":24261,"code":30751,"language":24263,"meta":31,"style":31},"# 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",[33,30753,30754,30759],{"__ignoreMap":31},[36,30755,30756],{"class":38,"line":39},[36,30757,30758],{"class":42},"# CUDA 12.4\n",[36,30760,30761,30764,30766,30769,30772,30775,30778,30781,30783,30786,30789,30792,30795,30797],{"class":38,"line":46},[36,30762,30763],{"class":55},"conda",[36,30765,160],{"class":59},[36,30767,30768],{"class":59}," pytorch==",[36,30770,30771],{"class":109},"2.5.1",[36,30773,30774],{"class":59}," torchvision==",[36,30776,30777],{"class":109},"0.20.1",[36,30779,30780],{"class":59}," torchaudio==",[36,30782,30771],{"class":109},[36,30784,30785],{"class":59}," pytorch-cuda=",[36,30787,30788],{"class":109},"12.4",[36,30790,30791],{"class":109}," -c",[36,30793,30794],{"class":59}," pytorch",[36,30796,30791],{"class":109},[36,30798,30799],{"class":59}," nvidia\n",[14,30801,30802],{},"）：",[14,30804,30805],{},[20,30806,30807],{"href":30807,"rel":30808},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24],[26,30810,30814],{"className":30811,"code":30812,"language":30813,"meta":31,"style":31},"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",[33,30815,30816,30821,30829,30834,30844,30860,30865,30875,30912,30919,30931,30947,30952,30962,30974,30984],{"__ignoreMap":31},[36,30817,30818],{"class":38,"line":39},[36,30819,30820],{"class":42},"# 对深度学习环境进行测试\n",[36,30822,30823,30826],{"class":38,"line":46},[36,30824,30825],{"class":163},"import",[36,30827,30828],{"class":98}," torch\n",[36,30830,30831],{"class":38,"line":52},[36,30832,30833],{"class":42},"# 查看cuda是否被激活\n",[36,30835,30836,30839,30841],{"class":38,"line":66},[36,30837,30838],{"class":98},"flag",[36,30840,176],{"class":163},[36,30842,30843],{"class":98},"torch.cuda.is_available()\n",[36,30845,30846,30849,30851,30854,30857],{"class":38,"line":72},[36,30847,30848],{"class":109},"print",[36,30850,621],{"class":98},[36,30852,30853],{"class":59},"\"cuda:\"",[36,30855,30856],{"class":98},", flag)   ",[36,30858,30859],{"class":42},"#返回true的话说明被激活\n",[36,30861,30862],{"class":38,"line":82},[36,30863,30864],{"class":42},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[36,30866,30867,30870,30872],{"class":38,"line":88},[36,30868,30869],{"class":98},"ngpu",[36,30871,176],{"class":163},[36,30873,30874],{"class":109},"1\n",[36,30876,30877,30880,30882,30885,30888,30890,30893,30896,30899,30901,30903,30905,30907,30910],{"class":38,"line":113},[36,30878,30879],{"class":98},"device",[36,30881,176],{"class":163},[36,30883,30884],{"class":98},"torch.device(",[36,30886,30887],{"class":59},"\"cuda:0\"",[36,30889,2172],{"class":163},[36,30891,30892],{"class":98},"(torch.cuda.is_available() ",[36,30894,30895],{"class":163},"and",[36,30897,30898],{"class":98}," ngpu",[36,30900,173],{"class":163},[36,30902,807],{"class":109},[36,30904,14153],{"class":98},[36,30906,2169],{"class":163},[36,30908,30909],{"class":59}," \"cpu\"",[36,30911,627],{"class":98},[36,30913,30914,30916],{"class":38,"line":119},[36,30915,30848],{"class":109},[36,30917,30918],{"class":98},"(device)\n",[36,30920,30921,30923,30926,30928],{"class":38,"line":131},[36,30922,30848],{"class":109},[36,30924,30925],{"class":98},"(torch.cuda.get_device_name(",[36,30927,807],{"class":109},[36,30929,30930],{"class":98},"))\n",[36,30932,30933,30935,30938,30940,30942,30944],{"class":38,"line":137},[36,30934,30848],{"class":109},[36,30936,30937],{"class":98},"(torch.rand(",[36,30939,689],{"class":109},[36,30941,992],{"class":98},[36,30943,689],{"class":109},[36,30945,30946],{"class":98},").cuda())\n",[36,30948,30949],{"class":38,"line":147},[36,30950,30951],{"class":42},"# 查看cuda和cudnn的版本\n",[36,30953,30954,30957,30959],{"class":38,"line":153},[36,30955,30956],{"class":98},"cuda_version",[36,30958,176],{"class":163},[36,30960,30961],{"class":98},"torch.version.cuda\n",[36,30963,30964,30966,30968,30971],{"class":38,"line":191},[36,30965,30848],{"class":109},[36,30967,621],{"class":98},[36,30969,30970],{"class":59},"\"cuda version\"",[36,30972,30973],{"class":98},",cuda_version)\n",[36,30975,30976,30979,30981],{"class":38,"line":197},[36,30977,30978],{"class":98},"cudnn_version",[36,30980,176],{"class":163},[36,30982,30983],{"class":98},"torch.backends.cudnn.version()\n",[36,30985,30986,30988,30990,30993],{"class":38,"line":217},[36,30987,30848],{"class":109},[36,30989,621],{"class":98},[36,30991,30992],{"class":59},"\"cudnn version\"",[36,30994,30995],{"class":98},",cudnn_version)\n",[14,30997,30998],{},[1941,30999],{"alt":31,"src":31000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[14,31002,31003],{},"cuda:0 指的是一块显卡",[537,31005,31006],{},"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":31,"searchDepth":46,"depth":46,"links":31008},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30715,"description":542},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":31015,"title":31016,"body":31017,"description":542,"extension":543,"meta":50821,"navigation":246,"path":50822,"seo":50823,"stem":50824,"__hash__":50825},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":31018,"toc":50815},[31019,31022,31026,31030,31033,31038,31043,31046,31051,31056,31061,31064,31068,31073,31077,31082,31085,31090,31093,31096,31099,31102,31107,31110,31115,31120,31125,31130,31133,31137,31140,31145,31749,31754,31757,31762,31765,31768,32232,32235,32238,32241,32244,34295,34298,34303,34308,35103,35106,35111,35889,35893,37552,37556,38270,38274,38278,38283,38288,38293,38296,38301,38306,38311,38316,38321,38325,38330,39612,39617,39620,39623,39626,39781,39784,39787,41003,41008,41703,41707,41711,41716,41721,41724,41729,41734,41739,41744,41749,41754,41759,41764,41769,41774,41779,41784,41789,41794,41799,41804,41809,41814,41819,41824,41829,41834,41839,41844,41849,41854,41859,41864,41869,41874,41878,41882,41885,43363,43367,45014,45018,45712,45716,45719,45722,46266,46269,46273,46276,47673,47677,47680,48258,50045,50049,50052,50812],[10,31020,31016],{"id":31021},"_2经典神经网络",[588,31023,31025],{"id":31024},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22437,31027,31029],{"id":31028},"_211原理介绍","2.1.1.原理介绍",[14,31031,31032],{},"LeNet-5",[571,31034,31035],{},[574,31036,31037],{},"原理",[14,31039,31040],{},[1941,31041],{"alt":31,"src":31042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[14,31044,31045],{},"B是batch批次；C是channel通道",[571,31047,31048],{"start":46},[574,31049,31050],{},"网络参数详细",[14,31052,31053],{},[1941,31054],{"alt":31,"src":31055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[14,31057,31058],{},[1941,31059],{"alt":31,"src":31060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[14,31062,31063],{},"AlexNet",[571,31065,31066],{},[574,31067,31037],{},[14,31069,31070],{},[1941,31071],{"alt":31,"src":31072},"\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",[571,31074,31075],{"start":46},[574,31076,31050],{},[14,31078,31079],{},[1941,31080],{"alt":31,"src":31081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[14,31083,31084],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,31086,31087],{},[1941,31088],{"alt":31,"src":31089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[14,31091,31092],{},"数据处理中的图像增强操作:",[14,31094,31095],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,31097,31098],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,31100,31101],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,31103,31104],{},[1941,31105],{"alt":31,"src":31106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[14,31108,31109],{},"提升网络精确度的方法：LRN正则化",[14,31111,31112],{},[1941,31113],{"alt":31,"src":31114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[14,31116,31117],{},[1941,31118],{"alt":31,"src":31119},"\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",[571,31121,31122],{"start":52},[574,31123,31124],{},"AlexNet的总结",[14,31126,31127],{},[1941,31128],{"alt":31,"src":31129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[14,31131,31132],{},"比LeNet模型要深一丢丢",[22437,31134,31136],{"id":31135},"_212代码实现","2.1.2.代码实现",[14,31138,31139],{},"（1）LeNet",[571,31141,31142],{},[574,31143,31144],{},"模型搭建",[26,31146,31148],{"className":30811,"code":31147,"language":30813,"meta":31,"style":31},"# 导入库\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",[33,31149,31150,31155,31161,31166,31179,31184,31196,31200,31220,31225,31230,31241,31246,31265,31269,31274,31323,31335,31340,31369,31404,31431,31436,31448,31453,31473,31492,31511,31515,31520,31530,31547,31558,31573,31584,31595,31610,31625,31636,31643,31647,31661,31666,31689,31694,31699,31704,31708,31713,31718,31728],{"__ignoreMap":31},[36,31151,31152],{"class":38,"line":39},[36,31153,31154],{"class":42},"# 导入库\n",[36,31156,31157,31159],{"class":38,"line":46},[36,31158,30825],{"class":163},[36,31160,30828],{"class":98},[36,31162,31163],{"class":38,"line":52},[36,31164,31165],{"class":42},"# 导入神经网络层\n",[36,31167,31168,31171,31174,31176],{"class":38,"line":66},[36,31169,31170],{"class":163},"from",[36,31172,31173],{"class":98}," torch ",[36,31175,30825],{"class":163},[36,31177,31178],{"class":98}," nn\n",[36,31180,31181],{"class":38,"line":72},[36,31182,31183],{"class":42},"# 导入展示神经网络参数的包\n",[36,31185,31186,31188,31191,31193],{"class":38,"line":82},[36,31187,31170],{"class":163},[36,31189,31190],{"class":98}," torchsummary ",[36,31192,30825],{"class":163},[36,31194,31195],{"class":98}," summary\n",[36,31197,31198],{"class":38,"line":88},[36,31199,247],{"emptyLinePlaceholder":246},[36,31201,31202,31204,31207,31209,31212,31214,31217],{"class":38,"line":113},[36,31203,15133],{"class":163},[36,31205,31206],{"class":55}," LeNet",[36,31208,621],{"class":98},[36,31210,31211],{"class":55},"nn",[36,31213,1172],{"class":98},[36,31215,31216],{"class":55},"Module",[36,31218,31219],{"class":98},"):\n",[36,31221,31222],{"class":38,"line":119},[36,31223,31224],{"class":42},"    # 模型初始化:\n",[36,31226,31227],{"class":38,"line":131},[36,31228,31229],{"class":42},"    # 定义一些网络层和激活函数\n",[36,31231,31232,31235,31238],{"class":38,"line":137},[36,31233,31234],{"class":163},"    def",[36,31236,31237],{"class":109}," __init__",[36,31239,31240],{"class":98},"(self):\n",[36,31242,31243],{"class":38,"line":147},[36,31244,31245],{"class":42},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[36,31247,31248,31251,31254,31257,31260,31263],{"class":38,"line":153},[36,31249,31250],{"class":109},"        super",[36,31252,31253],{"class":98},"(LeNet,",[36,31255,31256],{"class":109},"self",[36,31258,31259],{"class":98},").",[36,31261,31262],{"class":109},"__init__",[36,31264,2435],{"class":98},[36,31266,31267],{"class":38,"line":191},[36,31268,247],{"emptyLinePlaceholder":246},[36,31270,31271],{"class":38,"line":197},[36,31272,31273],{"class":42},"        # 定义网络层\n",[36,31275,31276,31279,31282,31284,31287,31290,31292,31294,31296,31299,31301,31303,31305,31308,31310,31312,31314,31317,31319,31321],{"class":38,"line":217},[36,31277,31278],{"class":109},"        self",[36,31280,31281],{"class":98},".c1",[36,31283,176],{"class":163},[36,31285,31286],{"class":98},"nn.Conv2d(",[36,31288,31289],{"class":5667},"in_channels",[36,31291,176],{"class":163},[36,31293,833],{"class":109},[36,31295,992],{"class":98},[36,31297,31298],{"class":5667},"out_channels",[36,31300,176],{"class":163},[36,31302,958],{"class":109},[36,31304,992],{"class":98},[36,31306,31307],{"class":5667},"kernel_size",[36,31309,176],{"class":163},[36,31311,933],{"class":109},[36,31313,992],{"class":98},[36,31315,31316],{"class":5667},"padding",[36,31318,176],{"class":163},[36,31320,694],{"class":109},[36,31322,627],{"class":98},[36,31324,31325,31327,31330,31332],{"class":38,"line":223},[36,31326,31278],{"class":109},[36,31328,31329],{"class":98},".sig",[36,31331,176],{"class":163},[36,31333,31334],{"class":98},"nn.Sigmoid()\n",[36,31336,31337],{"class":38,"line":243},[36,31338,31339],{"class":42},"        # 定义池化\n",[36,31341,31342,31344,31347,31349,31352,31354,31356,31358,31360,31363,31365,31367],{"class":38,"line":250},[36,31343,31278],{"class":109},[36,31345,31346],{"class":98},".s2",[36,31348,176],{"class":163},[36,31350,31351],{"class":98},"nn.AvgPool2d(",[36,31353,31307],{"class":5667},[36,31355,176],{"class":163},[36,31357,694],{"class":109},[36,31359,992],{"class":98},[36,31361,31362],{"class":5667},"stride",[36,31364,176],{"class":163},[36,31366,694],{"class":109},[36,31368,627],{"class":98},[36,31370,31371,31373,31376,31378,31380,31382,31384,31386,31388,31390,31392,31394,31396,31398,31400,31402],{"class":38,"line":256},[36,31372,31278],{"class":109},[36,31374,31375],{"class":98},".c3",[36,31377,176],{"class":163},[36,31379,31286],{"class":98},[36,31381,31289],{"class":5667},[36,31383,176],{"class":163},[36,31385,958],{"class":109},[36,31387,992],{"class":98},[36,31389,31298],{"class":5667},[36,31391,176],{"class":163},[36,31393,1215],{"class":109},[36,31395,992],{"class":98},[36,31397,31307],{"class":5667},[36,31399,176],{"class":163},[36,31401,933],{"class":109},[36,31403,627],{"class":98},[36,31405,31406,31408,31411,31413,31415,31417,31419,31421,31423,31425,31427,31429],{"class":38,"line":273},[36,31407,31278],{"class":109},[36,31409,31410],{"class":98},".s4",[36,31412,176],{"class":163},[36,31414,31351],{"class":98},[36,31416,31307],{"class":5667},[36,31418,176],{"class":163},[36,31420,694],{"class":109},[36,31422,992],{"class":98},[36,31424,31362],{"class":5667},[36,31426,176],{"class":163},[36,31428,694],{"class":109},[36,31430,627],{"class":98},[36,31432,31433],{"class":38,"line":278},[36,31434,31435],{"class":42},"        # 定义平展层\n",[36,31437,31438,31440,31443,31445],{"class":38,"line":284},[36,31439,31278],{"class":109},[36,31441,31442],{"class":98},".flatten",[36,31444,176],{"class":163},[36,31446,31447],{"class":98},"nn.Flatten()\n",[36,31449,31450],{"class":38,"line":315},[36,31451,31452],{"class":42},"        # 定义全连接层\n",[36,31454,31455,31457,31460,31462,31465,31467,31469,31471],{"class":38,"line":320},[36,31456,31278],{"class":109},[36,31458,31459],{"class":98},".f5",[36,31461,176],{"class":163},[36,31463,31464],{"class":98},"nn.Linear(",[36,31466,4438],{"class":109},[36,31468,992],{"class":98},[36,31470,1430],{"class":109},[36,31472,627],{"class":98},[36,31474,31475,31477,31480,31482,31484,31486,31488,31490],{"class":38,"line":326},[36,31476,31278],{"class":109},[36,31478,31479],{"class":98},".f6",[36,31481,176],{"class":163},[36,31483,31464],{"class":98},[36,31485,1430],{"class":109},[36,31487,992],{"class":98},[36,31489,1324],{"class":109},[36,31491,627],{"class":98},[36,31493,31494,31496,31499,31501,31503,31505,31507,31509],{"class":38,"line":343},[36,31495,31278],{"class":109},[36,31497,31498],{"class":98},".f7",[36,31500,176],{"class":163},[36,31502,31464],{"class":98},[36,31504,1324],{"class":109},[36,31506,992],{"class":98},[36,31508,1060],{"class":109},[36,31510,627],{"class":98},[36,31512,31513],{"class":38,"line":348},[36,31514,247],{"emptyLinePlaceholder":246},[36,31516,31517],{"class":38,"line":354},[36,31518,31519],{"class":42},"    # 写工具->写前向传播\n",[36,31521,31522,31524,31527],{"class":38,"line":370},[36,31523,31234],{"class":163},[36,31525,31526],{"class":55}," forward",[36,31528,31529],{"class":98},"(self,x):\n",[36,31531,31532,31535,31537,31539,31542,31544],{"class":38,"line":375},[36,31533,31534],{"class":98},"        x",[36,31536,176],{"class":163},[36,31538,31256],{"class":109},[36,31540,31541],{"class":98},".sig(",[36,31543,31256],{"class":109},[36,31545,31546],{"class":98},".c1(x))\n",[36,31548,31549,31551,31553,31555],{"class":38,"line":381},[36,31550,31534],{"class":98},[36,31552,176],{"class":163},[36,31554,31256],{"class":109},[36,31556,31557],{"class":98},".s2(x)\n",[36,31559,31560,31562,31564,31566,31568,31570],{"class":38,"line":399},[36,31561,31534],{"class":98},[36,31563,176],{"class":163},[36,31565,31256],{"class":109},[36,31567,31541],{"class":98},[36,31569,31256],{"class":109},[36,31571,31572],{"class":98},".c3(x))\n",[36,31574,31575,31577,31579,31581],{"class":38,"line":404},[36,31576,31534],{"class":98},[36,31578,176],{"class":163},[36,31580,31256],{"class":109},[36,31582,31583],{"class":98},".s4(x)\n",[36,31585,31586,31588,31590,31592],{"class":38,"line":410},[36,31587,31534],{"class":98},[36,31589,176],{"class":163},[36,31591,31256],{"class":109},[36,31593,31594],{"class":98},".flatten(x)\n",[36,31596,31597,31599,31601,31603,31605,31607],{"class":38,"line":423},[36,31598,31534],{"class":98},[36,31600,176],{"class":163},[36,31602,31256],{"class":109},[36,31604,31541],{"class":98},[36,31606,31256],{"class":109},[36,31608,31609],{"class":98},".f5(x))\n",[36,31611,31612,31614,31616,31618,31620,31622],{"class":38,"line":436},[36,31613,31534],{"class":98},[36,31615,176],{"class":163},[36,31617,31256],{"class":109},[36,31619,31541],{"class":98},[36,31621,31256],{"class":109},[36,31623,31624],{"class":98},".f6(x))\n",[36,31626,31627,31629,31631,31633],{"class":38,"line":441},[36,31628,31534],{"class":98},[36,31630,176],{"class":163},[36,31632,31256],{"class":109},[36,31634,31635],{"class":98},".f7(x)\n",[36,31637,31638,31640],{"class":38,"line":447},[36,31639,15191],{"class":163},[36,31641,31642],{"class":98}," x\n",[36,31644,31645],{"class":38,"line":465},[36,31646,247],{"emptyLinePlaceholder":246},[36,31648,31649,31651,31654,31656,31659],{"class":38,"line":470},[36,31650,2010],{"class":163},[36,31652,31653],{"class":109}," __name__",[36,31655,3400],{"class":163},[36,31657,31658],{"class":59},"\"__main__\"",[36,31660,4190],{"class":98},[36,31662,31663],{"class":38,"line":476},[36,31664,31665],{"class":42},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[36,31667,31668,31671,31673,31675,31678,31680,31683,31685,31687],{"class":38,"line":496},[36,31669,31670],{"class":98},"    device",[36,31672,176],{"class":163},[36,31674,30884],{"class":98},[36,31676,31677],{"class":59},"\"cuda\"",[36,31679,2172],{"class":163},[36,31681,31682],{"class":98}," torch.cuda.is_available() ",[36,31684,2169],{"class":163},[36,31686,30909],{"class":59},[36,31688,627],{"class":98},[36,31690,31691],{"class":38,"line":501},[36,31692,31693],{"class":42},"    # 如果就是想指定用cpu用下方代码:\n",[36,31695,31696],{"class":38,"line":507},[36,31697,31698],{"class":42},"    # device=\"cpu\"\n",[36,31700,31701],{"class":38,"line":517},[36,31702,31703],{"class":42},"    # print(device)\n",[36,31705,31706],{"class":38,"line":522},[36,31707,247],{"emptyLinePlaceholder":246},[36,31709,31710],{"class":38,"line":528},[36,31711,31712],{"class":42},"    # 实例化模型\n",[36,31714,31715],{"class":38,"line":10203},[36,31716,31717],{"class":42},"    # 将模型放到设备中去运行\n",[36,31719,31720,31723,31725],{"class":38,"line":10227},[36,31721,31722],{"class":98},"    model",[36,31724,176],{"class":163},[36,31726,31727],{"class":98},"LeNet().to(device)\n",[36,31729,31730,31733,31736,31738,31740,31742,31744,31746],{"class":38,"line":10232},[36,31731,31732],{"class":109},"    print",[36,31734,31735],{"class":98},"(summary(model,(",[36,31737,833],{"class":109},[36,31739,992],{"class":98},[36,31741,1514],{"class":109},[36,31743,992],{"class":98},[36,31745,1514],{"class":109},[36,31747,31748],{"class":98},")))\n",[14,31750,31751],{},[1941,31752],{"alt":31,"src":31753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[14,31755,31756],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[571,31758,31759],{"start":46},[574,31760,31761],{},"训练",[14,31763,31764],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,31766,31767],{},"在训练之前可以将数据展示看一下",[26,31769,31771],{"className":30811,"code":31770,"language":30813,"meta":31,"style":31},"# 建立画图的函数，用于展示数据\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",[33,31772,31773,31778,31783,31795,31807,31820,31825,31837,31842,31854,31859,31871,31875,31879,31900,31912,31917,31938,31949,31953,31958,31976,31987,31992,32003,32008,32019,32023,32028,32043,32056,32061,32066,32079,32092,32105,32110,32114,32119,32139,32156,32176,32189,32202,32212,32227],{"__ignoreMap":31},[36,31774,31775],{"class":38,"line":39},[36,31776,31777],{"class":42},"# 建立画图的函数，用于展示数据\n",[36,31779,31780],{"class":38,"line":46},[36,31781,31782],{"class":42},"# torchvision中包含很多内置的数据集\n",[36,31784,31785,31787,31790,31792],{"class":38,"line":52},[36,31786,31170],{"class":163},[36,31788,31789],{"class":98}," sklearn.externals.array_api_compat.torch ",[36,31791,30825],{"class":163},[36,31793,31794],{"class":98}," squeeze\n",[36,31796,31797,31799,31802,31804],{"class":38,"line":66},[36,31798,31170],{"class":163},[36,31800,31801],{"class":98}," torchvision.datasets ",[36,31803,30825],{"class":163},[36,31805,31806],{"class":98}," FashionMNIST\n",[36,31808,31809,31811,31814,31817],{"class":38,"line":72},[36,31810,30825],{"class":163},[36,31812,31813],{"class":98}," numpy ",[36,31815,31816],{"class":163},"as",[36,31818,31819],{"class":98}," np\n",[36,31821,31822],{"class":38,"line":82},[36,31823,31824],{"class":42},"# 引入处理数据集的包\n",[36,31826,31827,31829,31832,31834],{"class":38,"line":88},[36,31828,31170],{"class":163},[36,31830,31831],{"class":98}," torchvision ",[36,31833,30825],{"class":163},[36,31835,31836],{"class":98}," transforms\n",[36,31838,31839],{"class":38,"line":113},[36,31840,31841],{"class":42},"# 从torch库中引入数据处理的包\n",[36,31843,31844,31846,31849,31851],{"class":38,"line":119},[36,31845,30825],{"class":163},[36,31847,31848],{"class":98}," torch.utils.data ",[36,31850,31816],{"class":163},[36,31852,31853],{"class":98}," Data\n",[36,31855,31856],{"class":38,"line":131},[36,31857,31858],{"class":42},"# 导入画图的库\n",[36,31860,31861,31863,31866,31868],{"class":38,"line":137},[36,31862,30825],{"class":163},[36,31864,31865],{"class":98}," matplotlib.pyplot ",[36,31867,31816],{"class":163},[36,31869,31870],{"class":98}," plt\n",[36,31872,31873],{"class":38,"line":147},[36,31874,247],{"emptyLinePlaceholder":246},[36,31876,31877],{"class":38,"line":153},[36,31878,247],{"emptyLinePlaceholder":246},[36,31880,31881,31884,31886,31889,31892,31894,31897],{"class":38,"line":191},[36,31882,31883],{"class":98},"train_data",[36,31885,176],{"class":163},[36,31887,31888],{"class":98},"FashionMNIST(",[36,31890,31891],{"class":5667},"root",[36,31893,176],{"class":163},[36,31895,31896],{"class":59},"'.\u002Fdata'",[36,31898,31899],{"class":98},",\n",[36,31901,31902,31905,31907,31910],{"class":38,"line":197},[36,31903,31904],{"class":5667},"                        train",[36,31906,176],{"class":163},[36,31908,31909],{"class":109},"True",[36,31911,31899],{"class":98},[36,31913,31914],{"class":38,"line":217},[36,31915,31916],{"class":42},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[36,31918,31919,31922,31924,31927,31930,31932,31935],{"class":38,"line":223},[36,31920,31921],{"class":5667},"                        transform",[36,31923,176],{"class":163},[36,31925,31926],{"class":98},"transforms.Compose([transforms.Resize(",[36,31928,31929],{"class":5667},"size",[36,31931,176],{"class":163},[36,31933,31934],{"class":109},"224",[36,31936,31937],{"class":98},"),transforms.ToTensor()]),\n",[36,31939,31940,31943,31945,31947],{"class":38,"line":243},[36,31941,31942],{"class":5667},"                        download",[36,31944,176],{"class":163},[36,31946,31909],{"class":109},[36,31948,627],{"class":98},[36,31950,31951],{"class":38,"line":250},[36,31952,247],{"emptyLinePlaceholder":246},[36,31954,31955],{"class":38,"line":256},[36,31956,31957],{"class":42},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[36,31959,31960,31963,31965,31968,31971,31973],{"class":38,"line":273},[36,31961,31962],{"class":98},"train_loader",[36,31964,176],{"class":163},[36,31966,31967],{"class":98},"Data.DataLoader(",[36,31969,31970],{"class":5667},"dataset",[36,31972,176],{"class":163},[36,31974,31975],{"class":98},"train_data,\n",[36,31977,31978,31981,31983,31985],{"class":38,"line":278},[36,31979,31980],{"class":5667},"                             batch_size",[36,31982,176],{"class":163},[36,31984,819],{"class":109},[36,31986,31899],{"class":98},[36,31988,31989],{"class":38,"line":284},[36,31990,31991],{"class":42},"                             # 数据是否打乱\n",[36,31993,31994,31997,31999,32001],{"class":38,"line":315},[36,31995,31996],{"class":5667},"                             shuffle",[36,31998,176],{"class":163},[36,32000,31909],{"class":109},[36,32002,31899],{"class":98},[36,32004,32005],{"class":38,"line":320},[36,32006,32007],{"class":42},"                             # 规定加载数据的进程\n",[36,32009,32010,32013,32015,32017],{"class":38,"line":326},[36,32011,32012],{"class":5667},"                             num_workers",[36,32014,176],{"class":163},[36,32016,807],{"class":109},[36,32018,627],{"class":98},[36,32020,32021],{"class":38,"line":343},[36,32022,247],{"emptyLinePlaceholder":246},[36,32024,32025],{"class":38,"line":348},[36,32026,32027],{"class":42},"# 获得一个batch的数据\n",[36,32029,32030,32032,32035,32037,32040],{"class":38,"line":354},[36,32031,3476],{"class":163},[36,32033,32034],{"class":98}," step,(b_x,b_y) ",[36,32036,26480],{"class":163},[36,32038,32039],{"class":109}," enumerate",[36,32041,32042],{"class":98},"(train_loader):\n",[36,32044,32045,32047,32050,32052,32054],{"class":38,"line":370},[36,32046,3552],{"class":163},[36,32048,32049],{"class":98}," step ",[36,32051,173],{"class":163},[36,32053,4544],{"class":109},[36,32055,4190],{"class":98},[36,32057,32058],{"class":38,"line":375},[36,32059,32060],{"class":163},"        break\n",[36,32062,32063],{"class":38,"line":381},[36,32064,32065],{"class":42},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[36,32067,32068,32071,32073,32076],{"class":38,"line":399},[36,32069,32070],{"class":98},"batch_x",[36,32072,176],{"class":163},[36,32074,32075],{"class":98},"b_x.squeeze().numpy()  ",[36,32077,32078],{"class":42},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[36,32080,32081,32084,32086,32089],{"class":38,"line":404},[36,32082,32083],{"class":98},"batch_y",[36,32085,176],{"class":163},[36,32087,32088],{"class":98},"b_y.numpy()   ",[36,32090,32091],{"class":42},"#将张量转换成功numpy数组\n",[36,32093,32094,32097,32099,32102],{"class":38,"line":410},[36,32095,32096],{"class":98},"class_label",[36,32098,176],{"class":163},[36,32100,32101],{"class":98},"train_data.classes  ",[36,32103,32104],{"class":42},"#训练集标签\n",[36,32106,32107],{"class":38,"line":423},[36,32108,32109],{"class":42},"# print(class_label)\n",[36,32111,32112],{"class":38,"line":436},[36,32113,247],{"emptyLinePlaceholder":246},[36,32115,32116],{"class":38,"line":441},[36,32117,32118],{"class":42},"# 可视化一个batch的图像\n",[36,32120,32121,32124,32127,32129,32131,32133,32135,32137],{"class":38,"line":447},[36,32122,32123],{"class":98},"plt.figure(",[36,32125,32126],{"class":5667},"figsize",[36,32128,176],{"class":163},[36,32130,621],{"class":98},[36,32132,1112],{"class":109},[36,32134,992],{"class":98},[36,32136,933],{"class":109},[36,32138,30930],{"class":98},[36,32140,32141,32143,32146,32148,32151,32153],{"class":38,"line":465},[36,32142,3476],{"class":163},[36,32144,32145],{"class":98}," ii ",[36,32147,26480],{"class":163},[36,32149,32150],{"class":98}," np.arange(",[36,32152,7809],{"class":109},[36,32154,32155],{"class":98},"(batch_y)):\n",[36,32157,32158,32161,32163,32165,32167,32170,32172,32174],{"class":38,"line":470},[36,32159,32160],{"class":98},"    plt.subplot(",[36,32162,908],{"class":109},[36,32164,992],{"class":98},[36,32166,1215],{"class":109},[36,32168,32169],{"class":98},",ii ",[36,32171,1095],{"class":163},[36,32173,25555],{"class":109},[36,32175,627],{"class":98},[36,32177,32178,32181,32184,32186],{"class":38,"line":476},[36,32179,32180],{"class":98},"    plt.imshow(batch_x[ii,:,:],",[36,32182,32183],{"class":5667},"cmap",[36,32185,176],{"class":163},[36,32187,32188],{"class":98},"plt.cm.gray)\n",[36,32190,32191,32194,32196,32198,32200],{"class":38,"line":496},[36,32192,32193],{"class":98},"    plt.title(class_label[batch_y[ii]],",[36,32195,31929],{"class":5667},[36,32197,176],{"class":163},[36,32199,1060],{"class":109},[36,32201,627],{"class":98},[36,32203,32204,32207,32210],{"class":38,"line":501},[36,32205,32206],{"class":98},"    plt.axis(",[36,32208,32209],{"class":59},"\"off\"",[36,32211,627],{"class":98},[36,32213,32214,32217,32220,32222,32225],{"class":38,"line":507},[36,32215,32216],{"class":98},"    plt.subplots_adjust(",[36,32218,32219],{"class":5667},"wspace",[36,32221,176],{"class":163},[36,32223,32224],{"class":109},"0.05",[36,32226,627],{"class":98},[36,32228,32229],{"class":38,"line":517},[36,32230,32231],{"class":98},"plt.show()\n",[14,32233,32234],{},"用matplotlib进行展示的过程可以后续再补",[14,32236,32237],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,32239,32240],{},"训练次数就是按照批次过整个训练集数据的次数",[14,32242,32243],{},"模型训练：",[26,32245,32247],{"className":30811,"code":32246,"language":30813,"meta":31,"style":31},"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",[33,32248,32249,32256,32263,32267,32279,32285,32296,32306,32316,32326,32336,32341,32353,32363,32367,32371,32376,32387,32400,32411,32428,32439,32478,32494,32506,32517,32522,32533,32549,32560,32571,32582,32589,32593,32598,32603,32607,32612,32622,32643,32647,32651,32656,32661,32666,32686,32690,32695,32705,32709,32714,32723,32728,32733,32738,32748,32752,32756,32761,32766,32776,32781,32791,32796,32805,32810,32819,32824,32833,32837,32842,32852,32856,32860,32865,32880,32908,32923,32927,32932,32937,32946,32951,32960,32965,32974,32979,32988,32993,33002,33007,33016,33021,33034,33039,33049,33054,33064,33070,33076,33082,33088,33099,33105,33125,33131,33142,33148,33154,33160,33166,33172,33178,33184,33204,33210,33226,33232,33246,33252,33267,33273,33282,33288,33297,33303,33309,33318,33324,33335,33341,33360,33366,33377,33383,33403,33419,33425,33439,33445,33451,33462,33468,33474,33484,33490,33501,33507,33517,33522,33528,33577,33624,33629,33635,33654,33660,33680,33686,33692,33702,33707,33713,33729,33774,33780,33786,33792,33803,33809,33815,33821,33839,33853,33862,33871,33880,33889,33895,33901,33909,33914,33920,33931,33937,33957,33963,33969,33975,33992,33998,34004,34010,34016,34022,34049,34073,34079,34085,34091,34102,34113,34119,34136,34159,34182,34188,34193,34202,34212,34218,34223,34229,34242,34248,34259,34270,34289],{"__ignoreMap":31},[36,32250,32251,32253],{"class":38,"line":39},[36,32252,30825],{"class":163},[36,32254,32255],{"class":98}," copy\n",[36,32257,32258,32260],{"class":38,"line":46},[36,32259,30825],{"class":163},[36,32261,32262],{"class":98}," time\n",[36,32264,32265],{"class":38,"line":52},[36,32266,247],{"emptyLinePlaceholder":246},[36,32268,32269,32271,32274,32276],{"class":38,"line":66},[36,32270,30825],{"class":163},[36,32272,32273],{"class":98}," pandas ",[36,32275,31816],{"class":163},[36,32277,32278],{"class":98}," pd\n",[36,32280,32281,32283],{"class":38,"line":72},[36,32282,30825],{"class":163},[36,32284,30828],{"class":98},[36,32286,32287,32289,32291,32293],{"class":38,"line":82},[36,32288,31170],{"class":163},[36,32290,31848],{"class":98},[36,32292,30825],{"class":163},[36,32294,32295],{"class":98}," Dataset\n",[36,32297,32298,32300,32302,32304],{"class":38,"line":88},[36,32299,31170],{"class":163},[36,32301,31801],{"class":98},[36,32303,30825],{"class":163},[36,32305,31806],{"class":98},[36,32307,32308,32310,32312,32314],{"class":38,"line":113},[36,32309,31170],{"class":163},[36,32311,31831],{"class":98},[36,32313,30825],{"class":163},[36,32315,31836],{"class":98},[36,32317,32318,32320,32322,32324],{"class":38,"line":119},[36,32319,30825],{"class":163},[36,32321,31848],{"class":98},[36,32323,31816],{"class":163},[36,32325,31853],{"class":98},[36,32327,32328,32330,32332,32334],{"class":38,"line":131},[36,32329,30825],{"class":163},[36,32331,31865],{"class":98},[36,32333,31816],{"class":163},[36,32335,31870],{"class":98},[36,32337,32338],{"class":38,"line":137},[36,32339,32340],{"class":42},"# 导入模型\n",[36,32342,32343,32345,32348,32350],{"class":38,"line":147},[36,32344,31170],{"class":163},[36,32346,32347],{"class":98}," model ",[36,32349,30825],{"class":163},[36,32351,32352],{"class":98}," LeNet\n",[36,32354,32355,32357,32359,32361],{"class":38,"line":153},[36,32356,31170],{"class":163},[36,32358,31173],{"class":98},[36,32360,30825],{"class":163},[36,32362,31178],{"class":98},[36,32364,32365],{"class":38,"line":191},[36,32366,247],{"emptyLinePlaceholder":246},[36,32368,32369],{"class":38,"line":197},[36,32370,247],{"emptyLinePlaceholder":246},[36,32372,32373],{"class":38,"line":217},[36,32374,32375],{"class":42},"# 处理训练集与验证集函数--->划分数据集\n",[36,32377,32378,32381,32384],{"class":38,"line":223},[36,32379,32380],{"class":163},"def",[36,32382,32383],{"class":55}," train_val_data_process",[36,32385,32386],{"class":98},"():\n",[36,32388,32389,32392,32394,32396,32398],{"class":38,"line":243},[36,32390,32391],{"class":98},"    train_data",[36,32393,176],{"class":163},[36,32395,31888],{"class":98},[36,32397,31896],{"class":59},[36,32399,31899],{"class":98},[36,32401,32402,32405,32407,32409],{"class":38,"line":250},[36,32403,32404],{"class":5667},"                            train",[36,32406,176],{"class":163},[36,32408,31909],{"class":109},[36,32410,31899],{"class":98},[36,32412,32413,32416,32418,32420,32422,32424,32426],{"class":38,"line":256},[36,32414,32415],{"class":5667},"                            transform",[36,32417,176],{"class":163},[36,32419,31926],{"class":98},[36,32421,31929],{"class":5667},[36,32423,176],{"class":163},[36,32425,1514],{"class":109},[36,32427,31937],{"class":98},[36,32429,32430,32433,32435,32437],{"class":38,"line":273},[36,32431,32432],{"class":5667},"                            download",[36,32434,176],{"class":163},[36,32436,31909],{"class":109},[36,32438,627],{"class":98},[36,32440,32441,32444,32446,32449,32452,32454,32457,32459,32461,32464,32466,32468,32471,32473,32475],{"class":38,"line":278},[36,32442,32443],{"class":98},"    train_data,val_data",[36,32445,176],{"class":163},[36,32447,32448],{"class":98},"Data.random_split(train_data,[",[36,32450,32451],{"class":109},"round",[36,32453,621],{"class":98},[36,32455,32456],{"class":109},"0.8",[36,32458,1069],{"class":163},[36,32460,7809],{"class":109},[36,32462,32463],{"class":98},"(train_data)),",[36,32465,32451],{"class":109},[36,32467,621],{"class":98},[36,32469,32470],{"class":109},"0.2",[36,32472,1069],{"class":163},[36,32474,7809],{"class":109},[36,32476,32477],{"class":98},"(train_data))])\n",[36,32479,32480,32483,32485,32488,32490,32492],{"class":38,"line":284},[36,32481,32482],{"class":98},"    train_dataloader ",[36,32484,176],{"class":163},[36,32486,32487],{"class":98}," Data.DataLoader(",[36,32489,31970],{"class":5667},[36,32491,176],{"class":163},[36,32493,31975],{"class":98},[36,32495,32496,32499,32501,32504],{"class":38,"line":315},[36,32497,32498],{"class":5667},"                                       batch_size",[36,32500,176],{"class":163},[36,32502,32503],{"class":109},"128",[36,32505,31899],{"class":98},[36,32507,32508,32511,32513,32515],{"class":38,"line":320},[36,32509,32510],{"class":5667},"                                       shuffle",[36,32512,176],{"class":163},[36,32514,31909],{"class":109},[36,32516,31899],{"class":98},[36,32518,32519],{"class":38,"line":326},[36,32520,32521],{"class":42},"                                       # 规定8个进程\n",[36,32523,32524,32527,32529,32531],{"class":38,"line":343},[36,32525,32526],{"class":5667},"                                       num_workers",[36,32528,176],{"class":163},[36,32530,1009],{"class":109},[36,32532,627],{"class":98},[36,32534,32535,32538,32540,32542,32544,32546],{"class":38,"line":348},[36,32536,32537],{"class":98},"    val_dataloader",[36,32539,176],{"class":163},[36,32541,31967],{"class":98},[36,32543,31970],{"class":5667},[36,32545,176],{"class":163},[36,32547,32548],{"class":98},"val_data,\n",[36,32550,32551,32554,32556,32558],{"class":38,"line":354},[36,32552,32553],{"class":5667},"                                   batch_size",[36,32555,176],{"class":163},[36,32557,32503],{"class":109},[36,32559,31899],{"class":98},[36,32561,32562,32565,32567,32569],{"class":38,"line":370},[36,32563,32564],{"class":5667},"                                   shuffle",[36,32566,176],{"class":163},[36,32568,31909],{"class":109},[36,32570,31899],{"class":98},[36,32572,32573,32576,32578,32580],{"class":38,"line":375},[36,32574,32575],{"class":5667},"                                   num_workers",[36,32577,176],{"class":163},[36,32579,1009],{"class":109},[36,32581,627],{"class":98},[36,32583,32584,32586],{"class":38,"line":381},[36,32585,4541],{"class":163},[36,32587,32588],{"class":98}," train_dataloader,val_dataloader\n",[36,32590,32591],{"class":38,"line":399},[36,32592,247],{"emptyLinePlaceholder":246},[36,32594,32595],{"class":38,"line":404},[36,32596,32597],{"class":42},"# 验证是否出错\n",[36,32599,32600],{"class":38,"line":410},[36,32601,32602],{"class":42},"# train_val_data_process()\n",[36,32604,32605],{"class":38,"line":423},[36,32606,247],{"emptyLinePlaceholder":246},[36,32608,32609],{"class":38,"line":436},[36,32610,32611],{"class":42},"# 定义模型训练函数\n",[36,32613,32614,32616,32619],{"class":38,"line":441},[36,32615,32380],{"class":163},[36,32617,32618],{"class":55}," train_model_process",[36,32620,32621],{"class":98},"(model,train_dataloader,val_dataloader,num_epochs):\n",[36,32623,32624,32626,32628,32630,32632,32634,32636,32638,32641],{"class":38,"line":447},[36,32625,31670],{"class":98},[36,32627,176],{"class":163},[36,32629,30884],{"class":98},[36,32631,31677],{"class":59},[36,32633,2172],{"class":163},[36,32635,31682],{"class":98},[36,32637,2169],{"class":163},[36,32639,32640],{"class":59}," 'cpu'",[36,32642,627],{"class":98},[36,32644,32645],{"class":38,"line":465},[36,32646,247],{"emptyLinePlaceholder":246},[36,32648,32649],{"class":38,"line":470},[36,32650,247],{"emptyLinePlaceholder":246},[36,32652,32653],{"class":38,"line":476},[36,32654,32655],{"class":42},"    # 定义优化器\n",[36,32657,32658],{"class":38,"line":496},[36,32659,32660],{"class":42},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[36,32662,32663],{"class":38,"line":501},[36,32664,32665],{"class":42},"    # lr为学习率\n",[36,32667,32668,32671,32673,32676,32679,32681,32684],{"class":38,"line":507},[36,32669,32670],{"class":98},"    optimizer",[36,32672,176],{"class":163},[36,32674,32675],{"class":98},"torch.optim.Adam(model.parameters(),",[36,32677,32678],{"class":5667},"lr",[36,32680,176],{"class":163},[36,32682,32683],{"class":109},"0.001",[36,32685,627],{"class":98},[36,32687,32688],{"class":38,"line":517},[36,32689,247],{"emptyLinePlaceholder":246},[36,32691,32692],{"class":38,"line":522},[36,32693,32694],{"class":42},"    # 定义损失函数使用交叉熵损失函数\n",[36,32696,32697,32700,32702],{"class":38,"line":528},[36,32698,32699],{"class":98},"    criterion",[36,32701,176],{"class":163},[36,32703,32704],{"class":98},"nn.CrossEntropyLoss()\n",[36,32706,32707],{"class":38,"line":10203},[36,32708,247],{"emptyLinePlaceholder":246},[36,32710,32711],{"class":38,"line":10227},[36,32712,32713],{"class":42},"    # 将模型放到GPU中进行训练\n",[36,32715,32716,32718,32720],{"class":38,"line":10232},[36,32717,31722],{"class":98},[36,32719,176],{"class":163},[36,32721,32722],{"class":98},"model.to(device)\n",[36,32724,32725],{"class":38,"line":10237},[36,32726,32727],{"class":42},"    # 复制当前模型的参数\n",[36,32729,32730],{"class":38,"line":10242},[36,32731,32732],{"class":42},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[36,32734,32735],{"class":38,"line":10251},[36,32736,32737],{"class":42},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[36,32739,32740,32743,32745],{"class":38,"line":10256},[36,32741,32742],{"class":98},"    best_model_wts",[36,32744,176],{"class":163},[36,32746,32747],{"class":98},"copy.deepcopy(model.state_dict())\n",[36,32749,32750],{"class":38,"line":10262},[36,32751,247],{"emptyLinePlaceholder":246},[36,32753,32754],{"class":38,"line":10283},[36,32755,247],{"emptyLinePlaceholder":246},[36,32757,32758],{"class":38,"line":10289},[36,32759,32760],{"class":42},"    # 初始化参数\n",[36,32762,32763],{"class":38,"line":10303},[36,32764,32765],{"class":42},"    # 最高准确度\n",[36,32767,32768,32771,32773],{"class":38,"line":10309},[36,32769,32770],{"class":98},"    best_acc",[36,32772,176],{"class":163},[36,32774,32775],{"class":109},"0.0\n",[36,32777,32778],{"class":38,"line":10336},[36,32779,32780],{"class":42},"    # 训练集损失列表\n",[36,32782,32783,32786,32788],{"class":38,"line":10345},[36,32784,32785],{"class":98},"    train_loss_all",[36,32787,176],{"class":163},[36,32789,32790],{"class":98},"[]\n",[36,32792,32793],{"class":38,"line":10351},[36,32794,32795],{"class":42},"    # 验证集函数列表\n",[36,32797,32798,32801,32803],{"class":38,"line":10359},[36,32799,32800],{"class":98},"    val_loss_all",[36,32802,176],{"class":163},[36,32804,32790],{"class":98},[36,32806,32807],{"class":38,"line":10364},[36,32808,32809],{"class":42},"    # 训练集准确度列表\n",[36,32811,32812,32815,32817],{"class":38,"line":17043},[36,32813,32814],{"class":98},"    train_acc_all",[36,32816,176],{"class":163},[36,32818,32790],{"class":98},[36,32820,32821],{"class":38,"line":17049},[36,32822,32823],{"class":42},"    # 验证集准确度列表\n",[36,32825,32826,32829,32831],{"class":38,"line":17072},[36,32827,32828],{"class":98},"    val_acc_all",[36,32830,176],{"class":163},[36,32832,32790],{"class":98},[36,32834,32835],{"class":38,"line":17078},[36,32836,247],{"emptyLinePlaceholder":246},[36,32838,32839],{"class":38,"line":17101},[36,32840,32841],{"class":42},"    # 保存当前时间--->方便看每轮训练的时间\n",[36,32843,32844,32847,32849],{"class":38,"line":17115},[36,32845,32846],{"class":98},"    since",[36,32848,176],{"class":163},[36,32850,32851],{"class":98},"time.time()\n",[36,32853,32854],{"class":38,"line":17135},[36,32855,247],{"emptyLinePlaceholder":246},[36,32857,32858],{"class":38,"line":17141},[36,32859,247],{"emptyLinePlaceholder":246},[36,32861,32862],{"class":38,"line":17152},[36,32863,32864],{"class":42},"    # 准备工作完成--->开始训练模型\n",[36,32866,32867,32869,32872,32874,32877],{"class":38,"line":17175},[36,32868,3652],{"class":163},[36,32870,32871],{"class":98}," epoch ",[36,32873,26480],{"class":163},[36,32875,32876],{"class":109}," range",[36,32878,32879],{"class":98},"(num_epochs):\n",[36,32881,32882,32885,32887,32890,32893,32895,32897,32899,32902,32904,32906],{"class":38,"line":17197},[36,32883,32884],{"class":109},"        print",[36,32886,621],{"class":98},[36,32888,32889],{"class":59},"\"Epoch ",[36,32891,32892],{"class":109},"{}",[36,32894,1198],{"class":59},[36,32896,32892],{"class":109},[36,32898,866],{"class":59},[36,32900,32901],{"class":98},".format(epoch,num_epochs",[36,32903,1146],{"class":163},[36,32905,833],{"class":109},[36,32907,30930],{"class":98},[36,32909,32910,32912,32914,32917,32919,32921],{"class":38,"line":17202},[36,32911,32884],{"class":109},[36,32913,621],{"class":98},[36,32915,32916],{"class":59},"\"-\"",[36,32918,1069],{"class":163},[36,32920,1060],{"class":109},[36,32922,627],{"class":98},[36,32924,32925],{"class":38,"line":17208},[36,32926,247],{"emptyLinePlaceholder":246},[36,32928,32929],{"class":38,"line":17222},[36,32930,32931],{"class":42},"        # 初始化参数\n",[36,32933,32934],{"class":38,"line":17235},[36,32935,32936],{"class":42},"        # 训练集损失函数\n",[36,32938,32939,32942,32944],{"class":38,"line":17240},[36,32940,32941],{"class":98},"        train_loss",[36,32943,176],{"class":163},[36,32945,32775],{"class":109},[36,32947,32948],{"class":38,"line":17254},[36,32949,32950],{"class":42},"        # 训练集准确度\n",[36,32952,32953,32956,32958],{"class":38,"line":17259},[36,32954,32955],{"class":98},"        train_corrects",[36,32957,176],{"class":163},[36,32959,3536],{"class":109},[36,32961,32962],{"class":38,"line":17265},[36,32963,32964],{"class":42},"        # 验证集损失函数\n",[36,32966,32967,32970,32972],{"class":38,"line":17270},[36,32968,32969],{"class":98},"        val_loss",[36,32971,176],{"class":163},[36,32973,32775],{"class":109},[36,32975,32976],{"class":38,"line":17284},[36,32977,32978],{"class":42},"        # 验证集准确度\n",[36,32980,32981,32984,32986],{"class":38,"line":17289},[36,32982,32983],{"class":98},"        val_corrects",[36,32985,176],{"class":163},[36,32987,3536],{"class":109},[36,32989,32990],{"class":38,"line":17294},[36,32991,32992],{"class":42},"        # 训练集样本数量\n",[36,32994,32995,32998,33000],{"class":38,"line":17308},[36,32996,32997],{"class":98},"        train_num",[36,32999,176],{"class":163},[36,33001,3536],{"class":109},[36,33003,33004],{"class":38,"line":17320},[36,33005,33006],{"class":42},"        # 验证集样本数量\n",[36,33008,33009,33012,33014],{"class":38,"line":17325},[36,33010,33011],{"class":98},"        val_num",[36,33013,176],{"class":163},[36,33015,3536],{"class":109},[36,33017,33018],{"class":38,"line":17338},[36,33019,33020],{"class":42},"        # 将数据放到设备,并开始训练\n",[36,33022,33023,33025,33027,33029,33031],{"class":38,"line":17343},[36,33024,3854],{"class":163},[36,33026,32034],{"class":98},[36,33028,26480],{"class":163},[36,33030,32039],{"class":109},[36,33032,33033],{"class":98},"(train_dataloader):\n",[36,33035,33036],{"class":38,"line":17348},[36,33037,33038],{"class":42},"            # 将特征放入到训练设备\n",[36,33040,33041,33044,33046],{"class":38,"line":17353},[36,33042,33043],{"class":98},"            b_x",[36,33045,176],{"class":163},[36,33047,33048],{"class":98},"b_x.to(device)\n",[36,33050,33051],{"class":38,"line":17366},[36,33052,33053],{"class":42},"            # 将标签放入到训练设备当中\n",[36,33055,33056,33059,33061],{"class":38,"line":17371},[36,33057,33058],{"class":98},"            b_y",[36,33060,176],{"class":163},[36,33062,33063],{"class":98},"b_y.to(device)\n",[36,33065,33067],{"class":38,"line":33066},98,[36,33068,33069],{"class":42},"            # 设置模型为训练模式\n",[36,33071,33073],{"class":38,"line":33072},99,[36,33074,33075],{"class":98},"            model.train()\n",[36,33077,33079],{"class":38,"line":33078},100,[36,33080,33081],{"class":42},"            # 将数据放到模型当中,开始前向传播\n",[36,33083,33085],{"class":38,"line":33084},101,[36,33086,33087],{"class":42},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[36,33089,33091,33094,33096],{"class":38,"line":33090},102,[36,33092,33093],{"class":98},"            output",[36,33095,176],{"class":163},[36,33097,33098],{"class":98},"model(b_x)\n",[36,33100,33102],{"class":38,"line":33101},103,[36,33103,33104],{"class":42},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[36,33106,33108,33111,33113,33116,33119,33121,33123],{"class":38,"line":33107},104,[36,33109,33110],{"class":98},"            pre_lab",[36,33112,176],{"class":163},[36,33114,33115],{"class":98},"torch.argmax(output,",[36,33117,33118],{"class":5667},"dim",[36,33120,176],{"class":163},[36,33122,833],{"class":109},[36,33124,627],{"class":98},[36,33126,33128],{"class":38,"line":33127},105,[36,33129,33130],{"class":42},"            # 计算每一个batch的损失函数\n",[36,33132,33134,33137,33139],{"class":38,"line":33133},106,[36,33135,33136],{"class":98},"            loss",[36,33138,176],{"class":163},[36,33140,33141],{"class":98},"criterion(output,b_y)\n",[36,33143,33145],{"class":38,"line":33144},107,[36,33146,33147],{"class":42},"            # 将梯度初始化为0\n",[36,33149,33151],{"class":38,"line":33150},108,[36,33152,33153],{"class":98},"            optimizer.zero_grad()\n",[36,33155,33157],{"class":38,"line":33156},109,[36,33158,33159],{"class":42},"            # 梯度置为0后再进行反向传播\n",[36,33161,33163],{"class":38,"line":33162},110,[36,33164,33165],{"class":98},"            loss.backward()\n",[36,33167,33169],{"class":38,"line":33168},111,[36,33170,33171],{"class":42},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[36,33173,33175],{"class":38,"line":33174},112,[36,33176,33177],{"class":98},"            optimizer.step()\n",[36,33179,33181],{"class":38,"line":33180},113,[36,33182,33183],{"class":42},"            # loss.item()指的是batch的平均损失\n",[36,33185,33187,33190,33192,33195,33197,33200,33202],{"class":38,"line":33186},114,[36,33188,33189],{"class":98},"            train_loss",[36,33191,9918],{"class":163},[36,33193,33194],{"class":98},"loss.item()",[36,33196,1069],{"class":163},[36,33198,33199],{"class":98},"b_x.size(",[36,33201,807],{"class":109},[36,33203,627],{"class":98},[36,33205,33207],{"class":38,"line":33206},115,[36,33208,33209],{"class":42},"            # 计算每个批次中正确预测的数量\n",[36,33211,33213,33216,33218,33221,33223],{"class":38,"line":33212},116,[36,33214,33215],{"class":98},"            train_corrects",[36,33217,9918],{"class":163},[36,33219,33220],{"class":98},"torch.sum(pre_lab",[36,33222,3400],{"class":163},[36,33224,33225],{"class":98},"b_y.data)\n",[36,33227,33229],{"class":38,"line":33228},117,[36,33230,33231],{"class":42},"            # 计算目前为止一共处理了多少样本\n",[36,33233,33235,33238,33240,33242,33244],{"class":38,"line":33234},118,[36,33236,33237],{"class":98},"            train_num",[36,33239,9918],{"class":163},[36,33241,33199],{"class":98},[36,33243,807],{"class":109},[36,33245,627],{"class":98},[36,33247,33249],{"class":38,"line":33248},119,[36,33250,33251],{"class":42},"        # 验证数据\n",[36,33253,33255,33257,33260,33262,33264],{"class":38,"line":33254},120,[36,33256,3854],{"class":163},[36,33258,33259],{"class":98}," step ,(b_x,b_y) ",[36,33261,26480],{"class":163},[36,33263,32039],{"class":109},[36,33265,33266],{"class":98},"(val_dataloader):\n",[36,33268,33270],{"class":38,"line":33269},121,[36,33271,33272],{"class":42},"            # 将特征放到验证设备当中\n",[36,33274,33276,33278,33280],{"class":38,"line":33275},122,[36,33277,33043],{"class":98},[36,33279,176],{"class":163},[36,33281,33048],{"class":98},[36,33283,33285],{"class":38,"line":33284},123,[36,33286,33287],{"class":42},"            # 将标签放到放到训练设备当中\n",[36,33289,33291,33293,33295],{"class":38,"line":33290},124,[36,33292,33058],{"class":98},[36,33294,176],{"class":163},[36,33296,33063],{"class":98},[36,33298,33300],{"class":38,"line":33299},125,[36,33301,33302],{"class":42},"            # 开启验证模式，设置模型为评估模式\n",[36,33304,33306],{"class":38,"line":33305},126,[36,33307,33308],{"class":98},"            model.eval()\n",[36,33310,33312,33315],{"class":38,"line":33311},127,[36,33313,33314],{"class":163},"            with",[36,33316,33317],{"class":98}," torch.no_grad():\n",[36,33319,33321],{"class":38,"line":33320},128,[36,33322,33323],{"class":42},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[36,33325,33327,33330,33332],{"class":38,"line":33326},129,[36,33328,33329],{"class":98},"                output ",[36,33331,176],{"class":163},[36,33333,33334],{"class":98}," model(b_x)\n",[36,33336,33338],{"class":38,"line":33337},130,[36,33339,33340],{"class":42},"                # 查找每一行中最大值对应的下标\n",[36,33342,33344,33347,33349,33352,33354,33356,33358],{"class":38,"line":33343},131,[36,33345,33346],{"class":98},"                pre_lab ",[36,33348,176],{"class":163},[36,33350,33351],{"class":98}," torch.argmax(output, ",[36,33353,33118],{"class":5667},[36,33355,176],{"class":163},[36,33357,833],{"class":109},[36,33359,627],{"class":98},[36,33361,33363],{"class":38,"line":33362},132,[36,33364,33365],{"class":42},"                # 计算验证集上的当前 batch 损失\n",[36,33367,33369,33372,33374],{"class":38,"line":33368},133,[36,33370,33371],{"class":98},"                val_batch_loss ",[36,33373,176],{"class":163},[36,33375,33376],{"class":98}," criterion(output, b_y)\n",[36,33378,33380],{"class":38,"line":33379},134,[36,33381,33382],{"class":42},"                # 对损失函数进行累加（按样本数加权）\n",[36,33384,33386,33389,33391,33394,33396,33399,33401],{"class":38,"line":33385},135,[36,33387,33388],{"class":98},"                val_loss ",[36,33390,9918],{"class":163},[36,33392,33393],{"class":98}," val_batch_loss.item() ",[36,33395,1069],{"class":163},[36,33397,33398],{"class":98}," b_x.size(",[36,33400,807],{"class":109},[36,33402,627],{"class":98},[36,33404,33406,33409,33411,33414,33416],{"class":38,"line":33405},136,[36,33407,33408],{"class":98},"                val_corrects ",[36,33410,9918],{"class":163},[36,33412,33413],{"class":98}," torch.sum(pre_lab ",[36,33415,3400],{"class":163},[36,33417,33418],{"class":98}," b_y.data)\n",[36,33420,33422],{"class":38,"line":33421},137,[36,33423,33424],{"class":42},"                # 当前用于验证的样本数量\n",[36,33426,33428,33431,33433,33435,33437],{"class":38,"line":33427},138,[36,33429,33430],{"class":98},"            val_num ",[36,33432,9918],{"class":163},[36,33434,33398],{"class":98},[36,33436,807],{"class":109},[36,33438,627],{"class":98},[36,33440,33442],{"class":38,"line":33441},139,[36,33443,33444],{"class":42},"        # 计算并保存每一次迭代的loss值和准确率\n",[36,33446,33448],{"class":38,"line":33447},140,[36,33449,33450],{"class":42},"        # 计算并保存训练集的loss值\n",[36,33452,33454,33457,33459],{"class":38,"line":33453},141,[36,33455,33456],{"class":98},"        train_loss_all.append(train_loss",[36,33458,1198],{"class":163},[36,33460,33461],{"class":98},"train_num)\n",[36,33463,33465],{"class":38,"line":33464},142,[36,33466,33467],{"class":42},"        # 取双精度\n",[36,33469,33471],{"class":38,"line":33470},143,[36,33472,33473],{"class":42},"        # 计算并保存训练集的准确率\n",[36,33475,33477,33480,33482],{"class":38,"line":33476},144,[36,33478,33479],{"class":98},"        train_acc_all.append(train_corrects.double().item()",[36,33481,1198],{"class":163},[36,33483,33461],{"class":98},[36,33485,33487],{"class":38,"line":33486},145,[36,33488,33489],{"class":42},"        # 计算并保存验证集的loss值\n",[36,33491,33493,33496,33498],{"class":38,"line":33492},146,[36,33494,33495],{"class":98},"        val_loss_all.append(val_loss",[36,33497,1198],{"class":163},[36,33499,33500],{"class":98},"val_num)\n",[36,33502,33504],{"class":38,"line":33503},147,[36,33505,33506],{"class":42},"        # 计算并保存验证集的准确率\n",[36,33508,33510,33513,33515],{"class":38,"line":33509},148,[36,33511,33512],{"class":98},"        val_acc_all.append(val_corrects.double().item()",[36,33514,1198],{"class":163},[36,33516,33500],{"class":98},[36,33518,33520],{"class":38,"line":33519},149,[36,33521,247],{"emptyLinePlaceholder":246},[36,33523,33525],{"class":38,"line":33524},150,[36,33526,33527],{"class":42},"        # 打印训练一轮的loss值和准确率\n",[36,33529,33531,33533,33535,33537,33539,33542,33544,33547,33549,33552,33554,33556,33558,33560,33563,33565,33567,33570,33572,33574],{"class":38,"line":33530},151,[36,33532,32884],{"class":109},[36,33534,621],{"class":98},[36,33536,4043],{"class":59},[36,33538,32892],{"class":109},[36,33540,33541],{"class":59},"train loss:",[36,33543,1509],{"class":109},[36,33545,33546],{"class":163},":.4f",[36,33548,1558],{"class":109},[36,33550,33551],{"class":59}," train acc:",[36,33553,1509],{"class":109},[36,33555,33546],{"class":163},[36,33557,1558],{"class":109},[36,33559,4043],{"class":59},[36,33561,33562],{"class":98},".format(epoch,train_loss_all[",[36,33564,1146],{"class":163},[36,33566,833],{"class":109},[36,33568,33569],{"class":98},"],train_acc_all[",[36,33571,1146],{"class":163},[36,33573,833],{"class":109},[36,33575,33576],{"class":98},"]))\n",[36,33578,33580,33582,33584,33586,33588,33591,33593,33595,33597,33600,33602,33604,33606,33608,33611,33613,33615,33618,33620,33622],{"class":38,"line":33579},152,[36,33581,32884],{"class":109},[36,33583,621],{"class":98},[36,33585,4043],{"class":59},[36,33587,32892],{"class":109},[36,33589,33590],{"class":59},"val loss:",[36,33592,1509],{"class":109},[36,33594,33546],{"class":163},[36,33596,1558],{"class":109},[36,33598,33599],{"class":59}," val acc:",[36,33601,1509],{"class":109},[36,33603,33546],{"class":163},[36,33605,1558],{"class":109},[36,33607,4043],{"class":59},[36,33609,33610],{"class":98},".format(epoch,val_loss_all[",[36,33612,1146],{"class":163},[36,33614,833],{"class":109},[36,33616,33617],{"class":98},"],val_acc_all[",[36,33619,1146],{"class":163},[36,33621,833],{"class":109},[36,33623,33576],{"class":98},[36,33625,33627],{"class":38,"line":33626},153,[36,33628,247],{"emptyLinePlaceholder":246},[36,33630,33632],{"class":38,"line":33631},154,[36,33633,33634],{"class":42},"        # 判断准确度--->保存最优模型\n",[36,33636,33638,33640,33643,33645,33647,33649,33651],{"class":38,"line":33637},155,[36,33639,2955],{"class":163},[36,33641,33642],{"class":98}," val_acc_all[",[36,33644,1146],{"class":163},[36,33646,833],{"class":109},[36,33648,1552],{"class":98},[36,33650,173],{"class":163},[36,33652,33653],{"class":98},"best_acc:\n",[36,33655,33657],{"class":38,"line":33656},156,[36,33658,33659],{"class":42},"            # 保存当前模型准确度\n",[36,33661,33663,33666,33668,33670,33673,33675,33677],{"class":38,"line":33662},157,[36,33664,33665],{"class":98},"            best_acc:",[36,33667,660],{"class":109},[36,33669,176],{"class":163},[36,33671,33672],{"class":98},"val_acc_all[",[36,33674,1146],{"class":163},[36,33676,833],{"class":109},[36,33678,33679],{"class":98},"]\n",[36,33681,33683],{"class":38,"line":33682},158,[36,33684,33685],{"class":42},"            # 保存当前的准确度\n",[36,33687,33689],{"class":38,"line":33688},159,[36,33690,33691],{"class":42},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[36,33693,33695,33698,33700],{"class":38,"line":33694},160,[36,33696,33697],{"class":98},"            best_model_wts",[36,33699,176],{"class":163},[36,33701,32747],{"class":98},[36,33703,33705],{"class":38,"line":33704},161,[36,33706,247],{"emptyLinePlaceholder":246},[36,33708,33710],{"class":38,"line":33709},162,[36,33711,33712],{"class":42},"        # 计算耗时\n",[36,33714,33716,33719,33721,33724,33726],{"class":38,"line":33715},163,[36,33717,33718],{"class":98},"        time_use",[36,33720,176],{"class":163},[36,33722,33723],{"class":98},"time.time()",[36,33725,1146],{"class":163},[36,33727,33728],{"class":98},"since\n",[36,33730,33732,33734,33736,33739,33741,33744,33746,33748,33750,33752,33754,33757,33760,33763,33765,33768,33770,33772],{"class":38,"line":33731},164,[36,33733,32884],{"class":109},[36,33735,621],{"class":98},[36,33737,33738],{"class":59},"'训练和验证耗费的时间",[36,33740,1509],{"class":109},[36,33742,33743],{"class":163},":.0f",[36,33745,1558],{"class":109},[36,33747,1158],{"class":59},[36,33749,1509],{"class":109},[36,33751,33743],{"class":163},[36,33753,1558],{"class":109},[36,33755,33756],{"class":59},"s'",[36,33758,33759],{"class":98},".format(time_use",[36,33761,33762],{"class":163},"\u002F\u002F",[36,33764,1520],{"class":109},[36,33766,33767],{"class":98},",time_use",[36,33769,942],{"class":163},[36,33771,1520],{"class":109},[36,33773,30930],{"class":98},[36,33775,33777],{"class":38,"line":33776},165,[36,33778,33779],{"class":42},"    # 选择最优参数\n",[36,33781,33783],{"class":38,"line":33782},166,[36,33784,33785],{"class":42},"    # 加载最高准确率下的模型参数\n",[36,33787,33789],{"class":38,"line":33788},167,[36,33790,33791],{"class":42},"    # model.load_state_dict(best_model_wts)\n",[36,33793,33795,33798,33801],{"class":38,"line":33794},168,[36,33796,33797],{"class":98},"    torch.save(model.state_dict(best_model_wts), ",[36,33799,33800],{"class":59},"'.\u002Fbest_model.pth'",[36,33802,627],{"class":98},[36,33804,33806],{"class":38,"line":33805},169,[36,33807,33808],{"class":42},"    # 或者写成\n",[36,33810,33812],{"class":38,"line":33811},170,[36,33813,33814],{"class":42},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[36,33816,33818],{"class":38,"line":33817},171,[36,33819,33820],{"class":42},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[36,33822,33824,33827,33829,33832,33835,33837],{"class":38,"line":33823},172,[36,33825,33826],{"class":98},"    train_process",[36,33828,176],{"class":163},[36,33830,33831],{"class":98},"pd.DataFrame(",[36,33833,33834],{"class":5667},"data",[36,33836,176],{"class":163},[36,33838,2025],{"class":98},[36,33840,33842,33845,33847,33850],{"class":38,"line":33841},173,[36,33843,33844],{"class":59},"        \"epoch\"",[36,33846,1472],{"class":98},[36,33848,33849],{"class":109},"range",[36,33851,33852],{"class":98},"(num_epochs),\n",[36,33854,33856,33859],{"class":38,"line":33855},174,[36,33857,33858],{"class":59},"        \"train_loss_all\"",[36,33860,33861],{"class":98},":train_loss_all,\n",[36,33863,33865,33868],{"class":38,"line":33864},175,[36,33866,33867],{"class":59},"        \"val_loss_all\"",[36,33869,33870],{"class":98},":val_loss_all,\n",[36,33872,33874,33877],{"class":38,"line":33873},176,[36,33875,33876],{"class":59},"        \"train_acc_all\"",[36,33878,33879],{"class":98},":train_acc_all,\n",[36,33881,33883,33886],{"class":38,"line":33882},177,[36,33884,33885],{"class":59},"        \"val_acc_all\"",[36,33887,33888],{"class":98},":val_acc_all\n",[36,33890,33892],{"class":38,"line":33891},178,[36,33893,33894],{"class":98},"    })\n",[36,33896,33898],{"class":38,"line":33897},179,[36,33899,33900],{"class":42},"    # 返回训练保存的过程\n",[36,33902,33904,33906],{"class":38,"line":33903},180,[36,33905,4541],{"class":163},[36,33907,33908],{"class":98}," train_process\n",[36,33910,33912],{"class":38,"line":33911},181,[36,33913,247],{"emptyLinePlaceholder":246},[36,33915,33917],{"class":38,"line":33916},182,[36,33918,33919],{"class":42},"# 将loss值和精度按照图片的形式展示出来\n",[36,33921,33923,33925,33928],{"class":38,"line":33922},183,[36,33924,32380],{"class":163},[36,33926,33927],{"class":55}," matplot_acc_loss",[36,33929,33930],{"class":98},"(train_process):\n",[36,33932,33934],{"class":38,"line":33933},184,[36,33935,33936],{"class":42},"    # 设置图的大小\n",[36,33938,33940,33943,33945,33947,33949,33951,33953,33955],{"class":38,"line":33939},185,[36,33941,33942],{"class":98},"    plt.figure(",[36,33944,32126],{"class":5667},[36,33946,176],{"class":163},[36,33948,621],{"class":98},[36,33950,1112],{"class":109},[36,33952,992],{"class":98},[36,33954,908],{"class":109},[36,33956,30930],{"class":98},[36,33958,33960],{"class":38,"line":33959},186,[36,33961,33962],{"class":42},"    # 设置图中有几张图\n",[36,33964,33966],{"class":38,"line":33965},187,[36,33967,33968],{"class":42},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[36,33970,33972],{"class":38,"line":33971},188,[36,33973,33974],{"class":42},"    # ①loss图\n",[36,33976,33978,33980,33982,33984,33986,33988,33990],{"class":38,"line":33977},189,[36,33979,32160],{"class":98},[36,33981,833],{"class":109},[36,33983,992],{"class":98},[36,33985,694],{"class":109},[36,33987,992],{"class":98},[36,33989,833],{"class":109},[36,33991,627],{"class":98},[36,33993,33995],{"class":38,"line":33994},190,[36,33996,33997],{"class":42},"    # 补充:\n",[36,33999,34001],{"class":38,"line":34000},191,[36,34002,34003],{"class":42},"    # plt.subplot(nrows, ncols, index)\n",[36,34005,34007],{"class":38,"line":34006},192,[36,34008,34009],{"class":42},"    # nrows：行数\n",[36,34011,34013],{"class":38,"line":34012},193,[36,34014,34015],{"class":42},"    # ncols：列数\n",[36,34017,34019],{"class":38,"line":34018},194,[36,34020,34021],{"class":42},"    # index：目前选中第几个子图（从1开始）\n",[36,34023,34025,34028,34031,34034,34037,34039,34042,34044,34047],{"class":38,"line":34024},195,[36,34026,34027],{"class":98},"    plt.plot(train_process[",[36,34029,34030],{"class":59},"\"epoch\"",[36,34032,34033],{"class":98},"],train_process.train_loss_all,",[36,34035,34036],{"class":59},"'ro-'",[36,34038,992],{"class":98},[36,34040,34041],{"class":5667},"label",[36,34043,176],{"class":163},[36,34045,34046],{"class":59},"'train loss'",[36,34048,627],{"class":98},[36,34050,34052,34054,34056,34059,34062,34064,34066,34068,34071],{"class":38,"line":34051},196,[36,34053,34027],{"class":98},[36,34055,34030],{"class":59},[36,34057,34058],{"class":98},"],train_process.val_loss_all,",[36,34060,34061],{"class":59},"'bs--'",[36,34063,992],{"class":98},[36,34065,34041],{"class":5667},[36,34067,176],{"class":163},[36,34069,34070],{"class":59},"'val loss'",[36,34072,627],{"class":98},[36,34074,34076],{"class":38,"line":34075},197,[36,34077,34078],{"class":42},"    # 添加一个图例\n",[36,34080,34082],{"class":38,"line":34081},198,[36,34083,34084],{"class":98},"    plt.legend()\n",[36,34086,34088],{"class":38,"line":34087},199,[36,34089,34090],{"class":42},"    # 给轴添加标签\n",[36,34092,34094,34097,34100],{"class":38,"line":34093},200,[36,34095,34096],{"class":98},"    plt.xlabel(",[36,34098,34099],{"class":59},"'epoch'",[36,34101,627],{"class":98},[36,34103,34105,34108,34111],{"class":38,"line":34104},201,[36,34106,34107],{"class":98},"    plt.ylabel(",[36,34109,34110],{"class":59},"'loss'",[36,34112,627],{"class":98},[36,34114,34116],{"class":38,"line":34115},202,[36,34117,34118],{"class":42},"    # ②准确度图\n",[36,34120,34122,34124,34126,34128,34130,34132,34134],{"class":38,"line":34121},203,[36,34123,32160],{"class":98},[36,34125,833],{"class":109},[36,34127,992],{"class":98},[36,34129,694],{"class":109},[36,34131,992],{"class":98},[36,34133,694],{"class":109},[36,34135,627],{"class":98},[36,34137,34139,34141,34143,34146,34148,34150,34152,34154,34157],{"class":38,"line":34138},204,[36,34140,34027],{"class":98},[36,34142,34030],{"class":59},[36,34144,34145],{"class":98},"],train_process.train_acc_all,",[36,34147,34036],{"class":59},[36,34149,992],{"class":98},[36,34151,34041],{"class":5667},[36,34153,176],{"class":163},[36,34155,34156],{"class":59},"'train acc'",[36,34158,627],{"class":98},[36,34160,34162,34164,34166,34169,34171,34173,34175,34177,34180],{"class":38,"line":34161},205,[36,34163,34027],{"class":98},[36,34165,34030],{"class":59},[36,34167,34168],{"class":98},"],train_process.val_acc_all,",[36,34170,34061],{"class":59},[36,34172,992],{"class":98},[36,34174,34041],{"class":5667},[36,34176,176],{"class":163},[36,34178,34179],{"class":59},"'val acc'",[36,34181,627],{"class":98},[36,34183,34185],{"class":38,"line":34184},206,[36,34186,34187],{"class":42},"    # 添加图例\n",[36,34189,34191],{"class":38,"line":34190},207,[36,34192,34084],{"class":98},[36,34194,34196,34198,34200],{"class":38,"line":34195},208,[36,34197,34096],{"class":98},[36,34199,34030],{"class":59},[36,34201,627],{"class":98},[36,34203,34205,34207,34210],{"class":38,"line":34204},209,[36,34206,34107],{"class":98},[36,34208,34209],{"class":59},"\"acc\"",[36,34211,627],{"class":98},[36,34213,34215],{"class":38,"line":34214},210,[36,34216,34217],{"class":98},"    plt.show()\n",[36,34219,34221],{"class":38,"line":34220},211,[36,34222,247],{"emptyLinePlaceholder":246},[36,34224,34226],{"class":38,"line":34225},212,[36,34227,34228],{"class":42},"# 正式开始训练:\n",[36,34230,34232,34234,34236,34238,34240],{"class":38,"line":34231},213,[36,34233,2010],{"class":163},[36,34235,31653],{"class":109},[36,34237,3400],{"class":163},[36,34239,31658],{"class":59},[36,34241,4190],{"class":98},[36,34243,34245],{"class":38,"line":34244},214,[36,34246,34247],{"class":42},"    # 将模型实例化\n",[36,34249,34251,34254,34256],{"class":38,"line":34250},215,[36,34252,34253],{"class":98},"    LeNet",[36,34255,176],{"class":163},[36,34257,34258],{"class":98},"LeNet()\n",[36,34260,34262,34265,34267],{"class":38,"line":34261},216,[36,34263,34264],{"class":98},"    train_dataloader,val_dataloader",[36,34266,176],{"class":163},[36,34268,34269],{"class":98},"train_val_data_process()\n",[36,34271,34273,34275,34277,34280,34283,34285,34287],{"class":38,"line":34272},217,[36,34274,33826],{"class":98},[36,34276,176],{"class":163},[36,34278,34279],{"class":98},"train_model_process(LeNet,train_dataloader,val_dataloader,",[36,34281,34282],{"class":5667},"num_epochs",[36,34284,176],{"class":163},[36,34286,1313],{"class":109},[36,34288,627],{"class":98},[36,34290,34292],{"class":38,"line":34291},218,[36,34293,34294],{"class":98},"    matplot_acc_loss(train_process)\n",[14,34296,34297],{},"画图的补充点学习：",[14,34299,34300],{},[1941,34301],{"alt":31,"src":34302},"\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",[571,34304,34305],{"start":52},[574,34306,34307],{},"测试",[26,34309,34311],{"className":30811,"code":34310,"language":30813,"meta":31,"style":31},"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",[33,34312,34313,34319,34329,34341,34351,34356,34366,34376,34380,34385,34394,34411,34423,34440,34451,34467,34472,34483,34494,34505,34512,34516,34521,34531,34536,34553,34561,34565,34570,34579,34588,34592,34597,34602,34607,34614,34619,34631,34641,34651,34656,34660,34665,34674,34679,34695,34700,34705,34710,34724,34729,34743,34747,34752,34767,34772,34784,34788,34793,34805,34810,34818,34823,34828,34838,34843,34852,34857,34862,34866,34871,34876,34892,34900,34905,34910,34969,34975,34980,34991,34999,35007,35011,35016,35020,35025,35033,35038,35054,35059,35069,35079],{"__ignoreMap":31},[36,34314,34315,34317],{"class":38,"line":39},[36,34316,30825],{"class":163},[36,34318,30828],{"class":98},[36,34320,34321,34323,34325,34327],{"class":38,"line":46},[36,34322,30825],{"class":163},[36,34324,31848],{"class":98},[36,34326,31816],{"class":163},[36,34328,31853],{"class":98},[36,34330,34331,34333,34336,34338],{"class":38,"line":52},[36,34332,31170],{"class":163},[36,34334,34335],{"class":98}," jupyter_client.consoleapp ",[36,34337,30825],{"class":163},[36,34339,34340],{"class":98}," classes\n",[36,34342,34343,34345,34347,34349],{"class":38,"line":66},[36,34344,31170],{"class":163},[36,34346,31831],{"class":98},[36,34348,30825],{"class":163},[36,34350,31836],{"class":98},[36,34352,34353],{"class":38,"line":72},[36,34354,34355],{"class":42},"# 导入数据集\n",[36,34357,34358,34360,34362,34364],{"class":38,"line":82},[36,34359,31170],{"class":163},[36,34361,31801],{"class":98},[36,34363,30825],{"class":163},[36,34365,31806],{"class":98},[36,34367,34368,34370,34372,34374],{"class":38,"line":88},[36,34369,31170],{"class":163},[36,34371,32347],{"class":98},[36,34373,30825],{"class":163},[36,34375,32352],{"class":98},[36,34377,34378],{"class":38,"line":113},[36,34379,247],{"emptyLinePlaceholder":246},[36,34381,34382],{"class":38,"line":119},[36,34383,34384],{"class":42},"# 测试数据处理\n",[36,34386,34387,34389,34392],{"class":38,"line":131},[36,34388,32380],{"class":163},[36,34390,34391],{"class":55}," test_data_process",[36,34393,32386],{"class":98},[36,34395,34396,34399,34401,34403,34405,34407,34409],{"class":38,"line":137},[36,34397,34398],{"class":98},"    test_data",[36,34400,176],{"class":163},[36,34402,31888],{"class":98},[36,34404,31891],{"class":5667},[36,34406,176],{"class":163},[36,34408,31896],{"class":59},[36,34410,31899],{"class":98},[36,34412,34413,34416,34418,34421],{"class":38,"line":147},[36,34414,34415],{"class":5667},"                           train",[36,34417,176],{"class":163},[36,34419,34420],{"class":109},"False",[36,34422,31899],{"class":98},[36,34424,34425,34428,34430,34432,34434,34436,34438],{"class":38,"line":153},[36,34426,34427],{"class":5667},"                           transform",[36,34429,176],{"class":163},[36,34431,31926],{"class":98},[36,34433,31929],{"class":5667},[36,34435,176],{"class":163},[36,34437,1514],{"class":109},[36,34439,31937],{"class":98},[36,34441,34442,34445,34447,34449],{"class":38,"line":191},[36,34443,34444],{"class":5667},"                           download",[36,34446,176],{"class":163},[36,34448,31909],{"class":109},[36,34450,627],{"class":98},[36,34452,34453,34456,34458,34460,34462,34464],{"class":38,"line":197},[36,34454,34455],{"class":98},"    test_dataloader",[36,34457,176],{"class":163},[36,34459,31967],{"class":98},[36,34461,31970],{"class":5667},[36,34463,176],{"class":163},[36,34465,34466],{"class":98},"test_data,\n",[36,34468,34469],{"class":38,"line":217},[36,34470,34471],{"class":42},"                                    # 这里是一张一张进行测试\n",[36,34473,34474,34477,34479,34481],{"class":38,"line":223},[36,34475,34476],{"class":5667},"                                    batch_size",[36,34478,176],{"class":163},[36,34480,833],{"class":109},[36,34482,31899],{"class":98},[36,34484,34485,34488,34490,34492],{"class":38,"line":243},[36,34486,34487],{"class":5667},"                                    shuffle",[36,34489,176],{"class":163},[36,34491,31909],{"class":109},[36,34493,31899],{"class":98},[36,34495,34496,34499,34501,34503],{"class":38,"line":250},[36,34497,34498],{"class":5667},"                                    num_workers",[36,34500,176],{"class":163},[36,34502,807],{"class":109},[36,34504,627],{"class":98},[36,34506,34507,34509],{"class":38,"line":256},[36,34508,4541],{"class":163},[36,34510,34511],{"class":98}," test_dataloader\n",[36,34513,34514],{"class":38,"line":273},[36,34515,247],{"emptyLinePlaceholder":246},[36,34517,34518],{"class":38,"line":278},[36,34519,34520],{"class":42},"# 定义模型测试函数\n",[36,34522,34523,34525,34528],{"class":38,"line":284},[36,34524,32380],{"class":163},[36,34526,34527],{"class":55}," test_model_process",[36,34529,34530],{"class":98},"(model,test_dataloader):\n",[36,34532,34533],{"class":38,"line":315},[36,34534,34535],{"class":42},"    # 将模型放到设备当中，先进行判断\n",[36,34537,34538,34540,34542,34544,34546,34548,34550],{"class":38,"line":320},[36,34539,31670],{"class":98},[36,34541,176],{"class":163},[36,34543,31677],{"class":59},[36,34545,2172],{"class":163},[36,34547,31682],{"class":98},[36,34549,2169],{"class":163},[36,34551,34552],{"class":59}," \"cpu\"\n",[36,34554,34555,34557,34559],{"class":38,"line":326},[36,34556,31722],{"class":98},[36,34558,176],{"class":163},[36,34560,32722],{"class":98},[36,34562,34563],{"class":38,"line":343},[36,34564,247],{"emptyLinePlaceholder":246},[36,34566,34567],{"class":38,"line":348},[36,34568,34569],{"class":42},"    # 设置初始化参数\n",[36,34571,34572,34575,34577],{"class":38,"line":354},[36,34573,34574],{"class":98},"    test_corrects",[36,34576,176],{"class":163},[36,34578,32775],{"class":109},[36,34580,34581,34584,34586],{"class":38,"line":370},[36,34582,34583],{"class":98},"    test_num",[36,34585,176],{"class":163},[36,34587,3536],{"class":109},[36,34589,34590],{"class":38,"line":375},[36,34591,247],{"emptyLinePlaceholder":246},[36,34593,34594],{"class":38,"line":381},[36,34595,34596],{"class":42},"    # 进行模型测试\n",[36,34598,34599],{"class":38,"line":399},[36,34600,34601],{"class":42},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[36,34603,34604],{"class":38,"line":404},[36,34605,34606],{"class":42},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[36,34608,34609,34612],{"class":38,"line":410},[36,34610,34611],{"class":163},"    with",[36,34613,33317],{"class":98},[36,34615,34616],{"class":38,"line":423},[36,34617,34618],{"class":42},"        # 从数据中进行\n",[36,34620,34621,34623,34626,34628],{"class":38,"line":436},[36,34622,3854],{"class":163},[36,34624,34625],{"class":98}," test_data_x,test_data_y ",[36,34627,26480],{"class":163},[36,34629,34630],{"class":98}," test_dataloader:\n",[36,34632,34633,34636,34638],{"class":38,"line":441},[36,34634,34635],{"class":98},"            test_data_x",[36,34637,176],{"class":163},[36,34639,34640],{"class":98},"test_data_x.to(device)\n",[36,34642,34643,34646,34648],{"class":38,"line":447},[36,34644,34645],{"class":98},"            test_data_y",[36,34647,176],{"class":163},[36,34649,34650],{"class":98},"test_data_y.to(device)\n",[36,34652,34653],{"class":38,"line":465},[36,34654,34655],{"class":42},"            # 设置为验证模式\n",[36,34657,34658],{"class":38,"line":470},[36,34659,33308],{"class":98},[36,34661,34662],{"class":38,"line":476},[36,34663,34664],{"class":42},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[36,34666,34667,34669,34671],{"class":38,"line":496},[36,34668,33093],{"class":98},[36,34670,176],{"class":163},[36,34672,34673],{"class":98},"model(test_data_x)\n",[36,34675,34676],{"class":38,"line":501},[36,34677,34678],{"class":42},"            # 查找每一行中最大值对应的下标\n",[36,34680,34681,34683,34685,34687,34689,34691,34693],{"class":38,"line":507},[36,34682,33110],{"class":98},[36,34684,176],{"class":163},[36,34686,33115],{"class":98},[36,34688,33118],{"class":5667},[36,34690,176],{"class":163},[36,34692,833],{"class":109},[36,34694,627],{"class":98},[36,34696,34697],{"class":38,"line":517},[36,34698,34699],{"class":42},"            # 计算正确率\n",[36,34701,34702],{"class":38,"line":522},[36,34703,34704],{"class":42},"            # .data表示是一个不带梯度信息的tensor\n",[36,34706,34707],{"class":38,"line":528},[36,34708,34709],{"class":42},"            # 如果预测正确，则准确度test_corrects加1\n",[36,34711,34712,34715,34717,34719,34721],{"class":38,"line":10203},[36,34713,34714],{"class":98},"            test_corrects",[36,34716,9918],{"class":163},[36,34718,33220],{"class":98},[36,34720,3400],{"class":163},[36,34722,34723],{"class":98},"test_data_y.data)\n",[36,34725,34726],{"class":38,"line":10227},[36,34727,34728],{"class":42},"            # 将所有的测试样本进行累计\n",[36,34730,34731,34734,34736,34739,34741],{"class":38,"line":10232},[36,34732,34733],{"class":98},"            test_num",[36,34735,9918],{"class":163},[36,34737,34738],{"class":98},"test_data_x.size(",[36,34740,807],{"class":109},[36,34742,627],{"class":98},[36,34744,34745],{"class":38,"line":10237},[36,34746,247],{"emptyLinePlaceholder":246},[36,34748,34749],{"class":38,"line":10242},[36,34750,34751],{"class":42},"        # 计算准确度\n",[36,34753,34754,34757,34759,34762,34764],{"class":38,"line":10251},[36,34755,34756],{"class":98},"        test_acc",[36,34758,176],{"class":163},[36,34760,34761],{"class":98},"test_corrects.double().item()",[36,34763,1198],{"class":163},[36,34765,34766],{"class":98},"test_num\n",[36,34768,34769],{"class":38,"line":10256},[36,34770,34771],{"class":42},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[36,34773,34774,34776,34778,34781],{"class":38,"line":10262},[36,34775,32884],{"class":109},[36,34777,621],{"class":98},[36,34779,34780],{"class":59},"\"测试的准确率：\"",[36,34782,34783],{"class":98},",test_acc)\n",[36,34785,34786],{"class":38,"line":10283},[36,34787,247],{"emptyLinePlaceholder":246},[36,34789,34790],{"class":38,"line":10289},[36,34791,34792],{"class":42},"# 实现模型的测试功能\n",[36,34794,34795,34797,34799,34801,34803],{"class":38,"line":10303},[36,34796,2010],{"class":163},[36,34798,31653],{"class":109},[36,34800,3400],{"class":163},[36,34802,31658],{"class":59},[36,34804,4190],{"class":98},[36,34806,34807],{"class":38,"line":10309},[36,34808,34809],{"class":42},"    # 加载模型\n",[36,34811,34812,34814,34816],{"class":38,"line":10336},[36,34813,31722],{"class":98},[36,34815,176],{"class":163},[36,34817,34258],{"class":98},[36,34819,34820],{"class":38,"line":10345},[36,34821,34822],{"class":42},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[36,34824,34825],{"class":38,"line":10351},[36,34826,34827],{"class":42},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[36,34829,34830,34833,34836],{"class":38,"line":10359},[36,34831,34832],{"class":98},"    model.load_state_dict(torch.load(",[36,34834,34835],{"class":59},"'best_model.pth'",[36,34837,30930],{"class":98},[36,34839,34840],{"class":38,"line":10364},[36,34841,34842],{"class":42},"    # 数据加载\n",[36,34844,34845,34847,34849],{"class":38,"line":17043},[36,34846,34455],{"class":98},[36,34848,176],{"class":163},[36,34850,34851],{"class":98},"test_data_process()\n",[36,34853,34854],{"class":38,"line":17049},[36,34855,34856],{"class":42},"    # 加载模型测试的函数\n",[36,34858,34859],{"class":38,"line":17072},[36,34860,34861],{"class":98},"    test_model_process(model,test_dataloader)\n",[36,34863,34864],{"class":38,"line":17078},[36,34865,247],{"emptyLinePlaceholder":246},[36,34867,34868],{"class":38,"line":17101},[36,34869,34870],{"class":42},"    # 验证集推理实现：\n",[36,34872,34873],{"class":38,"line":17115},[36,34874,34875],{"class":42},"    # 加载数据加载的更详细一些\n",[36,34877,34878,34880,34882,34884,34886,34888,34890],{"class":38,"line":17135},[36,34879,31670],{"class":98},[36,34881,176],{"class":163},[36,34883,31677],{"class":59},[36,34885,2172],{"class":163},[36,34887,31682],{"class":98},[36,34889,2169],{"class":163},[36,34891,34552],{"class":59},[36,34893,34894,34896,34898],{"class":38,"line":17141},[36,34895,31722],{"class":98},[36,34897,176],{"class":163},[36,34899,32722],{"class":98},[36,34901,34902],{"class":38,"line":17152},[36,34903,34904],{"class":42},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[36,34906,34907],{"class":38,"line":17175},[36,34908,34909],{"class":42},"    # 顺序不可改变\n",[36,34911,34912,34915,34917,34919,34922,34924,34927,34929,34932,34934,34937,34939,34942,34944,34947,34949,34952,34954,34957,34959,34962,34964,34967],{"class":38,"line":17197},[36,34913,34914],{"class":98},"    classes",[36,34916,176],{"class":163},[36,34918,1503],{"class":98},[36,34920,34921],{"class":59},"'T-shirt\u002Ftop'",[36,34923,992],{"class":98},[36,34925,34926],{"class":59},"'Trouser'",[36,34928,992],{"class":98},[36,34930,34931],{"class":59},"'Pullover'",[36,34933,992],{"class":98},[36,34935,34936],{"class":59},"'Dress'",[36,34938,992],{"class":98},[36,34940,34941],{"class":59},"'Coat'",[36,34943,992],{"class":98},[36,34945,34946],{"class":59},"'Sandal'",[36,34948,992],{"class":98},[36,34950,34951],{"class":59},"'Shirt'",[36,34953,992],{"class":98},[36,34955,34956],{"class":59},"'Sneaker'",[36,34958,992],{"class":98},[36,34960,34961],{"class":59},"'Bag'",[36,34963,992],{"class":98},[36,34965,34966],{"class":59},"'Ankle boot'",[36,34968,33679],{"class":98},[36,34970,34971,34973],{"class":38,"line":17202},[36,34972,34611],{"class":163},[36,34974,33317],{"class":98},[36,34976,34977],{"class":38,"line":17208},[36,34978,34979],{"class":42},"        # 将数据和标签都放到设备当中\n",[36,34981,34982,34984,34987,34989],{"class":38,"line":17222},[36,34983,3854],{"class":163},[36,34985,34986],{"class":98}," b_x,b_y ",[36,34988,26480],{"class":163},[36,34990,34630],{"class":98},[36,34992,34993,34995,34997],{"class":38,"line":17235},[36,34994,33043],{"class":98},[36,34996,176],{"class":163},[36,34998,33048],{"class":98},[36,35000,35001,35003,35005],{"class":38,"line":17240},[36,35002,33058],{"class":98},[36,35004,176],{"class":163},[36,35006,33063],{"class":98},[36,35008,35009],{"class":38,"line":17254},[36,35010,247],{"emptyLinePlaceholder":246},[36,35012,35013],{"class":38,"line":17259},[36,35014,35015],{"class":42},"            # 设置模型为验证模式\n",[36,35017,35018],{"class":38,"line":17265},[36,35019,33308],{"class":98},[36,35021,35022],{"class":38,"line":17270},[36,35023,35024],{"class":42},"            # 模型推理结果\n",[36,35026,35027,35029,35031],{"class":38,"line":17284},[36,35028,33093],{"class":98},[36,35030,176],{"class":163},[36,35032,33098],{"class":98},[36,35034,35035],{"class":38,"line":17289},[36,35036,35037],{"class":42},"            # 获取最大下标，最大下标就是类别号\n",[36,35039,35040,35042,35044,35046,35048,35050,35052],{"class":38,"line":17294},[36,35041,33110],{"class":98},[36,35043,176],{"class":163},[36,35045,33115],{"class":98},[36,35047,33118],{"class":5667},[36,35049,176],{"class":163},[36,35051,833],{"class":109},[36,35053,627],{"class":98},[36,35055,35056],{"class":38,"line":17308},[36,35057,35058],{"class":42},"            # 取出张量中的数值\n",[36,35060,35061,35064,35066],{"class":38,"line":17320},[36,35062,35063],{"class":98},"            result",[36,35065,176],{"class":163},[36,35067,35068],{"class":98},"pre_lab.item()\n",[36,35070,35071,35074,35076],{"class":38,"line":17325},[36,35072,35073],{"class":98},"            label",[36,35075,176],{"class":163},[36,35077,35078],{"class":98},"b_y.item()\n",[36,35080,35081,35084,35086,35089,35092,35095,35097,35100],{"class":38,"line":17338},[36,35082,35083],{"class":109},"            print",[36,35085,621],{"class":98},[36,35087,35088],{"class":59},"\"预测值：\"",[36,35090,35091],{"class":98},",classes[result],",[36,35093,35094],{"class":59},"\"------\"",[36,35096,992],{"class":98},[36,35098,35099],{"class":59},"\"真实值：\"",[36,35101,35102],{"class":98},",classes[label])\n",[14,35104,35105],{},"（2）AlexNet",[571,35107,35108],{},[574,35109,35110],{},"神经网络构建",[26,35112,35114],{"className":30811,"code":35113,"language":30813,"meta":31,"style":31},"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",[33,35115,35116,35122,35132,35142,35154,35158,35175,35183,35198,35210,35252,35279,35322,35348,35392,35435,35478,35505,35509,35519,35524,35552,35571,35590,35594,35599,35607,35622,35632,35646,35656,35671,35686,35701,35712,35716,35721,35731,35746,35751,35765,35780,35792,35797,35808,35813,35819,35824,35836,35856,35861,35870],{"__ignoreMap":31},[36,35117,35118,35120],{"class":38,"line":39},[36,35119,30825],{"class":163},[36,35121,30828],{"class":98},[36,35123,35124,35126,35128,35130],{"class":38,"line":46},[36,35125,31170],{"class":163},[36,35127,31173],{"class":98},[36,35129,30825],{"class":163},[36,35131,31178],{"class":98},[36,35133,35134,35136,35138,35140],{"class":38,"line":52},[36,35135,31170],{"class":163},[36,35137,31190],{"class":98},[36,35139,30825],{"class":163},[36,35141,31195],{"class":98},[36,35143,35144,35146,35149,35151],{"class":38,"line":66},[36,35145,30825],{"class":163},[36,35147,35148],{"class":98}," torch.nn.functional ",[36,35150,31816],{"class":163},[36,35152,35153],{"class":98}," F\n",[36,35155,35156],{"class":38,"line":72},[36,35157,247],{"emptyLinePlaceholder":246},[36,35159,35160,35162,35165,35167,35169,35171,35173],{"class":38,"line":82},[36,35161,15133],{"class":163},[36,35163,35164],{"class":55}," AlexNet",[36,35166,621],{"class":98},[36,35168,31211],{"class":55},[36,35170,1172],{"class":98},[36,35172,31216],{"class":55},[36,35174,31219],{"class":98},[36,35176,35177,35179,35181],{"class":38,"line":88},[36,35178,31234],{"class":163},[36,35180,31237],{"class":109},[36,35182,31240],{"class":98},[36,35184,35185,35187,35190,35192,35194,35196],{"class":38,"line":113},[36,35186,31250],{"class":109},[36,35188,35189],{"class":98},"(AlexNet,",[36,35191,31256],{"class":109},[36,35193,31259],{"class":98},[36,35195,31262],{"class":109},[36,35197,2435],{"class":98},[36,35199,35200,35202,35205,35207],{"class":38,"line":119},[36,35201,31278],{"class":109},[36,35203,35204],{"class":98},".ReLu",[36,35206,176],{"class":163},[36,35208,35209],{"class":98},"nn.ReLU()\n",[36,35211,35212,35214,35216,35218,35220,35222,35224,35226,35228,35230,35232,35234,35236,35238,35240,35242,35244,35246,35248,35250],{"class":38,"line":131},[36,35213,31278],{"class":109},[36,35215,31281],{"class":98},[36,35217,176],{"class":163},[36,35219,31286],{"class":98},[36,35221,31289],{"class":5667},[36,35223,176],{"class":163},[36,35225,833],{"class":109},[36,35227,992],{"class":98},[36,35229,31298],{"class":5667},[36,35231,176],{"class":163},[36,35233,825],{"class":109},[36,35235,992],{"class":98},[36,35237,31307],{"class":5667},[36,35239,176],{"class":163},[36,35241,1086],{"class":109},[36,35243,992],{"class":98},[36,35245,31362],{"class":5667},[36,35247,176],{"class":163},[36,35249,908],{"class":109},[36,35251,627],{"class":98},[36,35253,35254,35256,35258,35260,35263,35265,35267,35269,35271,35273,35275,35277],{"class":38,"line":137},[36,35255,31278],{"class":109},[36,35257,31346],{"class":98},[36,35259,176],{"class":163},[36,35261,35262],{"class":98},"nn.MaxPool2d(",[36,35264,31307],{"class":5667},[36,35266,176],{"class":163},[36,35268,689],{"class":109},[36,35270,992],{"class":98},[36,35272,31362],{"class":5667},[36,35274,176],{"class":163},[36,35276,694],{"class":109},[36,35278,627],{"class":98},[36,35280,35281,35283,35285,35287,35289,35291,35293,35295,35297,35299,35301,35304,35306,35308,35310,35312,35314,35316,35318,35320],{"class":38,"line":147},[36,35282,31278],{"class":109},[36,35284,31375],{"class":98},[36,35286,176],{"class":163},[36,35288,31286],{"class":98},[36,35290,31289],{"class":5667},[36,35292,176],{"class":163},[36,35294,825],{"class":109},[36,35296,992],{"class":98},[36,35298,31298],{"class":5667},[36,35300,176],{"class":163},[36,35302,35303],{"class":109},"256",[36,35305,992],{"class":98},[36,35307,31307],{"class":5667},[36,35309,176],{"class":163},[36,35311,933],{"class":109},[36,35313,992],{"class":98},[36,35315,31316],{"class":5667},[36,35317,176],{"class":163},[36,35319,694],{"class":109},[36,35321,627],{"class":98},[36,35323,35324,35326,35328,35330,35332,35334,35336,35338,35340,35342,35344,35346],{"class":38,"line":153},[36,35325,31278],{"class":109},[36,35327,31410],{"class":98},[36,35329,176],{"class":163},[36,35331,35262],{"class":98},[36,35333,31307],{"class":5667},[36,35335,176],{"class":163},[36,35337,689],{"class":109},[36,35339,992],{"class":98},[36,35341,31362],{"class":5667},[36,35343,176],{"class":163},[36,35345,694],{"class":109},[36,35347,627],{"class":98},[36,35349,35350,35352,35355,35357,35359,35361,35363,35365,35367,35369,35371,35374,35376,35378,35380,35382,35384,35386,35388,35390],{"class":38,"line":191},[36,35351,31278],{"class":109},[36,35353,35354],{"class":98},".c5",[36,35356,176],{"class":163},[36,35358,31286],{"class":98},[36,35360,31289],{"class":5667},[36,35362,176],{"class":163},[36,35364,35303],{"class":109},[36,35366,992],{"class":98},[36,35368,31298],{"class":5667},[36,35370,176],{"class":163},[36,35372,35373],{"class":109},"384",[36,35375,992],{"class":98},[36,35377,31307],{"class":5667},[36,35379,176],{"class":163},[36,35381,689],{"class":109},[36,35383,992],{"class":98},[36,35385,31316],{"class":5667},[36,35387,176],{"class":163},[36,35389,833],{"class":109},[36,35391,627],{"class":98},[36,35393,35394,35396,35399,35401,35403,35405,35407,35409,35411,35413,35415,35417,35419,35421,35423,35425,35427,35429,35431,35433],{"class":38,"line":197},[36,35395,31278],{"class":109},[36,35397,35398],{"class":98},".c6",[36,35400,176],{"class":163},[36,35402,31286],{"class":98},[36,35404,31289],{"class":5667},[36,35406,176],{"class":163},[36,35408,35373],{"class":109},[36,35410,992],{"class":98},[36,35412,31298],{"class":5667},[36,35414,176],{"class":163},[36,35416,35373],{"class":109},[36,35418,992],{"class":98},[36,35420,31307],{"class":5667},[36,35422,176],{"class":163},[36,35424,689],{"class":109},[36,35426,992],{"class":98},[36,35428,31316],{"class":5667},[36,35430,176],{"class":163},[36,35432,833],{"class":109},[36,35434,627],{"class":98},[36,35436,35437,35439,35442,35444,35446,35448,35450,35452,35454,35456,35458,35460,35462,35464,35466,35468,35470,35472,35474,35476],{"class":38,"line":217},[36,35438,31278],{"class":109},[36,35440,35441],{"class":98},".c7",[36,35443,176],{"class":163},[36,35445,31286],{"class":98},[36,35447,31289],{"class":5667},[36,35449,176],{"class":163},[36,35451,35373],{"class":109},[36,35453,992],{"class":98},[36,35455,31298],{"class":5667},[36,35457,176],{"class":163},[36,35459,35303],{"class":109},[36,35461,992],{"class":98},[36,35463,31307],{"class":5667},[36,35465,176],{"class":163},[36,35467,689],{"class":109},[36,35469,992],{"class":98},[36,35471,31316],{"class":5667},[36,35473,176],{"class":163},[36,35475,833],{"class":109},[36,35477,627],{"class":98},[36,35479,35480,35482,35485,35487,35489,35491,35493,35495,35497,35499,35501,35503],{"class":38,"line":223},[36,35481,31278],{"class":109},[36,35483,35484],{"class":98},".s8",[36,35486,176],{"class":163},[36,35488,35262],{"class":98},[36,35490,31307],{"class":5667},[36,35492,176],{"class":163},[36,35494,689],{"class":109},[36,35496,992],{"class":98},[36,35498,31362],{"class":5667},[36,35500,176],{"class":163},[36,35502,694],{"class":109},[36,35504,627],{"class":98},[36,35506,35507],{"class":38,"line":243},[36,35508,31435],{"class":42},[36,35510,35511,35513,35515,35517],{"class":38,"line":250},[36,35512,31278],{"class":109},[36,35514,31442],{"class":98},[36,35516,176],{"class":163},[36,35518,31447],{"class":98},[36,35520,35521],{"class":38,"line":256},[36,35522,35523],{"class":42},"       # 定义全连接层\n",[36,35525,35526,35528,35531,35533,35535,35537,35539,35541,35543,35545,35547,35550],{"class":38,"line":273},[36,35527,31278],{"class":109},[36,35529,35530],{"class":98},".f1",[36,35532,176],{"class":163},[36,35534,31464],{"class":98},[36,35536,958],{"class":109},[36,35538,1069],{"class":163},[36,35540,958],{"class":109},[36,35542,1069],{"class":163},[36,35544,35303],{"class":109},[36,35546,992],{"class":98},[36,35548,35549],{"class":109},"4096",[36,35551,627],{"class":98},[36,35553,35554,35556,35559,35561,35563,35565,35567,35569],{"class":38,"line":278},[36,35555,31278],{"class":109},[36,35557,35558],{"class":98},".f2",[36,35560,176],{"class":163},[36,35562,31464],{"class":98},[36,35564,35549],{"class":109},[36,35566,992],{"class":98},[36,35568,35549],{"class":109},[36,35570,627],{"class":98},[36,35572,35573,35575,35578,35580,35582,35584,35586,35588],{"class":38,"line":284},[36,35574,31278],{"class":109},[36,35576,35577],{"class":98},".f3",[36,35579,176],{"class":163},[36,35581,31464],{"class":98},[36,35583,35549],{"class":109},[36,35585,992],{"class":98},[36,35587,1060],{"class":109},[36,35589,627],{"class":98},[36,35591,35592],{"class":38,"line":315},[36,35593,247],{"emptyLinePlaceholder":246},[36,35595,35596],{"class":38,"line":320},[36,35597,35598],{"class":42},"    # 定义前向传播\n",[36,35600,35601,35603,35605],{"class":38,"line":326},[36,35602,31234],{"class":163},[36,35604,31526],{"class":55},[36,35606,31529],{"class":98},[36,35608,35609,35611,35613,35615,35618,35620],{"class":38,"line":343},[36,35610,31534],{"class":98},[36,35612,176],{"class":163},[36,35614,31256],{"class":109},[36,35616,35617],{"class":98},".ReLu(",[36,35619,31256],{"class":109},[36,35621,31546],{"class":98},[36,35623,35624,35626,35628,35630],{"class":38,"line":348},[36,35625,31534],{"class":98},[36,35627,176],{"class":163},[36,35629,31256],{"class":109},[36,35631,31557],{"class":98},[36,35633,35634,35636,35638,35640,35642,35644],{"class":38,"line":354},[36,35635,31534],{"class":98},[36,35637,176],{"class":163},[36,35639,31256],{"class":109},[36,35641,35617],{"class":98},[36,35643,31256],{"class":109},[36,35645,31572],{"class":98},[36,35647,35648,35650,35652,35654],{"class":38,"line":370},[36,35649,31534],{"class":98},[36,35651,176],{"class":163},[36,35653,31256],{"class":109},[36,35655,31583],{"class":98},[36,35657,35658,35660,35662,35664,35666,35668],{"class":38,"line":375},[36,35659,31534],{"class":98},[36,35661,176],{"class":163},[36,35663,31256],{"class":109},[36,35665,35617],{"class":98},[36,35667,31256],{"class":109},[36,35669,35670],{"class":98},".c5(x))\n",[36,35672,35673,35675,35677,35679,35681,35683],{"class":38,"line":381},[36,35674,31534],{"class":98},[36,35676,176],{"class":163},[36,35678,31256],{"class":109},[36,35680,35617],{"class":98},[36,35682,31256],{"class":109},[36,35684,35685],{"class":98},".c6(x))\n",[36,35687,35688,35690,35692,35694,35696,35698],{"class":38,"line":399},[36,35689,31534],{"class":98},[36,35691,176],{"class":163},[36,35693,31256],{"class":109},[36,35695,35617],{"class":98},[36,35697,31256],{"class":109},[36,35699,35700],{"class":98},".c7(x))\n",[36,35702,35703,35705,35707,35709],{"class":38,"line":404},[36,35704,31534],{"class":98},[36,35706,176],{"class":163},[36,35708,31256],{"class":109},[36,35710,35711],{"class":98},".s8(x)\n",[36,35713,35714],{"class":38,"line":410},[36,35715,247],{"emptyLinePlaceholder":246},[36,35717,35718],{"class":38,"line":423},[36,35719,35720],{"class":42},"        # 展平加线性全连接层\n",[36,35722,35723,35725,35727,35729],{"class":38,"line":436},[36,35724,31534],{"class":98},[36,35726,176],{"class":163},[36,35728,31256],{"class":109},[36,35730,31594],{"class":98},[36,35732,35733,35735,35737,35739,35741,35743],{"class":38,"line":441},[36,35734,31534],{"class":98},[36,35736,176],{"class":163},[36,35738,31256],{"class":109},[36,35740,35617],{"class":98},[36,35742,31256],{"class":109},[36,35744,35745],{"class":98},".f1(x))\n",[36,35747,35748],{"class":38,"line":447},[36,35749,35750],{"class":42},"        # 还需要dropout对神经元随机进行失活\n",[36,35752,35753,35755,35757,35760,35763],{"class":38,"line":465},[36,35754,31534],{"class":98},[36,35756,176],{"class":163},[36,35758,35759],{"class":98},"F.dropout(x,",[36,35761,35762],{"class":109},"0.5",[36,35764,627],{"class":98},[36,35766,35767,35769,35771,35773,35775,35777],{"class":38,"line":470},[36,35768,31534],{"class":98},[36,35770,176],{"class":163},[36,35772,31256],{"class":109},[36,35774,35617],{"class":98},[36,35776,31256],{"class":109},[36,35778,35779],{"class":98},".f2(x))\n",[36,35781,35782,35784,35786,35788,35790],{"class":38,"line":476},[36,35783,31534],{"class":98},[36,35785,176],{"class":163},[36,35787,35759],{"class":98},[36,35789,35762],{"class":109},[36,35791,627],{"class":98},[36,35793,35794],{"class":38,"line":496},[36,35795,35796],{"class":42},"        # 直接输出\n",[36,35798,35799,35801,35803,35805],{"class":38,"line":501},[36,35800,31534],{"class":98},[36,35802,176],{"class":163},[36,35804,31256],{"class":109},[36,35806,35807],{"class":98},".f3(x)\n",[36,35809,35810],{"class":38,"line":507},[36,35811,35812],{"class":42},"        # 前向传播输出\n",[36,35814,35815,35817],{"class":38,"line":517},[36,35816,15191],{"class":163},[36,35818,31642],{"class":98},[36,35820,35821],{"class":38,"line":522},[36,35822,35823],{"class":42},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[36,35825,35826,35828,35830,35832,35834],{"class":38,"line":528},[36,35827,2010],{"class":163},[36,35829,31653],{"class":109},[36,35831,3400],{"class":163},[36,35833,31658],{"class":59},[36,35835,4190],{"class":98},[36,35837,35838,35840,35842,35844,35846,35848,35850,35852,35854],{"class":38,"line":10203},[36,35839,31670],{"class":98},[36,35841,176],{"class":163},[36,35843,30884],{"class":98},[36,35845,31677],{"class":59},[36,35847,2172],{"class":163},[36,35849,31682],{"class":98},[36,35851,2169],{"class":163},[36,35853,30909],{"class":59},[36,35855,627],{"class":98},[36,35857,35858],{"class":38,"line":10227},[36,35859,35860],{"class":42},"    # 模型实例化，然后将实例化的模型放到设备中\n",[36,35862,35863,35865,35867],{"class":38,"line":10232},[36,35864,31722],{"class":98},[36,35866,176],{"class":163},[36,35868,35869],{"class":98},"AlexNet().to(device)\n",[36,35871,35872,35874,35876,35878,35880,35883,35885,35887],{"class":38,"line":10237},[36,35873,31732],{"class":109},[36,35875,31735],{"class":98},[36,35877,833],{"class":109},[36,35879,992],{"class":98},[36,35881,35882],{"class":109},"227",[36,35884,992],{"class":98},[36,35886,35882],{"class":109},[36,35888,31748],{"class":98},[571,35890,35891],{"start":46},[574,35892,31761],{},[26,35894,35896],{"className":30811,"code":35895,"language":30813,"meta":31,"style":31},"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",[33,35897,35898,35904,35910,35920,35926,35936,35946,35956,35966,35976,35980,35991,36001,36005,36009,36013,36021,36033,36043,36059,36069,36101,36115,36125,36135,36139,36149,36163,36173,36183,36193,36199,36203,36207,36211,36215,36219,36227,36247,36251,36255,36259,36263,36267,36283,36287,36291,36299,36303,36307,36315,36319,36323,36327,36335,36339,36343,36347,36351,36359,36363,36371,36375,36383,36387,36395,36399,36407,36411,36415,36423,36427,36431,36435,36447,36471,36485,36489,36493,36497,36505,36509,36517,36521,36529,36533,36541,36545,36553,36557,36565,36569,36581,36585,36593,36597,36605,36609,36613,36617,36621,36629,36633,36649,36653,36661,36665,36669,36673,36677,36681,36685,36689,36705,36709,36721,36725,36737,36741,36753,36757,36765,36769,36777,36781,36785,36790,36796,36800,36809,36813,36830,36834,36843,36847,36865,36878,36883,36896,36900,36904,36912,36916,36920,36928,36932,36940,36944,36952,36956,36960,37002,37044,37048,37052,37068,37072,37088,37092,37096,37104,37108,37112,37124,37162,37167,37172,37181,37185,37199,37209,37215,37221,37227,37233,37237,37241,37247,37251,37255,37263,37267,37285,37289,37293,37297,37313,37317,37321,37325,37329,37333,37353,37373,37377,37381,37385,37393,37401,37405,37421,37441,37461,37465,37469,37477,37485,37489,37493,37497,37509,37513,37523,37531,37548],{"__ignoreMap":31},[36,35899,35900,35902],{"class":38,"line":39},[36,35901,30825],{"class":163},[36,35903,32255],{"class":98},[36,35905,35906,35908],{"class":38,"line":46},[36,35907,30825],{"class":163},[36,35909,32262],{"class":98},[36,35911,35912,35914,35916,35918],{"class":38,"line":52},[36,35913,30825],{"class":163},[36,35915,32273],{"class":98},[36,35917,31816],{"class":163},[36,35919,32278],{"class":98},[36,35921,35922,35924],{"class":38,"line":66},[36,35923,30825],{"class":163},[36,35925,30828],{"class":98},[36,35927,35928,35930,35932,35934],{"class":38,"line":72},[36,35929,31170],{"class":163},[36,35931,31848],{"class":98},[36,35933,30825],{"class":163},[36,35935,32295],{"class":98},[36,35937,35938,35940,35942,35944],{"class":38,"line":82},[36,35939,31170],{"class":163},[36,35941,31801],{"class":98},[36,35943,30825],{"class":163},[36,35945,31806],{"class":98},[36,35947,35948,35950,35952,35954],{"class":38,"line":88},[36,35949,31170],{"class":163},[36,35951,31831],{"class":98},[36,35953,30825],{"class":163},[36,35955,31836],{"class":98},[36,35957,35958,35960,35962,35964],{"class":38,"line":113},[36,35959,30825],{"class":163},[36,35961,31848],{"class":98},[36,35963,31816],{"class":163},[36,35965,31853],{"class":98},[36,35967,35968,35970,35972,35974],{"class":38,"line":119},[36,35969,30825],{"class":163},[36,35971,31865],{"class":98},[36,35973,31816],{"class":163},[36,35975,31870],{"class":98},[36,35977,35978],{"class":38,"line":131},[36,35979,32340],{"class":42},[36,35981,35982,35984,35986,35988],{"class":38,"line":137},[36,35983,31170],{"class":163},[36,35985,32347],{"class":98},[36,35987,30825],{"class":163},[36,35989,35990],{"class":98}," AlexNet\n",[36,35992,35993,35995,35997,35999],{"class":38,"line":147},[36,35994,31170],{"class":163},[36,35996,31173],{"class":98},[36,35998,30825],{"class":163},[36,36000,31178],{"class":98},[36,36002,36003],{"class":38,"line":153},[36,36004,247],{"emptyLinePlaceholder":246},[36,36006,36007],{"class":38,"line":191},[36,36008,247],{"emptyLinePlaceholder":246},[36,36010,36011],{"class":38,"line":197},[36,36012,32375],{"class":42},[36,36014,36015,36017,36019],{"class":38,"line":217},[36,36016,32380],{"class":163},[36,36018,32383],{"class":55},[36,36020,32386],{"class":98},[36,36022,36023,36025,36027,36029,36031],{"class":38,"line":223},[36,36024,32391],{"class":98},[36,36026,176],{"class":163},[36,36028,31888],{"class":98},[36,36030,31896],{"class":59},[36,36032,31899],{"class":98},[36,36034,36035,36037,36039,36041],{"class":38,"line":243},[36,36036,32404],{"class":5667},[36,36038,176],{"class":163},[36,36040,31909],{"class":109},[36,36042,31899],{"class":98},[36,36044,36045,36047,36049,36051,36053,36055,36057],{"class":38,"line":250},[36,36046,32415],{"class":5667},[36,36048,176],{"class":163},[36,36050,31926],{"class":98},[36,36052,31929],{"class":5667},[36,36054,176],{"class":163},[36,36056,35882],{"class":109},[36,36058,31937],{"class":98},[36,36060,36061,36063,36065,36067],{"class":38,"line":256},[36,36062,32432],{"class":5667},[36,36064,176],{"class":163},[36,36066,31909],{"class":109},[36,36068,627],{"class":98},[36,36070,36071,36073,36075,36077,36079,36081,36083,36085,36087,36089,36091,36093,36095,36097,36099],{"class":38,"line":273},[36,36072,32443],{"class":98},[36,36074,176],{"class":163},[36,36076,32448],{"class":98},[36,36078,32451],{"class":109},[36,36080,621],{"class":98},[36,36082,32456],{"class":109},[36,36084,1069],{"class":163},[36,36086,7809],{"class":109},[36,36088,32463],{"class":98},[36,36090,32451],{"class":109},[36,36092,621],{"class":98},[36,36094,32470],{"class":109},[36,36096,1069],{"class":163},[36,36098,7809],{"class":109},[36,36100,32477],{"class":98},[36,36102,36103,36105,36107,36109,36111,36113],{"class":38,"line":278},[36,36104,32482],{"class":98},[36,36106,176],{"class":163},[36,36108,32487],{"class":98},[36,36110,31970],{"class":5667},[36,36112,176],{"class":163},[36,36114,31975],{"class":98},[36,36116,36117,36119,36121,36123],{"class":38,"line":284},[36,36118,32498],{"class":5667},[36,36120,176],{"class":163},[36,36122,32503],{"class":109},[36,36124,31899],{"class":98},[36,36126,36127,36129,36131,36133],{"class":38,"line":315},[36,36128,32510],{"class":5667},[36,36130,176],{"class":163},[36,36132,31909],{"class":109},[36,36134,31899],{"class":98},[36,36136,36137],{"class":38,"line":320},[36,36138,32521],{"class":42},[36,36140,36141,36143,36145,36147],{"class":38,"line":326},[36,36142,32526],{"class":5667},[36,36144,176],{"class":163},[36,36146,1009],{"class":109},[36,36148,627],{"class":98},[36,36150,36151,36153,36155,36157,36159,36161],{"class":38,"line":343},[36,36152,32537],{"class":98},[36,36154,176],{"class":163},[36,36156,31967],{"class":98},[36,36158,31970],{"class":5667},[36,36160,176],{"class":163},[36,36162,32548],{"class":98},[36,36164,36165,36167,36169,36171],{"class":38,"line":348},[36,36166,32553],{"class":5667},[36,36168,176],{"class":163},[36,36170,32503],{"class":109},[36,36172,31899],{"class":98},[36,36174,36175,36177,36179,36181],{"class":38,"line":354},[36,36176,32564],{"class":5667},[36,36178,176],{"class":163},[36,36180,31909],{"class":109},[36,36182,31899],{"class":98},[36,36184,36185,36187,36189,36191],{"class":38,"line":370},[36,36186,32575],{"class":5667},[36,36188,176],{"class":163},[36,36190,1009],{"class":109},[36,36192,627],{"class":98},[36,36194,36195,36197],{"class":38,"line":375},[36,36196,4541],{"class":163},[36,36198,32588],{"class":98},[36,36200,36201],{"class":38,"line":381},[36,36202,247],{"emptyLinePlaceholder":246},[36,36204,36205],{"class":38,"line":399},[36,36206,32597],{"class":42},[36,36208,36209],{"class":38,"line":404},[36,36210,32602],{"class":42},[36,36212,36213],{"class":38,"line":410},[36,36214,247],{"emptyLinePlaceholder":246},[36,36216,36217],{"class":38,"line":423},[36,36218,32611],{"class":42},[36,36220,36221,36223,36225],{"class":38,"line":436},[36,36222,32380],{"class":163},[36,36224,32618],{"class":55},[36,36226,32621],{"class":98},[36,36228,36229,36231,36233,36235,36237,36239,36241,36243,36245],{"class":38,"line":441},[36,36230,31670],{"class":98},[36,36232,176],{"class":163},[36,36234,30884],{"class":98},[36,36236,31677],{"class":59},[36,36238,2172],{"class":163},[36,36240,31682],{"class":98},[36,36242,2169],{"class":163},[36,36244,32640],{"class":59},[36,36246,627],{"class":98},[36,36248,36249],{"class":38,"line":447},[36,36250,247],{"emptyLinePlaceholder":246},[36,36252,36253],{"class":38,"line":465},[36,36254,247],{"emptyLinePlaceholder":246},[36,36256,36257],{"class":38,"line":470},[36,36258,32655],{"class":42},[36,36260,36261],{"class":38,"line":476},[36,36262,32660],{"class":42},[36,36264,36265],{"class":38,"line":496},[36,36266,32665],{"class":42},[36,36268,36269,36271,36273,36275,36277,36279,36281],{"class":38,"line":501},[36,36270,32670],{"class":98},[36,36272,176],{"class":163},[36,36274,32675],{"class":98},[36,36276,32678],{"class":5667},[36,36278,176],{"class":163},[36,36280,32683],{"class":109},[36,36282,627],{"class":98},[36,36284,36285],{"class":38,"line":507},[36,36286,247],{"emptyLinePlaceholder":246},[36,36288,36289],{"class":38,"line":517},[36,36290,32694],{"class":42},[36,36292,36293,36295,36297],{"class":38,"line":522},[36,36294,32699],{"class":98},[36,36296,176],{"class":163},[36,36298,32704],{"class":98},[36,36300,36301],{"class":38,"line":528},[36,36302,247],{"emptyLinePlaceholder":246},[36,36304,36305],{"class":38,"line":10203},[36,36306,32713],{"class":42},[36,36308,36309,36311,36313],{"class":38,"line":10227},[36,36310,31722],{"class":98},[36,36312,176],{"class":163},[36,36314,32722],{"class":98},[36,36316,36317],{"class":38,"line":10232},[36,36318,32727],{"class":42},[36,36320,36321],{"class":38,"line":10237},[36,36322,32732],{"class":42},[36,36324,36325],{"class":38,"line":10242},[36,36326,32737],{"class":42},[36,36328,36329,36331,36333],{"class":38,"line":10251},[36,36330,32742],{"class":98},[36,36332,176],{"class":163},[36,36334,32747],{"class":98},[36,36336,36337],{"class":38,"line":10256},[36,36338,247],{"emptyLinePlaceholder":246},[36,36340,36341],{"class":38,"line":10262},[36,36342,247],{"emptyLinePlaceholder":246},[36,36344,36345],{"class":38,"line":10283},[36,36346,32760],{"class":42},[36,36348,36349],{"class":38,"line":10289},[36,36350,32765],{"class":42},[36,36352,36353,36355,36357],{"class":38,"line":10303},[36,36354,32770],{"class":98},[36,36356,176],{"class":163},[36,36358,32775],{"class":109},[36,36360,36361],{"class":38,"line":10309},[36,36362,32780],{"class":42},[36,36364,36365,36367,36369],{"class":38,"line":10336},[36,36366,32785],{"class":98},[36,36368,176],{"class":163},[36,36370,32790],{"class":98},[36,36372,36373],{"class":38,"line":10345},[36,36374,32795],{"class":42},[36,36376,36377,36379,36381],{"class":38,"line":10351},[36,36378,32800],{"class":98},[36,36380,176],{"class":163},[36,36382,32790],{"class":98},[36,36384,36385],{"class":38,"line":10359},[36,36386,32809],{"class":42},[36,36388,36389,36391,36393],{"class":38,"line":10364},[36,36390,32814],{"class":98},[36,36392,176],{"class":163},[36,36394,32790],{"class":98},[36,36396,36397],{"class":38,"line":17043},[36,36398,32823],{"class":42},[36,36400,36401,36403,36405],{"class":38,"line":17049},[36,36402,32828],{"class":98},[36,36404,176],{"class":163},[36,36406,32790],{"class":98},[36,36408,36409],{"class":38,"line":17072},[36,36410,247],{"emptyLinePlaceholder":246},[36,36412,36413],{"class":38,"line":17078},[36,36414,32841],{"class":42},[36,36416,36417,36419,36421],{"class":38,"line":17101},[36,36418,32846],{"class":98},[36,36420,176],{"class":163},[36,36422,32851],{"class":98},[36,36424,36425],{"class":38,"line":17115},[36,36426,247],{"emptyLinePlaceholder":246},[36,36428,36429],{"class":38,"line":17135},[36,36430,247],{"emptyLinePlaceholder":246},[36,36432,36433],{"class":38,"line":17141},[36,36434,32864],{"class":42},[36,36436,36437,36439,36441,36443,36445],{"class":38,"line":17152},[36,36438,3652],{"class":163},[36,36440,32871],{"class":98},[36,36442,26480],{"class":163},[36,36444,32876],{"class":109},[36,36446,32879],{"class":98},[36,36448,36449,36451,36453,36455,36457,36459,36461,36463,36465,36467,36469],{"class":38,"line":17175},[36,36450,32884],{"class":109},[36,36452,621],{"class":98},[36,36454,32889],{"class":59},[36,36456,32892],{"class":109},[36,36458,1198],{"class":59},[36,36460,32892],{"class":109},[36,36462,866],{"class":59},[36,36464,32901],{"class":98},[36,36466,1146],{"class":163},[36,36468,833],{"class":109},[36,36470,30930],{"class":98},[36,36472,36473,36475,36477,36479,36481,36483],{"class":38,"line":17197},[36,36474,32884],{"class":109},[36,36476,621],{"class":98},[36,36478,32916],{"class":59},[36,36480,1069],{"class":163},[36,36482,1060],{"class":109},[36,36484,627],{"class":98},[36,36486,36487],{"class":38,"line":17202},[36,36488,247],{"emptyLinePlaceholder":246},[36,36490,36491],{"class":38,"line":17208},[36,36492,32931],{"class":42},[36,36494,36495],{"class":38,"line":17222},[36,36496,32936],{"class":42},[36,36498,36499,36501,36503],{"class":38,"line":17235},[36,36500,32941],{"class":98},[36,36502,176],{"class":163},[36,36504,32775],{"class":109},[36,36506,36507],{"class":38,"line":17240},[36,36508,32950],{"class":42},[36,36510,36511,36513,36515],{"class":38,"line":17254},[36,36512,32955],{"class":98},[36,36514,176],{"class":163},[36,36516,3536],{"class":109},[36,36518,36519],{"class":38,"line":17259},[36,36520,32964],{"class":42},[36,36522,36523,36525,36527],{"class":38,"line":17265},[36,36524,32969],{"class":98},[36,36526,176],{"class":163},[36,36528,32775],{"class":109},[36,36530,36531],{"class":38,"line":17270},[36,36532,32978],{"class":42},[36,36534,36535,36537,36539],{"class":38,"line":17284},[36,36536,32983],{"class":98},[36,36538,176],{"class":163},[36,36540,3536],{"class":109},[36,36542,36543],{"class":38,"line":17289},[36,36544,32992],{"class":42},[36,36546,36547,36549,36551],{"class":38,"line":17294},[36,36548,32997],{"class":98},[36,36550,176],{"class":163},[36,36552,3536],{"class":109},[36,36554,36555],{"class":38,"line":17308},[36,36556,33006],{"class":42},[36,36558,36559,36561,36563],{"class":38,"line":17320},[36,36560,33011],{"class":98},[36,36562,176],{"class":163},[36,36564,3536],{"class":109},[36,36566,36567],{"class":38,"line":17325},[36,36568,33020],{"class":42},[36,36570,36571,36573,36575,36577,36579],{"class":38,"line":17338},[36,36572,3854],{"class":163},[36,36574,32034],{"class":98},[36,36576,26480],{"class":163},[36,36578,32039],{"class":109},[36,36580,33033],{"class":98},[36,36582,36583],{"class":38,"line":17343},[36,36584,33038],{"class":42},[36,36586,36587,36589,36591],{"class":38,"line":17348},[36,36588,33043],{"class":98},[36,36590,176],{"class":163},[36,36592,33048],{"class":98},[36,36594,36595],{"class":38,"line":17353},[36,36596,33053],{"class":42},[36,36598,36599,36601,36603],{"class":38,"line":17366},[36,36600,33058],{"class":98},[36,36602,176],{"class":163},[36,36604,33063],{"class":98},[36,36606,36607],{"class":38,"line":17371},[36,36608,33069],{"class":42},[36,36610,36611],{"class":38,"line":33066},[36,36612,33075],{"class":98},[36,36614,36615],{"class":38,"line":33072},[36,36616,33081],{"class":42},[36,36618,36619],{"class":38,"line":33078},[36,36620,33087],{"class":42},[36,36622,36623,36625,36627],{"class":38,"line":33084},[36,36624,33093],{"class":98},[36,36626,176],{"class":163},[36,36628,33098],{"class":98},[36,36630,36631],{"class":38,"line":33090},[36,36632,33104],{"class":42},[36,36634,36635,36637,36639,36641,36643,36645,36647],{"class":38,"line":33101},[36,36636,33110],{"class":98},[36,36638,176],{"class":163},[36,36640,33115],{"class":98},[36,36642,33118],{"class":5667},[36,36644,176],{"class":163},[36,36646,833],{"class":109},[36,36648,627],{"class":98},[36,36650,36651],{"class":38,"line":33107},[36,36652,33130],{"class":42},[36,36654,36655,36657,36659],{"class":38,"line":33127},[36,36656,33136],{"class":98},[36,36658,176],{"class":163},[36,36660,33141],{"class":98},[36,36662,36663],{"class":38,"line":33133},[36,36664,33147],{"class":42},[36,36666,36667],{"class":38,"line":33144},[36,36668,33153],{"class":98},[36,36670,36671],{"class":38,"line":33150},[36,36672,33159],{"class":42},[36,36674,36675],{"class":38,"line":33156},[36,36676,33165],{"class":98},[36,36678,36679],{"class":38,"line":33162},[36,36680,33171],{"class":42},[36,36682,36683],{"class":38,"line":33168},[36,36684,33177],{"class":98},[36,36686,36687],{"class":38,"line":33174},[36,36688,33183],{"class":42},[36,36690,36691,36693,36695,36697,36699,36701,36703],{"class":38,"line":33180},[36,36692,33189],{"class":98},[36,36694,9918],{"class":163},[36,36696,33194],{"class":98},[36,36698,1069],{"class":163},[36,36700,33199],{"class":98},[36,36702,807],{"class":109},[36,36704,627],{"class":98},[36,36706,36707],{"class":38,"line":33186},[36,36708,33209],{"class":42},[36,36710,36711,36713,36715,36717,36719],{"class":38,"line":33206},[36,36712,33215],{"class":98},[36,36714,9918],{"class":163},[36,36716,33220],{"class":98},[36,36718,3400],{"class":163},[36,36720,33225],{"class":98},[36,36722,36723],{"class":38,"line":33212},[36,36724,33231],{"class":42},[36,36726,36727,36729,36731,36733,36735],{"class":38,"line":33228},[36,36728,33237],{"class":98},[36,36730,9918],{"class":163},[36,36732,33199],{"class":98},[36,36734,807],{"class":109},[36,36736,627],{"class":98},[36,36738,36739],{"class":38,"line":33234},[36,36740,33251],{"class":42},[36,36742,36743,36745,36747,36749,36751],{"class":38,"line":33248},[36,36744,3854],{"class":163},[36,36746,33259],{"class":98},[36,36748,26480],{"class":163},[36,36750,32039],{"class":109},[36,36752,33266],{"class":98},[36,36754,36755],{"class":38,"line":33254},[36,36756,33272],{"class":42},[36,36758,36759,36761,36763],{"class":38,"line":33269},[36,36760,33043],{"class":98},[36,36762,176],{"class":163},[36,36764,33048],{"class":98},[36,36766,36767],{"class":38,"line":33275},[36,36768,33287],{"class":42},[36,36770,36771,36773,36775],{"class":38,"line":33284},[36,36772,33058],{"class":98},[36,36774,176],{"class":163},[36,36776,33063],{"class":98},[36,36778,36779],{"class":38,"line":33290},[36,36780,33302],{"class":42},[36,36782,36783],{"class":38,"line":33299},[36,36784,33308],{"class":98},[36,36786,36787],{"class":38,"line":33305},[36,36788,36789],{"class":42},"            # 验证时不计算梯度以节省内存\u002F计算\n",[36,36791,36792,36794],{"class":38,"line":33311},[36,36793,33314],{"class":163},[36,36795,33317],{"class":98},[36,36797,36798],{"class":38,"line":33320},[36,36799,33323],{"class":42},[36,36801,36802,36805,36807],{"class":38,"line":33326},[36,36803,36804],{"class":98},"                output",[36,36806,176],{"class":163},[36,36808,33098],{"class":98},[36,36810,36811],{"class":38,"line":33337},[36,36812,33340],{"class":42},[36,36814,36815,36818,36820,36822,36824,36826,36828],{"class":38,"line":33343},[36,36816,36817],{"class":98},"                pre_lab",[36,36819,176],{"class":163},[36,36821,33115],{"class":98},[36,36823,33118],{"class":5667},[36,36825,176],{"class":163},[36,36827,833],{"class":109},[36,36829,627],{"class":98},[36,36831,36832],{"class":38,"line":33362},[36,36833,33365],{"class":42},[36,36835,36836,36839,36841],{"class":38,"line":33368},[36,36837,36838],{"class":98},"                val_batch_loss",[36,36840,176],{"class":163},[36,36842,33141],{"class":98},[36,36844,36845],{"class":38,"line":33379},[36,36846,33382],{"class":42},[36,36848,36849,36852,36854,36857,36859,36861,36863],{"class":38,"line":33385},[36,36850,36851],{"class":98},"                val_loss",[36,36853,9918],{"class":163},[36,36855,36856],{"class":98},"val_batch_loss.item()",[36,36858,1069],{"class":163},[36,36860,33199],{"class":98},[36,36862,807],{"class":109},[36,36864,627],{"class":98},[36,36866,36867,36870,36872,36874,36876],{"class":38,"line":33405},[36,36868,36869],{"class":98},"                val_corrects",[36,36871,9918],{"class":163},[36,36873,33220],{"class":98},[36,36875,3400],{"class":163},[36,36877,33225],{"class":98},[36,36879,36880],{"class":38,"line":33421},[36,36881,36882],{"class":42},"            # 当前用于验证的样本数量\n",[36,36884,36885,36888,36890,36892,36894],{"class":38,"line":33427},[36,36886,36887],{"class":98},"            val_num",[36,36889,9918],{"class":163},[36,36891,33199],{"class":98},[36,36893,807],{"class":109},[36,36895,627],{"class":98},[36,36897,36898],{"class":38,"line":33441},[36,36899,33444],{"class":42},[36,36901,36902],{"class":38,"line":33447},[36,36903,33450],{"class":42},[36,36905,36906,36908,36910],{"class":38,"line":33453},[36,36907,33456],{"class":98},[36,36909,1198],{"class":163},[36,36911,33461],{"class":98},[36,36913,36914],{"class":38,"line":33464},[36,36915,33467],{"class":42},[36,36917,36918],{"class":38,"line":33470},[36,36919,33473],{"class":42},[36,36921,36922,36924,36926],{"class":38,"line":33476},[36,36923,33479],{"class":98},[36,36925,1198],{"class":163},[36,36927,33461],{"class":98},[36,36929,36930],{"class":38,"line":33486},[36,36931,33489],{"class":42},[36,36933,36934,36936,36938],{"class":38,"line":33492},[36,36935,33495],{"class":98},[36,36937,1198],{"class":163},[36,36939,33500],{"class":98},[36,36941,36942],{"class":38,"line":33503},[36,36943,33506],{"class":42},[36,36945,36946,36948,36950],{"class":38,"line":33509},[36,36947,33512],{"class":98},[36,36949,1198],{"class":163},[36,36951,33500],{"class":98},[36,36953,36954],{"class":38,"line":33519},[36,36955,247],{"emptyLinePlaceholder":246},[36,36957,36958],{"class":38,"line":33524},[36,36959,33527],{"class":42},[36,36961,36962,36964,36966,36968,36970,36972,36974,36976,36978,36980,36982,36984,36986,36988,36990,36992,36994,36996,36998,37000],{"class":38,"line":33530},[36,36963,32884],{"class":109},[36,36965,621],{"class":98},[36,36967,4043],{"class":59},[36,36969,32892],{"class":109},[36,36971,33541],{"class":59},[36,36973,1509],{"class":109},[36,36975,33546],{"class":163},[36,36977,1558],{"class":109},[36,36979,33551],{"class":59},[36,36981,1509],{"class":109},[36,36983,33546],{"class":163},[36,36985,1558],{"class":109},[36,36987,4043],{"class":59},[36,36989,33562],{"class":98},[36,36991,1146],{"class":163},[36,36993,833],{"class":109},[36,36995,33569],{"class":98},[36,36997,1146],{"class":163},[36,36999,833],{"class":109},[36,37001,33576],{"class":98},[36,37003,37004,37006,37008,37010,37012,37014,37016,37018,37020,37022,37024,37026,37028,37030,37032,37034,37036,37038,37040,37042],{"class":38,"line":33579},[36,37005,32884],{"class":109},[36,37007,621],{"class":98},[36,37009,4043],{"class":59},[36,37011,32892],{"class":109},[36,37013,33590],{"class":59},[36,37015,1509],{"class":109},[36,37017,33546],{"class":163},[36,37019,1558],{"class":109},[36,37021,33599],{"class":59},[36,37023,1509],{"class":109},[36,37025,33546],{"class":163},[36,37027,1558],{"class":109},[36,37029,4043],{"class":59},[36,37031,33610],{"class":98},[36,37033,1146],{"class":163},[36,37035,833],{"class":109},[36,37037,33617],{"class":98},[36,37039,1146],{"class":163},[36,37041,833],{"class":109},[36,37043,33576],{"class":98},[36,37045,37046],{"class":38,"line":33626},[36,37047,247],{"emptyLinePlaceholder":246},[36,37049,37050],{"class":38,"line":33631},[36,37051,33634],{"class":42},[36,37053,37054,37056,37058,37060,37062,37064,37066],{"class":38,"line":33637},[36,37055,2955],{"class":163},[36,37057,33642],{"class":98},[36,37059,1146],{"class":163},[36,37061,833],{"class":109},[36,37063,1552],{"class":98},[36,37065,173],{"class":163},[36,37067,33653],{"class":98},[36,37069,37070],{"class":38,"line":33656},[36,37071,33659],{"class":42},[36,37073,37074,37076,37078,37080,37082,37084,37086],{"class":38,"line":33662},[36,37075,33665],{"class":98},[36,37077,660],{"class":109},[36,37079,176],{"class":163},[36,37081,33672],{"class":98},[36,37083,1146],{"class":163},[36,37085,833],{"class":109},[36,37087,33679],{"class":98},[36,37089,37090],{"class":38,"line":33682},[36,37091,33685],{"class":42},[36,37093,37094],{"class":38,"line":33688},[36,37095,33691],{"class":42},[36,37097,37098,37100,37102],{"class":38,"line":33694},[36,37099,33697],{"class":98},[36,37101,176],{"class":163},[36,37103,32747],{"class":98},[36,37105,37106],{"class":38,"line":33704},[36,37107,247],{"emptyLinePlaceholder":246},[36,37109,37110],{"class":38,"line":33709},[36,37111,33712],{"class":42},[36,37113,37114,37116,37118,37120,37122],{"class":38,"line":33715},[36,37115,33718],{"class":98},[36,37117,176],{"class":163},[36,37119,33723],{"class":98},[36,37121,1146],{"class":163},[36,37123,33728],{"class":98},[36,37125,37126,37128,37130,37132,37134,37136,37138,37140,37142,37144,37146,37148,37150,37152,37154,37156,37158,37160],{"class":38,"line":33731},[36,37127,32884],{"class":109},[36,37129,621],{"class":98},[36,37131,33738],{"class":59},[36,37133,1509],{"class":109},[36,37135,33743],{"class":163},[36,37137,1558],{"class":109},[36,37139,1158],{"class":59},[36,37141,1509],{"class":109},[36,37143,33743],{"class":163},[36,37145,1558],{"class":109},[36,37147,33756],{"class":59},[36,37149,33759],{"class":98},[36,37151,33762],{"class":163},[36,37153,1520],{"class":109},[36,37155,33767],{"class":98},[36,37157,942],{"class":163},[36,37159,1520],{"class":109},[36,37161,30930],{"class":98},[36,37163,37164],{"class":38,"line":33776},[36,37165,37166],{"class":42},"    # 选择最优参数并保存\n",[36,37168,37169],{"class":38,"line":33782},[36,37170,37171],{"class":42},"    # 保存最佳模型权重字典\n",[36,37173,37174,37177,37179],{"class":38,"line":33788},[36,37175,37176],{"class":98},"    torch.save(best_model_wts,",[36,37178,33800],{"class":59},[36,37180,627],{"class":98},[36,37182,37183],{"class":38,"line":33794},[36,37184,33820],{"class":42},[36,37186,37187,37189,37191,37193,37195,37197],{"class":38,"line":33805},[36,37188,33826],{"class":98},[36,37190,176],{"class":163},[36,37192,33831],{"class":98},[36,37194,33834],{"class":5667},[36,37196,176],{"class":163},[36,37198,2025],{"class":98},[36,37200,37201,37203,37205,37207],{"class":38,"line":33811},[36,37202,33844],{"class":59},[36,37204,1472],{"class":98},[36,37206,33849],{"class":109},[36,37208,33852],{"class":98},[36,37210,37211,37213],{"class":38,"line":33817},[36,37212,33858],{"class":59},[36,37214,33861],{"class":98},[36,37216,37217,37219],{"class":38,"line":33823},[36,37218,33867],{"class":59},[36,37220,33870],{"class":98},[36,37222,37223,37225],{"class":38,"line":33841},[36,37224,33876],{"class":59},[36,37226,33879],{"class":98},[36,37228,37229,37231],{"class":38,"line":33855},[36,37230,33885],{"class":59},[36,37232,33888],{"class":98},[36,37234,37235],{"class":38,"line":33864},[36,37236,33894],{"class":98},[36,37238,37239],{"class":38,"line":33873},[36,37240,33900],{"class":42},[36,37242,37243,37245],{"class":38,"line":33882},[36,37244,4541],{"class":163},[36,37246,33908],{"class":98},[36,37248,37249],{"class":38,"line":33891},[36,37250,247],{"emptyLinePlaceholder":246},[36,37252,37253],{"class":38,"line":33897},[36,37254,33919],{"class":42},[36,37256,37257,37259,37261],{"class":38,"line":33903},[36,37258,32380],{"class":163},[36,37260,33927],{"class":55},[36,37262,33930],{"class":98},[36,37264,37265],{"class":38,"line":33911},[36,37266,33936],{"class":42},[36,37268,37269,37271,37273,37275,37277,37279,37281,37283],{"class":38,"line":33916},[36,37270,33942],{"class":98},[36,37272,32126],{"class":5667},[36,37274,176],{"class":163},[36,37276,621],{"class":98},[36,37278,1112],{"class":109},[36,37280,992],{"class":98},[36,37282,908],{"class":109},[36,37284,30930],{"class":98},[36,37286,37287],{"class":38,"line":33922},[36,37288,33962],{"class":42},[36,37290,37291],{"class":38,"line":33933},[36,37292,33968],{"class":42},[36,37294,37295],{"class":38,"line":33939},[36,37296,33974],{"class":42},[36,37298,37299,37301,37303,37305,37307,37309,37311],{"class":38,"line":33959},[36,37300,32160],{"class":98},[36,37302,833],{"class":109},[36,37304,992],{"class":98},[36,37306,694],{"class":109},[36,37308,992],{"class":98},[36,37310,833],{"class":109},[36,37312,627],{"class":98},[36,37314,37315],{"class":38,"line":33965},[36,37316,33997],{"class":42},[36,37318,37319],{"class":38,"line":33971},[36,37320,34003],{"class":42},[36,37322,37323],{"class":38,"line":33977},[36,37324,34009],{"class":42},[36,37326,37327],{"class":38,"line":33994},[36,37328,34015],{"class":42},[36,37330,37331],{"class":38,"line":34000},[36,37332,34021],{"class":42},[36,37334,37335,37337,37339,37341,37343,37345,37347,37349,37351],{"class":38,"line":34006},[36,37336,34027],{"class":98},[36,37338,34030],{"class":59},[36,37340,34033],{"class":98},[36,37342,34036],{"class":59},[36,37344,992],{"class":98},[36,37346,34041],{"class":5667},[36,37348,176],{"class":163},[36,37350,34046],{"class":59},[36,37352,627],{"class":98},[36,37354,37355,37357,37359,37361,37363,37365,37367,37369,37371],{"class":38,"line":34012},[36,37356,34027],{"class":98},[36,37358,34030],{"class":59},[36,37360,34058],{"class":98},[36,37362,34061],{"class":59},[36,37364,992],{"class":98},[36,37366,34041],{"class":5667},[36,37368,176],{"class":163},[36,37370,34070],{"class":59},[36,37372,627],{"class":98},[36,37374,37375],{"class":38,"line":34018},[36,37376,34078],{"class":42},[36,37378,37379],{"class":38,"line":34024},[36,37380,34084],{"class":98},[36,37382,37383],{"class":38,"line":34051},[36,37384,34090],{"class":42},[36,37386,37387,37389,37391],{"class":38,"line":34075},[36,37388,34096],{"class":98},[36,37390,34099],{"class":59},[36,37392,627],{"class":98},[36,37394,37395,37397,37399],{"class":38,"line":34081},[36,37396,34107],{"class":98},[36,37398,34110],{"class":59},[36,37400,627],{"class":98},[36,37402,37403],{"class":38,"line":34087},[36,37404,34118],{"class":42},[36,37406,37407,37409,37411,37413,37415,37417,37419],{"class":38,"line":34093},[36,37408,32160],{"class":98},[36,37410,833],{"class":109},[36,37412,992],{"class":98},[36,37414,694],{"class":109},[36,37416,992],{"class":98},[36,37418,694],{"class":109},[36,37420,627],{"class":98},[36,37422,37423,37425,37427,37429,37431,37433,37435,37437,37439],{"class":38,"line":34104},[36,37424,34027],{"class":98},[36,37426,34030],{"class":59},[36,37428,34145],{"class":98},[36,37430,34036],{"class":59},[36,37432,992],{"class":98},[36,37434,34041],{"class":5667},[36,37436,176],{"class":163},[36,37438,34156],{"class":59},[36,37440,627],{"class":98},[36,37442,37443,37445,37447,37449,37451,37453,37455,37457,37459],{"class":38,"line":34115},[36,37444,34027],{"class":98},[36,37446,34030],{"class":59},[36,37448,34168],{"class":98},[36,37450,34061],{"class":59},[36,37452,992],{"class":98},[36,37454,34041],{"class":5667},[36,37456,176],{"class":163},[36,37458,34179],{"class":59},[36,37460,627],{"class":98},[36,37462,37463],{"class":38,"line":34121},[36,37464,34187],{"class":42},[36,37466,37467],{"class":38,"line":34138},[36,37468,34084],{"class":98},[36,37470,37471,37473,37475],{"class":38,"line":34161},[36,37472,34096],{"class":98},[36,37474,34030],{"class":59},[36,37476,627],{"class":98},[36,37478,37479,37481,37483],{"class":38,"line":34184},[36,37480,34107],{"class":98},[36,37482,34209],{"class":59},[36,37484,627],{"class":98},[36,37486,37487],{"class":38,"line":34190},[36,37488,34217],{"class":98},[36,37490,37491],{"class":38,"line":34195},[36,37492,247],{"emptyLinePlaceholder":246},[36,37494,37495],{"class":38,"line":34204},[36,37496,34228],{"class":42},[36,37498,37499,37501,37503,37505,37507],{"class":38,"line":34214},[36,37500,2010],{"class":163},[36,37502,31653],{"class":109},[36,37504,3400],{"class":163},[36,37506,31658],{"class":59},[36,37508,4190],{"class":98},[36,37510,37511],{"class":38,"line":34220},[36,37512,34247],{"class":42},[36,37514,37515,37518,37520],{"class":38,"line":34225},[36,37516,37517],{"class":98},"    AlexNet",[36,37519,176],{"class":163},[36,37521,37522],{"class":98},"AlexNet()\n",[36,37524,37525,37527,37529],{"class":38,"line":34231},[36,37526,34264],{"class":98},[36,37528,176],{"class":163},[36,37530,34269],{"class":98},[36,37532,37533,37535,37537,37540,37542,37544,37546],{"class":38,"line":34244},[36,37534,33826],{"class":98},[36,37536,176],{"class":163},[36,37538,37539],{"class":98},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[36,37541,34282],{"class":5667},[36,37543,176],{"class":163},[36,37545,1313],{"class":109},[36,37547,627],{"class":98},[36,37549,37550],{"class":38,"line":34250},[36,37551,34294],{"class":98},[571,37553,37554],{"start":52},[574,37555,34307],{},[26,37557,37559],{"className":30811,"code":37558,"language":30813,"meta":31,"style":31},"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",[33,37560,37561,37567,37577,37587,37597,37601,37611,37621,37632,37636,37640,37644,37652,37668,37678,37694,37704,37718,37722,37732,37742,37752,37758,37762,37766,37774,37778,37794,37802,37806,37810,37818,37826,37830,37834,37838,37842,37848,37852,37862,37870,37878,37882,37886,37890,37898,37902,37918,37922,37926,37930,37942,37946,37958,37962,37966,37978,37982,37992,37996,38000,38012,38016,38024,38028,38032,38040,38044,38052,38056,38060,38064,38068,38072,38088,38096,38100,38104,38152,38158,38162,38172,38180,38188,38192,38196,38200,38204,38212,38216,38232,38236,38244,38252],{"__ignoreMap":31},[36,37562,37563,37565],{"class":38,"line":39},[36,37564,30825],{"class":163},[36,37566,30828],{"class":98},[36,37568,37569,37571,37573,37575],{"class":38,"line":46},[36,37570,30825],{"class":163},[36,37572,31848],{"class":98},[36,37574,31816],{"class":163},[36,37576,31853],{"class":98},[36,37578,37579,37581,37583,37585],{"class":38,"line":52},[36,37580,31170],{"class":163},[36,37582,34335],{"class":98},[36,37584,30825],{"class":163},[36,37586,34340],{"class":98},[36,37588,37589,37591,37593,37595],{"class":38,"line":66},[36,37590,31170],{"class":163},[36,37592,31831],{"class":98},[36,37594,30825],{"class":163},[36,37596,31836],{"class":98},[36,37598,37599],{"class":38,"line":72},[36,37600,34355],{"class":42},[36,37602,37603,37605,37607,37609],{"class":38,"line":82},[36,37604,31170],{"class":163},[36,37606,31801],{"class":98},[36,37608,30825],{"class":163},[36,37610,31806],{"class":98},[36,37612,37613,37615,37617,37619],{"class":38,"line":88},[36,37614,31170],{"class":163},[36,37616,32347],{"class":98},[36,37618,30825],{"class":163},[36,37620,35990],{"class":98},[36,37622,37623,37625,37628,37630],{"class":38,"line":113},[36,37624,31170],{"class":163},[36,37626,37627],{"class":98}," 练习.AlexNet.model ",[36,37629,30825],{"class":163},[36,37631,35990],{"class":98},[36,37633,37634],{"class":38,"line":119},[36,37635,247],{"emptyLinePlaceholder":246},[36,37637,37638],{"class":38,"line":131},[36,37639,247],{"emptyLinePlaceholder":246},[36,37641,37642],{"class":38,"line":137},[36,37643,34384],{"class":42},[36,37645,37646,37648,37650],{"class":38,"line":147},[36,37647,32380],{"class":163},[36,37649,34391],{"class":55},[36,37651,32386],{"class":98},[36,37653,37654,37656,37658,37660,37662,37664,37666],{"class":38,"line":153},[36,37655,34398],{"class":98},[36,37657,176],{"class":163},[36,37659,31888],{"class":98},[36,37661,31891],{"class":5667},[36,37663,176],{"class":163},[36,37665,31896],{"class":59},[36,37667,31899],{"class":98},[36,37669,37670,37672,37674,37676],{"class":38,"line":191},[36,37671,34415],{"class":5667},[36,37673,176],{"class":163},[36,37675,34420],{"class":109},[36,37677,31899],{"class":98},[36,37679,37680,37682,37684,37686,37688,37690,37692],{"class":38,"line":197},[36,37681,34427],{"class":5667},[36,37683,176],{"class":163},[36,37685,31926],{"class":98},[36,37687,31929],{"class":5667},[36,37689,176],{"class":163},[36,37691,35882],{"class":109},[36,37693,31937],{"class":98},[36,37695,37696,37698,37700,37702],{"class":38,"line":217},[36,37697,34444],{"class":5667},[36,37699,176],{"class":163},[36,37701,31909],{"class":109},[36,37703,627],{"class":98},[36,37705,37706,37708,37710,37712,37714,37716],{"class":38,"line":223},[36,37707,34455],{"class":98},[36,37709,176],{"class":163},[36,37711,31967],{"class":98},[36,37713,31970],{"class":5667},[36,37715,176],{"class":163},[36,37717,34466],{"class":98},[36,37719,37720],{"class":38,"line":243},[36,37721,34471],{"class":42},[36,37723,37724,37726,37728,37730],{"class":38,"line":250},[36,37725,34476],{"class":5667},[36,37727,176],{"class":163},[36,37729,833],{"class":109},[36,37731,31899],{"class":98},[36,37733,37734,37736,37738,37740],{"class":38,"line":256},[36,37735,34487],{"class":5667},[36,37737,176],{"class":163},[36,37739,31909],{"class":109},[36,37741,31899],{"class":98},[36,37743,37744,37746,37748,37750],{"class":38,"line":273},[36,37745,34498],{"class":5667},[36,37747,176],{"class":163},[36,37749,807],{"class":109},[36,37751,627],{"class":98},[36,37753,37754,37756],{"class":38,"line":278},[36,37755,4541],{"class":163},[36,37757,34511],{"class":98},[36,37759,37760],{"class":38,"line":284},[36,37761,247],{"emptyLinePlaceholder":246},[36,37763,37764],{"class":38,"line":315},[36,37765,34520],{"class":42},[36,37767,37768,37770,37772],{"class":38,"line":320},[36,37769,32380],{"class":163},[36,37771,34527],{"class":55},[36,37773,34530],{"class":98},[36,37775,37776],{"class":38,"line":326},[36,37777,34535],{"class":42},[36,37779,37780,37782,37784,37786,37788,37790,37792],{"class":38,"line":343},[36,37781,31670],{"class":98},[36,37783,176],{"class":163},[36,37785,31677],{"class":59},[36,37787,2172],{"class":163},[36,37789,31682],{"class":98},[36,37791,2169],{"class":163},[36,37793,34552],{"class":59},[36,37795,37796,37798,37800],{"class":38,"line":348},[36,37797,31722],{"class":98},[36,37799,176],{"class":163},[36,37801,32722],{"class":98},[36,37803,37804],{"class":38,"line":354},[36,37805,247],{"emptyLinePlaceholder":246},[36,37807,37808],{"class":38,"line":370},[36,37809,34569],{"class":42},[36,37811,37812,37814,37816],{"class":38,"line":375},[36,37813,34574],{"class":98},[36,37815,176],{"class":163},[36,37817,32775],{"class":109},[36,37819,37820,37822,37824],{"class":38,"line":381},[36,37821,34583],{"class":98},[36,37823,176],{"class":163},[36,37825,3536],{"class":109},[36,37827,37828],{"class":38,"line":399},[36,37829,247],{"emptyLinePlaceholder":246},[36,37831,37832],{"class":38,"line":404},[36,37833,34596],{"class":42},[36,37835,37836],{"class":38,"line":410},[36,37837,34601],{"class":42},[36,37839,37840],{"class":38,"line":423},[36,37841,34606],{"class":42},[36,37843,37844,37846],{"class":38,"line":436},[36,37845,34611],{"class":163},[36,37847,33317],{"class":98},[36,37849,37850],{"class":38,"line":441},[36,37851,34618],{"class":42},[36,37853,37854,37856,37858,37860],{"class":38,"line":447},[36,37855,3854],{"class":163},[36,37857,34625],{"class":98},[36,37859,26480],{"class":163},[36,37861,34630],{"class":98},[36,37863,37864,37866,37868],{"class":38,"line":465},[36,37865,34635],{"class":98},[36,37867,176],{"class":163},[36,37869,34640],{"class":98},[36,37871,37872,37874,37876],{"class":38,"line":470},[36,37873,34645],{"class":98},[36,37875,176],{"class":163},[36,37877,34650],{"class":98},[36,37879,37880],{"class":38,"line":476},[36,37881,34655],{"class":42},[36,37883,37884],{"class":38,"line":496},[36,37885,33308],{"class":98},[36,37887,37888],{"class":38,"line":501},[36,37889,34664],{"class":42},[36,37891,37892,37894,37896],{"class":38,"line":507},[36,37893,33093],{"class":98},[36,37895,176],{"class":163},[36,37897,34673],{"class":98},[36,37899,37900],{"class":38,"line":517},[36,37901,34678],{"class":42},[36,37903,37904,37906,37908,37910,37912,37914,37916],{"class":38,"line":522},[36,37905,33110],{"class":98},[36,37907,176],{"class":163},[36,37909,33115],{"class":98},[36,37911,33118],{"class":5667},[36,37913,176],{"class":163},[36,37915,833],{"class":109},[36,37917,627],{"class":98},[36,37919,37920],{"class":38,"line":528},[36,37921,34699],{"class":42},[36,37923,37924],{"class":38,"line":10203},[36,37925,34704],{"class":42},[36,37927,37928],{"class":38,"line":10227},[36,37929,34709],{"class":42},[36,37931,37932,37934,37936,37938,37940],{"class":38,"line":10232},[36,37933,34714],{"class":98},[36,37935,9918],{"class":163},[36,37937,33220],{"class":98},[36,37939,3400],{"class":163},[36,37941,34723],{"class":98},[36,37943,37944],{"class":38,"line":10237},[36,37945,34728],{"class":42},[36,37947,37948,37950,37952,37954,37956],{"class":38,"line":10242},[36,37949,34733],{"class":98},[36,37951,9918],{"class":163},[36,37953,34738],{"class":98},[36,37955,807],{"class":109},[36,37957,627],{"class":98},[36,37959,37960],{"class":38,"line":10251},[36,37961,247],{"emptyLinePlaceholder":246},[36,37963,37964],{"class":38,"line":10256},[36,37965,34751],{"class":42},[36,37967,37968,37970,37972,37974,37976],{"class":38,"line":10262},[36,37969,34756],{"class":98},[36,37971,176],{"class":163},[36,37973,34761],{"class":98},[36,37975,1198],{"class":163},[36,37977,34766],{"class":98},[36,37979,37980],{"class":38,"line":10283},[36,37981,34771],{"class":42},[36,37983,37984,37986,37988,37990],{"class":38,"line":10289},[36,37985,32884],{"class":109},[36,37987,621],{"class":98},[36,37989,34780],{"class":59},[36,37991,34783],{"class":98},[36,37993,37994],{"class":38,"line":10303},[36,37995,247],{"emptyLinePlaceholder":246},[36,37997,37998],{"class":38,"line":10309},[36,37999,34792],{"class":42},[36,38001,38002,38004,38006,38008,38010],{"class":38,"line":10336},[36,38003,2010],{"class":163},[36,38005,31653],{"class":109},[36,38007,3400],{"class":163},[36,38009,31658],{"class":59},[36,38011,4190],{"class":98},[36,38013,38014],{"class":38,"line":10345},[36,38015,34809],{"class":42},[36,38017,38018,38020,38022],{"class":38,"line":10351},[36,38019,31722],{"class":98},[36,38021,176],{"class":163},[36,38023,37522],{"class":98},[36,38025,38026],{"class":38,"line":10359},[36,38027,34822],{"class":42},[36,38029,38030],{"class":38,"line":10364},[36,38031,34827],{"class":42},[36,38033,38034,38036,38038],{"class":38,"line":17043},[36,38035,34832],{"class":98},[36,38037,34835],{"class":59},[36,38039,30930],{"class":98},[36,38041,38042],{"class":38,"line":17049},[36,38043,34842],{"class":42},[36,38045,38046,38048,38050],{"class":38,"line":17072},[36,38047,34455],{"class":98},[36,38049,176],{"class":163},[36,38051,34851],{"class":98},[36,38053,38054],{"class":38,"line":17078},[36,38055,34856],{"class":42},[36,38057,38058],{"class":38,"line":17101},[36,38059,34861],{"class":98},[36,38061,38062],{"class":38,"line":17115},[36,38063,247],{"emptyLinePlaceholder":246},[36,38065,38066],{"class":38,"line":17135},[36,38067,34870],{"class":42},[36,38069,38070],{"class":38,"line":17141},[36,38071,34875],{"class":42},[36,38073,38074,38076,38078,38080,38082,38084,38086],{"class":38,"line":17152},[36,38075,31670],{"class":98},[36,38077,176],{"class":163},[36,38079,31677],{"class":59},[36,38081,2172],{"class":163},[36,38083,31682],{"class":98},[36,38085,2169],{"class":163},[36,38087,34552],{"class":59},[36,38089,38090,38092,38094],{"class":38,"line":17175},[36,38091,31722],{"class":98},[36,38093,176],{"class":163},[36,38095,32722],{"class":98},[36,38097,38098],{"class":38,"line":17197},[36,38099,34904],{"class":42},[36,38101,38102],{"class":38,"line":17202},[36,38103,34909],{"class":42},[36,38105,38106,38108,38110,38112,38114,38116,38118,38120,38122,38124,38126,38128,38130,38132,38134,38136,38138,38140,38142,38144,38146,38148,38150],{"class":38,"line":17208},[36,38107,34914],{"class":98},[36,38109,176],{"class":163},[36,38111,1503],{"class":98},[36,38113,34921],{"class":59},[36,38115,992],{"class":98},[36,38117,34926],{"class":59},[36,38119,992],{"class":98},[36,38121,34931],{"class":59},[36,38123,992],{"class":98},[36,38125,34936],{"class":59},[36,38127,992],{"class":98},[36,38129,34941],{"class":59},[36,38131,992],{"class":98},[36,38133,34946],{"class":59},[36,38135,992],{"class":98},[36,38137,34951],{"class":59},[36,38139,992],{"class":98},[36,38141,34956],{"class":59},[36,38143,992],{"class":98},[36,38145,34961],{"class":59},[36,38147,992],{"class":98},[36,38149,34966],{"class":59},[36,38151,33679],{"class":98},[36,38153,38154,38156],{"class":38,"line":17222},[36,38155,34611],{"class":163},[36,38157,33317],{"class":98},[36,38159,38160],{"class":38,"line":17235},[36,38161,34979],{"class":42},[36,38163,38164,38166,38168,38170],{"class":38,"line":17240},[36,38165,3854],{"class":163},[36,38167,34986],{"class":98},[36,38169,26480],{"class":163},[36,38171,34630],{"class":98},[36,38173,38174,38176,38178],{"class":38,"line":17254},[36,38175,33043],{"class":98},[36,38177,176],{"class":163},[36,38179,33048],{"class":98},[36,38181,38182,38184,38186],{"class":38,"line":17259},[36,38183,33058],{"class":98},[36,38185,176],{"class":163},[36,38187,33063],{"class":98},[36,38189,38190],{"class":38,"line":17265},[36,38191,247],{"emptyLinePlaceholder":246},[36,38193,38194],{"class":38,"line":17270},[36,38195,35015],{"class":42},[36,38197,38198],{"class":38,"line":17284},[36,38199,33308],{"class":98},[36,38201,38202],{"class":38,"line":17289},[36,38203,35024],{"class":42},[36,38205,38206,38208,38210],{"class":38,"line":17294},[36,38207,33093],{"class":98},[36,38209,176],{"class":163},[36,38211,33098],{"class":98},[36,38213,38214],{"class":38,"line":17308},[36,38215,35037],{"class":42},[36,38217,38218,38220,38222,38224,38226,38228,38230],{"class":38,"line":17320},[36,38219,33110],{"class":98},[36,38221,176],{"class":163},[36,38223,33115],{"class":98},[36,38225,33118],{"class":5667},[36,38227,176],{"class":163},[36,38229,833],{"class":109},[36,38231,627],{"class":98},[36,38233,38234],{"class":38,"line":17325},[36,38235,35058],{"class":42},[36,38237,38238,38240,38242],{"class":38,"line":17338},[36,38239,35063],{"class":98},[36,38241,176],{"class":163},[36,38243,35068],{"class":98},[36,38245,38246,38248,38250],{"class":38,"line":17343},[36,38247,35073],{"class":98},[36,38249,176],{"class":163},[36,38251,35078],{"class":98},[36,38253,38254,38256,38258,38260,38262,38264,38266,38268],{"class":38,"line":17348},[36,38255,35083],{"class":109},[36,38257,621],{"class":98},[36,38259,35088],{"class":59},[36,38261,35091],{"class":98},[36,38263,35094],{"class":59},[36,38265,992],{"class":98},[36,38267,35099],{"class":59},[36,38269,35102],{"class":98},[588,38271,38273],{"id":38272},"_22vgg","2.2.VGG",[22437,38275,38277],{"id":38276},"_221原理","2.2.1.原理",[14,38279,38280],{},[1941,38281],{"alt":31,"src":38282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[14,38284,38285],{},[1941,38286],{"alt":31,"src":38287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[14,38289,38290],{},[1941,38291],{"alt":31,"src":38292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[14,38294,38295],{},"参数详细描述：",[14,38297,38298],{},[1941,38299],{"alt":31,"src":38300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[14,38302,38303],{},[1941,38304],{"alt":31,"src":38305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[14,38307,38308],{},[1941,38309],{"alt":31,"src":38310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[14,38312,38313],{},[1941,38314],{"alt":31,"src":38315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[14,38317,38318],{},[1941,38319],{"alt":31,"src":38320},"\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",[22437,38322,38324],{"id":38323},"_222代码实现","2.2.2.代码实现",[571,38326,38327],{},[574,38328,38329],{},"网络搭建",[26,38331,38333],{"className":30811,"code":38332,"language":30813,"meta":31,"style":31},"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",[33,38334,38335,38341,38353,38363,38373,38377,38394,38402,38421,38426,38431,38443,38481,38486,38522,38526,38555,38560,38565,38576,38612,38616,38652,38656,38684,38688,38693,38704,38740,38744,38780,38784,38820,38824,38852,38856,38861,38872,38909,38913,38949,38953,38989,38993,39021,39025,39030,39041,39077,39081,39117,39121,39157,39161,39189,39193,39198,39209,39214,39219,39224,39245,39249,39261,39265,39277,39281,39285,39290,39295,39310,39315,39325,39330,39345,39350,39369,39374,39383,39388,39398,39403,39408,39422,39427,39441,39449,39453,39457,39465,39476,39487,39498,39509,39520,39531,39537,39541,39546,39559,39579,39585,39594],{"__ignoreMap":31},[36,38336,38337,38339],{"class":38,"line":39},[36,38338,30825],{"class":163},[36,38340,30828],{"class":98},[36,38342,38343,38345,38348,38350],{"class":38,"line":46},[36,38344,31170],{"class":163},[36,38346,38347],{"class":98}," sympy.core.sympify ",[36,38349,30825],{"class":163},[36,38351,38352],{"class":98}," kernS\n",[36,38354,38355,38357,38359,38361],{"class":38,"line":52},[36,38356,31170],{"class":163},[36,38358,31173],{"class":98},[36,38360,30825],{"class":163},[36,38362,31178],{"class":98},[36,38364,38365,38367,38369,38371],{"class":38,"line":66},[36,38366,31170],{"class":163},[36,38368,31190],{"class":98},[36,38370,30825],{"class":163},[36,38372,31195],{"class":98},[36,38374,38375],{"class":38,"line":72},[36,38376,247],{"emptyLinePlaceholder":246},[36,38378,38379,38381,38384,38386,38388,38390,38392],{"class":38,"line":82},[36,38380,15133],{"class":163},[36,38382,38383],{"class":55}," VGG16",[36,38385,621],{"class":98},[36,38387,31211],{"class":55},[36,38389,1172],{"class":98},[36,38391,31216],{"class":55},[36,38393,31219],{"class":98},[36,38395,38396,38398,38400],{"class":38,"line":88},[36,38397,31234],{"class":163},[36,38399,31237],{"class":109},[36,38401,31240],{"class":98},[36,38403,38404,38406,38408,38411,38413,38415,38417,38419],{"class":38,"line":113},[36,38405,31250],{"class":109},[36,38407,621],{"class":98},[36,38409,38410],{"class":109},"VGG16",[36,38412,12874],{"class":98},[36,38414,31256],{"class":109},[36,38416,31259],{"class":98},[36,38418,31262],{"class":109},[36,38420,2435],{"class":98},[36,38422,38423],{"class":38,"line":119},[36,38424,38425],{"class":42},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[36,38427,38428],{"class":38,"line":131},[36,38429,38430],{"class":42},"        # 这里用的是灰度图\n",[36,38432,38433,38435,38438,38440],{"class":38,"line":137},[36,38434,31278],{"class":109},[36,38436,38437],{"class":98},".block1",[36,38439,176],{"class":163},[36,38441,38442],{"class":98},"nn.Sequential(\n",[36,38444,38445,38448,38450,38452,38454,38456,38458,38460,38462,38464,38466,38468,38470,38472,38474,38476,38478],{"class":38,"line":147},[36,38446,38447],{"class":98},"            nn.Conv2d(",[36,38449,31289],{"class":5667},[36,38451,176],{"class":163},[36,38453,833],{"class":109},[36,38455,992],{"class":98},[36,38457,31298],{"class":5667},[36,38459,176],{"class":163},[36,38461,819],{"class":109},[36,38463,992],{"class":98},[36,38465,31307],{"class":5667},[36,38467,176],{"class":163},[36,38469,689],{"class":109},[36,38471,992],{"class":98},[36,38473,31316],{"class":5667},[36,38475,176],{"class":163},[36,38477,833],{"class":109},[36,38479,38480],{"class":98},"),\n",[36,38482,38483],{"class":38,"line":153},[36,38484,38485],{"class":98},"            nn.ReLU(),\n",[36,38487,38488,38490,38492,38494,38496,38498,38500,38502,38504,38506,38508,38510,38512,38514,38516,38518,38520],{"class":38,"line":191},[36,38489,38447],{"class":98},[36,38491,31289],{"class":5667},[36,38493,176],{"class":163},[36,38495,819],{"class":109},[36,38497,992],{"class":98},[36,38499,31298],{"class":5667},[36,38501,176],{"class":163},[36,38503,819],{"class":109},[36,38505,992],{"class":98},[36,38507,31307],{"class":5667},[36,38509,176],{"class":163},[36,38511,689],{"class":109},[36,38513,992],{"class":98},[36,38515,31316],{"class":5667},[36,38517,176],{"class":163},[36,38519,833],{"class":109},[36,38521,38480],{"class":98},[36,38523,38524],{"class":38,"line":197},[36,38525,38485],{"class":98},[36,38527,38528,38531,38533,38535,38537,38539,38541,38543,38545,38547,38549,38551,38553],{"class":38,"line":217},[36,38529,38530],{"class":98},"            nn.MaxPool2d(",[36,38532,31307],{"class":5667},[36,38534,176],{"class":163},[36,38536,694],{"class":109},[36,38538,992],{"class":98},[36,38540,31362],{"class":5667},[36,38542,176],{"class":163},[36,38544,694],{"class":109},[36,38546,992],{"class":98},[36,38548,31316],{"class":5667},[36,38550,176],{"class":163},[36,38552,807],{"class":109},[36,38554,627],{"class":98},[36,38556,38557],{"class":38,"line":223},[36,38558,38559],{"class":98},"        )\n",[36,38561,38562],{"class":38,"line":243},[36,38563,38564],{"class":42},"        # 第二层\n",[36,38566,38567,38569,38572,38574],{"class":38,"line":250},[36,38568,31278],{"class":109},[36,38570,38571],{"class":98},".block2",[36,38573,176],{"class":163},[36,38575,38442],{"class":98},[36,38577,38578,38580,38582,38584,38586,38588,38590,38592,38594,38596,38598,38600,38602,38604,38606,38608,38610],{"class":38,"line":256},[36,38579,38447],{"class":98},[36,38581,31289],{"class":5667},[36,38583,176],{"class":163},[36,38585,819],{"class":109},[36,38587,992],{"class":98},[36,38589,31298],{"class":5667},[36,38591,176],{"class":163},[36,38593,32503],{"class":109},[36,38595,992],{"class":98},[36,38597,31307],{"class":5667},[36,38599,176],{"class":163},[36,38601,689],{"class":109},[36,38603,992],{"class":98},[36,38605,31316],{"class":5667},[36,38607,176],{"class":163},[36,38609,833],{"class":109},[36,38611,38480],{"class":98},[36,38613,38614],{"class":38,"line":273},[36,38615,38485],{"class":98},[36,38617,38618,38620,38622,38624,38626,38628,38630,38632,38634,38636,38638,38640,38642,38644,38646,38648,38650],{"class":38,"line":278},[36,38619,38447],{"class":98},[36,38621,31289],{"class":5667},[36,38623,176],{"class":163},[36,38625,32503],{"class":109},[36,38627,992],{"class":98},[36,38629,31298],{"class":5667},[36,38631,176],{"class":163},[36,38633,32503],{"class":109},[36,38635,992],{"class":98},[36,38637,31307],{"class":5667},[36,38639,176],{"class":163},[36,38641,689],{"class":109},[36,38643,992],{"class":98},[36,38645,31316],{"class":5667},[36,38647,176],{"class":163},[36,38649,833],{"class":109},[36,38651,38480],{"class":98},[36,38653,38654],{"class":38,"line":284},[36,38655,38485],{"class":98},[36,38657,38658,38660,38662,38664,38666,38668,38670,38672,38674,38676,38678,38680,38682],{"class":38,"line":315},[36,38659,38530],{"class":98},[36,38661,31307],{"class":5667},[36,38663,176],{"class":163},[36,38665,694],{"class":109},[36,38667,992],{"class":98},[36,38669,31362],{"class":5667},[36,38671,176],{"class":163},[36,38673,694],{"class":109},[36,38675,992],{"class":98},[36,38677,31316],{"class":5667},[36,38679,176],{"class":163},[36,38681,807],{"class":109},[36,38683,627],{"class":98},[36,38685,38686],{"class":38,"line":320},[36,38687,38559],{"class":98},[36,38689,38690],{"class":38,"line":326},[36,38691,38692],{"class":42},"        # 第三层\n",[36,38694,38695,38697,38700,38702],{"class":38,"line":343},[36,38696,31278],{"class":109},[36,38698,38699],{"class":98},".block3",[36,38701,176],{"class":163},[36,38703,38442],{"class":98},[36,38705,38706,38708,38710,38712,38714,38716,38718,38720,38722,38724,38726,38728,38730,38732,38734,38736,38738],{"class":38,"line":348},[36,38707,38447],{"class":98},[36,38709,31289],{"class":5667},[36,38711,176],{"class":163},[36,38713,32503],{"class":109},[36,38715,992],{"class":98},[36,38717,31298],{"class":5667},[36,38719,176],{"class":163},[36,38721,35303],{"class":109},[36,38723,992],{"class":98},[36,38725,31307],{"class":5667},[36,38727,176],{"class":163},[36,38729,689],{"class":109},[36,38731,992],{"class":98},[36,38733,31316],{"class":5667},[36,38735,176],{"class":163},[36,38737,833],{"class":109},[36,38739,38480],{"class":98},[36,38741,38742],{"class":38,"line":354},[36,38743,38485],{"class":98},[36,38745,38746,38748,38750,38752,38754,38756,38758,38760,38762,38764,38766,38768,38770,38772,38774,38776,38778],{"class":38,"line":370},[36,38747,38447],{"class":98},[36,38749,31289],{"class":5667},[36,38751,176],{"class":163},[36,38753,35303],{"class":109},[36,38755,992],{"class":98},[36,38757,31298],{"class":5667},[36,38759,176],{"class":163},[36,38761,35303],{"class":109},[36,38763,992],{"class":98},[36,38765,31307],{"class":5667},[36,38767,176],{"class":163},[36,38769,689],{"class":109},[36,38771,992],{"class":98},[36,38773,31316],{"class":5667},[36,38775,176],{"class":163},[36,38777,833],{"class":109},[36,38779,38480],{"class":98},[36,38781,38782],{"class":38,"line":375},[36,38783,38485],{"class":98},[36,38785,38786,38788,38790,38792,38794,38796,38798,38800,38802,38804,38806,38808,38810,38812,38814,38816,38818],{"class":38,"line":381},[36,38787,38447],{"class":98},[36,38789,31289],{"class":5667},[36,38791,176],{"class":163},[36,38793,35303],{"class":109},[36,38795,992],{"class":98},[36,38797,31298],{"class":5667},[36,38799,176],{"class":163},[36,38801,35303],{"class":109},[36,38803,992],{"class":98},[36,38805,31307],{"class":5667},[36,38807,176],{"class":163},[36,38809,689],{"class":109},[36,38811,992],{"class":98},[36,38813,31316],{"class":5667},[36,38815,176],{"class":163},[36,38817,833],{"class":109},[36,38819,38480],{"class":98},[36,38821,38822],{"class":38,"line":399},[36,38823,38485],{"class":98},[36,38825,38826,38828,38830,38832,38834,38836,38838,38840,38842,38844,38846,38848,38850],{"class":38,"line":404},[36,38827,38530],{"class":98},[36,38829,31307],{"class":5667},[36,38831,176],{"class":163},[36,38833,694],{"class":109},[36,38835,992],{"class":98},[36,38837,31362],{"class":5667},[36,38839,176],{"class":163},[36,38841,694],{"class":109},[36,38843,992],{"class":98},[36,38845,31316],{"class":5667},[36,38847,176],{"class":163},[36,38849,807],{"class":109},[36,38851,627],{"class":98},[36,38853,38854],{"class":38,"line":410},[36,38855,38559],{"class":98},[36,38857,38858],{"class":38,"line":423},[36,38859,38860],{"class":42},"        # 第四层\n",[36,38862,38863,38865,38868,38870],{"class":38,"line":436},[36,38864,31278],{"class":109},[36,38866,38867],{"class":98},".block4",[36,38869,176],{"class":163},[36,38871,38442],{"class":98},[36,38873,38874,38876,38878,38880,38882,38884,38886,38888,38891,38893,38895,38897,38899,38901,38903,38905,38907],{"class":38,"line":441},[36,38875,38447],{"class":98},[36,38877,31289],{"class":5667},[36,38879,176],{"class":163},[36,38881,35303],{"class":109},[36,38883,992],{"class":98},[36,38885,31298],{"class":5667},[36,38887,176],{"class":163},[36,38889,38890],{"class":109},"512",[36,38892,992],{"class":98},[36,38894,31307],{"class":5667},[36,38896,176],{"class":163},[36,38898,689],{"class":109},[36,38900,992],{"class":98},[36,38902,31316],{"class":5667},[36,38904,176],{"class":163},[36,38906,833],{"class":109},[36,38908,38480],{"class":98},[36,38910,38911],{"class":38,"line":447},[36,38912,38485],{"class":98},[36,38914,38915,38917,38919,38921,38923,38925,38927,38929,38931,38933,38935,38937,38939,38941,38943,38945,38947],{"class":38,"line":465},[36,38916,38447],{"class":98},[36,38918,31289],{"class":5667},[36,38920,176],{"class":163},[36,38922,38890],{"class":109},[36,38924,992],{"class":98},[36,38926,31298],{"class":5667},[36,38928,176],{"class":163},[36,38930,38890],{"class":109},[36,38932,992],{"class":98},[36,38934,31307],{"class":5667},[36,38936,176],{"class":163},[36,38938,689],{"class":109},[36,38940,992],{"class":98},[36,38942,31316],{"class":5667},[36,38944,176],{"class":163},[36,38946,833],{"class":109},[36,38948,38480],{"class":98},[36,38950,38951],{"class":38,"line":470},[36,38952,38485],{"class":98},[36,38954,38955,38957,38959,38961,38963,38965,38967,38969,38971,38973,38975,38977,38979,38981,38983,38985,38987],{"class":38,"line":476},[36,38956,38447],{"class":98},[36,38958,31289],{"class":5667},[36,38960,176],{"class":163},[36,38962,38890],{"class":109},[36,38964,992],{"class":98},[36,38966,31298],{"class":5667},[36,38968,176],{"class":163},[36,38970,38890],{"class":109},[36,38972,992],{"class":98},[36,38974,31307],{"class":5667},[36,38976,176],{"class":163},[36,38978,689],{"class":109},[36,38980,992],{"class":98},[36,38982,31316],{"class":5667},[36,38984,176],{"class":163},[36,38986,833],{"class":109},[36,38988,38480],{"class":98},[36,38990,38991],{"class":38,"line":496},[36,38992,38485],{"class":98},[36,38994,38995,38997,38999,39001,39003,39005,39007,39009,39011,39013,39015,39017,39019],{"class":38,"line":501},[36,38996,38530],{"class":98},[36,38998,31307],{"class":5667},[36,39000,176],{"class":163},[36,39002,694],{"class":109},[36,39004,992],{"class":98},[36,39006,31362],{"class":5667},[36,39008,176],{"class":163},[36,39010,694],{"class":109},[36,39012,992],{"class":98},[36,39014,31316],{"class":5667},[36,39016,176],{"class":163},[36,39018,807],{"class":109},[36,39020,627],{"class":98},[36,39022,39023],{"class":38,"line":507},[36,39024,38559],{"class":98},[36,39026,39027],{"class":38,"line":517},[36,39028,39029],{"class":42},"        # 第五层\n",[36,39031,39032,39034,39037,39039],{"class":38,"line":522},[36,39033,31278],{"class":109},[36,39035,39036],{"class":98},".block5",[36,39038,176],{"class":163},[36,39040,38442],{"class":98},[36,39042,39043,39045,39047,39049,39051,39053,39055,39057,39059,39061,39063,39065,39067,39069,39071,39073,39075],{"class":38,"line":528},[36,39044,38447],{"class":98},[36,39046,31289],{"class":5667},[36,39048,176],{"class":163},[36,39050,38890],{"class":109},[36,39052,992],{"class":98},[36,39054,31298],{"class":5667},[36,39056,176],{"class":163},[36,39058,38890],{"class":109},[36,39060,992],{"class":98},[36,39062,31307],{"class":5667},[36,39064,176],{"class":163},[36,39066,689],{"class":109},[36,39068,992],{"class":98},[36,39070,31316],{"class":5667},[36,39072,176],{"class":163},[36,39074,833],{"class":109},[36,39076,38480],{"class":98},[36,39078,39079],{"class":38,"line":10203},[36,39080,38485],{"class":98},[36,39082,39083,39085,39087,39089,39091,39093,39095,39097,39099,39101,39103,39105,39107,39109,39111,39113,39115],{"class":38,"line":10227},[36,39084,38447],{"class":98},[36,39086,31289],{"class":5667},[36,39088,176],{"class":163},[36,39090,38890],{"class":109},[36,39092,992],{"class":98},[36,39094,31298],{"class":5667},[36,39096,176],{"class":163},[36,39098,38890],{"class":109},[36,39100,992],{"class":98},[36,39102,31307],{"class":5667},[36,39104,176],{"class":163},[36,39106,689],{"class":109},[36,39108,992],{"class":98},[36,39110,31316],{"class":5667},[36,39112,176],{"class":163},[36,39114,833],{"class":109},[36,39116,38480],{"class":98},[36,39118,39119],{"class":38,"line":10232},[36,39120,38485],{"class":98},[36,39122,39123,39125,39127,39129,39131,39133,39135,39137,39139,39141,39143,39145,39147,39149,39151,39153,39155],{"class":38,"line":10237},[36,39124,38447],{"class":98},[36,39126,31289],{"class":5667},[36,39128,176],{"class":163},[36,39130,38890],{"class":109},[36,39132,992],{"class":98},[36,39134,31298],{"class":5667},[36,39136,176],{"class":163},[36,39138,38890],{"class":109},[36,39140,992],{"class":98},[36,39142,31307],{"class":5667},[36,39144,176],{"class":163},[36,39146,689],{"class":109},[36,39148,992],{"class":98},[36,39150,31316],{"class":5667},[36,39152,176],{"class":163},[36,39154,833],{"class":109},[36,39156,38480],{"class":98},[36,39158,39159],{"class":38,"line":10242},[36,39160,38485],{"class":98},[36,39162,39163,39165,39167,39169,39171,39173,39175,39177,39179,39181,39183,39185,39187],{"class":38,"line":10251},[36,39164,38530],{"class":98},[36,39166,31307],{"class":5667},[36,39168,176],{"class":163},[36,39170,694],{"class":109},[36,39172,992],{"class":98},[36,39174,31362],{"class":5667},[36,39176,176],{"class":163},[36,39178,694],{"class":109},[36,39180,992],{"class":98},[36,39182,31316],{"class":5667},[36,39184,176],{"class":163},[36,39186,807],{"class":109},[36,39188,627],{"class":98},[36,39190,39191],{"class":38,"line":10256},[36,39192,38559],{"class":98},[36,39194,39195],{"class":38,"line":10262},[36,39196,39197],{"class":42},"        # 全连接层\n",[36,39199,39200,39202,39205,39207],{"class":38,"line":10283},[36,39201,31278],{"class":109},[36,39203,39204],{"class":98},".block6",[36,39206,176],{"class":163},[36,39208,38442],{"class":98},[36,39210,39211],{"class":38,"line":10289},[36,39212,39213],{"class":42},"            # 平展操作\n",[36,39215,39216],{"class":38,"line":10303},[36,39217,39218],{"class":42},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[36,39220,39221],{"class":38,"line":10309},[36,39222,39223],{"class":98},"            nn.Flatten(),\n",[36,39225,39226,39229,39231,39233,39235,39237,39239,39241,39243],{"class":38,"line":10336},[36,39227,39228],{"class":98},"            nn.Linear(",[36,39230,983],{"class":109},[36,39232,1069],{"class":163},[36,39234,983],{"class":109},[36,39236,1069],{"class":163},[36,39238,38890],{"class":109},[36,39240,992],{"class":98},[36,39242,35303],{"class":109},[36,39244,38480],{"class":98},[36,39246,39247],{"class":38,"line":10345},[36,39248,38485],{"class":98},[36,39250,39251,39253,39255,39257,39259],{"class":38,"line":10351},[36,39252,39228],{"class":98},[36,39254,35303],{"class":109},[36,39256,992],{"class":98},[36,39258,32503],{"class":109},[36,39260,38480],{"class":98},[36,39262,39263],{"class":38,"line":10359},[36,39264,38485],{"class":98},[36,39266,39267,39269,39271,39273,39275],{"class":38,"line":10364},[36,39268,39228],{"class":98},[36,39270,32503],{"class":109},[36,39272,992],{"class":98},[36,39274,1060],{"class":109},[36,39276,627],{"class":98},[36,39278,39279],{"class":38,"line":17043},[36,39280,38559],{"class":98},[36,39282,39283],{"class":38,"line":17049},[36,39284,247],{"emptyLinePlaceholder":246},[36,39286,39287],{"class":38,"line":17072},[36,39288,39289],{"class":42},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[36,39291,39292],{"class":38,"line":17078},[36,39293,39294],{"class":42},"        # 循环遍历模型\n",[36,39296,39297,39299,39302,39304,39307],{"class":38,"line":17101},[36,39298,3854],{"class":163},[36,39300,39301],{"class":98}," m ",[36,39303,26480],{"class":163},[36,39305,39306],{"class":109}," self",[36,39308,39309],{"class":98},".modules():\n",[36,39311,39312],{"class":38,"line":17115},[36,39313,39314],{"class":42},"            # print(m)\n",[36,39316,39317,39319,39322],{"class":38,"line":17135},[36,39318,5093],{"class":163},[36,39320,39321],{"class":109}," isinstance",[36,39323,39324],{"class":98},"(m,nn.Conv2d):\n",[36,39326,39327],{"class":38,"line":17141},[36,39328,39329],{"class":42},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[36,39331,39332,39335,39338,39340,39343],{"class":38,"line":17152},[36,39333,39334],{"class":98},"                nn.init.kaiming_normal_(m.weight,",[36,39336,39337],{"class":5667},"nonlinearity",[36,39339,176],{"class":163},[36,39341,39342],{"class":59},"'relu'",[36,39344,627],{"class":98},[36,39346,39347],{"class":38,"line":17175},[36,39348,39349],{"class":42},"                # 判断b参数是否存在\n",[36,39351,39352,39355,39358,39361,39364,39367],{"class":38,"line":17197},[36,39353,39354],{"class":163},"                if",[36,39356,39357],{"class":98}," m.bias ",[36,39359,39360],{"class":163},"is",[36,39362,39363],{"class":163}," not",[36,39365,39366],{"class":109}," None",[36,39368,4190],{"class":98},[36,39370,39371],{"class":38,"line":17202},[36,39372,39373],{"class":42},"                    # 如果参数不存在的化初始化b=0\n",[36,39375,39376,39379,39381],{"class":38,"line":17208},[36,39377,39378],{"class":98},"                    nn.init.constant_(m.bias,",[36,39380,807],{"class":109},[36,39382,627],{"class":98},[36,39384,39385],{"class":38,"line":17222},[36,39386,39387],{"class":42},"            # 全连接层初始化\n",[36,39389,39390,39393,39395],{"class":38,"line":17235},[36,39391,39392],{"class":163},"            elif",[36,39394,39321],{"class":109},[36,39396,39397],{"class":98},"(m,nn.Linear):\n",[36,39399,39400],{"class":38,"line":17240},[36,39401,39402],{"class":42},"                # 这个初始化方法是利用的是正太分布的方式\n",[36,39404,39405],{"class":38,"line":17254},[36,39406,39407],{"class":42},"                # 均值为0，方差为0.01\n",[36,39409,39410,39413,39415,39417,39420],{"class":38,"line":17259},[36,39411,39412],{"class":98},"                nn.init.normal_(m.weight,",[36,39414,807],{"class":109},[36,39416,992],{"class":98},[36,39418,39419],{"class":109},"0.01",[36,39421,627],{"class":98},[36,39423,39424],{"class":38,"line":17265},[36,39425,39426],{"class":42},"                # 初始化b参数\n",[36,39428,39429,39431,39433,39435,39437,39439],{"class":38,"line":17270},[36,39430,39354],{"class":163},[36,39432,39357],{"class":98},[36,39434,39360],{"class":163},[36,39436,39363],{"class":163},[36,39438,39366],{"class":109},[36,39440,4190],{"class":98},[36,39442,39443,39445,39447],{"class":38,"line":17284},[36,39444,39378],{"class":98},[36,39446,807],{"class":109},[36,39448,627],{"class":98},[36,39450,39451],{"class":38,"line":17289},[36,39452,247],{"emptyLinePlaceholder":246},[36,39454,39455],{"class":38,"line":17294},[36,39456,35598],{"class":42},[36,39458,39459,39461,39463],{"class":38,"line":17308},[36,39460,31234],{"class":163},[36,39462,31526],{"class":55},[36,39464,31529],{"class":98},[36,39466,39467,39469,39471,39473],{"class":38,"line":17320},[36,39468,31534],{"class":98},[36,39470,176],{"class":163},[36,39472,31256],{"class":109},[36,39474,39475],{"class":98},".block1(x)\n",[36,39477,39478,39480,39482,39484],{"class":38,"line":17325},[36,39479,31534],{"class":98},[36,39481,176],{"class":163},[36,39483,31256],{"class":109},[36,39485,39486],{"class":98},".block2(x)\n",[36,39488,39489,39491,39493,39495],{"class":38,"line":17338},[36,39490,31534],{"class":98},[36,39492,176],{"class":163},[36,39494,31256],{"class":109},[36,39496,39497],{"class":98},".block3(x)\n",[36,39499,39500,39502,39504,39506],{"class":38,"line":17343},[36,39501,31534],{"class":98},[36,39503,176],{"class":163},[36,39505,31256],{"class":109},[36,39507,39508],{"class":98},".block4(x)\n",[36,39510,39511,39513,39515,39517],{"class":38,"line":17348},[36,39512,31534],{"class":98},[36,39514,176],{"class":163},[36,39516,31256],{"class":109},[36,39518,39519],{"class":98},".block5(x)\n",[36,39521,39522,39524,39526,39528],{"class":38,"line":17353},[36,39523,31534],{"class":98},[36,39525,176],{"class":163},[36,39527,31256],{"class":109},[36,39529,39530],{"class":98},".block6(x)\n",[36,39532,39533,39535],{"class":38,"line":17366},[36,39534,15191],{"class":163},[36,39536,31642],{"class":98},[36,39538,39539],{"class":38,"line":17371},[36,39540,247],{"emptyLinePlaceholder":246},[36,39542,39543],{"class":38,"line":33066},[36,39544,39545],{"class":42},"# 验证模型\n",[36,39547,39548,39550,39552,39554,39557],{"class":38,"line":33072},[36,39549,2010],{"class":163},[36,39551,31653],{"class":109},[36,39553,3400],{"class":163},[36,39555,39556],{"class":59},"'__main__'",[36,39558,4190],{"class":98},[36,39560,39561,39563,39565,39567,39569,39571,39573,39575,39577],{"class":38,"line":33078},[36,39562,31670],{"class":98},[36,39564,176],{"class":163},[36,39566,30884],{"class":98},[36,39568,31677],{"class":59},[36,39570,2172],{"class":163},[36,39572,31682],{"class":98},[36,39574,2169],{"class":163},[36,39576,30909],{"class":59},[36,39578,627],{"class":98},[36,39580,39581,39583],{"class":38,"line":33084},[36,39582,31732],{"class":109},[36,39584,30918],{"class":98},[36,39586,39587,39589,39591],{"class":38,"line":33090},[36,39588,31722],{"class":98},[36,39590,176],{"class":163},[36,39592,39593],{"class":98},"VGG16().to(device)\n",[36,39595,39596,39598,39600,39602,39604,39606,39608,39610],{"class":38,"line":33101},[36,39597,31732],{"class":109},[36,39599,31735],{"class":98},[36,39601,833],{"class":109},[36,39603,992],{"class":98},[36,39605,31934],{"class":109},[36,39607,992],{"class":98},[36,39609,31934],{"class":109},[36,39611,31748],{"class":98},[571,39613,39614],{"start":46},[574,39615,39616],{},"训练代码",[14,39618,39619],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,39621,39622],{},"解决方式:",[14,39624,39625],{},"①权重初始化",[26,39627,39629],{"className":30811,"code":39628,"language":30813,"meta":31,"style":31},"# 权重初始化,保证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",[33,39630,39631,39636,39641,39653,39658,39666,39671,39684,39689,39703,39708,39717,39722,39731,39736,39741,39754,39759,39773],{"__ignoreMap":31},[36,39632,39633],{"class":38,"line":39},[36,39634,39635],{"class":42},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[36,39637,39638],{"class":38,"line":46},[36,39639,39640],{"class":42},"# 循环遍历模型\n",[36,39642,39643,39645,39647,39649,39651],{"class":38,"line":52},[36,39644,3476],{"class":163},[36,39646,39301],{"class":98},[36,39648,26480],{"class":163},[36,39650,39306],{"class":109},[36,39652,39309],{"class":98},[36,39654,39655],{"class":38,"line":66},[36,39656,39657],{"class":42},"    # print(m)\n",[36,39659,39660,39662,39664],{"class":38,"line":72},[36,39661,3552],{"class":163},[36,39663,39321],{"class":109},[36,39665,39324],{"class":98},[36,39667,39668],{"class":38,"line":82},[36,39669,39670],{"class":42},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[36,39672,39673,39676,39678,39680,39682],{"class":38,"line":88},[36,39674,39675],{"class":98},"        nn.init.kaiming_normal_(m.weight,",[36,39677,39337],{"class":5667},[36,39679,176],{"class":163},[36,39681,39342],{"class":59},[36,39683,627],{"class":98},[36,39685,39686],{"class":38,"line":113},[36,39687,39688],{"class":42},"        # 判断b参数是否存在\n",[36,39690,39691,39693,39695,39697,39699,39701],{"class":38,"line":119},[36,39692,2955],{"class":163},[36,39694,39357],{"class":98},[36,39696,39360],{"class":163},[36,39698,39363],{"class":163},[36,39700,39366],{"class":109},[36,39702,4190],{"class":98},[36,39704,39705],{"class":38,"line":131},[36,39706,39707],{"class":42},"            # 如果参数不存在的化初始化b=0\n",[36,39709,39710,39713,39715],{"class":38,"line":137},[36,39711,39712],{"class":98},"            nn.init.constant_(m.bias,",[36,39714,807],{"class":109},[36,39716,627],{"class":98},[36,39718,39719],{"class":38,"line":147},[36,39720,39721],{"class":42},"    # 全连接层初始化\n",[36,39723,39724,39727,39729],{"class":38,"line":153},[36,39725,39726],{"class":163},"    elif",[36,39728,39321],{"class":109},[36,39730,39397],{"class":98},[36,39732,39733],{"class":38,"line":191},[36,39734,39735],{"class":42},"        # 这个初始化方法是利用的是正太分布的方式\n",[36,39737,39738],{"class":38,"line":197},[36,39739,39740],{"class":42},"        # 均值为0，方差为0.01\n",[36,39742,39743,39746,39748,39750,39752],{"class":38,"line":217},[36,39744,39745],{"class":98},"        nn.init.normal_(m.weight,",[36,39747,807],{"class":109},[36,39749,992],{"class":98},[36,39751,39419],{"class":109},[36,39753,627],{"class":98},[36,39755,39756],{"class":38,"line":223},[36,39757,39758],{"class":42},"        # 初始化b参数\n",[36,39760,39761,39763,39765,39767,39769,39771],{"class":38,"line":243},[36,39762,2955],{"class":163},[36,39764,39357],{"class":98},[36,39766,39360],{"class":163},[36,39768,39363],{"class":163},[36,39770,39366],{"class":109},[36,39772,4190],{"class":98},[36,39774,39775,39777,39779],{"class":38,"line":250},[36,39776,39712],{"class":98},[36,39778,807],{"class":109},[36,39780,627],{"class":98},[14,39782,39783],{},"②尽可能地增加批次",[14,39785,39786],{},"训练完整代码：",[26,39788,39789],{"className":30811,"code":38332,"language":30813,"meta":31,"style":31},[33,39790,39791,39797,39807,39817,39827,39831,39847,39855,39873,39877,39881,39891,39927,39931,39967,39971,39999,40003,40007,40017,40053,40057,40093,40097,40125,40129,40133,40143,40179,40183,40219,40223,40259,40263,40291,40295,40299,40309,40345,40349,40385,40389,40425,40429,40457,40461,40465,40475,40511,40515,40551,40555,40591,40595,40623,40627,40631,40641,40645,40649,40653,40673,40677,40689,40693,40705,40709,40713,40717,40721,40733,40737,40745,40749,40761,40765,40779,40783,40791,40795,40803,40807,40811,40823,40827,40841,40849,40853,40857,40865,40875,40885,40895,40905,40915,40925,40931,40935,40939,40951,40971,40977,40985],{"__ignoreMap":31},[36,39792,39793,39795],{"class":38,"line":39},[36,39794,30825],{"class":163},[36,39796,30828],{"class":98},[36,39798,39799,39801,39803,39805],{"class":38,"line":46},[36,39800,31170],{"class":163},[36,39802,38347],{"class":98},[36,39804,30825],{"class":163},[36,39806,38352],{"class":98},[36,39808,39809,39811,39813,39815],{"class":38,"line":52},[36,39810,31170],{"class":163},[36,39812,31173],{"class":98},[36,39814,30825],{"class":163},[36,39816,31178],{"class":98},[36,39818,39819,39821,39823,39825],{"class":38,"line":66},[36,39820,31170],{"class":163},[36,39822,31190],{"class":98},[36,39824,30825],{"class":163},[36,39826,31195],{"class":98},[36,39828,39829],{"class":38,"line":72},[36,39830,247],{"emptyLinePlaceholder":246},[36,39832,39833,39835,39837,39839,39841,39843,39845],{"class":38,"line":82},[36,39834,15133],{"class":163},[36,39836,38383],{"class":55},[36,39838,621],{"class":98},[36,39840,31211],{"class":55},[36,39842,1172],{"class":98},[36,39844,31216],{"class":55},[36,39846,31219],{"class":98},[36,39848,39849,39851,39853],{"class":38,"line":88},[36,39850,31234],{"class":163},[36,39852,31237],{"class":109},[36,39854,31240],{"class":98},[36,39856,39857,39859,39861,39863,39865,39867,39869,39871],{"class":38,"line":113},[36,39858,31250],{"class":109},[36,39860,621],{"class":98},[36,39862,38410],{"class":109},[36,39864,12874],{"class":98},[36,39866,31256],{"class":109},[36,39868,31259],{"class":98},[36,39870,31262],{"class":109},[36,39872,2435],{"class":98},[36,39874,39875],{"class":38,"line":119},[36,39876,38425],{"class":42},[36,39878,39879],{"class":38,"line":131},[36,39880,38430],{"class":42},[36,39882,39883,39885,39887,39889],{"class":38,"line":137},[36,39884,31278],{"class":109},[36,39886,38437],{"class":98},[36,39888,176],{"class":163},[36,39890,38442],{"class":98},[36,39892,39893,39895,39897,39899,39901,39903,39905,39907,39909,39911,39913,39915,39917,39919,39921,39923,39925],{"class":38,"line":147},[36,39894,38447],{"class":98},[36,39896,31289],{"class":5667},[36,39898,176],{"class":163},[36,39900,833],{"class":109},[36,39902,992],{"class":98},[36,39904,31298],{"class":5667},[36,39906,176],{"class":163},[36,39908,819],{"class":109},[36,39910,992],{"class":98},[36,39912,31307],{"class":5667},[36,39914,176],{"class":163},[36,39916,689],{"class":109},[36,39918,992],{"class":98},[36,39920,31316],{"class":5667},[36,39922,176],{"class":163},[36,39924,833],{"class":109},[36,39926,38480],{"class":98},[36,39928,39929],{"class":38,"line":153},[36,39930,38485],{"class":98},[36,39932,39933,39935,39937,39939,39941,39943,39945,39947,39949,39951,39953,39955,39957,39959,39961,39963,39965],{"class":38,"line":191},[36,39934,38447],{"class":98},[36,39936,31289],{"class":5667},[36,39938,176],{"class":163},[36,39940,819],{"class":109},[36,39942,992],{"class":98},[36,39944,31298],{"class":5667},[36,39946,176],{"class":163},[36,39948,819],{"class":109},[36,39950,992],{"class":98},[36,39952,31307],{"class":5667},[36,39954,176],{"class":163},[36,39956,689],{"class":109},[36,39958,992],{"class":98},[36,39960,31316],{"class":5667},[36,39962,176],{"class":163},[36,39964,833],{"class":109},[36,39966,38480],{"class":98},[36,39968,39969],{"class":38,"line":197},[36,39970,38485],{"class":98},[36,39972,39973,39975,39977,39979,39981,39983,39985,39987,39989,39991,39993,39995,39997],{"class":38,"line":217},[36,39974,38530],{"class":98},[36,39976,31307],{"class":5667},[36,39978,176],{"class":163},[36,39980,694],{"class":109},[36,39982,992],{"class":98},[36,39984,31362],{"class":5667},[36,39986,176],{"class":163},[36,39988,694],{"class":109},[36,39990,992],{"class":98},[36,39992,31316],{"class":5667},[36,39994,176],{"class":163},[36,39996,807],{"class":109},[36,39998,627],{"class":98},[36,40000,40001],{"class":38,"line":223},[36,40002,38559],{"class":98},[36,40004,40005],{"class":38,"line":243},[36,40006,38564],{"class":42},[36,40008,40009,40011,40013,40015],{"class":38,"line":250},[36,40010,31278],{"class":109},[36,40012,38571],{"class":98},[36,40014,176],{"class":163},[36,40016,38442],{"class":98},[36,40018,40019,40021,40023,40025,40027,40029,40031,40033,40035,40037,40039,40041,40043,40045,40047,40049,40051],{"class":38,"line":256},[36,40020,38447],{"class":98},[36,40022,31289],{"class":5667},[36,40024,176],{"class":163},[36,40026,819],{"class":109},[36,40028,992],{"class":98},[36,40030,31298],{"class":5667},[36,40032,176],{"class":163},[36,40034,32503],{"class":109},[36,40036,992],{"class":98},[36,40038,31307],{"class":5667},[36,40040,176],{"class":163},[36,40042,689],{"class":109},[36,40044,992],{"class":98},[36,40046,31316],{"class":5667},[36,40048,176],{"class":163},[36,40050,833],{"class":109},[36,40052,38480],{"class":98},[36,40054,40055],{"class":38,"line":273},[36,40056,38485],{"class":98},[36,40058,40059,40061,40063,40065,40067,40069,40071,40073,40075,40077,40079,40081,40083,40085,40087,40089,40091],{"class":38,"line":278},[36,40060,38447],{"class":98},[36,40062,31289],{"class":5667},[36,40064,176],{"class":163},[36,40066,32503],{"class":109},[36,40068,992],{"class":98},[36,40070,31298],{"class":5667},[36,40072,176],{"class":163},[36,40074,32503],{"class":109},[36,40076,992],{"class":98},[36,40078,31307],{"class":5667},[36,40080,176],{"class":163},[36,40082,689],{"class":109},[36,40084,992],{"class":98},[36,40086,31316],{"class":5667},[36,40088,176],{"class":163},[36,40090,833],{"class":109},[36,40092,38480],{"class":98},[36,40094,40095],{"class":38,"line":284},[36,40096,38485],{"class":98},[36,40098,40099,40101,40103,40105,40107,40109,40111,40113,40115,40117,40119,40121,40123],{"class":38,"line":315},[36,40100,38530],{"class":98},[36,40102,31307],{"class":5667},[36,40104,176],{"class":163},[36,40106,694],{"class":109},[36,40108,992],{"class":98},[36,40110,31362],{"class":5667},[36,40112,176],{"class":163},[36,40114,694],{"class":109},[36,40116,992],{"class":98},[36,40118,31316],{"class":5667},[36,40120,176],{"class":163},[36,40122,807],{"class":109},[36,40124,627],{"class":98},[36,40126,40127],{"class":38,"line":320},[36,40128,38559],{"class":98},[36,40130,40131],{"class":38,"line":326},[36,40132,38692],{"class":42},[36,40134,40135,40137,40139,40141],{"class":38,"line":343},[36,40136,31278],{"class":109},[36,40138,38699],{"class":98},[36,40140,176],{"class":163},[36,40142,38442],{"class":98},[36,40144,40145,40147,40149,40151,40153,40155,40157,40159,40161,40163,40165,40167,40169,40171,40173,40175,40177],{"class":38,"line":348},[36,40146,38447],{"class":98},[36,40148,31289],{"class":5667},[36,40150,176],{"class":163},[36,40152,32503],{"class":109},[36,40154,992],{"class":98},[36,40156,31298],{"class":5667},[36,40158,176],{"class":163},[36,40160,35303],{"class":109},[36,40162,992],{"class":98},[36,40164,31307],{"class":5667},[36,40166,176],{"class":163},[36,40168,689],{"class":109},[36,40170,992],{"class":98},[36,40172,31316],{"class":5667},[36,40174,176],{"class":163},[36,40176,833],{"class":109},[36,40178,38480],{"class":98},[36,40180,40181],{"class":38,"line":354},[36,40182,38485],{"class":98},[36,40184,40185,40187,40189,40191,40193,40195,40197,40199,40201,40203,40205,40207,40209,40211,40213,40215,40217],{"class":38,"line":370},[36,40186,38447],{"class":98},[36,40188,31289],{"class":5667},[36,40190,176],{"class":163},[36,40192,35303],{"class":109},[36,40194,992],{"class":98},[36,40196,31298],{"class":5667},[36,40198,176],{"class":163},[36,40200,35303],{"class":109},[36,40202,992],{"class":98},[36,40204,31307],{"class":5667},[36,40206,176],{"class":163},[36,40208,689],{"class":109},[36,40210,992],{"class":98},[36,40212,31316],{"class":5667},[36,40214,176],{"class":163},[36,40216,833],{"class":109},[36,40218,38480],{"class":98},[36,40220,40221],{"class":38,"line":375},[36,40222,38485],{"class":98},[36,40224,40225,40227,40229,40231,40233,40235,40237,40239,40241,40243,40245,40247,40249,40251,40253,40255,40257],{"class":38,"line":381},[36,40226,38447],{"class":98},[36,40228,31289],{"class":5667},[36,40230,176],{"class":163},[36,40232,35303],{"class":109},[36,40234,992],{"class":98},[36,40236,31298],{"class":5667},[36,40238,176],{"class":163},[36,40240,35303],{"class":109},[36,40242,992],{"class":98},[36,40244,31307],{"class":5667},[36,40246,176],{"class":163},[36,40248,689],{"class":109},[36,40250,992],{"class":98},[36,40252,31316],{"class":5667},[36,40254,176],{"class":163},[36,40256,833],{"class":109},[36,40258,38480],{"class":98},[36,40260,40261],{"class":38,"line":399},[36,40262,38485],{"class":98},[36,40264,40265,40267,40269,40271,40273,40275,40277,40279,40281,40283,40285,40287,40289],{"class":38,"line":404},[36,40266,38530],{"class":98},[36,40268,31307],{"class":5667},[36,40270,176],{"class":163},[36,40272,694],{"class":109},[36,40274,992],{"class":98},[36,40276,31362],{"class":5667},[36,40278,176],{"class":163},[36,40280,694],{"class":109},[36,40282,992],{"class":98},[36,40284,31316],{"class":5667},[36,40286,176],{"class":163},[36,40288,807],{"class":109},[36,40290,627],{"class":98},[36,40292,40293],{"class":38,"line":410},[36,40294,38559],{"class":98},[36,40296,40297],{"class":38,"line":423},[36,40298,38860],{"class":42},[36,40300,40301,40303,40305,40307],{"class":38,"line":436},[36,40302,31278],{"class":109},[36,40304,38867],{"class":98},[36,40306,176],{"class":163},[36,40308,38442],{"class":98},[36,40310,40311,40313,40315,40317,40319,40321,40323,40325,40327,40329,40331,40333,40335,40337,40339,40341,40343],{"class":38,"line":441},[36,40312,38447],{"class":98},[36,40314,31289],{"class":5667},[36,40316,176],{"class":163},[36,40318,35303],{"class":109},[36,40320,992],{"class":98},[36,40322,31298],{"class":5667},[36,40324,176],{"class":163},[36,40326,38890],{"class":109},[36,40328,992],{"class":98},[36,40330,31307],{"class":5667},[36,40332,176],{"class":163},[36,40334,689],{"class":109},[36,40336,992],{"class":98},[36,40338,31316],{"class":5667},[36,40340,176],{"class":163},[36,40342,833],{"class":109},[36,40344,38480],{"class":98},[36,40346,40347],{"class":38,"line":447},[36,40348,38485],{"class":98},[36,40350,40351,40353,40355,40357,40359,40361,40363,40365,40367,40369,40371,40373,40375,40377,40379,40381,40383],{"class":38,"line":465},[36,40352,38447],{"class":98},[36,40354,31289],{"class":5667},[36,40356,176],{"class":163},[36,40358,38890],{"class":109},[36,40360,992],{"class":98},[36,40362,31298],{"class":5667},[36,40364,176],{"class":163},[36,40366,38890],{"class":109},[36,40368,992],{"class":98},[36,40370,31307],{"class":5667},[36,40372,176],{"class":163},[36,40374,689],{"class":109},[36,40376,992],{"class":98},[36,40378,31316],{"class":5667},[36,40380,176],{"class":163},[36,40382,833],{"class":109},[36,40384,38480],{"class":98},[36,40386,40387],{"class":38,"line":470},[36,40388,38485],{"class":98},[36,40390,40391,40393,40395,40397,40399,40401,40403,40405,40407,40409,40411,40413,40415,40417,40419,40421,40423],{"class":38,"line":476},[36,40392,38447],{"class":98},[36,40394,31289],{"class":5667},[36,40396,176],{"class":163},[36,40398,38890],{"class":109},[36,40400,992],{"class":98},[36,40402,31298],{"class":5667},[36,40404,176],{"class":163},[36,40406,38890],{"class":109},[36,40408,992],{"class":98},[36,40410,31307],{"class":5667},[36,40412,176],{"class":163},[36,40414,689],{"class":109},[36,40416,992],{"class":98},[36,40418,31316],{"class":5667},[36,40420,176],{"class":163},[36,40422,833],{"class":109},[36,40424,38480],{"class":98},[36,40426,40427],{"class":38,"line":496},[36,40428,38485],{"class":98},[36,40430,40431,40433,40435,40437,40439,40441,40443,40445,40447,40449,40451,40453,40455],{"class":38,"line":501},[36,40432,38530],{"class":98},[36,40434,31307],{"class":5667},[36,40436,176],{"class":163},[36,40438,694],{"class":109},[36,40440,992],{"class":98},[36,40442,31362],{"class":5667},[36,40444,176],{"class":163},[36,40446,694],{"class":109},[36,40448,992],{"class":98},[36,40450,31316],{"class":5667},[36,40452,176],{"class":163},[36,40454,807],{"class":109},[36,40456,627],{"class":98},[36,40458,40459],{"class":38,"line":507},[36,40460,38559],{"class":98},[36,40462,40463],{"class":38,"line":517},[36,40464,39029],{"class":42},[36,40466,40467,40469,40471,40473],{"class":38,"line":522},[36,40468,31278],{"class":109},[36,40470,39036],{"class":98},[36,40472,176],{"class":163},[36,40474,38442],{"class":98},[36,40476,40477,40479,40481,40483,40485,40487,40489,40491,40493,40495,40497,40499,40501,40503,40505,40507,40509],{"class":38,"line":528},[36,40478,38447],{"class":98},[36,40480,31289],{"class":5667},[36,40482,176],{"class":163},[36,40484,38890],{"class":109},[36,40486,992],{"class":98},[36,40488,31298],{"class":5667},[36,40490,176],{"class":163},[36,40492,38890],{"class":109},[36,40494,992],{"class":98},[36,40496,31307],{"class":5667},[36,40498,176],{"class":163},[36,40500,689],{"class":109},[36,40502,992],{"class":98},[36,40504,31316],{"class":5667},[36,40506,176],{"class":163},[36,40508,833],{"class":109},[36,40510,38480],{"class":98},[36,40512,40513],{"class":38,"line":10203},[36,40514,38485],{"class":98},[36,40516,40517,40519,40521,40523,40525,40527,40529,40531,40533,40535,40537,40539,40541,40543,40545,40547,40549],{"class":38,"line":10227},[36,40518,38447],{"class":98},[36,40520,31289],{"class":5667},[36,40522,176],{"class":163},[36,40524,38890],{"class":109},[36,40526,992],{"class":98},[36,40528,31298],{"class":5667},[36,40530,176],{"class":163},[36,40532,38890],{"class":109},[36,40534,992],{"class":98},[36,40536,31307],{"class":5667},[36,40538,176],{"class":163},[36,40540,689],{"class":109},[36,40542,992],{"class":98},[36,40544,31316],{"class":5667},[36,40546,176],{"class":163},[36,40548,833],{"class":109},[36,40550,38480],{"class":98},[36,40552,40553],{"class":38,"line":10232},[36,40554,38485],{"class":98},[36,40556,40557,40559,40561,40563,40565,40567,40569,40571,40573,40575,40577,40579,40581,40583,40585,40587,40589],{"class":38,"line":10237},[36,40558,38447],{"class":98},[36,40560,31289],{"class":5667},[36,40562,176],{"class":163},[36,40564,38890],{"class":109},[36,40566,992],{"class":98},[36,40568,31298],{"class":5667},[36,40570,176],{"class":163},[36,40572,38890],{"class":109},[36,40574,992],{"class":98},[36,40576,31307],{"class":5667},[36,40578,176],{"class":163},[36,40580,689],{"class":109},[36,40582,992],{"class":98},[36,40584,31316],{"class":5667},[36,40586,176],{"class":163},[36,40588,833],{"class":109},[36,40590,38480],{"class":98},[36,40592,40593],{"class":38,"line":10242},[36,40594,38485],{"class":98},[36,40596,40597,40599,40601,40603,40605,40607,40609,40611,40613,40615,40617,40619,40621],{"class":38,"line":10251},[36,40598,38530],{"class":98},[36,40600,31307],{"class":5667},[36,40602,176],{"class":163},[36,40604,694],{"class":109},[36,40606,992],{"class":98},[36,40608,31362],{"class":5667},[36,40610,176],{"class":163},[36,40612,694],{"class":109},[36,40614,992],{"class":98},[36,40616,31316],{"class":5667},[36,40618,176],{"class":163},[36,40620,807],{"class":109},[36,40622,627],{"class":98},[36,40624,40625],{"class":38,"line":10256},[36,40626,38559],{"class":98},[36,40628,40629],{"class":38,"line":10262},[36,40630,39197],{"class":42},[36,40632,40633,40635,40637,40639],{"class":38,"line":10283},[36,40634,31278],{"class":109},[36,40636,39204],{"class":98},[36,40638,176],{"class":163},[36,40640,38442],{"class":98},[36,40642,40643],{"class":38,"line":10289},[36,40644,39213],{"class":42},[36,40646,40647],{"class":38,"line":10303},[36,40648,39218],{"class":42},[36,40650,40651],{"class":38,"line":10309},[36,40652,39223],{"class":98},[36,40654,40655,40657,40659,40661,40663,40665,40667,40669,40671],{"class":38,"line":10336},[36,40656,39228],{"class":98},[36,40658,983],{"class":109},[36,40660,1069],{"class":163},[36,40662,983],{"class":109},[36,40664,1069],{"class":163},[36,40666,38890],{"class":109},[36,40668,992],{"class":98},[36,40670,35303],{"class":109},[36,40672,38480],{"class":98},[36,40674,40675],{"class":38,"line":10345},[36,40676,38485],{"class":98},[36,40678,40679,40681,40683,40685,40687],{"class":38,"line":10351},[36,40680,39228],{"class":98},[36,40682,35303],{"class":109},[36,40684,992],{"class":98},[36,40686,32503],{"class":109},[36,40688,38480],{"class":98},[36,40690,40691],{"class":38,"line":10359},[36,40692,38485],{"class":98},[36,40694,40695,40697,40699,40701,40703],{"class":38,"line":10364},[36,40696,39228],{"class":98},[36,40698,32503],{"class":109},[36,40700,992],{"class":98},[36,40702,1060],{"class":109},[36,40704,627],{"class":98},[36,40706,40707],{"class":38,"line":17043},[36,40708,38559],{"class":98},[36,40710,40711],{"class":38,"line":17049},[36,40712,247],{"emptyLinePlaceholder":246},[36,40714,40715],{"class":38,"line":17072},[36,40716,39289],{"class":42},[36,40718,40719],{"class":38,"line":17078},[36,40720,39294],{"class":42},[36,40722,40723,40725,40727,40729,40731],{"class":38,"line":17101},[36,40724,3854],{"class":163},[36,40726,39301],{"class":98},[36,40728,26480],{"class":163},[36,40730,39306],{"class":109},[36,40732,39309],{"class":98},[36,40734,40735],{"class":38,"line":17115},[36,40736,39314],{"class":42},[36,40738,40739,40741,40743],{"class":38,"line":17135},[36,40740,5093],{"class":163},[36,40742,39321],{"class":109},[36,40744,39324],{"class":98},[36,40746,40747],{"class":38,"line":17141},[36,40748,39329],{"class":42},[36,40750,40751,40753,40755,40757,40759],{"class":38,"line":17152},[36,40752,39334],{"class":98},[36,40754,39337],{"class":5667},[36,40756,176],{"class":163},[36,40758,39342],{"class":59},[36,40760,627],{"class":98},[36,40762,40763],{"class":38,"line":17175},[36,40764,39349],{"class":42},[36,40766,40767,40769,40771,40773,40775,40777],{"class":38,"line":17197},[36,40768,39354],{"class":163},[36,40770,39357],{"class":98},[36,40772,39360],{"class":163},[36,40774,39363],{"class":163},[36,40776,39366],{"class":109},[36,40778,4190],{"class":98},[36,40780,40781],{"class":38,"line":17202},[36,40782,39373],{"class":42},[36,40784,40785,40787,40789],{"class":38,"line":17208},[36,40786,39378],{"class":98},[36,40788,807],{"class":109},[36,40790,627],{"class":98},[36,40792,40793],{"class":38,"line":17222},[36,40794,39387],{"class":42},[36,40796,40797,40799,40801],{"class":38,"line":17235},[36,40798,39392],{"class":163},[36,40800,39321],{"class":109},[36,40802,39397],{"class":98},[36,40804,40805],{"class":38,"line":17240},[36,40806,39402],{"class":42},[36,40808,40809],{"class":38,"line":17254},[36,40810,39407],{"class":42},[36,40812,40813,40815,40817,40819,40821],{"class":38,"line":17259},[36,40814,39412],{"class":98},[36,40816,807],{"class":109},[36,40818,992],{"class":98},[36,40820,39419],{"class":109},[36,40822,627],{"class":98},[36,40824,40825],{"class":38,"line":17265},[36,40826,39426],{"class":42},[36,40828,40829,40831,40833,40835,40837,40839],{"class":38,"line":17270},[36,40830,39354],{"class":163},[36,40832,39357],{"class":98},[36,40834,39360],{"class":163},[36,40836,39363],{"class":163},[36,40838,39366],{"class":109},[36,40840,4190],{"class":98},[36,40842,40843,40845,40847],{"class":38,"line":17284},[36,40844,39378],{"class":98},[36,40846,807],{"class":109},[36,40848,627],{"class":98},[36,40850,40851],{"class":38,"line":17289},[36,40852,247],{"emptyLinePlaceholder":246},[36,40854,40855],{"class":38,"line":17294},[36,40856,35598],{"class":42},[36,40858,40859,40861,40863],{"class":38,"line":17308},[36,40860,31234],{"class":163},[36,40862,31526],{"class":55},[36,40864,31529],{"class":98},[36,40866,40867,40869,40871,40873],{"class":38,"line":17320},[36,40868,31534],{"class":98},[36,40870,176],{"class":163},[36,40872,31256],{"class":109},[36,40874,39475],{"class":98},[36,40876,40877,40879,40881,40883],{"class":38,"line":17325},[36,40878,31534],{"class":98},[36,40880,176],{"class":163},[36,40882,31256],{"class":109},[36,40884,39486],{"class":98},[36,40886,40887,40889,40891,40893],{"class":38,"line":17338},[36,40888,31534],{"class":98},[36,40890,176],{"class":163},[36,40892,31256],{"class":109},[36,40894,39497],{"class":98},[36,40896,40897,40899,40901,40903],{"class":38,"line":17343},[36,40898,31534],{"class":98},[36,40900,176],{"class":163},[36,40902,31256],{"class":109},[36,40904,39508],{"class":98},[36,40906,40907,40909,40911,40913],{"class":38,"line":17348},[36,40908,31534],{"class":98},[36,40910,176],{"class":163},[36,40912,31256],{"class":109},[36,40914,39519],{"class":98},[36,40916,40917,40919,40921,40923],{"class":38,"line":17353},[36,40918,31534],{"class":98},[36,40920,176],{"class":163},[36,40922,31256],{"class":109},[36,40924,39530],{"class":98},[36,40926,40927,40929],{"class":38,"line":17366},[36,40928,15191],{"class":163},[36,40930,31642],{"class":98},[36,40932,40933],{"class":38,"line":17371},[36,40934,247],{"emptyLinePlaceholder":246},[36,40936,40937],{"class":38,"line":33066},[36,40938,39545],{"class":42},[36,40940,40941,40943,40945,40947,40949],{"class":38,"line":33072},[36,40942,2010],{"class":163},[36,40944,31653],{"class":109},[36,40946,3400],{"class":163},[36,40948,39556],{"class":59},[36,40950,4190],{"class":98},[36,40952,40953,40955,40957,40959,40961,40963,40965,40967,40969],{"class":38,"line":33078},[36,40954,31670],{"class":98},[36,40956,176],{"class":163},[36,40958,30884],{"class":98},[36,40960,31677],{"class":59},[36,40962,2172],{"class":163},[36,40964,31682],{"class":98},[36,40966,2169],{"class":163},[36,40968,30909],{"class":59},[36,40970,627],{"class":98},[36,40972,40973,40975],{"class":38,"line":33084},[36,40974,31732],{"class":109},[36,40976,30918],{"class":98},[36,40978,40979,40981,40983],{"class":38,"line":33090},[36,40980,31722],{"class":98},[36,40982,176],{"class":163},[36,40984,39593],{"class":98},[36,40986,40987,40989,40991,40993,40995,40997,40999,41001],{"class":38,"line":33101},[36,40988,31732],{"class":109},[36,40990,31735],{"class":98},[36,40992,833],{"class":109},[36,40994,992],{"class":98},[36,40996,31934],{"class":109},[36,40998,992],{"class":98},[36,41000,31934],{"class":109},[36,41002,31748],{"class":98},[571,41004,41005],{"start":52},[574,41006,41007],{},"测试代码",[26,41009,41011],{"className":30811,"code":41010,"language":30813,"meta":31,"style":31},"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",[33,41012,41013,41019,41029,41039,41043,41053,41064,41068,41072,41076,41084,41100,41110,41126,41136,41150,41154,41164,41174,41184,41190,41194,41198,41206,41210,41226,41234,41238,41242,41250,41258,41262,41266,41270,41274,41280,41284,41294,41302,41310,41314,41318,41322,41330,41334,41350,41354,41358,41362,41374,41378,41390,41394,41398,41410,41414,41424,41428,41432,41444,41448,41457,41461,41465,41473,41477,41485,41489,41493,41497,41501,41505,41521,41529,41533,41537,41585,41591,41595,41605,41613,41621,41625,41629,41633,41637,41645,41649,41665,41669,41677,41685],{"__ignoreMap":31},[36,41014,41015,41017],{"class":38,"line":39},[36,41016,30825],{"class":163},[36,41018,30828],{"class":98},[36,41020,41021,41023,41025,41027],{"class":38,"line":46},[36,41022,30825],{"class":163},[36,41024,31848],{"class":98},[36,41026,31816],{"class":163},[36,41028,31853],{"class":98},[36,41030,41031,41033,41035,41037],{"class":38,"line":52},[36,41032,31170],{"class":163},[36,41034,31831],{"class":98},[36,41036,30825],{"class":163},[36,41038,31836],{"class":98},[36,41040,41041],{"class":38,"line":66},[36,41042,34355],{"class":42},[36,41044,41045,41047,41049,41051],{"class":38,"line":72},[36,41046,31170],{"class":163},[36,41048,31801],{"class":98},[36,41050,30825],{"class":163},[36,41052,31806],{"class":98},[36,41054,41055,41057,41059,41061],{"class":38,"line":82},[36,41056,31170],{"class":163},[36,41058,32347],{"class":98},[36,41060,30825],{"class":163},[36,41062,41063],{"class":109}," VGG16\n",[36,41065,41066],{"class":38,"line":88},[36,41067,247],{"emptyLinePlaceholder":246},[36,41069,41070],{"class":38,"line":113},[36,41071,247],{"emptyLinePlaceholder":246},[36,41073,41074],{"class":38,"line":119},[36,41075,34384],{"class":42},[36,41077,41078,41080,41082],{"class":38,"line":131},[36,41079,32380],{"class":163},[36,41081,34391],{"class":55},[36,41083,32386],{"class":98},[36,41085,41086,41088,41090,41092,41094,41096,41098],{"class":38,"line":137},[36,41087,34398],{"class":98},[36,41089,176],{"class":163},[36,41091,31888],{"class":98},[36,41093,31891],{"class":5667},[36,41095,176],{"class":163},[36,41097,31896],{"class":59},[36,41099,31899],{"class":98},[36,41101,41102,41104,41106,41108],{"class":38,"line":147},[36,41103,34415],{"class":5667},[36,41105,176],{"class":163},[36,41107,34420],{"class":109},[36,41109,31899],{"class":98},[36,41111,41112,41114,41116,41118,41120,41122,41124],{"class":38,"line":153},[36,41113,34427],{"class":5667},[36,41115,176],{"class":163},[36,41117,31926],{"class":98},[36,41119,31929],{"class":5667},[36,41121,176],{"class":163},[36,41123,31934],{"class":109},[36,41125,31937],{"class":98},[36,41127,41128,41130,41132,41134],{"class":38,"line":191},[36,41129,34444],{"class":5667},[36,41131,176],{"class":163},[36,41133,31909],{"class":109},[36,41135,627],{"class":98},[36,41137,41138,41140,41142,41144,41146,41148],{"class":38,"line":197},[36,41139,34455],{"class":98},[36,41141,176],{"class":163},[36,41143,31967],{"class":98},[36,41145,31970],{"class":5667},[36,41147,176],{"class":163},[36,41149,34466],{"class":98},[36,41151,41152],{"class":38,"line":217},[36,41153,34471],{"class":42},[36,41155,41156,41158,41160,41162],{"class":38,"line":223},[36,41157,34476],{"class":5667},[36,41159,176],{"class":163},[36,41161,833],{"class":109},[36,41163,31899],{"class":98},[36,41165,41166,41168,41170,41172],{"class":38,"line":243},[36,41167,34487],{"class":5667},[36,41169,176],{"class":163},[36,41171,31909],{"class":109},[36,41173,31899],{"class":98},[36,41175,41176,41178,41180,41182],{"class":38,"line":250},[36,41177,34498],{"class":5667},[36,41179,176],{"class":163},[36,41181,807],{"class":109},[36,41183,627],{"class":98},[36,41185,41186,41188],{"class":38,"line":256},[36,41187,4541],{"class":163},[36,41189,34511],{"class":98},[36,41191,41192],{"class":38,"line":273},[36,41193,247],{"emptyLinePlaceholder":246},[36,41195,41196],{"class":38,"line":278},[36,41197,34520],{"class":42},[36,41199,41200,41202,41204],{"class":38,"line":284},[36,41201,32380],{"class":163},[36,41203,34527],{"class":55},[36,41205,34530],{"class":98},[36,41207,41208],{"class":38,"line":315},[36,41209,34535],{"class":42},[36,41211,41212,41214,41216,41218,41220,41222,41224],{"class":38,"line":320},[36,41213,31670],{"class":98},[36,41215,176],{"class":163},[36,41217,31677],{"class":59},[36,41219,2172],{"class":163},[36,41221,31682],{"class":98},[36,41223,2169],{"class":163},[36,41225,34552],{"class":59},[36,41227,41228,41230,41232],{"class":38,"line":326},[36,41229,31722],{"class":98},[36,41231,176],{"class":163},[36,41233,32722],{"class":98},[36,41235,41236],{"class":38,"line":343},[36,41237,247],{"emptyLinePlaceholder":246},[36,41239,41240],{"class":38,"line":348},[36,41241,34569],{"class":42},[36,41243,41244,41246,41248],{"class":38,"line":354},[36,41245,34574],{"class":98},[36,41247,176],{"class":163},[36,41249,32775],{"class":109},[36,41251,41252,41254,41256],{"class":38,"line":370},[36,41253,34583],{"class":98},[36,41255,176],{"class":163},[36,41257,3536],{"class":109},[36,41259,41260],{"class":38,"line":375},[36,41261,247],{"emptyLinePlaceholder":246},[36,41263,41264],{"class":38,"line":381},[36,41265,34596],{"class":42},[36,41267,41268],{"class":38,"line":399},[36,41269,34601],{"class":42},[36,41271,41272],{"class":38,"line":404},[36,41273,34606],{"class":42},[36,41275,41276,41278],{"class":38,"line":410},[36,41277,34611],{"class":163},[36,41279,33317],{"class":98},[36,41281,41282],{"class":38,"line":423},[36,41283,34618],{"class":42},[36,41285,41286,41288,41290,41292],{"class":38,"line":436},[36,41287,3854],{"class":163},[36,41289,34625],{"class":98},[36,41291,26480],{"class":163},[36,41293,34630],{"class":98},[36,41295,41296,41298,41300],{"class":38,"line":441},[36,41297,34635],{"class":98},[36,41299,176],{"class":163},[36,41301,34640],{"class":98},[36,41303,41304,41306,41308],{"class":38,"line":447},[36,41305,34645],{"class":98},[36,41307,176],{"class":163},[36,41309,34650],{"class":98},[36,41311,41312],{"class":38,"line":465},[36,41313,34655],{"class":42},[36,41315,41316],{"class":38,"line":470},[36,41317,33308],{"class":98},[36,41319,41320],{"class":38,"line":476},[36,41321,34664],{"class":42},[36,41323,41324,41326,41328],{"class":38,"line":496},[36,41325,33093],{"class":98},[36,41327,176],{"class":163},[36,41329,34673],{"class":98},[36,41331,41332],{"class":38,"line":501},[36,41333,34678],{"class":42},[36,41335,41336,41338,41340,41342,41344,41346,41348],{"class":38,"line":507},[36,41337,33110],{"class":98},[36,41339,176],{"class":163},[36,41341,33115],{"class":98},[36,41343,33118],{"class":5667},[36,41345,176],{"class":163},[36,41347,833],{"class":109},[36,41349,627],{"class":98},[36,41351,41352],{"class":38,"line":517},[36,41353,34699],{"class":42},[36,41355,41356],{"class":38,"line":522},[36,41357,34704],{"class":42},[36,41359,41360],{"class":38,"line":528},[36,41361,34709],{"class":42},[36,41363,41364,41366,41368,41370,41372],{"class":38,"line":10203},[36,41365,34714],{"class":98},[36,41367,9918],{"class":163},[36,41369,33220],{"class":98},[36,41371,3400],{"class":163},[36,41373,34723],{"class":98},[36,41375,41376],{"class":38,"line":10227},[36,41377,34728],{"class":42},[36,41379,41380,41382,41384,41386,41388],{"class":38,"line":10232},[36,41381,34733],{"class":98},[36,41383,9918],{"class":163},[36,41385,34738],{"class":98},[36,41387,807],{"class":109},[36,41389,627],{"class":98},[36,41391,41392],{"class":38,"line":10237},[36,41393,247],{"emptyLinePlaceholder":246},[36,41395,41396],{"class":38,"line":10242},[36,41397,34751],{"class":42},[36,41399,41400,41402,41404,41406,41408],{"class":38,"line":10251},[36,41401,34756],{"class":98},[36,41403,176],{"class":163},[36,41405,34761],{"class":98},[36,41407,1198],{"class":163},[36,41409,34766],{"class":98},[36,41411,41412],{"class":38,"line":10256},[36,41413,34771],{"class":42},[36,41415,41416,41418,41420,41422],{"class":38,"line":10262},[36,41417,32884],{"class":109},[36,41419,621],{"class":98},[36,41421,34780],{"class":59},[36,41423,34783],{"class":98},[36,41425,41426],{"class":38,"line":10283},[36,41427,247],{"emptyLinePlaceholder":246},[36,41429,41430],{"class":38,"line":10289},[36,41431,34792],{"class":42},[36,41433,41434,41436,41438,41440,41442],{"class":38,"line":10303},[36,41435,2010],{"class":163},[36,41437,31653],{"class":109},[36,41439,3400],{"class":163},[36,41441,31658],{"class":59},[36,41443,4190],{"class":98},[36,41445,41446],{"class":38,"line":10309},[36,41447,34809],{"class":42},[36,41449,41450,41452,41454],{"class":38,"line":10336},[36,41451,31722],{"class":98},[36,41453,176],{"class":163},[36,41455,41456],{"class":98},"VGG16()\n",[36,41458,41459],{"class":38,"line":10345},[36,41460,34822],{"class":42},[36,41462,41463],{"class":38,"line":10351},[36,41464,34827],{"class":42},[36,41466,41467,41469,41471],{"class":38,"line":10359},[36,41468,34832],{"class":98},[36,41470,34835],{"class":59},[36,41472,30930],{"class":98},[36,41474,41475],{"class":38,"line":10364},[36,41476,34842],{"class":42},[36,41478,41479,41481,41483],{"class":38,"line":17043},[36,41480,34455],{"class":98},[36,41482,176],{"class":163},[36,41484,34851],{"class":98},[36,41486,41487],{"class":38,"line":17049},[36,41488,34856],{"class":42},[36,41490,41491],{"class":38,"line":17072},[36,41492,34861],{"class":98},[36,41494,41495],{"class":38,"line":17078},[36,41496,247],{"emptyLinePlaceholder":246},[36,41498,41499],{"class":38,"line":17101},[36,41500,34870],{"class":42},[36,41502,41503],{"class":38,"line":17115},[36,41504,34875],{"class":42},[36,41506,41507,41509,41511,41513,41515,41517,41519],{"class":38,"line":17135},[36,41508,31670],{"class":98},[36,41510,176],{"class":163},[36,41512,31677],{"class":59},[36,41514,2172],{"class":163},[36,41516,31682],{"class":98},[36,41518,2169],{"class":163},[36,41520,34552],{"class":59},[36,41522,41523,41525,41527],{"class":38,"line":17141},[36,41524,31722],{"class":98},[36,41526,176],{"class":163},[36,41528,32722],{"class":98},[36,41530,41531],{"class":38,"line":17152},[36,41532,34904],{"class":42},[36,41534,41535],{"class":38,"line":17175},[36,41536,34909],{"class":42},[36,41538,41539,41541,41543,41545,41547,41549,41551,41553,41555,41557,41559,41561,41563,41565,41567,41569,41571,41573,41575,41577,41579,41581,41583],{"class":38,"line":17197},[36,41540,34914],{"class":98},[36,41542,176],{"class":163},[36,41544,1503],{"class":98},[36,41546,34921],{"class":59},[36,41548,992],{"class":98},[36,41550,34926],{"class":59},[36,41552,992],{"class":98},[36,41554,34931],{"class":59},[36,41556,992],{"class":98},[36,41558,34936],{"class":59},[36,41560,992],{"class":98},[36,41562,34941],{"class":59},[36,41564,992],{"class":98},[36,41566,34946],{"class":59},[36,41568,992],{"class":98},[36,41570,34951],{"class":59},[36,41572,992],{"class":98},[36,41574,34956],{"class":59},[36,41576,992],{"class":98},[36,41578,34961],{"class":59},[36,41580,992],{"class":98},[36,41582,34966],{"class":59},[36,41584,33679],{"class":98},[36,41586,41587,41589],{"class":38,"line":17202},[36,41588,34611],{"class":163},[36,41590,33317],{"class":98},[36,41592,41593],{"class":38,"line":17208},[36,41594,34979],{"class":42},[36,41596,41597,41599,41601,41603],{"class":38,"line":17222},[36,41598,3854],{"class":163},[36,41600,34986],{"class":98},[36,41602,26480],{"class":163},[36,41604,34630],{"class":98},[36,41606,41607,41609,41611],{"class":38,"line":17235},[36,41608,33043],{"class":98},[36,41610,176],{"class":163},[36,41612,33048],{"class":98},[36,41614,41615,41617,41619],{"class":38,"line":17240},[36,41616,33058],{"class":98},[36,41618,176],{"class":163},[36,41620,33063],{"class":98},[36,41622,41623],{"class":38,"line":17254},[36,41624,247],{"emptyLinePlaceholder":246},[36,41626,41627],{"class":38,"line":17259},[36,41628,35015],{"class":42},[36,41630,41631],{"class":38,"line":17265},[36,41632,33308],{"class":98},[36,41634,41635],{"class":38,"line":17270},[36,41636,35024],{"class":42},[36,41638,41639,41641,41643],{"class":38,"line":17284},[36,41640,33093],{"class":98},[36,41642,176],{"class":163},[36,41644,33098],{"class":98},[36,41646,41647],{"class":38,"line":17289},[36,41648,35037],{"class":42},[36,41650,41651,41653,41655,41657,41659,41661,41663],{"class":38,"line":17294},[36,41652,33110],{"class":98},[36,41654,176],{"class":163},[36,41656,33115],{"class":98},[36,41658,33118],{"class":5667},[36,41660,176],{"class":163},[36,41662,833],{"class":109},[36,41664,627],{"class":98},[36,41666,41667],{"class":38,"line":17308},[36,41668,35058],{"class":42},[36,41670,41671,41673,41675],{"class":38,"line":17320},[36,41672,35063],{"class":98},[36,41674,176],{"class":163},[36,41676,35068],{"class":98},[36,41678,41679,41681,41683],{"class":38,"line":17325},[36,41680,35073],{"class":98},[36,41682,176],{"class":163},[36,41684,35078],{"class":98},[36,41686,41687,41689,41691,41693,41695,41697,41699,41701],{"class":38,"line":17338},[36,41688,35083],{"class":109},[36,41690,621],{"class":98},[36,41692,35088],{"class":59},[36,41694,35091],{"class":98},[36,41696,35094],{"class":59},[36,41698,992],{"class":98},[36,41700,35099],{"class":59},[36,41702,35102],{"class":98},[588,41704,41706],{"id":41705},"_23googlenet","2.3.GoogLeNet",[22437,41708,41710],{"id":41709},"_231原理","2.3.1.原理",[571,41712,41713],{},[574,41714,41715],{},"网络结构",[14,41717,41718],{},[1941,41719],{"alt":31,"src":41720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[14,41722,41723],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,41725,41726],{},[1941,41727],{"alt":31,"src":41728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[14,41730,41731],{},[1941,41732],{"alt":31,"src":41733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[14,41735,41736],{},[1941,41737],{"alt":31,"src":41738},"\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",[571,41740,41741],{"start":46},[574,41742,41743],{},"1x1卷积的优点",[14,41745,41746],{},[1941,41747],{"alt":31,"src":41748},"\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",[571,41750,41751],{"start":52},[574,41752,41753],{},"全局平均池化层优点",[14,41755,41756],{},[1941,41757],{"alt":31,"src":41758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[14,41760,41761],{},[1941,41762],{"alt":31,"src":41763},"\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",[571,41765,41766],{"start":66},[574,41767,41768],{},"参数详细描述",[14,41770,41771],{},[1941,41772],{"alt":31,"src":41773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[14,41775,41776],{},[1941,41777],{"alt":31,"src":41778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[14,41780,41781],{},[1941,41782],{"alt":31,"src":41783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[14,41785,41786],{},[1941,41787],{"alt":31,"src":41788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[14,41790,41791],{},[1941,41792],{"alt":31,"src":41793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[14,41795,41796],{},[1941,41797],{"alt":31,"src":41798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[14,41800,41801],{},[1941,41802],{"alt":31,"src":41803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[14,41805,41806],{},[1941,41807],{"alt":31,"src":41808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[14,41810,41811],{},[1941,41812],{"alt":31,"src":41813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[14,41815,41816],{},[1941,41817],{"alt":31,"src":41818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[14,41820,41821],{},[1941,41822],{"alt":31,"src":41823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[14,41825,41826],{},[1941,41827],{"alt":31,"src":41828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[14,41830,41831],{},[1941,41832],{"alt":31,"src":41833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[14,41835,41836],{},[1941,41837],{"alt":31,"src":41838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[14,41840,41841],{},[1941,41842],{"alt":31,"src":41843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[14,41845,41846],{},[1941,41847],{"alt":31,"src":41848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[14,41850,41851],{},[1941,41852],{"alt":31,"src":41853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[14,41855,41856],{},[1941,41857],{"alt":31,"src":41858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[14,41860,41861],{},[1941,41862],{"alt":31,"src":41863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[14,41865,41866],{},[1941,41867],{"alt":31,"src":41868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[14,41870,41871],{},[1941,41872],{"alt":31,"src":41873},"\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",[22437,41875,41877],{"id":41876},"_232代码实现","2.3.2.代码实现",[571,41879,41880],{},[574,41881,31144],{},[14,41883,41884],{},"根据原理一步一步搭建即可",[26,41886,41888],{"className":30811,"code":41887,"language":30813,"meta":31,"style":31},"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",[33,41889,41890,41896,41906,41916,41920,41937,41946,41961,41971,41976,42009,42014,42051,42098,42103,42139,42186,42191,42196,42231,42263,42267,42275,42291,42315,42340,42361,42366,42381,42385,42389,42394,42411,42416,42425,42440,42451,42495,42499,42527,42531,42542,42570,42574,42611,42615,42643,42647,42658,42694,42726,42754,42758,42769,42803,42835,42867,42900,42934,42962,42966,42977,43010,43042,43056,43060,43073,43077,43082,43094,43102,43124,43129,43134,43139,43144,43149,43154,43168,43176,43185,43198,43213,43222,43226,43234,43245,43256,43267,43278,43289,43295,43299,43304,43316,43336,43345],{"__ignoreMap":31},[36,41891,41892,41894],{"class":38,"line":39},[36,41893,30825],{"class":163},[36,41895,30828],{"class":98},[36,41897,41898,41900,41902,41904],{"class":38,"line":46},[36,41899,31170],{"class":163},[36,41901,31173],{"class":98},[36,41903,30825],{"class":163},[36,41905,31178],{"class":98},[36,41907,41908,41910,41912,41914],{"class":38,"line":52},[36,41909,31170],{"class":163},[36,41911,31190],{"class":98},[36,41913,30825],{"class":163},[36,41915,31195],{"class":98},[36,41917,41918],{"class":38,"line":66},[36,41919,247],{"emptyLinePlaceholder":246},[36,41921,41922,41924,41927,41929,41931,41933,41935],{"class":38,"line":72},[36,41923,15133],{"class":163},[36,41925,41926],{"class":55}," Inception",[36,41928,621],{"class":98},[36,41930,31211],{"class":55},[36,41932,1172],{"class":98},[36,41934,31216],{"class":55},[36,41936,31219],{"class":98},[36,41938,41939,41941,41943],{"class":38,"line":82},[36,41940,31234],{"class":163},[36,41942,31237],{"class":109},[36,41944,41945],{"class":98},"(self,in_channels,c1,c2,c3,c4):\n",[36,41947,41948,41950,41953,41955,41957,41959],{"class":38,"line":88},[36,41949,31250],{"class":109},[36,41951,41952],{"class":98},"(Inception,",[36,41954,31256],{"class":109},[36,41956,31259],{"class":98},[36,41958,31262],{"class":109},[36,41960,2435],{"class":98},[36,41962,41963,41965,41967,41969],{"class":38,"line":113},[36,41964,31278],{"class":109},[36,41966,35204],{"class":98},[36,41968,176],{"class":163},[36,41970,35209],{"class":98},[36,41972,41973],{"class":38,"line":119},[36,41974,41975],{"class":42},"        # 路线1：定义1*1卷积\n",[36,41977,41978,41980,41983,41985,41987,41989,41991,41994,41996,41998,42001,42003,42005,42007],{"class":38,"line":131},[36,41979,31278],{"class":109},[36,41981,41982],{"class":98},".p1_1",[36,41984,176],{"class":163},[36,41986,31286],{"class":98},[36,41988,31289],{"class":5667},[36,41990,176],{"class":163},[36,41992,41993],{"class":98},"in_channels,",[36,41995,31298],{"class":5667},[36,41997,176],{"class":163},[36,41999,42000],{"class":98},"c1,",[36,42002,31307],{"class":5667},[36,42004,176],{"class":163},[36,42006,833],{"class":109},[36,42008,627],{"class":98},[36,42010,42011],{"class":38,"line":137},[36,42012,42013],{"class":42},"        # 路线2：定义1*1卷积和3*3\n",[36,42015,42016,42018,42021,42023,42025,42027,42029,42031,42033,42035,42038,42040,42043,42045,42047,42049],{"class":38,"line":147},[36,42017,31278],{"class":109},[36,42019,42020],{"class":98},".p2_1",[36,42022,176],{"class":163},[36,42024,31286],{"class":98},[36,42026,31289],{"class":5667},[36,42028,176],{"class":163},[36,42030,41993],{"class":98},[36,42032,31298],{"class":5667},[36,42034,176],{"class":163},[36,42036,42037],{"class":98},"c2[",[36,42039,807],{"class":109},[36,42041,42042],{"class":98},"],",[36,42044,31307],{"class":5667},[36,42046,176],{"class":163},[36,42048,833],{"class":109},[36,42050,627],{"class":98},[36,42052,42053,42055,42058,42060,42062,42064,42066,42068,42070,42072,42074,42076,42078,42080,42082,42084,42086,42088,42090,42092,42094,42096],{"class":38,"line":153},[36,42054,31278],{"class":109},[36,42056,42057],{"class":98},".p2_2",[36,42059,176],{"class":163},[36,42061,31286],{"class":98},[36,42063,31289],{"class":5667},[36,42065,176],{"class":163},[36,42067,42037],{"class":98},[36,42069,807],{"class":109},[36,42071,42042],{"class":98},[36,42073,31298],{"class":5667},[36,42075,176],{"class":163},[36,42077,42037],{"class":98},[36,42079,833],{"class":109},[36,42081,42042],{"class":98},[36,42083,31307],{"class":5667},[36,42085,176],{"class":163},[36,42087,689],{"class":109},[36,42089,992],{"class":98},[36,42091,31316],{"class":5667},[36,42093,176],{"class":163},[36,42095,833],{"class":109},[36,42097,627],{"class":98},[36,42099,42100],{"class":38,"line":191},[36,42101,42102],{"class":42},"        # 路线3：定义1*1卷积和5*5\n",[36,42104,42105,42107,42110,42112,42114,42116,42118,42120,42122,42124,42127,42129,42131,42133,42135,42137],{"class":38,"line":197},[36,42106,31278],{"class":109},[36,42108,42109],{"class":98},".p3_1",[36,42111,176],{"class":163},[36,42113,31286],{"class":98},[36,42115,31289],{"class":5667},[36,42117,176],{"class":163},[36,42119,41993],{"class":98},[36,42121,31298],{"class":5667},[36,42123,176],{"class":163},[36,42125,42126],{"class":98},"c3[",[36,42128,807],{"class":109},[36,42130,42042],{"class":98},[36,42132,31307],{"class":5667},[36,42134,176],{"class":163},[36,42136,833],{"class":109},[36,42138,627],{"class":98},[36,42140,42141,42143,42146,42148,42150,42152,42154,42156,42158,42160,42162,42164,42166,42168,42170,42172,42174,42176,42178,42180,42182,42184],{"class":38,"line":217},[36,42142,31278],{"class":109},[36,42144,42145],{"class":98},".p3_2",[36,42147,176],{"class":163},[36,42149,31286],{"class":98},[36,42151,31289],{"class":5667},[36,42153,176],{"class":163},[36,42155,42126],{"class":98},[36,42157,807],{"class":109},[36,42159,42042],{"class":98},[36,42161,31298],{"class":5667},[36,42163,176],{"class":163},[36,42165,42126],{"class":98},[36,42167,833],{"class":109},[36,42169,42042],{"class":98},[36,42171,31307],{"class":5667},[36,42173,176],{"class":163},[36,42175,933],{"class":109},[36,42177,992],{"class":98},[36,42179,31316],{"class":5667},[36,42181,176],{"class":163},[36,42183,694],{"class":109},[36,42185,627],{"class":98},[36,42187,42188],{"class":38,"line":223},[36,42189,42190],{"class":42},"        # 路线4：定义3*3最大池化和1*1卷积\n",[36,42192,42193],{"class":38,"line":243},[36,42194,42195],{"class":42},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[36,42197,42198,42200,42203,42205,42207,42209,42211,42213,42215,42217,42219,42221,42223,42225,42227,42229],{"class":38,"line":250},[36,42199,31278],{"class":109},[36,42201,42202],{"class":98},".p4_1",[36,42204,176],{"class":163},[36,42206,35262],{"class":98},[36,42208,31307],{"class":5667},[36,42210,176],{"class":163},[36,42212,689],{"class":109},[36,42214,992],{"class":98},[36,42216,31362],{"class":5667},[36,42218,176],{"class":163},[36,42220,833],{"class":109},[36,42222,992],{"class":98},[36,42224,31316],{"class":5667},[36,42226,176],{"class":163},[36,42228,833],{"class":109},[36,42230,627],{"class":98},[36,42232,42233,42235,42238,42240,42242,42244,42246,42248,42250,42252,42255,42257,42259,42261],{"class":38,"line":256},[36,42234,31278],{"class":109},[36,42236,42237],{"class":98},".p4_2",[36,42239,176],{"class":163},[36,42241,31286],{"class":98},[36,42243,31289],{"class":5667},[36,42245,176],{"class":163},[36,42247,41993],{"class":98},[36,42249,31298],{"class":5667},[36,42251,176],{"class":163},[36,42253,42254],{"class":98},"c4,",[36,42256,31307],{"class":5667},[36,42258,176],{"class":163},[36,42260,833],{"class":109},[36,42262,627],{"class":98},[36,42264,42265],{"class":38,"line":273},[36,42266,247],{"emptyLinePlaceholder":246},[36,42268,42269,42271,42273],{"class":38,"line":278},[36,42270,31234],{"class":163},[36,42272,31526],{"class":55},[36,42274,31529],{"class":98},[36,42276,42277,42280,42282,42284,42286,42288],{"class":38,"line":284},[36,42278,42279],{"class":98},"        p1",[36,42281,176],{"class":163},[36,42283,31256],{"class":109},[36,42285,35617],{"class":98},[36,42287,31256],{"class":109},[36,42289,42290],{"class":98},".p1_1(x))\n",[36,42292,42293,42295,42297,42299,42301,42303,42306,42308,42310,42312],{"class":38,"line":315},[36,42294,7536],{"class":98},[36,42296,176],{"class":163},[36,42298,31256],{"class":109},[36,42300,35617],{"class":98},[36,42302,31256],{"class":109},[36,42304,42305],{"class":98},".p2_2(",[36,42307,31256],{"class":109},[36,42309,35617],{"class":98},[36,42311,31256],{"class":109},[36,42313,42314],{"class":98},".p2_1(x))))\n",[36,42316,42317,42320,42322,42324,42326,42328,42331,42333,42335,42337],{"class":38,"line":320},[36,42318,42319],{"class":98},"        p3",[36,42321,176],{"class":163},[36,42323,31256],{"class":109},[36,42325,35617],{"class":98},[36,42327,31256],{"class":109},[36,42329,42330],{"class":98},".p3_2(",[36,42332,31256],{"class":109},[36,42334,35617],{"class":98},[36,42336,31256],{"class":109},[36,42338,42339],{"class":98},".p3_1(x))))\n",[36,42341,42342,42345,42347,42349,42351,42353,42356,42358],{"class":38,"line":326},[36,42343,42344],{"class":98},"        p4",[36,42346,176],{"class":163},[36,42348,31256],{"class":109},[36,42350,35617],{"class":98},[36,42352,31256],{"class":109},[36,42354,42355],{"class":98},".p4_2(",[36,42357,31256],{"class":109},[36,42359,42360],{"class":98},".p4_1(x)))\n",[36,42362,42363],{"class":38,"line":343},[36,42364,42365],{"class":42},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[36,42367,42368,42370,42373,42375,42377,42379],{"class":38,"line":348},[36,42369,15191],{"class":163},[36,42371,42372],{"class":98}," torch.cat((p1,p2,p3,p4),",[36,42374,33118],{"class":5667},[36,42376,176],{"class":163},[36,42378,833],{"class":109},[36,42380,627],{"class":98},[36,42382,42383],{"class":38,"line":354},[36,42384,247],{"emptyLinePlaceholder":246},[36,42386,42387],{"class":38,"line":370},[36,42388,247],{"emptyLinePlaceholder":246},[36,42390,42391],{"class":38,"line":375},[36,42392,42393],{"class":42},"# 搭建GoogLeNet网络\n",[36,42395,42396,42398,42401,42403,42405,42407,42409],{"class":38,"line":381},[36,42397,15133],{"class":163},[36,42399,42400],{"class":55}," GoogLeNet",[36,42402,621],{"class":98},[36,42404,31211],{"class":55},[36,42406,1172],{"class":98},[36,42408,31216],{"class":55},[36,42410,31219],{"class":98},[36,42412,42413],{"class":38,"line":399},[36,42414,42415],{"class":42},"    # 必须把Inception导入到里边\n",[36,42417,42418,42420,42422],{"class":38,"line":404},[36,42419,31234],{"class":163},[36,42421,31237],{"class":109},[36,42423,42424],{"class":98},"(self,Inception):\n",[36,42426,42427,42429,42432,42434,42436,42438],{"class":38,"line":410},[36,42428,31250],{"class":109},[36,42430,42431],{"class":98},"(GoogLeNet,",[36,42433,31256],{"class":109},[36,42435,31259],{"class":98},[36,42437,31262],{"class":109},[36,42439,2435],{"class":98},[36,42441,42442,42444,42447,42449],{"class":38,"line":423},[36,42443,31278],{"class":109},[36,42445,42446],{"class":98},".b1",[36,42448,176],{"class":163},[36,42450,38442],{"class":98},[36,42452,42453,42455,42457,42459,42461,42463,42465,42467,42469,42471,42473,42475,42477,42479,42481,42483,42485,42487,42489,42491,42493],{"class":38,"line":436},[36,42454,38447],{"class":98},[36,42456,31289],{"class":5667},[36,42458,176],{"class":163},[36,42460,833],{"class":109},[36,42462,992],{"class":98},[36,42464,31298],{"class":5667},[36,42466,176],{"class":163},[36,42468,819],{"class":109},[36,42470,992],{"class":98},[36,42472,31307],{"class":5667},[36,42474,176],{"class":163},[36,42476,983],{"class":109},[36,42478,992],{"class":98},[36,42480,31362],{"class":5667},[36,42482,176],{"class":163},[36,42484,694],{"class":109},[36,42486,992],{"class":98},[36,42488,31316],{"class":5667},[36,42490,176],{"class":163},[36,42492,689],{"class":109},[36,42494,38480],{"class":98},[36,42496,42497],{"class":38,"line":441},[36,42498,38485],{"class":98},[36,42500,42501,42503,42505,42507,42509,42511,42513,42515,42517,42519,42521,42523,42525],{"class":38,"line":447},[36,42502,38530],{"class":98},[36,42504,31307],{"class":5667},[36,42506,176],{"class":163},[36,42508,689],{"class":109},[36,42510,992],{"class":98},[36,42512,31362],{"class":5667},[36,42514,176],{"class":163},[36,42516,694],{"class":109},[36,42518,992],{"class":98},[36,42520,31316],{"class":5667},[36,42522,176],{"class":163},[36,42524,833],{"class":109},[36,42526,627],{"class":98},[36,42528,42529],{"class":38,"line":465},[36,42530,38559],{"class":98},[36,42532,42533,42535,42538,42540],{"class":38,"line":470},[36,42534,31278],{"class":109},[36,42536,42537],{"class":98},".b2",[36,42539,176],{"class":163},[36,42541,38442],{"class":98},[36,42543,42544,42546,42548,42550,42552,42554,42556,42558,42560,42562,42564,42566,42568],{"class":38,"line":476},[36,42545,38447],{"class":98},[36,42547,31289],{"class":5667},[36,42549,176],{"class":163},[36,42551,819],{"class":109},[36,42553,992],{"class":98},[36,42555,31298],{"class":5667},[36,42557,176],{"class":163},[36,42559,819],{"class":109},[36,42561,992],{"class":98},[36,42563,31307],{"class":5667},[36,42565,176],{"class":163},[36,42567,833],{"class":109},[36,42569,38480],{"class":98},[36,42571,42572],{"class":38,"line":496},[36,42573,38485],{"class":98},[36,42575,42576,42578,42580,42582,42584,42586,42588,42590,42593,42595,42597,42599,42601,42603,42605,42607,42609],{"class":38,"line":501},[36,42577,38447],{"class":98},[36,42579,31289],{"class":5667},[36,42581,176],{"class":163},[36,42583,819],{"class":109},[36,42585,992],{"class":98},[36,42587,31298],{"class":5667},[36,42589,176],{"class":163},[36,42591,42592],{"class":109},"192",[36,42594,992],{"class":98},[36,42596,31307],{"class":5667},[36,42598,176],{"class":163},[36,42600,689],{"class":109},[36,42602,992],{"class":98},[36,42604,31316],{"class":5667},[36,42606,176],{"class":163},[36,42608,833],{"class":109},[36,42610,38480],{"class":98},[36,42612,42613],{"class":38,"line":507},[36,42614,38485],{"class":98},[36,42616,42617,42619,42621,42623,42625,42627,42629,42631,42633,42635,42637,42639,42641],{"class":38,"line":517},[36,42618,38530],{"class":98},[36,42620,31307],{"class":5667},[36,42622,176],{"class":163},[36,42624,689],{"class":109},[36,42626,992],{"class":98},[36,42628,31362],{"class":5667},[36,42630,176],{"class":163},[36,42632,694],{"class":109},[36,42634,992],{"class":98},[36,42636,31316],{"class":5667},[36,42638,176],{"class":163},[36,42640,833],{"class":109},[36,42642,627],{"class":98},[36,42644,42645],{"class":38,"line":522},[36,42646,38559],{"class":98},[36,42648,42649,42651,42654,42656],{"class":38,"line":528},[36,42650,31278],{"class":109},[36,42652,42653],{"class":98},".b3",[36,42655,176],{"class":163},[36,42657,38442],{"class":98},[36,42659,42660,42663,42665,42667,42669,42672,42674,42676,42678,42681,42683,42685,42687,42690,42692],{"class":38,"line":10203},[36,42661,42662],{"class":98},"            Inception(",[36,42664,42592],{"class":109},[36,42666,992],{"class":98},[36,42668,819],{"class":109},[36,42670,42671],{"class":98},",(",[36,42673,825],{"class":109},[36,42675,992],{"class":98},[36,42677,32503],{"class":109},[36,42679,42680],{"class":98},"),(",[36,42682,1215],{"class":109},[36,42684,992],{"class":98},[36,42686,813],{"class":109},[36,42688,42689],{"class":98},"),",[36,42691,813],{"class":109},[36,42693,38480],{"class":98},[36,42695,42696,42698,42700,42702,42704,42706,42708,42710,42712,42714,42716,42718,42720,42722,42724],{"class":38,"line":10227},[36,42697,42662],{"class":98},[36,42699,35303],{"class":109},[36,42701,992],{"class":98},[36,42703,32503],{"class":109},[36,42705,42671],{"class":98},[36,42707,32503],{"class":109},[36,42709,992],{"class":98},[36,42711,42592],{"class":109},[36,42713,42680],{"class":98},[36,42715,813],{"class":109},[36,42717,992],{"class":98},[36,42719,825],{"class":109},[36,42721,42689],{"class":98},[36,42723,819],{"class":109},[36,42725,38480],{"class":98},[36,42727,42728,42730,42732,42734,42736,42738,42740,42742,42744,42746,42748,42750,42752],{"class":38,"line":10232},[36,42729,38530],{"class":98},[36,42731,31307],{"class":5667},[36,42733,176],{"class":163},[36,42735,689],{"class":109},[36,42737,992],{"class":98},[36,42739,31362],{"class":5667},[36,42741,176],{"class":163},[36,42743,694],{"class":109},[36,42745,992],{"class":98},[36,42747,31316],{"class":5667},[36,42749,176],{"class":163},[36,42751,833],{"class":109},[36,42753,627],{"class":98},[36,42755,42756],{"class":38,"line":10237},[36,42757,38559],{"class":98},[36,42759,42760,42762,42765,42767],{"class":38,"line":10242},[36,42761,31278],{"class":109},[36,42763,42764],{"class":98},".b4",[36,42766,176],{"class":163},[36,42768,38442],{"class":98},[36,42770,42771,42773,42776,42778,42780,42782,42784,42786,42789,42791,42793,42795,42797,42799,42801],{"class":38,"line":10251},[36,42772,42662],{"class":98},[36,42774,42775],{"class":109},"480",[36,42777,992],{"class":98},[36,42779,42592],{"class":109},[36,42781,42671],{"class":98},[36,42783,825],{"class":109},[36,42785,992],{"class":98},[36,42787,42788],{"class":109},"208",[36,42790,42680],{"class":98},[36,42792,1215],{"class":109},[36,42794,992],{"class":98},[36,42796,1221],{"class":109},[36,42798,42689],{"class":98},[36,42800,819],{"class":109},[36,42802,38480],{"class":98},[36,42804,42805,42807,42809,42811,42813,42815,42817,42819,42821,42823,42825,42827,42829,42831,42833],{"class":38,"line":10256},[36,42806,42662],{"class":98},[36,42808,38890],{"class":109},[36,42810,992],{"class":98},[36,42812,21487],{"class":109},[36,42814,42671],{"class":98},[36,42816,1232],{"class":109},[36,42818,992],{"class":98},[36,42820,31934],{"class":109},[36,42822,42680],{"class":98},[36,42824,1413],{"class":109},[36,42826,992],{"class":98},[36,42828,819],{"class":109},[36,42830,42689],{"class":98},[36,42832,819],{"class":109},[36,42834,38480],{"class":98},[36,42836,42837,42839,42841,42843,42845,42847,42849,42851,42853,42855,42857,42859,42861,42863,42865],{"class":38,"line":10262},[36,42838,42662],{"class":98},[36,42840,38890],{"class":109},[36,42842,992],{"class":98},[36,42844,32503],{"class":109},[36,42846,42671],{"class":98},[36,42848,32503],{"class":109},[36,42850,992],{"class":98},[36,42852,35303],{"class":109},[36,42854,42680],{"class":98},[36,42856,1413],{"class":109},[36,42858,992],{"class":98},[36,42860,819],{"class":109},[36,42862,42689],{"class":98},[36,42864,819],{"class":109},[36,42866,38480],{"class":98},[36,42868,42869,42871,42873,42875,42877,42879,42881,42883,42886,42888,42890,42892,42894,42896,42898],{"class":38,"line":10283},[36,42870,42662],{"class":98},[36,42872,38890],{"class":109},[36,42874,992],{"class":98},[36,42876,1232],{"class":109},[36,42878,42671],{"class":98},[36,42880,32503],{"class":109},[36,42882,992],{"class":98},[36,42884,42885],{"class":109},"288",[36,42887,42680],{"class":98},[36,42889,813],{"class":109},[36,42891,992],{"class":98},[36,42893,819],{"class":109},[36,42895,42689],{"class":98},[36,42897,819],{"class":109},[36,42899,38480],{"class":98},[36,42901,42902,42904,42907,42909,42911,42913,42915,42917,42920,42922,42924,42926,42928,42930,42932],{"class":38,"line":10289},[36,42903,42662],{"class":98},[36,42905,42906],{"class":109},"528",[36,42908,992],{"class":98},[36,42910,35303],{"class":109},[36,42912,42671],{"class":98},[36,42914,21487],{"class":109},[36,42916,992],{"class":98},[36,42918,42919],{"class":109},"320",[36,42921,42680],{"class":98},[36,42923,813],{"class":109},[36,42925,992],{"class":98},[36,42927,32503],{"class":109},[36,42929,42689],{"class":98},[36,42931,32503],{"class":109},[36,42933,38480],{"class":98},[36,42935,42936,42938,42940,42942,42944,42946,42948,42950,42952,42954,42956,42958,42960],{"class":38,"line":10303},[36,42937,38530],{"class":98},[36,42939,31307],{"class":5667},[36,42941,176],{"class":163},[36,42943,689],{"class":109},[36,42945,992],{"class":98},[36,42947,31362],{"class":5667},[36,42949,176],{"class":163},[36,42951,694],{"class":109},[36,42953,992],{"class":98},[36,42955,31316],{"class":5667},[36,42957,176],{"class":163},[36,42959,833],{"class":109},[36,42961,627],{"class":98},[36,42963,42964],{"class":38,"line":10309},[36,42965,38559],{"class":98},[36,42967,42968,42970,42973,42975],{"class":38,"line":10336},[36,42969,31278],{"class":109},[36,42971,42972],{"class":98},".b5",[36,42974,176],{"class":163},[36,42976,38442],{"class":98},[36,42978,42979,42981,42984,42986,42988,42990,42992,42994,42996,42998,43000,43002,43004,43006,43008],{"class":38,"line":10345},[36,42980,42662],{"class":98},[36,42982,42983],{"class":109},"832",[36,42985,992],{"class":98},[36,42987,35303],{"class":109},[36,42989,42671],{"class":98},[36,42991,21487],{"class":109},[36,42993,992],{"class":98},[36,42995,42919],{"class":109},[36,42997,42680],{"class":98},[36,42999,813],{"class":109},[36,43001,992],{"class":98},[36,43003,32503],{"class":109},[36,43005,42689],{"class":98},[36,43007,32503],{"class":109},[36,43009,38480],{"class":98},[36,43011,43012,43014,43016,43018,43020,43022,43024,43026,43028,43030,43032,43034,43036,43038,43040],{"class":38,"line":10351},[36,43013,42662],{"class":98},[36,43015,42983],{"class":109},[36,43017,992],{"class":98},[36,43019,35373],{"class":109},[36,43021,42671],{"class":98},[36,43023,42592],{"class":109},[36,43025,992],{"class":98},[36,43027,35373],{"class":109},[36,43029,42680],{"class":98},[36,43031,1221],{"class":109},[36,43033,992],{"class":98},[36,43035,32503],{"class":109},[36,43037,42689],{"class":98},[36,43039,32503],{"class":109},[36,43041,38480],{"class":98},[36,43043,43044,43047,43049,43051,43053],{"class":38,"line":10359},[36,43045,43046],{"class":98},"            nn.AdaptiveAvgPool2d((",[36,43048,833],{"class":109},[36,43050,992],{"class":98},[36,43052,833],{"class":109},[36,43054,43055],{"class":98},")),\n",[36,43057,43058],{"class":38,"line":10364},[36,43059,39223],{"class":98},[36,43061,43062,43064,43067,43069,43071],{"class":38,"line":17043},[36,43063,39228],{"class":98},[36,43065,43066],{"class":109},"1024",[36,43068,992],{"class":98},[36,43070,1060],{"class":109},[36,43072,627],{"class":98},[36,43074,43075],{"class":38,"line":17049},[36,43076,38559],{"class":98},[36,43078,43079],{"class":38,"line":17072},[36,43080,43081],{"class":42},"        # 对模型参数初始化\n",[36,43083,43084,43086,43088,43090,43092],{"class":38,"line":17078},[36,43085,3854],{"class":163},[36,43087,39301],{"class":98},[36,43089,26480],{"class":163},[36,43091,39306],{"class":109},[36,43093,39309],{"class":98},[36,43095,43096,43098,43100],{"class":38,"line":17101},[36,43097,5093],{"class":163},[36,43099,39321],{"class":109},[36,43101,39324],{"class":98},[36,43103,43104,43106,43109,43111,43114,43116,43118,43120,43122],{"class":38,"line":17115},[36,43105,39334],{"class":98},[36,43107,43108],{"class":5667},"mode",[36,43110,176],{"class":163},[36,43112,43113],{"class":59},"'fan_out'",[36,43115,992],{"class":98},[36,43117,39337],{"class":5667},[36,43119,176],{"class":163},[36,43121,39342],{"class":59},[36,43123,627],{"class":98},[36,43125,43126],{"class":38,"line":17135},[36,43127,43128],{"class":42},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[36,43130,43131],{"class":38,"line":17141},[36,43132,43133],{"class":42},"                # ② mode = 'fan_out'决定使用的fan值：\n",[36,43135,43136],{"class":38,"line":17152},[36,43137,43138],{"class":42},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[36,43140,43141],{"class":38,"line":17175},[36,43142,43143],{"class":42},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[36,43145,43146],{"class":38,"line":17197},[36,43147,43148],{"class":42},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[36,43150,43151],{"class":38,"line":17202},[36,43152,43153],{"class":42},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[36,43155,43156,43158,43160,43162,43164,43166],{"class":38,"line":17208},[36,43157,39354],{"class":163},[36,43159,39357],{"class":98},[36,43161,39360],{"class":163},[36,43163,39363],{"class":163},[36,43165,39366],{"class":109},[36,43167,4190],{"class":98},[36,43169,43170,43172,43174],{"class":38,"line":17222},[36,43171,39378],{"class":98},[36,43173,807],{"class":109},[36,43175,627],{"class":98},[36,43177,43178,43181,43183],{"class":38,"line":17235},[36,43179,43180],{"class":163},"                elif",[36,43182,39321],{"class":109},[36,43184,39397],{"class":98},[36,43186,43187,43190,43192,43194,43196],{"class":38,"line":17240},[36,43188,43189],{"class":98},"                    nn.init.normal_(m.weight,",[36,43191,807],{"class":109},[36,43193,992],{"class":98},[36,43195,39419],{"class":109},[36,43197,627],{"class":98},[36,43199,43200,43203,43205,43207,43209,43211],{"class":38,"line":17254},[36,43201,43202],{"class":163},"                    if",[36,43204,39357],{"class":98},[36,43206,39360],{"class":163},[36,43208,39363],{"class":163},[36,43210,39366],{"class":109},[36,43212,4190],{"class":98},[36,43214,43215,43218,43220],{"class":38,"line":17259},[36,43216,43217],{"class":98},"                        nn.init.constant_(m.bias,",[36,43219,807],{"class":109},[36,43221,627],{"class":98},[36,43223,43224],{"class":38,"line":17265},[36,43225,35598],{"class":42},[36,43227,43228,43230,43232],{"class":38,"line":17270},[36,43229,31234],{"class":163},[36,43231,31526],{"class":55},[36,43233,31529],{"class":98},[36,43235,43236,43238,43240,43242],{"class":38,"line":17284},[36,43237,31534],{"class":98},[36,43239,176],{"class":163},[36,43241,31256],{"class":109},[36,43243,43244],{"class":98},".b1(x)\n",[36,43246,43247,43249,43251,43253],{"class":38,"line":17289},[36,43248,31534],{"class":98},[36,43250,176],{"class":163},[36,43252,31256],{"class":109},[36,43254,43255],{"class":98},".b2(x)\n",[36,43257,43258,43260,43262,43264],{"class":38,"line":17294},[36,43259,31534],{"class":98},[36,43261,176],{"class":163},[36,43263,31256],{"class":109},[36,43265,43266],{"class":98},".b3(x)\n",[36,43268,43269,43271,43273,43275],{"class":38,"line":17308},[36,43270,31534],{"class":98},[36,43272,176],{"class":163},[36,43274,31256],{"class":109},[36,43276,43277],{"class":98},".b4(x)\n",[36,43279,43280,43282,43284,43286],{"class":38,"line":17320},[36,43281,31534],{"class":98},[36,43283,176],{"class":163},[36,43285,31256],{"class":109},[36,43287,43288],{"class":98},".b5(x)\n",[36,43290,43291,43293],{"class":38,"line":17325},[36,43292,15191],{"class":163},[36,43294,31642],{"class":98},[36,43296,43297],{"class":38,"line":17338},[36,43298,247],{"emptyLinePlaceholder":246},[36,43300,43301],{"class":38,"line":17343},[36,43302,43303],{"class":42},"# 模型展示\n",[36,43305,43306,43308,43310,43312,43314],{"class":38,"line":17348},[36,43307,2010],{"class":163},[36,43309,31653],{"class":109},[36,43311,3400],{"class":163},[36,43313,31658],{"class":59},[36,43315,4190],{"class":98},[36,43317,43318,43320,43322,43324,43326,43328,43330,43332,43334],{"class":38,"line":17353},[36,43319,31670],{"class":98},[36,43321,176],{"class":163},[36,43323,30884],{"class":98},[36,43325,31677],{"class":59},[36,43327,2172],{"class":163},[36,43329,31682],{"class":98},[36,43331,2169],{"class":163},[36,43333,30909],{"class":59},[36,43335,627],{"class":98},[36,43337,43338,43340,43342],{"class":38,"line":17366},[36,43339,31722],{"class":98},[36,43341,176],{"class":163},[36,43343,43344],{"class":98},"GoogLeNet(Inception).to(device)\n",[36,43346,43347,43349,43351,43353,43355,43357,43359,43361],{"class":38,"line":17371},[36,43348,31732],{"class":109},[36,43350,31735],{"class":98},[36,43352,833],{"class":109},[36,43354,992],{"class":98},[36,43356,31934],{"class":109},[36,43358,992],{"class":98},[36,43360,31934],{"class":109},[36,43362,31748],{"class":98},[571,43364,43365],{"start":46},[574,43366,39616],{},[26,43368,43370],{"className":30811,"code":43369,"language":30813,"meta":31,"style":31},"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",[33,43371,43372,43378,43384,43394,43400,43410,43420,43430,43440,43450,43454,43465,43475,43479,43483,43487,43495,43507,43517,43533,43543,43575,43589,43599,43609,43613,43623,43637,43647,43657,43667,43673,43677,43681,43685,43689,43693,43701,43721,43725,43729,43733,43737,43741,43757,43761,43765,43773,43777,43781,43789,43793,43797,43801,43809,43813,43817,43821,43825,43833,43837,43845,43849,43857,43861,43869,43873,43881,43885,43889,43897,43901,43905,43909,43921,43945,43959,43963,43967,43971,43979,43983,43991,43995,44003,44007,44015,44019,44027,44031,44039,44043,44055,44059,44067,44071,44079,44083,44087,44091,44095,44103,44107,44123,44127,44135,44139,44143,44147,44151,44155,44159,44163,44179,44183,44195,44199,44211,44215,44227,44231,44239,44243,44251,44255,44259,44263,44269,44273,44281,44285,44301,44305,44313,44317,44333,44345,44349,44361,44365,44369,44377,44381,44385,44393,44397,44405,44409,44417,44421,44425,44467,44509,44513,44517,44533,44537,44553,44557,44561,44569,44573,44577,44589,44627,44631,44635,44643,44647,44661,44671,44677,44683,44689,44695,44699,44703,44709,44713,44717,44725,44729,44747,44751,44755,44759,44775,44779,44783,44787,44791,44795,44815,44835,44839,44843,44847,44855,44863,44867,44883,44903,44923,44927,44931,44939,44947,44951,44955,44959,44971,44975,44985,44993,45010],{"__ignoreMap":31},[36,43373,43374,43376],{"class":38,"line":39},[36,43375,30825],{"class":163},[36,43377,32255],{"class":98},[36,43379,43380,43382],{"class":38,"line":46},[36,43381,30825],{"class":163},[36,43383,32262],{"class":98},[36,43385,43386,43388,43390,43392],{"class":38,"line":52},[36,43387,30825],{"class":163},[36,43389,32273],{"class":98},[36,43391,31816],{"class":163},[36,43393,32278],{"class":98},[36,43395,43396,43398],{"class":38,"line":66},[36,43397,30825],{"class":163},[36,43399,30828],{"class":98},[36,43401,43402,43404,43406,43408],{"class":38,"line":72},[36,43403,31170],{"class":163},[36,43405,31848],{"class":98},[36,43407,30825],{"class":163},[36,43409,32295],{"class":98},[36,43411,43412,43414,43416,43418],{"class":38,"line":82},[36,43413,31170],{"class":163},[36,43415,31801],{"class":98},[36,43417,30825],{"class":163},[36,43419,31806],{"class":98},[36,43421,43422,43424,43426,43428],{"class":38,"line":88},[36,43423,31170],{"class":163},[36,43425,31831],{"class":98},[36,43427,30825],{"class":163},[36,43429,31836],{"class":98},[36,43431,43432,43434,43436,43438],{"class":38,"line":113},[36,43433,30825],{"class":163},[36,43435,31848],{"class":98},[36,43437,31816],{"class":163},[36,43439,31853],{"class":98},[36,43441,43442,43444,43446,43448],{"class":38,"line":119},[36,43443,30825],{"class":163},[36,43445,31865],{"class":98},[36,43447,31816],{"class":163},[36,43449,31870],{"class":98},[36,43451,43452],{"class":38,"line":131},[36,43453,32340],{"class":42},[36,43455,43456,43458,43460,43462],{"class":38,"line":137},[36,43457,31170],{"class":163},[36,43459,32347],{"class":98},[36,43461,30825],{"class":163},[36,43463,43464],{"class":98}," GoogLeNet, Inception\n",[36,43466,43467,43469,43471,43473],{"class":38,"line":147},[36,43468,31170],{"class":163},[36,43470,31173],{"class":98},[36,43472,30825],{"class":163},[36,43474,31178],{"class":98},[36,43476,43477],{"class":38,"line":153},[36,43478,247],{"emptyLinePlaceholder":246},[36,43480,43481],{"class":38,"line":191},[36,43482,247],{"emptyLinePlaceholder":246},[36,43484,43485],{"class":38,"line":197},[36,43486,32375],{"class":42},[36,43488,43489,43491,43493],{"class":38,"line":217},[36,43490,32380],{"class":163},[36,43492,32383],{"class":55},[36,43494,32386],{"class":98},[36,43496,43497,43499,43501,43503,43505],{"class":38,"line":223},[36,43498,32391],{"class":98},[36,43500,176],{"class":163},[36,43502,31888],{"class":98},[36,43504,31896],{"class":59},[36,43506,31899],{"class":98},[36,43508,43509,43511,43513,43515],{"class":38,"line":243},[36,43510,32404],{"class":5667},[36,43512,176],{"class":163},[36,43514,31909],{"class":109},[36,43516,31899],{"class":98},[36,43518,43519,43521,43523,43525,43527,43529,43531],{"class":38,"line":250},[36,43520,32415],{"class":5667},[36,43522,176],{"class":163},[36,43524,31926],{"class":98},[36,43526,31929],{"class":5667},[36,43528,176],{"class":163},[36,43530,35882],{"class":109},[36,43532,31937],{"class":98},[36,43534,43535,43537,43539,43541],{"class":38,"line":256},[36,43536,32432],{"class":5667},[36,43538,176],{"class":163},[36,43540,31909],{"class":109},[36,43542,627],{"class":98},[36,43544,43545,43547,43549,43551,43553,43555,43557,43559,43561,43563,43565,43567,43569,43571,43573],{"class":38,"line":273},[36,43546,32443],{"class":98},[36,43548,176],{"class":163},[36,43550,32448],{"class":98},[36,43552,32451],{"class":109},[36,43554,621],{"class":98},[36,43556,32456],{"class":109},[36,43558,1069],{"class":163},[36,43560,7809],{"class":109},[36,43562,32463],{"class":98},[36,43564,32451],{"class":109},[36,43566,621],{"class":98},[36,43568,32470],{"class":109},[36,43570,1069],{"class":163},[36,43572,7809],{"class":109},[36,43574,32477],{"class":98},[36,43576,43577,43579,43581,43583,43585,43587],{"class":38,"line":278},[36,43578,32482],{"class":98},[36,43580,176],{"class":163},[36,43582,32487],{"class":98},[36,43584,31970],{"class":5667},[36,43586,176],{"class":163},[36,43588,31975],{"class":98},[36,43590,43591,43593,43595,43597],{"class":38,"line":284},[36,43592,32498],{"class":5667},[36,43594,176],{"class":163},[36,43596,813],{"class":109},[36,43598,31899],{"class":98},[36,43600,43601,43603,43605,43607],{"class":38,"line":315},[36,43602,32510],{"class":5667},[36,43604,176],{"class":163},[36,43606,31909],{"class":109},[36,43608,31899],{"class":98},[36,43610,43611],{"class":38,"line":320},[36,43612,32521],{"class":42},[36,43614,43615,43617,43619,43621],{"class":38,"line":326},[36,43616,32526],{"class":5667},[36,43618,176],{"class":163},[36,43620,1009],{"class":109},[36,43622,627],{"class":98},[36,43624,43625,43627,43629,43631,43633,43635],{"class":38,"line":343},[36,43626,32537],{"class":98},[36,43628,176],{"class":163},[36,43630,31967],{"class":98},[36,43632,31970],{"class":5667},[36,43634,176],{"class":163},[36,43636,32548],{"class":98},[36,43638,43639,43641,43643,43645],{"class":38,"line":348},[36,43640,32553],{"class":5667},[36,43642,176],{"class":163},[36,43644,813],{"class":109},[36,43646,31899],{"class":98},[36,43648,43649,43651,43653,43655],{"class":38,"line":354},[36,43650,32564],{"class":5667},[36,43652,176],{"class":163},[36,43654,31909],{"class":109},[36,43656,31899],{"class":98},[36,43658,43659,43661,43663,43665],{"class":38,"line":370},[36,43660,32575],{"class":5667},[36,43662,176],{"class":163},[36,43664,1009],{"class":109},[36,43666,627],{"class":98},[36,43668,43669,43671],{"class":38,"line":375},[36,43670,4541],{"class":163},[36,43672,32588],{"class":98},[36,43674,43675],{"class":38,"line":381},[36,43676,247],{"emptyLinePlaceholder":246},[36,43678,43679],{"class":38,"line":399},[36,43680,32597],{"class":42},[36,43682,43683],{"class":38,"line":404},[36,43684,32602],{"class":42},[36,43686,43687],{"class":38,"line":410},[36,43688,247],{"emptyLinePlaceholder":246},[36,43690,43691],{"class":38,"line":423},[36,43692,32611],{"class":42},[36,43694,43695,43697,43699],{"class":38,"line":436},[36,43696,32380],{"class":163},[36,43698,32618],{"class":55},[36,43700,32621],{"class":98},[36,43702,43703,43705,43707,43709,43711,43713,43715,43717,43719],{"class":38,"line":441},[36,43704,31670],{"class":98},[36,43706,176],{"class":163},[36,43708,30884],{"class":98},[36,43710,31677],{"class":59},[36,43712,2172],{"class":163},[36,43714,31682],{"class":98},[36,43716,2169],{"class":163},[36,43718,32640],{"class":59},[36,43720,627],{"class":98},[36,43722,43723],{"class":38,"line":447},[36,43724,247],{"emptyLinePlaceholder":246},[36,43726,43727],{"class":38,"line":465},[36,43728,247],{"emptyLinePlaceholder":246},[36,43730,43731],{"class":38,"line":470},[36,43732,32655],{"class":42},[36,43734,43735],{"class":38,"line":476},[36,43736,32660],{"class":42},[36,43738,43739],{"class":38,"line":496},[36,43740,32665],{"class":42},[36,43742,43743,43745,43747,43749,43751,43753,43755],{"class":38,"line":501},[36,43744,32670],{"class":98},[36,43746,176],{"class":163},[36,43748,32675],{"class":98},[36,43750,32678],{"class":5667},[36,43752,176],{"class":163},[36,43754,32683],{"class":109},[36,43756,627],{"class":98},[36,43758,43759],{"class":38,"line":507},[36,43760,247],{"emptyLinePlaceholder":246},[36,43762,43763],{"class":38,"line":517},[36,43764,32694],{"class":42},[36,43766,43767,43769,43771],{"class":38,"line":522},[36,43768,32699],{"class":98},[36,43770,176],{"class":163},[36,43772,32704],{"class":98},[36,43774,43775],{"class":38,"line":528},[36,43776,247],{"emptyLinePlaceholder":246},[36,43778,43779],{"class":38,"line":10203},[36,43780,32713],{"class":42},[36,43782,43783,43785,43787],{"class":38,"line":10227},[36,43784,31722],{"class":98},[36,43786,176],{"class":163},[36,43788,32722],{"class":98},[36,43790,43791],{"class":38,"line":10232},[36,43792,32727],{"class":42},[36,43794,43795],{"class":38,"line":10237},[36,43796,32732],{"class":42},[36,43798,43799],{"class":38,"line":10242},[36,43800,32737],{"class":42},[36,43802,43803,43805,43807],{"class":38,"line":10251},[36,43804,32742],{"class":98},[36,43806,176],{"class":163},[36,43808,32747],{"class":98},[36,43810,43811],{"class":38,"line":10256},[36,43812,247],{"emptyLinePlaceholder":246},[36,43814,43815],{"class":38,"line":10262},[36,43816,247],{"emptyLinePlaceholder":246},[36,43818,43819],{"class":38,"line":10283},[36,43820,32760],{"class":42},[36,43822,43823],{"class":38,"line":10289},[36,43824,32765],{"class":42},[36,43826,43827,43829,43831],{"class":38,"line":10303},[36,43828,32770],{"class":98},[36,43830,176],{"class":163},[36,43832,32775],{"class":109},[36,43834,43835],{"class":38,"line":10309},[36,43836,32780],{"class":42},[36,43838,43839,43841,43843],{"class":38,"line":10336},[36,43840,32785],{"class":98},[36,43842,176],{"class":163},[36,43844,32790],{"class":98},[36,43846,43847],{"class":38,"line":10345},[36,43848,32795],{"class":42},[36,43850,43851,43853,43855],{"class":38,"line":10351},[36,43852,32800],{"class":98},[36,43854,176],{"class":163},[36,43856,32790],{"class":98},[36,43858,43859],{"class":38,"line":10359},[36,43860,32809],{"class":42},[36,43862,43863,43865,43867],{"class":38,"line":10364},[36,43864,32814],{"class":98},[36,43866,176],{"class":163},[36,43868,32790],{"class":98},[36,43870,43871],{"class":38,"line":17043},[36,43872,32823],{"class":42},[36,43874,43875,43877,43879],{"class":38,"line":17049},[36,43876,32828],{"class":98},[36,43878,176],{"class":163},[36,43880,32790],{"class":98},[36,43882,43883],{"class":38,"line":17072},[36,43884,247],{"emptyLinePlaceholder":246},[36,43886,43887],{"class":38,"line":17078},[36,43888,32841],{"class":42},[36,43890,43891,43893,43895],{"class":38,"line":17101},[36,43892,32846],{"class":98},[36,43894,176],{"class":163},[36,43896,32851],{"class":98},[36,43898,43899],{"class":38,"line":17115},[36,43900,247],{"emptyLinePlaceholder":246},[36,43902,43903],{"class":38,"line":17135},[36,43904,247],{"emptyLinePlaceholder":246},[36,43906,43907],{"class":38,"line":17141},[36,43908,32864],{"class":42},[36,43910,43911,43913,43915,43917,43919],{"class":38,"line":17152},[36,43912,3652],{"class":163},[36,43914,32871],{"class":98},[36,43916,26480],{"class":163},[36,43918,32876],{"class":109},[36,43920,32879],{"class":98},[36,43922,43923,43925,43927,43929,43931,43933,43935,43937,43939,43941,43943],{"class":38,"line":17175},[36,43924,32884],{"class":109},[36,43926,621],{"class":98},[36,43928,32889],{"class":59},[36,43930,32892],{"class":109},[36,43932,1198],{"class":59},[36,43934,32892],{"class":109},[36,43936,866],{"class":59},[36,43938,32901],{"class":98},[36,43940,1146],{"class":163},[36,43942,833],{"class":109},[36,43944,30930],{"class":98},[36,43946,43947,43949,43951,43953,43955,43957],{"class":38,"line":17197},[36,43948,32884],{"class":109},[36,43950,621],{"class":98},[36,43952,32916],{"class":59},[36,43954,1069],{"class":163},[36,43956,1060],{"class":109},[36,43958,627],{"class":98},[36,43960,43961],{"class":38,"line":17202},[36,43962,247],{"emptyLinePlaceholder":246},[36,43964,43965],{"class":38,"line":17208},[36,43966,32931],{"class":42},[36,43968,43969],{"class":38,"line":17222},[36,43970,32936],{"class":42},[36,43972,43973,43975,43977],{"class":38,"line":17235},[36,43974,32941],{"class":98},[36,43976,176],{"class":163},[36,43978,32775],{"class":109},[36,43980,43981],{"class":38,"line":17240},[36,43982,32950],{"class":42},[36,43984,43985,43987,43989],{"class":38,"line":17254},[36,43986,32955],{"class":98},[36,43988,176],{"class":163},[36,43990,3536],{"class":109},[36,43992,43993],{"class":38,"line":17259},[36,43994,32964],{"class":42},[36,43996,43997,43999,44001],{"class":38,"line":17265},[36,43998,32969],{"class":98},[36,44000,176],{"class":163},[36,44002,32775],{"class":109},[36,44004,44005],{"class":38,"line":17270},[36,44006,32978],{"class":42},[36,44008,44009,44011,44013],{"class":38,"line":17284},[36,44010,32983],{"class":98},[36,44012,176],{"class":163},[36,44014,3536],{"class":109},[36,44016,44017],{"class":38,"line":17289},[36,44018,32992],{"class":42},[36,44020,44021,44023,44025],{"class":38,"line":17294},[36,44022,32997],{"class":98},[36,44024,176],{"class":163},[36,44026,3536],{"class":109},[36,44028,44029],{"class":38,"line":17308},[36,44030,33006],{"class":42},[36,44032,44033,44035,44037],{"class":38,"line":17320},[36,44034,33011],{"class":98},[36,44036,176],{"class":163},[36,44038,3536],{"class":109},[36,44040,44041],{"class":38,"line":17325},[36,44042,33020],{"class":42},[36,44044,44045,44047,44049,44051,44053],{"class":38,"line":17338},[36,44046,3854],{"class":163},[36,44048,32034],{"class":98},[36,44050,26480],{"class":163},[36,44052,32039],{"class":109},[36,44054,33033],{"class":98},[36,44056,44057],{"class":38,"line":17343},[36,44058,33038],{"class":42},[36,44060,44061,44063,44065],{"class":38,"line":17348},[36,44062,33043],{"class":98},[36,44064,176],{"class":163},[36,44066,33048],{"class":98},[36,44068,44069],{"class":38,"line":17353},[36,44070,33053],{"class":42},[36,44072,44073,44075,44077],{"class":38,"line":17366},[36,44074,33058],{"class":98},[36,44076,176],{"class":163},[36,44078,33063],{"class":98},[36,44080,44081],{"class":38,"line":17371},[36,44082,33069],{"class":42},[36,44084,44085],{"class":38,"line":33066},[36,44086,33075],{"class":98},[36,44088,44089],{"class":38,"line":33072},[36,44090,33081],{"class":42},[36,44092,44093],{"class":38,"line":33078},[36,44094,33087],{"class":42},[36,44096,44097,44099,44101],{"class":38,"line":33084},[36,44098,33093],{"class":98},[36,44100,176],{"class":163},[36,44102,33098],{"class":98},[36,44104,44105],{"class":38,"line":33090},[36,44106,33104],{"class":42},[36,44108,44109,44111,44113,44115,44117,44119,44121],{"class":38,"line":33101},[36,44110,33110],{"class":98},[36,44112,176],{"class":163},[36,44114,33115],{"class":98},[36,44116,33118],{"class":5667},[36,44118,176],{"class":163},[36,44120,833],{"class":109},[36,44122,627],{"class":98},[36,44124,44125],{"class":38,"line":33107},[36,44126,33130],{"class":42},[36,44128,44129,44131,44133],{"class":38,"line":33127},[36,44130,33136],{"class":98},[36,44132,176],{"class":163},[36,44134,33141],{"class":98},[36,44136,44137],{"class":38,"line":33133},[36,44138,33147],{"class":42},[36,44140,44141],{"class":38,"line":33144},[36,44142,33153],{"class":98},[36,44144,44145],{"class":38,"line":33150},[36,44146,33159],{"class":42},[36,44148,44149],{"class":38,"line":33156},[36,44150,33165],{"class":98},[36,44152,44153],{"class":38,"line":33162},[36,44154,33171],{"class":42},[36,44156,44157],{"class":38,"line":33168},[36,44158,33177],{"class":98},[36,44160,44161],{"class":38,"line":33174},[36,44162,33183],{"class":42},[36,44164,44165,44167,44169,44171,44173,44175,44177],{"class":38,"line":33180},[36,44166,33189],{"class":98},[36,44168,9918],{"class":163},[36,44170,33194],{"class":98},[36,44172,1069],{"class":163},[36,44174,33199],{"class":98},[36,44176,807],{"class":109},[36,44178,627],{"class":98},[36,44180,44181],{"class":38,"line":33186},[36,44182,33209],{"class":42},[36,44184,44185,44187,44189,44191,44193],{"class":38,"line":33206},[36,44186,33215],{"class":98},[36,44188,9918],{"class":163},[36,44190,33220],{"class":98},[36,44192,3400],{"class":163},[36,44194,33225],{"class":98},[36,44196,44197],{"class":38,"line":33212},[36,44198,33231],{"class":42},[36,44200,44201,44203,44205,44207,44209],{"class":38,"line":33228},[36,44202,33237],{"class":98},[36,44204,9918],{"class":163},[36,44206,33199],{"class":98},[36,44208,807],{"class":109},[36,44210,627],{"class":98},[36,44212,44213],{"class":38,"line":33234},[36,44214,33251],{"class":42},[36,44216,44217,44219,44221,44223,44225],{"class":38,"line":33248},[36,44218,3854],{"class":163},[36,44220,33259],{"class":98},[36,44222,26480],{"class":163},[36,44224,32039],{"class":109},[36,44226,33266],{"class":98},[36,44228,44229],{"class":38,"line":33254},[36,44230,33272],{"class":42},[36,44232,44233,44235,44237],{"class":38,"line":33269},[36,44234,33043],{"class":98},[36,44236,176],{"class":163},[36,44238,33048],{"class":98},[36,44240,44241],{"class":38,"line":33275},[36,44242,33287],{"class":42},[36,44244,44245,44247,44249],{"class":38,"line":33284},[36,44246,33058],{"class":98},[36,44248,176],{"class":163},[36,44250,33063],{"class":98},[36,44252,44253],{"class":38,"line":33290},[36,44254,33302],{"class":42},[36,44256,44257],{"class":38,"line":33299},[36,44258,33308],{"class":98},[36,44260,44261],{"class":38,"line":33305},[36,44262,36789],{"class":42},[36,44264,44265,44267],{"class":38,"line":33311},[36,44266,33314],{"class":163},[36,44268,33317],{"class":98},[36,44270,44271],{"class":38,"line":33320},[36,44272,33323],{"class":42},[36,44274,44275,44277,44279],{"class":38,"line":33326},[36,44276,36804],{"class":98},[36,44278,176],{"class":163},[36,44280,33098],{"class":98},[36,44282,44283],{"class":38,"line":33337},[36,44284,33340],{"class":42},[36,44286,44287,44289,44291,44293,44295,44297,44299],{"class":38,"line":33343},[36,44288,36817],{"class":98},[36,44290,176],{"class":163},[36,44292,33115],{"class":98},[36,44294,33118],{"class":5667},[36,44296,176],{"class":163},[36,44298,833],{"class":109},[36,44300,627],{"class":98},[36,44302,44303],{"class":38,"line":33362},[36,44304,33365],{"class":42},[36,44306,44307,44309,44311],{"class":38,"line":33368},[36,44308,36838],{"class":98},[36,44310,176],{"class":163},[36,44312,33141],{"class":98},[36,44314,44315],{"class":38,"line":33379},[36,44316,33382],{"class":42},[36,44318,44319,44321,44323,44325,44327,44329,44331],{"class":38,"line":33385},[36,44320,36851],{"class":98},[36,44322,9918],{"class":163},[36,44324,36856],{"class":98},[36,44326,1069],{"class":163},[36,44328,33199],{"class":98},[36,44330,807],{"class":109},[36,44332,627],{"class":98},[36,44334,44335,44337,44339,44341,44343],{"class":38,"line":33405},[36,44336,36869],{"class":98},[36,44338,9918],{"class":163},[36,44340,33220],{"class":98},[36,44342,3400],{"class":163},[36,44344,33225],{"class":98},[36,44346,44347],{"class":38,"line":33421},[36,44348,36882],{"class":42},[36,44350,44351,44353,44355,44357,44359],{"class":38,"line":33427},[36,44352,36887],{"class":98},[36,44354,9918],{"class":163},[36,44356,33199],{"class":98},[36,44358,807],{"class":109},[36,44360,627],{"class":98},[36,44362,44363],{"class":38,"line":33441},[36,44364,33444],{"class":42},[36,44366,44367],{"class":38,"line":33447},[36,44368,33450],{"class":42},[36,44370,44371,44373,44375],{"class":38,"line":33453},[36,44372,33456],{"class":98},[36,44374,1198],{"class":163},[36,44376,33461],{"class":98},[36,44378,44379],{"class":38,"line":33464},[36,44380,33467],{"class":42},[36,44382,44383],{"class":38,"line":33470},[36,44384,33473],{"class":42},[36,44386,44387,44389,44391],{"class":38,"line":33476},[36,44388,33479],{"class":98},[36,44390,1198],{"class":163},[36,44392,33461],{"class":98},[36,44394,44395],{"class":38,"line":33486},[36,44396,33489],{"class":42},[36,44398,44399,44401,44403],{"class":38,"line":33492},[36,44400,33495],{"class":98},[36,44402,1198],{"class":163},[36,44404,33500],{"class":98},[36,44406,44407],{"class":38,"line":33503},[36,44408,33506],{"class":42},[36,44410,44411,44413,44415],{"class":38,"line":33509},[36,44412,33512],{"class":98},[36,44414,1198],{"class":163},[36,44416,33500],{"class":98},[36,44418,44419],{"class":38,"line":33519},[36,44420,247],{"emptyLinePlaceholder":246},[36,44422,44423],{"class":38,"line":33524},[36,44424,33527],{"class":42},[36,44426,44427,44429,44431,44433,44435,44437,44439,44441,44443,44445,44447,44449,44451,44453,44455,44457,44459,44461,44463,44465],{"class":38,"line":33530},[36,44428,32884],{"class":109},[36,44430,621],{"class":98},[36,44432,4043],{"class":59},[36,44434,32892],{"class":109},[36,44436,33541],{"class":59},[36,44438,1509],{"class":109},[36,44440,33546],{"class":163},[36,44442,1558],{"class":109},[36,44444,33551],{"class":59},[36,44446,1509],{"class":109},[36,44448,33546],{"class":163},[36,44450,1558],{"class":109},[36,44452,4043],{"class":59},[36,44454,33562],{"class":98},[36,44456,1146],{"class":163},[36,44458,833],{"class":109},[36,44460,33569],{"class":98},[36,44462,1146],{"class":163},[36,44464,833],{"class":109},[36,44466,33576],{"class":98},[36,44468,44469,44471,44473,44475,44477,44479,44481,44483,44485,44487,44489,44491,44493,44495,44497,44499,44501,44503,44505,44507],{"class":38,"line":33579},[36,44470,32884],{"class":109},[36,44472,621],{"class":98},[36,44474,4043],{"class":59},[36,44476,32892],{"class":109},[36,44478,33590],{"class":59},[36,44480,1509],{"class":109},[36,44482,33546],{"class":163},[36,44484,1558],{"class":109},[36,44486,33599],{"class":59},[36,44488,1509],{"class":109},[36,44490,33546],{"class":163},[36,44492,1558],{"class":109},[36,44494,4043],{"class":59},[36,44496,33610],{"class":98},[36,44498,1146],{"class":163},[36,44500,833],{"class":109},[36,44502,33617],{"class":98},[36,44504,1146],{"class":163},[36,44506,833],{"class":109},[36,44508,33576],{"class":98},[36,44510,44511],{"class":38,"line":33626},[36,44512,247],{"emptyLinePlaceholder":246},[36,44514,44515],{"class":38,"line":33631},[36,44516,33634],{"class":42},[36,44518,44519,44521,44523,44525,44527,44529,44531],{"class":38,"line":33637},[36,44520,2955],{"class":163},[36,44522,33642],{"class":98},[36,44524,1146],{"class":163},[36,44526,833],{"class":109},[36,44528,1552],{"class":98},[36,44530,173],{"class":163},[36,44532,33653],{"class":98},[36,44534,44535],{"class":38,"line":33656},[36,44536,33659],{"class":42},[36,44538,44539,44541,44543,44545,44547,44549,44551],{"class":38,"line":33662},[36,44540,33665],{"class":98},[36,44542,660],{"class":109},[36,44544,176],{"class":163},[36,44546,33672],{"class":98},[36,44548,1146],{"class":163},[36,44550,833],{"class":109},[36,44552,33679],{"class":98},[36,44554,44555],{"class":38,"line":33682},[36,44556,33685],{"class":42},[36,44558,44559],{"class":38,"line":33688},[36,44560,33691],{"class":42},[36,44562,44563,44565,44567],{"class":38,"line":33694},[36,44564,33697],{"class":98},[36,44566,176],{"class":163},[36,44568,32747],{"class":98},[36,44570,44571],{"class":38,"line":33704},[36,44572,247],{"emptyLinePlaceholder":246},[36,44574,44575],{"class":38,"line":33709},[36,44576,33712],{"class":42},[36,44578,44579,44581,44583,44585,44587],{"class":38,"line":33715},[36,44580,33718],{"class":98},[36,44582,176],{"class":163},[36,44584,33723],{"class":98},[36,44586,1146],{"class":163},[36,44588,33728],{"class":98},[36,44590,44591,44593,44595,44597,44599,44601,44603,44605,44607,44609,44611,44613,44615,44617,44619,44621,44623,44625],{"class":38,"line":33731},[36,44592,32884],{"class":109},[36,44594,621],{"class":98},[36,44596,33738],{"class":59},[36,44598,1509],{"class":109},[36,44600,33743],{"class":163},[36,44602,1558],{"class":109},[36,44604,1158],{"class":59},[36,44606,1509],{"class":109},[36,44608,33743],{"class":163},[36,44610,1558],{"class":109},[36,44612,33756],{"class":59},[36,44614,33759],{"class":98},[36,44616,33762],{"class":163},[36,44618,1520],{"class":109},[36,44620,33767],{"class":98},[36,44622,942],{"class":163},[36,44624,1520],{"class":109},[36,44626,30930],{"class":98},[36,44628,44629],{"class":38,"line":33776},[36,44630,37166],{"class":42},[36,44632,44633],{"class":38,"line":33782},[36,44634,37171],{"class":42},[36,44636,44637,44639,44641],{"class":38,"line":33788},[36,44638,37176],{"class":98},[36,44640,33800],{"class":59},[36,44642,627],{"class":98},[36,44644,44645],{"class":38,"line":33794},[36,44646,33820],{"class":42},[36,44648,44649,44651,44653,44655,44657,44659],{"class":38,"line":33805},[36,44650,33826],{"class":98},[36,44652,176],{"class":163},[36,44654,33831],{"class":98},[36,44656,33834],{"class":5667},[36,44658,176],{"class":163},[36,44660,2025],{"class":98},[36,44662,44663,44665,44667,44669],{"class":38,"line":33811},[36,44664,33844],{"class":59},[36,44666,1472],{"class":98},[36,44668,33849],{"class":109},[36,44670,33852],{"class":98},[36,44672,44673,44675],{"class":38,"line":33817},[36,44674,33858],{"class":59},[36,44676,33861],{"class":98},[36,44678,44679,44681],{"class":38,"line":33823},[36,44680,33867],{"class":59},[36,44682,33870],{"class":98},[36,44684,44685,44687],{"class":38,"line":33841},[36,44686,33876],{"class":59},[36,44688,33879],{"class":98},[36,44690,44691,44693],{"class":38,"line":33855},[36,44692,33885],{"class":59},[36,44694,33888],{"class":98},[36,44696,44697],{"class":38,"line":33864},[36,44698,33894],{"class":98},[36,44700,44701],{"class":38,"line":33873},[36,44702,33900],{"class":42},[36,44704,44705,44707],{"class":38,"line":33882},[36,44706,4541],{"class":163},[36,44708,33908],{"class":98},[36,44710,44711],{"class":38,"line":33891},[36,44712,247],{"emptyLinePlaceholder":246},[36,44714,44715],{"class":38,"line":33897},[36,44716,33919],{"class":42},[36,44718,44719,44721,44723],{"class":38,"line":33903},[36,44720,32380],{"class":163},[36,44722,33927],{"class":55},[36,44724,33930],{"class":98},[36,44726,44727],{"class":38,"line":33911},[36,44728,33936],{"class":42},[36,44730,44731,44733,44735,44737,44739,44741,44743,44745],{"class":38,"line":33916},[36,44732,33942],{"class":98},[36,44734,32126],{"class":5667},[36,44736,176],{"class":163},[36,44738,621],{"class":98},[36,44740,1112],{"class":109},[36,44742,992],{"class":98},[36,44744,908],{"class":109},[36,44746,30930],{"class":98},[36,44748,44749],{"class":38,"line":33922},[36,44750,33962],{"class":42},[36,44752,44753],{"class":38,"line":33933},[36,44754,33968],{"class":42},[36,44756,44757],{"class":38,"line":33939},[36,44758,33974],{"class":42},[36,44760,44761,44763,44765,44767,44769,44771,44773],{"class":38,"line":33959},[36,44762,32160],{"class":98},[36,44764,833],{"class":109},[36,44766,992],{"class":98},[36,44768,694],{"class":109},[36,44770,992],{"class":98},[36,44772,833],{"class":109},[36,44774,627],{"class":98},[36,44776,44777],{"class":38,"line":33965},[36,44778,33997],{"class":42},[36,44780,44781],{"class":38,"line":33971},[36,44782,34003],{"class":42},[36,44784,44785],{"class":38,"line":33977},[36,44786,34009],{"class":42},[36,44788,44789],{"class":38,"line":33994},[36,44790,34015],{"class":42},[36,44792,44793],{"class":38,"line":34000},[36,44794,34021],{"class":42},[36,44796,44797,44799,44801,44803,44805,44807,44809,44811,44813],{"class":38,"line":34006},[36,44798,34027],{"class":98},[36,44800,34030],{"class":59},[36,44802,34033],{"class":98},[36,44804,34036],{"class":59},[36,44806,992],{"class":98},[36,44808,34041],{"class":5667},[36,44810,176],{"class":163},[36,44812,34046],{"class":59},[36,44814,627],{"class":98},[36,44816,44817,44819,44821,44823,44825,44827,44829,44831,44833],{"class":38,"line":34012},[36,44818,34027],{"class":98},[36,44820,34030],{"class":59},[36,44822,34058],{"class":98},[36,44824,34061],{"class":59},[36,44826,992],{"class":98},[36,44828,34041],{"class":5667},[36,44830,176],{"class":163},[36,44832,34070],{"class":59},[36,44834,627],{"class":98},[36,44836,44837],{"class":38,"line":34018},[36,44838,34078],{"class":42},[36,44840,44841],{"class":38,"line":34024},[36,44842,34084],{"class":98},[36,44844,44845],{"class":38,"line":34051},[36,44846,34090],{"class":42},[36,44848,44849,44851,44853],{"class":38,"line":34075},[36,44850,34096],{"class":98},[36,44852,34099],{"class":59},[36,44854,627],{"class":98},[36,44856,44857,44859,44861],{"class":38,"line":34081},[36,44858,34107],{"class":98},[36,44860,34110],{"class":59},[36,44862,627],{"class":98},[36,44864,44865],{"class":38,"line":34087},[36,44866,34118],{"class":42},[36,44868,44869,44871,44873,44875,44877,44879,44881],{"class":38,"line":34093},[36,44870,32160],{"class":98},[36,44872,833],{"class":109},[36,44874,992],{"class":98},[36,44876,694],{"class":109},[36,44878,992],{"class":98},[36,44880,694],{"class":109},[36,44882,627],{"class":98},[36,44884,44885,44887,44889,44891,44893,44895,44897,44899,44901],{"class":38,"line":34104},[36,44886,34027],{"class":98},[36,44888,34030],{"class":59},[36,44890,34145],{"class":98},[36,44892,34036],{"class":59},[36,44894,992],{"class":98},[36,44896,34041],{"class":5667},[36,44898,176],{"class":163},[36,44900,34156],{"class":59},[36,44902,627],{"class":98},[36,44904,44905,44907,44909,44911,44913,44915,44917,44919,44921],{"class":38,"line":34115},[36,44906,34027],{"class":98},[36,44908,34030],{"class":59},[36,44910,34168],{"class":98},[36,44912,34061],{"class":59},[36,44914,992],{"class":98},[36,44916,34041],{"class":5667},[36,44918,176],{"class":163},[36,44920,34179],{"class":59},[36,44922,627],{"class":98},[36,44924,44925],{"class":38,"line":34121},[36,44926,34187],{"class":42},[36,44928,44929],{"class":38,"line":34138},[36,44930,34084],{"class":98},[36,44932,44933,44935,44937],{"class":38,"line":34161},[36,44934,34096],{"class":98},[36,44936,34030],{"class":59},[36,44938,627],{"class":98},[36,44940,44941,44943,44945],{"class":38,"line":34184},[36,44942,34107],{"class":98},[36,44944,34209],{"class":59},[36,44946,627],{"class":98},[36,44948,44949],{"class":38,"line":34190},[36,44950,34217],{"class":98},[36,44952,44953],{"class":38,"line":34195},[36,44954,247],{"emptyLinePlaceholder":246},[36,44956,44957],{"class":38,"line":34204},[36,44958,34228],{"class":42},[36,44960,44961,44963,44965,44967,44969],{"class":38,"line":34214},[36,44962,2010],{"class":163},[36,44964,31653],{"class":109},[36,44966,3400],{"class":163},[36,44968,31658],{"class":59},[36,44970,4190],{"class":98},[36,44972,44973],{"class":38,"line":34220},[36,44974,34247],{"class":42},[36,44976,44977,44980,44982],{"class":38,"line":34225},[36,44978,44979],{"class":98},"    GoogLeNet",[36,44981,176],{"class":163},[36,44983,44984],{"class":98},"GoogLeNet(Inception)\n",[36,44986,44987,44989,44991],{"class":38,"line":34231},[36,44988,34264],{"class":98},[36,44990,176],{"class":163},[36,44992,34269],{"class":98},[36,44994,44995,44997,44999,45002,45004,45006,45008],{"class":38,"line":34244},[36,44996,33826],{"class":98},[36,44998,176],{"class":163},[36,45000,45001],{"class":98},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[36,45003,34282],{"class":5667},[36,45005,176],{"class":163},[36,45007,1563],{"class":109},[36,45009,627],{"class":98},[36,45011,45012],{"class":38,"line":34250},[36,45013,34294],{"class":98},[571,45015,45016],{"start":52},[574,45017,41007],{},[26,45019,45021],{"className":30811,"code":45020,"language":30813,"meta":31,"style":31},"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",[33,45022,45023,45029,45039,45049,45053,45063,45074,45078,45082,45086,45094,45110,45120,45136,45146,45160,45164,45174,45184,45194,45200,45204,45208,45216,45220,45236,45244,45248,45252,45260,45268,45272,45276,45280,45284,45290,45294,45304,45312,45320,45324,45328,45332,45340,45344,45360,45364,45368,45372,45384,45388,45400,45404,45408,45420,45424,45434,45438,45442,45454,45458,45466,45470,45474,45482,45486,45494,45498,45502,45506,45510,45514,45530,45538,45542,45546,45594,45600,45604,45614,45622,45630,45634,45638,45642,45646,45654,45658,45674,45678,45686,45694],{"__ignoreMap":31},[36,45024,45025,45027],{"class":38,"line":39},[36,45026,30825],{"class":163},[36,45028,30828],{"class":98},[36,45030,45031,45033,45035,45037],{"class":38,"line":46},[36,45032,30825],{"class":163},[36,45034,31848],{"class":98},[36,45036,31816],{"class":163},[36,45038,31853],{"class":98},[36,45040,45041,45043,45045,45047],{"class":38,"line":52},[36,45042,31170],{"class":163},[36,45044,31831],{"class":98},[36,45046,30825],{"class":163},[36,45048,31836],{"class":98},[36,45050,45051],{"class":38,"line":66},[36,45052,34355],{"class":42},[36,45054,45055,45057,45059,45061],{"class":38,"line":72},[36,45056,31170],{"class":163},[36,45058,31801],{"class":98},[36,45060,30825],{"class":163},[36,45062,31806],{"class":98},[36,45064,45065,45067,45069,45071],{"class":38,"line":82},[36,45066,31170],{"class":163},[36,45068,32347],{"class":98},[36,45070,30825],{"class":163},[36,45072,45073],{"class":98}," GoogLeNet,Inception\n",[36,45075,45076],{"class":38,"line":88},[36,45077,247],{"emptyLinePlaceholder":246},[36,45079,45080],{"class":38,"line":113},[36,45081,247],{"emptyLinePlaceholder":246},[36,45083,45084],{"class":38,"line":119},[36,45085,34384],{"class":42},[36,45087,45088,45090,45092],{"class":38,"line":131},[36,45089,32380],{"class":163},[36,45091,34391],{"class":55},[36,45093,32386],{"class":98},[36,45095,45096,45098,45100,45102,45104,45106,45108],{"class":38,"line":137},[36,45097,34398],{"class":98},[36,45099,176],{"class":163},[36,45101,31888],{"class":98},[36,45103,31891],{"class":5667},[36,45105,176],{"class":163},[36,45107,31896],{"class":59},[36,45109,31899],{"class":98},[36,45111,45112,45114,45116,45118],{"class":38,"line":147},[36,45113,34415],{"class":5667},[36,45115,176],{"class":163},[36,45117,34420],{"class":109},[36,45119,31899],{"class":98},[36,45121,45122,45124,45126,45128,45130,45132,45134],{"class":38,"line":153},[36,45123,34427],{"class":5667},[36,45125,176],{"class":163},[36,45127,31926],{"class":98},[36,45129,31929],{"class":5667},[36,45131,176],{"class":163},[36,45133,35882],{"class":109},[36,45135,31937],{"class":98},[36,45137,45138,45140,45142,45144],{"class":38,"line":191},[36,45139,34444],{"class":5667},[36,45141,176],{"class":163},[36,45143,31909],{"class":109},[36,45145,627],{"class":98},[36,45147,45148,45150,45152,45154,45156,45158],{"class":38,"line":197},[36,45149,34455],{"class":98},[36,45151,176],{"class":163},[36,45153,31967],{"class":98},[36,45155,31970],{"class":5667},[36,45157,176],{"class":163},[36,45159,34466],{"class":98},[36,45161,45162],{"class":38,"line":217},[36,45163,34471],{"class":42},[36,45165,45166,45168,45170,45172],{"class":38,"line":223},[36,45167,34476],{"class":5667},[36,45169,176],{"class":163},[36,45171,833],{"class":109},[36,45173,31899],{"class":98},[36,45175,45176,45178,45180,45182],{"class":38,"line":243},[36,45177,34487],{"class":5667},[36,45179,176],{"class":163},[36,45181,31909],{"class":109},[36,45183,31899],{"class":98},[36,45185,45186,45188,45190,45192],{"class":38,"line":250},[36,45187,34498],{"class":5667},[36,45189,176],{"class":163},[36,45191,807],{"class":109},[36,45193,627],{"class":98},[36,45195,45196,45198],{"class":38,"line":256},[36,45197,4541],{"class":163},[36,45199,34511],{"class":98},[36,45201,45202],{"class":38,"line":273},[36,45203,247],{"emptyLinePlaceholder":246},[36,45205,45206],{"class":38,"line":278},[36,45207,34520],{"class":42},[36,45209,45210,45212,45214],{"class":38,"line":284},[36,45211,32380],{"class":163},[36,45213,34527],{"class":55},[36,45215,34530],{"class":98},[36,45217,45218],{"class":38,"line":315},[36,45219,34535],{"class":42},[36,45221,45222,45224,45226,45228,45230,45232,45234],{"class":38,"line":320},[36,45223,31670],{"class":98},[36,45225,176],{"class":163},[36,45227,31677],{"class":59},[36,45229,2172],{"class":163},[36,45231,31682],{"class":98},[36,45233,2169],{"class":163},[36,45235,34552],{"class":59},[36,45237,45238,45240,45242],{"class":38,"line":326},[36,45239,31722],{"class":98},[36,45241,176],{"class":163},[36,45243,32722],{"class":98},[36,45245,45246],{"class":38,"line":343},[36,45247,247],{"emptyLinePlaceholder":246},[36,45249,45250],{"class":38,"line":348},[36,45251,34569],{"class":42},[36,45253,45254,45256,45258],{"class":38,"line":354},[36,45255,34574],{"class":98},[36,45257,176],{"class":163},[36,45259,32775],{"class":109},[36,45261,45262,45264,45266],{"class":38,"line":370},[36,45263,34583],{"class":98},[36,45265,176],{"class":163},[36,45267,3536],{"class":109},[36,45269,45270],{"class":38,"line":375},[36,45271,247],{"emptyLinePlaceholder":246},[36,45273,45274],{"class":38,"line":381},[36,45275,34596],{"class":42},[36,45277,45278],{"class":38,"line":399},[36,45279,34601],{"class":42},[36,45281,45282],{"class":38,"line":404},[36,45283,34606],{"class":42},[36,45285,45286,45288],{"class":38,"line":410},[36,45287,34611],{"class":163},[36,45289,33317],{"class":98},[36,45291,45292],{"class":38,"line":423},[36,45293,34618],{"class":42},[36,45295,45296,45298,45300,45302],{"class":38,"line":436},[36,45297,3854],{"class":163},[36,45299,34625],{"class":98},[36,45301,26480],{"class":163},[36,45303,34630],{"class":98},[36,45305,45306,45308,45310],{"class":38,"line":441},[36,45307,34635],{"class":98},[36,45309,176],{"class":163},[36,45311,34640],{"class":98},[36,45313,45314,45316,45318],{"class":38,"line":447},[36,45315,34645],{"class":98},[36,45317,176],{"class":163},[36,45319,34650],{"class":98},[36,45321,45322],{"class":38,"line":465},[36,45323,34655],{"class":42},[36,45325,45326],{"class":38,"line":470},[36,45327,33308],{"class":98},[36,45329,45330],{"class":38,"line":476},[36,45331,34664],{"class":42},[36,45333,45334,45336,45338],{"class":38,"line":496},[36,45335,33093],{"class":98},[36,45337,176],{"class":163},[36,45339,34673],{"class":98},[36,45341,45342],{"class":38,"line":501},[36,45343,34678],{"class":42},[36,45345,45346,45348,45350,45352,45354,45356,45358],{"class":38,"line":507},[36,45347,33110],{"class":98},[36,45349,176],{"class":163},[36,45351,33115],{"class":98},[36,45353,33118],{"class":5667},[36,45355,176],{"class":163},[36,45357,833],{"class":109},[36,45359,627],{"class":98},[36,45361,45362],{"class":38,"line":517},[36,45363,34699],{"class":42},[36,45365,45366],{"class":38,"line":522},[36,45367,34704],{"class":42},[36,45369,45370],{"class":38,"line":528},[36,45371,34709],{"class":42},[36,45373,45374,45376,45378,45380,45382],{"class":38,"line":10203},[36,45375,34714],{"class":98},[36,45377,9918],{"class":163},[36,45379,33220],{"class":98},[36,45381,3400],{"class":163},[36,45383,34723],{"class":98},[36,45385,45386],{"class":38,"line":10227},[36,45387,34728],{"class":42},[36,45389,45390,45392,45394,45396,45398],{"class":38,"line":10232},[36,45391,34733],{"class":98},[36,45393,9918],{"class":163},[36,45395,34738],{"class":98},[36,45397,807],{"class":109},[36,45399,627],{"class":98},[36,45401,45402],{"class":38,"line":10237},[36,45403,247],{"emptyLinePlaceholder":246},[36,45405,45406],{"class":38,"line":10242},[36,45407,34751],{"class":42},[36,45409,45410,45412,45414,45416,45418],{"class":38,"line":10251},[36,45411,34756],{"class":98},[36,45413,176],{"class":163},[36,45415,34761],{"class":98},[36,45417,1198],{"class":163},[36,45419,34766],{"class":98},[36,45421,45422],{"class":38,"line":10256},[36,45423,34771],{"class":42},[36,45425,45426,45428,45430,45432],{"class":38,"line":10262},[36,45427,32884],{"class":109},[36,45429,621],{"class":98},[36,45431,34780],{"class":59},[36,45433,34783],{"class":98},[36,45435,45436],{"class":38,"line":10283},[36,45437,247],{"emptyLinePlaceholder":246},[36,45439,45440],{"class":38,"line":10289},[36,45441,34792],{"class":42},[36,45443,45444,45446,45448,45450,45452],{"class":38,"line":10303},[36,45445,2010],{"class":163},[36,45447,31653],{"class":109},[36,45449,3400],{"class":163},[36,45451,31658],{"class":59},[36,45453,4190],{"class":98},[36,45455,45456],{"class":38,"line":10309},[36,45457,34809],{"class":42},[36,45459,45460,45462,45464],{"class":38,"line":10336},[36,45461,31722],{"class":98},[36,45463,176],{"class":163},[36,45465,44984],{"class":98},[36,45467,45468],{"class":38,"line":10345},[36,45469,34822],{"class":42},[36,45471,45472],{"class":38,"line":10351},[36,45473,34827],{"class":42},[36,45475,45476,45478,45480],{"class":38,"line":10359},[36,45477,34832],{"class":98},[36,45479,34835],{"class":59},[36,45481,30930],{"class":98},[36,45483,45484],{"class":38,"line":10364},[36,45485,34842],{"class":42},[36,45487,45488,45490,45492],{"class":38,"line":17043},[36,45489,34455],{"class":98},[36,45491,176],{"class":163},[36,45493,34851],{"class":98},[36,45495,45496],{"class":38,"line":17049},[36,45497,34856],{"class":42},[36,45499,45500],{"class":38,"line":17072},[36,45501,34861],{"class":98},[36,45503,45504],{"class":38,"line":17078},[36,45505,247],{"emptyLinePlaceholder":246},[36,45507,45508],{"class":38,"line":17101},[36,45509,34870],{"class":42},[36,45511,45512],{"class":38,"line":17115},[36,45513,34875],{"class":42},[36,45515,45516,45518,45520,45522,45524,45526,45528],{"class":38,"line":17135},[36,45517,31670],{"class":98},[36,45519,176],{"class":163},[36,45521,31677],{"class":59},[36,45523,2172],{"class":163},[36,45525,31682],{"class":98},[36,45527,2169],{"class":163},[36,45529,34552],{"class":59},[36,45531,45532,45534,45536],{"class":38,"line":17141},[36,45533,31722],{"class":98},[36,45535,176],{"class":163},[36,45537,32722],{"class":98},[36,45539,45540],{"class":38,"line":17152},[36,45541,34904],{"class":42},[36,45543,45544],{"class":38,"line":17175},[36,45545,34909],{"class":42},[36,45547,45548,45550,45552,45554,45556,45558,45560,45562,45564,45566,45568,45570,45572,45574,45576,45578,45580,45582,45584,45586,45588,45590,45592],{"class":38,"line":17197},[36,45549,34914],{"class":98},[36,45551,176],{"class":163},[36,45553,1503],{"class":98},[36,45555,34921],{"class":59},[36,45557,992],{"class":98},[36,45559,34926],{"class":59},[36,45561,992],{"class":98},[36,45563,34931],{"class":59},[36,45565,992],{"class":98},[36,45567,34936],{"class":59},[36,45569,992],{"class":98},[36,45571,34941],{"class":59},[36,45573,992],{"class":98},[36,45575,34946],{"class":59},[36,45577,992],{"class":98},[36,45579,34951],{"class":59},[36,45581,992],{"class":98},[36,45583,34956],{"class":59},[36,45585,992],{"class":98},[36,45587,34961],{"class":59},[36,45589,992],{"class":98},[36,45591,34966],{"class":59},[36,45593,33679],{"class":98},[36,45595,45596,45598],{"class":38,"line":17202},[36,45597,34611],{"class":163},[36,45599,33317],{"class":98},[36,45601,45602],{"class":38,"line":17208},[36,45603,34979],{"class":42},[36,45605,45606,45608,45610,45612],{"class":38,"line":17222},[36,45607,3854],{"class":163},[36,45609,34986],{"class":98},[36,45611,26480],{"class":163},[36,45613,34630],{"class":98},[36,45615,45616,45618,45620],{"class":38,"line":17235},[36,45617,33043],{"class":98},[36,45619,176],{"class":163},[36,45621,33048],{"class":98},[36,45623,45624,45626,45628],{"class":38,"line":17240},[36,45625,33058],{"class":98},[36,45627,176],{"class":163},[36,45629,33063],{"class":98},[36,45631,45632],{"class":38,"line":17254},[36,45633,247],{"emptyLinePlaceholder":246},[36,45635,45636],{"class":38,"line":17259},[36,45637,35015],{"class":42},[36,45639,45640],{"class":38,"line":17265},[36,45641,33308],{"class":98},[36,45643,45644],{"class":38,"line":17270},[36,45645,35024],{"class":42},[36,45647,45648,45650,45652],{"class":38,"line":17284},[36,45649,33093],{"class":98},[36,45651,176],{"class":163},[36,45653,33098],{"class":98},[36,45655,45656],{"class":38,"line":17289},[36,45657,35037],{"class":42},[36,45659,45660,45662,45664,45666,45668,45670,45672],{"class":38,"line":17294},[36,45661,33110],{"class":98},[36,45663,176],{"class":163},[36,45665,33115],{"class":98},[36,45667,33118],{"class":5667},[36,45669,176],{"class":163},[36,45671,833],{"class":109},[36,45673,627],{"class":98},[36,45675,45676],{"class":38,"line":17308},[36,45677,35058],{"class":42},[36,45679,45680,45682,45684],{"class":38,"line":17320},[36,45681,35063],{"class":98},[36,45683,176],{"class":163},[36,45685,35068],{"class":98},[36,45687,45688,45690,45692],{"class":38,"line":17325},[36,45689,35073],{"class":98},[36,45691,176],{"class":163},[36,45693,35078],{"class":98},[36,45695,45696,45698,45700,45702,45704,45706,45708,45710],{"class":38,"line":17338},[36,45697,35083],{"class":109},[36,45699,621],{"class":98},[36,45701,35088],{"class":59},[36,45703,35091],{"class":98},[36,45705,35094],{"class":59},[36,45707,992],{"class":98},[36,45709,35099],{"class":59},[36,45711,35102],{"class":98},[588,45713,45715],{"id":45714},"_24训练自己的数据集","2.4.训练自己的数据集",[14,45717,45718],{},"猫狗分类任务",[14,45720,45721],{},"划分数据集和验证集",[26,45723,45725],{"className":30811,"code":45724,"language":30813,"meta":31,"style":31},"# 创建脚本，用于划分数据集和验证集\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",[33,45726,45727,45732,45739,45744,45755,45762,45766,45776,45790,45799,45803,45808,45818,45838,45842,45847,45857,45868,45881,45885,45890,45899,45909,45920,45924,45929,45939,45943,45948,45953,45958,45963,45968,45972,45982,46009,46022,46034,46061,46066,46071,46085,46090,46102,46117,46132,46140,46144,46149,46155,46167,46180,46185,46190,46195,46245,46251,46255],{"__ignoreMap":31},[36,45728,45729],{"class":38,"line":39},[36,45730,45731],{"class":42},"# 创建脚本，用于划分数据集和验证集\n",[36,45733,45734,45736],{"class":38,"line":46},[36,45735,30825],{"class":163},[36,45737,45738],{"class":98}," os\n",[36,45740,45741],{"class":38,"line":52},[36,45742,45743],{"class":42},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[36,45745,45746,45748,45751,45753],{"class":38,"line":66},[36,45747,31170],{"class":163},[36,45749,45750],{"class":98}," shutil ",[36,45752,30825],{"class":163},[36,45754,32255],{"class":98},[36,45756,45757,45759],{"class":38,"line":72},[36,45758,30825],{"class":163},[36,45760,45761],{"class":98}," random\n",[36,45763,45764],{"class":38,"line":82},[36,45765,247],{"emptyLinePlaceholder":246},[36,45767,45768,45770,45773],{"class":38,"line":88},[36,45769,32380],{"class":163},[36,45771,45772],{"class":55}," mkfile",[36,45774,45775],{"class":98},"(file):\n",[36,45777,45778,45780,45782,45785,45788],{"class":38,"line":113},[36,45779,3552],{"class":163},[36,45781,39363],{"class":163},[36,45783,45784],{"class":98}," os.path.exists(",[36,45786,45787],{"class":5667},"file",[36,45789,31219],{"class":98},[36,45791,45792,45795,45797],{"class":38,"line":119},[36,45793,45794],{"class":98},"        os.makedirs(",[36,45796,45787],{"class":5667},[36,45798,627],{"class":98},[36,45800,45801],{"class":38,"line":131},[36,45802,247],{"emptyLinePlaceholder":246},[36,45804,45805],{"class":38,"line":137},[36,45806,45807],{"class":42},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[36,45809,45810,45813,45815],{"class":38,"line":147},[36,45811,45812],{"class":98},"file_path",[36,45814,176],{"class":163},[36,45816,45817],{"class":59},"'data_cat_dog'\n",[36,45819,45820,45823,45825,45828,45830,45833,45835],{"class":38,"line":153},[36,45821,45822],{"class":98},"flower_class",[36,45824,176],{"class":163},[36,45826,45827],{"class":98},"[cla ",[36,45829,3476],{"class":163},[36,45831,45832],{"class":98}," cla ",[36,45834,26480],{"class":163},[36,45836,45837],{"class":98}," os.listdir(file_path)]\n",[36,45839,45840],{"class":38,"line":191},[36,45841,247],{"emptyLinePlaceholder":246},[36,45843,45844],{"class":38,"line":197},[36,45845,45846],{"class":42},"# 创建训练集train文件夹\n",[36,45848,45849,45852,45855],{"class":38,"line":217},[36,45850,45851],{"class":98},"mkfile(",[36,45853,45854],{"class":59},"'data\u002Ftrain'",[36,45856,627],{"class":98},[36,45858,45859,45861,45863,45865],{"class":38,"line":223},[36,45860,3476],{"class":163},[36,45862,45832],{"class":98},[36,45864,26480],{"class":163},[36,45866,45867],{"class":98}," flower_class:\n",[36,45869,45870,45873,45876,45878],{"class":38,"line":243},[36,45871,45872],{"class":98},"    mkfile(",[36,45874,45875],{"class":59},"'data\u002Ftrain\u002F'",[36,45877,1095],{"class":163},[36,45879,45880],{"class":98},"cla)\n",[36,45882,45883],{"class":38,"line":250},[36,45884,247],{"emptyLinePlaceholder":246},[36,45886,45887],{"class":38,"line":256},[36,45888,45889],{"class":42},"# 创建验证集val文件夹\n",[36,45891,45892,45894,45897],{"class":38,"line":273},[36,45893,45851],{"class":98},[36,45895,45896],{"class":59},"'data\u002Ftest'",[36,45898,627],{"class":98},[36,45900,45901,45903,45905,45907],{"class":38,"line":278},[36,45902,3476],{"class":163},[36,45904,45832],{"class":98},[36,45906,26480],{"class":163},[36,45908,45867],{"class":98},[36,45910,45911,45913,45916,45918],{"class":38,"line":284},[36,45912,45872],{"class":98},[36,45914,45915],{"class":59},"'data\u002Ftest\u002F'",[36,45917,1095],{"class":163},[36,45919,45880],{"class":98},[36,45921,45922],{"class":38,"line":315},[36,45923,247],{"emptyLinePlaceholder":246},[36,45925,45926],{"class":38,"line":320},[36,45927,45928],{"class":42},"# 划分比例，训练集：测试集=9：1\n",[36,45930,45931,45934,45936],{"class":38,"line":326},[36,45932,45933],{"class":98},"split_rate",[36,45935,176],{"class":163},[36,45937,45938],{"class":109},"0.1\n",[36,45940,45941],{"class":38,"line":343},[36,45942,247],{"emptyLinePlaceholder":246},[36,45944,45945],{"class":38,"line":348},[36,45946,45947],{"class":42},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[36,45949,45950],{"class":38,"line":354},[36,45951,45952],{"class":42},"# cla_path：当前类别的原始图片路径\n",[36,45954,45955],{"class":38,"line":370},[36,45956,45957],{"class":42},"# images：当前类别下所有图片的文件名列表\n",[36,45959,45960],{"class":38,"line":375},[36,45961,45962],{"class":42},"# num：该类别图片总数\n",[36,45964,45965],{"class":38,"line":381},[36,45966,45967],{"class":42},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[36,45969,45970],{"class":38,"line":399},[36,45971,247],{"emptyLinePlaceholder":246},[36,45973,45974,45976,45978,45980],{"class":38,"line":404},[36,45975,3476],{"class":163},[36,45977,45832],{"class":98},[36,45979,26480],{"class":163},[36,45981,45867],{"class":98},[36,45983,45984,45987,45989,45992,45994,45997,46000,46002,46004,46006],{"class":38,"line":410},[36,45985,45986],{"class":98},"    cla_path ",[36,45988,176],{"class":163},[36,45990,45991],{"class":98}," file_path ",[36,45993,1095],{"class":163},[36,45995,45996],{"class":59}," '\u002F'",[36,45998,45999],{"class":163}," +",[36,46001,45832],{"class":98},[36,46003,1095],{"class":163},[36,46005,45996],{"class":59},[36,46007,46008],{"class":42},"  # 某一类别的子目录\n",[36,46010,46011,46014,46016,46019],{"class":38,"line":423},[36,46012,46013],{"class":98},"    images ",[36,46015,176],{"class":163},[36,46017,46018],{"class":98}," os.listdir(cla_path)  ",[36,46020,46021],{"class":42},"# iamges 列表存储了该目录下所有图像的名称\n",[36,46023,46024,46027,46029,46031],{"class":38,"line":436},[36,46025,46026],{"class":98},"    num ",[36,46028,176],{"class":163},[36,46030,7782],{"class":109},[36,46032,46033],{"class":98},"(images)\n",[36,46035,46036,46039,46041,46044,46046,46048,46050,46053,46055,46058],{"class":38,"line":441},[36,46037,46038],{"class":98},"    eval_index ",[36,46040,176],{"class":163},[36,46042,46043],{"class":98}," random.sample(images, ",[36,46045,1107],{"class":5667},[36,46047,176],{"class":163},[36,46049,624],{"class":109},[36,46051,46052],{"class":98},"(num ",[36,46054,1069],{"class":163},[36,46056,46057],{"class":98}," split_rate))  ",[36,46059,46060],{"class":42},"# 从images列表中随机抽取 k 个图像名称\n",[36,46062,46063],{"class":38,"line":447},[36,46064,46065],{"class":42},"    # 遍历该类别下的所有图片\n",[36,46067,46068],{"class":38,"line":465},[36,46069,46070],{"class":42},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[36,46072,46073,46075,46078,46080,46082],{"class":38,"line":470},[36,46074,3652],{"class":163},[36,46076,46077],{"class":98}," index, image ",[36,46079,26480],{"class":163},[36,46081,32039],{"class":109},[36,46083,46084],{"class":98},"(images):\n",[36,46086,46087],{"class":38,"line":476},[36,46088,46089],{"class":42},"        # eval_index 中保存验证集val的图像名称\n",[36,46091,46092,46094,46097,46099],{"class":38,"line":496},[36,46093,2955],{"class":163},[36,46095,46096],{"class":98}," image ",[36,46098,26480],{"class":163},[36,46100,46101],{"class":98}," eval_index:\n",[36,46103,46104,46107,46109,46112,46114],{"class":38,"line":501},[36,46105,46106],{"class":98},"            image_path ",[36,46108,176],{"class":163},[36,46110,46111],{"class":98}," cla_path ",[36,46113,1095],{"class":163},[36,46115,46116],{"class":98}," image\n",[36,46118,46119,46122,46124,46127,46129],{"class":38,"line":507},[36,46120,46121],{"class":98},"            new_path ",[36,46123,176],{"class":163},[36,46125,46126],{"class":59}," 'data\u002Ftest\u002F'",[36,46128,45999],{"class":163},[36,46130,46131],{"class":98}," cla\n",[36,46133,46134,46137],{"class":38,"line":517},[36,46135,46136],{"class":98},"            copy(image_path, new_path)  ",[36,46138,46139],{"class":42},"# 将选中的图像复制到新路径\n",[36,46141,46142],{"class":38,"line":522},[36,46143,247],{"emptyLinePlaceholder":246},[36,46145,46146],{"class":38,"line":528},[36,46147,46148],{"class":42},"        # 其余的图像保存在训练集train中\n",[36,46150,46151,46153],{"class":38,"line":10203},[36,46152,2992],{"class":163},[36,46154,4190],{"class":98},[36,46156,46157,46159,46161,46163,46165],{"class":38,"line":10227},[36,46158,46106],{"class":98},[36,46160,176],{"class":163},[36,46162,46111],{"class":98},[36,46164,1095],{"class":163},[36,46166,46116],{"class":98},[36,46168,46169,46171,46173,46176,46178],{"class":38,"line":10232},[36,46170,46121],{"class":98},[36,46172,176],{"class":163},[36,46174,46175],{"class":59}," 'data\u002Ftrain\u002F'",[36,46177,45999],{"class":163},[36,46179,46131],{"class":98},[36,46181,46182],{"class":38,"line":10237},[36,46183,46184],{"class":98},"            copy(image_path, new_path)\n",[36,46186,46187],{"class":38,"line":10242},[36,46188,46189],{"class":42},"            # 打印进度条信息\n",[36,46191,46192],{"class":38,"line":10251},[36,46193,46194],{"class":42},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[36,46196,46197,46199,46201,46203,46206,46208,46210,46213,46215,46217,46219,46222,46225,46227,46229,46232,46235,46237,46239,46242],{"class":38,"line":10256},[36,46198,32884],{"class":109},[36,46200,621],{"class":98},[36,46202,866],{"class":59},[36,46204,46205],{"class":109},"\\r",[36,46207,1503],{"class":59},[36,46209,32892],{"class":109},[36,46211,46212],{"class":59},"] processing [",[36,46214,32892],{"class":109},[36,46216,1198],{"class":59},[36,46218,32892],{"class":109},[36,46220,46221],{"class":59},"]\"",[36,46223,46224],{"class":98},".format(cla, index ",[36,46226,1095],{"class":163},[36,46228,25555],{"class":109},[36,46230,46231],{"class":98},", num), ",[36,46233,46234],{"class":5667},"end",[36,46236,176],{"class":163},[36,46238,8103],{"class":59},[36,46240,46241],{"class":98},")  ",[36,46243,46244],{"class":42},"# processing bar\n",[36,46246,46247,46249],{"class":38,"line":10262},[36,46248,31732],{"class":109},[36,46250,2435],{"class":98},[36,46252,46253],{"class":38,"line":10283},[36,46254,247],{"emptyLinePlaceholder":246},[36,46256,46257,46259,46261,46264],{"class":38,"line":10289},[36,46258,30848],{"class":109},[36,46260,621],{"class":98},[36,46262,46263],{"class":59},"\"processing done!\"",[36,46265,627],{"class":98},[14,46267,46268],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22437,46270,46272],{"id":46271},"_242模型代码","2.4.2.模型代码",[14,46274,46275],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[26,46277,46279],{"className":30811,"code":46278,"language":30813,"meta":31,"style":31},"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",[33,46280,46281,46287,46297,46307,46311,46327,46335,46349,46359,46363,46393,46397,46431,46477,46481,46515,46561,46565,46569,46603,46633,46637,46645,46659,46681,46703,46721,46725,46739,46743,46747,46763,46767,46775,46789,46799,46843,46847,46875,46879,46889,46917,46921,46957,46961,46989,46993,47003,47035,47067,47095,47099,47109,47141,47173,47205,47237,47269,47297,47301,47311,47343,47375,47387,47391,47403,47407,47411,47423,47431,47451,47455,47459,47463,47467,47471,47475,47489,47497,47505,47517,47531,47539,47543,47551,47561,47571,47581,47591,47601,47607,47611,47615,47627,47647,47655],{"__ignoreMap":31},[36,46282,46283,46285],{"class":38,"line":39},[36,46284,30825],{"class":163},[36,46286,30828],{"class":98},[36,46288,46289,46291,46293,46295],{"class":38,"line":46},[36,46290,31170],{"class":163},[36,46292,31173],{"class":98},[36,46294,30825],{"class":163},[36,46296,31178],{"class":98},[36,46298,46299,46301,46303,46305],{"class":38,"line":52},[36,46300,31170],{"class":163},[36,46302,31190],{"class":98},[36,46304,30825],{"class":163},[36,46306,31195],{"class":98},[36,46308,46309],{"class":38,"line":66},[36,46310,247],{"emptyLinePlaceholder":246},[36,46312,46313,46315,46317,46319,46321,46323,46325],{"class":38,"line":72},[36,46314,15133],{"class":163},[36,46316,41926],{"class":55},[36,46318,621],{"class":98},[36,46320,31211],{"class":55},[36,46322,1172],{"class":98},[36,46324,31216],{"class":55},[36,46326,31219],{"class":98},[36,46328,46329,46331,46333],{"class":38,"line":82},[36,46330,31234],{"class":163},[36,46332,31237],{"class":109},[36,46334,41945],{"class":98},[36,46336,46337,46339,46341,46343,46345,46347],{"class":38,"line":88},[36,46338,31250],{"class":109},[36,46340,41952],{"class":98},[36,46342,31256],{"class":109},[36,46344,31259],{"class":98},[36,46346,31262],{"class":109},[36,46348,2435],{"class":98},[36,46350,46351,46353,46355,46357],{"class":38,"line":113},[36,46352,31278],{"class":109},[36,46354,35204],{"class":98},[36,46356,176],{"class":163},[36,46358,35209],{"class":98},[36,46360,46361],{"class":38,"line":119},[36,46362,41975],{"class":42},[36,46364,46365,46367,46369,46371,46373,46375,46377,46379,46381,46383,46385,46387,46389,46391],{"class":38,"line":131},[36,46366,31278],{"class":109},[36,46368,41982],{"class":98},[36,46370,176],{"class":163},[36,46372,31286],{"class":98},[36,46374,31289],{"class":5667},[36,46376,176],{"class":163},[36,46378,41993],{"class":98},[36,46380,31298],{"class":5667},[36,46382,176],{"class":163},[36,46384,42000],{"class":98},[36,46386,31307],{"class":5667},[36,46388,176],{"class":163},[36,46390,833],{"class":109},[36,46392,627],{"class":98},[36,46394,46395],{"class":38,"line":137},[36,46396,42013],{"class":42},[36,46398,46399,46401,46403,46405,46407,46409,46411,46413,46415,46417,46419,46421,46423,46425,46427,46429],{"class":38,"line":147},[36,46400,31278],{"class":109},[36,46402,42020],{"class":98},[36,46404,176],{"class":163},[36,46406,31286],{"class":98},[36,46408,31289],{"class":5667},[36,46410,176],{"class":163},[36,46412,41993],{"class":98},[36,46414,31298],{"class":5667},[36,46416,176],{"class":163},[36,46418,42037],{"class":98},[36,46420,807],{"class":109},[36,46422,42042],{"class":98},[36,46424,31307],{"class":5667},[36,46426,176],{"class":163},[36,46428,833],{"class":109},[36,46430,627],{"class":98},[36,46432,46433,46435,46437,46439,46441,46443,46445,46447,46449,46451,46453,46455,46457,46459,46461,46463,46465,46467,46469,46471,46473,46475],{"class":38,"line":153},[36,46434,31278],{"class":109},[36,46436,42057],{"class":98},[36,46438,176],{"class":163},[36,46440,31286],{"class":98},[36,46442,31289],{"class":5667},[36,46444,176],{"class":163},[36,46446,42037],{"class":98},[36,46448,807],{"class":109},[36,46450,42042],{"class":98},[36,46452,31298],{"class":5667},[36,46454,176],{"class":163},[36,46456,42037],{"class":98},[36,46458,833],{"class":109},[36,46460,42042],{"class":98},[36,46462,31307],{"class":5667},[36,46464,176],{"class":163},[36,46466,689],{"class":109},[36,46468,992],{"class":98},[36,46470,31316],{"class":5667},[36,46472,176],{"class":163},[36,46474,833],{"class":109},[36,46476,627],{"class":98},[36,46478,46479],{"class":38,"line":191},[36,46480,42102],{"class":42},[36,46482,46483,46485,46487,46489,46491,46493,46495,46497,46499,46501,46503,46505,46507,46509,46511,46513],{"class":38,"line":197},[36,46484,31278],{"class":109},[36,46486,42109],{"class":98},[36,46488,176],{"class":163},[36,46490,31286],{"class":98},[36,46492,31289],{"class":5667},[36,46494,176],{"class":163},[36,46496,41993],{"class":98},[36,46498,31298],{"class":5667},[36,46500,176],{"class":163},[36,46502,42126],{"class":98},[36,46504,807],{"class":109},[36,46506,42042],{"class":98},[36,46508,31307],{"class":5667},[36,46510,176],{"class":163},[36,46512,833],{"class":109},[36,46514,627],{"class":98},[36,46516,46517,46519,46521,46523,46525,46527,46529,46531,46533,46535,46537,46539,46541,46543,46545,46547,46549,46551,46553,46555,46557,46559],{"class":38,"line":217},[36,46518,31278],{"class":109},[36,46520,42145],{"class":98},[36,46522,176],{"class":163},[36,46524,31286],{"class":98},[36,46526,31289],{"class":5667},[36,46528,176],{"class":163},[36,46530,42126],{"class":98},[36,46532,807],{"class":109},[36,46534,42042],{"class":98},[36,46536,31298],{"class":5667},[36,46538,176],{"class":163},[36,46540,42126],{"class":98},[36,46542,833],{"class":109},[36,46544,42042],{"class":98},[36,46546,31307],{"class":5667},[36,46548,176],{"class":163},[36,46550,933],{"class":109},[36,46552,992],{"class":98},[36,46554,31316],{"class":5667},[36,46556,176],{"class":163},[36,46558,694],{"class":109},[36,46560,627],{"class":98},[36,46562,46563],{"class":38,"line":223},[36,46564,42190],{"class":42},[36,46566,46567],{"class":38,"line":243},[36,46568,42195],{"class":42},[36,46570,46571,46573,46575,46577,46579,46581,46583,46585,46587,46589,46591,46593,46595,46597,46599,46601],{"class":38,"line":250},[36,46572,31278],{"class":109},[36,46574,42202],{"class":98},[36,46576,176],{"class":163},[36,46578,35262],{"class":98},[36,46580,31307],{"class":5667},[36,46582,176],{"class":163},[36,46584,689],{"class":109},[36,46586,992],{"class":98},[36,46588,31362],{"class":5667},[36,46590,176],{"class":163},[36,46592,833],{"class":109},[36,46594,992],{"class":98},[36,46596,31316],{"class":5667},[36,46598,176],{"class":163},[36,46600,833],{"class":109},[36,46602,627],{"class":98},[36,46604,46605,46607,46609,46611,46613,46615,46617,46619,46621,46623,46625,46627,46629,46631],{"class":38,"line":256},[36,46606,31278],{"class":109},[36,46608,42237],{"class":98},[36,46610,176],{"class":163},[36,46612,31286],{"class":98},[36,46614,31289],{"class":5667},[36,46616,176],{"class":163},[36,46618,41993],{"class":98},[36,46620,31298],{"class":5667},[36,46622,176],{"class":163},[36,46624,42254],{"class":98},[36,46626,31307],{"class":5667},[36,46628,176],{"class":163},[36,46630,833],{"class":109},[36,46632,627],{"class":98},[36,46634,46635],{"class":38,"line":273},[36,46636,247],{"emptyLinePlaceholder":246},[36,46638,46639,46641,46643],{"class":38,"line":278},[36,46640,31234],{"class":163},[36,46642,31526],{"class":55},[36,46644,31529],{"class":98},[36,46646,46647,46649,46651,46653,46655,46657],{"class":38,"line":284},[36,46648,42279],{"class":98},[36,46650,176],{"class":163},[36,46652,31256],{"class":109},[36,46654,35617],{"class":98},[36,46656,31256],{"class":109},[36,46658,42290],{"class":98},[36,46660,46661,46663,46665,46667,46669,46671,46673,46675,46677,46679],{"class":38,"line":315},[36,46662,7536],{"class":98},[36,46664,176],{"class":163},[36,46666,31256],{"class":109},[36,46668,35617],{"class":98},[36,46670,31256],{"class":109},[36,46672,42305],{"class":98},[36,46674,31256],{"class":109},[36,46676,35617],{"class":98},[36,46678,31256],{"class":109},[36,46680,42314],{"class":98},[36,46682,46683,46685,46687,46689,46691,46693,46695,46697,46699,46701],{"class":38,"line":320},[36,46684,42319],{"class":98},[36,46686,176],{"class":163},[36,46688,31256],{"class":109},[36,46690,35617],{"class":98},[36,46692,31256],{"class":109},[36,46694,42330],{"class":98},[36,46696,31256],{"class":109},[36,46698,35617],{"class":98},[36,46700,31256],{"class":109},[36,46702,42339],{"class":98},[36,46704,46705,46707,46709,46711,46713,46715,46717,46719],{"class":38,"line":326},[36,46706,42344],{"class":98},[36,46708,176],{"class":163},[36,46710,31256],{"class":109},[36,46712,35617],{"class":98},[36,46714,31256],{"class":109},[36,46716,42355],{"class":98},[36,46718,31256],{"class":109},[36,46720,42360],{"class":98},[36,46722,46723],{"class":38,"line":343},[36,46724,42365],{"class":42},[36,46726,46727,46729,46731,46733,46735,46737],{"class":38,"line":348},[36,46728,15191],{"class":163},[36,46730,42372],{"class":98},[36,46732,33118],{"class":5667},[36,46734,176],{"class":163},[36,46736,833],{"class":109},[36,46738,627],{"class":98},[36,46740,46741],{"class":38,"line":354},[36,46742,247],{"emptyLinePlaceholder":246},[36,46744,46745],{"class":38,"line":370},[36,46746,42393],{"class":42},[36,46748,46749,46751,46753,46755,46757,46759,46761],{"class":38,"line":375},[36,46750,15133],{"class":163},[36,46752,42400],{"class":55},[36,46754,621],{"class":98},[36,46756,31211],{"class":55},[36,46758,1172],{"class":98},[36,46760,31216],{"class":55},[36,46762,31219],{"class":98},[36,46764,46765],{"class":38,"line":381},[36,46766,42415],{"class":42},[36,46768,46769,46771,46773],{"class":38,"line":399},[36,46770,31234],{"class":163},[36,46772,31237],{"class":109},[36,46774,42424],{"class":98},[36,46776,46777,46779,46781,46783,46785,46787],{"class":38,"line":404},[36,46778,31250],{"class":109},[36,46780,42431],{"class":98},[36,46782,31256],{"class":109},[36,46784,31259],{"class":98},[36,46786,31262],{"class":109},[36,46788,2435],{"class":98},[36,46790,46791,46793,46795,46797],{"class":38,"line":410},[36,46792,31278],{"class":109},[36,46794,42446],{"class":98},[36,46796,176],{"class":163},[36,46798,38442],{"class":98},[36,46800,46801,46803,46805,46807,46809,46811,46813,46815,46817,46819,46821,46823,46825,46827,46829,46831,46833,46835,46837,46839,46841],{"class":38,"line":423},[36,46802,38447],{"class":98},[36,46804,31289],{"class":5667},[36,46806,176],{"class":163},[36,46808,689],{"class":109},[36,46810,992],{"class":98},[36,46812,31298],{"class":5667},[36,46814,176],{"class":163},[36,46816,819],{"class":109},[36,46818,992],{"class":98},[36,46820,31307],{"class":5667},[36,46822,176],{"class":163},[36,46824,983],{"class":109},[36,46826,992],{"class":98},[36,46828,31362],{"class":5667},[36,46830,176],{"class":163},[36,46832,694],{"class":109},[36,46834,992],{"class":98},[36,46836,31316],{"class":5667},[36,46838,176],{"class":163},[36,46840,689],{"class":109},[36,46842,38480],{"class":98},[36,46844,46845],{"class":38,"line":436},[36,46846,38485],{"class":98},[36,46848,46849,46851,46853,46855,46857,46859,46861,46863,46865,46867,46869,46871,46873],{"class":38,"line":441},[36,46850,38530],{"class":98},[36,46852,31307],{"class":5667},[36,46854,176],{"class":163},[36,46856,689],{"class":109},[36,46858,992],{"class":98},[36,46860,31362],{"class":5667},[36,46862,176],{"class":163},[36,46864,694],{"class":109},[36,46866,992],{"class":98},[36,46868,31316],{"class":5667},[36,46870,176],{"class":163},[36,46872,833],{"class":109},[36,46874,627],{"class":98},[36,46876,46877],{"class":38,"line":447},[36,46878,38559],{"class":98},[36,46880,46881,46883,46885,46887],{"class":38,"line":465},[36,46882,31278],{"class":109},[36,46884,42537],{"class":98},[36,46886,176],{"class":163},[36,46888,38442],{"class":98},[36,46890,46891,46893,46895,46897,46899,46901,46903,46905,46907,46909,46911,46913,46915],{"class":38,"line":470},[36,46892,38447],{"class":98},[36,46894,31289],{"class":5667},[36,46896,176],{"class":163},[36,46898,819],{"class":109},[36,46900,992],{"class":98},[36,46902,31298],{"class":5667},[36,46904,176],{"class":163},[36,46906,819],{"class":109},[36,46908,992],{"class":98},[36,46910,31307],{"class":5667},[36,46912,176],{"class":163},[36,46914,833],{"class":109},[36,46916,38480],{"class":98},[36,46918,46919],{"class":38,"line":476},[36,46920,38485],{"class":98},[36,46922,46923,46925,46927,46929,46931,46933,46935,46937,46939,46941,46943,46945,46947,46949,46951,46953,46955],{"class":38,"line":496},[36,46924,38447],{"class":98},[36,46926,31289],{"class":5667},[36,46928,176],{"class":163},[36,46930,819],{"class":109},[36,46932,992],{"class":98},[36,46934,31298],{"class":5667},[36,46936,176],{"class":163},[36,46938,42592],{"class":109},[36,46940,992],{"class":98},[36,46942,31307],{"class":5667},[36,46944,176],{"class":163},[36,46946,689],{"class":109},[36,46948,992],{"class":98},[36,46950,31316],{"class":5667},[36,46952,176],{"class":163},[36,46954,833],{"class":109},[36,46956,38480],{"class":98},[36,46958,46959],{"class":38,"line":501},[36,46960,38485],{"class":98},[36,46962,46963,46965,46967,46969,46971,46973,46975,46977,46979,46981,46983,46985,46987],{"class":38,"line":507},[36,46964,38530],{"class":98},[36,46966,31307],{"class":5667},[36,46968,176],{"class":163},[36,46970,689],{"class":109},[36,46972,992],{"class":98},[36,46974,31362],{"class":5667},[36,46976,176],{"class":163},[36,46978,694],{"class":109},[36,46980,992],{"class":98},[36,46982,31316],{"class":5667},[36,46984,176],{"class":163},[36,46986,833],{"class":109},[36,46988,627],{"class":98},[36,46990,46991],{"class":38,"line":517},[36,46992,38559],{"class":98},[36,46994,46995,46997,46999,47001],{"class":38,"line":522},[36,46996,31278],{"class":109},[36,46998,42653],{"class":98},[36,47000,176],{"class":163},[36,47002,38442],{"class":98},[36,47004,47005,47007,47009,47011,47013,47015,47017,47019,47021,47023,47025,47027,47029,47031,47033],{"class":38,"line":528},[36,47006,42662],{"class":98},[36,47008,42592],{"class":109},[36,47010,992],{"class":98},[36,47012,819],{"class":109},[36,47014,42671],{"class":98},[36,47016,825],{"class":109},[36,47018,992],{"class":98},[36,47020,32503],{"class":109},[36,47022,42680],{"class":98},[36,47024,1215],{"class":109},[36,47026,992],{"class":98},[36,47028,813],{"class":109},[36,47030,42689],{"class":98},[36,47032,813],{"class":109},[36,47034,38480],{"class":98},[36,47036,47037,47039,47041,47043,47045,47047,47049,47051,47053,47055,47057,47059,47061,47063,47065],{"class":38,"line":10203},[36,47038,42662],{"class":98},[36,47040,35303],{"class":109},[36,47042,992],{"class":98},[36,47044,32503],{"class":109},[36,47046,42671],{"class":98},[36,47048,32503],{"class":109},[36,47050,992],{"class":98},[36,47052,42592],{"class":109},[36,47054,42680],{"class":98},[36,47056,813],{"class":109},[36,47058,992],{"class":98},[36,47060,825],{"class":109},[36,47062,42689],{"class":98},[36,47064,819],{"class":109},[36,47066,38480],{"class":98},[36,47068,47069,47071,47073,47075,47077,47079,47081,47083,47085,47087,47089,47091,47093],{"class":38,"line":10227},[36,47070,38530],{"class":98},[36,47072,31307],{"class":5667},[36,47074,176],{"class":163},[36,47076,689],{"class":109},[36,47078,992],{"class":98},[36,47080,31362],{"class":5667},[36,47082,176],{"class":163},[36,47084,694],{"class":109},[36,47086,992],{"class":98},[36,47088,31316],{"class":5667},[36,47090,176],{"class":163},[36,47092,833],{"class":109},[36,47094,627],{"class":98},[36,47096,47097],{"class":38,"line":10232},[36,47098,38559],{"class":98},[36,47100,47101,47103,47105,47107],{"class":38,"line":10237},[36,47102,31278],{"class":109},[36,47104,42764],{"class":98},[36,47106,176],{"class":163},[36,47108,38442],{"class":98},[36,47110,47111,47113,47115,47117,47119,47121,47123,47125,47127,47129,47131,47133,47135,47137,47139],{"class":38,"line":10242},[36,47112,42662],{"class":98},[36,47114,42775],{"class":109},[36,47116,992],{"class":98},[36,47118,42592],{"class":109},[36,47120,42671],{"class":98},[36,47122,825],{"class":109},[36,47124,992],{"class":98},[36,47126,42788],{"class":109},[36,47128,42680],{"class":98},[36,47130,1215],{"class":109},[36,47132,992],{"class":98},[36,47134,1221],{"class":109},[36,47136,42689],{"class":98},[36,47138,819],{"class":109},[36,47140,38480],{"class":98},[36,47142,47143,47145,47147,47149,47151,47153,47155,47157,47159,47161,47163,47165,47167,47169,47171],{"class":38,"line":10251},[36,47144,42662],{"class":98},[36,47146,38890],{"class":109},[36,47148,992],{"class":98},[36,47150,21487],{"class":109},[36,47152,42671],{"class":98},[36,47154,1232],{"class":109},[36,47156,992],{"class":98},[36,47158,31934],{"class":109},[36,47160,42680],{"class":98},[36,47162,1413],{"class":109},[36,47164,992],{"class":98},[36,47166,819],{"class":109},[36,47168,42689],{"class":98},[36,47170,819],{"class":109},[36,47172,38480],{"class":98},[36,47174,47175,47177,47179,47181,47183,47185,47187,47189,47191,47193,47195,47197,47199,47201,47203],{"class":38,"line":10256},[36,47176,42662],{"class":98},[36,47178,38890],{"class":109},[36,47180,992],{"class":98},[36,47182,32503],{"class":109},[36,47184,42671],{"class":98},[36,47186,32503],{"class":109},[36,47188,992],{"class":98},[36,47190,35303],{"class":109},[36,47192,42680],{"class":98},[36,47194,1413],{"class":109},[36,47196,992],{"class":98},[36,47198,819],{"class":109},[36,47200,42689],{"class":98},[36,47202,819],{"class":109},[36,47204,38480],{"class":98},[36,47206,47207,47209,47211,47213,47215,47217,47219,47221,47223,47225,47227,47229,47231,47233,47235],{"class":38,"line":10262},[36,47208,42662],{"class":98},[36,47210,38890],{"class":109},[36,47212,992],{"class":98},[36,47214,1232],{"class":109},[36,47216,42671],{"class":98},[36,47218,32503],{"class":109},[36,47220,992],{"class":98},[36,47222,42885],{"class":109},[36,47224,42680],{"class":98},[36,47226,813],{"class":109},[36,47228,992],{"class":98},[36,47230,819],{"class":109},[36,47232,42689],{"class":98},[36,47234,819],{"class":109},[36,47236,38480],{"class":98},[36,47238,47239,47241,47243,47245,47247,47249,47251,47253,47255,47257,47259,47261,47263,47265,47267],{"class":38,"line":10283},[36,47240,42662],{"class":98},[36,47242,42906],{"class":109},[36,47244,992],{"class":98},[36,47246,35303],{"class":109},[36,47248,42671],{"class":98},[36,47250,21487],{"class":109},[36,47252,992],{"class":98},[36,47254,42919],{"class":109},[36,47256,42680],{"class":98},[36,47258,813],{"class":109},[36,47260,992],{"class":98},[36,47262,32503],{"class":109},[36,47264,42689],{"class":98},[36,47266,32503],{"class":109},[36,47268,38480],{"class":98},[36,47270,47271,47273,47275,47277,47279,47281,47283,47285,47287,47289,47291,47293,47295],{"class":38,"line":10289},[36,47272,38530],{"class":98},[36,47274,31307],{"class":5667},[36,47276,176],{"class":163},[36,47278,689],{"class":109},[36,47280,992],{"class":98},[36,47282,31362],{"class":5667},[36,47284,176],{"class":163},[36,47286,694],{"class":109},[36,47288,992],{"class":98},[36,47290,31316],{"class":5667},[36,47292,176],{"class":163},[36,47294,833],{"class":109},[36,47296,627],{"class":98},[36,47298,47299],{"class":38,"line":10303},[36,47300,38559],{"class":98},[36,47302,47303,47305,47307,47309],{"class":38,"line":10309},[36,47304,31278],{"class":109},[36,47306,42972],{"class":98},[36,47308,176],{"class":163},[36,47310,38442],{"class":98},[36,47312,47313,47315,47317,47319,47321,47323,47325,47327,47329,47331,47333,47335,47337,47339,47341],{"class":38,"line":10336},[36,47314,42662],{"class":98},[36,47316,42983],{"class":109},[36,47318,992],{"class":98},[36,47320,35303],{"class":109},[36,47322,42671],{"class":98},[36,47324,21487],{"class":109},[36,47326,992],{"class":98},[36,47328,42919],{"class":109},[36,47330,42680],{"class":98},[36,47332,813],{"class":109},[36,47334,992],{"class":98},[36,47336,32503],{"class":109},[36,47338,42689],{"class":98},[36,47340,32503],{"class":109},[36,47342,38480],{"class":98},[36,47344,47345,47347,47349,47351,47353,47355,47357,47359,47361,47363,47365,47367,47369,47371,47373],{"class":38,"line":10345},[36,47346,42662],{"class":98},[36,47348,42983],{"class":109},[36,47350,992],{"class":98},[36,47352,35373],{"class":109},[36,47354,42671],{"class":98},[36,47356,42592],{"class":109},[36,47358,992],{"class":98},[36,47360,35373],{"class":109},[36,47362,42680],{"class":98},[36,47364,1221],{"class":109},[36,47366,992],{"class":98},[36,47368,32503],{"class":109},[36,47370,42689],{"class":98},[36,47372,32503],{"class":109},[36,47374,38480],{"class":98},[36,47376,47377,47379,47381,47383,47385],{"class":38,"line":10351},[36,47378,43046],{"class":98},[36,47380,833],{"class":109},[36,47382,992],{"class":98},[36,47384,833],{"class":109},[36,47386,43055],{"class":98},[36,47388,47389],{"class":38,"line":10359},[36,47390,39223],{"class":98},[36,47392,47393,47395,47397,47399,47401],{"class":38,"line":10364},[36,47394,39228],{"class":98},[36,47396,43066],{"class":109},[36,47398,992],{"class":98},[36,47400,694],{"class":109},[36,47402,627],{"class":98},[36,47404,47405],{"class":38,"line":17043},[36,47406,38559],{"class":98},[36,47408,47409],{"class":38,"line":17049},[36,47410,43081],{"class":42},[36,47412,47413,47415,47417,47419,47421],{"class":38,"line":17072},[36,47414,3854],{"class":163},[36,47416,39301],{"class":98},[36,47418,26480],{"class":163},[36,47420,39306],{"class":109},[36,47422,39309],{"class":98},[36,47424,47425,47427,47429],{"class":38,"line":17078},[36,47426,5093],{"class":163},[36,47428,39321],{"class":109},[36,47430,39324],{"class":98},[36,47432,47433,47435,47437,47439,47441,47443,47445,47447,47449],{"class":38,"line":17101},[36,47434,39334],{"class":98},[36,47436,43108],{"class":5667},[36,47438,176],{"class":163},[36,47440,43113],{"class":59},[36,47442,992],{"class":98},[36,47444,39337],{"class":5667},[36,47446,176],{"class":163},[36,47448,39342],{"class":59},[36,47450,627],{"class":98},[36,47452,47453],{"class":38,"line":17115},[36,47454,43128],{"class":42},[36,47456,47457],{"class":38,"line":17135},[36,47458,43133],{"class":42},[36,47460,47461],{"class":38,"line":17141},[36,47462,43138],{"class":42},[36,47464,47465],{"class":38,"line":17152},[36,47466,43143],{"class":42},[36,47468,47469],{"class":38,"line":17175},[36,47470,43148],{"class":42},[36,47472,47473],{"class":38,"line":17197},[36,47474,43153],{"class":42},[36,47476,47477,47479,47481,47483,47485,47487],{"class":38,"line":17202},[36,47478,39354],{"class":163},[36,47480,39357],{"class":98},[36,47482,39360],{"class":163},[36,47484,39363],{"class":163},[36,47486,39366],{"class":109},[36,47488,4190],{"class":98},[36,47490,47491,47493,47495],{"class":38,"line":17208},[36,47492,39378],{"class":98},[36,47494,807],{"class":109},[36,47496,627],{"class":98},[36,47498,47499,47501,47503],{"class":38,"line":17222},[36,47500,43180],{"class":163},[36,47502,39321],{"class":109},[36,47504,39397],{"class":98},[36,47506,47507,47509,47511,47513,47515],{"class":38,"line":17235},[36,47508,43189],{"class":98},[36,47510,807],{"class":109},[36,47512,992],{"class":98},[36,47514,39419],{"class":109},[36,47516,627],{"class":98},[36,47518,47519,47521,47523,47525,47527,47529],{"class":38,"line":17240},[36,47520,43202],{"class":163},[36,47522,39357],{"class":98},[36,47524,39360],{"class":163},[36,47526,39363],{"class":163},[36,47528,39366],{"class":109},[36,47530,4190],{"class":98},[36,47532,47533,47535,47537],{"class":38,"line":17254},[36,47534,43217],{"class":98},[36,47536,807],{"class":109},[36,47538,627],{"class":98},[36,47540,47541],{"class":38,"line":17259},[36,47542,35598],{"class":42},[36,47544,47545,47547,47549],{"class":38,"line":17265},[36,47546,31234],{"class":163},[36,47548,31526],{"class":55},[36,47550,31529],{"class":98},[36,47552,47553,47555,47557,47559],{"class":38,"line":17270},[36,47554,31534],{"class":98},[36,47556,176],{"class":163},[36,47558,31256],{"class":109},[36,47560,43244],{"class":98},[36,47562,47563,47565,47567,47569],{"class":38,"line":17284},[36,47564,31534],{"class":98},[36,47566,176],{"class":163},[36,47568,31256],{"class":109},[36,47570,43255],{"class":98},[36,47572,47573,47575,47577,47579],{"class":38,"line":17289},[36,47574,31534],{"class":98},[36,47576,176],{"class":163},[36,47578,31256],{"class":109},[36,47580,43266],{"class":98},[36,47582,47583,47585,47587,47589],{"class":38,"line":17294},[36,47584,31534],{"class":98},[36,47586,176],{"class":163},[36,47588,31256],{"class":109},[36,47590,43277],{"class":98},[36,47592,47593,47595,47597,47599],{"class":38,"line":17308},[36,47594,31534],{"class":98},[36,47596,176],{"class":163},[36,47598,31256],{"class":109},[36,47600,43288],{"class":98},[36,47602,47603,47605],{"class":38,"line":17320},[36,47604,15191],{"class":163},[36,47606,31642],{"class":98},[36,47608,47609],{"class":38,"line":17325},[36,47610,247],{"emptyLinePlaceholder":246},[36,47612,47613],{"class":38,"line":17338},[36,47614,43303],{"class":42},[36,47616,47617,47619,47621,47623,47625],{"class":38,"line":17343},[36,47618,2010],{"class":163},[36,47620,31653],{"class":109},[36,47622,3400],{"class":163},[36,47624,31658],{"class":59},[36,47626,4190],{"class":98},[36,47628,47629,47631,47633,47635,47637,47639,47641,47643,47645],{"class":38,"line":17348},[36,47630,31670],{"class":98},[36,47632,176],{"class":163},[36,47634,30884],{"class":98},[36,47636,31677],{"class":59},[36,47638,2172],{"class":163},[36,47640,31682],{"class":98},[36,47642,2169],{"class":163},[36,47644,30909],{"class":59},[36,47646,627],{"class":98},[36,47648,47649,47651,47653],{"class":38,"line":17353},[36,47650,31722],{"class":98},[36,47652,176],{"class":163},[36,47654,43344],{"class":98},[36,47656,47657,47659,47661,47663,47665,47667,47669,47671],{"class":38,"line":17366},[36,47658,31732],{"class":109},[36,47660,31735],{"class":98},[36,47662,833],{"class":109},[36,47664,992],{"class":98},[36,47666,31934],{"class":109},[36,47668,992],{"class":98},[36,47670,31934],{"class":109},[36,47672,31748],{"class":98},[22437,47674,47676],{"id":47675},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,47678,47679],{},"计算图片的均值与方差，用于训练中归一化处理操作",[26,47681,47683],{"className":30811,"code":47682,"language":30813,"meta":31,"style":31},"# 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",[33,47684,47685,47690,47703,47708,47714,47719,47729,47733,47738,47748,47752,47757,47767,47784,47788,47793,47805,47817,47848,47857,47867,47877,47881,47886,47901,47905,47910,47915,47920,47930,47935,47960,47964,47969,47984,47988,48001,48005,48010,48015,48020,48025,48030,48040,48050,48073,48081,48089,48097,48101,48113,48117,48122,48126,48130,48137,48157,48181,48188,48202,48207,48212,48216,48230,48234,48246],{"__ignoreMap":31},[36,47686,47687],{"class":38,"line":39},[36,47688,47689],{"class":42},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[36,47691,47692,47694,47697,47700],{"class":38,"line":46},[36,47693,31170],{"class":163},[36,47695,47696],{"class":109}," PIL",[36,47698,47699],{"class":163}," import",[36,47701,47702],{"class":98}," Image\n",[36,47704,47705],{"class":38,"line":52},[36,47706,47707],{"class":42},"# os 用来处理文件夹和文件路径\n",[36,47709,47710,47712],{"class":38,"line":66},[36,47711,30825],{"class":163},[36,47713,45738],{"class":98},[36,47715,47716],{"class":38,"line":72},[36,47717,47718],{"class":42},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[36,47720,47721,47723,47725,47727],{"class":38,"line":82},[36,47722,30825],{"class":163},[36,47724,31813],{"class":98},[36,47726,31816],{"class":163},[36,47728,31819],{"class":98},[36,47730,47731],{"class":38,"line":88},[36,47732,247],{"emptyLinePlaceholder":246},[36,47734,47735],{"class":38,"line":113},[36,47736,47737],{"class":42},"# 文件夹路径，包含所有图片文件\n",[36,47739,47740,47743,47745],{"class":38,"line":119},[36,47741,47742],{"class":98},"folder_path ",[36,47744,176],{"class":163},[36,47746,47747],{"class":59}," 'data_cat_dog'\n",[36,47749,47750],{"class":38,"line":131},[36,47751,247],{"emptyLinePlaceholder":246},[36,47753,47754],{"class":38,"line":137},[36,47755,47756],{"class":42},"# 初始化累积变量\n",[36,47758,47759,47762,47764],{"class":38,"line":147},[36,47760,47761],{"class":98},"total_pixels ",[36,47763,176],{"class":163},[36,47765,47766],{"class":109}," 0\n",[36,47768,47769,47772,47774,47777,47779,47781],{"class":38,"line":153},[36,47770,47771],{"class":98},"sum_normalized_pixel_values ",[36,47773,176],{"class":163},[36,47775,47776],{"class":98}," np.zeros(",[36,47778,689],{"class":109},[36,47780,46241],{"class":98},[36,47782,47783],{"class":42},"# 如果是RGB图像，需要三个通道的均值和方差\n",[36,47785,47786],{"class":38,"line":191},[36,47787,247],{"emptyLinePlaceholder":246},[36,47789,47790],{"class":38,"line":197},[36,47791,47792],{"class":42},"# 遍历文件夹中的图片文件\n",[36,47794,47795,47797,47800,47802],{"class":38,"line":217},[36,47796,3476],{"class":163},[36,47798,47799],{"class":98}," root, dirs, files ",[36,47801,26480],{"class":163},[36,47803,47804],{"class":98}," os.walk(folder_path):\n",[36,47806,47807,47809,47812,47814],{"class":38,"line":223},[36,47808,3652],{"class":163},[36,47810,47811],{"class":98}," filename ",[36,47813,26480],{"class":163},[36,47815,47816],{"class":98}," files:\n",[36,47818,47819,47821,47824,47827,47829,47832,47834,47837,47839,47842,47845],{"class":38,"line":243},[36,47820,2955],{"class":163},[36,47822,47823],{"class":98}," filename.endswith((",[36,47825,47826],{"class":59},"'.jpg'",[36,47828,12874],{"class":98},[36,47830,47831],{"class":59},"'.jpeg'",[36,47833,12874],{"class":98},[36,47835,47836],{"class":59},"'.png'",[36,47838,12874],{"class":98},[36,47840,47841],{"class":59},"'.bmp'",[36,47843,47844],{"class":98},")):  ",[36,47846,47847],{"class":42},"# 可根据实际情况添加其他格式\n",[36,47849,47850,47852,47854],{"class":38,"line":250},[36,47851,46106],{"class":98},[36,47853,176],{"class":163},[36,47855,47856],{"class":98}," os.path.join(root, filename)\n",[36,47858,47859,47862,47864],{"class":38,"line":256},[36,47860,47861],{"class":98},"            image ",[36,47863,176],{"class":163},[36,47865,47866],{"class":98}," Image.open(image_path)\n",[36,47868,47869,47872,47874],{"class":38,"line":273},[36,47870,47871],{"class":98},"            image_array ",[36,47873,176],{"class":163},[36,47875,47876],{"class":98}," np.array(image)\n",[36,47878,47879],{"class":38,"line":278},[36,47880,247],{"emptyLinePlaceholder":246},[36,47882,47883],{"class":38,"line":284},[36,47884,47885],{"class":42},"            # 归一化像素值到0-1之间\n",[36,47887,47888,47891,47893,47896,47898],{"class":38,"line":315},[36,47889,47890],{"class":98},"            normalized_image_array ",[36,47892,176],{"class":163},[36,47894,47895],{"class":98}," image_array ",[36,47897,1198],{"class":163},[36,47899,47900],{"class":109}," 255.0\n",[36,47902,47903],{"class":38,"line":320},[36,47904,247],{"emptyLinePlaceholder":246},[36,47906,47907],{"class":38,"line":326},[36,47908,47909],{"class":42},"            # print(image_path)\n",[36,47911,47912],{"class":38,"line":343},[36,47913,47914],{"class":42},"            # print(normalized_image_array.shape)\n",[36,47916,47917],{"class":38,"line":348},[36,47918,47919],{"class":42},"            # 累积归一化后的像素值和像素数量\n",[36,47921,47922,47925,47927],{"class":38,"line":354},[36,47923,47924],{"class":98},"            total_pixels ",[36,47926,9918],{"class":163},[36,47928,47929],{"class":98}," normalized_image_array.size\n",[36,47931,47932],{"class":38,"line":370},[36,47933,47934],{"class":42},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[36,47936,47937,47940,47942,47945,47948,47950,47952,47954,47956,47958],{"class":38,"line":375},[36,47938,47939],{"class":98},"            sum_normalized_pixel_values ",[36,47941,9918],{"class":163},[36,47943,47944],{"class":98}," np.sum(normalized_image_array, ",[36,47946,47947],{"class":5667},"axis",[36,47949,176],{"class":163},[36,47951,621],{"class":98},[36,47953,807],{"class":109},[36,47955,12874],{"class":98},[36,47957,833],{"class":109},[36,47959,30930],{"class":98},[36,47961,47962],{"class":38,"line":381},[36,47963,247],{"emptyLinePlaceholder":246},[36,47965,47966],{"class":38,"line":399},[36,47967,47968],{"class":42},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[36,47970,47971,47974,47976,47979,47981],{"class":38,"line":404},[36,47972,47973],{"class":98},"mean ",[36,47975,176],{"class":163},[36,47977,47978],{"class":98}," sum_normalized_pixel_values ",[36,47980,1198],{"class":163},[36,47982,47983],{"class":98}," total_pixels\n",[36,47985,47986],{"class":38,"line":410},[36,47987,247],{"emptyLinePlaceholder":246},[36,47989,47990,47993,47995,47997,47999],{"class":38,"line":423},[36,47991,47992],{"class":98},"sum_squared_diff ",[36,47994,176],{"class":163},[36,47996,47776],{"class":98},[36,47998,689],{"class":109},[36,48000,627],{"class":98},[36,48002,48003],{"class":38,"line":436},[36,48004,247],{"emptyLinePlaceholder":246},[36,48006,48007],{"class":38,"line":441},[36,48008,48009],{"class":42},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[36,48011,48012],{"class":38,"line":447},[36,48013,48014],{"class":42},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[36,48016,48017],{"class":38,"line":465},[36,48018,48019],{"class":42},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[36,48021,48022],{"class":38,"line":470},[36,48023,48024],{"class":42},"# Image.open(image_path)：打开图片\n",[36,48026,48027],{"class":38,"line":476},[36,48028,48029],{"class":42},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[36,48031,48032,48034,48036,48038],{"class":38,"line":496},[36,48033,3476],{"class":163},[36,48035,47799],{"class":98},[36,48037,26480],{"class":163},[36,48039,47804],{"class":98},[36,48041,48042,48044,48046,48048],{"class":38,"line":501},[36,48043,3652],{"class":163},[36,48045,47811],{"class":98},[36,48047,26480],{"class":163},[36,48049,47816],{"class":98},[36,48051,48052,48054,48056,48058,48060,48062,48064,48066,48068,48070],{"class":38,"line":507},[36,48053,2955],{"class":163},[36,48055,47823],{"class":98},[36,48057,47826],{"class":59},[36,48059,12874],{"class":98},[36,48061,47831],{"class":59},[36,48063,12874],{"class":98},[36,48065,47836],{"class":59},[36,48067,12874],{"class":98},[36,48069,47841],{"class":59},[36,48071,48072],{"class":98},")):\n",[36,48074,48075,48077,48079],{"class":38,"line":517},[36,48076,46106],{"class":98},[36,48078,176],{"class":163},[36,48080,47856],{"class":98},[36,48082,48083,48085,48087],{"class":38,"line":522},[36,48084,47861],{"class":98},[36,48086,176],{"class":163},[36,48088,47866],{"class":98},[36,48090,48091,48093,48095],{"class":38,"line":528},[36,48092,47871],{"class":98},[36,48094,176],{"class":163},[36,48096,47876],{"class":98},[36,48098,48099],{"class":38,"line":10203},[36,48100,47885],{"class":42},[36,48102,48103,48105,48107,48109,48111],{"class":38,"line":10227},[36,48104,47890],{"class":98},[36,48106,176],{"class":163},[36,48108,47895],{"class":98},[36,48110,1198],{"class":163},[36,48112,47900],{"class":109},[36,48114,48115],{"class":38,"line":10232},[36,48116,47914],{"class":42},[36,48118,48119],{"class":38,"line":10237},[36,48120,48121],{"class":42},"            # print(mean.shape)\n",[36,48123,48124],{"class":38,"line":10242},[36,48125,47909],{"class":42},[36,48127,48128],{"class":38,"line":10251},[36,48129,247],{"emptyLinePlaceholder":246},[36,48131,48132,48135],{"class":38,"line":10256},[36,48133,48134],{"class":163},"            try",[36,48136,4190],{"class":98},[36,48138,48139,48142,48144,48147,48149,48152,48154],{"class":38,"line":10262},[36,48140,48141],{"class":98},"                diff ",[36,48143,176],{"class":163},[36,48145,48146],{"class":98}," (normalized_image_array ",[36,48148,1146],{"class":163},[36,48150,48151],{"class":98}," mean) ",[36,48153,11100],{"class":163},[36,48155,48156],{"class":109}," 2\n",[36,48158,48159,48162,48164,48167,48169,48171,48173,48175,48177,48179],{"class":38,"line":10283},[36,48160,48161],{"class":98},"                sum_squared_diff ",[36,48163,9918],{"class":163},[36,48165,48166],{"class":98}," np.sum(diff, ",[36,48168,47947],{"class":5667},[36,48170,176],{"class":163},[36,48172,621],{"class":98},[36,48174,807],{"class":109},[36,48176,12874],{"class":98},[36,48178,833],{"class":109},[36,48180,30930],{"class":98},[36,48182,48183,48186],{"class":38,"line":10289},[36,48184,48185],{"class":163},"            except",[36,48187,4190],{"class":98},[36,48189,48190,48193,48195,48197,48200],{"class":38,"line":10303},[36,48191,48192],{"class":109},"                print",[36,48194,621],{"class":98},[36,48196,671],{"class":163},[36,48198,48199],{"class":59},"\"捕获到自定义异常\"",[36,48201,627],{"class":98},[36,48203,48204],{"class":38,"line":10309},[36,48205,48206],{"class":42},"            # diff = (normalized_image_array - mean) ** 2\n",[36,48208,48209],{"class":38,"line":10336},[36,48210,48211],{"class":42},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[36,48213,48214],{"class":38,"line":10345},[36,48215,247],{"emptyLinePlaceholder":246},[36,48217,48218,48221,48223,48226,48228],{"class":38,"line":10351},[36,48219,48220],{"class":98},"variance ",[36,48222,176],{"class":163},[36,48224,48225],{"class":98}," sum_squared_diff ",[36,48227,1198],{"class":163},[36,48229,47983],{"class":98},[36,48231,48232],{"class":38,"line":10359},[36,48233,247],{"emptyLinePlaceholder":246},[36,48235,48236,48238,48240,48243],{"class":38,"line":10364},[36,48237,30848],{"class":109},[36,48239,621],{"class":98},[36,48241,48242],{"class":59},"\"Mean:\"",[36,48244,48245],{"class":98},", mean)\n",[36,48247,48248,48250,48252,48255],{"class":38,"line":17043},[36,48249,30848],{"class":109},[36,48251,621],{"class":98},[36,48253,48254],{"class":59},"\"Variance:\"",[36,48256,48257],{"class":98},", variance)\n",[26,48259,48261],{"className":30811,"code":48260,"language":30813,"meta":31,"style":31},"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",[33,48262,48263,48269,48275,48285,48291,48301,48315,48325,48335,48345,48349,48359,48369,48373,48377,48385,48390,48395,48414,48418,48423,48428,48433,48438,48479,48484,48494,48499,48512,48517,48522,48527,48532,48537,48541,48546,48551,48573,48577,48609,48623,48633,48643,48647,48657,48671,48681,48691,48701,48707,48711,48715,48719,48723,48727,48735,48755,48759,48763,48767,48771,48787,48791,48795,48803,48807,48811,48819,48823,48827,48831,48839,48843,48847,48851,48859,48863,48871,48875,48883,48887,48895,48899,48907,48911,48915,48923,48927,48931,48943,48967,48981,48985,48989,48993,49001,49005,49013,49017,49025,49029,49037,49041,49049,49053,49061,49065,49077,49081,49089,49093,49101,49105,49109,49113,49117,49125,49129,49145,49149,49157,49161,49165,49169,49173,49177,49181,49185,49201,49205,49217,49221,49233,49237,49249,49253,49261,49265,49273,49277,49281,49285,49291,49295,49303,49307,49323,49327,49335,49339,49355,49367,49371,49383,49387,49391,49399,49403,49407,49415,49419,49427,49431,49439,49443,49447,49489,49531,49535,49539,49555,49559,49575,49579,49583,49591,49595,49599,49611,49649,49653,49657,49665,49669,49683,49693,49699,49705,49711,49717,49721,49725,49731,49735,49739,49747,49751,49769,49773,49777,49781,49797,49801,49805,49809,49813,49817,49837,49857,49861,49865,49869,49877,49885,49889,49905,49925,49945,49949,49954,49963,49972,49977,49982,49987,50000,50005,50014,50023,50040],{"__ignoreMap":31},[36,48264,48265,48267],{"class":38,"line":39},[36,48266,30825],{"class":163},[36,48268,32255],{"class":98},[36,48270,48271,48273],{"class":38,"line":46},[36,48272,30825],{"class":163},[36,48274,32262],{"class":98},[36,48276,48277,48279,48281,48283],{"class":38,"line":52},[36,48278,30825],{"class":163},[36,48280,32273],{"class":98},[36,48282,31816],{"class":163},[36,48284,32278],{"class":98},[36,48286,48287,48289],{"class":38,"line":66},[36,48288,30825],{"class":163},[36,48290,30828],{"class":98},[36,48292,48293,48295,48297,48299],{"class":38,"line":72},[36,48294,31170],{"class":163},[36,48296,31848],{"class":98},[36,48298,30825],{"class":163},[36,48300,32295],{"class":98},[36,48302,48303,48305,48307,48309,48312],{"class":38,"line":82},[36,48304,31170],{"class":163},[36,48306,31801],{"class":98},[36,48308,30825],{"class":163},[36,48310,48311],{"class":98}," ImageFolder ",[36,48313,48314],{"class":42},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[36,48316,48317,48319,48321,48323],{"class":38,"line":88},[36,48318,31170],{"class":163},[36,48320,31831],{"class":98},[36,48322,30825],{"class":163},[36,48324,31836],{"class":98},[36,48326,48327,48329,48331,48333],{"class":38,"line":113},[36,48328,30825],{"class":163},[36,48330,31848],{"class":98},[36,48332,31816],{"class":163},[36,48334,31853],{"class":98},[36,48336,48337,48339,48341,48343],{"class":38,"line":119},[36,48338,30825],{"class":163},[36,48340,31865],{"class":98},[36,48342,31816],{"class":163},[36,48344,31870],{"class":98},[36,48346,48347],{"class":38,"line":131},[36,48348,32340],{"class":42},[36,48350,48351,48353,48355,48357],{"class":38,"line":137},[36,48352,31170],{"class":163},[36,48354,32347],{"class":98},[36,48356,30825],{"class":163},[36,48358,43464],{"class":98},[36,48360,48361,48363,48365,48367],{"class":38,"line":147},[36,48362,31170],{"class":163},[36,48364,31173],{"class":98},[36,48366,30825],{"class":163},[36,48368,31178],{"class":98},[36,48370,48371],{"class":38,"line":153},[36,48372,247],{"emptyLinePlaceholder":246},[36,48374,48375],{"class":38,"line":191},[36,48376,32375],{"class":42},[36,48378,48379,48381,48383],{"class":38,"line":197},[36,48380,32380],{"class":163},[36,48382,32383],{"class":55},[36,48384,32386],{"class":98},[36,48386,48387],{"class":38,"line":217},[36,48388,48389],{"class":42},"    # 导入自己的数据集，并进行数据处理\n",[36,48391,48392],{"class":38,"line":223},[36,48393,48394],{"class":42},"    # 定义数据集的路径\n",[36,48396,48397,48400,48402,48404,48406,48408,48412],{"class":38,"line":243},[36,48398,48399],{"class":109},"    ROOT_PATH",[36,48401,176],{"class":163},[36,48403,185],{"class":163},[36,48405,866],{"class":59},[36,48407,1172],{"class":109},[36,48409,48411],{"class":48410},"sA_wV","\u002Fdata\u002Ftrain",[36,48413,25570],{"class":59},[36,48415,48416],{"class":38,"line":250},[36,48417,247],{"emptyLinePlaceholder":246},[36,48419,48420],{"class":38,"line":256},[36,48421,48422],{"class":42},"    # 定义归一化方法\n",[36,48424,48425],{"class":38,"line":273},[36,48426,48427],{"class":42},"    # 这里需要先计算一下数据集的均值和方差\n",[36,48429,48430],{"class":38,"line":278},[36,48431,48432],{"class":42},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[36,48434,48435],{"class":38,"line":284},[36,48436,48437],{"class":42},"    # 第一个参数是均值，第二个参数是方差\n",[36,48439,48440,48443,48445,48448,48451,48453,48456,48458,48461,48464,48467,48469,48472,48474,48477],{"class":38,"line":315},[36,48441,48442],{"class":98},"    normalize",[36,48444,176],{"class":163},[36,48446,48447],{"class":98},"transforms.Normalize([",[36,48449,48450],{"class":109},"0.162",[36,48452,992],{"class":98},[36,48454,48455],{"class":109},"0.151",[36,48457,992],{"class":98},[36,48459,48460],{"class":109},"0.138",[36,48462,48463],{"class":98},"],[",[36,48465,48466],{"class":109},"0.058",[36,48468,992],{"class":98},[36,48470,48471],{"class":109},"0.052",[36,48473,992],{"class":98},[36,48475,48476],{"class":109},"0.048",[36,48478,5108],{"class":98},[36,48480,48481],{"class":38,"line":320},[36,48482,48483],{"class":42},"    # 定义数据集处理方法变量\n",[36,48485,48486,48489,48491],{"class":38,"line":326},[36,48487,48488],{"class":98},"    train_transform",[36,48490,176],{"class":163},[36,48492,48493],{"class":98},"transforms.Compose([\n",[36,48495,48496],{"class":38,"line":343},[36,48497,48498],{"class":42},"        # 调整图像大小为224*224\n",[36,48500,48501,48504,48506,48508,48510],{"class":38,"line":348},[36,48502,48503],{"class":98},"        transforms.Resize((",[36,48505,31934],{"class":109},[36,48507,992],{"class":98},[36,48509,31934],{"class":109},[36,48511,43055],{"class":98},[36,48513,48514],{"class":38,"line":354},[36,48515,48516],{"class":42},"        # 将图像转换为张量\n",[36,48518,48519],{"class":38,"line":370},[36,48520,48521],{"class":98},"        transforms.ToTensor(),\n",[36,48523,48524],{"class":38,"line":375},[36,48525,48526],{"class":98},"        normalize])\n",[36,48528,48529],{"class":38,"line":381},[36,48530,48531],{"class":42},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[36,48533,48534],{"class":38,"line":399},[36,48535,48536],{"class":42},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[36,48538,48539],{"class":38,"line":404},[36,48540,247],{"emptyLinePlaceholder":246},[36,48542,48543],{"class":38,"line":410},[36,48544,48545],{"class":42},"    # 加载数据集\n",[36,48547,48548],{"class":38,"line":423},[36,48549,48550],{"class":42},"    # 传入数据集路径与处理方法\n",[36,48552,48553,48555,48557,48560,48563,48565,48568,48570],{"class":38,"line":436},[36,48554,32391],{"class":98},[36,48556,176],{"class":163},[36,48558,48559],{"class":98},"ImageFolder(",[36,48561,48562],{"class":109},"ROOT_PATH",[36,48564,992],{"class":98},[36,48566,48567],{"class":5667},"transform",[36,48569,176],{"class":163},[36,48571,48572],{"class":98},"train_transform)\n",[36,48574,48575],{"class":38,"line":441},[36,48576,247],{"emptyLinePlaceholder":246},[36,48578,48579,48581,48583,48585,48587,48589,48591,48593,48595,48597,48599,48601,48603,48605,48607],{"class":38,"line":447},[36,48580,32443],{"class":98},[36,48582,176],{"class":163},[36,48584,32448],{"class":98},[36,48586,32451],{"class":109},[36,48588,621],{"class":98},[36,48590,32456],{"class":109},[36,48592,1069],{"class":163},[36,48594,7809],{"class":109},[36,48596,32463],{"class":98},[36,48598,32451],{"class":109},[36,48600,621],{"class":98},[36,48602,32470],{"class":109},[36,48604,1069],{"class":163},[36,48606,7809],{"class":109},[36,48608,32477],{"class":98},[36,48610,48611,48613,48615,48617,48619,48621],{"class":38,"line":465},[36,48612,32482],{"class":98},[36,48614,176],{"class":163},[36,48616,32487],{"class":98},[36,48618,31970],{"class":5667},[36,48620,176],{"class":163},[36,48622,31975],{"class":98},[36,48624,48625,48627,48629,48631],{"class":38,"line":470},[36,48626,32498],{"class":5667},[36,48628,176],{"class":163},[36,48630,813],{"class":109},[36,48632,31899],{"class":98},[36,48634,48635,48637,48639,48641],{"class":38,"line":476},[36,48636,32510],{"class":5667},[36,48638,176],{"class":163},[36,48640,31909],{"class":109},[36,48642,31899],{"class":98},[36,48644,48645],{"class":38,"line":496},[36,48646,32521],{"class":42},[36,48648,48649,48651,48653,48655],{"class":38,"line":501},[36,48650,32526],{"class":5667},[36,48652,176],{"class":163},[36,48654,1009],{"class":109},[36,48656,627],{"class":98},[36,48658,48659,48661,48663,48665,48667,48669],{"class":38,"line":507},[36,48660,32537],{"class":98},[36,48662,176],{"class":163},[36,48664,31967],{"class":98},[36,48666,31970],{"class":5667},[36,48668,176],{"class":163},[36,48670,32548],{"class":98},[36,48672,48673,48675,48677,48679],{"class":38,"line":517},[36,48674,32553],{"class":5667},[36,48676,176],{"class":163},[36,48678,813],{"class":109},[36,48680,31899],{"class":98},[36,48682,48683,48685,48687,48689],{"class":38,"line":522},[36,48684,32564],{"class":5667},[36,48686,176],{"class":163},[36,48688,31909],{"class":109},[36,48690,31899],{"class":98},[36,48692,48693,48695,48697,48699],{"class":38,"line":528},[36,48694,32575],{"class":5667},[36,48696,176],{"class":163},[36,48698,1009],{"class":109},[36,48700,627],{"class":98},[36,48702,48703,48705],{"class":38,"line":10203},[36,48704,4541],{"class":163},[36,48706,32588],{"class":98},[36,48708,48709],{"class":38,"line":10227},[36,48710,247],{"emptyLinePlaceholder":246},[36,48712,48713],{"class":38,"line":10232},[36,48714,32597],{"class":42},[36,48716,48717],{"class":38,"line":10237},[36,48718,32602],{"class":42},[36,48720,48721],{"class":38,"line":10242},[36,48722,247],{"emptyLinePlaceholder":246},[36,48724,48725],{"class":38,"line":10251},[36,48726,32611],{"class":42},[36,48728,48729,48731,48733],{"class":38,"line":10256},[36,48730,32380],{"class":163},[36,48732,32618],{"class":55},[36,48734,32621],{"class":98},[36,48736,48737,48739,48741,48743,48745,48747,48749,48751,48753],{"class":38,"line":10262},[36,48738,31670],{"class":98},[36,48740,176],{"class":163},[36,48742,30884],{"class":98},[36,48744,31677],{"class":59},[36,48746,2172],{"class":163},[36,48748,31682],{"class":98},[36,48750,2169],{"class":163},[36,48752,32640],{"class":59},[36,48754,627],{"class":98},[36,48756,48757],{"class":38,"line":10283},[36,48758,247],{"emptyLinePlaceholder":246},[36,48760,48761],{"class":38,"line":10289},[36,48762,32655],{"class":42},[36,48764,48765],{"class":38,"line":10303},[36,48766,32660],{"class":42},[36,48768,48769],{"class":38,"line":10309},[36,48770,32665],{"class":42},[36,48772,48773,48775,48777,48779,48781,48783,48785],{"class":38,"line":10336},[36,48774,32670],{"class":98},[36,48776,176],{"class":163},[36,48778,32675],{"class":98},[36,48780,32678],{"class":5667},[36,48782,176],{"class":163},[36,48784,32683],{"class":109},[36,48786,627],{"class":98},[36,48788,48789],{"class":38,"line":10345},[36,48790,247],{"emptyLinePlaceholder":246},[36,48792,48793],{"class":38,"line":10351},[36,48794,32694],{"class":42},[36,48796,48797,48799,48801],{"class":38,"line":10359},[36,48798,32699],{"class":98},[36,48800,176],{"class":163},[36,48802,32704],{"class":98},[36,48804,48805],{"class":38,"line":10364},[36,48806,247],{"emptyLinePlaceholder":246},[36,48808,48809],{"class":38,"line":17043},[36,48810,32713],{"class":42},[36,48812,48813,48815,48817],{"class":38,"line":17049},[36,48814,31722],{"class":98},[36,48816,176],{"class":163},[36,48818,32722],{"class":98},[36,48820,48821],{"class":38,"line":17072},[36,48822,32727],{"class":42},[36,48824,48825],{"class":38,"line":17078},[36,48826,32732],{"class":42},[36,48828,48829],{"class":38,"line":17101},[36,48830,32737],{"class":42},[36,48832,48833,48835,48837],{"class":38,"line":17115},[36,48834,32742],{"class":98},[36,48836,176],{"class":163},[36,48838,32747],{"class":98},[36,48840,48841],{"class":38,"line":17135},[36,48842,247],{"emptyLinePlaceholder":246},[36,48844,48845],{"class":38,"line":17141},[36,48846,32760],{"class":42},[36,48848,48849],{"class":38,"line":17152},[36,48850,32765],{"class":42},[36,48852,48853,48855,48857],{"class":38,"line":17175},[36,48854,32770],{"class":98},[36,48856,176],{"class":163},[36,48858,32775],{"class":109},[36,48860,48861],{"class":38,"line":17197},[36,48862,32780],{"class":42},[36,48864,48865,48867,48869],{"class":38,"line":17202},[36,48866,32785],{"class":98},[36,48868,176],{"class":163},[36,48870,32790],{"class":98},[36,48872,48873],{"class":38,"line":17208},[36,48874,32795],{"class":42},[36,48876,48877,48879,48881],{"class":38,"line":17222},[36,48878,32800],{"class":98},[36,48880,176],{"class":163},[36,48882,32790],{"class":98},[36,48884,48885],{"class":38,"line":17235},[36,48886,32809],{"class":42},[36,48888,48889,48891,48893],{"class":38,"line":17240},[36,48890,32814],{"class":98},[36,48892,176],{"class":163},[36,48894,32790],{"class":98},[36,48896,48897],{"class":38,"line":17254},[36,48898,32823],{"class":42},[36,48900,48901,48903,48905],{"class":38,"line":17259},[36,48902,32828],{"class":98},[36,48904,176],{"class":163},[36,48906,32790],{"class":98},[36,48908,48909],{"class":38,"line":17265},[36,48910,247],{"emptyLinePlaceholder":246},[36,48912,48913],{"class":38,"line":17270},[36,48914,32841],{"class":42},[36,48916,48917,48919,48921],{"class":38,"line":17284},[36,48918,32846],{"class":98},[36,48920,176],{"class":163},[36,48922,32851],{"class":98},[36,48924,48925],{"class":38,"line":17289},[36,48926,247],{"emptyLinePlaceholder":246},[36,48928,48929],{"class":38,"line":17294},[36,48930,32864],{"class":42},[36,48932,48933,48935,48937,48939,48941],{"class":38,"line":17308},[36,48934,3652],{"class":163},[36,48936,32871],{"class":98},[36,48938,26480],{"class":163},[36,48940,32876],{"class":109},[36,48942,32879],{"class":98},[36,48944,48945,48947,48949,48951,48953,48955,48957,48959,48961,48963,48965],{"class":38,"line":17320},[36,48946,32884],{"class":109},[36,48948,621],{"class":98},[36,48950,32889],{"class":59},[36,48952,32892],{"class":109},[36,48954,1198],{"class":59},[36,48956,32892],{"class":109},[36,48958,866],{"class":59},[36,48960,32901],{"class":98},[36,48962,1146],{"class":163},[36,48964,833],{"class":109},[36,48966,30930],{"class":98},[36,48968,48969,48971,48973,48975,48977,48979],{"class":38,"line":17325},[36,48970,32884],{"class":109},[36,48972,621],{"class":98},[36,48974,32916],{"class":59},[36,48976,1069],{"class":163},[36,48978,1060],{"class":109},[36,48980,627],{"class":98},[36,48982,48983],{"class":38,"line":17338},[36,48984,247],{"emptyLinePlaceholder":246},[36,48986,48987],{"class":38,"line":17343},[36,48988,32931],{"class":42},[36,48990,48991],{"class":38,"line":17348},[36,48992,32936],{"class":42},[36,48994,48995,48997,48999],{"class":38,"line":17353},[36,48996,32941],{"class":98},[36,48998,176],{"class":163},[36,49000,32775],{"class":109},[36,49002,49003],{"class":38,"line":17366},[36,49004,32950],{"class":42},[36,49006,49007,49009,49011],{"class":38,"line":17371},[36,49008,32955],{"class":98},[36,49010,176],{"class":163},[36,49012,3536],{"class":109},[36,49014,49015],{"class":38,"line":33066},[36,49016,32964],{"class":42},[36,49018,49019,49021,49023],{"class":38,"line":33072},[36,49020,32969],{"class":98},[36,49022,176],{"class":163},[36,49024,32775],{"class":109},[36,49026,49027],{"class":38,"line":33078},[36,49028,32978],{"class":42},[36,49030,49031,49033,49035],{"class":38,"line":33084},[36,49032,32983],{"class":98},[36,49034,176],{"class":163},[36,49036,3536],{"class":109},[36,49038,49039],{"class":38,"line":33090},[36,49040,32992],{"class":42},[36,49042,49043,49045,49047],{"class":38,"line":33101},[36,49044,32997],{"class":98},[36,49046,176],{"class":163},[36,49048,3536],{"class":109},[36,49050,49051],{"class":38,"line":33107},[36,49052,33006],{"class":42},[36,49054,49055,49057,49059],{"class":38,"line":33127},[36,49056,33011],{"class":98},[36,49058,176],{"class":163},[36,49060,3536],{"class":109},[36,49062,49063],{"class":38,"line":33133},[36,49064,33020],{"class":42},[36,49066,49067,49069,49071,49073,49075],{"class":38,"line":33144},[36,49068,3854],{"class":163},[36,49070,32034],{"class":98},[36,49072,26480],{"class":163},[36,49074,32039],{"class":109},[36,49076,33033],{"class":98},[36,49078,49079],{"class":38,"line":33150},[36,49080,33038],{"class":42},[36,49082,49083,49085,49087],{"class":38,"line":33156},[36,49084,33043],{"class":98},[36,49086,176],{"class":163},[36,49088,33048],{"class":98},[36,49090,49091],{"class":38,"line":33162},[36,49092,33053],{"class":42},[36,49094,49095,49097,49099],{"class":38,"line":33168},[36,49096,33058],{"class":98},[36,49098,176],{"class":163},[36,49100,33063],{"class":98},[36,49102,49103],{"class":38,"line":33174},[36,49104,33069],{"class":42},[36,49106,49107],{"class":38,"line":33180},[36,49108,33075],{"class":98},[36,49110,49111],{"class":38,"line":33186},[36,49112,33081],{"class":42},[36,49114,49115],{"class":38,"line":33206},[36,49116,33087],{"class":42},[36,49118,49119,49121,49123],{"class":38,"line":33212},[36,49120,33093],{"class":98},[36,49122,176],{"class":163},[36,49124,33098],{"class":98},[36,49126,49127],{"class":38,"line":33228},[36,49128,33104],{"class":42},[36,49130,49131,49133,49135,49137,49139,49141,49143],{"class":38,"line":33234},[36,49132,33110],{"class":98},[36,49134,176],{"class":163},[36,49136,33115],{"class":98},[36,49138,33118],{"class":5667},[36,49140,176],{"class":163},[36,49142,833],{"class":109},[36,49144,627],{"class":98},[36,49146,49147],{"class":38,"line":33248},[36,49148,33130],{"class":42},[36,49150,49151,49153,49155],{"class":38,"line":33254},[36,49152,33136],{"class":98},[36,49154,176],{"class":163},[36,49156,33141],{"class":98},[36,49158,49159],{"class":38,"line":33269},[36,49160,33147],{"class":42},[36,49162,49163],{"class":38,"line":33275},[36,49164,33153],{"class":98},[36,49166,49167],{"class":38,"line":33284},[36,49168,33159],{"class":42},[36,49170,49171],{"class":38,"line":33290},[36,49172,33165],{"class":98},[36,49174,49175],{"class":38,"line":33299},[36,49176,33171],{"class":42},[36,49178,49179],{"class":38,"line":33305},[36,49180,33177],{"class":98},[36,49182,49183],{"class":38,"line":33311},[36,49184,33183],{"class":42},[36,49186,49187,49189,49191,49193,49195,49197,49199],{"class":38,"line":33320},[36,49188,33189],{"class":98},[36,49190,9918],{"class":163},[36,49192,33194],{"class":98},[36,49194,1069],{"class":163},[36,49196,33199],{"class":98},[36,49198,807],{"class":109},[36,49200,627],{"class":98},[36,49202,49203],{"class":38,"line":33326},[36,49204,33209],{"class":42},[36,49206,49207,49209,49211,49213,49215],{"class":38,"line":33337},[36,49208,33215],{"class":98},[36,49210,9918],{"class":163},[36,49212,33220],{"class":98},[36,49214,3400],{"class":163},[36,49216,33225],{"class":98},[36,49218,49219],{"class":38,"line":33343},[36,49220,33231],{"class":42},[36,49222,49223,49225,49227,49229,49231],{"class":38,"line":33362},[36,49224,33237],{"class":98},[36,49226,9918],{"class":163},[36,49228,33199],{"class":98},[36,49230,807],{"class":109},[36,49232,627],{"class":98},[36,49234,49235],{"class":38,"line":33368},[36,49236,33251],{"class":42},[36,49238,49239,49241,49243,49245,49247],{"class":38,"line":33379},[36,49240,3854],{"class":163},[36,49242,33259],{"class":98},[36,49244,26480],{"class":163},[36,49246,32039],{"class":109},[36,49248,33266],{"class":98},[36,49250,49251],{"class":38,"line":33385},[36,49252,33272],{"class":42},[36,49254,49255,49257,49259],{"class":38,"line":33405},[36,49256,33043],{"class":98},[36,49258,176],{"class":163},[36,49260,33048],{"class":98},[36,49262,49263],{"class":38,"line":33421},[36,49264,33287],{"class":42},[36,49266,49267,49269,49271],{"class":38,"line":33427},[36,49268,33058],{"class":98},[36,49270,176],{"class":163},[36,49272,33063],{"class":98},[36,49274,49275],{"class":38,"line":33441},[36,49276,33302],{"class":42},[36,49278,49279],{"class":38,"line":33447},[36,49280,33308],{"class":98},[36,49282,49283],{"class":38,"line":33453},[36,49284,36789],{"class":42},[36,49286,49287,49289],{"class":38,"line":33464},[36,49288,33314],{"class":163},[36,49290,33317],{"class":98},[36,49292,49293],{"class":38,"line":33470},[36,49294,33323],{"class":42},[36,49296,49297,49299,49301],{"class":38,"line":33476},[36,49298,36804],{"class":98},[36,49300,176],{"class":163},[36,49302,33098],{"class":98},[36,49304,49305],{"class":38,"line":33486},[36,49306,33340],{"class":42},[36,49308,49309,49311,49313,49315,49317,49319,49321],{"class":38,"line":33492},[36,49310,36817],{"class":98},[36,49312,176],{"class":163},[36,49314,33115],{"class":98},[36,49316,33118],{"class":5667},[36,49318,176],{"class":163},[36,49320,833],{"class":109},[36,49322,627],{"class":98},[36,49324,49325],{"class":38,"line":33503},[36,49326,33365],{"class":42},[36,49328,49329,49331,49333],{"class":38,"line":33509},[36,49330,36838],{"class":98},[36,49332,176],{"class":163},[36,49334,33141],{"class":98},[36,49336,49337],{"class":38,"line":33519},[36,49338,33382],{"class":42},[36,49340,49341,49343,49345,49347,49349,49351,49353],{"class":38,"line":33524},[36,49342,36851],{"class":98},[36,49344,9918],{"class":163},[36,49346,36856],{"class":98},[36,49348,1069],{"class":163},[36,49350,33199],{"class":98},[36,49352,807],{"class":109},[36,49354,627],{"class":98},[36,49356,49357,49359,49361,49363,49365],{"class":38,"line":33530},[36,49358,36869],{"class":98},[36,49360,9918],{"class":163},[36,49362,33220],{"class":98},[36,49364,3400],{"class":163},[36,49366,33225],{"class":98},[36,49368,49369],{"class":38,"line":33579},[36,49370,36882],{"class":42},[36,49372,49373,49375,49377,49379,49381],{"class":38,"line":33626},[36,49374,36887],{"class":98},[36,49376,9918],{"class":163},[36,49378,33199],{"class":98},[36,49380,807],{"class":109},[36,49382,627],{"class":98},[36,49384,49385],{"class":38,"line":33631},[36,49386,33444],{"class":42},[36,49388,49389],{"class":38,"line":33637},[36,49390,33450],{"class":42},[36,49392,49393,49395,49397],{"class":38,"line":33656},[36,49394,33456],{"class":98},[36,49396,1198],{"class":163},[36,49398,33461],{"class":98},[36,49400,49401],{"class":38,"line":33662},[36,49402,33467],{"class":42},[36,49404,49405],{"class":38,"line":33682},[36,49406,33473],{"class":42},[36,49408,49409,49411,49413],{"class":38,"line":33688},[36,49410,33479],{"class":98},[36,49412,1198],{"class":163},[36,49414,33461],{"class":98},[36,49416,49417],{"class":38,"line":33694},[36,49418,33489],{"class":42},[36,49420,49421,49423,49425],{"class":38,"line":33704},[36,49422,33495],{"class":98},[36,49424,1198],{"class":163},[36,49426,33500],{"class":98},[36,49428,49429],{"class":38,"line":33709},[36,49430,33506],{"class":42},[36,49432,49433,49435,49437],{"class":38,"line":33715},[36,49434,33512],{"class":98},[36,49436,1198],{"class":163},[36,49438,33500],{"class":98},[36,49440,49441],{"class":38,"line":33731},[36,49442,247],{"emptyLinePlaceholder":246},[36,49444,49445],{"class":38,"line":33776},[36,49446,33527],{"class":42},[36,49448,49449,49451,49453,49455,49457,49459,49461,49463,49465,49467,49469,49471,49473,49475,49477,49479,49481,49483,49485,49487],{"class":38,"line":33782},[36,49450,32884],{"class":109},[36,49452,621],{"class":98},[36,49454,4043],{"class":59},[36,49456,32892],{"class":109},[36,49458,33541],{"class":59},[36,49460,1509],{"class":109},[36,49462,33546],{"class":163},[36,49464,1558],{"class":109},[36,49466,33551],{"class":59},[36,49468,1509],{"class":109},[36,49470,33546],{"class":163},[36,49472,1558],{"class":109},[36,49474,4043],{"class":59},[36,49476,33562],{"class":98},[36,49478,1146],{"class":163},[36,49480,833],{"class":109},[36,49482,33569],{"class":98},[36,49484,1146],{"class":163},[36,49486,833],{"class":109},[36,49488,33576],{"class":98},[36,49490,49491,49493,49495,49497,49499,49501,49503,49505,49507,49509,49511,49513,49515,49517,49519,49521,49523,49525,49527,49529],{"class":38,"line":33788},[36,49492,32884],{"class":109},[36,49494,621],{"class":98},[36,49496,4043],{"class":59},[36,49498,32892],{"class":109},[36,49500,33590],{"class":59},[36,49502,1509],{"class":109},[36,49504,33546],{"class":163},[36,49506,1558],{"class":109},[36,49508,33599],{"class":59},[36,49510,1509],{"class":109},[36,49512,33546],{"class":163},[36,49514,1558],{"class":109},[36,49516,4043],{"class":59},[36,49518,33610],{"class":98},[36,49520,1146],{"class":163},[36,49522,833],{"class":109},[36,49524,33617],{"class":98},[36,49526,1146],{"class":163},[36,49528,833],{"class":109},[36,49530,33576],{"class":98},[36,49532,49533],{"class":38,"line":33794},[36,49534,247],{"emptyLinePlaceholder":246},[36,49536,49537],{"class":38,"line":33805},[36,49538,33634],{"class":42},[36,49540,49541,49543,49545,49547,49549,49551,49553],{"class":38,"line":33811},[36,49542,2955],{"class":163},[36,49544,33642],{"class":98},[36,49546,1146],{"class":163},[36,49548,833],{"class":109},[36,49550,1552],{"class":98},[36,49552,173],{"class":163},[36,49554,33653],{"class":98},[36,49556,49557],{"class":38,"line":33817},[36,49558,33659],{"class":42},[36,49560,49561,49563,49565,49567,49569,49571,49573],{"class":38,"line":33823},[36,49562,33665],{"class":98},[36,49564,660],{"class":109},[36,49566,176],{"class":163},[36,49568,33672],{"class":98},[36,49570,1146],{"class":163},[36,49572,833],{"class":109},[36,49574,33679],{"class":98},[36,49576,49577],{"class":38,"line":33841},[36,49578,33685],{"class":42},[36,49580,49581],{"class":38,"line":33855},[36,49582,33691],{"class":42},[36,49584,49585,49587,49589],{"class":38,"line":33864},[36,49586,33697],{"class":98},[36,49588,176],{"class":163},[36,49590,32747],{"class":98},[36,49592,49593],{"class":38,"line":33873},[36,49594,247],{"emptyLinePlaceholder":246},[36,49596,49597],{"class":38,"line":33882},[36,49598,33712],{"class":42},[36,49600,49601,49603,49605,49607,49609],{"class":38,"line":33891},[36,49602,33718],{"class":98},[36,49604,176],{"class":163},[36,49606,33723],{"class":98},[36,49608,1146],{"class":163},[36,49610,33728],{"class":98},[36,49612,49613,49615,49617,49619,49621,49623,49625,49627,49629,49631,49633,49635,49637,49639,49641,49643,49645,49647],{"class":38,"line":33897},[36,49614,32884],{"class":109},[36,49616,621],{"class":98},[36,49618,33738],{"class":59},[36,49620,1509],{"class":109},[36,49622,33743],{"class":163},[36,49624,1558],{"class":109},[36,49626,1158],{"class":59},[36,49628,1509],{"class":109},[36,49630,33743],{"class":163},[36,49632,1558],{"class":109},[36,49634,33756],{"class":59},[36,49636,33759],{"class":98},[36,49638,33762],{"class":163},[36,49640,1520],{"class":109},[36,49642,33767],{"class":98},[36,49644,942],{"class":163},[36,49646,1520],{"class":109},[36,49648,30930],{"class":98},[36,49650,49651],{"class":38,"line":33903},[36,49652,37166],{"class":42},[36,49654,49655],{"class":38,"line":33911},[36,49656,37171],{"class":42},[36,49658,49659,49661,49663],{"class":38,"line":33916},[36,49660,37176],{"class":98},[36,49662,33800],{"class":59},[36,49664,627],{"class":98},[36,49666,49667],{"class":38,"line":33922},[36,49668,33820],{"class":42},[36,49670,49671,49673,49675,49677,49679,49681],{"class":38,"line":33933},[36,49672,33826],{"class":98},[36,49674,176],{"class":163},[36,49676,33831],{"class":98},[36,49678,33834],{"class":5667},[36,49680,176],{"class":163},[36,49682,2025],{"class":98},[36,49684,49685,49687,49689,49691],{"class":38,"line":33939},[36,49686,33844],{"class":59},[36,49688,1472],{"class":98},[36,49690,33849],{"class":109},[36,49692,33852],{"class":98},[36,49694,49695,49697],{"class":38,"line":33959},[36,49696,33858],{"class":59},[36,49698,33861],{"class":98},[36,49700,49701,49703],{"class":38,"line":33965},[36,49702,33867],{"class":59},[36,49704,33870],{"class":98},[36,49706,49707,49709],{"class":38,"line":33971},[36,49708,33876],{"class":59},[36,49710,33879],{"class":98},[36,49712,49713,49715],{"class":38,"line":33977},[36,49714,33885],{"class":59},[36,49716,33888],{"class":98},[36,49718,49719],{"class":38,"line":33994},[36,49720,33894],{"class":98},[36,49722,49723],{"class":38,"line":34000},[36,49724,33900],{"class":42},[36,49726,49727,49729],{"class":38,"line":34006},[36,49728,4541],{"class":163},[36,49730,33908],{"class":98},[36,49732,49733],{"class":38,"line":34012},[36,49734,247],{"emptyLinePlaceholder":246},[36,49736,49737],{"class":38,"line":34018},[36,49738,33919],{"class":42},[36,49740,49741,49743,49745],{"class":38,"line":34024},[36,49742,32380],{"class":163},[36,49744,33927],{"class":55},[36,49746,33930],{"class":98},[36,49748,49749],{"class":38,"line":34051},[36,49750,33936],{"class":42},[36,49752,49753,49755,49757,49759,49761,49763,49765,49767],{"class":38,"line":34075},[36,49754,33942],{"class":98},[36,49756,32126],{"class":5667},[36,49758,176],{"class":163},[36,49760,621],{"class":98},[36,49762,1112],{"class":109},[36,49764,992],{"class":98},[36,49766,908],{"class":109},[36,49768,30930],{"class":98},[36,49770,49771],{"class":38,"line":34081},[36,49772,33962],{"class":42},[36,49774,49775],{"class":38,"line":34087},[36,49776,33968],{"class":42},[36,49778,49779],{"class":38,"line":34093},[36,49780,33974],{"class":42},[36,49782,49783,49785,49787,49789,49791,49793,49795],{"class":38,"line":34104},[36,49784,32160],{"class":98},[36,49786,833],{"class":109},[36,49788,992],{"class":98},[36,49790,694],{"class":109},[36,49792,992],{"class":98},[36,49794,833],{"class":109},[36,49796,627],{"class":98},[36,49798,49799],{"class":38,"line":34115},[36,49800,33997],{"class":42},[36,49802,49803],{"class":38,"line":34121},[36,49804,34003],{"class":42},[36,49806,49807],{"class":38,"line":34138},[36,49808,34009],{"class":42},[36,49810,49811],{"class":38,"line":34161},[36,49812,34015],{"class":42},[36,49814,49815],{"class":38,"line":34184},[36,49816,34021],{"class":42},[36,49818,49819,49821,49823,49825,49827,49829,49831,49833,49835],{"class":38,"line":34190},[36,49820,34027],{"class":98},[36,49822,34030],{"class":59},[36,49824,34033],{"class":98},[36,49826,34036],{"class":59},[36,49828,992],{"class":98},[36,49830,34041],{"class":5667},[36,49832,176],{"class":163},[36,49834,34046],{"class":59},[36,49836,627],{"class":98},[36,49838,49839,49841,49843,49845,49847,49849,49851,49853,49855],{"class":38,"line":34195},[36,49840,34027],{"class":98},[36,49842,34030],{"class":59},[36,49844,34058],{"class":98},[36,49846,34061],{"class":59},[36,49848,992],{"class":98},[36,49850,34041],{"class":5667},[36,49852,176],{"class":163},[36,49854,34070],{"class":59},[36,49856,627],{"class":98},[36,49858,49859],{"class":38,"line":34204},[36,49860,34078],{"class":42},[36,49862,49863],{"class":38,"line":34214},[36,49864,34084],{"class":98},[36,49866,49867],{"class":38,"line":34220},[36,49868,34090],{"class":42},[36,49870,49871,49873,49875],{"class":38,"line":34225},[36,49872,34096],{"class":98},[36,49874,34099],{"class":59},[36,49876,627],{"class":98},[36,49878,49879,49881,49883],{"class":38,"line":34231},[36,49880,34107],{"class":98},[36,49882,34110],{"class":59},[36,49884,627],{"class":98},[36,49886,49887],{"class":38,"line":34244},[36,49888,34118],{"class":42},[36,49890,49891,49893,49895,49897,49899,49901,49903],{"class":38,"line":34250},[36,49892,32160],{"class":98},[36,49894,833],{"class":109},[36,49896,992],{"class":98},[36,49898,694],{"class":109},[36,49900,992],{"class":98},[36,49902,694],{"class":109},[36,49904,627],{"class":98},[36,49906,49907,49909,49911,49913,49915,49917,49919,49921,49923],{"class":38,"line":34261},[36,49908,34027],{"class":98},[36,49910,34030],{"class":59},[36,49912,34145],{"class":98},[36,49914,34036],{"class":59},[36,49916,992],{"class":98},[36,49918,34041],{"class":5667},[36,49920,176],{"class":163},[36,49922,34156],{"class":59},[36,49924,627],{"class":98},[36,49926,49927,49929,49931,49933,49935,49937,49939,49941,49943],{"class":38,"line":34272},[36,49928,34027],{"class":98},[36,49930,34030],{"class":59},[36,49932,34168],{"class":98},[36,49934,34061],{"class":59},[36,49936,992],{"class":98},[36,49938,34041],{"class":5667},[36,49940,176],{"class":163},[36,49942,34179],{"class":59},[36,49944,627],{"class":98},[36,49946,49947],{"class":38,"line":34291},[36,49948,34187],{"class":42},[36,49950,49952],{"class":38,"line":49951},219,[36,49953,34084],{"class":98},[36,49955,49957,49959,49961],{"class":38,"line":49956},220,[36,49958,34096],{"class":98},[36,49960,34030],{"class":59},[36,49962,627],{"class":98},[36,49964,49966,49968,49970],{"class":38,"line":49965},221,[36,49967,34107],{"class":98},[36,49969,34209],{"class":59},[36,49971,627],{"class":98},[36,49973,49975],{"class":38,"line":49974},222,[36,49976,34217],{"class":98},[36,49978,49980],{"class":38,"line":49979},223,[36,49981,247],{"emptyLinePlaceholder":246},[36,49983,49985],{"class":38,"line":49984},224,[36,49986,34228],{"class":42},[36,49988,49990,49992,49994,49996,49998],{"class":38,"line":49989},225,[36,49991,2010],{"class":163},[36,49993,31653],{"class":109},[36,49995,3400],{"class":163},[36,49997,31658],{"class":59},[36,49999,4190],{"class":98},[36,50001,50003],{"class":38,"line":50002},226,[36,50004,34247],{"class":42},[36,50006,50008,50010,50012],{"class":38,"line":50007},227,[36,50009,44979],{"class":98},[36,50011,176],{"class":163},[36,50013,44984],{"class":98},[36,50015,50017,50019,50021],{"class":38,"line":50016},228,[36,50018,34264],{"class":98},[36,50020,176],{"class":163},[36,50022,34269],{"class":98},[36,50024,50026,50028,50030,50032,50034,50036,50038],{"class":38,"line":50025},229,[36,50027,33826],{"class":98},[36,50029,176],{"class":163},[36,50031,45001],{"class":98},[36,50033,34282],{"class":5667},[36,50035,176],{"class":163},[36,50037,1520],{"class":109},[36,50039,627],{"class":98},[36,50041,50043],{"class":38,"line":50042},230,[36,50044,34294],{"class":98},[22437,50046,50048],{"id":50047},"_242测试代码","2.4.2.测试代码",[14,50050,50051],{},"使用测试集进行测试与推理",[26,50053,50055],{"className":30811,"code":50054,"language":30813,"meta":31,"style":31},"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",[33,50056,50057,50063,50073,50083,50094,50104,50108,50112,50120,50125,50129,50146,50150,50154,50158,50162,50166,50198,50202,50210,50214,50226,50230,50234,50238,50242,50246,50250,50254,50258,50276,50290,50294,50304,50314,50324,50330,50334,50338,50346,50350,50366,50374,50378,50382,50390,50398,50402,50406,50410,50414,50420,50424,50434,50442,50450,50454,50458,50462,50470,50474,50490,50494,50498,50502,50514,50518,50530,50534,50538,50550,50554,50564,50568,50572,50584,50588,50596,50600,50604,50612,50616,50624,50628,50632,50636,50640,50644,50660,50668,50672,50676,50694,50700,50704,50714,50722,50730,50734,50738,50742,50746,50754,50758,50774,50778,50786,50794],{"__ignoreMap":31},[36,50058,50059,50061],{"class":38,"line":39},[36,50060,30825],{"class":163},[36,50062,30828],{"class":98},[36,50064,50065,50067,50069,50071],{"class":38,"line":46},[36,50066,30825],{"class":163},[36,50068,31848],{"class":98},[36,50070,31816],{"class":163},[36,50072,31853],{"class":98},[36,50074,50075,50077,50079,50081],{"class":38,"line":52},[36,50076,31170],{"class":163},[36,50078,31831],{"class":98},[36,50080,30825],{"class":163},[36,50082,31836],{"class":98},[36,50084,50085,50087,50089,50091],{"class":38,"line":66},[36,50086,31170],{"class":163},[36,50088,31801],{"class":98},[36,50090,30825],{"class":163},[36,50092,50093],{"class":98}," ImageFolder\n",[36,50095,50096,50098,50100,50102],{"class":38,"line":72},[36,50097,31170],{"class":163},[36,50099,32347],{"class":98},[36,50101,30825],{"class":163},[36,50103,45073],{"class":98},[36,50105,50106],{"class":38,"line":82},[36,50107,247],{"emptyLinePlaceholder":246},[36,50109,50110],{"class":38,"line":88},[36,50111,34384],{"class":42},[36,50113,50114,50116,50118],{"class":38,"line":113},[36,50115,32380],{"class":163},[36,50117,34391],{"class":55},[36,50119,32386],{"class":98},[36,50121,50122],{"class":38,"line":119},[36,50123,50124],{"class":42},"   # 导入自己的数据集，并进行数据处理\n",[36,50126,50127],{"class":38,"line":131},[36,50128,48394],{"class":42},[36,50130,50131,50133,50135,50137,50139,50141,50144],{"class":38,"line":137},[36,50132,48399],{"class":109},[36,50134,176],{"class":163},[36,50136,185],{"class":163},[36,50138,866],{"class":59},[36,50140,1172],{"class":109},[36,50142,50143],{"class":48410},"\u002Fdata\u002Ftest",[36,50145,25570],{"class":59},[36,50147,50148],{"class":38,"line":147},[36,50149,247],{"emptyLinePlaceholder":246},[36,50151,50152],{"class":38,"line":153},[36,50153,48422],{"class":42},[36,50155,50156],{"class":38,"line":191},[36,50157,48427],{"class":42},[36,50159,50160],{"class":38,"line":197},[36,50161,48432],{"class":42},[36,50163,50164],{"class":38,"line":217},[36,50165,48437],{"class":42},[36,50167,50168,50170,50172,50174,50176,50178,50180,50182,50184,50186,50188,50190,50192,50194,50196],{"class":38,"line":223},[36,50169,48442],{"class":98},[36,50171,176],{"class":163},[36,50173,48447],{"class":98},[36,50175,48450],{"class":109},[36,50177,992],{"class":98},[36,50179,48455],{"class":109},[36,50181,992],{"class":98},[36,50183,48460],{"class":109},[36,50185,48463],{"class":98},[36,50187,48466],{"class":109},[36,50189,992],{"class":98},[36,50191,48471],{"class":109},[36,50193,992],{"class":98},[36,50195,48476],{"class":109},[36,50197,5108],{"class":98},[36,50199,50200],{"class":38,"line":243},[36,50201,48483],{"class":42},[36,50203,50204,50206,50208],{"class":38,"line":250},[36,50205,48488],{"class":98},[36,50207,176],{"class":163},[36,50209,48493],{"class":98},[36,50211,50212],{"class":38,"line":256},[36,50213,48498],{"class":42},[36,50215,50216,50218,50220,50222,50224],{"class":38,"line":273},[36,50217,48503],{"class":98},[36,50219,31934],{"class":109},[36,50221,992],{"class":98},[36,50223,31934],{"class":109},[36,50225,43055],{"class":98},[36,50227,50228],{"class":38,"line":278},[36,50229,48516],{"class":42},[36,50231,50232],{"class":38,"line":284},[36,50233,48521],{"class":98},[36,50235,50236],{"class":38,"line":315},[36,50237,48526],{"class":98},[36,50239,50240],{"class":38,"line":320},[36,50241,48531],{"class":42},[36,50243,50244],{"class":38,"line":326},[36,50245,48536],{"class":42},[36,50247,50248],{"class":38,"line":343},[36,50249,247],{"emptyLinePlaceholder":246},[36,50251,50252],{"class":38,"line":348},[36,50253,48545],{"class":42},[36,50255,50256],{"class":38,"line":354},[36,50257,48550],{"class":42},[36,50259,50260,50262,50264,50266,50268,50270,50272,50274],{"class":38,"line":370},[36,50261,34398],{"class":98},[36,50263,176],{"class":163},[36,50265,48559],{"class":98},[36,50267,48562],{"class":109},[36,50269,992],{"class":98},[36,50271,48567],{"class":5667},[36,50273,176],{"class":163},[36,50275,48572],{"class":98},[36,50277,50278,50280,50282,50284,50286,50288],{"class":38,"line":375},[36,50279,34455],{"class":98},[36,50281,176],{"class":163},[36,50283,31967],{"class":98},[36,50285,31970],{"class":5667},[36,50287,176],{"class":163},[36,50289,34466],{"class":98},[36,50291,50292],{"class":38,"line":381},[36,50293,34471],{"class":42},[36,50295,50296,50298,50300,50302],{"class":38,"line":399},[36,50297,34476],{"class":5667},[36,50299,176],{"class":163},[36,50301,833],{"class":109},[36,50303,31899],{"class":98},[36,50305,50306,50308,50310,50312],{"class":38,"line":404},[36,50307,34487],{"class":5667},[36,50309,176],{"class":163},[36,50311,31909],{"class":109},[36,50313,31899],{"class":98},[36,50315,50316,50318,50320,50322],{"class":38,"line":410},[36,50317,34498],{"class":5667},[36,50319,176],{"class":163},[36,50321,807],{"class":109},[36,50323,627],{"class":98},[36,50325,50326,50328],{"class":38,"line":423},[36,50327,4541],{"class":163},[36,50329,34511],{"class":98},[36,50331,50332],{"class":38,"line":436},[36,50333,247],{"emptyLinePlaceholder":246},[36,50335,50336],{"class":38,"line":441},[36,50337,34520],{"class":42},[36,50339,50340,50342,50344],{"class":38,"line":447},[36,50341,32380],{"class":163},[36,50343,34527],{"class":55},[36,50345,34530],{"class":98},[36,50347,50348],{"class":38,"line":465},[36,50349,34535],{"class":42},[36,50351,50352,50354,50356,50358,50360,50362,50364],{"class":38,"line":470},[36,50353,31670],{"class":98},[36,50355,176],{"class":163},[36,50357,31677],{"class":59},[36,50359,2172],{"class":163},[36,50361,31682],{"class":98},[36,50363,2169],{"class":163},[36,50365,34552],{"class":59},[36,50367,50368,50370,50372],{"class":38,"line":476},[36,50369,31722],{"class":98},[36,50371,176],{"class":163},[36,50373,32722],{"class":98},[36,50375,50376],{"class":38,"line":496},[36,50377,247],{"emptyLinePlaceholder":246},[36,50379,50380],{"class":38,"line":501},[36,50381,34569],{"class":42},[36,50383,50384,50386,50388],{"class":38,"line":507},[36,50385,34574],{"class":98},[36,50387,176],{"class":163},[36,50389,32775],{"class":109},[36,50391,50392,50394,50396],{"class":38,"line":517},[36,50393,34583],{"class":98},[36,50395,176],{"class":163},[36,50397,3536],{"class":109},[36,50399,50400],{"class":38,"line":522},[36,50401,247],{"emptyLinePlaceholder":246},[36,50403,50404],{"class":38,"line":528},[36,50405,34596],{"class":42},[36,50407,50408],{"class":38,"line":10203},[36,50409,34601],{"class":42},[36,50411,50412],{"class":38,"line":10227},[36,50413,34606],{"class":42},[36,50415,50416,50418],{"class":38,"line":10232},[36,50417,34611],{"class":163},[36,50419,33317],{"class":98},[36,50421,50422],{"class":38,"line":10237},[36,50423,34618],{"class":42},[36,50425,50426,50428,50430,50432],{"class":38,"line":10242},[36,50427,3854],{"class":163},[36,50429,34625],{"class":98},[36,50431,26480],{"class":163},[36,50433,34630],{"class":98},[36,50435,50436,50438,50440],{"class":38,"line":10251},[36,50437,34635],{"class":98},[36,50439,176],{"class":163},[36,50441,34640],{"class":98},[36,50443,50444,50446,50448],{"class":38,"line":10256},[36,50445,34645],{"class":98},[36,50447,176],{"class":163},[36,50449,34650],{"class":98},[36,50451,50452],{"class":38,"line":10262},[36,50453,34655],{"class":42},[36,50455,50456],{"class":38,"line":10283},[36,50457,33308],{"class":98},[36,50459,50460],{"class":38,"line":10289},[36,50461,34664],{"class":42},[36,50463,50464,50466,50468],{"class":38,"line":10303},[36,50465,33093],{"class":98},[36,50467,176],{"class":163},[36,50469,34673],{"class":98},[36,50471,50472],{"class":38,"line":10309},[36,50473,34678],{"class":42},[36,50475,50476,50478,50480,50482,50484,50486,50488],{"class":38,"line":10336},[36,50477,33110],{"class":98},[36,50479,176],{"class":163},[36,50481,33115],{"class":98},[36,50483,33118],{"class":5667},[36,50485,176],{"class":163},[36,50487,833],{"class":109},[36,50489,627],{"class":98},[36,50491,50492],{"class":38,"line":10345},[36,50493,34699],{"class":42},[36,50495,50496],{"class":38,"line":10351},[36,50497,34704],{"class":42},[36,50499,50500],{"class":38,"line":10359},[36,50501,34709],{"class":42},[36,50503,50504,50506,50508,50510,50512],{"class":38,"line":10364},[36,50505,34714],{"class":98},[36,50507,9918],{"class":163},[36,50509,33220],{"class":98},[36,50511,3400],{"class":163},[36,50513,34723],{"class":98},[36,50515,50516],{"class":38,"line":17043},[36,50517,34728],{"class":42},[36,50519,50520,50522,50524,50526,50528],{"class":38,"line":17049},[36,50521,34733],{"class":98},[36,50523,9918],{"class":163},[36,50525,34738],{"class":98},[36,50527,807],{"class":109},[36,50529,627],{"class":98},[36,50531,50532],{"class":38,"line":17072},[36,50533,247],{"emptyLinePlaceholder":246},[36,50535,50536],{"class":38,"line":17078},[36,50537,34751],{"class":42},[36,50539,50540,50542,50544,50546,50548],{"class":38,"line":17101},[36,50541,34756],{"class":98},[36,50543,176],{"class":163},[36,50545,34761],{"class":98},[36,50547,1198],{"class":163},[36,50549,34766],{"class":98},[36,50551,50552],{"class":38,"line":17115},[36,50553,34771],{"class":42},[36,50555,50556,50558,50560,50562],{"class":38,"line":17135},[36,50557,32884],{"class":109},[36,50559,621],{"class":98},[36,50561,34780],{"class":59},[36,50563,34783],{"class":98},[36,50565,50566],{"class":38,"line":17141},[36,50567,247],{"emptyLinePlaceholder":246},[36,50569,50570],{"class":38,"line":17152},[36,50571,34792],{"class":42},[36,50573,50574,50576,50578,50580,50582],{"class":38,"line":17175},[36,50575,2010],{"class":163},[36,50577,31653],{"class":109},[36,50579,3400],{"class":163},[36,50581,31658],{"class":59},[36,50583,4190],{"class":98},[36,50585,50586],{"class":38,"line":17197},[36,50587,34809],{"class":42},[36,50589,50590,50592,50594],{"class":38,"line":17202},[36,50591,31722],{"class":98},[36,50593,176],{"class":163},[36,50595,44984],{"class":98},[36,50597,50598],{"class":38,"line":17208},[36,50599,34822],{"class":42},[36,50601,50602],{"class":38,"line":17222},[36,50603,34827],{"class":42},[36,50605,50606,50608,50610],{"class":38,"line":17235},[36,50607,34832],{"class":98},[36,50609,34835],{"class":59},[36,50611,30930],{"class":98},[36,50613,50614],{"class":38,"line":17240},[36,50615,34842],{"class":42},[36,50617,50618,50620,50622],{"class":38,"line":17254},[36,50619,34455],{"class":98},[36,50621,176],{"class":163},[36,50623,34851],{"class":98},[36,50625,50626],{"class":38,"line":17259},[36,50627,34856],{"class":42},[36,50629,50630],{"class":38,"line":17265},[36,50631,34861],{"class":98},[36,50633,50634],{"class":38,"line":17270},[36,50635,247],{"emptyLinePlaceholder":246},[36,50637,50638],{"class":38,"line":17284},[36,50639,34870],{"class":42},[36,50641,50642],{"class":38,"line":17289},[36,50643,34875],{"class":42},[36,50645,50646,50648,50650,50652,50654,50656,50658],{"class":38,"line":17294},[36,50647,31670],{"class":98},[36,50649,176],{"class":163},[36,50651,31677],{"class":59},[36,50653,2172],{"class":163},[36,50655,31682],{"class":98},[36,50657,2169],{"class":163},[36,50659,34552],{"class":59},[36,50661,50662,50664,50666],{"class":38,"line":17308},[36,50663,31722],{"class":98},[36,50665,176],{"class":163},[36,50667,32722],{"class":98},[36,50669,50670],{"class":38,"line":17320},[36,50671,34904],{"class":42},[36,50673,50674],{"class":38,"line":17325},[36,50675,34909],{"class":42},[36,50677,50678,50680,50682,50684,50687,50689,50692],{"class":38,"line":17338},[36,50679,34914],{"class":98},[36,50681,176],{"class":163},[36,50683,1503],{"class":98},[36,50685,50686],{"class":59},"'猫'",[36,50688,992],{"class":98},[36,50690,50691],{"class":59},"'狗'",[36,50693,33679],{"class":98},[36,50695,50696,50698],{"class":38,"line":17343},[36,50697,34611],{"class":163},[36,50699,33317],{"class":98},[36,50701,50702],{"class":38,"line":17348},[36,50703,34979],{"class":42},[36,50705,50706,50708,50710,50712],{"class":38,"line":17353},[36,50707,3854],{"class":163},[36,50709,34986],{"class":98},[36,50711,26480],{"class":163},[36,50713,34630],{"class":98},[36,50715,50716,50718,50720],{"class":38,"line":17366},[36,50717,33043],{"class":98},[36,50719,176],{"class":163},[36,50721,33048],{"class":98},[36,50723,50724,50726,50728],{"class":38,"line":17371},[36,50725,33058],{"class":98},[36,50727,176],{"class":163},[36,50729,33063],{"class":98},[36,50731,50732],{"class":38,"line":33066},[36,50733,247],{"emptyLinePlaceholder":246},[36,50735,50736],{"class":38,"line":33072},[36,50737,35015],{"class":42},[36,50739,50740],{"class":38,"line":33078},[36,50741,33308],{"class":98},[36,50743,50744],{"class":38,"line":33084},[36,50745,35024],{"class":42},[36,50747,50748,50750,50752],{"class":38,"line":33090},[36,50749,33093],{"class":98},[36,50751,176],{"class":163},[36,50753,33098],{"class":98},[36,50755,50756],{"class":38,"line":33101},[36,50757,35037],{"class":42},[36,50759,50760,50762,50764,50766,50768,50770,50772],{"class":38,"line":33107},[36,50761,33110],{"class":98},[36,50763,176],{"class":163},[36,50765,33115],{"class":98},[36,50767,33118],{"class":5667},[36,50769,176],{"class":163},[36,50771,833],{"class":109},[36,50773,627],{"class":98},[36,50775,50776],{"class":38,"line":33127},[36,50777,35058],{"class":42},[36,50779,50780,50782,50784],{"class":38,"line":33133},[36,50781,35063],{"class":98},[36,50783,176],{"class":163},[36,50785,35068],{"class":98},[36,50787,50788,50790,50792],{"class":38,"line":33144},[36,50789,35073],{"class":98},[36,50791,176],{"class":163},[36,50793,35078],{"class":98},[36,50795,50796,50798,50800,50802,50804,50806,50808,50810],{"class":38,"line":33150},[36,50797,35083],{"class":109},[36,50799,621],{"class":98},[36,50801,35088],{"class":59},[36,50803,35091],{"class":98},[36,50805,35094],{"class":59},[36,50807,992],{"class":98},[36,50809,35099],{"class":59},[36,50811,35102],{"class":98},[537,50813,50814],{},"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":31,"searchDepth":46,"depth":46,"links":50816},[50817,50818,50819,50820],{"id":31024,"depth":52,"text":31025},{"id":38272,"depth":52,"text":38273},{"id":41705,"depth":52,"text":41706},{"id":45714,"depth":52,"text":45715},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":31016,"description":542},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50827,"title":50828,"body":50829,"description":542,"extension":543,"meta":50836,"navigation":246,"path":50837,"seo":50838,"stem":50839,"__hash__":50840},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50830,"toc":50834},[50831],[10,50832,50828],{"id":50833},"_3yolo模型学习",{"title":31,"searchDepth":46,"depth":46,"links":50835},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50828,"description":542},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50842,"title":50843,"body":50844,"description":50851,"extension":543,"meta":50852,"navigation":246,"path":50854,"seo":50855,"stem":50856,"__hash__":50857},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50845,"toc":50849},[50846],[14,50847,50848],{},"yolo模型还未补充",{"title":31,"searchDepth":46,"depth":46,"links":50850},[],"深度学习学习",{"category":50853},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50843,"description":50851},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50859,"title":50860,"body":50861,"description":542,"extension":543,"meta":50886,"navigation":246,"path":50887,"seo":50888,"stem":50889,"__hash__":50890},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50862,"toc":50884},[50863,50866,50869,50874,50881],[10,50864,50860],{"id":50865},"_1工具",[14,50867,50868],{},"提示错误插件：有问题会提前报错",[14,50870,50871],{},[1941,50872],{"alt":31,"src":50873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,50875,50876],{},[20,50877,50880],{"href":50878,"rel":50879},"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",[24],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,50882,50883],{},"alt键加上下箭头可以实现语句的移动",{"title":31,"searchDepth":46,"depth":46,"links":50885},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50860,"description":542},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50892,"title":50893,"body":50894,"description":542,"extension":543,"meta":53757,"navigation":246,"path":53758,"seo":53759,"stem":53760,"__hash__":53761},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50895,"toc":53708},[50896,50899,50903,50907,50912,50915,50920,50924,50931,50936,50943,50948,50955,50960,50964,50969,50972,50976,50981,50985,50990,50993,50996,50999,51002,51005,51008,51011,51014,51019,51024,51029,51033,51036,51039,51043,51048,51051,51059,51064,51081,51089,51094,51099,51104,51109,51114,51117,51122,51127,51131,51140,51145,51150,51154,51159,51162,51166,51171,51179,51184,51189,51192,51197,51202,51207,51210,51213,51216,51221,51226,51229,51234,51237,51242,51245,51248,51251,51256,51259,51262,51277,51282,51287,51292,51295,51298,51301,51315,51318,51323,51328,51331,51334,51337,51340,51343,51346,51349,51353,51357,51362,51366,51369,51374,51379,51382,51387,51390,51394,51399,51402,51405,51408,51411,51414,51417,51420,51423,51426,51430,51435,51440,51445,51448,51451,51455,51460,51463,51467,51470,51473,51478,51481,51484,51488,51492,51495,51500,51505,51508,51537,51542,51547,51552,51557,51561,51566,51570,51575,51578,51582,51586,51591,51595,51600,51605,51609,51614,51617,51619,51622,51627,51631,51636,51640,51644,51649,51654,51659,51664,51668,51673,51678,51683,51686,51689,51694,51697,51702,51707,51712,51717,51721,52527,52531,52874,52879,52882,52885,52888,52891,52894,52897,52900,52903,52905,52908,52910,52913,52917,52922,52925,52928,52931,52935,52940,52945,52965,52968,52972,52977,52982,52999,53003,53032,53036,53058,53060,53099,53107,53113,53117,53120,53123,53128,53133,53136,53139,53142,53147,53152,53155,53158,53161,53164,53167,53170,53173,53176,53179,53182,53185,53187,53190,53193,53196,53199,53202,53205,53208,53211,53215,53220,53223,53228,53231,53234,53237,53240,53243,53246,53249,53251,53254,53257,53260,53263,53266,53269,53273,53276,53285,53288,53293,53296,53301,53304,53307,53310,53313,53316,53319,53322,53326,53330,53333,53336,53341,53346,53351,53355,53360,53365,53368,53371,53374,53377,53380,53385,53388,53393,53395,53400,53403,53407,53412,53415,53418,53423,53427,53430,53435,53438,53441,53470,53475,53478,53481,53484,53487,53490,53494,53497,53583,53587,53590,53595,53600,53607,53610,53613,53616,53619,53622,53627,53632,53635,53638,53641,53644,53647,53650,53653,53656,53659,53661,53664,53668,53673,53678,53683,53686,53691,53696,53699,53702,53705],[10,50897,50893],{"id":50898},"_2基础语法",[559,50900,50902],{"id":50901},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[588,50904,50906],{"id":50905},"_211-js组成","2.1.1 js组成",[571,50908,50909],{},[574,50910,50911],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,50913,50914],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[571,50916,50917],{"start":46},[574,50918,50919],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[588,50921,50923],{"id":50922},"_212-js书写位置","2.1.2 js书写位置",[571,50925,50926],{},[574,50927,50928],{},[765,50929,50930],{},"内部 JavaScript",[14,50932,50933],{},[1941,50934],{"alt":31,"src":50935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[571,50937,50938],{"start":46},[574,50939,50940],{},[765,50941,50942],{},"外部 JavaScript",[14,50944,50945],{},[1941,50946],{"alt":31,"src":50947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[571,50949,50950],{"start":52},[574,50951,50952],{},[765,50953,50954],{},"内联 JavaScript",[14,50956,50957],{},[1941,50958],{"alt":31,"src":50959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[588,50961,50963],{"id":50962},"_213-javascript注释","2.1.3 JavaScript注释",[14,50965,50966],{},[1941,50967],{"alt":31,"src":50968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,50970,50971],{},"alt+shift+a一定要记住！",[588,50973,50975],{"id":50974},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,50977,50978],{},[1941,50979],{"alt":31,"src":50980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[588,50982,50984],{"id":50983},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[571,50986,50987],{},[574,50988,50989],{},"输出语法：",[14,50991,50992],{},"①document.write('要出的内容')",[14,50994,50995],{},"向body内输出内容；",[14,50997,50998],{},"如果输出的内容写的是标签，也会被解析cheng",[14,51000,51001],{},"②alert('要出的内容')",[14,51003,51004],{},"页面弹出警告对话框",[14,51006,51007],{},"③console.log('控制台打印')",[14,51009,51010],{},"控制台输出语法，程序员调试使用",[14,51012,51013],{},"输入log就行，自动生成：",[14,51015,51016],{},[1941,51017],{"alt":31,"src":51018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[571,51020,51021],{"start":46},[574,51022,51023],{},"输入语法：",[14,51025,51026],{},[1941,51027],{"alt":31,"src":51028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[588,51030,51032],{"id":51031},"_2116-字面量","21.1.6 字面量",[14,51034,51035],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,51037,51038],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[559,51040,51042],{"id":51041},"_22-变量","2.2 变量",[571,51044,51045],{},[574,51046,51047],{},"变量声明",[14,51049,51050],{},"let 变量名",[1618,51052,51053,51056],{},[574,51054,51055],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[574,51057,51058],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[571,51060,51061],{"start":46},[574,51062,51063],{},"变量赋值",[26,51065,51069],{"className":51066,"code":51067,"language":51068,"meta":31,"style":31},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[33,51070,51071,51076],{"__ignoreMap":31},[36,51072,51073],{"class":38,"line":39},[36,51074,51075],{"class":98},"let age\n",[36,51077,51078],{"class":38,"line":46},[36,51079,51080],{"class":98},"age=18\n",[571,51082,51083,51086],{"start":52},[574,51084,51085],{},"连这些（变量的初始化）：let age=18",[574,51087,51088],{},"更新变量",[14,51090,51091],{},[1941,51092],{"alt":31,"src":51093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[571,51095,51096],{"start":72},[574,51097,51098],{},"声明多个变量",[14,51100,51101],{},[1941,51102],{"alt":31,"src":51103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[571,51105,51106],{"start":82},[574,51107,51108],{},"变量命名规则与规范",[14,51110,51111],{},[1941,51112],{"alt":31,"src":51113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,51115,51116],{},"遵守小驼峰！",[571,51118,51119],{"start":88},[574,51120,51121],{},"变量拓展-let和var的区别",[14,51123,51124],{},[1941,51125],{"alt":31,"src":51126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[559,51128,51130],{"id":51129},"_23-数组","2.3 数组",[26,51132,51134],{"className":51066,"code":51133,"language":51068,"meta":31,"style":31},"let arr = []\n",[33,51135,51136],{"__ignoreMap":31},[36,51137,51138],{"class":38,"line":39},[36,51139,51133],{"class":98},[14,51141,51142],{},[1941,51143],{"alt":31,"src":51144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,51146,51147],{},[1941,51148],{"alt":31,"src":51149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[559,51151,51153],{"id":51152},"_24-常量","2.4 常量",[14,51155,51156],{},[1941,51157],{"alt":31,"src":51158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,51160,51161],{},"const — 类似于 let ，但是变量的值无法被修改",[559,51163,51165],{"id":51164},"_25-数据类型","2.5 数据类型",[14,51167,51168],{},[1941,51169],{"alt":31,"src":51170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[571,51172,51173,51176],{},[574,51174,51175],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[574,51177,51178],{},"算数运算符：",[14,51180,51181],{},[1941,51182],{"alt":31,"src":51183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[571,51185,51186],{"start":52},[574,51187,51188],{},"数字类型（Number）",[14,51190,51191],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,51193,51194],{},[1941,51195],{"alt":31,"src":51196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[571,51198,51199],{"start":66},[574,51200,51201],{},"字符串类型（string）",[14,51203,51204],{},[1941,51205],{"alt":31,"src":51206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,51208,51209],{},"反引号也是可以使用的",[14,51211,51212],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,51214,51215],{},"例如：document.write(\"我今年\"+age+\"岁\")",[571,51217,51218],{"start":72},[574,51219,51220],{},"模板字符串",[14,51222,51223],{},[1941,51224],{"alt":31,"src":51225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,51227,51228],{},"类似于python的字符串格式化",[571,51230,51231],{"start":82},[574,51232,51233],{},"布尔类型",[14,51235,51236],{},"true 和 false",[571,51238,51239],{"start":88},[574,51240,51241],{},"未定义类型（underfined）",[14,51243,51244],{},"表示没有赋值",[14,51246,51247],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,51249,51250],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[571,51252,51253],{"start":113},[574,51254,51255],{},"null（空类型）",[14,51257,51258],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,51260,51261],{},"赋值了，但是内容为空",[26,51263,51265],{"className":51066,"code":51264,"language":51068,"meta":31,"style":31},"typeof null\n输出的是'object'，是一个对象数据类型\n",[33,51266,51267,51272],{"__ignoreMap":31},[36,51268,51269],{"class":38,"line":39},[36,51270,51271],{"class":98},"typeof null\n",[36,51273,51274],{"class":38,"line":46},[36,51275,51276],{"class":98},"输出的是'object'，是一个对象数据类型\n",[571,51278,51279],{"start":119},[574,51280,51281],{},"控制台检测数据类型",[14,51283,51284],{},[1941,51285],{"alt":31,"src":51286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[571,51288,51289],{"start":131},[574,51290,51291],{},"类型转换",[14,51293,51294],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,51296,51297],{},"转换方式：隐式转换和显示转换",[14,51299,51300],{},"①隐式转换",[1618,51302,51303,51306,51309,51312],{},[574,51304,51305],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[574,51307,51308],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[574,51310,51311],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[574,51313,51314],{},"任何数据和字符串相加结果都是字符串",[14,51316,51317],{},"②显示转换",[14,51319,51320],{},[1941,51321],{"alt":31,"src":51322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,51324,51325],{},[1941,51326],{"alt":31,"src":51327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,51329,51330],{},"在输入的时候要用好隐式转换，简单写起来",[14,51332,51333],{},"let num = +prompt(’请输入数字：‘)",[14,51335,51336],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,51338,51339],{},"console.log(parseInt('12.333px'))",[14,51341,51342],{},"输出为：12",[14,51344,51345],{},"console.log(parseInt('a'a'a12.333px'))",[14,51347,51348],{},"输出：NaN",[559,51350,51352],{"id":51351},"_26-运算符","2.6 运算符",[588,51354,51356],{"id":51355},"_261-赋值运算符","2.6.1 赋值运算符",[14,51358,51359],{},[1941,51360],{"alt":31,"src":51361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[588,51363,51365],{"id":51364},"_262-一元运算符","2.6.2 一元运算符",[14,51367,51368],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,51370,51371],{},[1941,51372],{"alt":31,"src":51373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,51375,51376],{},[1941,51377],{"alt":31,"src":51378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,51380,51381],{},"两者的区别：",[14,51383,51384],{},[1941,51385],{"alt":31,"src":51386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,51388,51389],{},"前置先自加；后置后加，代码执行完之后再加",[588,51391,51393],{"id":51392},"_263-比较运算符","2.6.3 比较运算符",[14,51395,51396],{},[1941,51397],{"alt":31,"src":51398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,51400,51401],{},"比较运算符也有隐式转换",[14,51403,51404],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,51406,51407],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,51409,51410],{},"要使用三等，开发的时候",[14,51412,51413],{},"NaN不等于任何人，包括它自己",[14,51415,51416],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,51418,51419],{},"7\u002F10=0.7",[14,51421,51422],{},"最后：0.5+0.2=0.7",[14,51424,51425],{},"字符串比较，比较的是字符对应的ASCII码",[588,51427,51429],{"id":51428},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,51431,51432],{},[1941,51433],{"alt":31,"src":51434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,51436,51437],{},[1941,51438],{"alt":31,"src":51439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,51441,51442],{},[1941,51443],{"alt":31,"src":51444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,51446,51447],{},"上述题目选D",[14,51449,51450],{},"与真2假1；或真1假2",[588,51452,51454],{"id":51453},"_265-运算符优先级","2.6.5 运算符优先级",[14,51456,51457],{},[1941,51458],{"alt":31,"src":51459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,51461,51462],{},"先算逻辑与，后算逻辑或",[559,51464,51466],{"id":51465},"_27-语句","2.7 语句",[14,51468,51469],{},"表达式：是可以被求值的代码，会有结果给我们",[14,51471,51472],{},"语句：语句是可以被执行的代码，例如prompt()",[14,51474,51475],{},[1941,51476],{"alt":31,"src":51477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,51479,51480],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,51482,51483],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[588,51485,51487],{"id":51486},"_271-分支语句","2.7.1 分支语句",[22437,51489,51491],{"id":51490},"_2711-if分支语句","2.7.1.1 if分支语句",[14,51493,51494],{},"if语句单行简单的话，可以不写{}，写在一行就行",[571,51496,51497],{},[574,51498,51499],{},"单分支语句",[14,51501,51502],{},[1941,51503],{"alt":31,"src":51504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,51506,51507],{},"除了0，所有数字都为真",[26,51509,51511],{"className":51066,"code":51510,"language":51068,"meta":31,"style":31},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[33,51512,51513,51518,51523,51528,51532],{"__ignoreMap":31},[36,51514,51515],{"class":38,"line":39},[36,51516,51517],{"class":98},"if（0) {\n",[36,51519,51520],{"class":38,"line":46},[36,51521,51522],{"class":98},"    let a=1\n",[36,51524,51525],{"class":38,"line":52},[36,51526,51527],{"class":98},"    alert(typeof a)\n",[36,51529,51530],{"class":38,"line":66},[36,51531,2044],{"class":98},[36,51533,51534],{"class":38,"line":72},[36,51535,51536],{"class":98},"不输出，括号为假\n",[571,51538,51539],{"start":46},[574,51540,51541],{},"双分支语句",[14,51543,51544],{},[1941,51545],{"alt":31,"src":51546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[571,51548,51549],{"start":52},[574,51550,51551],{},"多分支语句",[14,51553,51554],{},[1941,51555],{"alt":31,"src":51556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22437,51558,51560],{"id":51559},"_2712-三元运算符","2.7.1.2 三元运算符",[14,51562,51563],{},[1941,51564],{"alt":31,"src":51565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22437,51567,51569],{"id":51568},"_2713-switch语句","2.7.1.3 switch语句",[14,51571,51572],{},[1941,51573],{"alt":31,"src":51574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,51576,51577],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[588,51579,51581],{"id":51580},"_272-循环语句","2.7.2 循环语句",[22437,51583,51585],{"id":51584},"_2721-断点演示","2.7.2.1 断点演示",[14,51587,51588],{},[1941,51589],{"alt":31,"src":51590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22437,51592,51594],{"id":51593},"_2722-while循环","2.7.2.2 while循环",[14,51596,51597],{},[1941,51598],{"alt":31,"src":51599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,51601,51602],{},[1941,51603],{"alt":31,"src":51604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22437,51606,51608],{"id":51607},"_2723-for循环","2.7.2.3 for循环",[14,51610,51611],{},[1941,51612],{"alt":31,"src":51613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,51615,51616],{},"for(;;) {",[14,51618,1558],{},[14,51620,51621],{},"表示无限循环",[14,51623,51624],{},[1941,51625],{"alt":31,"src":51626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22437,51628,51630],{"id":51629},"_2724-循环的退出","2.7.2.4 循环的退出",[14,51632,51633],{},[1941,51634],{"alt":31,"src":51635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[559,51637,51639],{"id":51638},"_28-数组","2.8 数组",[588,51641,51643],{"id":51642},"_281-基础认识","2.8.1 基础认识",[14,51645,51646],{},[1941,51647],{"alt":31,"src":51648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,51650,51651],{},[1941,51652],{"alt":31,"src":51653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,51655,51656],{},[1941,51657],{"alt":31,"src":51658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,51660,51661],{},[1941,51662],{"alt":31,"src":51663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[588,51665,51667],{"id":51666},"_282-操作数组","2.8.2 操作数组",[14,51669,51670],{},[1941,51671],{"alt":31,"src":51672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[571,51674,51675],{},[574,51676,51677],{},"添加元素",[14,51679,51680],{},[1941,51681],{"alt":31,"src":51682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,51684,51685],{},"console.log(arr.push('green'))",[14,51687,51688],{},"输出结果：为新数组的长度",[14,51690,51691],{},[1941,51692],{"alt":31,"src":51693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,51695,51696],{},"push用的非常多，一定要记住",[571,51698,51699],{},[574,51700,51701],{},"删除元素",[14,51703,51704],{},[1941,51705],{"alt":31,"src":51706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,51708,51709],{},[1941,51710],{"alt":31,"src":51711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,51713,51714],{},[1941,51715],{"alt":31,"src":51716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[588,51718,51720],{"id":51719},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[26,51722,51724],{"className":51066,"code":51723,"language":51068,"meta":31,"style":31},"\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",[33,51725,51726,51740,51756,51760,51769,51787,51811,51833,51847,51855,51862,51874,51885,51889,51893,51900,51912,51927,51940,51959,51976,51991,52003,52015,52027,52031,52035,52046,52056,52068,52080,52092,52103,52107,52111,52123,52127,52141,52145,52149,52160,52174,52186,52200,52204,52213,52222,52226,52235,52239,52248,52253,52258,52271,52299,52304,52309,52334,52339,52343,52348,52353,52368,52372,52377,52407,52419,52435,52451,52465,52470,52477,52481,52486,52499,52507,52515,52519],{"__ignoreMap":31},[36,51727,51728,51731,51735,51738],{"class":38,"line":39},[36,51729,51730],{"class":98},"\u003C!",[36,51732,51734],{"class":51733},"s9eBZ","DOCTYPE",[36,51736,51737],{"class":55}," html",[36,51739,188],{"class":98},[36,51741,51742,51744,51746,51749,51751,51754],{"class":38,"line":46},[36,51743,179],{"class":98},[36,51745,51068],{"class":51733},[36,51747,51748],{"class":55}," lang",[36,51750,176],{"class":98},[36,51752,51753],{"class":59},"\"en\"",[36,51755,188],{"class":98},[36,51757,51758],{"class":38,"line":52},[36,51759,247],{"emptyLinePlaceholder":246},[36,51761,51762,51764,51767],{"class":38,"line":66},[36,51763,179],{"class":98},[36,51765,51766],{"class":51733},"head",[36,51768,188],{"class":98},[36,51770,51771,51774,51777,51780,51782,51785],{"class":38,"line":72},[36,51772,51773],{"class":98},"    \u003C",[36,51775,51776],{"class":51733},"meta",[36,51778,51779],{"class":55}," charset",[36,51781,176],{"class":98},[36,51783,51784],{"class":59},"\"UTF-8\"",[36,51786,188],{"class":98},[36,51788,51789,51791,51793,51796,51798,51801,51804,51806,51809],{"class":38,"line":82},[36,51790,51773],{"class":98},[36,51792,51776],{"class":51733},[36,51794,51795],{"class":55}," http-equiv",[36,51797,176],{"class":98},[36,51799,51800],{"class":59},"\"X-UA-Compatible\"",[36,51802,51803],{"class":55}," content",[36,51805,176],{"class":98},[36,51807,51808],{"class":59},"\"IE=edge\"",[36,51810,188],{"class":98},[36,51812,51813,51815,51817,51819,51821,51824,51826,51828,51831],{"class":38,"line":88},[36,51814,51773],{"class":98},[36,51816,51776],{"class":51733},[36,51818,15359],{"class":55},[36,51820,176],{"class":98},[36,51822,51823],{"class":59},"\"viewport\"",[36,51825,51803],{"class":55},[36,51827,176],{"class":98},[36,51829,51830],{"class":59},"\"width=device-width, initial-scale=1.0\"",[36,51832,188],{"class":98},[36,51834,51835,51837,51840,51843,51845],{"class":38,"line":113},[36,51836,51773],{"class":98},[36,51838,51839],{"class":51733},"title",[36,51841,51842],{"class":98},">Document\u003C\u002F",[36,51844,51839],{"class":51733},[36,51846,188],{"class":98},[36,51848,51849,51851,51853],{"class":38,"line":119},[36,51850,51773],{"class":98},[36,51852,537],{"class":51733},[36,51854,188],{"class":98},[36,51856,51857,51860],{"class":38,"line":131},[36,51858,51859],{"class":51733},"        *",[36,51861,16011],{"class":98},[36,51863,51864,51867,51870,51872],{"class":38,"line":137},[36,51865,51866],{"class":109},"            margin",[36,51868,51869],{"class":98},": ",[36,51871,807],{"class":109},[36,51873,1772],{"class":98},[36,51875,51876,51879,51881,51883],{"class":38,"line":147},[36,51877,51878],{"class":109},"            padding",[36,51880,51869],{"class":98},[36,51882,807],{"class":109},[36,51884,1772],{"class":98},[36,51886,51887],{"class":38,"line":153},[36,51888,2987],{"class":98},[36,51890,51891],{"class":38,"line":191},[36,51892,247],{"emptyLinePlaceholder":246},[36,51894,51895,51898],{"class":38,"line":197},[36,51896,51897],{"class":55},"        .box",[36,51899,16011],{"class":98},[36,51901,51902,51905,51907,51910],{"class":38,"line":217},[36,51903,51904],{"class":109},"            display",[36,51906,51869],{"class":98},[36,51908,51909],{"class":109},"flex",[36,51911,1772],{"class":98},[36,51913,51914,51917,51919,51922,51925],{"class":38,"line":223},[36,51915,51916],{"class":109},"            width",[36,51918,51869],{"class":98},[36,51920,51921],{"class":109},"700",[36,51923,51924],{"class":163},"px",[36,51926,1772],{"class":98},[36,51928,51929,51932,51934,51936,51938],{"class":38,"line":243},[36,51930,51931],{"class":109},"            height",[36,51933,51869],{"class":98},[36,51935,4424],{"class":109},[36,51937,51924],{"class":163},[36,51939,1772],{"class":98},[36,51941,51942,51945,51947,51949,51951,51954,51957],{"class":38,"line":250},[36,51943,51944],{"class":109},"            border-left",[36,51946,51869],{"class":98},[36,51948,833],{"class":109},[36,51950,51924],{"class":163},[36,51952,51953],{"class":109}," solid",[36,51955,51956],{"class":109}," pink",[36,51958,1772],{"class":98},[36,51960,51961,51964,51966,51968,51970,51972,51974],{"class":38,"line":256},[36,51962,51963],{"class":109},"            border-bottom",[36,51965,51869],{"class":98},[36,51967,833],{"class":109},[36,51969,51924],{"class":163},[36,51971,51953],{"class":109},[36,51973,51956],{"class":109},[36,51975,1772],{"class":98},[36,51977,51978,51980,51982,51984,51986,51989],{"class":38,"line":273},[36,51979,51866],{"class":109},[36,51981,51869],{"class":98},[36,51983,1270],{"class":109},[36,51985,51924],{"class":163},[36,51987,51988],{"class":109}," auto",[36,51990,1772],{"class":98},[36,51992,51993,51996,51998,52001],{"class":38,"line":278},[36,51994,51995],{"class":109},"            justify-content",[36,51997,51869],{"class":98},[36,51999,52000],{"class":109},"space-around",[36,52002,1772],{"class":98},[36,52004,52005,52008,52010,52013],{"class":38,"line":284},[36,52006,52007],{"class":109},"            align-items",[36,52009,51869],{"class":98},[36,52011,52012],{"class":109},"flex-end",[36,52014,1772],{"class":98},[36,52016,52017,52020,52022,52025],{"class":38,"line":315},[36,52018,52019],{"class":109},"            text-align",[36,52021,51869],{"class":98},[36,52023,52024],{"class":109},"center",[36,52026,1772],{"class":98},[36,52028,52029],{"class":38,"line":320},[36,52030,2987],{"class":98},[36,52032,52033],{"class":38,"line":326},[36,52034,247],{"emptyLinePlaceholder":246},[36,52036,52037,52039,52041,52044],{"class":38,"line":343},[36,52038,51897],{"class":55},[36,52040,173],{"class":163},[36,52042,52043],{"class":51733},"div",[36,52045,16011],{"class":98},[36,52047,52048,52050,52052,52054],{"class":38,"line":348},[36,52049,51904],{"class":109},[36,52051,51869],{"class":98},[36,52053,51909],{"class":109},[36,52055,1772],{"class":98},[36,52057,52058,52060,52062,52064,52066],{"class":38,"line":354},[36,52059,51916],{"class":109},[36,52061,51869],{"class":98},[36,52063,1270],{"class":109},[36,52065,51924],{"class":163},[36,52067,1772],{"class":98},[36,52069,52070,52073,52075,52078],{"class":38,"line":370},[36,52071,52072],{"class":109},"            background-color",[36,52074,51869],{"class":98},[36,52076,52077],{"class":109},"pink",[36,52079,1772],{"class":98},[36,52081,52082,52085,52087,52090],{"class":38,"line":375},[36,52083,52084],{"class":109},"            flex-direction",[36,52086,51869],{"class":98},[36,52088,52089],{"class":109},"column",[36,52091,1772],{"class":98},[36,52093,52094,52096,52098,52101],{"class":38,"line":381},[36,52095,51995],{"class":109},[36,52097,51869],{"class":98},[36,52099,52100],{"class":109},"space-between",[36,52102,1772],{"class":98},[36,52104,52105],{"class":38,"line":399},[36,52106,2987],{"class":98},[36,52108,52109],{"class":38,"line":404},[36,52110,247],{"emptyLinePlaceholder":246},[36,52112,52113,52115,52118,52121],{"class":38,"line":410},[36,52114,51897],{"class":55},[36,52116,52117],{"class":51733}," div",[36,52119,52120],{"class":51733}," span",[36,52122,16011],{"class":98},[36,52124,52125],{"class":38,"line":423},[36,52126,247],{"emptyLinePlaceholder":246},[36,52128,52129,52132,52134,52137,52139],{"class":38,"line":436},[36,52130,52131],{"class":109},"            margin-top",[36,52133,51869],{"class":98},[36,52135,52136],{"class":109},"-20",[36,52138,51924],{"class":163},[36,52140,1772],{"class":98},[36,52142,52143],{"class":38,"line":441},[36,52144,2987],{"class":98},[36,52146,52147],{"class":38,"line":447},[36,52148,247],{"emptyLinePlaceholder":246},[36,52150,52151,52153,52155,52158],{"class":38,"line":465},[36,52152,51897],{"class":55},[36,52154,52117],{"class":51733},[36,52156,52157],{"class":51733}," h4",[36,52159,16011],{"class":98},[36,52161,52162,52165,52167,52170,52172],{"class":38,"line":470},[36,52163,52164],{"class":109},"            margin-bottom",[36,52166,51869],{"class":98},[36,52168,52169],{"class":109},"-35",[36,52171,51924],{"class":163},[36,52173,1772],{"class":98},[36,52175,52176,52178,52180,52182,52184],{"class":38,"line":476},[36,52177,51916],{"class":109},[36,52179,51869],{"class":98},[36,52181,970],{"class":109},[36,52183,51924],{"class":163},[36,52185,1772],{"class":98},[36,52187,52188,52191,52193,52196,52198],{"class":38,"line":496},[36,52189,52190],{"class":109},"            margin-left",[36,52192,51869],{"class":98},[36,52194,52195],{"class":109},"-10",[36,52197,51924],{"class":163},[36,52199,1772],{"class":98},[36,52201,52202],{"class":38,"line":501},[36,52203,2987],{"class":98},[36,52205,52206,52209,52211],{"class":38,"line":507},[36,52207,52208],{"class":98},"    \u003C\u002F",[36,52210,537],{"class":51733},[36,52212,188],{"class":98},[36,52214,52215,52218,52220],{"class":38,"line":517},[36,52216,52217],{"class":98},"\u003C\u002F",[36,52219,51766],{"class":51733},[36,52221,188],{"class":98},[36,52223,52224],{"class":38,"line":522},[36,52225,247],{"emptyLinePlaceholder":246},[36,52227,52228,52230,52233],{"class":38,"line":528},[36,52229,179],{"class":98},[36,52231,52232],{"class":51733},"body",[36,52234,188],{"class":98},[36,52236,52237],{"class":38,"line":10203},[36,52238,247],{"emptyLinePlaceholder":246},[36,52240,52241,52243,52246],{"class":38,"line":10227},[36,52242,51773],{"class":98},[36,52244,52245],{"class":51733},"script",[36,52247,188],{"class":98},[36,52249,52250],{"class":38,"line":10232},[36,52251,52252],{"class":42},"        \u002F\u002F 1. 四次弹框效果\n",[36,52254,52255],{"class":38,"line":10237},[36,52256,52257],{"class":42},"        \u002F\u002F 声明一个新的数组\n",[36,52259,52260,52263,52266,52268],{"class":38,"line":10242},[36,52261,52262],{"class":163},"        let",[36,52264,52265],{"class":98}," arr ",[36,52267,176],{"class":163},[36,52269,52270],{"class":98}," []\n",[36,52272,52273,52275,52277,52280,52282,52284,52286,52288,52290,52293,52295,52297],{"class":38,"line":10251},[36,52274,3854],{"class":163},[36,52276,2130],{"class":98},[36,52278,52279],{"class":163},"let",[36,52281,9879],{"class":98},[36,52283,176],{"class":163},[36,52285,25555],{"class":109},[36,52287,9886],{"class":98},[36,52289,2067],{"class":163},[36,52291,52292],{"class":109}," 4",[36,52294,3665],{"class":98},[36,52296,2751],{"class":163},[36,52298,12881],{"class":98},[36,52300,52301],{"class":38,"line":10256},[36,52302,52303],{"class":42},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[36,52305,52306],{"class":38,"line":10262},[36,52307,52308],{"class":42},"            \u002F\u002F arr.push(num)\n",[36,52310,52311,52314,52317,52319,52322,52324,52327,52329,52332],{"class":38,"line":10283},[36,52312,52313],{"class":98},"            arr.",[36,52315,52316],{"class":55},"push",[36,52318,621],{"class":98},[36,52320,52321],{"class":55},"prompt",[36,52323,621],{"class":98},[36,52325,52326],{"class":59},"`请输入第${",[36,52328,1055],{"class":98},[36,52330,52331],{"class":59},"}季度的数据:`",[36,52333,30930],{"class":98},[36,52335,52336],{"class":38,"line":10289},[36,52337,52338],{"class":42},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[36,52340,52341],{"class":38,"line":10303},[36,52342,2987],{"class":98},[36,52344,52345],{"class":38,"line":10309},[36,52346,52347],{"class":42},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[36,52349,52350],{"class":38,"line":10336},[36,52351,52352],{"class":42},"        \u002F\u002F 盒子开头\n",[36,52354,52355,52358,52361,52363,52366],{"class":38,"line":10345},[36,52356,52357],{"class":98},"        document.",[36,52359,52360],{"class":55},"write",[36,52362,621],{"class":98},[36,52364,52365],{"class":59},"` \u003Cdiv class=\"box\">`",[36,52367,627],{"class":98},[36,52369,52370],{"class":38,"line":10351},[36,52371,247],{"emptyLinePlaceholder":246},[36,52373,52374],{"class":38,"line":10359},[36,52375,52376],{"class":42},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[36,52378,52379,52381,52383,52385,52387,52389,52391,52393,52395,52398,52401,52403,52405],{"class":38,"line":10364},[36,52380,3854],{"class":163},[36,52382,2130],{"class":98},[36,52384,52279],{"class":163},[36,52386,9879],{"class":98},[36,52388,176],{"class":163},[36,52390,4544],{"class":109},[36,52392,9886],{"class":98},[36,52394,179],{"class":163},[36,52396,52397],{"class":98}," arr.",[36,52399,52400],{"class":109},"length",[36,52402,3665],{"class":98},[36,52404,2751],{"class":163},[36,52406,12881],{"class":98},[36,52408,52409,52412,52414,52416],{"class":38,"line":17043},[36,52410,52411],{"class":98},"            document.",[36,52413,52360],{"class":55},[36,52415,621],{"class":98},[36,52417,52418],{"class":59},"`\n",[36,52420,52421,52424,52426,52428,52430,52432],{"class":38,"line":17049},[36,52422,52423],{"class":59},"              \u003Cdiv style=\"height: ${",[36,52425,4331],{"class":98},[36,52427,1503],{"class":59},[36,52429,1055],{"class":98},[36,52431,1552],{"class":59},[36,52433,52434],{"class":59},"}px;\">\n",[36,52436,52437,52440,52442,52444,52446,52448],{"class":38,"line":17072},[36,52438,52439],{"class":59},"                \u003Cspan>${",[36,52441,4331],{"class":98},[36,52443,1503],{"class":59},[36,52445,1055],{"class":98},[36,52447,1552],{"class":59},[36,52449,52450],{"class":59},"}\u003C\u002Fspan>\n",[36,52452,52453,52456,52458,52460,52462],{"class":38,"line":17078},[36,52454,52455],{"class":59},"                \u003Ch4>第${",[36,52457,1055],{"class":98},[36,52459,45999],{"class":163},[36,52461,25555],{"class":109},[36,52463,52464],{"class":59},"}季度\u003C\u002Fh4>\n",[36,52466,52467],{"class":38,"line":17101},[36,52468,52469],{"class":59},"              \u003C\u002Fdiv>          \n",[36,52471,52472,52475],{"class":38,"line":17115},[36,52473,52474],{"class":59},"            `",[36,52476,627],{"class":98},[36,52478,52479],{"class":38,"line":17135},[36,52480,2987],{"class":98},[36,52482,52483],{"class":38,"line":17141},[36,52484,52485],{"class":42},"        \u002F\u002F 盒子结尾\n",[36,52487,52488,52490,52492,52494,52497],{"class":38,"line":17152},[36,52489,52357],{"class":98},[36,52491,52360],{"class":55},[36,52493,621],{"class":98},[36,52495,52496],{"class":59},"` \u003C\u002Fdiv>`",[36,52498,627],{"class":98},[36,52500,52501,52503,52505],{"class":38,"line":17175},[36,52502,52208],{"class":98},[36,52504,52245],{"class":51733},[36,52506,188],{"class":98},[36,52508,52509,52511,52513],{"class":38,"line":17197},[36,52510,52217],{"class":98},[36,52512,52232],{"class":51733},[36,52514,188],{"class":98},[36,52516,52517],{"class":38,"line":17202},[36,52518,247],{"emptyLinePlaceholder":246},[36,52520,52521,52523,52525],{"class":38,"line":17208},[36,52522,52217],{"class":98},[36,52524,51068],{"class":51733},[36,52526,188],{"class":98},[588,52528,52530],{"id":52529},"_284-冒泡排序","2.8.4 冒泡排序",[26,52532,52534],{"className":51066,"code":52533,"language":51068,"meta":31,"style":31},"\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",[33,52535,52536,52546,52560,52564,52572,52587,52607,52619,52627,52631,52639,52647,52679,52712,52749,52754,52773,52778,52791,52806,52822,52826,52831,52835,52845,52854,52862,52866],{"__ignoreMap":31},[36,52537,52538,52540,52542,52544],{"class":38,"line":39},[36,52539,51730],{"class":98},[36,52541,51734],{"class":51733},[36,52543,51737],{"class":55},[36,52545,188],{"class":98},[36,52547,52548,52550,52552,52554,52556,52558],{"class":38,"line":46},[36,52549,179],{"class":98},[36,52551,51068],{"class":51733},[36,52553,51748],{"class":55},[36,52555,176],{"class":98},[36,52557,51753],{"class":59},[36,52559,188],{"class":98},[36,52561,52562],{"class":38,"line":52},[36,52563,247],{"emptyLinePlaceholder":246},[36,52565,52566,52568,52570],{"class":38,"line":66},[36,52567,179],{"class":98},[36,52569,51766],{"class":51733},[36,52571,188],{"class":98},[36,52573,52574,52577,52579,52581,52583,52585],{"class":38,"line":72},[36,52575,52576],{"class":98},"  \u003C",[36,52578,51776],{"class":51733},[36,52580,51779],{"class":55},[36,52582,176],{"class":98},[36,52584,51784],{"class":59},[36,52586,188],{"class":98},[36,52588,52589,52591,52593,52595,52597,52599,52601,52603,52605],{"class":38,"line":82},[36,52590,52576],{"class":98},[36,52592,51776],{"class":51733},[36,52594,15359],{"class":55},[36,52596,176],{"class":98},[36,52598,51823],{"class":59},[36,52600,51803],{"class":55},[36,52602,176],{"class":98},[36,52604,51830],{"class":59},[36,52606,188],{"class":98},[36,52608,52609,52611,52613,52615,52617],{"class":38,"line":88},[36,52610,52576],{"class":98},[36,52612,51839],{"class":51733},[36,52614,51842],{"class":98},[36,52616,51839],{"class":51733},[36,52618,188],{"class":98},[36,52620,52621,52623,52625],{"class":38,"line":113},[36,52622,52217],{"class":98},[36,52624,51766],{"class":51733},[36,52626,188],{"class":98},[36,52628,52629],{"class":38,"line":119},[36,52630,247],{"emptyLinePlaceholder":246},[36,52632,52633,52635,52637],{"class":38,"line":131},[36,52634,179],{"class":98},[36,52636,52232],{"class":51733},[36,52638,188],{"class":98},[36,52640,52641,52643,52645],{"class":38,"line":137},[36,52642,52576],{"class":98},[36,52644,52245],{"class":51733},[36,52646,188],{"class":98},[36,52648,52649,52652,52654,52656,52659,52661,52663,52665,52667,52669,52671,52673,52675,52677],{"class":38,"line":147},[36,52650,52651],{"class":163},"    let",[36,52653,52265],{"class":98},[36,52655,176],{"class":163},[36,52657,52658],{"class":98}," [",[36,52660,933],{"class":109},[36,52662,12874],{"class":98},[36,52664,908],{"class":109},[36,52666,12874],{"class":98},[36,52668,689],{"class":109},[36,52670,12874],{"class":98},[36,52672,694],{"class":109},[36,52674,12874],{"class":98},[36,52676,833],{"class":109},[36,52678,33679],{"class":98},[36,52680,52681,52683,52685,52687,52689,52691,52693,52695,52697,52699,52701,52704,52706,52708,52710],{"class":38,"line":153},[36,52682,3652],{"class":163},[36,52684,2130],{"class":98},[36,52686,52279],{"class":163},[36,52688,9879],{"class":98},[36,52690,176],{"class":163},[36,52692,4544],{"class":109},[36,52694,9886],{"class":98},[36,52696,179],{"class":163},[36,52698,52397],{"class":98},[36,52700,52400],{"class":109},[36,52702,52703],{"class":163}," -",[36,52705,25555],{"class":109},[36,52707,3665],{"class":98},[36,52709,2751],{"class":163},[36,52711,12881],{"class":98},[36,52713,52714,52717,52719,52721,52723,52725,52727,52729,52731,52733,52735,52737,52739,52741,52743,52745,52747],{"class":38,"line":191},[36,52715,52716],{"class":163},"      for",[36,52718,2130],{"class":98},[36,52720,52279],{"class":163},[36,52722,9941],{"class":98},[36,52724,176],{"class":163},[36,52726,4544],{"class":109},[36,52728,9948],{"class":98},[36,52730,179],{"class":163},[36,52732,52397],{"class":98},[36,52734,52400],{"class":109},[36,52736,52703],{"class":163},[36,52738,9879],{"class":98},[36,52740,1146],{"class":163},[36,52742,25555],{"class":109},[36,52744,9955],{"class":98},[36,52746,2751],{"class":163},[36,52748,12881],{"class":98},[36,52750,52751],{"class":38,"line":197},[36,52752,52753],{"class":42},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[36,52755,52756,52758,52761,52763,52766,52768,52770],{"class":38,"line":217},[36,52757,2955],{"class":163},[36,52759,52760],{"class":98}," (arr[j] ",[36,52762,173],{"class":163},[36,52764,52765],{"class":98}," arr[j ",[36,52767,1095],{"class":163},[36,52769,25555],{"class":109},[36,52771,52772],{"class":98},"]) {\n",[36,52774,52775],{"class":38,"line":223},[36,52776,52777],{"class":42},"          \u002F\u002F 交换两个变量\n",[36,52779,52780,52783,52786,52788],{"class":38,"line":243},[36,52781,52782],{"class":163},"          let",[36,52784,52785],{"class":98}," tmp ",[36,52787,176],{"class":163},[36,52789,52790],{"class":98}," arr[j]\n",[36,52792,52793,52796,52798,52800,52802,52804],{"class":38,"line":250},[36,52794,52795],{"class":98},"          arr[j] ",[36,52797,176],{"class":163},[36,52799,52765],{"class":98},[36,52801,1095],{"class":163},[36,52803,25555],{"class":109},[36,52805,33679],{"class":98},[36,52807,52808,52811,52813,52815,52817,52819],{"class":38,"line":256},[36,52809,52810],{"class":98},"          arr[j ",[36,52812,1095],{"class":163},[36,52814,25555],{"class":109},[36,52816,4894],{"class":98},[36,52818,176],{"class":163},[36,52820,52821],{"class":98}," tmp\n",[36,52823,52824],{"class":38,"line":273},[36,52825,2987],{"class":98},[36,52827,52828],{"class":38,"line":278},[36,52829,52830],{"class":98},"      }\n",[36,52832,52833],{"class":38,"line":284},[36,52834,2646],{"class":98},[36,52836,52837,52840,52842],{"class":38,"line":315},[36,52838,52839],{"class":98},"    document.",[36,52841,52360],{"class":55},[36,52843,52844],{"class":98},"(arr)\n",[36,52846,52847,52850,52852],{"class":38,"line":320},[36,52848,52849],{"class":98},"  \u003C\u002F",[36,52851,52245],{"class":51733},[36,52853,188],{"class":98},[36,52855,52856,52858,52860],{"class":38,"line":326},[36,52857,52217],{"class":98},[36,52859,52232],{"class":51733},[36,52861,188],{"class":98},[36,52863,52864],{"class":38,"line":343},[36,52865,247],{"emptyLinePlaceholder":246},[36,52867,52868,52870,52872],{"class":38,"line":348},[36,52869,52217],{"class":98},[36,52871,51068],{"class":51733},[36,52873,188],{"class":98},[14,52875,52876],{},[1941,52877],{"alt":31,"src":52878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,52880,52881],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,52883,52884],{},"let arr = [4, 2, 5, 1, 3]",[14,52886,52887],{},"\u002F\u002F 1.升序排列写法",[14,52889,52890],{},"arr.sort(function (a, b) {",[14,52892,52893],{},"return a - b",[14,52895,52896],{},"})",[14,52898,52899],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,52901,52902],{},"\u002F\u002F 降序排列写法",[14,52904,52890],{},[14,52906,52907],{},"return b - a",[14,52909,52896],{},[14,52911,52912],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[559,52914,52916],{"id":52915},"_29-函数","2.9 函数",[14,52918,52919],{},[1941,52920],{"alt":31,"src":52921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,52923,52924],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,52926,52927],{},"函数的声明用function",[14,52929,52930],{},"函数里边可以嵌套函数",[588,52932,52934],{"id":52933},"_291-函数传参","2.9.1 函数传参",[14,52936,52937],{},[1941,52938],{"alt":31,"src":52939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,52941,52942],{},[1941,52943],{"alt":31,"src":52944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1618,52946,52947,52950,52953,52956,52959,52962],{},[574,52948,52949],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[574,52951,52952],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[574,52954,52955],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[574,52957,52958],{},"开发中尽量保持形参和实参个数一致",[574,52960,52961],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[574,52963,52964],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,52966,52967],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[588,52969,52971],{"id":52970},"_292-函数的返回值","2.9.2 函数的返回值",[14,52973,52974],{},[1941,52975],{"alt":31,"src":52976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,52978,52979],{},[1941,52980],{"alt":31,"src":52981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1618,52983,52984,52987,52990,52993,52996],{},[574,52985,52986],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[574,52988,52989],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[574,52991,52992],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[574,52994,52995],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[574,52997,52998],{},"断点调试:进入函数内部看执行过程F11",[588,53000,53002],{"id":53001},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[26,53004,53006],{"className":51066,"code":53005,"language":51068,"meta":31,"style":31},"    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",[33,53007,53008,53013,53018,53022,53027],{"__ignoreMap":31},[36,53009,53010],{"class":38,"line":39},[36,53011,53012],{"class":98},"    function fn(a, b) {\n",[36,53014,53015],{"class":38,"line":46},[36,53016,53017],{"class":98},"      console.log(a + b);\n",[36,53019,53020],{"class":38,"line":52},[36,53021,2646],{"class":98},[36,53023,53024],{"class":38,"line":66},[36,53025,53026],{"class":98},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[36,53028,53029],{"class":38,"line":72},[36,53030,53031],{"class":98},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[588,53033,53035],{"id":53034},"_294-作用域","2.9.4 作用域",[1618,53037,53038,53044,53049,53052,53055],{},[574,53039,53040,53041],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[765,53042,53043],{},"作用域",[574,53045,53046],{},[765,53047,53048],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[574,53050,53051],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[574,53053,53054],{},"函数内部可以直接所使用全局变量",[574,53056,53057],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,53059,15072],{},[26,53061,53063],{"className":51066,"code":53062,"language":51068,"meta":31,"style":31},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[33,53064,53065,53070,53075,53079,53084,53089,53094],{"__ignoreMap":31},[36,53066,53067],{"class":38,"line":39},[36,53068,53069],{"class":98},"    function fun() {\n",[36,53071,53072],{"class":38,"line":46},[36,53073,53074],{"class":98},"      num = 10\n",[36,53076,53077],{"class":38,"line":52},[36,53078,2646],{"class":98},[36,53080,53081],{"class":38,"line":66},[36,53082,53083],{"class":98},"    fun()\n",[36,53085,53086],{"class":38,"line":72},[36,53087,53088],{"class":98},"    console.log(num)\n",[36,53090,53091],{"class":38,"line":82},[36,53092,53093],{"class":98},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[36,53095,53096],{"class":38,"line":88},[36,53097,53098],{"class":98},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1618,53100,53101,53104],{},[574,53102,53103],{},"函数内部的形参可以看做是局部变量",[574,53105,53106],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,53108,53109,53110],{},"变量访问原则： ",[765,53111,53112],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[588,53114,53116],{"id":53115},"_295-匿名函数","2.9.5 匿名函数",[14,53118,53119],{},"函数可以分为具名函数和匿名函数",[14,53121,53122],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[571,53124,53125],{},[574,53126,53127],{},"函数表达式",[14,53129,53130],{},[1941,53131],{"alt":31,"src":53132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,53134,53135],{},"里边也可以写参数",[14,53137,53138],{},"具名函数调用位置可以随意调整；",[14,53140,53141],{},"匿名函数函数表达式形式只能在声明后才可以使用",[571,53143,53144],{"start":46},[574,53145,53146],{},"立即执行函数",[14,53148,53149],{},[1941,53150],{"alt":31,"src":53151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,53153,53154],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,53156,53157],{},"写法：两个小括号，然后在第一个小括号中写function",[14,53159,53160],{},"(function () {})();",[14,53162,53163],{},"不要落下最后的;",[14,53165,53166],{},"立即执行函数必须要加;",[14,53168,53169],{},"分号写前写后都没问题",[14,53171,53172],{},"写前：",[14,53174,53175],{},"(function() {})()",[14,53177,53178],{},";(function () {})();",[14,53180,53181],{},"写后:",[14,53183,53184],{},"(function() {})();",[14,53186,53160],{},[14,53188,53189],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,53191,53192],{},"还有一种写法：",[14,53194,53195],{},"(function(){}());",[14,53197,53198],{},"或者:",[14,53200,53201],{},"!function(){}();",[14,53203,53204],{},"立即执行函数有时候也是可以加名字的：",[14,53206,53207],{},"(function flexible(window,document) {}(window,document));",[14,53209,53210],{},"省一些调用方法",[588,53212,53214],{"id":53213},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,53216,53217],{},[1941,53218],{"alt":31,"src":53219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,53221,53222],{},"这样就不用非得给x,y初始化了",[14,53224,53225],{},[1941,53226],{"alt":31,"src":53227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,53229,53230],{},"代码执行时先看左边",[14,53232,53233],{},"例如：console.log(false && 3+5)",[14,53235,53236],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,53238,53239],{},"&&都是真时，就返回最后一个真值",[14,53241,53242],{},"console.log(11 && 22)",[14,53244,53245],{},"输出22",[14,53247,53248],{},"逻辑与：遇真则真",[14,53250,15072],{},[14,53252,53253],{},"let age=1",[14,53255,53256],{},"console.log(11 || age++)",[14,53258,53259],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,53261,53262],{},"console.log(11 || 22)",[14,53264,53265],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,53267,53268],{},"||如果都是假的话，就取最后一个假的值了",[588,53270,53272],{"id":53271},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,53274,53275],{},"显示转换：",[14,53277,53278,53281,53282],{},[765,53279,53280],{},"记忆","： ",[765,53283,53284],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,53286,53287],{},"空字符串为假，其他字符串全为真",[14,53289,53290],{},[1941,53291],{"alt":31,"src":53292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,53294,53295],{},"隐式转换：",[14,53297,53298],{},[1941,53299],{"alt":31,"src":53300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,53302,53303],{},"隐式转换:",[14,53305,53306],{},"null+3=3",[14,53308,53309],{},"undefined+3=NaN",[14,53311,53312],{},"null==undefined 输出true,他两个都当0看",[14,53314,53315],{},"null===undefined 输出false",[14,53317,53318],{},"undefined做任何操作都是NaN",[14,53320,53321],{},"NaN不等于NaN，NaN表示计算错误",[559,53323,53325],{"id":53324},"_210-对象","2.10 对象",[588,53327,53329],{"id":53328},"_2101-对象的介绍","2.10.1 对象的介绍",[14,53331,53332],{},"对象也是一种数据类型，里边的数据是无序的",[14,53334,53335],{},"对象由属性和方法组成",[14,53337,53338],{},[1941,53339],{"alt":31,"src":53340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,53342,53343],{},[1941,53344],{"alt":31,"src":53345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,53347,53348],{},[1941,53349],{"alt":31,"src":53350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[588,53352,53354],{"id":53353},"_2102-对象属性","2.10.2 对象属性",[14,53356,53357],{},[1941,53358],{"alt":31,"src":53359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[571,53361,53362],{},[574,53363,53364],{},"查询对象",[14,53366,53367],{},"对象名.属性 goods.uname",[14,53369,53370],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,53372,53373],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,53375,53376],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,53378,53379],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[571,53381,53382],{"start":46},[574,53383,53384],{},"重新赋值",[14,53386,53387],{},"对象名.属性=新值",[571,53389,53390],{"start":52},[574,53391,53392],{},"增加新数据",[14,53394,53387],{},[571,53396,53397],{"start":66},[574,53398,53399],{},"删除对象中的属性",[14,53401,53402],{},"delete 对象名.属性",[588,53404,53406],{"id":53405},"_2103-对象方法","2.10.3 对象方法",[14,53408,53409],{},[1941,53410],{"alt":31,"src":53411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,53413,53414],{},"后边跟的是匿名函数",[14,53416,53417],{},"对象外面的叫函数；对象内部的叫方法",[14,53419,53420],{},[1941,53421],{"alt":31,"src":53422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[588,53424,53426],{"id":53425},"_2104-遍历对象","2.10.4 遍历对象",[14,53428,53429],{},"理解为加括号的python字典遍历",[14,53431,53432],{},[1941,53433],{"alt":31,"src":53434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,53436,53437],{},"k是字符串类型",[14,53439,53440],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[26,53442,53444],{"className":51066,"code":53443,"language":51068,"meta":31,"style":31},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[33,53445,53446,53451,53456,53461,53466],{"__ignoreMap":31},[36,53447,53448],{"class":38,"line":39},[36,53449,53450],{"class":98},"   let arr = [1, 2, 3]\n",[36,53452,53453],{"class":38,"line":46},[36,53454,53455],{"class":98},"    for (let k in arr) {\n",[36,53457,53458],{"class":38,"line":52},[36,53459,53460],{"class":98},"      console.log(k)\n",[36,53462,53463],{"class":38,"line":66},[36,53464,53465],{"class":98},"      console.log(arr[k])\n",[36,53467,53468],{"class":38,"line":72},[36,53469,2646],{"class":98},[14,53471,53472],{},[1941,53473],{"alt":31,"src":53474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,53476,53477],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,53479,53480],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,53482,53483],{},"for in 得到的k是属性名",[52245,53485,53486],{},"\n\nlet pink = {\n\nuname: 'pink老师',\n\nage: 18,\n\ngender: '男',\n\nsing: function () {\n\ndocument.write('唱歌')\n\n}\n\n}\n\n\u002F\u002F 遍历对象\n\nfor (let k in pink) {\n\nconsole.log(k)\n\nconsole.log(pink\\[k\\])\n\n}\n\n",[14,53488,53489],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[588,53491,53493],{"id":53492},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,53495,53496],{},"数组中放对象信息",[26,53498,53502],{"className":53499,"code":53500,"language":53501,"meta":31,"style":31},"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",[33,53503,53504,53512,53517,53522,53527,53532,53537,53542,53547,53552,53557,53562,53567,53571,53575],{"__ignoreMap":31},[36,53505,53506,53508,53510],{"class":38,"line":39},[36,53507,179],{"class":98},[36,53509,52245],{"class":51733},[36,53511,188],{"class":98},[36,53513,53514],{"class":38,"line":46},[36,53515,53516],{"class":98},"    let students = [\n",[36,53518,53519],{"class":38,"line":52},[36,53520,53521],{"class":98},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[36,53523,53524],{"class":38,"line":66},[36,53525,53526],{"class":98},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[36,53528,53529],{"class":38,"line":72},[36,53530,53531],{"class":98},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[36,53533,53534],{"class":38,"line":82},[36,53535,53536],{"class":98},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[36,53538,53539],{"class":38,"line":88},[36,53540,53541],{"class":98},"    ]\n",[36,53543,53544],{"class":38,"line":113},[36,53545,53546],{"class":98},"    for (let i = 0; i \u003C students.length; i++) {\n",[36,53548,53549],{"class":38,"line":119},[36,53550,53551],{"class":98},"      for (let k in students[i]) {\n",[36,53553,53554],{"class":38,"line":131},[36,53555,53556],{"class":98},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[36,53558,53559],{"class":38,"line":137},[36,53560,53561],{"class":98},"        \u002F\u002F输出每个人的名字：\n",[36,53563,53564],{"class":38,"line":147},[36,53565,53566],{"class":98},"        \u002F\u002Fconsole.log(students[i].name)\n",[36,53568,53569],{"class":38,"line":153},[36,53570,52830],{"class":98},[36,53572,53573],{"class":38,"line":191},[36,53574,2646],{"class":98},[36,53576,53577,53579,53581],{"class":38,"line":197},[36,53578,52849],{"class":98},[36,53580,52245],{"class":51733},[36,53582,188],{"class":98},[588,53584,53586],{"id":53585},"_2106-内置对象","2.10.6 内置对象",[14,53588,53589],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[571,53591,53592],{},[574,53593,53594],{},"数学对象Math",[14,53596,53597],{},[1941,53598],{"alt":31,"src":53599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,53601,53602],{},[20,53603,53606],{"href":53604,"rel":53605},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,53608,53609],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,53611,53612],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,53614,53615],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,53617,53618],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,53620,53621],{},"null属于对象数据类型",[571,53623,53624],{"start":46},[574,53625,53626],{},"生成任意范围随机数",[14,53628,53629],{},[1941,53630],{"alt":31,"src":53631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,53633,53634],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,53636,53637],{},"乘以几就取不到几",[14,53639,53640],{},"取数组中的随机元素：",[14,53642,53643],{},"let arr = ['red', 'green', 'blue']",[14,53645,53646],{},"let random = Math.floor(Math.random() * arr.length)",[14,53648,53649],{},"console.log(arr[random])",[14,53651,53652],{},"这个函数得到的是全闭区间",[14,53654,53655],{},"function getRandom(N, M) {",[14,53657,53658],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,53660,1558],{},[14,53662,53663],{},"console.log(getRandom(4, 8))",[588,53665,53667],{"id":53666},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,53669,53670],{},[1941,53671],{"alt":31,"src":53672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,53674,53675],{},[1941,53676],{"alt":31,"src":53677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,53679,53680],{},[1941,53681],{"alt":31,"src":53682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,53684,53685],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,53687,53688],{},[1941,53689],{"alt":31,"src":53690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,53692,53693],{},[1941,53694],{"alt":31,"src":53695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,53697,53698],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,53700,53701],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,53703,53704],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[537,53706,53707],{},"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":31,"searchDepth":46,"depth":46,"links":53709},[53710,53718,53719,53720,53721,53722,53729,53733,53739,53748],{"id":50901,"depth":46,"text":50902,"children":53711},[53712,53713,53714,53715,53716,53717],{"id":50905,"depth":52,"text":50906},{"id":50922,"depth":52,"text":50923},{"id":50962,"depth":52,"text":50963},{"id":50974,"depth":52,"text":50975},{"id":50983,"depth":52,"text":50984},{"id":51031,"depth":52,"text":51032},{"id":51041,"depth":46,"text":51042},{"id":51129,"depth":46,"text":51130},{"id":51152,"depth":46,"text":51153},{"id":51164,"depth":46,"text":51165},{"id":51351,"depth":46,"text":51352,"children":53723},[53724,53725,53726,53727,53728],{"id":51355,"depth":52,"text":51356},{"id":51364,"depth":52,"text":51365},{"id":51392,"depth":52,"text":51393},{"id":51428,"depth":52,"text":51429},{"id":51453,"depth":52,"text":51454},{"id":51465,"depth":46,"text":51466,"children":53730},[53731,53732],{"id":51486,"depth":52,"text":51487},{"id":51580,"depth":52,"text":51581},{"id":51638,"depth":46,"text":51639,"children":53734},[53735,53736,53737,53738],{"id":51642,"depth":52,"text":51643},{"id":51666,"depth":52,"text":51667},{"id":51719,"depth":52,"text":51720},{"id":52529,"depth":52,"text":52530},{"id":52915,"depth":46,"text":52916,"children":53740},[53741,53742,53743,53744,53745,53746,53747],{"id":52933,"depth":52,"text":52934},{"id":52970,"depth":52,"text":52971},{"id":53001,"depth":52,"text":53002},{"id":53034,"depth":52,"text":53035},{"id":53115,"depth":52,"text":53116},{"id":53213,"depth":52,"text":53214},{"id":53271,"depth":52,"text":53272},{"id":53324,"depth":46,"text":53325,"children":53749},[53750,53751,53752,53753,53754,53755,53756],{"id":53328,"depth":52,"text":53329},{"id":53353,"depth":52,"text":53354},{"id":53405,"depth":52,"text":53406},{"id":53425,"depth":52,"text":53426},{"id":53492,"depth":52,"text":53493},{"id":53585,"depth":52,"text":53586},{"id":53666,"depth":52,"text":53667},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50893,"description":542},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53763,"title":53764,"body":53765,"description":542,"extension":543,"meta":77105,"navigation":246,"path":77106,"seo":77107,"stem":77108,"__hash__":77109},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53766,"toc":77045},[53767,53770,53773,53776,53781,53784,53787,53790,53794,53798,53804,53809,53817,53824,53827,53831,53836,53841,53846,53849,53852,53863,53866,53870,53873,53876,53881,53886,53891,53894,53897,53989,53992,53997,54000,54005,54008,54011,54016,54019,54024,54028,54031,54045,54049,54054,54057,54060,54064,54069,54072,54076,54080,54085,54089,54094,54097,54100,54103,54106,54109,54112,54117,54122,54150,54153,54156,54159,54164,54167,54170,54173,54176,54180,54209,54213,54218,54223,54226,54229,54232,54237,54352,54357,54362,54523,54528,54531,54535,54540,54545,54548,54551,54554,54557,54560,54563,54566,54569,54572,54575,54578,54581,54584,54587,54589,54592,54595,54598,54603,54607,55004,55007,55013,55017,55022,56304,56309,56312,56315,56318,56323,57519,57523,57529,57534,57537,57542,57547,57551,57555,57560,57563,57568,57571,57574,57578,58486,58489,58493,58714,58717,58720,58723,58949,58952,59176,59179,59183,59188,59191,59194,59422,59425,59458,59461,59465,59470,59474,59477,59480,59483,59486,59489,59492,59495,59500,60780,60784,60787,61880,61884,61887,61890,61893,61896,61900,61903,61906,61908,61916,63397,63401,63404,63407,63410,63619,63622,63626,63630,63635,63640,63643,63646,63651,63655,63660,63663,63772,63776,63781,63786,63789,63792,63796,63801,63806,63811,63814,63817,63828,63831,63836,63841,63844,63847,63920,63924,63929,63932,63934,63945,63949,63954,65280,65283,65286,65289,65291,65294,65297,65300,65303,65306,65309,65312,65315,65318,65321,65324,65327,65329,65331,65334,65338,66432,66435,66438,66454,66468,66471,66476,66482,66487,66491,66495,66500,66504,66509,66951,66956,66959,66963,66968,66971,66974,66978,66983,66987,66992,66997,67001,67006,67011,67014,67019,67024,67028,67033,67038,67142,67145,67149,67154,67520,67523,67526,67529,67532,67535,67538,67541,67544,68840,68844,68849,68854,68857,68860,68863,68866,68868,68873,68878,68881,68885,68890,68895,68900,68903,68906,68909,68912,68915,68920,68923,68927,68932,68937,68941,68946,68949,68954,68957,68960,68963,68966,68969,68974,68977,68980,68983,68986,68990,68995,68998,69002,69007,69010,69013,69017,69046,69049,69053,69057,69062,69066,69071,69074,69077,69080,69083,69086,69089,69092,69095,69098,69101,69104,69107,69110,69113,69117,69122,69127,69130,69134,69138,69143,69146,69150,69153,69156,69161,69166,69171,69176,69181,69184,69187,69192,69197,69201,69206,69209,69214,69217,69220,69223,69226,69231,69234,69243,69247,69252,69255,69258,69262,69265,69270,69274,69277,69283,69289,69293,69319,69322,70883,70886,71382,71385,71390,71395,71400,71404,71409,71414,71419,71423,71428,71431,71434,71437,71440,71444,71447,71452,71455,71460,71464,71469,71472,71477,71482,71487,71490,71493,71498,71503,71506,71509,71513,71516,71521,71524,71529,71532,71537,71542,71547,71550,71555,71620,71623,71634,71638,71643,71815,71819,71824,71827,71830,71833,71837,71848,71852,71855,71860,71865,71868,71871,71874,71877,71880,71882,71885,71888,71891,71896,71899,71904,71907,71911,71914,71917,71931,71935,71938,71993,71998,72001,72004,72009,72012,72016,72021,72151,72155,72160,72165,72246,72251,72255,72258,72263,72268,72274,72277,72280,72283,72287,72292,72295,72306,72310,72327,75374,75378,75381,75384,75387,75408,75412,75415,75423,75426,75431,75434,75437,75442,75447,75451,75472,75476,75481,75484,75487,75490,75493,75497,75502,75505,75509,75514,75517,75522,75525,75530,75533,75538,76741,76745,76750,76753,76758,77042],[10,53768,53764],{"id":53769},"_3web-apis",[14,53771,53772],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,53774,53775],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,53777,53778],{},[1941,53779],{"alt":31,"src":53780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,53782,53783],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,53785,53786],{},"建议数组和对象使用 const 来声明",[14,53788,53789],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[559,53791,53793],{"id":53792},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[588,53795,53797],{"id":53796},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,53799,53800,53803],{},[33,53801,53802],{},"document"," = HTML 文件解析后的对象化表示；",[14,53805,53806,53808],{},[33,53807,53802],{}," ≠ HTML 文件本身",[14,53810,53811,53816],{},[765,53812,53813],{},[33,53814,53815],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,53818,53819,53823],{},[765,53820,53821],{},[33,53822,53802],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,53825,53826],{},"document实际上为window.document的简写",[588,53828,53830],{"id":53829},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,53832,53833],{},[1941,53834],{"alt":31,"src":53835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,53837,53838],{},[1941,53839],{"alt":31,"src":53840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,53842,53843],{},[1941,53844],{"alt":31,"src":53845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,53847,53848],{},"console.dir()",[14,53850,53851],{},"dir用来打印对象",[1618,53853,53854,53857,53860],{},[574,53855,53856],{},"任何一个标签，都是一个对象",[574,53858,53859],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[574,53861,53862],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,53864,53865],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[588,53867,53869],{"id":53868},"_312-获取dom对象","3.1.2 获取DoM对象",[14,53871,53872],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,53874,53875],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,53877,53878],{},[765,53879,53880],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[571,53882,53883],{},[574,53884,53885],{},"利用CSS选择器来获取标签元素",[14,53887,53888],{},[1941,53889],{"alt":31,"src":53890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,53892,53893],{},"里边的选择器必须必须加引号！！！",[14,53895,53896],{},"只选择第一个元素",[26,53898,53900],{"className":53499,"code":53899,"language":53501,"meta":31,"style":31},"\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",[33,53901,53902,53910,53931,53950,53958,53963,53968,53973,53981],{"__ignoreMap":31},[36,53903,53904,53906,53908],{"class":38,"line":39},[36,53905,179],{"class":98},[36,53907,52232],{"class":51733},[36,53909,188],{"class":98},[36,53911,53912,53914,53916,53919,53921,53924,53927,53929],{"class":38,"line":46},[36,53913,52576],{"class":98},[36,53915,52043],{"class":51733},[36,53917,53918],{"class":55}," class",[36,53920,176],{"class":98},[36,53922,53923],{"class":59},"\"box\"",[36,53925,53926],{"class":98},">123\u003C\u002F",[36,53928,52043],{"class":51733},[36,53930,188],{"class":98},[36,53932,53933,53935,53937,53939,53941,53943,53946,53948],{"class":38,"line":52},[36,53934,52576],{"class":98},[36,53936,52043],{"class":51733},[36,53938,53918],{"class":55},[36,53940,176],{"class":98},[36,53942,53923],{"class":59},[36,53944,53945],{"class":98},">456\u003C\u002F",[36,53947,52043],{"class":51733},[36,53949,188],{"class":98},[36,53951,53952,53954,53956],{"class":38,"line":66},[36,53953,52576],{"class":98},[36,53955,52245],{"class":51733},[36,53957,188],{"class":98},[36,53959,53960],{"class":38,"line":72},[36,53961,53962],{"class":98},"    \u002F\u002F 1.获取匹配的第一个元素\n",[36,53964,53965],{"class":38,"line":82},[36,53966,53967],{"class":98},"    const box = document.querySelector('div')\n",[36,53969,53970],{"class":38,"line":88},[36,53971,53972],{"class":98},"    console.dir(box)\n",[36,53974,53975,53977,53979],{"class":38,"line":113},[36,53976,52849],{"class":98},[36,53978,52245],{"class":51733},[36,53980,188],{"class":98},[36,53982,53983,53985,53987],{"class":38,"line":119},[36,53984,52217],{"class":98},[36,53986,52232],{"class":51733},[36,53988,188],{"class":98},[14,53990,53991],{},"只选123，不选456",[14,53993,53994],{},[1941,53995],{"alt":31,"src":53996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,53998,53999],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,54001,54002],{},[1941,54003],{"alt":31,"src":54004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,54006,54007],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,54009,54010],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[571,54012,54013],{"start":46},[574,54014,54015],{},"其他方法来获取标签元素",[14,54017,54018],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,54020,54021],{},[1941,54022],{"alt":31,"src":54023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[588,54025,54027],{"id":54026},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,54029,54030],{},"设置修改DOM元素内容有两种方式：",[1618,54032,54033,54036,54039,54042],{},[574,54034,54035],{},"元素.innerText=''",[574,54037,54038],{},"元素.innerHTML=''",[574,54040,54041],{},"不写字符串输出数字也是可以的",[574,54043,54044],{},"元素.innerHtml=1",[22437,54046,54048],{"id":54047},"_3131-innertext","3.1.3.1 innerText",[14,54050,54051],{},[1941,54052],{"alt":31,"src":54053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,54055,54056],{},"思路：实现了修改盒子中的内容！",[14,54058,54059],{},"它只显示纯文本，不解析标签",[22437,54061,54063],{"id":54062},"_3132-innerhtml","3.1.3.2 innerHTML",[14,54065,54066],{},[1941,54067],{"alt":31,"src":54068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,54070,54071],{},"相比于innerText，他的强大之处在于可以解析标签",[588,54073,54075],{"id":54074},"_314-操作元素属性","3.1.4 操作元素属性",[22437,54077,54079],{"id":54078},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,54081,54082],{},[1941,54083],{"alt":31,"src":54084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22437,54086,54088],{"id":54087},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,54090,54091],{},[1941,54092],{"alt":31,"src":54093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,54095,54096],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,54098,54099],{},"div.style.backgroundColor = 'hotpink'",[14,54101,54102],{},"如果按照css的写法，-表示减，就会出错",[14,54104,54105],{},"body元素不需要再获取，直接用就行！！！！！！",[14,54107,54108],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,54110,54111],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,54113,54114],{},[1941,54115],{"alt":31,"src":54116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,54118,54119],{},[1941,54120],{"alt":31,"src":54121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[571,54123,54124,54127,54130,54133,54136,54139],{},[574,54125,54126],{},"className这个方式就是修改很多样式的时候来使用的！",[574,54128,54129],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[574,54131,54132],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[574,54134,54135],{},"className为属性名，如果还用class的话就导致与关键字冲突",[574,54137,54138],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[574,54140,54141,54142,54147],{},"解析标签的时候就变为了",[52043,54143],{"className":54144},[54145,54146],"nav","box",[54148,54149],"br",{},[14,54151,54152],{},"例子：",[52043,54154],{"className":54155},[54145],[52245,54157,54158],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,54160,54161],{},[1941,54162],{"alt":31,"src":54163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,54165,54166],{},"追加和删除类名用classList",[14,54168,54169],{},"常用于类似于开关的操作",[14,54171,54172],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,54174,54175],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22437,54177,54179],{"id":54178},"_3143-牢记点","3.1.4.3 牢记点",[571,54181,54182,54185,54188,54191,54194,54197,54200,54203,54206],{},[574,54183,54184],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[574,54186,54187],{},"使用style属性操作css时不要忘记引号",[574,54189,54190],{},"使用className或者classList时也不要忘记引号",[574,54192,54193],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[574,54195,54196],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[574,54198,54199],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[574,54201,54202],{},"若： let arr=['1','2',3] arr[0]=1",[574,54204,54205],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[574,54207,54208],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[588,54210,54212],{"id":54211},"_315-操作表单元素","3.1.5 操作表单元素",[571,54214,54215],{},[574,54216,54217],{},"天生的属性",[14,54219,54220],{},[1941,54221],{"alt":31,"src":54222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,54224,54225],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,54227,54228],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,54230,54231],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,54233,54234],{},[1941,54235],{"alt":31,"src":54236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[26,54238,54240],{"className":51066,"code":54239,"language":51068,"meta":31,"style":31},"在复选框中如果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",[33,54241,54242,54247,54279,54284,54289,54294,54299,54303,54308,54313,54330,54342,54347],{"__ignoreMap":31},[36,54243,54244],{"class":38,"line":39},[36,54245,54246],{"class":98},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[36,54248,54249,54251,54254,54257,54259,54262,54264,54266,54268,54270,54272,54274,54277],{"class":38,"line":46},[36,54250,179],{"class":98},[36,54252,54253],{"class":51733},"input",[36,54255,54256],{"class":55}," type",[36,54258,176],{"class":98},[36,54260,54261],{"class":59},"\"checkbox\"",[36,54263,15359],{"class":55},[36,54265,176],{"class":98},[36,54267,8103],{"class":59},[36,54269,15398],{"class":55},[36,54271,176],{"class":98},[36,54273,8103],{"class":59},[36,54275,54276],{"class":55}," checked",[36,54278,188],{"class":98},[36,54280,54281],{"class":38,"line":52},[36,54282,54283],{"class":98},"不选的话：\n",[36,54285,54286],{"class":38,"line":66},[36,54287,54288],{"class":98},"const input = document.querySelector('input')\n",[36,54290,54291],{"class":38,"line":72},[36,54292,54293],{"class":98},"input.checked=false\n",[36,54295,54296],{"class":38,"line":82},[36,54297,54298],{"class":98},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[36,54300,54301],{"class":38,"line":88},[36,54302,247],{"emptyLinePlaceholder":246},[36,54304,54305],{"class":38,"line":113},[36,54306,54307],{"class":98},"禁用按钮：\n",[36,54309,54310],{"class":38,"line":119},[36,54311,54312],{"class":98},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[36,54314,54315,54317,54320,54323,54326,54328],{"class":38,"line":131},[36,54316,179],{"class":98},[36,54318,54319],{"class":51733},"button",[36,54321,54322],{"class":55}," disabled",[36,54324,54325],{"class":98},">点击\u003C\u002F",[36,54327,54319],{"class":51733},[36,54329,188],{"class":98},[36,54331,54332,54334,54336,54338,54340],{"class":38,"line":137},[36,54333,179],{"class":98},[36,54335,54319],{"class":51733},[36,54337,54325],{"class":98},[36,54339,54319],{"class":51733},[36,54341,188],{"class":98},[36,54343,54344],{"class":38,"line":147},[36,54345,54346],{"class":98},"const bt = document.querySelector('button')\n",[36,54348,54349],{"class":38,"line":153},[36,54350,54351],{"class":98},"bt.disabled = false\n",[571,54353,54354],{"start":46},[574,54355,54356],{},"自定义属性",[14,54358,54359],{},[1941,54360],{"alt":31,"src":54361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[26,54363,54365],{"className":53499,"code":54364,"language":53501,"meta":31,"style":31},"\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",[33,54366,54367,54375,54403,54422,54441,54460,54479,54487,54492,54497,54502,54507,54515],{"__ignoreMap":31},[36,54368,54369,54371,54373],{"class":38,"line":39},[36,54370,179],{"class":98},[36,54372,52232],{"class":51733},[36,54374,188],{"class":98},[36,54376,54377,54379,54381,54384,54386,54388,54391,54393,54396,54399,54401],{"class":38,"line":46},[36,54378,52576],{"class":98},[36,54380,52043],{"class":51733},[36,54382,54383],{"class":55}," data-id",[36,54385,176],{"class":98},[36,54387,4129],{"class":59},[36,54389,54390],{"class":55}," data-spm",[36,54392,176],{"class":98},[36,54394,54395],{"class":59},"\"我不知道\"",[36,54397,54398],{"class":98},">1\u003C\u002F",[36,54400,52043],{"class":51733},[36,54402,188],{"class":98},[36,54404,54405,54407,54409,54411,54413,54415,54418,54420],{"class":38,"line":52},[36,54406,52576],{"class":98},[36,54408,52043],{"class":51733},[36,54410,54383],{"class":55},[36,54412,176],{"class":98},[36,54414,4152],{"class":59},[36,54416,54417],{"class":98},">2\u003C\u002F",[36,54419,52043],{"class":51733},[36,54421,188],{"class":98},[36,54423,54424,54426,54428,54430,54432,54434,54437,54439],{"class":38,"line":66},[36,54425,52576],{"class":98},[36,54427,52043],{"class":51733},[36,54429,54383],{"class":55},[36,54431,176],{"class":98},[36,54433,4165],{"class":59},[36,54435,54436],{"class":98},">3\u003C\u002F",[36,54438,52043],{"class":51733},[36,54440,188],{"class":98},[36,54442,54443,54445,54447,54449,54451,54453,54456,54458],{"class":38,"line":72},[36,54444,52576],{"class":98},[36,54446,52043],{"class":51733},[36,54448,54383],{"class":55},[36,54450,176],{"class":98},[36,54452,4178],{"class":59},[36,54454,54455],{"class":98},">4\u003C\u002F",[36,54457,52043],{"class":51733},[36,54459,188],{"class":98},[36,54461,54462,54464,54466,54468,54470,54472,54475,54477],{"class":38,"line":82},[36,54463,52576],{"class":98},[36,54465,52043],{"class":51733},[36,54467,54383],{"class":55},[36,54469,176],{"class":98},[36,54471,4199],{"class":59},[36,54473,54474],{"class":98},">5\u003C\u002F",[36,54476,52043],{"class":51733},[36,54478,188],{"class":98},[36,54480,54481,54483,54485],{"class":38,"line":88},[36,54482,52576],{"class":98},[36,54484,52245],{"class":51733},[36,54486,188],{"class":98},[36,54488,54489],{"class":38,"line":113},[36,54490,54491],{"class":98},"    const one = document.querySelector('div')\n",[36,54493,54494],{"class":38,"line":119},[36,54495,54496],{"class":98},"    console.log(one.dataset)\n",[36,54498,54499],{"class":38,"line":131},[36,54500,54501],{"class":98},"    console.log(one.dataset.id)\n",[36,54503,54504],{"class":38,"line":137},[36,54505,54506],{"class":98},"    console.log(one.dataset.spm)\n",[36,54508,54509,54511,54513],{"class":38,"line":147},[36,54510,52849],{"class":98},[36,54512,52245],{"class":51733},[36,54514,188],{"class":98},[36,54516,54517,54519,54521],{"class":38,"line":153},[36,54518,52217],{"class":98},[36,54520,52232],{"class":51733},[36,54522,188],{"class":98},[14,54524,54525],{},[1941,54526],{"alt":31,"src":54527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,54529,54530],{},"document.querySelector选择的是第一个对象（元素）",[588,54532,54534],{"id":54533},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,54536,54537],{},[1941,54538],{"alt":31,"src":54539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,54541,54542],{},[1941,54543],{"alt":31,"src":54544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,54546,54547],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52245,54549,54550],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,54552,54553],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52245,54555,54556],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   let n1 = setInterval(fn, 1000)\n\n   console.log(n1)\n\n",[14,54558,54559],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,54561,54562],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,54564,54565],{},"单位为毫秒！！！",[14,54567,54568],{},"可以搭配匿名函数来用！！！",[14,54570,54571],{},"setInterval(function () {",[14,54573,54574],{},"alert('两秒执行一次')",[14,54576,54577],{},"}, 2000)",[14,54579,54580],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,54582,54583],{},"function fn() {",[14,54585,54586],{},"document.write(1)",[14,54588,1558],{},[14,54590,54591],{},"setInterval(fn, 1000)",[14,54593,54594],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,54596,54597],{},"setInterval('fn()', 1000)",[14,54599,54600],{},[1941,54601],{"alt":31,"src":54602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22437,54604,54606],{"id":54605},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[26,54608,54610],{"className":51066,"code":54609,"language":51068,"meta":31,"style":31},"\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",[33,54611,54612,54622,54636,54640,54648,54662,54682,54694,54702,54706,54714,54751,54756,54761,54766,54774,54782,54804,54812,54817,54839,54844,54849,54860,54865,54885,54893,54908,54923,54934,54939,54949,54959,54963,54972,54976,54984,54992,54996],{"__ignoreMap":31},[36,54613,54614,54616,54618,54620],{"class":38,"line":39},[36,54615,51730],{"class":98},[36,54617,51734],{"class":51733},[36,54619,51737],{"class":55},[36,54621,188],{"class":98},[36,54623,54624,54626,54628,54630,54632,54634],{"class":38,"line":46},[36,54625,179],{"class":98},[36,54627,51068],{"class":51733},[36,54629,51748],{"class":55},[36,54631,176],{"class":98},[36,54633,51753],{"class":59},[36,54635,188],{"class":98},[36,54637,54638],{"class":38,"line":52},[36,54639,247],{"emptyLinePlaceholder":246},[36,54641,54642,54644,54646],{"class":38,"line":66},[36,54643,179],{"class":98},[36,54645,51766],{"class":51733},[36,54647,188],{"class":98},[36,54649,54650,54652,54654,54656,54658,54660],{"class":38,"line":72},[36,54651,52576],{"class":98},[36,54653,51776],{"class":51733},[36,54655,51779],{"class":55},[36,54657,176],{"class":98},[36,54659,51784],{"class":59},[36,54661,188],{"class":98},[36,54663,54664,54666,54668,54670,54672,54674,54676,54678,54680],{"class":38,"line":82},[36,54665,52576],{"class":98},[36,54667,51776],{"class":51733},[36,54669,15359],{"class":55},[36,54671,176],{"class":98},[36,54673,51823],{"class":59},[36,54675,51803],{"class":55},[36,54677,176],{"class":98},[36,54679,51830],{"class":59},[36,54681,188],{"class":98},[36,54683,54684,54686,54688,54690,54692],{"class":38,"line":88},[36,54685,52576],{"class":98},[36,54687,51839],{"class":51733},[36,54689,51842],{"class":98},[36,54691,51839],{"class":51733},[36,54693,188],{"class":98},[36,54695,54696,54698,54700],{"class":38,"line":113},[36,54697,52217],{"class":98},[36,54699,51766],{"class":51733},[36,54701,188],{"class":98},[36,54703,54704],{"class":38,"line":119},[36,54705,247],{"emptyLinePlaceholder":246},[36,54707,54708,54710,54712],{"class":38,"line":131},[36,54709,179],{"class":98},[36,54711,52232],{"class":51733},[36,54713,188],{"class":98},[36,54715,54716,54718,54721,54723,54725,54727,54729,54731,54733,54736,54738,54741,54744,54746,54749],{"class":38,"line":137},[36,54717,52576],{"class":98},[36,54719,54720],{"class":51733},"textarea",[36,54722,15359],{"class":55},[36,54724,176],{"class":98},[36,54726,8103],{"class":59},[36,54728,15398],{"class":55},[36,54730,176],{"class":98},[36,54732,8103],{"class":59},[36,54734,54735],{"class":55}," cols",[36,54737,176],{"class":98},[36,54739,54740],{"class":59},"\"30\"",[36,54742,54743],{"class":55}," rows",[36,54745,176],{"class":98},[36,54747,54748],{"class":59},"\"10\"",[36,54750,188],{"class":98},[36,54752,54753],{"class":38,"line":147},[36,54754,54755],{"class":98},"        用户注册协议\n",[36,54757,54758],{"class":38,"line":153},[36,54759,54760],{"class":98},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[36,54762,54763],{"class":38,"line":191},[36,54764,54765],{"class":98},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[36,54767,54768,54770,54772],{"class":38,"line":197},[36,54769,52208],{"class":98},[36,54771,54720],{"class":51733},[36,54773,188],{"class":98},[36,54775,54776,54778,54780],{"class":38,"line":217},[36,54777,52576],{"class":98},[36,54779,54148],{"class":51733},[36,54781,188],{"class":98},[36,54783,54784,54786,54788,54790,54792,54795,54797,54800,54802],{"class":38,"line":223},[36,54785,52576],{"class":98},[36,54787,54319],{"class":51733},[36,54789,53918],{"class":55},[36,54791,176],{"class":98},[36,54793,54794],{"class":59},"\"btn\"",[36,54796,54322],{"class":55},[36,54798,54799],{"class":98},">我已经阅读用户协议(5)\u003C\u002F",[36,54801,54319],{"class":51733},[36,54803,188],{"class":98},[36,54805,54806,54808,54810],{"class":38,"line":243},[36,54807,52576],{"class":98},[36,54809,52245],{"class":51733},[36,54811,188],{"class":98},[36,54813,54814],{"class":38,"line":250},[36,54815,54816],{"class":42},"    \u002F\u002F 1. 获取元素\n",[36,54818,54819,54821,54824,54826,54829,54832,54834,54837],{"class":38,"line":256},[36,54820,11660],{"class":163},[36,54822,54823],{"class":109}," btn",[36,54825,14003],{"class":163},[36,54827,54828],{"class":98}," document.",[36,54830,54831],{"class":55},"querySelector",[36,54833,621],{"class":98},[36,54835,54836],{"class":59},"'.btn'",[36,54838,627],{"class":98},[36,54840,54841],{"class":38,"line":273},[36,54842,54843],{"class":42},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[36,54845,54846],{"class":38,"line":278},[36,54847,54848],{"class":42},"    \u002F\u002F 2. 倒计时\n",[36,54850,54851,54853,54855,54857],{"class":38,"line":284},[36,54852,52651],{"class":163},[36,54854,9879],{"class":98},[36,54856,176],{"class":163},[36,54858,54859],{"class":109}," 5\n",[36,54861,54862],{"class":38,"line":315},[36,54863,54864],{"class":42},"    \u002F\u002F 2.1 开启定时器\n",[36,54866,54867,54869,54872,54874,54877,54879,54882],{"class":38,"line":320},[36,54868,52651],{"class":163},[36,54870,54871],{"class":98}," n ",[36,54873,176],{"class":163},[36,54875,54876],{"class":55}," setInterval",[36,54878,621],{"class":98},[36,54880,54881],{"class":163},"function",[36,54883,54884],{"class":98}," () {\n",[36,54886,54887,54890],{"class":38,"line":326},[36,54888,54889],{"class":98},"      i",[36,54891,54892],{"class":163},"--\n",[36,54894,54895,54898,54900,54903,54905],{"class":38,"line":343},[36,54896,54897],{"class":98},"      btn.innerHTML ",[36,54899,176],{"class":163},[36,54901,54902],{"class":59}," `我已经阅读用户协议(${",[36,54904,1055],{"class":98},[36,54906,54907],{"class":59},"})`\n",[36,54909,54910,54913,54916,54919,54921],{"class":38,"line":348},[36,54911,54912],{"class":163},"      if",[36,54914,54915],{"class":98}," (i ",[36,54917,54918],{"class":163},"===",[36,54920,4544],{"class":109},[36,54922,12881],{"class":98},[36,54924,54925,54928,54931],{"class":38,"line":354},[36,54926,54927],{"class":55},"        clearInterval",[36,54929,54930],{"class":98},"(n)  ",[36,54932,54933],{"class":42},"\u002F\u002F 关闭定时器\n",[36,54935,54936],{"class":38,"line":370},[36,54937,54938],{"class":42},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[36,54940,54941,54944,54946],{"class":38,"line":375},[36,54942,54943],{"class":98},"        btn.disabled ",[36,54945,176],{"class":163},[36,54947,54948],{"class":109}," false\n",[36,54950,54951,54954,54956],{"class":38,"line":381},[36,54952,54953],{"class":98},"        btn.innerHTML ",[36,54955,176],{"class":163},[36,54957,54958],{"class":59}," '同意'\n",[36,54960,54961],{"class":38,"line":399},[36,54962,52830],{"class":98},[36,54964,54965,54968,54970],{"class":38,"line":404},[36,54966,54967],{"class":98},"    }, ",[36,54969,6861],{"class":109},[36,54971,627],{"class":98},[36,54973,54974],{"class":38,"line":410},[36,54975,247],{"emptyLinePlaceholder":246},[36,54977,54978,54980,54982],{"class":38,"line":423},[36,54979,52849],{"class":98},[36,54981,52245],{"class":51733},[36,54983,188],{"class":98},[36,54985,54986,54988,54990],{"class":38,"line":436},[36,54987,52217],{"class":98},[36,54989,52232],{"class":51733},[36,54991,188],{"class":98},[36,54993,54994],{"class":38,"line":441},[36,54995,247],{"emptyLinePlaceholder":246},[36,54997,54998,55000,55002],{"class":38,"line":447},[36,54999,52217],{"class":98},[36,55001,51068],{"class":51733},[36,55003,188],{"class":98},[14,55005,55006],{},"不要一直想着用死循环,避免死循环",[14,55008,55009,55012],{},[33,55010,55011],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22437,55014,55016],{"id":55015},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[571,55018,55019],{},[574,55020,55021],{},"法1",[26,55023,55025],{"className":51066,"code":55024,"language":51068,"meta":31,"style":31},"\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",[33,55026,55027,55037,55051,55055,55063,55077,55097,55109,55117,55123,55134,55145,55149,55153,55160,55172,55176,55180,55187,55199,55213,55226,55240,55244,55248,55255,55266,55277,55288,55300,55312,55324,55328,55332,55340,55350,55363,55375,55388,55392,55396,55403,55413,55425,55437,55448,55459,55469,55481,55493,55497,55501,55510,55522,55534,55562,55575,55579,55583,55590,55601,55605,55613,55621,55625,55633,55647,55662,55686,55694,55709,55722,55730,55751,55763,55775,55787,55799,55811,55823,55835,55844,55852,55860,55868,55880,55903,55922,55941,55960,55979,55998,56017,56037,56041,56061,56080,56100,56121,56132,56149,56159,56169,56179,56184,56189,56194,56199,56224,56237,56241,56264,56268,56276,56284,56292,56296],{"__ignoreMap":31},[36,55028,55029,55031,55033,55035],{"class":38,"line":39},[36,55030,51730],{"class":98},[36,55032,51734],{"class":51733},[36,55034,51737],{"class":55},[36,55036,188],{"class":98},[36,55038,55039,55041,55043,55045,55047,55049],{"class":38,"line":46},[36,55040,179],{"class":98},[36,55042,51068],{"class":51733},[36,55044,51748],{"class":55},[36,55046,176],{"class":98},[36,55048,51753],{"class":59},[36,55050,188],{"class":98},[36,55052,55053],{"class":38,"line":52},[36,55054,247],{"emptyLinePlaceholder":246},[36,55056,55057,55059,55061],{"class":38,"line":66},[36,55058,179],{"class":98},[36,55060,51766],{"class":51733},[36,55062,188],{"class":98},[36,55064,55065,55067,55069,55071,55073,55075],{"class":38,"line":72},[36,55066,52576],{"class":98},[36,55068,51776],{"class":51733},[36,55070,51779],{"class":55},[36,55072,176],{"class":98},[36,55074,51784],{"class":59},[36,55076,188],{"class":98},[36,55078,55079,55081,55083,55085,55087,55089,55091,55093,55095],{"class":38,"line":82},[36,55080,52576],{"class":98},[36,55082,51776],{"class":51733},[36,55084,15359],{"class":55},[36,55086,176],{"class":98},[36,55088,51823],{"class":59},[36,55090,51803],{"class":55},[36,55092,176],{"class":98},[36,55094,51830],{"class":59},[36,55096,188],{"class":98},[36,55098,55099,55101,55103,55105,55107],{"class":38,"line":88},[36,55100,52576],{"class":98},[36,55102,51839],{"class":51733},[36,55104,51842],{"class":98},[36,55106,51839],{"class":51733},[36,55108,188],{"class":98},[36,55110,55111,55113,55115],{"class":38,"line":113},[36,55112,52576],{"class":98},[36,55114,537],{"class":51733},[36,55116,188],{"class":98},[36,55118,55119,55121],{"class":38,"line":119},[36,55120,6854],{"class":51733},[36,55122,16011],{"class":98},[36,55124,55125,55128,55130,55132],{"class":38,"line":131},[36,55126,55127],{"class":109},"      padding",[36,55129,51869],{"class":98},[36,55131,807],{"class":109},[36,55133,1772],{"class":98},[36,55135,55136,55139,55141,55143],{"class":38,"line":137},[36,55137,55138],{"class":109},"      margin",[36,55140,51869],{"class":98},[36,55142,807],{"class":109},[36,55144,1772],{"class":98},[36,55146,55147],{"class":38,"line":147},[36,55148,2646],{"class":98},[36,55150,55151],{"class":38,"line":153},[36,55152,247],{"emptyLinePlaceholder":246},[36,55154,55155,55158],{"class":38,"line":191},[36,55156,55157],{"class":51733},"    li",[36,55159,16011],{"class":98},[36,55161,55162,55165,55167,55170],{"class":38,"line":197},[36,55163,55164],{"class":109},"      list-style",[36,55166,51869],{"class":98},[36,55168,55169],{"class":109},"none",[36,55171,1772],{"class":98},[36,55173,55174],{"class":38,"line":217},[36,55175,2646],{"class":98},[36,55177,55178],{"class":38,"line":223},[36,55179,247],{"emptyLinePlaceholder":246},[36,55181,55182,55185],{"class":38,"line":243},[36,55183,55184],{"class":55},"    .box",[36,55186,16011],{"class":98},[36,55188,55189,55192,55194,55197],{"class":38,"line":250},[36,55190,55191],{"class":109},"      position",[36,55193,51869],{"class":98},[36,55195,55196],{"class":109},"relative",[36,55198,1772],{"class":98},[36,55200,55201,55204,55206,55209,55211],{"class":38,"line":256},[36,55202,55203],{"class":109},"      width",[36,55205,51869],{"class":98},[36,55207,55208],{"class":109},"976",[36,55210,51924],{"class":163},[36,55212,1772],{"class":98},[36,55214,55215,55218,55220,55222,55224],{"class":38,"line":273},[36,55216,55217],{"class":109},"      height",[36,55219,51869],{"class":98},[36,55221,2018],{"class":109},[36,55223,51924],{"class":163},[36,55225,1772],{"class":98},[36,55227,55228,55230,55232,55234,55236,55238],{"class":38,"line":278},[36,55229,55138],{"class":109},[36,55231,51869],{"class":98},[36,55233,926],{"class":109},[36,55235,51924],{"class":163},[36,55237,51988],{"class":109},[36,55239,1772],{"class":98},[36,55241,55242],{"class":38,"line":284},[36,55243,2646],{"class":98},[36,55245,55246],{"class":38,"line":315},[36,55247,247],{"emptyLinePlaceholder":246},[36,55249,55250,55253],{"class":38,"line":320},[36,55251,55252],{"class":55},"    .slider-footer",[36,55254,16011],{"class":98},[36,55256,55257,55259,55261,55264],{"class":38,"line":326},[36,55258,55191],{"class":109},[36,55260,51869],{"class":98},[36,55262,55263],{"class":109},"absolute",[36,55265,1772],{"class":98},[36,55267,55268,55271,55273,55275],{"class":38,"line":343},[36,55269,55270],{"class":109},"      left",[36,55272,51869],{"class":98},[36,55274,807],{"class":109},[36,55276,1772],{"class":98},[36,55278,55279,55282,55284,55286],{"class":38,"line":348},[36,55280,55281],{"class":109},"      bottom",[36,55283,51869],{"class":98},[36,55285,807],{"class":109},[36,55287,1772],{"class":98},[36,55289,55290,55292,55294,55296,55298],{"class":38,"line":354},[36,55291,55203],{"class":109},[36,55293,51869],{"class":98},[36,55295,926],{"class":109},[36,55297,942],{"class":163},[36,55299,1772],{"class":98},[36,55301,55302,55304,55306,55308,55310],{"class":38,"line":370},[36,55303,55217],{"class":109},[36,55305,51869],{"class":98},[36,55307,1189],{"class":109},[36,55309,942],{"class":163},[36,55311,1772],{"class":98},[36,55313,55314,55317,55319,55322],{"class":38,"line":375},[36,55315,55316],{"class":109},"      background-color",[36,55318,51869],{"class":98},[36,55320,55321],{"class":109},"skyblue",[36,55323,1772],{"class":98},[36,55325,55326],{"class":38,"line":381},[36,55327,2646],{"class":98},[36,55329,55330],{"class":38,"line":399},[36,55331,247],{"emptyLinePlaceholder":246},[36,55333,55334,55336,55338],{"class":38,"line":404},[36,55335,55252],{"class":55},[36,55337,7276],{"class":51733},[36,55339,16011],{"class":98},[36,55341,55342,55344,55346,55348],{"class":38,"line":410},[36,55343,55191],{"class":109},[36,55345,51869],{"class":98},[36,55347,55263],{"class":109},[36,55349,1772],{"class":98},[36,55351,55352,55355,55357,55359,55361],{"class":38,"line":423},[36,55353,55354],{"class":109},"      font-size",[36,55356,51869],{"class":98},[36,55358,1514],{"class":109},[36,55360,51924],{"class":163},[36,55362,1772],{"class":98},[36,55364,55365,55367,55369,55371,55373],{"class":38,"line":436},[36,55366,55270],{"class":109},[36,55368,51869],{"class":98},[36,55370,1313],{"class":109},[36,55372,51924],{"class":163},[36,55374,1772],{"class":98},[36,55376,55377,55380,55382,55384,55386],{"class":38,"line":441},[36,55378,55379],{"class":109},"      top",[36,55381,51869],{"class":98},[36,55383,933],{"class":109},[36,55385,51924],{"class":163},[36,55387,1772],{"class":98},[36,55389,55390],{"class":38,"line":447},[36,55391,2646],{"class":98},[36,55393,55394],{"class":38,"line":465},[36,55395,247],{"emptyLinePlaceholder":246},[36,55397,55398,55401],{"class":38,"line":470},[36,55399,55400],{"class":51733},"    ul",[36,55402,16011],{"class":98},[36,55404,55405,55407,55409,55411],{"class":38,"line":476},[36,55406,55191],{"class":109},[36,55408,51869],{"class":98},[36,55410,55263],{"class":109},[36,55412,1772],{"class":98},[36,55414,55415,55417,55419,55421,55423],{"class":38,"line":496},[36,55416,55379],{"class":109},[36,55418,51869],{"class":98},[36,55420,1394],{"class":109},[36,55422,51924],{"class":163},[36,55424,1772],{"class":98},[36,55426,55427,55429,55431,55433,55435],{"class":38,"line":501},[36,55428,55270],{"class":109},[36,55430,51869],{"class":98},[36,55432,1313],{"class":109},[36,55434,51924],{"class":163},[36,55436,1772],{"class":98},[36,55438,55439,55442,55444,55446],{"class":38,"line":507},[36,55440,55441],{"class":109},"      display",[36,55443,51869],{"class":98},[36,55445,51909],{"class":109},[36,55447,1772],{"class":98},[36,55449,55450,55453,55455,55457],{"class":38,"line":517},[36,55451,55452],{"class":109},"      justify-content",[36,55454,51869],{"class":98},[36,55456,52100],{"class":109},[36,55458,1772],{"class":98},[36,55460,55461,55463,55465,55467],{"class":38,"line":522},[36,55462,55191],{"class":109},[36,55464,51869],{"class":98},[36,55466,55263],{"class":109},[36,55468,1772],{"class":98},[36,55470,55471,55473,55475,55477,55479],{"class":38,"line":528},[36,55472,55203],{"class":109},[36,55474,51869],{"class":98},[36,55476,4443],{"class":109},[36,55478,51924],{"class":163},[36,55480,1772],{"class":98},[36,55482,55483,55485,55487,55489,55491],{"class":38,"line":10203},[36,55484,55217],{"class":109},[36,55486,51869],{"class":98},[36,55488,1313],{"class":109},[36,55490,51924],{"class":163},[36,55492,1772],{"class":98},[36,55494,55495],{"class":38,"line":10227},[36,55496,2646],{"class":98},[36,55498,55499],{"class":38,"line":10232},[36,55500,247],{"emptyLinePlaceholder":246},[36,55502,55503,55505,55508],{"class":38,"line":10237},[36,55504,55400],{"class":51733},[36,55506,55507],{"class":51733}," li",[36,55509,16011],{"class":98},[36,55511,55512,55514,55516,55518,55520],{"class":38,"line":10242},[36,55513,55203],{"class":109},[36,55515,51869],{"class":98},[36,55517,1313],{"class":109},[36,55519,51924],{"class":163},[36,55521,1772],{"class":98},[36,55523,55524,55526,55528,55530,55532],{"class":38,"line":10251},[36,55525,55217],{"class":109},[36,55527,51869],{"class":98},[36,55529,1313],{"class":109},[36,55531,51924],{"class":163},[36,55533,1772],{"class":98},[36,55535,55536,55538,55540,55543,55545,55547,55549,55551,55553,55555,55557,55560],{"class":38,"line":10256},[36,55537,55316],{"class":109},[36,55539,51869],{"class":98},[36,55541,55542],{"class":109},"rgba",[36,55544,621],{"class":98},[36,55546,807],{"class":109},[36,55548,12874],{"class":98},[36,55550,807],{"class":109},[36,55552,12874],{"class":98},[36,55554,807],{"class":109},[36,55556,12874],{"class":98},[36,55558,55559],{"class":109},".4",[36,55561,3170],{"class":98},[36,55563,55564,55567,55569,55571,55573],{"class":38,"line":10262},[36,55565,55566],{"class":109},"      border-radius",[36,55568,51869],{"class":98},[36,55570,1060],{"class":109},[36,55572,51924],{"class":163},[36,55574,1772],{"class":98},[36,55576,55577],{"class":38,"line":10283},[36,55578,2646],{"class":98},[36,55580,55581],{"class":38,"line":10289},[36,55582,247],{"emptyLinePlaceholder":246},[36,55584,55585,55588],{"class":38,"line":10303},[36,55586,55587],{"class":55},"    .activate",[36,55589,16011],{"class":98},[36,55591,55592,55594,55596,55599],{"class":38,"line":10309},[36,55593,55316],{"class":109},[36,55595,51869],{"class":98},[36,55597,55598],{"class":109},"#f7f7f7",[36,55600,1772],{"class":98},[36,55602,55603],{"class":38,"line":10336},[36,55604,2646],{"class":98},[36,55606,55607,55609,55611],{"class":38,"line":10345},[36,55608,52849],{"class":98},[36,55610,537],{"class":51733},[36,55612,188],{"class":98},[36,55614,55615,55617,55619],{"class":38,"line":10351},[36,55616,52217],{"class":98},[36,55618,51766],{"class":51733},[36,55620,188],{"class":98},[36,55622,55623],{"class":38,"line":10359},[36,55624,247],{"emptyLinePlaceholder":246},[36,55626,55627,55629,55631],{"class":38,"line":10364},[36,55628,179],{"class":98},[36,55630,52232],{"class":51733},[36,55632,188],{"class":98},[36,55634,55635,55637,55639,55641,55643,55645],{"class":38,"line":17043},[36,55636,52576],{"class":98},[36,55638,52043],{"class":51733},[36,55640,53918],{"class":55},[36,55642,176],{"class":98},[36,55644,53923],{"class":59},[36,55646,188],{"class":98},[36,55648,55649,55651,55653,55655,55657,55660],{"class":38,"line":17049},[36,55650,51773],{"class":98},[36,55652,52043],{"class":51733},[36,55654,53918],{"class":55},[36,55656,176],{"class":98},[36,55658,55659],{"class":59},"\"slider-wrapper\"",[36,55661,188],{"class":98},[36,55663,55664,55667,55669,55672,55674,55677,55680,55682,55684],{"class":38,"line":17072},[36,55665,55666],{"class":98},"      \u003C",[36,55668,1941],{"class":51733},[36,55670,55671],{"class":55}," src",[36,55673,176],{"class":98},[36,55675,55676],{"class":59},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[36,55678,55679],{"class":55}," alt",[36,55681,176],{"class":98},[36,55683,8103],{"class":59},[36,55685,188],{"class":98},[36,55687,55688,55690,55692],{"class":38,"line":17078},[36,55689,52208],{"class":98},[36,55691,52043],{"class":51733},[36,55693,188],{"class":98},[36,55695,55696,55698,55700,55702,55704,55707],{"class":38,"line":17101},[36,55697,51773],{"class":98},[36,55699,52043],{"class":51733},[36,55701,53918],{"class":55},[36,55703,176],{"class":98},[36,55705,55706],{"class":59},"\"slider-footer\"",[36,55708,188],{"class":98},[36,55710,55711,55713,55715,55718,55720],{"class":38,"line":17115},[36,55712,55666],{"class":98},[36,55714,14],{"class":51733},[36,55716,55717],{"class":98},">对人类来说会不会太超前了?\u003C\u002F",[36,55719,14],{"class":51733},[36,55721,188],{"class":98},[36,55723,55724,55726,55728],{"class":38,"line":17135},[36,55725,55666],{"class":98},[36,55727,1618],{"class":51733},[36,55729,188],{"class":98},[36,55731,55732,55735,55737,55739,55741,55744,55747,55749],{"class":38,"line":17141},[36,55733,55734],{"class":98},"        \u003C",[36,55736,574],{"class":51733},[36,55738,53918],{"class":55},[36,55740,176],{"class":98},[36,55742,55743],{"class":59},"\"activate\"",[36,55745,55746],{"class":98},">\u003C\u002F",[36,55748,574],{"class":51733},[36,55750,188],{"class":98},[36,55752,55753,55755,55757,55759,55761],{"class":38,"line":17152},[36,55754,55734],{"class":98},[36,55756,574],{"class":51733},[36,55758,55746],{"class":98},[36,55760,574],{"class":51733},[36,55762,188],{"class":98},[36,55764,55765,55767,55769,55771,55773],{"class":38,"line":17175},[36,55766,55734],{"class":98},[36,55768,574],{"class":51733},[36,55770,55746],{"class":98},[36,55772,574],{"class":51733},[36,55774,188],{"class":98},[36,55776,55777,55779,55781,55783,55785],{"class":38,"line":17197},[36,55778,55734],{"class":98},[36,55780,574],{"class":51733},[36,55782,55746],{"class":98},[36,55784,574],{"class":51733},[36,55786,188],{"class":98},[36,55788,55789,55791,55793,55795,55797],{"class":38,"line":17202},[36,55790,55734],{"class":98},[36,55792,574],{"class":51733},[36,55794,55746],{"class":98},[36,55796,574],{"class":51733},[36,55798,188],{"class":98},[36,55800,55801,55803,55805,55807,55809],{"class":38,"line":17208},[36,55802,55734],{"class":98},[36,55804,574],{"class":51733},[36,55806,55746],{"class":98},[36,55808,574],{"class":51733},[36,55810,188],{"class":98},[36,55812,55813,55815,55817,55819,55821],{"class":38,"line":17222},[36,55814,55734],{"class":98},[36,55816,574],{"class":51733},[36,55818,55746],{"class":98},[36,55820,574],{"class":51733},[36,55822,188],{"class":98},[36,55824,55825,55827,55829,55831,55833],{"class":38,"line":17235},[36,55826,55734],{"class":98},[36,55828,574],{"class":51733},[36,55830,55746],{"class":98},[36,55832,574],{"class":51733},[36,55834,188],{"class":98},[36,55836,55837,55840,55842],{"class":38,"line":17240},[36,55838,55839],{"class":98},"      \u003C\u002F",[36,55841,1618],{"class":51733},[36,55843,188],{"class":98},[36,55845,55846,55848,55850],{"class":38,"line":17254},[36,55847,52208],{"class":98},[36,55849,52043],{"class":51733},[36,55851,188],{"class":98},[36,55853,55854,55856,55858],{"class":38,"line":17259},[36,55855,52849],{"class":98},[36,55857,52043],{"class":51733},[36,55859,188],{"class":98},[36,55861,55862,55864,55866],{"class":38,"line":17265},[36,55863,52576],{"class":98},[36,55865,52245],{"class":51733},[36,55867,188],{"class":98},[36,55869,55870,55872,55875,55877],{"class":38,"line":17270},[36,55871,11660],{"class":163},[36,55873,55874],{"class":109}," arrImage",[36,55876,14003],{"class":163},[36,55878,55879],{"class":98}," [\n",[36,55881,55882,55885,55888,55891,55894,55897,55900],{"class":38,"line":17284},[36,55883,55884],{"class":98},"      { url: ",[36,55886,55887],{"class":59},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[36,55889,55890],{"class":98},", title: ",[36,55892,55893],{"class":59},"'对人类来说会不会太超前了?'",[36,55895,55896],{"class":98},", color: ",[36,55898,55899],{"class":59},"'rgba(100,67,68)'",[36,55901,55902],{"class":98}," },\n",[36,55904,55905,55907,55910,55912,55915,55917,55920],{"class":38,"line":17289},[36,55906,55884],{"class":98},[36,55908,55909],{"class":59},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[36,55911,55890],{"class":98},[36,55913,55914],{"class":59},"'开启剑与雪的黑暗传说!'",[36,55916,55896],{"class":98},[36,55918,55919],{"class":59},"'rgba(43,35,26)'",[36,55921,55902],{"class":98},[36,55923,55924,55926,55929,55931,55934,55936,55939],{"class":38,"line":17294},[36,55925,55884],{"class":98},[36,55927,55928],{"class":59},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[36,55930,55890],{"class":98},[36,55932,55933],{"class":59},"'真正的jo厨出现了!'",[36,55935,55896],{"class":98},[36,55937,55938],{"class":59},"'rgba(36,31,33)'",[36,55940,55902],{"class":98},[36,55942,55943,55945,55948,55950,55953,55955,55958],{"class":38,"line":17308},[36,55944,55884],{"class":98},[36,55946,55947],{"class":59},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[36,55949,55890],{"class":98},[36,55951,55952],{"class":59},"'李玉刚:让世界通过b站看到东方大国文化'",[36,55954,55896],{"class":98},[36,55956,55957],{"class":59},"'rgba(139,98,66)'",[36,55959,55902],{"class":98},[36,55961,55962,55964,55967,55969,55972,55974,55977],{"class":38,"line":17320},[36,55963,55884],{"class":98},[36,55965,55966],{"class":59},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[36,55968,55890],{"class":98},[36,55970,55971],{"class":59},"'快来分享你的寒假日常吧'",[36,55973,55896],{"class":98},[36,55975,55976],{"class":59},"'rgba(67,90,92)'",[36,55978,55902],{"class":98},[36,55980,55981,55983,55986,55988,55991,55993,55996],{"class":38,"line":17325},[36,55982,55884],{"class":98},[36,55984,55985],{"class":59},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[36,55987,55890],{"class":98},[36,55989,55990],{"class":59},"'哔哩哔哩小年YEAR'",[36,55992,55896],{"class":98},[36,55994,55995],{"class":59},"'rgba(166,131,143)'",[36,55997,55902],{"class":98},[36,55999,56000,56002,56005,56007,56010,56012,56015],{"class":38,"line":17338},[36,56001,55884],{"class":98},[36,56003,56004],{"class":59},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[36,56006,55890],{"class":98},[36,56008,56009],{"class":59},"'一站式解决你的电脑配置问题'",[36,56011,55896],{"class":98},[36,56013,56014],{"class":59},"'rgba(53,29,25)'",[36,56016,55902],{"class":98},[36,56018,56019,56021,56024,56026,56029,56031,56034],{"class":38,"line":17343},[36,56020,55884],{"class":98},[36,56022,56023],{"class":59},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[36,56025,55890],{"class":98},[36,56027,56028],{"class":59},"'谁不想和小猫咪贴贴呢?'",[36,56030,55896],{"class":98},[36,56032,56033],{"class":59},"'rgba(99,72,114)'",[36,56035,56036],{"class":98}," }\n",[36,56038,56039],{"class":38,"line":17348},[36,56040,53541],{"class":98},[36,56042,56043,56045,56048,56050,56052,56054,56056,56059],{"class":38,"line":17353},[36,56044,11660],{"class":163},[36,56046,56047],{"class":109}," img",[36,56049,14003],{"class":163},[36,56051,54828],{"class":98},[36,56053,54831],{"class":55},[36,56055,621],{"class":98},[36,56057,56058],{"class":59},"'.slider-wrapper img'",[36,56060,627],{"class":98},[36,56062,56063,56065,56067,56069,56071,56073,56075,56078],{"class":38,"line":17366},[36,56064,11660],{"class":163},[36,56066,7276],{"class":109},[36,56068,14003],{"class":163},[36,56070,54828],{"class":98},[36,56072,54831],{"class":55},[36,56074,621],{"class":98},[36,56076,56077],{"class":59},"'.slider-footer p'",[36,56079,627],{"class":98},[36,56081,56082,56084,56087,56089,56091,56093,56095,56098],{"class":38,"line":17371},[36,56083,11660],{"class":163},[36,56085,56086],{"class":109}," color",[36,56088,14003],{"class":163},[36,56090,54828],{"class":98},[36,56092,54831],{"class":55},[36,56094,621],{"class":98},[36,56096,56097],{"class":59},"'.slider-footer'",[36,56099,627],{"class":98},[36,56101,56102,56104,56107,56109,56111,56114,56116,56119],{"class":38,"line":33066},[36,56103,11660],{"class":163},[36,56105,56106],{"class":109}," lis",[36,56108,14003],{"class":163},[36,56110,54828],{"class":98},[36,56112,56113],{"class":55},"querySelectorAll",[36,56115,621],{"class":98},[36,56117,56118],{"class":59},"'.slider-footer ul li'",[36,56120,627],{"class":98},[36,56122,56123,56125,56127,56129],{"class":38,"line":33072},[36,56124,52651],{"class":163},[36,56126,9879],{"class":98},[36,56128,176],{"class":163},[36,56130,56131],{"class":109}," 1\n",[36,56133,56134,56136,56139,56141,56143,56145,56147],{"class":38,"line":33078},[36,56135,52651],{"class":163},[36,56137,56138],{"class":98}," timer ",[36,56140,176],{"class":163},[36,56142,54876],{"class":55},[36,56144,621],{"class":98},[36,56146,54881],{"class":163},[36,56148,54884],{"class":98},[36,56150,56151,56154,56156],{"class":38,"line":33084},[36,56152,56153],{"class":98},"      img.src ",[36,56155,176],{"class":163},[36,56157,56158],{"class":98}," arrImage[i].url\n",[36,56160,56161,56164,56166],{"class":38,"line":33090},[36,56162,56163],{"class":98},"      p.innerHTML ",[36,56165,176],{"class":163},[36,56167,56168],{"class":98}," arrImage[i].title\n",[36,56170,56171,56174,56176],{"class":38,"line":33101},[36,56172,56173],{"class":98},"      color.style.backgroundColor ",[36,56175,176],{"class":163},[36,56177,56178],{"class":98}," arrImage[i].color\n",[36,56180,56181],{"class":38,"line":33107},[36,56182,56183],{"class":42},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[36,56185,56186],{"class":38,"line":33127},[36,56187,56188],{"class":42},"      \u002F\u002F li.classList.add('activate')\n",[36,56190,56191],{"class":38,"line":33133},[36,56192,56193],{"class":42},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[36,56195,56196],{"class":38,"line":33144},[36,56197,56198],{"class":42},"      \u002F\u002F lis[i].classList.remove('activate')\n",[36,56200,56201,56204,56206,56208,56211,56214,56217,56219,56222],{"class":38,"line":33150},[36,56202,56203],{"class":98},"      document.",[36,56205,54831],{"class":55},[36,56207,621],{"class":98},[36,56209,56210],{"class":59},"'.activate'",[36,56212,56213],{"class":98},")?.classList.",[36,56215,56216],{"class":55},"toggle",[36,56218,621],{"class":98},[36,56220,56221],{"class":59},"'activate'",[36,56223,627],{"class":98},[36,56225,56226,56229,56231,56233,56235],{"class":38,"line":33156},[36,56227,56228],{"class":98},"      lis[i].classList.",[36,56230,5785],{"class":55},[36,56232,621],{"class":98},[36,56234,56221],{"class":59},[36,56236,627],{"class":98},[36,56238,56239],{"class":38,"line":33162},[36,56240,247],{"emptyLinePlaceholder":246},[36,56242,56243,56246,56248,56250,56252,56254,56256,56258,56261],{"class":38,"line":33168},[36,56244,56245],{"class":98},"      i ",[36,56247,176],{"class":163},[36,56249,54915],{"class":98},[36,56251,1095],{"class":163},[36,56253,25555],{"class":109},[36,56255,14153],{"class":98},[36,56257,942],{"class":163},[36,56259,56260],{"class":98}," arrImage.",[36,56262,56263],{"class":109},"length\n",[36,56265,56266],{"class":38,"line":33174},[36,56267,247],{"emptyLinePlaceholder":246},[36,56269,56270,56272,56274],{"class":38,"line":33180},[36,56271,54967],{"class":98},[36,56273,6861],{"class":109},[36,56275,627],{"class":98},[36,56277,56278,56280,56282],{"class":38,"line":33186},[36,56279,52849],{"class":98},[36,56281,52245],{"class":51733},[36,56283,188],{"class":98},[36,56285,56286,56288,56290],{"class":38,"line":33206},[36,56287,52217],{"class":98},[36,56289,52232],{"class":51733},[36,56291,188],{"class":98},[36,56293,56294],{"class":38,"line":33212},[36,56295,247],{"emptyLinePlaceholder":246},[36,56297,56298,56300,56302],{"class":38,"line":33228},[36,56299,52217],{"class":98},[36,56301,51068],{"class":51733},[36,56303,188],{"class":98},[14,56305,56306],{},[1941,56307],{"alt":31,"src":56308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,56310,56311],{},"?.就是短路保护,确保输出正常进行",[14,56313,56314],{},"不要忘记取余%,有时候可以用",[14,56316,56317],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[571,56319,56320],{"start":46},[574,56321,56322],{},"法2",[26,56324,56326],{"className":51066,"code":56325,"language":51068,"meta":31,"style":31},"\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",[33,56327,56328,56338,56352,56356,56364,56378,56398,56410,56418,56424,56434,56444,56448,56452,56458,56468,56472,56476,56482,56492,56504,56516,56530,56534,56538,56544,56554,56564,56574,56586,56598,56608,56612,56616,56624,56634,56646,56658,56670,56674,56678,56684,56694,56706,56718,56728,56738,56748,56760,56772,56776,56780,56788,56800,56812,56838,56850,56854,56858,56864,56874,56878,56886,56894,56898,56906,56920,56934,56954,56962,56976,56988,56996,57014,57026,57038,57050,57062,57074,57086,57098,57106,57114,57122,57130,57141,57157,57173,57189,57205,57221,57237,57253,57269,57273,57278,57296,57314,57324,57329,57334,57345,57351,57366,57375,57379,57384,57393,57398,57407,57412,57417,57422,57445,57475,57479,57487,57491,57499,57507,57511],{"__ignoreMap":31},[36,56329,56330,56332,56334,56336],{"class":38,"line":39},[36,56331,51730],{"class":98},[36,56333,51734],{"class":51733},[36,56335,51737],{"class":55},[36,56337,188],{"class":98},[36,56339,56340,56342,56344,56346,56348,56350],{"class":38,"line":46},[36,56341,179],{"class":98},[36,56343,51068],{"class":51733},[36,56345,51748],{"class":55},[36,56347,176],{"class":98},[36,56349,51753],{"class":59},[36,56351,188],{"class":98},[36,56353,56354],{"class":38,"line":52},[36,56355,247],{"emptyLinePlaceholder":246},[36,56357,56358,56360,56362],{"class":38,"line":66},[36,56359,179],{"class":98},[36,56361,51766],{"class":51733},[36,56363,188],{"class":98},[36,56365,56366,56368,56370,56372,56374,56376],{"class":38,"line":72},[36,56367,52576],{"class":98},[36,56369,51776],{"class":51733},[36,56371,51779],{"class":55},[36,56373,176],{"class":98},[36,56375,51784],{"class":59},[36,56377,188],{"class":98},[36,56379,56380,56382,56384,56386,56388,56390,56392,56394,56396],{"class":38,"line":82},[36,56381,52576],{"class":98},[36,56383,51776],{"class":51733},[36,56385,15359],{"class":55},[36,56387,176],{"class":98},[36,56389,51823],{"class":59},[36,56391,51803],{"class":55},[36,56393,176],{"class":98},[36,56395,51830],{"class":59},[36,56397,188],{"class":98},[36,56399,56400,56402,56404,56406,56408],{"class":38,"line":88},[36,56401,52576],{"class":98},[36,56403,51839],{"class":51733},[36,56405,51842],{"class":98},[36,56407,51839],{"class":51733},[36,56409,188],{"class":98},[36,56411,56412,56414,56416],{"class":38,"line":113},[36,56413,52576],{"class":98},[36,56415,537],{"class":51733},[36,56417,188],{"class":98},[36,56419,56420,56422],{"class":38,"line":119},[36,56421,6854],{"class":51733},[36,56423,16011],{"class":98},[36,56425,56426,56428,56430,56432],{"class":38,"line":131},[36,56427,55127],{"class":109},[36,56429,51869],{"class":98},[36,56431,807],{"class":109},[36,56433,1772],{"class":98},[36,56435,56436,56438,56440,56442],{"class":38,"line":137},[36,56437,55138],{"class":109},[36,56439,51869],{"class":98},[36,56441,807],{"class":109},[36,56443,1772],{"class":98},[36,56445,56446],{"class":38,"line":147},[36,56447,2646],{"class":98},[36,56449,56450],{"class":38,"line":153},[36,56451,247],{"emptyLinePlaceholder":246},[36,56453,56454,56456],{"class":38,"line":191},[36,56455,55157],{"class":51733},[36,56457,16011],{"class":98},[36,56459,56460,56462,56464,56466],{"class":38,"line":197},[36,56461,55164],{"class":109},[36,56463,51869],{"class":98},[36,56465,55169],{"class":109},[36,56467,1772],{"class":98},[36,56469,56470],{"class":38,"line":217},[36,56471,2646],{"class":98},[36,56473,56474],{"class":38,"line":223},[36,56475,247],{"emptyLinePlaceholder":246},[36,56477,56478,56480],{"class":38,"line":243},[36,56479,55184],{"class":55},[36,56481,16011],{"class":98},[36,56483,56484,56486,56488,56490],{"class":38,"line":250},[36,56485,55191],{"class":109},[36,56487,51869],{"class":98},[36,56489,55196],{"class":109},[36,56491,1772],{"class":98},[36,56493,56494,56496,56498,56500,56502],{"class":38,"line":256},[36,56495,55203],{"class":109},[36,56497,51869],{"class":98},[36,56499,55208],{"class":109},[36,56501,51924],{"class":163},[36,56503,1772],{"class":98},[36,56505,56506,56508,56510,56512,56514],{"class":38,"line":273},[36,56507,55217],{"class":109},[36,56509,51869],{"class":98},[36,56511,2018],{"class":109},[36,56513,51924],{"class":163},[36,56515,1772],{"class":98},[36,56517,56518,56520,56522,56524,56526,56528],{"class":38,"line":278},[36,56519,55138],{"class":109},[36,56521,51869],{"class":98},[36,56523,926],{"class":109},[36,56525,51924],{"class":163},[36,56527,51988],{"class":109},[36,56529,1772],{"class":98},[36,56531,56532],{"class":38,"line":284},[36,56533,2646],{"class":98},[36,56535,56536],{"class":38,"line":315},[36,56537,247],{"emptyLinePlaceholder":246},[36,56539,56540,56542],{"class":38,"line":320},[36,56541,55252],{"class":55},[36,56543,16011],{"class":98},[36,56545,56546,56548,56550,56552],{"class":38,"line":326},[36,56547,55191],{"class":109},[36,56549,51869],{"class":98},[36,56551,55263],{"class":109},[36,56553,1772],{"class":98},[36,56555,56556,56558,56560,56562],{"class":38,"line":343},[36,56557,55270],{"class":109},[36,56559,51869],{"class":98},[36,56561,807],{"class":109},[36,56563,1772],{"class":98},[36,56565,56566,56568,56570,56572],{"class":38,"line":348},[36,56567,55281],{"class":109},[36,56569,51869],{"class":98},[36,56571,807],{"class":109},[36,56573,1772],{"class":98},[36,56575,56576,56578,56580,56582,56584],{"class":38,"line":354},[36,56577,55203],{"class":109},[36,56579,51869],{"class":98},[36,56581,926],{"class":109},[36,56583,942],{"class":163},[36,56585,1772],{"class":98},[36,56587,56588,56590,56592,56594,56596],{"class":38,"line":370},[36,56589,55217],{"class":109},[36,56591,51869],{"class":98},[36,56593,1189],{"class":109},[36,56595,942],{"class":163},[36,56597,1772],{"class":98},[36,56599,56600,56602,56604,56606],{"class":38,"line":375},[36,56601,55316],{"class":109},[36,56603,51869],{"class":98},[36,56605,55321],{"class":109},[36,56607,1772],{"class":98},[36,56609,56610],{"class":38,"line":381},[36,56611,2646],{"class":98},[36,56613,56614],{"class":38,"line":399},[36,56615,247],{"emptyLinePlaceholder":246},[36,56617,56618,56620,56622],{"class":38,"line":404},[36,56619,55252],{"class":55},[36,56621,7276],{"class":51733},[36,56623,16011],{"class":98},[36,56625,56626,56628,56630,56632],{"class":38,"line":410},[36,56627,55191],{"class":109},[36,56629,51869],{"class":98},[36,56631,55263],{"class":109},[36,56633,1772],{"class":98},[36,56635,56636,56638,56640,56642,56644],{"class":38,"line":423},[36,56637,55354],{"class":109},[36,56639,51869],{"class":98},[36,56641,1514],{"class":109},[36,56643,51924],{"class":163},[36,56645,1772],{"class":98},[36,56647,56648,56650,56652,56654,56656],{"class":38,"line":436},[36,56649,55270],{"class":109},[36,56651,51869],{"class":98},[36,56653,1313],{"class":109},[36,56655,51924],{"class":163},[36,56657,1772],{"class":98},[36,56659,56660,56662,56664,56666,56668],{"class":38,"line":441},[36,56661,55379],{"class":109},[36,56663,51869],{"class":98},[36,56665,933],{"class":109},[36,56667,51924],{"class":163},[36,56669,1772],{"class":98},[36,56671,56672],{"class":38,"line":447},[36,56673,2646],{"class":98},[36,56675,56676],{"class":38,"line":465},[36,56677,247],{"emptyLinePlaceholder":246},[36,56679,56680,56682],{"class":38,"line":470},[36,56681,55400],{"class":51733},[36,56683,16011],{"class":98},[36,56685,56686,56688,56690,56692],{"class":38,"line":476},[36,56687,55191],{"class":109},[36,56689,51869],{"class":98},[36,56691,55263],{"class":109},[36,56693,1772],{"class":98},[36,56695,56696,56698,56700,56702,56704],{"class":38,"line":496},[36,56697,55379],{"class":109},[36,56699,51869],{"class":98},[36,56701,1394],{"class":109},[36,56703,51924],{"class":163},[36,56705,1772],{"class":98},[36,56707,56708,56710,56712,56714,56716],{"class":38,"line":501},[36,56709,55270],{"class":109},[36,56711,51869],{"class":98},[36,56713,1313],{"class":109},[36,56715,51924],{"class":163},[36,56717,1772],{"class":98},[36,56719,56720,56722,56724,56726],{"class":38,"line":507},[36,56721,55441],{"class":109},[36,56723,51869],{"class":98},[36,56725,51909],{"class":109},[36,56727,1772],{"class":98},[36,56729,56730,56732,56734,56736],{"class":38,"line":517},[36,56731,55452],{"class":109},[36,56733,51869],{"class":98},[36,56735,52100],{"class":109},[36,56737,1772],{"class":98},[36,56739,56740,56742,56744,56746],{"class":38,"line":522},[36,56741,55191],{"class":109},[36,56743,51869],{"class":98},[36,56745,55263],{"class":109},[36,56747,1772],{"class":98},[36,56749,56750,56752,56754,56756,56758],{"class":38,"line":528},[36,56751,55203],{"class":109},[36,56753,51869],{"class":98},[36,56755,4443],{"class":109},[36,56757,51924],{"class":163},[36,56759,1772],{"class":98},[36,56761,56762,56764,56766,56768,56770],{"class":38,"line":10203},[36,56763,55217],{"class":109},[36,56765,51869],{"class":98},[36,56767,1313],{"class":109},[36,56769,51924],{"class":163},[36,56771,1772],{"class":98},[36,56773,56774],{"class":38,"line":10227},[36,56775,2646],{"class":98},[36,56777,56778],{"class":38,"line":10232},[36,56779,247],{"emptyLinePlaceholder":246},[36,56781,56782,56784,56786],{"class":38,"line":10237},[36,56783,55400],{"class":51733},[36,56785,55507],{"class":51733},[36,56787,16011],{"class":98},[36,56789,56790,56792,56794,56796,56798],{"class":38,"line":10242},[36,56791,55203],{"class":109},[36,56793,51869],{"class":98},[36,56795,1313],{"class":109},[36,56797,51924],{"class":163},[36,56799,1772],{"class":98},[36,56801,56802,56804,56806,56808,56810],{"class":38,"line":10251},[36,56803,55217],{"class":109},[36,56805,51869],{"class":98},[36,56807,1313],{"class":109},[36,56809,51924],{"class":163},[36,56811,1772],{"class":98},[36,56813,56814,56816,56818,56820,56822,56824,56826,56828,56830,56832,56834,56836],{"class":38,"line":10256},[36,56815,55316],{"class":109},[36,56817,51869],{"class":98},[36,56819,55542],{"class":109},[36,56821,621],{"class":98},[36,56823,807],{"class":109},[36,56825,12874],{"class":98},[36,56827,807],{"class":109},[36,56829,12874],{"class":98},[36,56831,807],{"class":109},[36,56833,12874],{"class":98},[36,56835,55559],{"class":109},[36,56837,3170],{"class":98},[36,56839,56840,56842,56844,56846,56848],{"class":38,"line":10262},[36,56841,55566],{"class":109},[36,56843,51869],{"class":98},[36,56845,1060],{"class":109},[36,56847,51924],{"class":163},[36,56849,1772],{"class":98},[36,56851,56852],{"class":38,"line":10283},[36,56853,2646],{"class":98},[36,56855,56856],{"class":38,"line":10289},[36,56857,247],{"emptyLinePlaceholder":246},[36,56859,56860,56862],{"class":38,"line":10303},[36,56861,55587],{"class":55},[36,56863,16011],{"class":98},[36,56865,56866,56868,56870,56872],{"class":38,"line":10309},[36,56867,55316],{"class":109},[36,56869,51869],{"class":98},[36,56871,55598],{"class":109},[36,56873,1772],{"class":98},[36,56875,56876],{"class":38,"line":10336},[36,56877,2646],{"class":98},[36,56879,56880,56882,56884],{"class":38,"line":10345},[36,56881,52849],{"class":98},[36,56883,537],{"class":51733},[36,56885,188],{"class":98},[36,56887,56888,56890,56892],{"class":38,"line":10351},[36,56889,52217],{"class":98},[36,56891,51766],{"class":51733},[36,56893,188],{"class":98},[36,56895,56896],{"class":38,"line":10359},[36,56897,247],{"emptyLinePlaceholder":246},[36,56899,56900,56902,56904],{"class":38,"line":10364},[36,56901,179],{"class":98},[36,56903,52232],{"class":51733},[36,56905,188],{"class":98},[36,56907,56908,56910,56912,56914,56916,56918],{"class":38,"line":17043},[36,56909,52576],{"class":98},[36,56911,52043],{"class":51733},[36,56913,53918],{"class":55},[36,56915,176],{"class":98},[36,56917,53923],{"class":59},[36,56919,188],{"class":98},[36,56921,56922,56924,56926,56928,56930,56932],{"class":38,"line":17049},[36,56923,51773],{"class":98},[36,56925,52043],{"class":51733},[36,56927,53918],{"class":55},[36,56929,176],{"class":98},[36,56931,55659],{"class":59},[36,56933,188],{"class":98},[36,56935,56936,56938,56940,56942,56944,56946,56948,56950,56952],{"class":38,"line":17072},[36,56937,55666],{"class":98},[36,56939,1941],{"class":51733},[36,56941,55671],{"class":55},[36,56943,176],{"class":98},[36,56945,55676],{"class":59},[36,56947,55679],{"class":55},[36,56949,176],{"class":98},[36,56951,8103],{"class":59},[36,56953,188],{"class":98},[36,56955,56956,56958,56960],{"class":38,"line":17078},[36,56957,52208],{"class":98},[36,56959,52043],{"class":51733},[36,56961,188],{"class":98},[36,56963,56964,56966,56968,56970,56972,56974],{"class":38,"line":17101},[36,56965,51773],{"class":98},[36,56967,52043],{"class":51733},[36,56969,53918],{"class":55},[36,56971,176],{"class":98},[36,56973,55706],{"class":59},[36,56975,188],{"class":98},[36,56977,56978,56980,56982,56984,56986],{"class":38,"line":17115},[36,56979,55666],{"class":98},[36,56981,14],{"class":51733},[36,56983,55717],{"class":98},[36,56985,14],{"class":51733},[36,56987,188],{"class":98},[36,56989,56990,56992,56994],{"class":38,"line":17135},[36,56991,55666],{"class":98},[36,56993,1618],{"class":51733},[36,56995,188],{"class":98},[36,56997,56998,57000,57002,57004,57006,57008,57010,57012],{"class":38,"line":17141},[36,56999,55734],{"class":98},[36,57001,574],{"class":51733},[36,57003,53918],{"class":55},[36,57005,176],{"class":98},[36,57007,55743],{"class":59},[36,57009,55746],{"class":98},[36,57011,574],{"class":51733},[36,57013,188],{"class":98},[36,57015,57016,57018,57020,57022,57024],{"class":38,"line":17152},[36,57017,55734],{"class":98},[36,57019,574],{"class":51733},[36,57021,55746],{"class":98},[36,57023,574],{"class":51733},[36,57025,188],{"class":98},[36,57027,57028,57030,57032,57034,57036],{"class":38,"line":17175},[36,57029,55734],{"class":98},[36,57031,574],{"class":51733},[36,57033,55746],{"class":98},[36,57035,574],{"class":51733},[36,57037,188],{"class":98},[36,57039,57040,57042,57044,57046,57048],{"class":38,"line":17197},[36,57041,55734],{"class":98},[36,57043,574],{"class":51733},[36,57045,55746],{"class":98},[36,57047,574],{"class":51733},[36,57049,188],{"class":98},[36,57051,57052,57054,57056,57058,57060],{"class":38,"line":17202},[36,57053,55734],{"class":98},[36,57055,574],{"class":51733},[36,57057,55746],{"class":98},[36,57059,574],{"class":51733},[36,57061,188],{"class":98},[36,57063,57064,57066,57068,57070,57072],{"class":38,"line":17208},[36,57065,55734],{"class":98},[36,57067,574],{"class":51733},[36,57069,55746],{"class":98},[36,57071,574],{"class":51733},[36,57073,188],{"class":98},[36,57075,57076,57078,57080,57082,57084],{"class":38,"line":17222},[36,57077,55734],{"class":98},[36,57079,574],{"class":51733},[36,57081,55746],{"class":98},[36,57083,574],{"class":51733},[36,57085,188],{"class":98},[36,57087,57088,57090,57092,57094,57096],{"class":38,"line":17235},[36,57089,55734],{"class":98},[36,57091,574],{"class":51733},[36,57093,55746],{"class":98},[36,57095,574],{"class":51733},[36,57097,188],{"class":98},[36,57099,57100,57102,57104],{"class":38,"line":17240},[36,57101,55839],{"class":98},[36,57103,1618],{"class":51733},[36,57105,188],{"class":98},[36,57107,57108,57110,57112],{"class":38,"line":17254},[36,57109,52208],{"class":98},[36,57111,52043],{"class":51733},[36,57113,188],{"class":98},[36,57115,57116,57118,57120],{"class":38,"line":17259},[36,57117,52849],{"class":98},[36,57119,52043],{"class":51733},[36,57121,188],{"class":98},[36,57123,57124,57126,57128],{"class":38,"line":17265},[36,57125,52576],{"class":98},[36,57127,52245],{"class":51733},[36,57129,188],{"class":98},[36,57131,57132,57134,57137,57139],{"class":38,"line":17270},[36,57133,11660],{"class":163},[36,57135,57136],{"class":109}," sliderData",[36,57138,14003],{"class":163},[36,57140,55879],{"class":98},[36,57142,57143,57145,57147,57149,57151,57153,57155],{"class":38,"line":17284},[36,57144,55884],{"class":98},[36,57146,55887],{"class":59},[36,57148,55890],{"class":98},[36,57150,55893],{"class":59},[36,57152,55896],{"class":98},[36,57154,55899],{"class":59},[36,57156,55902],{"class":98},[36,57158,57159,57161,57163,57165,57167,57169,57171],{"class":38,"line":17289},[36,57160,55884],{"class":98},[36,57162,55909],{"class":59},[36,57164,55890],{"class":98},[36,57166,55914],{"class":59},[36,57168,55896],{"class":98},[36,57170,55919],{"class":59},[36,57172,55902],{"class":98},[36,57174,57175,57177,57179,57181,57183,57185,57187],{"class":38,"line":17294},[36,57176,55884],{"class":98},[36,57178,55928],{"class":59},[36,57180,55890],{"class":98},[36,57182,55933],{"class":59},[36,57184,55896],{"class":98},[36,57186,55938],{"class":59},[36,57188,55902],{"class":98},[36,57190,57191,57193,57195,57197,57199,57201,57203],{"class":38,"line":17308},[36,57192,55884],{"class":98},[36,57194,55947],{"class":59},[36,57196,55890],{"class":98},[36,57198,55952],{"class":59},[36,57200,55896],{"class":98},[36,57202,55957],{"class":59},[36,57204,55902],{"class":98},[36,57206,57207,57209,57211,57213,57215,57217,57219],{"class":38,"line":17320},[36,57208,55884],{"class":98},[36,57210,55966],{"class":59},[36,57212,55890],{"class":98},[36,57214,55971],{"class":59},[36,57216,55896],{"class":98},[36,57218,55976],{"class":59},[36,57220,55902],{"class":98},[36,57222,57223,57225,57227,57229,57231,57233,57235],{"class":38,"line":17325},[36,57224,55884],{"class":98},[36,57226,55985],{"class":59},[36,57228,55890],{"class":98},[36,57230,55990],{"class":59},[36,57232,55896],{"class":98},[36,57234,55995],{"class":59},[36,57236,55902],{"class":98},[36,57238,57239,57241,57243,57245,57247,57249,57251],{"class":38,"line":17338},[36,57240,55884],{"class":98},[36,57242,56004],{"class":59},[36,57244,55890],{"class":98},[36,57246,56009],{"class":59},[36,57248,55896],{"class":98},[36,57250,56014],{"class":59},[36,57252,55902],{"class":98},[36,57254,57255,57257,57259,57261,57263,57265,57267],{"class":38,"line":17343},[36,57256,55884],{"class":98},[36,57258,56023],{"class":59},[36,57260,55890],{"class":98},[36,57262,56028],{"class":59},[36,57264,55896],{"class":98},[36,57266,56033],{"class":59},[36,57268,56036],{"class":98},[36,57270,57271],{"class":38,"line":17348},[36,57272,53541],{"class":98},[36,57274,57275],{"class":38,"line":17353},[36,57276,57277],{"class":42},"    \u002F\u002F 1.获取元素\n",[36,57279,57280,57282,57284,57286,57288,57290,57292,57294],{"class":38,"line":17366},[36,57281,11660],{"class":163},[36,57283,56047],{"class":109},[36,57285,14003],{"class":163},[36,57287,54828],{"class":98},[36,57289,54831],{"class":55},[36,57291,621],{"class":98},[36,57293,56058],{"class":59},[36,57295,627],{"class":98},[36,57297,57298,57300,57302,57304,57306,57308,57310,57312],{"class":38,"line":17371},[36,57299,11660],{"class":163},[36,57301,7276],{"class":109},[36,57303,14003],{"class":163},[36,57305,54828],{"class":98},[36,57307,54831],{"class":55},[36,57309,621],{"class":98},[36,57311,56077],{"class":59},[36,57313,627],{"class":98},[36,57315,57316,57318,57320,57322],{"class":38,"line":33066},[36,57317,52651],{"class":163},[36,57319,9879],{"class":98},[36,57321,176],{"class":163},[36,57323,47766],{"class":109},[36,57325,57326],{"class":38,"line":33072},[36,57327,57328],{"class":42},"    \u002F\u002F 2.开启定时器\n",[36,57330,57331],{"class":38,"line":33078},[36,57332,57333],{"class":42},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[36,57335,57336,57339,57341,57343],{"class":38,"line":33084},[36,57337,57338],{"class":55},"    setInterval",[36,57340,621],{"class":98},[36,57342,54881],{"class":163},[36,57344,54884],{"class":98},[36,57346,57347,57349],{"class":38,"line":33090},[36,57348,54889],{"class":98},[36,57350,3153],{"class":163},[36,57352,57353,57355,57357,57359,57362,57364],{"class":38,"line":33101},[36,57354,54912],{"class":163},[36,57356,54915],{"class":98},[36,57358,2178],{"class":163},[36,57360,57361],{"class":98}," sliderData.",[36,57363,52400],{"class":109},[36,57365,12881],{"class":98},[36,57367,57368,57371,57373],{"class":38,"line":33107},[36,57369,57370],{"class":98},"        i ",[36,57372,176],{"class":163},[36,57374,47766],{"class":109},[36,57376,57377],{"class":38,"line":33127},[36,57378,52830],{"class":98},[36,57380,57381],{"class":38,"line":33133},[36,57382,57383],{"class":42},"      \u002F\u002F 更换图片路径\n",[36,57385,57386,57388,57390],{"class":38,"line":33144},[36,57387,56153],{"class":98},[36,57389,176],{"class":163},[36,57391,57392],{"class":98}," sliderData[i].url\n",[36,57394,57395],{"class":38,"line":33150},[36,57396,57397],{"class":42},"      \u002F\u002F 把文字写到p里面\n",[36,57399,57400,57402,57404],{"class":38,"line":33156},[36,57401,56163],{"class":98},[36,57403,176],{"class":163},[36,57405,57406],{"class":98}," sliderData[i].title\n",[36,57408,57409],{"class":38,"line":33162},[36,57410,57411],{"class":42},"      \u002F\u002F 小圆点\n",[36,57413,57414],{"class":38,"line":33168},[36,57415,57416],{"class":42},"      \u002F\u002F 先删除以前的active\n",[36,57418,57419],{"class":38,"line":33174},[36,57420,57421],{"class":42},"      \u002F\u002F 只让当前li添加active\n",[36,57423,57424,57426,57428,57430,57433,57436,57439,57441,57443],{"class":38,"line":33180},[36,57425,56203],{"class":98},[36,57427,54831],{"class":55},[36,57429,621],{"class":98},[36,57431,57432],{"class":59},"'.slider-footer .activate'",[36,57434,57435],{"class":98},").classList.",[36,57437,57438],{"class":55},"remove",[36,57440,621],{"class":98},[36,57442,56221],{"class":59},[36,57444,627],{"class":98},[36,57446,57447,57449,57451,57453,57456,57458,57460,57462,57465,57467,57469,57471,57473],{"class":38,"line":33186},[36,57448,56203],{"class":98},[36,57450,54831],{"class":55},[36,57452,621],{"class":98},[36,57454,57455],{"class":59},"`.slider-footer ul li:nth-child(${",[36,57457,1055],{"class":98},[36,57459,45999],{"class":163},[36,57461,25555],{"class":109},[36,57463,57464],{"class":59},"})`",[36,57466,57435],{"class":98},[36,57468,5785],{"class":55},[36,57470,621],{"class":98},[36,57472,56221],{"class":59},[36,57474,627],{"class":98},[36,57476,57477],{"class":38,"line":33206},[36,57478,247],{"emptyLinePlaceholder":246},[36,57480,57481,57483,57485],{"class":38,"line":33212},[36,57482,54967],{"class":98},[36,57484,6861],{"class":109},[36,57486,627],{"class":98},[36,57488,57489],{"class":38,"line":33228},[36,57490,247],{"emptyLinePlaceholder":246},[36,57492,57493,57495,57497],{"class":38,"line":33234},[36,57494,52849],{"class":98},[36,57496,52245],{"class":51733},[36,57498,188],{"class":98},[36,57500,57501,57503,57505],{"class":38,"line":33248},[36,57502,52217],{"class":98},[36,57504,52232],{"class":51733},[36,57506,188],{"class":98},[36,57508,57509],{"class":38,"line":33254},[36,57510,247],{"emptyLinePlaceholder":246},[36,57512,57513,57515,57517],{"class":38,"line":33269},[36,57514,52217],{"class":98},[36,57516,51068],{"class":51733},[36,57518,188],{"class":98},[588,57520,57522],{"id":57521},"_317-重要知识点","3.1.7 重要知识点",[14,57524,57525,57526],{},"浏览器在渲染文本时， ",[765,57527,57528],{},"没有空格或换行符就没有“断行点”",[14,57530,57531],{},[1941,57532],{"alt":31,"src":57533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,57535,57536],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,57538,57539],{},[1941,57540],{"alt":31,"src":57541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,57543,57544],{},[1941,57545],{"alt":31,"src":57546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[559,57548,57550],{"id":57549},"_32-dom事件基础","3.2 DOM事件基础",[588,57552,57554],{"id":57553},"_321-事件监听","3.2.1 事件监听",[14,57556,57557],{},[1941,57558],{"alt":31,"src":57559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,57561,57562],{},"事件监听有响应的发生",[14,57564,57565],{},[1941,57566],{"alt":31,"src":57567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,57569,57570],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,57572,57573],{},"对于有名函数,要执行的函数名后边不要加()",[588,57575,57577],{"id":57576},"_322-随机点名案例","3.2.2 随机点名案例",[26,57579,57581],{"className":51066,"code":57580,"language":51068,"meta":31,"style":31},"\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",[33,57582,57583,57593,57607,57611,57619,57633,57653,57665,57673,57679,57689,57699,57703,57707,57714,57725,57729,57733,57739,57751,57765,57775,57787,57800,57804,57808,57815,57819,57832,57844,57856,57860,57864,57868,57875,57885,57889,57893,57902,57914,57926,57941,57945,57953,57961,57965,57973,57986,58000,58013,58033,58041,58056,58076,58096,58104,58108,58116,58121,58157,58177,58182,58201,58206,58217,58222,58233,58238,58257,58272,58277,58303,58313,58322,58327,58343,58348,58353,58358,58373,58377,58381,58386,58405,58422,58430,58435,58450,58454,58458,58466,58474,58478],{"__ignoreMap":31},[36,57584,57585,57587,57589,57591],{"class":38,"line":39},[36,57586,51730],{"class":98},[36,57588,51734],{"class":51733},[36,57590,51737],{"class":55},[36,57592,188],{"class":98},[36,57594,57595,57597,57599,57601,57603,57605],{"class":38,"line":46},[36,57596,179],{"class":98},[36,57598,51068],{"class":51733},[36,57600,51748],{"class":55},[36,57602,176],{"class":98},[36,57604,51753],{"class":59},[36,57606,188],{"class":98},[36,57608,57609],{"class":38,"line":52},[36,57610,247],{"emptyLinePlaceholder":246},[36,57612,57613,57615,57617],{"class":38,"line":66},[36,57614,179],{"class":98},[36,57616,51766],{"class":51733},[36,57618,188],{"class":98},[36,57620,57621,57623,57625,57627,57629,57631],{"class":38,"line":72},[36,57622,52576],{"class":98},[36,57624,51776],{"class":51733},[36,57626,51779],{"class":55},[36,57628,176],{"class":98},[36,57630,51784],{"class":59},[36,57632,188],{"class":98},[36,57634,57635,57637,57639,57641,57643,57645,57647,57649,57651],{"class":38,"line":82},[36,57636,52576],{"class":98},[36,57638,51776],{"class":51733},[36,57640,15359],{"class":55},[36,57642,176],{"class":98},[36,57644,51823],{"class":59},[36,57646,51803],{"class":55},[36,57648,176],{"class":98},[36,57650,51830],{"class":59},[36,57652,188],{"class":98},[36,57654,57655,57657,57659,57661,57663],{"class":38,"line":88},[36,57656,52576],{"class":98},[36,57658,51839],{"class":51733},[36,57660,51842],{"class":98},[36,57662,51839],{"class":51733},[36,57664,188],{"class":98},[36,57666,57667,57669,57671],{"class":38,"line":113},[36,57668,52576],{"class":98},[36,57670,537],{"class":51733},[36,57672,188],{"class":98},[36,57674,57675,57677],{"class":38,"line":119},[36,57676,6854],{"class":51733},[36,57678,16011],{"class":98},[36,57680,57681,57683,57685,57687],{"class":38,"line":131},[36,57682,55138],{"class":109},[36,57684,51869],{"class":98},[36,57686,807],{"class":109},[36,57688,1772],{"class":98},[36,57690,57691,57693,57695,57697],{"class":38,"line":137},[36,57692,55127],{"class":109},[36,57694,51869],{"class":98},[36,57696,807],{"class":109},[36,57698,1772],{"class":98},[36,57700,57701],{"class":38,"line":147},[36,57702,2646],{"class":98},[36,57704,57705],{"class":38,"line":153},[36,57706,247],{"emptyLinePlaceholder":246},[36,57708,57709,57712],{"class":38,"line":191},[36,57710,57711],{"class":51733},"    h2",[36,57713,16011],{"class":98},[36,57715,57716,57719,57721,57723],{"class":38,"line":197},[36,57717,57718],{"class":109},"      text-align",[36,57720,51869],{"class":98},[36,57722,52024],{"class":109},[36,57724,1772],{"class":98},[36,57726,57727],{"class":38,"line":217},[36,57728,2646],{"class":98},[36,57730,57731],{"class":38,"line":223},[36,57732,247],{"emptyLinePlaceholder":246},[36,57734,57735,57737],{"class":38,"line":243},[36,57736,55184],{"class":55},[36,57738,16011],{"class":98},[36,57740,57741,57743,57745,57747,57749],{"class":38,"line":250},[36,57742,55203],{"class":109},[36,57744,51869],{"class":98},[36,57746,2018],{"class":109},[36,57748,51924],{"class":163},[36,57750,1772],{"class":98},[36,57752,57753,57755,57757,57759,57761,57763],{"class":38,"line":256},[36,57754,55138],{"class":109},[36,57756,51869],{"class":98},[36,57758,1270],{"class":109},[36,57760,51924],{"class":163},[36,57762,51988],{"class":109},[36,57764,1772],{"class":98},[36,57766,57767,57769,57771,57773],{"class":38,"line":273},[36,57768,55441],{"class":109},[36,57770,51869],{"class":98},[36,57772,51909],{"class":109},[36,57774,1772],{"class":98},[36,57776,57777,57779,57781,57783,57785],{"class":38,"line":278},[36,57778,55354],{"class":109},[36,57780,51869],{"class":98},[36,57782,1438],{"class":109},[36,57784,51924],{"class":163},[36,57786,1772],{"class":98},[36,57788,57789,57792,57794,57796,57798],{"class":38,"line":284},[36,57790,57791],{"class":109},"      line-height",[36,57793,51869],{"class":98},[36,57795,1015],{"class":109},[36,57797,51924],{"class":163},[36,57799,1772],{"class":98},[36,57801,57802],{"class":38,"line":315},[36,57803,2646],{"class":98},[36,57805,57806],{"class":38,"line":320},[36,57807,247],{"emptyLinePlaceholder":246},[36,57809,57810,57813],{"class":38,"line":326},[36,57811,57812],{"class":55},"    .qs",[36,57814,16011],{"class":98},[36,57816,57817],{"class":38,"line":343},[36,57818,247],{"emptyLinePlaceholder":246},[36,57820,57821,57823,57825,57828,57830],{"class":38,"line":348},[36,57822,55203],{"class":109},[36,57824,51869],{"class":98},[36,57826,57827],{"class":109},"450",[36,57829,51924],{"class":163},[36,57831,1772],{"class":98},[36,57833,57834,57836,57838,57840,57842],{"class":38,"line":354},[36,57835,55217],{"class":109},[36,57837,51869],{"class":98},[36,57839,1015],{"class":109},[36,57841,51924],{"class":163},[36,57843,1772],{"class":98},[36,57845,57846,57849,57851,57854],{"class":38,"line":370},[36,57847,57848],{"class":109},"      color",[36,57850,51869],{"class":98},[36,57852,57853],{"class":109},"red",[36,57855,1772],{"class":98},[36,57857,57858],{"class":38,"line":375},[36,57859,247],{"emptyLinePlaceholder":246},[36,57861,57862],{"class":38,"line":381},[36,57863,2646],{"class":98},[36,57865,57866],{"class":38,"line":399},[36,57867,247],{"emptyLinePlaceholder":246},[36,57869,57870,57873],{"class":38,"line":404},[36,57871,57872],{"class":55},"    .btns",[36,57874,16011],{"class":98},[36,57876,57877,57879,57881,57883],{"class":38,"line":410},[36,57878,57718],{"class":109},[36,57880,51869],{"class":98},[36,57882,52024],{"class":109},[36,57884,1772],{"class":98},[36,57886,57887],{"class":38,"line":423},[36,57888,2646],{"class":98},[36,57890,57891],{"class":38,"line":436},[36,57892,247],{"emptyLinePlaceholder":246},[36,57894,57895,57897,57900],{"class":38,"line":441},[36,57896,57872],{"class":55},[36,57898,57899],{"class":51733}," button",[36,57901,16011],{"class":98},[36,57903,57904,57906,57908,57910,57912],{"class":38,"line":447},[36,57905,55203],{"class":109},[36,57907,51869],{"class":98},[36,57909,1430],{"class":109},[36,57911,51924],{"class":163},[36,57913,1772],{"class":98},[36,57915,57916,57918,57920,57922,57924],{"class":38,"line":465},[36,57917,55217],{"class":109},[36,57919,51869],{"class":98},[36,57921,888],{"class":109},[36,57923,51924],{"class":163},[36,57925,1772],{"class":98},[36,57927,57928,57930,57932,57934,57937,57939],{"class":38,"line":470},[36,57929,55138],{"class":109},[36,57931,51869],{"class":98},[36,57933,807],{"class":109},[36,57935,57936],{"class":109}," 50",[36,57938,51924],{"class":163},[36,57940,1772],{"class":98},[36,57942,57943],{"class":38,"line":476},[36,57944,2646],{"class":98},[36,57946,57947,57949,57951],{"class":38,"line":496},[36,57948,52849],{"class":98},[36,57950,537],{"class":51733},[36,57952,188],{"class":98},[36,57954,57955,57957,57959],{"class":38,"line":501},[36,57956,52217],{"class":98},[36,57958,51766],{"class":51733},[36,57960,188],{"class":98},[36,57962,57963],{"class":38,"line":507},[36,57964,247],{"emptyLinePlaceholder":246},[36,57966,57967,57969,57971],{"class":38,"line":517},[36,57968,179],{"class":98},[36,57970,52232],{"class":51733},[36,57972,188],{"class":98},[36,57974,57975,57977,57979,57982,57984],{"class":38,"line":522},[36,57976,52576],{"class":98},[36,57978,559],{"class":51733},[36,57980,57981],{"class":98},">随机点名\u003C\u002F",[36,57983,559],{"class":51733},[36,57985,188],{"class":98},[36,57987,57988,57990,57992,57994,57996,57998],{"class":38,"line":528},[36,57989,52576],{"class":98},[36,57991,52043],{"class":51733},[36,57993,53918],{"class":55},[36,57995,176],{"class":98},[36,57997,53923],{"class":59},[36,57999,188],{"class":98},[36,58001,58002,58004,58006,58009,58011],{"class":38,"line":10203},[36,58003,51773],{"class":98},[36,58005,36],{"class":51733},[36,58007,58008],{"class":98},">名字是：\u003C\u002F",[36,58010,36],{"class":51733},[36,58012,188],{"class":98},[36,58014,58015,58017,58019,58021,58023,58026,58029,58031],{"class":38,"line":10227},[36,58016,51773],{"class":98},[36,58018,52043],{"class":51733},[36,58020,53918],{"class":55},[36,58022,176],{"class":98},[36,58024,58025],{"class":59},"\"qs\"",[36,58027,58028],{"class":98},">这里显示姓名\u003C\u002F",[36,58030,52043],{"class":51733},[36,58032,188],{"class":98},[36,58034,58035,58037,58039],{"class":38,"line":10232},[36,58036,52849],{"class":98},[36,58038,52043],{"class":51733},[36,58040,188],{"class":98},[36,58042,58043,58045,58047,58049,58051,58054],{"class":38,"line":10237},[36,58044,52576],{"class":98},[36,58046,52043],{"class":51733},[36,58048,53918],{"class":55},[36,58050,176],{"class":98},[36,58052,58053],{"class":59},"\"btns\"",[36,58055,188],{"class":98},[36,58057,58058,58060,58062,58064,58066,58069,58072,58074],{"class":38,"line":10242},[36,58059,51773],{"class":98},[36,58061,54319],{"class":51733},[36,58063,53918],{"class":55},[36,58065,176],{"class":98},[36,58067,58068],{"class":59},"\"start\"",[36,58070,58071],{"class":98},">开始\u003C\u002F",[36,58073,54319],{"class":51733},[36,58075,188],{"class":98},[36,58077,58078,58080,58082,58084,58086,58089,58092,58094],{"class":38,"line":10251},[36,58079,51773],{"class":98},[36,58081,54319],{"class":51733},[36,58083,53918],{"class":55},[36,58085,176],{"class":98},[36,58087,58088],{"class":59},"\"end\"",[36,58090,58091],{"class":98},">结束\u003C\u002F",[36,58093,54319],{"class":51733},[36,58095,188],{"class":98},[36,58097,58098,58100,58102],{"class":38,"line":10256},[36,58099,52849],{"class":98},[36,58101,52043],{"class":51733},[36,58103,188],{"class":98},[36,58105,58106],{"class":38,"line":10262},[36,58107,247],{"emptyLinePlaceholder":246},[36,58109,58110,58112,58114],{"class":38,"line":10283},[36,58111,52576],{"class":98},[36,58113,52245],{"class":51733},[36,58115,188],{"class":98},[36,58117,58118],{"class":38,"line":10289},[36,58119,58120],{"class":42},"    \u002F\u002F 数据数组\n",[36,58122,58123,58125,58128,58130,58132,58135,58137,58140,58142,58145,58147,58150,58152,58155],{"class":38,"line":10303},[36,58124,11660],{"class":163},[36,58126,58127],{"class":109}," arr",[36,58129,14003],{"class":163},[36,58131,52658],{"class":98},[36,58133,58134],{"class":59},"'马超'",[36,58136,12874],{"class":98},[36,58138,58139],{"class":59},"'黄忠'",[36,58141,12874],{"class":98},[36,58143,58144],{"class":59},"'赵云'",[36,58146,12874],{"class":98},[36,58148,58149],{"class":59},"'关羽'",[36,58151,12874],{"class":98},[36,58153,58154],{"class":59},"'张飞'",[36,58156,33679],{"class":98},[36,58158,58159,58161,58164,58166,58168,58170,58172,58175],{"class":38,"line":10309},[36,58160,11660],{"class":163},[36,58162,58163],{"class":109}," qs",[36,58165,14003],{"class":163},[36,58167,54828],{"class":98},[36,58169,54831],{"class":55},[36,58171,621],{"class":98},[36,58173,58174],{"class":59},"'.qs'",[36,58176,627],{"class":98},[36,58178,58179],{"class":38,"line":10336},[36,58180,58181],{"class":42},"    \u002F\u002F 1.业务1.开始按钮模块\n",[36,58183,58184,58186,58188,58190,58192,58194,58196,58199],{"class":38,"line":10345},[36,58185,11660],{"class":163},[36,58187,4635],{"class":109},[36,58189,14003],{"class":163},[36,58191,54828],{"class":98},[36,58193,54831],{"class":55},[36,58195,621],{"class":98},[36,58197,58198],{"class":59},"'.start'",[36,58200,627],{"class":98},[36,58202,58203],{"class":38,"line":10351},[36,58204,58205],{"class":42},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[36,58207,58208,58210,58213,58215],{"class":38,"line":10359},[36,58209,52651],{"class":163},[36,58211,58212],{"class":98}," timerId ",[36,58214,176],{"class":163},[36,58216,47766],{"class":109},[36,58218,58219],{"class":38,"line":10364},[36,58220,58221],{"class":42},"    \u002F\u002F 随机号要全局变量\n",[36,58223,58224,58226,58229,58231],{"class":38,"line":17043},[36,58225,52651],{"class":163},[36,58227,58228],{"class":98}," random ",[36,58230,176],{"class":163},[36,58232,47766],{"class":109},[36,58234,58235],{"class":38,"line":17049},[36,58236,58237],{"class":42},"    \u002F\u002F 1.1 添加点击事件\n",[36,58239,58240,58243,58246,58248,58251,58253,58255],{"class":38,"line":17072},[36,58241,58242],{"class":98},"    start.",[36,58244,58245],{"class":55},"addEventListener",[36,58247,621],{"class":98},[36,58249,58250],{"class":59},"'click'",[36,58252,12874],{"class":98},[36,58254,54881],{"class":163},[36,58256,54884],{"class":98},[36,58258,58259,58262,58264,58266,58268,58270],{"class":38,"line":17078},[36,58260,58261],{"class":98},"      timerId ",[36,58263,176],{"class":163},[36,58265,54876],{"class":55},[36,58267,621],{"class":98},[36,58269,54881],{"class":163},[36,58271,54884],{"class":98},[36,58273,58274],{"class":38,"line":17101},[36,58275,58276],{"class":42},"        \u002F\u002F 随机数\n",[36,58278,58279,58282,58284,58287,58290,58293,58295,58297,58299,58301],{"class":38,"line":17115},[36,58280,58281],{"class":98},"        random ",[36,58283,176],{"class":163},[36,58285,58286],{"class":55}," parseInt",[36,58288,58289],{"class":98},"(Math.",[36,58291,58292],{"class":55},"random",[36,58294,13489],{"class":98},[36,58296,1069],{"class":163},[36,58298,52397],{"class":98},[36,58300,52400],{"class":109},[36,58302,627],{"class":98},[36,58304,58305,58308,58310],{"class":38,"line":17135},[36,58306,58307],{"class":98},"        qs.innerHTML ",[36,58309,176],{"class":163},[36,58311,58312],{"class":98}," arr[random]\n",[36,58314,58315,58318,58320],{"class":38,"line":17141},[36,58316,58317],{"class":98},"      }, ",[36,58319,888],{"class":109},[36,58321,627],{"class":98},[36,58323,58324],{"class":38,"line":17152},[36,58325,58326],{"class":42},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[36,58328,58329,58331,58334,58336,58339,58341],{"class":38,"line":17175},[36,58330,54912],{"class":163},[36,58332,58333],{"class":98}," (arr.",[36,58335,52400],{"class":109},[36,58337,58338],{"class":163}," ===",[36,58340,25555],{"class":109},[36,58342,12881],{"class":98},[36,58344,58345],{"class":38,"line":17197},[36,58346,58347],{"class":42},"        \u002F\u002F start.disabled = true\n",[36,58349,58350],{"class":38,"line":17202},[36,58351,58352],{"class":42},"        \u002F\u002F end.disabled = true\n",[36,58354,58355],{"class":38,"line":17208},[36,58356,58357],{"class":42},"        \u002F\u002F 可以合起来写\n",[36,58359,58360,58363,58365,58368,58370],{"class":38,"line":17222},[36,58361,58362],{"class":98},"        start.disabled ",[36,58364,176],{"class":163},[36,58366,58367],{"class":98}," end.disabled ",[36,58369,176],{"class":163},[36,58371,58372],{"class":109}," true\n",[36,58374,58375],{"class":38,"line":17235},[36,58376,52830],{"class":98},[36,58378,58379],{"class":38,"line":17240},[36,58380,33894],{"class":98},[36,58382,58383],{"class":38,"line":17254},[36,58384,58385],{"class":42},"    \u002F\u002F 1.2 关闭按钮模块\n",[36,58387,58388,58390,58392,58394,58396,58398,58400,58403],{"class":38,"line":17259},[36,58389,11660],{"class":163},[36,58391,4651],{"class":109},[36,58393,14003],{"class":163},[36,58395,54828],{"class":98},[36,58397,54831],{"class":55},[36,58399,621],{"class":98},[36,58401,58402],{"class":59},"'.end'",[36,58404,627],{"class":98},[36,58406,58407,58410,58412,58414,58416,58418,58420],{"class":38,"line":17265},[36,58408,58409],{"class":98},"    end.",[36,58411,58245],{"class":55},[36,58413,621],{"class":98},[36,58415,58250],{"class":59},[36,58417,12874],{"class":98},[36,58419,54881],{"class":163},[36,58421,54884],{"class":98},[36,58423,58424,58427],{"class":38,"line":17270},[36,58425,58426],{"class":55},"      clearInterval",[36,58428,58429],{"class":98},"(timerId)\n",[36,58431,58432],{"class":38,"line":17284},[36,58433,58434],{"class":42},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[36,58436,58437,58440,58443,58446,58448],{"class":38,"line":17289},[36,58438,58439],{"class":98},"      arr.",[36,58441,58442],{"class":55},"splice",[36,58444,58445],{"class":98},"(random, ",[36,58447,833],{"class":109},[36,58449,627],{"class":98},[36,58451,58452],{"class":38,"line":17294},[36,58453,33894],{"class":98},[36,58455,58456],{"class":38,"line":17308},[36,58457,247],{"emptyLinePlaceholder":246},[36,58459,58460,58462,58464],{"class":38,"line":17320},[36,58461,52849],{"class":98},[36,58463,52245],{"class":51733},[36,58465,188],{"class":98},[36,58467,58468,58470,58472],{"class":38,"line":17325},[36,58469,52217],{"class":98},[36,58471,52232],{"class":51733},[36,58473,188],{"class":98},[36,58475,58476],{"class":38,"line":17338},[36,58477,247],{"emptyLinePlaceholder":246},[36,58479,58480,58482,58484],{"class":38,"line":17343},[36,58481,52217],{"class":98},[36,58483,51068],{"class":51733},[36,58485,188],{"class":98},[14,58487,58488],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[588,58490,58492],{"id":58491},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[26,58494,58496],{"className":51066,"code":58495,"language":51068,"meta":31,"style":31},"\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",[33,58497,58498,58508,58522,58526,58534,58548,58568,58580,58588,58592,58600,58612,58620,58639,58656,58672,58682,58686,58694,58702,58706],{"__ignoreMap":31},[36,58499,58500,58502,58504,58506],{"class":38,"line":39},[36,58501,51730],{"class":98},[36,58503,51734],{"class":51733},[36,58505,51737],{"class":55},[36,58507,188],{"class":98},[36,58509,58510,58512,58514,58516,58518,58520],{"class":38,"line":46},[36,58511,179],{"class":98},[36,58513,51068],{"class":51733},[36,58515,51748],{"class":55},[36,58517,176],{"class":98},[36,58519,51753],{"class":59},[36,58521,188],{"class":98},[36,58523,58524],{"class":38,"line":52},[36,58525,247],{"emptyLinePlaceholder":246},[36,58527,58528,58530,58532],{"class":38,"line":66},[36,58529,179],{"class":98},[36,58531,51766],{"class":51733},[36,58533,188],{"class":98},[36,58535,58536,58538,58540,58542,58544,58546],{"class":38,"line":72},[36,58537,52576],{"class":98},[36,58539,51776],{"class":51733},[36,58541,51779],{"class":55},[36,58543,176],{"class":98},[36,58545,51784],{"class":59},[36,58547,188],{"class":98},[36,58549,58550,58552,58554,58556,58558,58560,58562,58564,58566],{"class":38,"line":82},[36,58551,52576],{"class":98},[36,58553,51776],{"class":51733},[36,58555,15359],{"class":55},[36,58557,176],{"class":98},[36,58559,51823],{"class":59},[36,58561,51803],{"class":55},[36,58563,176],{"class":98},[36,58565,51830],{"class":59},[36,58567,188],{"class":98},[36,58569,58570,58572,58574,58576,58578],{"class":38,"line":88},[36,58571,52576],{"class":98},[36,58573,51839],{"class":51733},[36,58575,51842],{"class":98},[36,58577,51839],{"class":51733},[36,58579,188],{"class":98},[36,58581,58582,58584,58586],{"class":38,"line":113},[36,58583,52217],{"class":98},[36,58585,51766],{"class":51733},[36,58587,188],{"class":98},[36,58589,58590],{"class":38,"line":119},[36,58591,247],{"emptyLinePlaceholder":246},[36,58593,58594,58596,58598],{"class":38,"line":131},[36,58595,179],{"class":98},[36,58597,52232],{"class":51733},[36,58599,188],{"class":98},[36,58601,58602,58604,58606,58608,58610],{"class":38,"line":137},[36,58603,52576],{"class":98},[36,58605,54319],{"class":51733},[36,58607,54325],{"class":98},[36,58609,54319],{"class":51733},[36,58611,188],{"class":98},[36,58613,58614,58616,58618],{"class":38,"line":147},[36,58615,52576],{"class":98},[36,58617,52245],{"class":51733},[36,58619,188],{"class":98},[36,58621,58622,58624,58626,58628,58630,58632,58634,58637],{"class":38,"line":153},[36,58623,11660],{"class":163},[36,58625,54823],{"class":109},[36,58627,14003],{"class":163},[36,58629,54828],{"class":98},[36,58631,54831],{"class":55},[36,58633,621],{"class":98},[36,58635,58636],{"class":59},"'button'",[36,58638,627],{"class":98},[36,58640,58641,58644,58646,58648,58650,58652,58654],{"class":38,"line":191},[36,58642,58643],{"class":98},"    btn.",[36,58645,58245],{"class":55},[36,58647,621],{"class":98},[36,58649,58250],{"class":59},[36,58651,12874],{"class":98},[36,58653,54881],{"class":163},[36,58655,54884],{"class":98},[36,58657,58658,58661,58663,58665,58668,58670],{"class":38,"line":197},[36,58659,58660],{"class":163},"      const",[36,58662,2699],{"class":109},[36,58664,14003],{"class":163},[36,58666,58667],{"class":98}," Math.",[36,58669,58292],{"class":55},[36,58671,2435],{"class":98},[36,58673,58674,58677,58680],{"class":38,"line":217},[36,58675,58676],{"class":98},"      console.",[36,58678,58679],{"class":55},"log",[36,58681,634],{"class":98},[36,58683,58684],{"class":38,"line":223},[36,58685,33894],{"class":98},[36,58687,58688,58690,58692],{"class":38,"line":243},[36,58689,52849],{"class":98},[36,58691,52245],{"class":51733},[36,58693,188],{"class":98},[36,58695,58696,58698,58700],{"class":38,"line":250},[36,58697,52217],{"class":98},[36,58699,52232],{"class":51733},[36,58701,188],{"class":98},[36,58703,58704],{"class":38,"line":256},[36,58705,247],{"emptyLinePlaceholder":246},[36,58707,58708,58710,58712],{"class":38,"line":273},[36,58709,52217],{"class":98},[36,58711,51068],{"class":51733},[36,58713,188],{"class":98},[14,58715,58716],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,58718,58719],{},"常量不可以重新赋值",[14,58721,58722],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[26,58724,58726],{"className":51066,"code":58725,"language":51068,"meta":31,"style":31},"\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",[33,58727,58728,58738,58752,58756,58764,58778,58798,58810,58818,58822,58830,58842,58850,58861,58879,58895,58909,58917,58921,58929,58937,58941],{"__ignoreMap":31},[36,58729,58730,58732,58734,58736],{"class":38,"line":39},[36,58731,51730],{"class":98},[36,58733,51734],{"class":51733},[36,58735,51737],{"class":55},[36,58737,188],{"class":98},[36,58739,58740,58742,58744,58746,58748,58750],{"class":38,"line":46},[36,58741,179],{"class":98},[36,58743,51068],{"class":51733},[36,58745,51748],{"class":55},[36,58747,176],{"class":98},[36,58749,51753],{"class":59},[36,58751,188],{"class":98},[36,58753,58754],{"class":38,"line":52},[36,58755,247],{"emptyLinePlaceholder":246},[36,58757,58758,58760,58762],{"class":38,"line":66},[36,58759,179],{"class":98},[36,58761,51766],{"class":51733},[36,58763,188],{"class":98},[36,58765,58766,58768,58770,58772,58774,58776],{"class":38,"line":72},[36,58767,52576],{"class":98},[36,58769,51776],{"class":51733},[36,58771,51779],{"class":55},[36,58773,176],{"class":98},[36,58775,51784],{"class":59},[36,58777,188],{"class":98},[36,58779,58780,58782,58784,58786,58788,58790,58792,58794,58796],{"class":38,"line":82},[36,58781,52576],{"class":98},[36,58783,51776],{"class":51733},[36,58785,15359],{"class":55},[36,58787,176],{"class":98},[36,58789,51823],{"class":59},[36,58791,51803],{"class":55},[36,58793,176],{"class":98},[36,58795,51830],{"class":59},[36,58797,188],{"class":98},[36,58799,58800,58802,58804,58806,58808],{"class":38,"line":88},[36,58801,52576],{"class":98},[36,58803,51839],{"class":51733},[36,58805,51842],{"class":98},[36,58807,51839],{"class":51733},[36,58809,188],{"class":98},[36,58811,58812,58814,58816],{"class":38,"line":113},[36,58813,52217],{"class":98},[36,58815,51766],{"class":51733},[36,58817,188],{"class":98},[36,58819,58820],{"class":38,"line":119},[36,58821,247],{"emptyLinePlaceholder":246},[36,58823,58824,58826,58828],{"class":38,"line":131},[36,58825,179],{"class":98},[36,58827,52232],{"class":51733},[36,58829,188],{"class":98},[36,58831,58832,58834,58836,58838,58840],{"class":38,"line":137},[36,58833,52576],{"class":98},[36,58835,54319],{"class":51733},[36,58837,54325],{"class":98},[36,58839,54319],{"class":51733},[36,58841,188],{"class":98},[36,58843,58844,58846,58848],{"class":38,"line":147},[36,58845,52576],{"class":98},[36,58847,52245],{"class":51733},[36,58849,188],{"class":98},[36,58851,58852,58854,58856,58858],{"class":38,"line":153},[36,58853,11660],{"class":163},[36,58855,2699],{"class":109},[36,58857,14003],{"class":163},[36,58859,58860],{"class":109}," 10\n",[36,58862,58863,58865,58867,58869,58871,58873,58875,58877],{"class":38,"line":191},[36,58864,11660],{"class":163},[36,58866,54823],{"class":109},[36,58868,14003],{"class":163},[36,58870,54828],{"class":98},[36,58872,54831],{"class":55},[36,58874,621],{"class":98},[36,58876,58636],{"class":59},[36,58878,627],{"class":98},[36,58880,58881,58883,58885,58887,58889,58891,58893],{"class":38,"line":197},[36,58882,58643],{"class":98},[36,58884,58245],{"class":55},[36,58886,621],{"class":98},[36,58888,58250],{"class":59},[36,58890,12874],{"class":98},[36,58892,54881],{"class":163},[36,58894,54884],{"class":98},[36,58896,58897,58899,58901,58903,58905,58907],{"class":38,"line":217},[36,58898,58660],{"class":163},[36,58900,2699],{"class":109},[36,58902,14003],{"class":163},[36,58904,58667],{"class":98},[36,58906,58292],{"class":55},[36,58908,2435],{"class":98},[36,58910,58911,58913,58915],{"class":38,"line":223},[36,58912,58676],{"class":98},[36,58914,58679],{"class":55},[36,58916,634],{"class":98},[36,58918,58919],{"class":38,"line":243},[36,58920,33894],{"class":98},[36,58922,58923,58925,58927],{"class":38,"line":250},[36,58924,52849],{"class":98},[36,58926,52245],{"class":51733},[36,58928,188],{"class":98},[36,58930,58931,58933,58935],{"class":38,"line":256},[36,58932,52217],{"class":98},[36,58934,52232],{"class":51733},[36,58936,188],{"class":98},[36,58938,58939],{"class":38,"line":273},[36,58940,247],{"emptyLinePlaceholder":246},[36,58942,58943,58945,58947],{"class":38,"line":278},[36,58944,52217],{"class":98},[36,58946,51068],{"class":51733},[36,58948,188],{"class":98},[14,58950,58951],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[26,58953,58955],{"className":51066,"code":58954,"language":51068,"meta":31,"style":31},"\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",[33,58956,58957,58967,58981,58985,58993,59007,59027,59039,59047,59051,59059,59071,59079,59089,59107,59123,59136,59144,59148,59156,59164,59168],{"__ignoreMap":31},[36,58958,58959,58961,58963,58965],{"class":38,"line":39},[36,58960,51730],{"class":98},[36,58962,51734],{"class":51733},[36,58964,51737],{"class":55},[36,58966,188],{"class":98},[36,58968,58969,58971,58973,58975,58977,58979],{"class":38,"line":46},[36,58970,179],{"class":98},[36,58972,51068],{"class":51733},[36,58974,51748],{"class":55},[36,58976,176],{"class":98},[36,58978,51753],{"class":59},[36,58980,188],{"class":98},[36,58982,58983],{"class":38,"line":52},[36,58984,247],{"emptyLinePlaceholder":246},[36,58986,58987,58989,58991],{"class":38,"line":66},[36,58988,179],{"class":98},[36,58990,51766],{"class":51733},[36,58992,188],{"class":98},[36,58994,58995,58997,58999,59001,59003,59005],{"class":38,"line":72},[36,58996,52576],{"class":98},[36,58998,51776],{"class":51733},[36,59000,51779],{"class":55},[36,59002,176],{"class":98},[36,59004,51784],{"class":59},[36,59006,188],{"class":98},[36,59008,59009,59011,59013,59015,59017,59019,59021,59023,59025],{"class":38,"line":82},[36,59010,52576],{"class":98},[36,59012,51776],{"class":51733},[36,59014,15359],{"class":55},[36,59016,176],{"class":98},[36,59018,51823],{"class":59},[36,59020,51803],{"class":55},[36,59022,176],{"class":98},[36,59024,51830],{"class":59},[36,59026,188],{"class":98},[36,59028,59029,59031,59033,59035,59037],{"class":38,"line":88},[36,59030,52576],{"class":98},[36,59032,51839],{"class":51733},[36,59034,51842],{"class":98},[36,59036,51839],{"class":51733},[36,59038,188],{"class":98},[36,59040,59041,59043,59045],{"class":38,"line":113},[36,59042,52217],{"class":98},[36,59044,51766],{"class":51733},[36,59046,188],{"class":98},[36,59048,59049],{"class":38,"line":119},[36,59050,247],{"emptyLinePlaceholder":246},[36,59052,59053,59055,59057],{"class":38,"line":131},[36,59054,179],{"class":98},[36,59056,52232],{"class":51733},[36,59058,188],{"class":98},[36,59060,59061,59063,59065,59067,59069],{"class":38,"line":137},[36,59062,52576],{"class":98},[36,59064,54319],{"class":51733},[36,59066,54325],{"class":98},[36,59068,54319],{"class":51733},[36,59070,188],{"class":98},[36,59072,59073,59075,59077],{"class":38,"line":147},[36,59074,52576],{"class":98},[36,59076,52245],{"class":51733},[36,59078,188],{"class":98},[36,59080,59081,59083,59085,59087],{"class":38,"line":153},[36,59082,11660],{"class":163},[36,59084,2699],{"class":109},[36,59086,14003],{"class":163},[36,59088,58860],{"class":109},[36,59090,59091,59093,59095,59097,59099,59101,59103,59105],{"class":38,"line":191},[36,59092,11660],{"class":163},[36,59094,54823],{"class":109},[36,59096,14003],{"class":163},[36,59098,54828],{"class":98},[36,59100,54831],{"class":55},[36,59102,621],{"class":98},[36,59104,58636],{"class":59},[36,59106,627],{"class":98},[36,59108,59109,59111,59113,59115,59117,59119,59121],{"class":38,"line":197},[36,59110,58643],{"class":98},[36,59112,58245],{"class":55},[36,59114,621],{"class":98},[36,59116,58250],{"class":59},[36,59118,12874],{"class":98},[36,59120,54881],{"class":163},[36,59122,54884],{"class":98},[36,59124,59125,59128,59130,59132,59134],{"class":38,"line":217},[36,59126,59127],{"class":98},"      num ",[36,59129,176],{"class":163},[36,59131,58667],{"class":98},[36,59133,58292],{"class":55},[36,59135,2435],{"class":98},[36,59137,59138,59140,59142],{"class":38,"line":223},[36,59139,58676],{"class":98},[36,59141,58679],{"class":55},[36,59143,634],{"class":98},[36,59145,59146],{"class":38,"line":243},[36,59147,33894],{"class":98},[36,59149,59150,59152,59154],{"class":38,"line":250},[36,59151,52849],{"class":98},[36,59153,52245],{"class":51733},[36,59155,188],{"class":98},[36,59157,59158,59160,59162],{"class":38,"line":256},[36,59159,52217],{"class":98},[36,59161,52232],{"class":51733},[36,59163,188],{"class":98},[36,59165,59166],{"class":38,"line":273},[36,59167,247],{"emptyLinePlaceholder":246},[36,59169,59170,59172,59174],{"class":38,"line":278},[36,59171,52217],{"class":98},[36,59173,51068],{"class":51733},[36,59175,188],{"class":98},[14,59177,59178],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[588,59180,59182],{"id":59181},"_324-事件监听版本","3.2.4 事件监听版本",[14,59184,59185],{},[1941,59186],{"alt":31,"src":59187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,59189,59190],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,59192,59193],{},"这种方式会覆盖前边的事件监听:",[26,59195,59197],{"className":51066,"code":59196,"language":51068,"meta":31,"style":31},"\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",[33,59198,59199,59209,59223,59227,59235,59249,59269,59281,59289,59293,59301,59313,59321,59339,59353,59364,59368,59380,59390,59394,59402,59410,59414],{"__ignoreMap":31},[36,59200,59201,59203,59205,59207],{"class":38,"line":39},[36,59202,51730],{"class":98},[36,59204,51734],{"class":51733},[36,59206,51737],{"class":55},[36,59208,188],{"class":98},[36,59210,59211,59213,59215,59217,59219,59221],{"class":38,"line":46},[36,59212,179],{"class":98},[36,59214,51068],{"class":51733},[36,59216,51748],{"class":55},[36,59218,176],{"class":98},[36,59220,51753],{"class":59},[36,59222,188],{"class":98},[36,59224,59225],{"class":38,"line":52},[36,59226,247],{"emptyLinePlaceholder":246},[36,59228,59229,59231,59233],{"class":38,"line":66},[36,59230,179],{"class":98},[36,59232,51766],{"class":51733},[36,59234,188],{"class":98},[36,59236,59237,59239,59241,59243,59245,59247],{"class":38,"line":72},[36,59238,52576],{"class":98},[36,59240,51776],{"class":51733},[36,59242,51779],{"class":55},[36,59244,176],{"class":98},[36,59246,51784],{"class":59},[36,59248,188],{"class":98},[36,59250,59251,59253,59255,59257,59259,59261,59263,59265,59267],{"class":38,"line":82},[36,59252,52576],{"class":98},[36,59254,51776],{"class":51733},[36,59256,15359],{"class":55},[36,59258,176],{"class":98},[36,59260,51823],{"class":59},[36,59262,51803],{"class":55},[36,59264,176],{"class":98},[36,59266,51830],{"class":59},[36,59268,188],{"class":98},[36,59270,59271,59273,59275,59277,59279],{"class":38,"line":88},[36,59272,52576],{"class":98},[36,59274,51839],{"class":51733},[36,59276,51842],{"class":98},[36,59278,51839],{"class":51733},[36,59280,188],{"class":98},[36,59282,59283,59285,59287],{"class":38,"line":113},[36,59284,52217],{"class":98},[36,59286,51766],{"class":51733},[36,59288,188],{"class":98},[36,59290,59291],{"class":38,"line":119},[36,59292,247],{"emptyLinePlaceholder":246},[36,59294,59295,59297,59299],{"class":38,"line":131},[36,59296,179],{"class":98},[36,59298,52232],{"class":51733},[36,59300,188],{"class":98},[36,59302,59303,59305,59307,59309,59311],{"class":38,"line":137},[36,59304,52576],{"class":98},[36,59306,54319],{"class":51733},[36,59308,54325],{"class":98},[36,59310,54319],{"class":51733},[36,59312,188],{"class":98},[36,59314,59315,59317,59319],{"class":38,"line":147},[36,59316,52576],{"class":98},[36,59318,52245],{"class":51733},[36,59320,188],{"class":98},[36,59322,59323,59325,59327,59329,59331,59333,59335,59337],{"class":38,"line":153},[36,59324,11660],{"class":163},[36,59326,54823],{"class":109},[36,59328,14003],{"class":163},[36,59330,54828],{"class":98},[36,59332,54831],{"class":55},[36,59334,621],{"class":98},[36,59336,58636],{"class":59},[36,59338,627],{"class":98},[36,59340,59341,59343,59346,59348,59351],{"class":38,"line":191},[36,59342,58643],{"class":98},[36,59344,59345],{"class":55},"onclick",[36,59347,14003],{"class":163},[36,59349,59350],{"class":163}," function",[36,59352,54884],{"class":98},[36,59354,59355,59358,59360,59362],{"class":38,"line":197},[36,59356,59357],{"class":55},"      alert",[36,59359,621],{"class":98},[36,59361,1086],{"class":109},[36,59363,627],{"class":98},[36,59365,59366],{"class":38,"line":217},[36,59367,2646],{"class":98},[36,59369,59370,59372,59374,59376,59378],{"class":38,"line":223},[36,59371,58643],{"class":98},[36,59373,59345],{"class":55},[36,59375,14003],{"class":163},[36,59377,59350],{"class":163},[36,59379,54884],{"class":98},[36,59381,59382,59384,59386,59388],{"class":38,"line":243},[36,59383,59357],{"class":55},[36,59385,621],{"class":98},[36,59387,1363],{"class":109},[36,59389,627],{"class":98},[36,59391,59392],{"class":38,"line":250},[36,59393,2646],{"class":98},[36,59395,59396,59398,59400],{"class":38,"line":256},[36,59397,52849],{"class":98},[36,59399,52245],{"class":51733},[36,59401,188],{"class":98},[36,59403,59404,59406,59408],{"class":38,"line":273},[36,59405,52217],{"class":98},[36,59407,52232],{"class":51733},[36,59409,188],{"class":98},[36,59411,59412],{"class":38,"line":278},[36,59413,247],{"emptyLinePlaceholder":246},[36,59415,59416,59418,59420],{"class":38,"line":284},[36,59417,52217],{"class":98},[36,59419,51068],{"class":51733},[36,59421,188],{"class":98},[14,59423,59424],{},"只要点击就输出结果为22,前边11被覆盖了",[26,59426,59428],{"className":51066,"code":59427,"language":51068,"meta":31,"style":31},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[33,59429,59430,59435,59440,59444,59449,59454],{"__ignoreMap":31},[36,59431,59432],{"class":38,"line":39},[36,59433,59434],{"class":98},"  btn.addEventListener('click', function () {\n",[36,59436,59437],{"class":38,"line":46},[36,59438,59439],{"class":98},"      alert(11)\n",[36,59441,59442],{"class":38,"line":52},[36,59443,33894],{"class":98},[36,59445,59446],{"class":38,"line":66},[36,59447,59448],{"class":98},"    btn.addEventListener('click', function () {\n",[36,59450,59451],{"class":38,"line":72},[36,59452,59453],{"class":98},"      alert(22)\n",[36,59455,59456],{"class":38,"line":82},[36,59457,33894],{"class":98},[14,59459,59460],{},"点击第一次输出11,第二次点击为22",[588,59462,59464],{"id":59463},"_325-事件类型","3.2.5 事件类型",[14,59466,59467],{},[1941,59468],{"alt":31,"src":59469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22437,59471,59473],{"id":59472},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,59475,59476],{},"补充知识:",[14,59478,59479],{},"轮播图自动播放模块,可以使用",[14,59481,59482],{},"let timerId = setInterval(function () {",[14,59484,59485],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,59487,59488],{},"用js方法模拟进行点击事件,click必须加()",[14,59490,59491],{},"next.click()",[14,59493,59494],{},"}, 1000)",[14,59496,59497],{},[1941,59498],{"alt":31,"src":59499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[26,59501,59503],{"className":53499,"code":59502,"language":53501,"meta":31,"style":31},"\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",[33,59504,59505,59509,59519,59533,59537,59545,59560,59580,59600,59613,59621,59626,59631,59635,59639,59644,59649,59654,59659,59663,59667,59672,59677,59682,59686,59690,59695,59699,59704,59709,59713,59717,59722,59727,59732,59737,59742,59746,59750,59755,59760,59765,59770,59775,59779,59783,59788,59793,59798,59803,59808,59813,59818,59823,59828,59833,59837,59841,59846,59851,59855,59859,59864,59869,59873,59878,59883,59887,59891,59896,59900,59905,59910,59914,59919,59923,59927,59932,59937,59942,59947,59952,59957,59962,59966,59970,59974,59979,59984,59989,59994,59998,60006,60014,60018,60026,60041,60055,60076,60084,60098,60111,60126,60145,60157,60169,60181,60193,60205,60217,60229,60237,60252,60276,60300,60308,60316,60324,60332,60337,60342,60347,60352,60357,60362,60367,60372,60377,60382,60386,60391,60396,60401,60406,60411,60416,60421,60426,60431,60435,60440,60445,60450,60455,60460,60465,60470,60475,60480,60485,60490,60495,60499,60503,60508,60513,60518,60522,60527,60532,60537,60542,60547,60551,60556,60560,60564,60568,60572,60576,60580,60585,60590,60595,60600,60605,60610,60615,60620,60625,60629,60633,60638,60643,60648,60653,60658,60662,60667,60672,60677,60682,60687,60692,60696,60700,60705,60709,60714,60718,60723,60728,60733,60738,60743,60748,60752,60760,60768,60772],{"__ignoreMap":31},[36,59506,59507],{"class":38,"line":39},[36,59508,247],{"emptyLinePlaceholder":246},[36,59510,59511,59513,59515,59517],{"class":38,"line":46},[36,59512,51730],{"class":98},[36,59514,51734],{"class":163},[36,59516,51737],{"class":109},[36,59518,188],{"class":98},[36,59520,59521,59523,59525,59527,59529,59531],{"class":38,"line":52},[36,59522,179],{"class":98},[36,59524,51068],{"class":51733},[36,59526,51748],{"class":55},[36,59528,176],{"class":98},[36,59530,51753],{"class":59},[36,59532,188],{"class":98},[36,59534,59535],{"class":38,"line":66},[36,59536,247],{"emptyLinePlaceholder":246},[36,59538,59539,59541,59543],{"class":38,"line":72},[36,59540,179],{"class":98},[36,59542,51766],{"class":51733},[36,59544,188],{"class":98},[36,59546,59547,59549,59551,59553,59555,59557],{"class":38,"line":82},[36,59548,52576],{"class":98},[36,59550,51776],{"class":51733},[36,59552,51779],{"class":55},[36,59554,176],{"class":98},[36,59556,51784],{"class":59},[36,59558,59559],{"class":98}," \u002F>\n",[36,59561,59562,59564,59566,59568,59570,59572,59574,59576,59578],{"class":38,"line":88},[36,59563,52576],{"class":98},[36,59565,51776],{"class":51733},[36,59567,51795],{"class":55},[36,59569,176],{"class":98},[36,59571,51800],{"class":59},[36,59573,51803],{"class":55},[36,59575,176],{"class":98},[36,59577,51808],{"class":59},[36,59579,59559],{"class":98},[36,59581,59582,59584,59586,59588,59590,59592,59594,59596,59598],{"class":38,"line":113},[36,59583,52576],{"class":98},[36,59585,51776],{"class":51733},[36,59587,15359],{"class":55},[36,59589,176],{"class":98},[36,59591,51823],{"class":59},[36,59593,51803],{"class":55},[36,59595,176],{"class":98},[36,59597,51830],{"class":59},[36,59599,59559],{"class":98},[36,59601,59602,59604,59606,59609,59611],{"class":38,"line":119},[36,59603,52576],{"class":98},[36,59605,51839],{"class":51733},[36,59607,59608],{"class":98},">轮播图点击切换\u003C\u002F",[36,59610,51839],{"class":51733},[36,59612,188],{"class":98},[36,59614,59615,59617,59619],{"class":38,"line":131},[36,59616,52576],{"class":98},[36,59618,537],{"class":51733},[36,59620,188],{"class":98},[36,59622,59623],{"class":38,"line":137},[36,59624,59625],{"class":98},"    * {\n",[36,59627,59628],{"class":38,"line":147},[36,59629,59630],{"class":98},"      box-sizing: border-box;\n",[36,59632,59633],{"class":38,"line":153},[36,59634,2646],{"class":98},[36,59636,59637],{"class":38,"line":191},[36,59638,247],{"emptyLinePlaceholder":246},[36,59640,59641],{"class":38,"line":197},[36,59642,59643],{"class":98},"    .slider {\n",[36,59645,59646],{"class":38,"line":217},[36,59647,59648],{"class":98},"      width: 560px;\n",[36,59650,59651],{"class":38,"line":223},[36,59652,59653],{"class":98},"      height: 400px;\n",[36,59655,59656],{"class":38,"line":243},[36,59657,59658],{"class":98},"      overflow: hidden;\n",[36,59660,59661],{"class":38,"line":250},[36,59662,2646],{"class":98},[36,59664,59665],{"class":38,"line":256},[36,59666,247],{"emptyLinePlaceholder":246},[36,59668,59669],{"class":38,"line":273},[36,59670,59671],{"class":98},"    .slider-wrapper {\n",[36,59673,59674],{"class":38,"line":278},[36,59675,59676],{"class":98},"      width: 100%;\n",[36,59678,59679],{"class":38,"line":284},[36,59680,59681],{"class":98},"      height: 320px;\n",[36,59683,59684],{"class":38,"line":315},[36,59685,2646],{"class":98},[36,59687,59688],{"class":38,"line":320},[36,59689,247],{"emptyLinePlaceholder":246},[36,59691,59692],{"class":38,"line":326},[36,59693,59694],{"class":98},"    .slider-wrapper img {\n",[36,59696,59697],{"class":38,"line":343},[36,59698,59676],{"class":98},[36,59700,59701],{"class":38,"line":348},[36,59702,59703],{"class":98},"      height: 100%;\n",[36,59705,59706],{"class":38,"line":354},[36,59707,59708],{"class":98},"      display: block;\n",[36,59710,59711],{"class":38,"line":370},[36,59712,2646],{"class":98},[36,59714,59715],{"class":38,"line":375},[36,59716,247],{"emptyLinePlaceholder":246},[36,59718,59719],{"class":38,"line":381},[36,59720,59721],{"class":98},"    .slider-footer {\n",[36,59723,59724],{"class":38,"line":399},[36,59725,59726],{"class":98},"      height: 80px;\n",[36,59728,59729],{"class":38,"line":404},[36,59730,59731],{"class":98},"      background-color: rgb(100, 67, 68);\n",[36,59733,59734],{"class":38,"line":410},[36,59735,59736],{"class":98},"      padding: 12px 12px 0 12px;\n",[36,59738,59739],{"class":38,"line":423},[36,59740,59741],{"class":98},"      position: relative;\n",[36,59743,59744],{"class":38,"line":436},[36,59745,2646],{"class":98},[36,59747,59748],{"class":38,"line":441},[36,59749,247],{"emptyLinePlaceholder":246},[36,59751,59752],{"class":38,"line":447},[36,59753,59754],{"class":98},"    .slider-footer .toggle {\n",[36,59756,59757],{"class":38,"line":465},[36,59758,59759],{"class":98},"      position: absolute;\n",[36,59761,59762],{"class":38,"line":470},[36,59763,59764],{"class":98},"      right: 0;\n",[36,59766,59767],{"class":38,"line":476},[36,59768,59769],{"class":98},"      top: 12px;\n",[36,59771,59772],{"class":38,"line":496},[36,59773,59774],{"class":98},"      display: flex;\n",[36,59776,59777],{"class":38,"line":501},[36,59778,2646],{"class":98},[36,59780,59781],{"class":38,"line":507},[36,59782,247],{"emptyLinePlaceholder":246},[36,59784,59785],{"class":38,"line":517},[36,59786,59787],{"class":98},"    .slider-footer .toggle button {\n",[36,59789,59790],{"class":38,"line":522},[36,59791,59792],{"class":98},"      margin-right: 12px;\n",[36,59794,59795],{"class":38,"line":528},[36,59796,59797],{"class":98},"      width: 28px;\n",[36,59799,59800],{"class":38,"line":10203},[36,59801,59802],{"class":98},"      height: 28px;\n",[36,59804,59805],{"class":38,"line":10227},[36,59806,59807],{"class":98},"      appearance: none;\n",[36,59809,59810],{"class":38,"line":10232},[36,59811,59812],{"class":98},"      border: none;\n",[36,59814,59815],{"class":38,"line":10237},[36,59816,59817],{"class":98},"      background: rgba(255, 255, 255, 0.1);\n",[36,59819,59820],{"class":38,"line":10242},[36,59821,59822],{"class":98},"      color: #fff;\n",[36,59824,59825],{"class":38,"line":10251},[36,59826,59827],{"class":98},"      border-radius: 4px;\n",[36,59829,59830],{"class":38,"line":10256},[36,59831,59832],{"class":98},"      cursor: pointer;\n",[36,59834,59835],{"class":38,"line":10262},[36,59836,2646],{"class":98},[36,59838,59839],{"class":38,"line":10283},[36,59840,247],{"emptyLinePlaceholder":246},[36,59842,59843],{"class":38,"line":10289},[36,59844,59845],{"class":98},"    .slider-footer .toggle button:hover {\n",[36,59847,59848],{"class":38,"line":10303},[36,59849,59850],{"class":98},"      background: rgba(255, 255, 255, 0.2);\n",[36,59852,59853],{"class":38,"line":10309},[36,59854,2646],{"class":98},[36,59856,59857],{"class":38,"line":10336},[36,59858,247],{"emptyLinePlaceholder":246},[36,59860,59861],{"class":38,"line":10345},[36,59862,59863],{"class":98},"    .slider-footer p {\n",[36,59865,59866],{"class":38,"line":10351},[36,59867,59868],{"class":98},"      margin: 0;\n",[36,59870,59871],{"class":38,"line":10359},[36,59872,59822],{"class":98},[36,59874,59875],{"class":38,"line":10364},[36,59876,59877],{"class":98},"      font-size: 18px;\n",[36,59879,59880],{"class":38,"line":17043},[36,59881,59882],{"class":98},"      margin-bottom: 10px;\n",[36,59884,59885],{"class":38,"line":17049},[36,59886,2646],{"class":98},[36,59888,59889],{"class":38,"line":17072},[36,59890,247],{"emptyLinePlaceholder":246},[36,59892,59893],{"class":38,"line":17078},[36,59894,59895],{"class":98},"    .slider-indicator {\n",[36,59897,59898],{"class":38,"line":17101},[36,59899,59868],{"class":98},[36,59901,59902],{"class":38,"line":17115},[36,59903,59904],{"class":98},"      padding: 0;\n",[36,59906,59907],{"class":38,"line":17135},[36,59908,59909],{"class":98},"      list-style: none;\n",[36,59911,59912],{"class":38,"line":17141},[36,59913,59774],{"class":98},[36,59915,59916],{"class":38,"line":17152},[36,59917,59918],{"class":98},"      align-items: center;\n",[36,59920,59921],{"class":38,"line":17175},[36,59922,2646],{"class":98},[36,59924,59925],{"class":38,"line":17197},[36,59926,247],{"emptyLinePlaceholder":246},[36,59928,59929],{"class":38,"line":17202},[36,59930,59931],{"class":98},"    .slider-indicator li {\n",[36,59933,59934],{"class":38,"line":17208},[36,59935,59936],{"class":98},"      width: 8px;\n",[36,59938,59939],{"class":38,"line":17222},[36,59940,59941],{"class":98},"      height: 8px;\n",[36,59943,59944],{"class":38,"line":17235},[36,59945,59946],{"class":98},"      margin: 4px;\n",[36,59948,59949],{"class":38,"line":17240},[36,59950,59951],{"class":98},"      border-radius: 50%;\n",[36,59953,59954],{"class":38,"line":17254},[36,59955,59956],{"class":98},"      background: #fff;\n",[36,59958,59959],{"class":38,"line":17259},[36,59960,59961],{"class":98},"      opacity: 0.4;\n",[36,59963,59964],{"class":38,"line":17265},[36,59965,59832],{"class":98},[36,59967,59968],{"class":38,"line":17270},[36,59969,2646],{"class":98},[36,59971,59972],{"class":38,"line":17284},[36,59973,247],{"emptyLinePlaceholder":246},[36,59975,59976],{"class":38,"line":17289},[36,59977,59978],{"class":98},"    .slider-indicator li.active {\n",[36,59980,59981],{"class":38,"line":17294},[36,59982,59983],{"class":98},"      width: 12px;\n",[36,59985,59986],{"class":38,"line":17308},[36,59987,59988],{"class":98},"      height: 12px;\n",[36,59990,59991],{"class":38,"line":17320},[36,59992,59993],{"class":98},"      opacity: 1;\n",[36,59995,59996],{"class":38,"line":17325},[36,59997,2646],{"class":98},[36,59999,60000,60002,60004],{"class":38,"line":17338},[36,60001,52849],{"class":98},[36,60003,537],{"class":51733},[36,60005,188],{"class":98},[36,60007,60008,60010,60012],{"class":38,"line":17343},[36,60009,52217],{"class":98},[36,60011,51766],{"class":51733},[36,60013,188],{"class":98},[36,60015,60016],{"class":38,"line":17348},[36,60017,247],{"emptyLinePlaceholder":246},[36,60019,60020,60022,60024],{"class":38,"line":17353},[36,60021,179],{"class":98},[36,60023,52232],{"class":51733},[36,60025,188],{"class":98},[36,60027,60028,60030,60032,60034,60036,60039],{"class":38,"line":17366},[36,60029,52576],{"class":98},[36,60031,52043],{"class":51733},[36,60033,53918],{"class":55},[36,60035,176],{"class":98},[36,60037,60038],{"class":59},"\"slider\"",[36,60040,188],{"class":98},[36,60042,60043,60045,60047,60049,60051,60053],{"class":38,"line":17371},[36,60044,51773],{"class":98},[36,60046,52043],{"class":51733},[36,60048,53918],{"class":55},[36,60050,176],{"class":98},[36,60052,55659],{"class":59},[36,60054,188],{"class":98},[36,60056,60057,60059,60061,60063,60065,60068,60070,60072,60074],{"class":38,"line":33066},[36,60058,55666],{"class":98},[36,60060,1941],{"class":51733},[36,60062,55671],{"class":55},[36,60064,176],{"class":98},[36,60066,60067],{"class":59},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[36,60069,55679],{"class":55},[36,60071,176],{"class":98},[36,60073,8103],{"class":59},[36,60075,59559],{"class":98},[36,60077,60078,60080,60082],{"class":38,"line":33072},[36,60079,52208],{"class":98},[36,60081,52043],{"class":51733},[36,60083,188],{"class":98},[36,60085,60086,60088,60090,60092,60094,60096],{"class":38,"line":33078},[36,60087,51773],{"class":98},[36,60089,52043],{"class":51733},[36,60091,53918],{"class":55},[36,60093,176],{"class":98},[36,60095,55706],{"class":59},[36,60097,188],{"class":98},[36,60099,60100,60102,60104,60107,60109],{"class":38,"line":33084},[36,60101,55666],{"class":98},[36,60103,14],{"class":51733},[36,60105,60106],{"class":98},">对人类来说会不会太超前了？\u003C\u002F",[36,60108,14],{"class":51733},[36,60110,188],{"class":98},[36,60112,60113,60115,60117,60119,60121,60124],{"class":38,"line":33090},[36,60114,55666],{"class":98},[36,60116,1618],{"class":51733},[36,60118,53918],{"class":55},[36,60120,176],{"class":98},[36,60122,60123],{"class":59},"\"slider-indicator\"",[36,60125,188],{"class":98},[36,60127,60128,60130,60132,60134,60136,60139,60141,60143],{"class":38,"line":33101},[36,60129,55734],{"class":98},[36,60131,574],{"class":51733},[36,60133,53918],{"class":55},[36,60135,176],{"class":98},[36,60137,60138],{"class":59},"\"active\"",[36,60140,55746],{"class":98},[36,60142,574],{"class":51733},[36,60144,188],{"class":98},[36,60146,60147,60149,60151,60153,60155],{"class":38,"line":33107},[36,60148,55734],{"class":98},[36,60150,574],{"class":51733},[36,60152,55746],{"class":98},[36,60154,574],{"class":51733},[36,60156,188],{"class":98},[36,60158,60159,60161,60163,60165,60167],{"class":38,"line":33127},[36,60160,55734],{"class":98},[36,60162,574],{"class":51733},[36,60164,55746],{"class":98},[36,60166,574],{"class":51733},[36,60168,188],{"class":98},[36,60170,60171,60173,60175,60177,60179],{"class":38,"line":33133},[36,60172,55734],{"class":98},[36,60174,574],{"class":51733},[36,60176,55746],{"class":98},[36,60178,574],{"class":51733},[36,60180,188],{"class":98},[36,60182,60183,60185,60187,60189,60191],{"class":38,"line":33144},[36,60184,55734],{"class":98},[36,60186,574],{"class":51733},[36,60188,55746],{"class":98},[36,60190,574],{"class":51733},[36,60192,188],{"class":98},[36,60194,60195,60197,60199,60201,60203],{"class":38,"line":33150},[36,60196,55734],{"class":98},[36,60198,574],{"class":51733},[36,60200,55746],{"class":98},[36,60202,574],{"class":51733},[36,60204,188],{"class":98},[36,60206,60207,60209,60211,60213,60215],{"class":38,"line":33156},[36,60208,55734],{"class":98},[36,60210,574],{"class":51733},[36,60212,55746],{"class":98},[36,60214,574],{"class":51733},[36,60216,188],{"class":98},[36,60218,60219,60221,60223,60225,60227],{"class":38,"line":33162},[36,60220,55734],{"class":98},[36,60222,574],{"class":51733},[36,60224,55746],{"class":98},[36,60226,574],{"class":51733},[36,60228,188],{"class":98},[36,60230,60231,60233,60235],{"class":38,"line":33168},[36,60232,55839],{"class":98},[36,60234,1618],{"class":51733},[36,60236,188],{"class":98},[36,60238,60239,60241,60243,60245,60247,60250],{"class":38,"line":33174},[36,60240,55666],{"class":98},[36,60242,52043],{"class":51733},[36,60244,53918],{"class":55},[36,60246,176],{"class":98},[36,60248,60249],{"class":59},"\"toggle\"",[36,60251,188],{"class":98},[36,60253,60254,60256,60258,60260,60262,60265,60267,60270,60272,60274],{"class":38,"line":33180},[36,60255,55734],{"class":98},[36,60257,54319],{"class":51733},[36,60259,53918],{"class":55},[36,60261,176],{"class":98},[36,60263,60264],{"class":59},"\"prev\"",[36,60266,173],{"class":98},[36,60268,60269],{"class":109},"&lt;",[36,60271,52217],{"class":98},[36,60273,54319],{"class":51733},[36,60275,188],{"class":98},[36,60277,60278,60280,60282,60284,60286,60289,60291,60294,60296,60298],{"class":38,"line":33186},[36,60279,55734],{"class":98},[36,60281,54319],{"class":51733},[36,60283,53918],{"class":55},[36,60285,176],{"class":98},[36,60287,60288],{"class":59},"\"next\"",[36,60290,173],{"class":98},[36,60292,60293],{"class":109},"&gt;",[36,60295,52217],{"class":98},[36,60297,54319],{"class":51733},[36,60299,188],{"class":98},[36,60301,60302,60304,60306],{"class":38,"line":33206},[36,60303,55839],{"class":98},[36,60305,52043],{"class":51733},[36,60307,188],{"class":98},[36,60309,60310,60312,60314],{"class":38,"line":33212},[36,60311,52208],{"class":98},[36,60313,52043],{"class":51733},[36,60315,188],{"class":98},[36,60317,60318,60320,60322],{"class":38,"line":33228},[36,60319,52849],{"class":98},[36,60321,52043],{"class":51733},[36,60323,188],{"class":98},[36,60325,60326,60328,60330],{"class":38,"line":33234},[36,60327,52576],{"class":98},[36,60329,52245],{"class":51733},[36,60331,188],{"class":98},[36,60333,60334],{"class":38,"line":33248},[36,60335,60336],{"class":98},"    \u002F\u002F 1. 初始数据\n",[36,60338,60339],{"class":38,"line":33254},[36,60340,60341],{"class":98},"    const data = [\n",[36,60343,60344],{"class":38,"line":33269},[36,60345,60346],{"class":98},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[36,60348,60349],{"class":38,"line":33275},[36,60350,60351],{"class":98},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[36,60353,60354],{"class":38,"line":33284},[36,60355,60356],{"class":98},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[36,60358,60359],{"class":38,"line":33290},[36,60360,60361],{"class":98},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[36,60363,60364],{"class":38,"line":33299},[36,60365,60366],{"class":98},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[36,60368,60369],{"class":38,"line":33305},[36,60370,60371],{"class":98},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[36,60373,60374],{"class":38,"line":33311},[36,60375,60376],{"class":98},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[36,60378,60379],{"class":38,"line":33320},[36,60380,60381],{"class":98},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[36,60383,60384],{"class":38,"line":33326},[36,60385,53541],{"class":98},[36,60387,60388],{"class":38,"line":33337},[36,60389,60390],{"class":98},"    \u002F\u002F 获取元素\n",[36,60392,60393],{"class":38,"line":33343},[36,60394,60395],{"class":98},"    const img = document.querySelector('.slider-wrapper img')\n",[36,60397,60398],{"class":38,"line":33362},[36,60399,60400],{"class":98},"    const p = document.querySelector('.slider-footer p')\n",[36,60402,60403],{"class":38,"line":33368},[36,60404,60405],{"class":98},"    const footer = document.querySelector('.slider-footer')\n",[36,60407,60408],{"class":38,"line":33379},[36,60409,60410],{"class":98},"    \u002F\u002F 1. 右按钮业务\n",[36,60412,60413],{"class":38,"line":33385},[36,60414,60415],{"class":98},"    \u002F\u002F 1.1 获取右侧按钮 \n",[36,60417,60418],{"class":38,"line":33405},[36,60419,60420],{"class":98},"    const next = document.querySelector('.next')\n",[36,60422,60423],{"class":38,"line":33421},[36,60424,60425],{"class":98},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[36,60427,60428],{"class":38,"line":33427},[36,60429,60430],{"class":98},"    \u002F\u002F 1.2 注册点击事件\n",[36,60432,60433],{"class":38,"line":33441},[36,60434,247],{"emptyLinePlaceholder":246},[36,60436,60437],{"class":38,"line":33447},[36,60438,60439],{"class":98},"    next.addEventListener('click', function () {\n",[36,60441,60442],{"class":38,"line":33453},[36,60443,60444],{"class":98},"      \u002F\u002F console.log(11)\n",[36,60446,60447],{"class":38,"line":33464},[36,60448,60449],{"class":98},"      i++\n",[36,60451,60452],{"class":38,"line":33470},[36,60453,60454],{"class":98},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[36,60456,60457],{"class":38,"line":33476},[36,60458,60459],{"class":98},"      \u002F\u002F if (i >= 8) {\n",[36,60461,60462],{"class":38,"line":33486},[36,60463,60464],{"class":98},"      \u002F\u002F   i = 0\n",[36,60466,60467],{"class":38,"line":33492},[36,60468,60469],{"class":98},"      \u002F\u002F }\n",[36,60471,60472],{"class":38,"line":33503},[36,60473,60474],{"class":98},"      i = i >= data.length ? 0 : i\n",[36,60476,60477],{"class":38,"line":33509},[36,60478,60479],{"class":98},"      \u002F\u002F 1.3 得到对应的对象\n",[36,60481,60482],{"class":38,"line":33519},[36,60483,60484],{"class":98},"      \u002F\u002F console.log(data[i])\n",[36,60486,60487],{"class":38,"line":33524},[36,60488,60489],{"class":98},"      \u002F\u002F 调用函数\n",[36,60491,60492],{"class":38,"line":33530},[36,60493,60494],{"class":98},"      toggle()\n",[36,60496,60497],{"class":38,"line":33579},[36,60498,33894],{"class":98},[36,60500,60501],{"class":38,"line":33626},[36,60502,247],{"emptyLinePlaceholder":246},[36,60504,60505],{"class":38,"line":33631},[36,60506,60507],{"class":98},"    \u002F\u002F 2. 左侧按钮业务\n",[36,60509,60510],{"class":38,"line":33637},[36,60511,60512],{"class":98},"    \u002F\u002F 2.1 获取左侧按钮 \n",[36,60514,60515],{"class":38,"line":33656},[36,60516,60517],{"class":98},"    const prev = document.querySelector('.prev')\n",[36,60519,60520],{"class":38,"line":33662},[36,60521,60430],{"class":98},[36,60523,60524],{"class":38,"line":33682},[36,60525,60526],{"class":98},"    prev.addEventListener('click', function () {\n",[36,60528,60529],{"class":38,"line":33688},[36,60530,60531],{"class":98},"      i--\n",[36,60533,60534],{"class":38,"line":33694},[36,60535,60536],{"class":98},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[36,60538,60539],{"class":38,"line":33704},[36,60540,60541],{"class":98},"      \u002F\u002F if (i \u003C 0) {\n",[36,60543,60544],{"class":38,"line":33709},[36,60545,60546],{"class":98},"      \u002F\u002F   i = 7\n",[36,60548,60549],{"class":38,"line":33715},[36,60550,60469],{"class":98},[36,60552,60553],{"class":38,"line":33731},[36,60554,60555],{"class":98},"      i = i \u003C 0 ? data.length - 1 : i\n",[36,60557,60558],{"class":38,"line":33776},[36,60559,60479],{"class":98},[36,60561,60562],{"class":38,"line":33782},[36,60563,60484],{"class":98},[36,60565,60566],{"class":38,"line":33788},[36,60567,60489],{"class":98},[36,60569,60570],{"class":38,"line":33794},[36,60571,60494],{"class":98},[36,60573,60574],{"class":38,"line":33805},[36,60575,33894],{"class":98},[36,60577,60578],{"class":38,"line":33811},[36,60579,247],{"emptyLinePlaceholder":246},[36,60581,60582],{"class":38,"line":33817},[36,60583,60584],{"class":98},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[36,60586,60587],{"class":38,"line":33823},[36,60588,60589],{"class":98},"    function toggle() {\n",[36,60591,60592],{"class":38,"line":33841},[36,60593,60594],{"class":98},"      \u002F\u002F 1.4 渲染对应的数据\n",[36,60596,60597],{"class":38,"line":33855},[36,60598,60599],{"class":98},"      img.src = data[i].url\n",[36,60601,60602],{"class":38,"line":33864},[36,60603,60604],{"class":98},"      p.innerHTML = data[i].title\n",[36,60606,60607],{"class":38,"line":33873},[36,60608,60609],{"class":98},"      footer.style.backgroundColor = data[i].color\n",[36,60611,60612],{"class":38,"line":33882},[36,60613,60614],{"class":98},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[36,60616,60617],{"class":38,"line":33891},[36,60618,60619],{"class":98},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[36,60621,60622],{"class":38,"line":33897},[36,60623,60624],{"class":98},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[36,60626,60627],{"class":38,"line":33903},[36,60628,2646],{"class":98},[36,60630,60631],{"class":38,"line":33911},[36,60632,247],{"emptyLinePlaceholder":246},[36,60634,60635],{"class":38,"line":33916},[36,60636,60637],{"class":98},"    \u002F\u002F 3. 自动播放模块\n",[36,60639,60640],{"class":38,"line":33922},[36,60641,60642],{"class":98},"    let timerId = setInterval(function () {\n",[36,60644,60645],{"class":38,"line":33933},[36,60646,60647],{"class":98},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[36,60649,60650],{"class":38,"line":33939},[36,60651,60652],{"class":98},"      next.click()\n",[36,60654,60655],{"class":38,"line":33959},[36,60656,60657],{"class":98},"    }, 1000)\n",[36,60659,60660],{"class":38,"line":33965},[36,60661,247],{"emptyLinePlaceholder":246},[36,60663,60664],{"class":38,"line":33971},[36,60665,60666],{"class":98},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[36,60668,60669],{"class":38,"line":33977},[36,60670,60671],{"class":98},"    const slider = document.querySelector('.slider')\n",[36,60673,60674],{"class":38,"line":33994},[36,60675,60676],{"class":98},"    \u002F\u002F 注册事件\n",[36,60678,60679],{"class":38,"line":34000},[36,60680,60681],{"class":98},"    slider.addEventListener('mouseenter', function () {\n",[36,60683,60684],{"class":38,"line":34006},[36,60685,60686],{"class":98},"      \u002F\u002F 停止定时器\n",[36,60688,60689],{"class":38,"line":34012},[36,60690,60691],{"class":98},"      clearInterval(timerId)\n",[36,60693,60694],{"class":38,"line":34018},[36,60695,33894],{"class":98},[36,60697,60698],{"class":38,"line":34024},[36,60699,247],{"emptyLinePlaceholder":246},[36,60701,60702],{"class":38,"line":34051},[36,60703,60704],{"class":98},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[36,60706,60707],{"class":38,"line":34075},[36,60708,60676],{"class":98},[36,60710,60711],{"class":38,"line":34081},[36,60712,60713],{"class":98},"    slider.addEventListener('mouseleave', function () {\n",[36,60715,60716],{"class":38,"line":34087},[36,60717,60686],{"class":98},[36,60719,60720],{"class":38,"line":34093},[36,60721,60722],{"class":98},"      if (timerId) clearInterval(timerId)\n",[36,60724,60725],{"class":38,"line":34104},[36,60726,60727],{"class":98},"      \u002F\u002F 开启定时器\n",[36,60729,60730],{"class":38,"line":34115},[36,60731,60732],{"class":98},"      timerId = setInterval(function () {\n",[36,60734,60735],{"class":38,"line":34121},[36,60736,60737],{"class":98},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[36,60739,60740],{"class":38,"line":34138},[36,60741,60742],{"class":98},"        next.click()\n",[36,60744,60745],{"class":38,"line":34161},[36,60746,60747],{"class":98},"      }, 1000)\n",[36,60749,60750],{"class":38,"line":34184},[36,60751,33894],{"class":98},[36,60753,60754,60756,60758],{"class":38,"line":34190},[36,60755,52849],{"class":98},[36,60757,52245],{"class":51733},[36,60759,188],{"class":98},[36,60761,60762,60764,60766],{"class":38,"line":34195},[36,60763,52217],{"class":98},[36,60765,52232],{"class":51733},[36,60767,188],{"class":98},[36,60769,60770],{"class":38,"line":34204},[36,60771,247],{"emptyLinePlaceholder":246},[36,60773,60774,60776,60778],{"class":38,"line":34214},[36,60775,52217],{"class":98},[36,60777,51068],{"class":51733},[36,60779,188],{"class":98},[22437,60781,60783],{"id":60782},"_3252-焦点事件","3.2.5.2 焦点事件",[14,60785,60786],{},"小米搜索框案例：",[26,60788,60790],{"className":51066,"code":60789,"language":51068,"meta":31,"style":31},"\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",[33,60791,60792,60802,60816,60820,60828,60842,60862,60882,60894,60902,60908,60918,60928,60940,60944,60948,60955,60959,60970,60974,60978,60985,60996,61009,61023,61027,61031,61040,61052,61064,61078,61091,61104,61122,61133,61137,61141,61150,61167,61171,61175,61182,61192,61202,61213,61226,61238,61254,61265,61277,61281,61285,61293,61304,61321,61333,61345,61356,61360,61364,61375,61386,61390,61398,61402,61410,61414,61422,61437,61460,61475,61506,61533,61560,61587,61614,61641,61668,61677,61685,61693,61698,61718,61738,61743,61748,61766,61771,61781,61786,61800,61805,61810,61827,61836,61848,61852,61860,61868,61872],{"__ignoreMap":31},[36,60793,60794,60796,60798,60800],{"class":38,"line":39},[36,60795,51730],{"class":98},[36,60797,51734],{"class":51733},[36,60799,51737],{"class":55},[36,60801,188],{"class":98},[36,60803,60804,60806,60808,60810,60812,60814],{"class":38,"line":46},[36,60805,179],{"class":98},[36,60807,51068],{"class":51733},[36,60809,51748],{"class":55},[36,60811,176],{"class":98},[36,60813,51753],{"class":59},[36,60815,188],{"class":98},[36,60817,60818],{"class":38,"line":52},[36,60819,247],{"emptyLinePlaceholder":246},[36,60821,60822,60824,60826],{"class":38,"line":66},[36,60823,179],{"class":98},[36,60825,51766],{"class":51733},[36,60827,188],{"class":98},[36,60829,60830,60832,60834,60836,60838,60840],{"class":38,"line":72},[36,60831,51773],{"class":98},[36,60833,51776],{"class":51733},[36,60835,51779],{"class":55},[36,60837,176],{"class":98},[36,60839,51784],{"class":59},[36,60841,188],{"class":98},[36,60843,60844,60846,60848,60850,60852,60854,60856,60858,60860],{"class":38,"line":82},[36,60845,51773],{"class":98},[36,60847,51776],{"class":51733},[36,60849,51795],{"class":55},[36,60851,176],{"class":98},[36,60853,51800],{"class":59},[36,60855,51803],{"class":55},[36,60857,176],{"class":98},[36,60859,51808],{"class":59},[36,60861,188],{"class":98},[36,60863,60864,60866,60868,60870,60872,60874,60876,60878,60880],{"class":38,"line":88},[36,60865,51773],{"class":98},[36,60867,51776],{"class":51733},[36,60869,15359],{"class":55},[36,60871,176],{"class":98},[36,60873,51823],{"class":59},[36,60875,51803],{"class":55},[36,60877,176],{"class":98},[36,60879,51830],{"class":59},[36,60881,188],{"class":98},[36,60883,60884,60886,60888,60890,60892],{"class":38,"line":113},[36,60885,51773],{"class":98},[36,60887,51839],{"class":51733},[36,60889,51842],{"class":98},[36,60891,51839],{"class":51733},[36,60893,188],{"class":98},[36,60895,60896,60898,60900],{"class":38,"line":119},[36,60897,51773],{"class":98},[36,60899,537],{"class":51733},[36,60901,188],{"class":98},[36,60903,60904,60906],{"class":38,"line":131},[36,60905,51859],{"class":51733},[36,60907,16011],{"class":98},[36,60909,60910,60912,60914,60916],{"class":38,"line":137},[36,60911,51866],{"class":109},[36,60913,51869],{"class":98},[36,60915,807],{"class":109},[36,60917,1772],{"class":98},[36,60919,60920,60922,60924,60926],{"class":38,"line":147},[36,60921,51878],{"class":109},[36,60923,51869],{"class":98},[36,60925,807],{"class":109},[36,60927,1772],{"class":98},[36,60929,60930,60933,60935,60938],{"class":38,"line":153},[36,60931,60932],{"class":109},"            box-sizing",[36,60934,51869],{"class":98},[36,60936,60937],{"class":109},"border-box",[36,60939,1772],{"class":98},[36,60941,60942],{"class":38,"line":191},[36,60943,2987],{"class":98},[36,60945,60946],{"class":38,"line":197},[36,60947,247],{"emptyLinePlaceholder":246},[36,60949,60950,60953],{"class":38,"line":217},[36,60951,60952],{"class":51733},"        ul",[36,60954,16011],{"class":98},[36,60956,60957],{"class":38,"line":223},[36,60958,247],{"emptyLinePlaceholder":246},[36,60960,60961,60964,60966,60968],{"class":38,"line":243},[36,60962,60963],{"class":109},"            list-style",[36,60965,51869],{"class":98},[36,60967,55169],{"class":109},[36,60969,1772],{"class":98},[36,60971,60972],{"class":38,"line":250},[36,60973,2987],{"class":98},[36,60975,60976],{"class":38,"line":256},[36,60977,247],{"emptyLinePlaceholder":246},[36,60979,60980,60983],{"class":38,"line":273},[36,60981,60982],{"class":55},"        .mi",[36,60984,16011],{"class":98},[36,60986,60987,60990,60992,60994],{"class":38,"line":278},[36,60988,60989],{"class":109},"            position",[36,60991,51869],{"class":98},[36,60993,55196],{"class":109},[36,60995,1772],{"class":98},[36,60997,60998,61000,61002,61005,61007],{"class":38,"line":284},[36,60999,51916],{"class":109},[36,61001,51869],{"class":98},[36,61003,61004],{"class":109},"223",[36,61006,51924],{"class":163},[36,61008,1772],{"class":98},[36,61010,61011,61013,61015,61017,61019,61021],{"class":38,"line":315},[36,61012,51866],{"class":109},[36,61014,51869],{"class":98},[36,61016,926],{"class":109},[36,61018,51924],{"class":163},[36,61020,51988],{"class":109},[36,61022,1772],{"class":98},[36,61024,61025],{"class":38,"line":320},[36,61026,2987],{"class":98},[36,61028,61029],{"class":38,"line":326},[36,61030,247],{"emptyLinePlaceholder":246},[36,61032,61033,61035,61038],{"class":38,"line":343},[36,61034,60982],{"class":55},[36,61036,61037],{"class":51733}," input",[36,61039,16011],{"class":98},[36,61041,61042,61044,61046,61048,61050],{"class":38,"line":348},[36,61043,51916],{"class":109},[36,61045,51869],{"class":98},[36,61047,61004],{"class":109},[36,61049,51924],{"class":163},[36,61051,1772],{"class":98},[36,61053,61054,61056,61058,61060,61062],{"class":38,"line":354},[36,61055,51931],{"class":109},[36,61057,51869],{"class":98},[36,61059,1221],{"class":109},[36,61061,51924],{"class":163},[36,61063,1772],{"class":98},[36,61065,61066,61068,61070,61072,61074,61076],{"class":38,"line":370},[36,61067,51878],{"class":109},[36,61069,51869],{"class":98},[36,61071,807],{"class":109},[36,61073,2497],{"class":109},[36,61075,51924],{"class":163},[36,61077,1772],{"class":98},[36,61079,61080,61083,61085,61087,61089],{"class":38,"line":375},[36,61081,61082],{"class":109},"            font-size",[36,61084,51869],{"class":98},[36,61086,1163],{"class":109},[36,61088,51924],{"class":163},[36,61090,1772],{"class":98},[36,61092,61093,61096,61098,61100,61102],{"class":38,"line":381},[36,61094,61095],{"class":109},"            line-height",[36,61097,51869],{"class":98},[36,61099,1221],{"class":109},[36,61101,51924],{"class":163},[36,61103,1772],{"class":98},[36,61105,61106,61109,61111,61113,61115,61117,61120],{"class":38,"line":399},[36,61107,61108],{"class":109},"            border",[36,61110,51869],{"class":98},[36,61112,833],{"class":109},[36,61114,51924],{"class":163},[36,61116,51953],{"class":109},[36,61118,61119],{"class":109}," #e0e0e0",[36,61121,1772],{"class":98},[36,61123,61124,61127,61129,61131],{"class":38,"line":404},[36,61125,61126],{"class":109},"            outline",[36,61128,51869],{"class":98},[36,61130,55169],{"class":109},[36,61132,1772],{"class":98},[36,61134,61135],{"class":38,"line":410},[36,61136,2987],{"class":98},[36,61138,61139],{"class":38,"line":423},[36,61140,247],{"emptyLinePlaceholder":246},[36,61142,61143,61145,61148],{"class":38,"line":436},[36,61144,60982],{"class":55},[36,61146,61147],{"class":55}," .search",[36,61149,16011],{"class":98},[36,61151,61152,61154,61156,61158,61160,61162,61165],{"class":38,"line":441},[36,61153,61108],{"class":109},[36,61155,51869],{"class":98},[36,61157,833],{"class":109},[36,61159,51924],{"class":163},[36,61161,51953],{"class":109},[36,61163,61164],{"class":109}," #ff6700",[36,61166,1772],{"class":98},[36,61168,61169],{"class":38,"line":447},[36,61170,2987],{"class":98},[36,61172,61173],{"class":38,"line":465},[36,61174,247],{"emptyLinePlaceholder":246},[36,61176,61177,61180],{"class":38,"line":470},[36,61178,61179],{"class":55},"        .result-list",[36,61181,16011],{"class":98},[36,61183,61184,61186,61188,61190],{"class":38,"line":476},[36,61185,51904],{"class":109},[36,61187,51869],{"class":98},[36,61189,55169],{"class":109},[36,61191,1772],{"class":98},[36,61193,61194,61196,61198,61200],{"class":38,"line":496},[36,61195,60989],{"class":109},[36,61197,51869],{"class":98},[36,61199,55263],{"class":109},[36,61201,1772],{"class":98},[36,61203,61204,61207,61209,61211],{"class":38,"line":501},[36,61205,61206],{"class":109},"            left",[36,61208,51869],{"class":98},[36,61210,807],{"class":109},[36,61212,1772],{"class":98},[36,61214,61215,61218,61220,61222,61224],{"class":38,"line":507},[36,61216,61217],{"class":109},"            top",[36,61219,51869],{"class":98},[36,61221,1221],{"class":109},[36,61223,51924],{"class":163},[36,61225,1772],{"class":98},[36,61227,61228,61230,61232,61234,61236],{"class":38,"line":517},[36,61229,51916],{"class":109},[36,61231,51869],{"class":98},[36,61233,61004],{"class":109},[36,61235,51924],{"class":163},[36,61237,1772],{"class":98},[36,61239,61240,61242,61244,61246,61248,61250,61252],{"class":38,"line":522},[36,61241,61108],{"class":109},[36,61243,51869],{"class":98},[36,61245,833],{"class":109},[36,61247,51924],{"class":163},[36,61249,51953],{"class":109},[36,61251,61164],{"class":109},[36,61253,1772],{"class":98},[36,61255,61256,61259,61261,61263],{"class":38,"line":528},[36,61257,61258],{"class":109},"            border-top",[36,61260,51869],{"class":98},[36,61262,807],{"class":109},[36,61264,1772],{"class":98},[36,61266,61267,61270,61272,61275],{"class":38,"line":10203},[36,61268,61269],{"class":109},"            background",[36,61271,51869],{"class":98},[36,61273,61274],{"class":109},"#fff",[36,61276,1772],{"class":98},[36,61278,61279],{"class":38,"line":10227},[36,61280,2987],{"class":98},[36,61282,61283],{"class":38,"line":10232},[36,61284,247],{"emptyLinePlaceholder":246},[36,61286,61287,61289,61291],{"class":38,"line":10237},[36,61288,61179],{"class":55},[36,61290,1877],{"class":51733},[36,61292,16011],{"class":98},[36,61294,61295,61297,61299,61302],{"class":38,"line":10242},[36,61296,51904],{"class":109},[36,61298,51869],{"class":98},[36,61300,61301],{"class":109},"block",[36,61303,1772],{"class":98},[36,61305,61306,61308,61310,61312,61314,61317,61319],{"class":38,"line":10251},[36,61307,51878],{"class":109},[36,61309,51869],{"class":98},[36,61311,958],{"class":109},[36,61313,51924],{"class":163},[36,61315,61316],{"class":109}," 15",[36,61318,51924],{"class":163},[36,61320,1772],{"class":98},[36,61322,61323,61325,61327,61329,61331],{"class":38,"line":10256},[36,61324,61082],{"class":109},[36,61326,51869],{"class":98},[36,61328,1112],{"class":109},[36,61330,51924],{"class":163},[36,61332,1772],{"class":98},[36,61334,61335,61338,61340,61343],{"class":38,"line":10262},[36,61336,61337],{"class":109},"            color",[36,61339,51869],{"class":98},[36,61341,61342],{"class":109},"#424242",[36,61344,1772],{"class":98},[36,61346,61347,61350,61352,61354],{"class":38,"line":10283},[36,61348,61349],{"class":109},"            text-decoration",[36,61351,51869],{"class":98},[36,61353,55169],{"class":109},[36,61355,1772],{"class":98},[36,61357,61358],{"class":38,"line":10289},[36,61359,2987],{"class":98},[36,61361,61362],{"class":38,"line":10303},[36,61363,247],{"emptyLinePlaceholder":246},[36,61365,61366,61368,61370,61373],{"class":38,"line":10309},[36,61367,61179],{"class":55},[36,61369,1877],{"class":51733},[36,61371,61372],{"class":55},":hover",[36,61374,16011],{"class":98},[36,61376,61377,61379,61381,61384],{"class":38,"line":10336},[36,61378,52072],{"class":109},[36,61380,51869],{"class":98},[36,61382,61383],{"class":109},"#eee",[36,61385,1772],{"class":98},[36,61387,61388],{"class":38,"line":10345},[36,61389,2987],{"class":98},[36,61391,61392,61394,61396],{"class":38,"line":10351},[36,61393,52208],{"class":98},[36,61395,537],{"class":51733},[36,61397,188],{"class":98},[36,61399,61400],{"class":38,"line":10359},[36,61401,247],{"emptyLinePlaceholder":246},[36,61403,61404,61406,61408],{"class":38,"line":10364},[36,61405,52217],{"class":98},[36,61407,51766],{"class":51733},[36,61409,188],{"class":98},[36,61411,61412],{"class":38,"line":17043},[36,61413,247],{"emptyLinePlaceholder":246},[36,61415,61416,61418,61420],{"class":38,"line":17049},[36,61417,179],{"class":98},[36,61419,52232],{"class":51733},[36,61421,188],{"class":98},[36,61423,61424,61426,61428,61430,61432,61435],{"class":38,"line":17072},[36,61425,51773],{"class":98},[36,61427,52043],{"class":51733},[36,61429,53918],{"class":55},[36,61431,176],{"class":98},[36,61433,61434],{"class":59},"\"mi\"",[36,61436,188],{"class":98},[36,61438,61439,61441,61443,61445,61447,61450,61453,61455,61458],{"class":38,"line":17078},[36,61440,55734],{"class":98},[36,61442,54253],{"class":51733},[36,61444,54256],{"class":55},[36,61446,176],{"class":98},[36,61448,61449],{"class":59},"\"search\"",[36,61451,61452],{"class":55}," placeholder",[36,61454,176],{"class":98},[36,61456,61457],{"class":59},"\"小米笔记本\"",[36,61459,188],{"class":98},[36,61461,61462,61464,61466,61468,61470,61473],{"class":38,"line":17101},[36,61463,55734],{"class":98},[36,61465,1618],{"class":51733},[36,61467,53918],{"class":55},[36,61469,176],{"class":98},[36,61471,61472],{"class":59},"\"result-list\"",[36,61474,188],{"class":98},[36,61476,61477,61480,61482,61485,61487,61490,61492,61495,61498,61500,61502,61504],{"class":38,"line":17115},[36,61478,61479],{"class":98},"            \u003C",[36,61481,574],{"class":51733},[36,61483,61484],{"class":98},">\u003C",[36,61486,20],{"class":51733},[36,61488,61489],{"class":55}," href",[36,61491,176],{"class":98},[36,61493,61494],{"class":59},"\"#\"",[36,61496,61497],{"class":98},">全部商品\u003C\u002F",[36,61499,20],{"class":51733},[36,61501,55746],{"class":98},[36,61503,574],{"class":51733},[36,61505,188],{"class":98},[36,61507,61508,61510,61512,61514,61516,61518,61520,61522,61525,61527,61529,61531],{"class":38,"line":17135},[36,61509,61479],{"class":98},[36,61511,574],{"class":51733},[36,61513,61484],{"class":98},[36,61515,20],{"class":51733},[36,61517,61489],{"class":55},[36,61519,176],{"class":98},[36,61521,61494],{"class":59},[36,61523,61524],{"class":98},">小米11\u003C\u002F",[36,61526,20],{"class":51733},[36,61528,55746],{"class":98},[36,61530,574],{"class":51733},[36,61532,188],{"class":98},[36,61534,61535,61537,61539,61541,61543,61545,61547,61549,61552,61554,61556,61558],{"class":38,"line":17141},[36,61536,61479],{"class":98},[36,61538,574],{"class":51733},[36,61540,61484],{"class":98},[36,61542,20],{"class":51733},[36,61544,61489],{"class":55},[36,61546,176],{"class":98},[36,61548,61494],{"class":59},[36,61550,61551],{"class":98},">小米10S\u003C\u002F",[36,61553,20],{"class":51733},[36,61555,55746],{"class":98},[36,61557,574],{"class":51733},[36,61559,188],{"class":98},[36,61561,61562,61564,61566,61568,61570,61572,61574,61576,61579,61581,61583,61585],{"class":38,"line":17152},[36,61563,61479],{"class":98},[36,61565,574],{"class":51733},[36,61567,61484],{"class":98},[36,61569,20],{"class":51733},[36,61571,61489],{"class":55},[36,61573,176],{"class":98},[36,61575,61494],{"class":59},[36,61577,61578],{"class":98},">小米笔记本\u003C\u002F",[36,61580,20],{"class":51733},[36,61582,55746],{"class":98},[36,61584,574],{"class":51733},[36,61586,188],{"class":98},[36,61588,61589,61591,61593,61595,61597,61599,61601,61603,61606,61608,61610,61612],{"class":38,"line":17175},[36,61590,61479],{"class":98},[36,61592,574],{"class":51733},[36,61594,61484],{"class":98},[36,61596,20],{"class":51733},[36,61598,61489],{"class":55},[36,61600,176],{"class":98},[36,61602,61494],{"class":59},[36,61604,61605],{"class":98},">小米手机\u003C\u002F",[36,61607,20],{"class":51733},[36,61609,55746],{"class":98},[36,61611,574],{"class":51733},[36,61613,188],{"class":98},[36,61615,61616,61618,61620,61622,61624,61626,61628,61630,61633,61635,61637,61639],{"class":38,"line":17197},[36,61617,61479],{"class":98},[36,61619,574],{"class":51733},[36,61621,61484],{"class":98},[36,61623,20],{"class":51733},[36,61625,61489],{"class":55},[36,61627,176],{"class":98},[36,61629,61494],{"class":59},[36,61631,61632],{"class":98},">黑鲨4\u003C\u002F",[36,61634,20],{"class":51733},[36,61636,55746],{"class":98},[36,61638,574],{"class":51733},[36,61640,188],{"class":98},[36,61642,61643,61645,61647,61649,61651,61653,61655,61657,61660,61662,61664,61666],{"class":38,"line":17202},[36,61644,61479],{"class":98},[36,61646,574],{"class":51733},[36,61648,61484],{"class":98},[36,61650,20],{"class":51733},[36,61652,61489],{"class":55},[36,61654,176],{"class":98},[36,61656,61494],{"class":59},[36,61658,61659],{"class":98},">空调\u003C\u002F",[36,61661,20],{"class":51733},[36,61663,55746],{"class":98},[36,61665,574],{"class":51733},[36,61667,188],{"class":98},[36,61669,61670,61673,61675],{"class":38,"line":17208},[36,61671,61672],{"class":98},"        \u003C\u002F",[36,61674,1618],{"class":51733},[36,61676,188],{"class":98},[36,61678,61679,61681,61683],{"class":38,"line":17222},[36,61680,52208],{"class":98},[36,61682,52043],{"class":51733},[36,61684,188],{"class":98},[36,61686,61687,61689,61691],{"class":38,"line":17235},[36,61688,51773],{"class":98},[36,61690,52245],{"class":51733},[36,61692,188],{"class":98},[36,61694,61695],{"class":38,"line":17240},[36,61696,61697],{"class":42},"        \u002F\u002F 1. 获取元素\n",[36,61699,61700,61703,61705,61707,61709,61711,61713,61716],{"class":38,"line":17254},[36,61701,61702],{"class":163},"        const",[36,61704,61037],{"class":109},[36,61706,14003],{"class":163},[36,61708,54828],{"class":98},[36,61710,54831],{"class":55},[36,61712,621],{"class":98},[36,61714,61715],{"class":59},"'[type=search]'",[36,61717,627],{"class":98},[36,61719,61720,61722,61725,61727,61729,61731,61733,61736],{"class":38,"line":17259},[36,61721,61702],{"class":163},[36,61723,61724],{"class":109}," ul",[36,61726,14003],{"class":163},[36,61728,54828],{"class":98},[36,61730,54831],{"class":55},[36,61732,621],{"class":98},[36,61734,61735],{"class":59},"'.result-list'",[36,61737,627],{"class":98},[36,61739,61740],{"class":38,"line":17265},[36,61741,61742],{"class":42},"        \u002F\u002F console.log(input)\n",[36,61744,61745],{"class":38,"line":17270},[36,61746,61747],{"class":42},"        \u002F\u002F 2. 监听事件 获得焦点\n",[36,61749,61750,61753,61755,61757,61760,61762,61764],{"class":38,"line":17284},[36,61751,61752],{"class":98},"        input.",[36,61754,58245],{"class":55},[36,61756,621],{"class":98},[36,61758,61759],{"class":59},"'focus'",[36,61761,12874],{"class":98},[36,61763,54881],{"class":163},[36,61765,54884],{"class":98},[36,61767,61768],{"class":38,"line":17289},[36,61769,61770],{"class":42},"            \u002F\u002F ul显示\n",[36,61772,61773,61776,61778],{"class":38,"line":17294},[36,61774,61775],{"class":98},"            ul.style.display ",[36,61777,176],{"class":163},[36,61779,61780],{"class":59}," 'block'\n",[36,61782,61783],{"class":38,"line":17308},[36,61784,61785],{"class":42},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[36,61787,61788,61791,61793,61795,61798],{"class":38,"line":17320},[36,61789,61790],{"class":98},"            input.classList.",[36,61792,5785],{"class":55},[36,61794,621],{"class":98},[36,61796,61797],{"class":59},"'search'",[36,61799,627],{"class":98},[36,61801,61802],{"class":38,"line":17325},[36,61803,61804],{"class":98},"        })\n",[36,61806,61807],{"class":38,"line":17338},[36,61808,61809],{"class":42},"        \u002F\u002F 3. 监听事件 失去焦点\n",[36,61811,61812,61814,61816,61818,61821,61823,61825],{"class":38,"line":17343},[36,61813,61752],{"class":98},[36,61815,58245],{"class":55},[36,61817,621],{"class":98},[36,61819,61820],{"class":59},"'blur'",[36,61822,12874],{"class":98},[36,61824,54881],{"class":163},[36,61826,54884],{"class":98},[36,61828,61829,61831,61833],{"class":38,"line":17348},[36,61830,61775],{"class":98},[36,61832,176],{"class":163},[36,61834,61835],{"class":59}," 'none'\n",[36,61837,61838,61840,61842,61844,61846],{"class":38,"line":17353},[36,61839,61790],{"class":98},[36,61841,57438],{"class":55},[36,61843,621],{"class":98},[36,61845,61797],{"class":59},[36,61847,627],{"class":98},[36,61849,61850],{"class":38,"line":17366},[36,61851,61804],{"class":98},[36,61853,61854,61856,61858],{"class":38,"line":17371},[36,61855,52208],{"class":98},[36,61857,52245],{"class":51733},[36,61859,188],{"class":98},[36,61861,61862,61864,61866],{"class":38,"line":33066},[36,61863,52217],{"class":98},[36,61865,52232],{"class":51733},[36,61867,188],{"class":98},[36,61869,61870],{"class":38,"line":33072},[36,61871,247],{"emptyLinePlaceholder":246},[36,61873,61874,61876,61878],{"class":38,"line":33078},[36,61875,52217],{"class":98},[36,61877,51068],{"class":51733},[36,61879,188],{"class":98},[22437,61881,61883],{"id":61882},"_3253-键盘事件","3.2.5.3 键盘事件",[14,61885,61886],{},"评论字数统计案例",[14,61888,61889],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,61891,61892],{},"牢记focus伪类选择器",[51776,61894],{"charSet":61895},"UTF-8",[51776,61897],{"name":61898,"content":61899},"viewport","width=device-width, initial-scale=1.0",[51839,61901,61902],{},"Document",[537,61904,61905],{},"\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",[54253,61907],{"type":5638},[1618,61909,61910,61913],{},[574,61911,61912],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[574,61914,61915],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[26,61917,61919],{"className":51066,"code":61918,"language":51068,"meta":31,"style":31},"\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",[33,61920,61921,61931,61945,61949,61957,61971,61991,62011,62024,62032,62039,62052,62066,62076,62086,62090,62094,62101,62113,62125,62137,62149,62178,62191,62195,62199,62208,62219,62231,62242,62253,62265,62276,62288,62304,62316,62320,62324,62335,62346,62356,62368,62372,62376,62384,62395,62405,62416,62428,62441,62453,62465,62469,62473,62482,62494,62505,62518,62529,62543,62547,62551,62558,62570,62582,62592,62596,62600,62609,62621,62631,62635,62639,62650,62660,62679,62692,62696,62700,62710,62720,62724,62728,62739,62750,62762,62774,62778,62782,62793,62804,62818,62822,62826,62837,62847,62859,62863,62871,62879,62883,62891,62906,62925,62965,62978,62986,63000,63020,63028,63043,63066,63084,63099,63119,63139,63159,63167,63175,63183,63191,63211,63231,63236,63253,63262,63266,63271,63287,63295,63299,63304,63321,63326,63351,63355,63359,63364,63369,63377,63385,63389],{"__ignoreMap":31},[36,61922,61923,61925,61927,61929],{"class":38,"line":39},[36,61924,51730],{"class":98},[36,61926,51734],{"class":51733},[36,61928,51737],{"class":55},[36,61930,188],{"class":98},[36,61932,61933,61935,61937,61939,61941,61943],{"class":38,"line":46},[36,61934,179],{"class":98},[36,61936,51068],{"class":51733},[36,61938,51748],{"class":55},[36,61940,176],{"class":98},[36,61942,51753],{"class":59},[36,61944,188],{"class":98},[36,61946,61947],{"class":38,"line":52},[36,61948,247],{"emptyLinePlaceholder":246},[36,61950,61951,61953,61955],{"class":38,"line":66},[36,61952,179],{"class":98},[36,61954,51766],{"class":51733},[36,61956,188],{"class":98},[36,61958,61959,61961,61963,61965,61967,61969],{"class":38,"line":72},[36,61960,52576],{"class":98},[36,61962,51776],{"class":51733},[36,61964,51779],{"class":55},[36,61966,176],{"class":98},[36,61968,51784],{"class":59},[36,61970,188],{"class":98},[36,61972,61973,61975,61977,61979,61981,61983,61985,61987,61989],{"class":38,"line":82},[36,61974,52576],{"class":98},[36,61976,51776],{"class":51733},[36,61978,51795],{"class":55},[36,61980,176],{"class":98},[36,61982,51800],{"class":59},[36,61984,51803],{"class":55},[36,61986,176],{"class":98},[36,61988,51808],{"class":59},[36,61990,188],{"class":98},[36,61992,61993,61995,61997,61999,62001,62003,62005,62007,62009],{"class":38,"line":88},[36,61994,52576],{"class":98},[36,61996,51776],{"class":51733},[36,61998,15359],{"class":55},[36,62000,176],{"class":98},[36,62002,51823],{"class":59},[36,62004,51803],{"class":55},[36,62006,176],{"class":98},[36,62008,51830],{"class":59},[36,62010,188],{"class":98},[36,62012,62013,62015,62017,62020,62022],{"class":38,"line":113},[36,62014,52576],{"class":98},[36,62016,51839],{"class":51733},[36,62018,62019],{"class":98},">评论回车发布\u003C\u002F",[36,62021,51839],{"class":51733},[36,62023,188],{"class":98},[36,62025,62026,62028,62030],{"class":38,"line":119},[36,62027,52576],{"class":98},[36,62029,537],{"class":51733},[36,62031,188],{"class":98},[36,62033,62034,62037],{"class":38,"line":131},[36,62035,62036],{"class":55},"    .wrapper",[36,62038,16011],{"class":98},[36,62040,62041,62044,62046,62048,62050],{"class":38,"line":137},[36,62042,62043],{"class":109},"      min-width",[36,62045,51869],{"class":98},[36,62047,4438],{"class":109},[36,62049,51924],{"class":163},[36,62051,1772],{"class":98},[36,62053,62054,62057,62059,62062,62064],{"class":38,"line":147},[36,62055,62056],{"class":109},"      max-width",[36,62058,51869],{"class":98},[36,62060,62061],{"class":109},"800",[36,62063,51924],{"class":163},[36,62065,1772],{"class":98},[36,62067,62068,62070,62072,62074],{"class":38,"line":153},[36,62069,55441],{"class":109},[36,62071,51869],{"class":98},[36,62073,51909],{"class":109},[36,62075,1772],{"class":98},[36,62077,62078,62080,62082,62084],{"class":38,"line":191},[36,62079,55452],{"class":109},[36,62081,51869],{"class":98},[36,62083,52012],{"class":109},[36,62085,1772],{"class":98},[36,62087,62088],{"class":38,"line":197},[36,62089,2646],{"class":98},[36,62091,62092],{"class":38,"line":217},[36,62093,247],{"emptyLinePlaceholder":246},[36,62095,62096,62099],{"class":38,"line":223},[36,62097,62098],{"class":55},"    .avatar",[36,62100,16011],{"class":98},[36,62102,62103,62105,62107,62109,62111],{"class":38,"line":243},[36,62104,55203],{"class":109},[36,62106,51869],{"class":98},[36,62108,1221],{"class":109},[36,62110,51924],{"class":163},[36,62112,1772],{"class":98},[36,62114,62115,62117,62119,62121,62123],{"class":38,"line":250},[36,62116,55217],{"class":109},[36,62118,51869],{"class":98},[36,62120,1221],{"class":109},[36,62122,51924],{"class":163},[36,62124,1772],{"class":98},[36,62126,62127,62129,62131,62133,62135],{"class":38,"line":256},[36,62128,55566],{"class":109},[36,62130,51869],{"class":98},[36,62132,1270],{"class":109},[36,62134,942],{"class":163},[36,62136,1772],{"class":98},[36,62138,62139,62142,62144,62147],{"class":38,"line":273},[36,62140,62141],{"class":109},"      overflow",[36,62143,51869],{"class":98},[36,62145,62146],{"class":109},"hidden",[36,62148,1772],{"class":98},[36,62150,62151,62154,62156,62159,62161,62164,62166,62169,62171,62173,62176],{"class":38,"line":278},[36,62152,62153],{"class":109},"      background",[36,62155,51869],{"class":98},[36,62157,62158],{"class":109},"url",[36,62160,621],{"class":98},[36,62162,62163],{"class":5667},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[36,62165,14153],{"class":98},[36,62167,62168],{"class":109},"no-repeat",[36,62170,17583],{"class":109},[36,62172,25415],{"class":98},[36,62174,62175],{"class":109},"cover",[36,62177,1772],{"class":98},[36,62179,62180,62183,62185,62187,62189],{"class":38,"line":284},[36,62181,62182],{"class":109},"      margin-right",[36,62184,51869],{"class":98},[36,62186,1313],{"class":109},[36,62188,51924],{"class":163},[36,62190,1772],{"class":98},[36,62192,62193],{"class":38,"line":315},[36,62194,2646],{"class":98},[36,62196,62197],{"class":38,"line":320},[36,62198,247],{"emptyLinePlaceholder":246},[36,62200,62201,62203,62206],{"class":38,"line":326},[36,62202,62036],{"class":55},[36,62204,62205],{"class":51733}," textarea",[36,62207,16011],{"class":98},[36,62209,62210,62213,62215,62217],{"class":38,"line":343},[36,62211,62212],{"class":109},"      outline",[36,62214,51869],{"class":98},[36,62216,55169],{"class":109},[36,62218,1772],{"class":98},[36,62220,62221,62224,62226,62229],{"class":38,"line":348},[36,62222,62223],{"class":109},"      border-color",[36,62225,51869],{"class":98},[36,62227,62228],{"class":109},"transparent",[36,62230,1772],{"class":98},[36,62232,62233,62236,62238,62240],{"class":38,"line":354},[36,62234,62235],{"class":109},"      resize",[36,62237,51869],{"class":98},[36,62239,55169],{"class":109},[36,62241,1772],{"class":98},[36,62243,62244,62246,62248,62251],{"class":38,"line":370},[36,62245,62153],{"class":109},[36,62247,51869],{"class":98},[36,62249,62250],{"class":109},"#f5f5f5",[36,62252,1772],{"class":98},[36,62254,62255,62257,62259,62261,62263],{"class":38,"line":375},[36,62256,55566],{"class":109},[36,62258,51869],{"class":98},[36,62260,908],{"class":109},[36,62262,51924],{"class":163},[36,62264,1772],{"class":98},[36,62266,62267,62270,62272,62274],{"class":38,"line":381},[36,62268,62269],{"class":109},"      flex",[36,62271,51869],{"class":98},[36,62273,833],{"class":109},[36,62275,1772],{"class":98},[36,62277,62278,62280,62282,62284,62286],{"class":38,"line":399},[36,62279,55127],{"class":109},[36,62281,51869],{"class":98},[36,62283,1060],{"class":109},[36,62285,51924],{"class":163},[36,62287,1772],{"class":98},[36,62289,62290,62293,62295,62297,62300,62302],{"class":38,"line":404},[36,62291,62292],{"class":109},"      transition",[36,62294,51869],{"class":98},[36,62296,28555],{"class":109},[36,62298,62299],{"class":109}," 0.5",[36,62301,1308],{"class":163},[36,62303,1772],{"class":98},[36,62305,62306,62308,62310,62312,62314],{"class":38,"line":410},[36,62307,55217],{"class":109},[36,62309,51869],{"class":98},[36,62311,1563],{"class":109},[36,62313,51924],{"class":163},[36,62315,1772],{"class":98},[36,62317,62318],{"class":38,"line":423},[36,62319,2646],{"class":98},[36,62321,62322],{"class":38,"line":436},[36,62323,247],{"emptyLinePlaceholder":246},[36,62325,62326,62328,62330,62333],{"class":38,"line":441},[36,62327,62036],{"class":55},[36,62329,62205],{"class":51733},[36,62331,62332],{"class":55},":focus",[36,62334,16011],{"class":98},[36,62336,62337,62339,62341,62344],{"class":38,"line":447},[36,62338,62223],{"class":109},[36,62340,51869],{"class":98},[36,62342,62343],{"class":109},"#e4e4e4",[36,62345,1772],{"class":98},[36,62347,62348,62350,62352,62354],{"class":38,"line":465},[36,62349,62153],{"class":109},[36,62351,51869],{"class":98},[36,62353,61274],{"class":109},[36,62355,1772],{"class":98},[36,62357,62358,62360,62362,62364,62366],{"class":38,"line":470},[36,62359,55217],{"class":109},[36,62361,51869],{"class":98},[36,62363,1270],{"class":109},[36,62365,51924],{"class":163},[36,62367,1772],{"class":98},[36,62369,62370],{"class":38,"line":476},[36,62371,2646],{"class":98},[36,62373,62374],{"class":38,"line":496},[36,62375,247],{"emptyLinePlaceholder":246},[36,62377,62378,62380,62382],{"class":38,"line":501},[36,62379,62036],{"class":55},[36,62381,57899],{"class":51733},[36,62383,16011],{"class":98},[36,62385,62386,62388,62390,62393],{"class":38,"line":507},[36,62387,62153],{"class":109},[36,62389,51869],{"class":98},[36,62391,62392],{"class":109},"#00aeec",[36,62394,1772],{"class":98},[36,62396,62397,62399,62401,62403],{"class":38,"line":517},[36,62398,57848],{"class":109},[36,62400,51869],{"class":98},[36,62402,61274],{"class":109},[36,62404,1772],{"class":98},[36,62406,62407,62410,62412,62414],{"class":38,"line":522},[36,62408,62409],{"class":109},"      border",[36,62411,51869],{"class":98},[36,62413,55169],{"class":109},[36,62415,1772],{"class":98},[36,62417,62418,62420,62422,62424,62426],{"class":38,"line":528},[36,62419,55566],{"class":109},[36,62421,51869],{"class":98},[36,62423,908],{"class":109},[36,62425,51924],{"class":163},[36,62427,1772],{"class":98},[36,62429,62430,62433,62435,62437,62439],{"class":38,"line":10203},[36,62431,62432],{"class":109},"      margin-left",[36,62434,51869],{"class":98},[36,62436,1060],{"class":109},[36,62438,51924],{"class":163},[36,62440,1772],{"class":98},[36,62442,62443,62445,62447,62449,62451],{"class":38,"line":10227},[36,62444,55203],{"class":109},[36,62446,51869],{"class":98},[36,62448,970],{"class":109},[36,62450,51924],{"class":163},[36,62452,1772],{"class":98},[36,62454,62455,62458,62460,62463],{"class":38,"line":10232},[36,62456,62457],{"class":109},"      cursor",[36,62459,51869],{"class":98},[36,62461,62462],{"class":109},"pointer",[36,62464,1772],{"class":98},[36,62466,62467],{"class":38,"line":10237},[36,62468,2646],{"class":98},[36,62470,62471],{"class":38,"line":10242},[36,62472,247],{"emptyLinePlaceholder":246},[36,62474,62475,62477,62480],{"class":38,"line":10251},[36,62476,62036],{"class":55},[36,62478,62479],{"class":55}," .total",[36,62481,16011],{"class":98},[36,62483,62484,62486,62488,62490,62492],{"class":38,"line":10256},[36,62485,62182],{"class":109},[36,62487,51869],{"class":98},[36,62489,1226],{"class":109},[36,62491,51924],{"class":163},[36,62493,1772],{"class":98},[36,62495,62496,62498,62500,62503],{"class":38,"line":10262},[36,62497,57848],{"class":109},[36,62499,51869],{"class":98},[36,62501,62502],{"class":109},"#999",[36,62504,1772],{"class":98},[36,62506,62507,62510,62512,62514,62516],{"class":38,"line":10283},[36,62508,62509],{"class":109},"      margin-top",[36,62511,51869],{"class":98},[36,62513,933],{"class":109},[36,62515,51924],{"class":163},[36,62517,1772],{"class":98},[36,62519,62520,62523,62525,62527],{"class":38,"line":10289},[36,62521,62522],{"class":109},"      opacity",[36,62524,51869],{"class":98},[36,62526,807],{"class":109},[36,62528,1772],{"class":98},[36,62530,62531,62533,62535,62537,62539,62541],{"class":38,"line":10303},[36,62532,62292],{"class":109},[36,62534,51869],{"class":98},[36,62536,28555],{"class":109},[36,62538,62299],{"class":109},[36,62540,1308],{"class":163},[36,62542,1772],{"class":98},[36,62544,62545],{"class":38,"line":10309},[36,62546,2646],{"class":98},[36,62548,62549],{"class":38,"line":10336},[36,62550,247],{"emptyLinePlaceholder":246},[36,62552,62553,62556],{"class":38,"line":10345},[36,62554,62555],{"class":55},"    .list",[36,62557,16011],{"class":98},[36,62559,62560,62562,62564,62566,62568],{"class":38,"line":10351},[36,62561,62043],{"class":109},[36,62563,51869],{"class":98},[36,62565,4438],{"class":109},[36,62567,51924],{"class":163},[36,62569,1772],{"class":98},[36,62571,62572,62574,62576,62578,62580],{"class":38,"line":10359},[36,62573,62056],{"class":109},[36,62575,51869],{"class":98},[36,62577,62061],{"class":109},[36,62579,51924],{"class":163},[36,62581,1772],{"class":98},[36,62583,62584,62586,62588,62590],{"class":38,"line":10364},[36,62585,55441],{"class":109},[36,62587,51869],{"class":98},[36,62589,51909],{"class":109},[36,62591,1772],{"class":98},[36,62593,62594],{"class":38,"line":17043},[36,62595,2646],{"class":98},[36,62597,62598],{"class":38,"line":17049},[36,62599,247],{"emptyLinePlaceholder":246},[36,62601,62602,62604,62607],{"class":38,"line":17072},[36,62603,62555],{"class":55},[36,62605,62606],{"class":55}," .item",[36,62608,16011],{"class":98},[36,62610,62611,62613,62615,62617,62619],{"class":38,"line":17078},[36,62612,55203],{"class":109},[36,62614,51869],{"class":98},[36,62616,926],{"class":109},[36,62618,942],{"class":163},[36,62620,1772],{"class":98},[36,62622,62623,62625,62627,62629],{"class":38,"line":17101},[36,62624,55441],{"class":109},[36,62626,51869],{"class":98},[36,62628,51909],{"class":109},[36,62630,1772],{"class":98},[36,62632,62633],{"class":38,"line":17115},[36,62634,2646],{"class":98},[36,62636,62637],{"class":38,"line":17135},[36,62638,247],{"emptyLinePlaceholder":246},[36,62640,62641,62643,62645,62648],{"class":38,"line":17141},[36,62642,62555],{"class":55},[36,62644,62606],{"class":55},[36,62646,62647],{"class":55}," .info",[36,62649,16011],{"class":98},[36,62651,62652,62654,62656,62658],{"class":38,"line":17152},[36,62653,62269],{"class":109},[36,62655,51869],{"class":98},[36,62657,833],{"class":109},[36,62659,1772],{"class":98},[36,62661,62662,62665,62667,62669,62671,62674,62677],{"class":38,"line":17175},[36,62663,62664],{"class":109},"      border-bottom",[36,62666,51869],{"class":98},[36,62668,833],{"class":109},[36,62670,51924],{"class":163},[36,62672,62673],{"class":109}," dashed",[36,62675,62676],{"class":109}," #e4e4e4",[36,62678,1772],{"class":98},[36,62680,62681,62684,62686,62688,62690],{"class":38,"line":17197},[36,62682,62683],{"class":109},"      padding-bottom",[36,62685,51869],{"class":98},[36,62687,1060],{"class":109},[36,62689,51924],{"class":163},[36,62691,1772],{"class":98},[36,62693,62694],{"class":38,"line":17202},[36,62695,2646],{"class":98},[36,62697,62698],{"class":38,"line":17208},[36,62699,247],{"emptyLinePlaceholder":246},[36,62701,62702,62704,62706,62708],{"class":38,"line":17222},[36,62703,62555],{"class":55},[36,62705,62606],{"class":55},[36,62707,7276],{"class":51733},[36,62709,16011],{"class":98},[36,62711,62712,62714,62716,62718],{"class":38,"line":17235},[36,62713,55138],{"class":109},[36,62715,51869],{"class":98},[36,62717,807],{"class":109},[36,62719,1772],{"class":98},[36,62721,62722],{"class":38,"line":17240},[36,62723,2646],{"class":98},[36,62725,62726],{"class":38,"line":17254},[36,62727,247],{"emptyLinePlaceholder":246},[36,62729,62730,62732,62734,62737],{"class":38,"line":17259},[36,62731,62555],{"class":55},[36,62733,62606],{"class":55},[36,62735,62736],{"class":55}," .name",[36,62738,16011],{"class":98},[36,62740,62741,62743,62745,62748],{"class":38,"line":17265},[36,62742,57848],{"class":109},[36,62744,51869],{"class":98},[36,62746,62747],{"class":109},"#FB7299",[36,62749,1772],{"class":98},[36,62751,62752,62754,62756,62758,62760],{"class":38,"line":17270},[36,62753,55354],{"class":109},[36,62755,51869],{"class":98},[36,62757,1163],{"class":109},[36,62759,51924],{"class":163},[36,62761,1772],{"class":98},[36,62763,62764,62767,62769,62772],{"class":38,"line":17284},[36,62765,62766],{"class":109},"      font-weight",[36,62768,51869],{"class":98},[36,62770,62771],{"class":109},"bold",[36,62773,1772],{"class":98},[36,62775,62776],{"class":38,"line":17289},[36,62777,2646],{"class":98},[36,62779,62780],{"class":38,"line":17294},[36,62781,247],{"emptyLinePlaceholder":246},[36,62783,62784,62786,62788,62791],{"class":38,"line":17308},[36,62785,62555],{"class":55},[36,62787,62606],{"class":55},[36,62789,62790],{"class":55}," .text",[36,62792,16011],{"class":98},[36,62794,62795,62797,62799,62802],{"class":38,"line":17320},[36,62796,57848],{"class":109},[36,62798,51869],{"class":98},[36,62800,62801],{"class":109},"#333",[36,62803,1772],{"class":98},[36,62805,62806,62808,62810,62812,62814,62816],{"class":38,"line":17325},[36,62807,55127],{"class":109},[36,62809,51869],{"class":98},[36,62811,1060],{"class":109},[36,62813,51924],{"class":163},[36,62815,4544],{"class":109},[36,62817,1772],{"class":98},[36,62819,62820],{"class":38,"line":17338},[36,62821,2646],{"class":98},[36,62823,62824],{"class":38,"line":17343},[36,62825,247],{"emptyLinePlaceholder":246},[36,62827,62828,62830,62832,62835],{"class":38,"line":17348},[36,62829,62555],{"class":55},[36,62831,62606],{"class":55},[36,62833,62834],{"class":55}," .time",[36,62836,16011],{"class":98},[36,62838,62839,62841,62843,62845],{"class":38,"line":17353},[36,62840,57848],{"class":109},[36,62842,51869],{"class":98},[36,62844,62502],{"class":109},[36,62846,1772],{"class":98},[36,62848,62849,62851,62853,62855,62857],{"class":38,"line":17366},[36,62850,55354],{"class":109},[36,62852,51869],{"class":98},[36,62854,1112],{"class":109},[36,62856,51924],{"class":163},[36,62858,1772],{"class":98},[36,62860,62861],{"class":38,"line":17371},[36,62862,2646],{"class":98},[36,62864,62865,62867,62869],{"class":38,"line":33066},[36,62866,52849],{"class":98},[36,62868,537],{"class":51733},[36,62870,188],{"class":98},[36,62872,62873,62875,62877],{"class":38,"line":33072},[36,62874,52217],{"class":98},[36,62876,51766],{"class":51733},[36,62878,188],{"class":98},[36,62880,62881],{"class":38,"line":33078},[36,62882,247],{"emptyLinePlaceholder":246},[36,62884,62885,62887,62889],{"class":38,"line":33084},[36,62886,179],{"class":98},[36,62888,52232],{"class":51733},[36,62890,188],{"class":98},[36,62892,62893,62895,62897,62899,62901,62904],{"class":38,"line":33090},[36,62894,52576],{"class":98},[36,62896,52043],{"class":51733},[36,62898,53918],{"class":55},[36,62900,176],{"class":98},[36,62902,62903],{"class":59},"\"wrapper\"",[36,62905,188],{"class":98},[36,62907,62908,62910,62912,62914,62916,62919,62921,62923],{"class":38,"line":33101},[36,62909,51773],{"class":98},[36,62911,1055],{"class":51733},[36,62913,53918],{"class":55},[36,62915,176],{"class":98},[36,62917,62918],{"class":59},"\"avatar\"",[36,62920,55746],{"class":98},[36,62922,1055],{"class":51733},[36,62924,188],{"class":98},[36,62926,62927,62929,62931,62933,62935,62938,62940,62942,62945,62947,62949,62951,62954,62956,62959,62961,62963],{"class":38,"line":33107},[36,62928,51773],{"class":98},[36,62930,54720],{"class":51733},[36,62932,15398],{"class":55},[36,62934,176],{"class":98},[36,62936,62937],{"class":59},"\"tx\"",[36,62939,61452],{"class":55},[36,62941,176],{"class":98},[36,62943,62944],{"class":59},"\"发一条友善的评论\"",[36,62946,54743],{"class":55},[36,62948,176],{"class":98},[36,62950,4152],{"class":59},[36,62952,62953],{"class":55}," maxlength",[36,62955,176],{"class":98},[36,62957,62958],{"class":59},"\"200\"",[36,62960,55746],{"class":98},[36,62962,54720],{"class":51733},[36,62964,188],{"class":98},[36,62966,62967,62969,62971,62974,62976],{"class":38,"line":33127},[36,62968,51773],{"class":98},[36,62970,54319],{"class":51733},[36,62972,62973],{"class":98},">发布\u003C\u002F",[36,62975,54319],{"class":51733},[36,62977,188],{"class":98},[36,62979,62980,62982,62984],{"class":38,"line":33133},[36,62981,52849],{"class":98},[36,62983,52043],{"class":51733},[36,62985,188],{"class":98},[36,62987,62988,62990,62992,62994,62996,62998],{"class":38,"line":33144},[36,62989,52576],{"class":98},[36,62991,52043],{"class":51733},[36,62993,53918],{"class":55},[36,62995,176],{"class":98},[36,62997,62903],{"class":59},[36,62999,188],{"class":98},[36,63001,63002,63004,63006,63008,63010,63013,63016,63018],{"class":38,"line":33150},[36,63003,51773],{"class":98},[36,63005,36],{"class":51733},[36,63007,53918],{"class":55},[36,63009,176],{"class":98},[36,63011,63012],{"class":59},"\"total\"",[36,63014,63015],{"class":98},">0\u002F200字\u003C\u002F",[36,63017,36],{"class":51733},[36,63019,188],{"class":98},[36,63021,63022,63024,63026],{"class":38,"line":33156},[36,63023,52849],{"class":98},[36,63025,52043],{"class":51733},[36,63027,188],{"class":98},[36,63029,63030,63032,63034,63036,63038,63041],{"class":38,"line":33162},[36,63031,52576],{"class":98},[36,63033,52043],{"class":51733},[36,63035,53918],{"class":55},[36,63037,176],{"class":98},[36,63039,63040],{"class":59},"\"list\"",[36,63042,188],{"class":98},[36,63044,63045,63047,63049,63051,63053,63056,63059,63061,63064],{"class":38,"line":33168},[36,63046,51773],{"class":98},[36,63048,52043],{"class":51733},[36,63050,53918],{"class":55},[36,63052,176],{"class":98},[36,63054,63055],{"class":59},"\"item\"",[36,63057,63058],{"class":55}," style",[36,63060,176],{"class":98},[36,63062,63063],{"class":59},"\"display: none;\"",[36,63065,188],{"class":98},[36,63067,63068,63070,63072,63074,63076,63078,63080,63082],{"class":38,"line":33174},[36,63069,55666],{"class":98},[36,63071,1055],{"class":51733},[36,63073,53918],{"class":55},[36,63075,176],{"class":98},[36,63077,62918],{"class":59},[36,63079,55746],{"class":98},[36,63081,1055],{"class":51733},[36,63083,188],{"class":98},[36,63085,63086,63088,63090,63092,63094,63097],{"class":38,"line":33180},[36,63087,55666],{"class":98},[36,63089,52043],{"class":51733},[36,63091,53918],{"class":55},[36,63093,176],{"class":98},[36,63095,63096],{"class":59},"\"info\"",[36,63098,188],{"class":98},[36,63100,63101,63103,63105,63107,63109,63112,63115,63117],{"class":38,"line":33186},[36,63102,55734],{"class":98},[36,63104,14],{"class":51733},[36,63106,53918],{"class":55},[36,63108,176],{"class":98},[36,63110,63111],{"class":59},"\"name\"",[36,63113,63114],{"class":98},">清风徐来\u003C\u002F",[36,63116,14],{"class":51733},[36,63118,188],{"class":98},[36,63120,63121,63123,63125,63127,63129,63132,63135,63137],{"class":38,"line":33206},[36,63122,55734],{"class":98},[36,63124,14],{"class":51733},[36,63126,53918],{"class":55},[36,63128,176],{"class":98},[36,63130,63131],{"class":59},"\"text\"",[36,63133,63134],{"class":98},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[36,63136,14],{"class":51733},[36,63138,188],{"class":98},[36,63140,63141,63143,63145,63147,63149,63152,63155,63157],{"class":38,"line":33212},[36,63142,55734],{"class":98},[36,63144,14],{"class":51733},[36,63146,53918],{"class":55},[36,63148,176],{"class":98},[36,63150,63151],{"class":59},"\"time\"",[36,63153,63154],{"class":98},">2022-10-10 20:29:21\u003C\u002F",[36,63156,14],{"class":51733},[36,63158,188],{"class":98},[36,63160,63161,63163,63165],{"class":38,"line":33228},[36,63162,55839],{"class":98},[36,63164,52043],{"class":51733},[36,63166,188],{"class":98},[36,63168,63169,63171,63173],{"class":38,"line":33234},[36,63170,52208],{"class":98},[36,63172,52043],{"class":51733},[36,63174,188],{"class":98},[36,63176,63177,63179,63181],{"class":38,"line":33248},[36,63178,52849],{"class":98},[36,63180,52043],{"class":51733},[36,63182,188],{"class":98},[36,63184,63185,63187,63189],{"class":38,"line":33254},[36,63186,52576],{"class":98},[36,63188,52245],{"class":51733},[36,63190,188],{"class":98},[36,63192,63193,63195,63198,63200,63202,63204,63206,63209],{"class":38,"line":33269},[36,63194,11660],{"class":163},[36,63196,63197],{"class":109}," tx",[36,63199,14003],{"class":163},[36,63201,54828],{"class":98},[36,63203,54831],{"class":55},[36,63205,621],{"class":98},[36,63207,63208],{"class":59},"'#tx'",[36,63210,627],{"class":98},[36,63212,63213,63215,63218,63220,63222,63224,63226,63229],{"class":38,"line":33275},[36,63214,11660],{"class":163},[36,63216,63217],{"class":109}," total",[36,63219,14003],{"class":163},[36,63221,54828],{"class":98},[36,63223,54831],{"class":55},[36,63225,621],{"class":98},[36,63227,63228],{"class":59},"'.total'",[36,63230,627],{"class":98},[36,63232,63233],{"class":38,"line":33284},[36,63234,63235],{"class":42},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[36,63237,63238,63241,63243,63245,63247,63249,63251],{"class":38,"line":33290},[36,63239,63240],{"class":98},"    tx.",[36,63242,58245],{"class":55},[36,63244,621],{"class":98},[36,63246,61759],{"class":59},[36,63248,12874],{"class":98},[36,63250,54881],{"class":163},[36,63252,54884],{"class":98},[36,63254,63255,63258,63260],{"class":38,"line":33299},[36,63256,63257],{"class":98},"      total.style.opacity ",[36,63259,176],{"class":163},[36,63261,56131],{"class":109},[36,63263,63264],{"class":38,"line":33305},[36,63265,33894],{"class":98},[36,63267,63268],{"class":38,"line":33311},[36,63269,63270],{"class":42},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[36,63272,63273,63275,63277,63279,63281,63283,63285],{"class":38,"line":33320},[36,63274,63240],{"class":98},[36,63276,58245],{"class":55},[36,63278,621],{"class":98},[36,63280,61820],{"class":59},[36,63282,12874],{"class":98},[36,63284,54881],{"class":163},[36,63286,54884],{"class":98},[36,63288,63289,63291,63293],{"class":38,"line":33326},[36,63290,63257],{"class":98},[36,63292,176],{"class":163},[36,63294,47766],{"class":109},[36,63296,63297],{"class":38,"line":33337},[36,63298,33894],{"class":98},[36,63300,63301],{"class":38,"line":33343},[36,63302,63303],{"class":42},"    \u002F\u002F 3. 检测用户输入\n",[36,63305,63306,63308,63310,63312,63315,63317,63319],{"class":38,"line":33362},[36,63307,63240],{"class":98},[36,63309,58245],{"class":55},[36,63311,621],{"class":98},[36,63313,63314],{"class":59},"'input'",[36,63316,12874],{"class":98},[36,63318,54881],{"class":163},[36,63320,54884],{"class":98},[36,63322,63323],{"class":38,"line":33368},[36,63324,63325],{"class":42},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[36,63327,63328,63331,63333,63336,63339,63341,63344,63346,63348],{"class":38,"line":33379},[36,63329,63330],{"class":98},"      total.innerHTML ",[36,63332,176],{"class":163},[36,63334,63335],{"class":59}," `${",[36,63337,63338],{"class":98},"tx",[36,63340,1172],{"class":59},[36,63342,63343],{"class":98},"value",[36,63345,1172],{"class":59},[36,63347,52400],{"class":109},[36,63349,63350],{"class":59},"}\u002F200字`\n",[36,63352,63353],{"class":38,"line":33385},[36,63354,33894],{"class":98},[36,63356,63357],{"class":38,"line":33405},[36,63358,247],{"emptyLinePlaceholder":246},[36,63360,63361],{"class":38,"line":33421},[36,63362,63363],{"class":42},"    \u002F\u002F const str = 'andy'\n",[36,63365,63366],{"class":38,"line":33427},[36,63367,63368],{"class":42},"    \u002F\u002F console.log(str.length)\n",[36,63370,63371,63373,63375],{"class":38,"line":33441},[36,63372,52849],{"class":98},[36,63374,52245],{"class":51733},[36,63376,188],{"class":98},[36,63378,63379,63381,63383],{"class":38,"line":33447},[36,63380,52217],{"class":98},[36,63382,52232],{"class":51733},[36,63384,188],{"class":98},[36,63386,63387],{"class":38,"line":33453},[36,63388,247],{"emptyLinePlaceholder":246},[36,63390,63391,63393,63395],{"class":38,"line":33464},[36,63392,52217],{"class":98},[36,63394,51068],{"class":51733},[36,63396,188],{"class":98},[22437,63398,63400],{"id":63399},"_3254-change事件","3.2.5.4 change事件",[14,63402,63403],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,63405,63406],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,63408,63409],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[26,63411,63413],{"className":51066,"code":63412,"language":51068,"meta":31,"style":31},"\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",[33,63414,63415,63425,63439,63443,63451,63465,63485,63497,63505,63509,63517,63531,63539,63557,63575,63587,63591,63599,63607,63611],{"__ignoreMap":31},[36,63416,63417,63419,63421,63423],{"class":38,"line":39},[36,63418,51730],{"class":98},[36,63420,51734],{"class":51733},[36,63422,51737],{"class":55},[36,63424,188],{"class":98},[36,63426,63427,63429,63431,63433,63435,63437],{"class":38,"line":46},[36,63428,179],{"class":98},[36,63430,51068],{"class":51733},[36,63432,51748],{"class":55},[36,63434,176],{"class":98},[36,63436,51753],{"class":59},[36,63438,188],{"class":98},[36,63440,63441],{"class":38,"line":52},[36,63442,247],{"emptyLinePlaceholder":246},[36,63444,63445,63447,63449],{"class":38,"line":66},[36,63446,179],{"class":98},[36,63448,51766],{"class":51733},[36,63450,188],{"class":98},[36,63452,63453,63455,63457,63459,63461,63463],{"class":38,"line":72},[36,63454,52576],{"class":98},[36,63456,51776],{"class":51733},[36,63458,51779],{"class":55},[36,63460,176],{"class":98},[36,63462,51784],{"class":59},[36,63464,188],{"class":98},[36,63466,63467,63469,63471,63473,63475,63477,63479,63481,63483],{"class":38,"line":82},[36,63468,52576],{"class":98},[36,63470,51776],{"class":51733},[36,63472,15359],{"class":55},[36,63474,176],{"class":98},[36,63476,51823],{"class":59},[36,63478,51803],{"class":55},[36,63480,176],{"class":98},[36,63482,51830],{"class":59},[36,63484,188],{"class":98},[36,63486,63487,63489,63491,63493,63495],{"class":38,"line":88},[36,63488,52576],{"class":98},[36,63490,51839],{"class":51733},[36,63492,51842],{"class":98},[36,63494,51839],{"class":51733},[36,63496,188],{"class":98},[36,63498,63499,63501,63503],{"class":38,"line":113},[36,63500,52217],{"class":98},[36,63502,51766],{"class":51733},[36,63504,188],{"class":98},[36,63506,63507],{"class":38,"line":119},[36,63508,247],{"emptyLinePlaceholder":246},[36,63510,63511,63513,63515],{"class":38,"line":131},[36,63512,179],{"class":98},[36,63514,52232],{"class":51733},[36,63516,188],{"class":98},[36,63518,63519,63521,63523,63525,63527,63529],{"class":38,"line":137},[36,63520,52576],{"class":98},[36,63522,54253],{"class":51733},[36,63524,54256],{"class":55},[36,63526,176],{"class":98},[36,63528,63131],{"class":59},[36,63530,188],{"class":98},[36,63532,63533,63535,63537],{"class":38,"line":147},[36,63534,52576],{"class":98},[36,63536,52245],{"class":51733},[36,63538,188],{"class":98},[36,63540,63541,63543,63545,63547,63549,63551,63553,63555],{"class":38,"line":153},[36,63542,11660],{"class":163},[36,63544,61037],{"class":109},[36,63546,14003],{"class":163},[36,63548,54828],{"class":98},[36,63550,54831],{"class":55},[36,63552,621],{"class":98},[36,63554,63314],{"class":59},[36,63556,627],{"class":98},[36,63558,63559,63562,63564,63566,63569,63571,63573],{"class":38,"line":191},[36,63560,63561],{"class":98},"    input.",[36,63563,58245],{"class":55},[36,63565,621],{"class":98},[36,63567,63568],{"class":59},"'change'",[36,63570,12874],{"class":98},[36,63572,54881],{"class":163},[36,63574,54884],{"class":98},[36,63576,63577,63579,63581,63583,63585],{"class":38,"line":197},[36,63578,58676],{"class":98},[36,63580,58679],{"class":55},[36,63582,621],{"class":98},[36,63584,1207],{"class":109},[36,63586,627],{"class":98},[36,63588,63589],{"class":38,"line":217},[36,63590,33894],{"class":98},[36,63592,63593,63595,63597],{"class":38,"line":223},[36,63594,52849],{"class":98},[36,63596,52245],{"class":51733},[36,63598,188],{"class":98},[36,63600,63601,63603,63605],{"class":38,"line":243},[36,63602,52217],{"class":98},[36,63604,52232],{"class":51733},[36,63606,188],{"class":98},[36,63608,63609],{"class":38,"line":250},[36,63610,247],{"emptyLinePlaceholder":246},[36,63612,63613,63615,63617],{"class":38,"line":256},[36,63614,52217],{"class":98},[36,63616,51068],{"class":51733},[36,63618,188],{"class":98},[14,63620,63621],{},"总结：内容发生改变才回去触发",[588,63623,63625],{"id":63624},"_326-事件对象","3.2.6 事件对象",[22437,63627,63629],{"id":63628},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,63631,63632],{},[1941,63633],{"alt":31,"src":63634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,63636,63637],{},[1941,63638],{"alt":31,"src":63639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,63641,63642],{},"点击一次，就输出了事件对象，它是个对象",[14,63644,63645],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,63647,63648],{},[1941,63649],{"alt":31,"src":63650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22437,63652,63654],{"id":63653},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,63656,63657],{},[1941,63658],{"alt":31,"src":63659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,63661,63662],{},"实现按特殊字符才是实现打印输出效果：",[26,63664,63666],{"className":53499,"code":63665,"language":53501,"meta":31,"style":31},"\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",[33,63667,63668,63676,63681,63695,63703,63708,63713,63718,63723,63728,63733,63738,63743,63748,63752,63756,63764],{"__ignoreMap":31},[36,63669,63670,63672,63674],{"class":38,"line":39},[36,63671,179],{"class":98},[36,63673,52232],{"class":51733},[36,63675,188],{"class":98},[36,63677,63678],{"class":38,"line":46},[36,63679,63680],{"class":42},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[36,63682,63683,63685,63687,63689,63691,63693],{"class":38,"line":52},[36,63684,52576],{"class":98},[36,63686,54253],{"class":51733},[36,63688,54256],{"class":55},[36,63690,176],{"class":98},[36,63692,63131],{"class":59},[36,63694,188],{"class":98},[36,63696,63697,63699,63701],{"class":38,"line":66},[36,63698,52576],{"class":98},[36,63700,52245],{"class":51733},[36,63702,188],{"class":98},[36,63704,63705],{"class":38,"line":72},[36,63706,63707],{"class":98},"    \u002F\u002F const btn = document.querySelector('button')\n",[36,63709,63710],{"class":38,"line":82},[36,63711,63712],{"class":98},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[36,63714,63715],{"class":38,"line":88},[36,63716,63717],{"class":98},"    \u002F\u002F   console.log(e);\n",[36,63719,63720],{"class":38,"line":113},[36,63721,63722],{"class":98},"    \u002F\u002F })\n",[36,63724,63725],{"class":38,"line":119},[36,63726,63727],{"class":98},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[36,63729,63730],{"class":38,"line":131},[36,63731,63732],{"class":98},"    const input = document.querySelector('input')\n",[36,63734,63735],{"class":38,"line":137},[36,63736,63737],{"class":98},"    input.addEventListener('keyup', function (e) {\n",[36,63739,63740],{"class":38,"line":147},[36,63741,63742],{"class":98},"      if (e.key === 'Enter') {\n",[36,63744,63745],{"class":38,"line":153},[36,63746,63747],{"class":98},"        console.log('我按下了回车键')\n",[36,63749,63750],{"class":38,"line":191},[36,63751,52830],{"class":98},[36,63753,63754],{"class":38,"line":197},[36,63755,33894],{"class":98},[36,63757,63758,63760,63762],{"class":38,"line":217},[36,63759,52849],{"class":98},[36,63761,52245],{"class":51733},[36,63763,188],{"class":98},[36,63765,63766,63768,63770],{"class":38,"line":223},[36,63767,52217],{"class":98},[36,63769,52232],{"class":51733},[36,63771,188],{"class":98},[22437,63773,63775],{"id":63774},"_3263-trim方法","3.2.6.3 trim方法",[14,63777,63778],{},[1941,63779],{"alt":31,"src":63780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,63782,63783],{},[1941,63784],{"alt":31,"src":63785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,63787,63788],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,63790,63791],{},"str.trim()",[588,63793,63795],{"id":63794},"_327-环境对象","3.2.7 环境对象",[14,63797,63798],{},[1941,63799],{"alt":31,"src":63800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,63802,63803],{},[1941,63804],{"alt":31,"src":63805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,63807,63808],{},[1941,63809],{"alt":31,"src":63810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,63812,63813],{},"实际函数调用是window.fn()",[14,63815,63816],{},"普通函数里面this指向的是window",[1618,63818,63819,63822,63825],{},[574,63820,63821],{},"在普通函数下，this指向的是window",[574,63823,63824],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[574,63826,63827],{},"箭头函数没有this",[14,63829,63830],{},"粗略记法就是：谁调用，this就指向谁",[14,63832,63833],{},[1941,63834],{"alt":31,"src":63835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,63837,63838],{},[1941,63839],{"alt":31,"src":63840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,63842,63843],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,63845,63846],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[26,63848,63850],{"className":53499,"code":63849,"language":53501,"meta":31,"style":31},"\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",[33,63851,63852,63860,63872,63880,63885,63890,63895,63900,63904,63912],{"__ignoreMap":31},[36,63853,63854,63856,63858],{"class":38,"line":39},[36,63855,179],{"class":98},[36,63857,52232],{"class":51733},[36,63859,188],{"class":98},[36,63861,63862,63864,63866,63868,63870],{"class":38,"line":46},[36,63863,52576],{"class":98},[36,63865,54319],{"class":51733},[36,63867,54325],{"class":98},[36,63869,54319],{"class":51733},[36,63871,188],{"class":98},[36,63873,63874,63876,63878],{"class":38,"line":52},[36,63875,52576],{"class":98},[36,63877,52245],{"class":51733},[36,63879,188],{"class":98},[36,63881,63882],{"class":38,"line":66},[36,63883,63884],{"class":98},"    const button = document.querySelector('button')\n",[36,63886,63887],{"class":38,"line":72},[36,63888,63889],{"class":98},"    button.addEventListener('click', function () {\n",[36,63891,63892],{"class":38,"line":82},[36,63893,63894],{"class":98},"      \u002F\u002F console.log(this);\n",[36,63896,63897],{"class":38,"line":88},[36,63898,63899],{"class":98},"      this.style.color = 'pink'\n",[36,63901,63902],{"class":38,"line":113},[36,63903,33894],{"class":98},[36,63905,63906,63908,63910],{"class":38,"line":119},[36,63907,52849],{"class":98},[36,63909,52245],{"class":51733},[36,63911,188],{"class":98},[36,63913,63914,63916,63918],{"class":38,"line":131},[36,63915,52217],{"class":98},[36,63917,52232],{"class":51733},[36,63919,188],{"class":98},[588,63921,63923],{"id":63922},"_328-回调函数","3.2.8 回调函数",[14,63925,63926],{},[1941,63927],{"alt":31,"src":63928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,63930,63931],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,63933,11771],{},[1618,63935,63936,63939,63942],{},[574,63937,63938],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[574,63940,63941],{},"回调函数本质还是函数，只不过把它当成参数使用",[574,63943,63944],{},"使用匿名函数做为回调函数比较常见",[588,63946,63948],{"id":63947},"_329-tab栏切换","3.2.9 tab栏切换",[14,63950,63951],{},[1941,63952],{"alt":31,"src":63953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[26,63955,63957],{"className":51066,"code":63956,"language":51068,"meta":31,"style":31},"\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",[33,63958,63959,63969,63983,63987,63995,64009,64029,64049,64062,64070,64076,64086,64096,64100,64104,64111,64124,64137,64149,64165,64169,64173,64180,64192,64204,64216,64226,64236,64240,64244,64253,64265,64276,64288,64292,64296,64304,64314,64324,64334,64338,64342,64352,64366,64378,64382,64386,64398,64409,64426,64436,64440,64444,64459,64470,64480,64484,64488,64495,64510,64514,64518,64526,64536,64540,64544,64553,64563,64567,64575,64583,64587,64595,64610,64625,64638,64646,64680,64707,64734,64761,64788,64796,64804,64819,64856,64891,64926,64961,64996,65004,65012,65020,65025,65030,65050,65055,65084,65089,65094,65112,65117,65122,65127,65149,65154,65170,65174,65179,65184,65205,65210,65239,65243,65248,65252,65260,65268,65272],{"__ignoreMap":31},[36,63960,63961,63963,63965,63967],{"class":38,"line":39},[36,63962,51730],{"class":98},[36,63964,51734],{"class":51733},[36,63966,51737],{"class":55},[36,63968,188],{"class":98},[36,63970,63971,63973,63975,63977,63979,63981],{"class":38,"line":46},[36,63972,179],{"class":98},[36,63974,51068],{"class":51733},[36,63976,51748],{"class":55},[36,63978,176],{"class":98},[36,63980,51753],{"class":59},[36,63982,188],{"class":98},[36,63984,63985],{"class":38,"line":52},[36,63986,247],{"emptyLinePlaceholder":246},[36,63988,63989,63991,63993],{"class":38,"line":66},[36,63990,179],{"class":98},[36,63992,51766],{"class":51733},[36,63994,188],{"class":98},[36,63996,63997,63999,64001,64003,64005,64007],{"class":38,"line":72},[36,63998,52576],{"class":98},[36,64000,51776],{"class":51733},[36,64002,51779],{"class":55},[36,64004,176],{"class":98},[36,64006,51784],{"class":59},[36,64008,59559],{"class":98},[36,64010,64011,64013,64015,64017,64019,64021,64023,64025,64027],{"class":38,"line":82},[36,64012,52576],{"class":98},[36,64014,51776],{"class":51733},[36,64016,51795],{"class":55},[36,64018,176],{"class":98},[36,64020,51800],{"class":59},[36,64022,51803],{"class":55},[36,64024,176],{"class":98},[36,64026,51808],{"class":59},[36,64028,59559],{"class":98},[36,64030,64031,64033,64035,64037,64039,64041,64043,64045,64047],{"class":38,"line":88},[36,64032,52576],{"class":98},[36,64034,51776],{"class":51733},[36,64036,15359],{"class":55},[36,64038,176],{"class":98},[36,64040,51823],{"class":59},[36,64042,51803],{"class":55},[36,64044,176],{"class":98},[36,64046,51830],{"class":59},[36,64048,59559],{"class":98},[36,64050,64051,64053,64055,64058,64060],{"class":38,"line":113},[36,64052,52576],{"class":98},[36,64054,51839],{"class":51733},[36,64056,64057],{"class":98},">tab栏切换\u003C\u002F",[36,64059,51839],{"class":51733},[36,64061,188],{"class":98},[36,64063,64064,64066,64068],{"class":38,"line":119},[36,64065,52576],{"class":98},[36,64067,537],{"class":51733},[36,64069,188],{"class":98},[36,64071,64072,64074],{"class":38,"line":131},[36,64073,6854],{"class":51733},[36,64075,16011],{"class":98},[36,64077,64078,64080,64082,64084],{"class":38,"line":137},[36,64079,55138],{"class":109},[36,64081,51869],{"class":98},[36,64083,807],{"class":109},[36,64085,1772],{"class":98},[36,64087,64088,64090,64092,64094],{"class":38,"line":147},[36,64089,55127],{"class":109},[36,64091,51869],{"class":98},[36,64093,807],{"class":109},[36,64095,1772],{"class":98},[36,64097,64098],{"class":38,"line":153},[36,64099,2646],{"class":98},[36,64101,64102],{"class":38,"line":191},[36,64103,247],{"emptyLinePlaceholder":246},[36,64105,64106,64109],{"class":38,"line":197},[36,64107,64108],{"class":55},"    .tab",[36,64110,16011],{"class":98},[36,64112,64113,64115,64117,64120,64122],{"class":38,"line":217},[36,64114,55203],{"class":109},[36,64116,51869],{"class":98},[36,64118,64119],{"class":109},"590",[36,64121,51924],{"class":163},[36,64123,1772],{"class":98},[36,64125,64126,64128,64130,64133,64135],{"class":38,"line":223},[36,64127,55217],{"class":109},[36,64129,51869],{"class":98},[36,64131,64132],{"class":109},"340",[36,64134,51924],{"class":163},[36,64136,1772],{"class":98},[36,64138,64139,64141,64143,64145,64147],{"class":38,"line":243},[36,64140,55138],{"class":109},[36,64142,51869],{"class":98},[36,64144,1313],{"class":109},[36,64146,51924],{"class":163},[36,64148,1772],{"class":98},[36,64150,64151,64153,64155,64157,64159,64161,64163],{"class":38,"line":250},[36,64152,62409],{"class":109},[36,64154,51869],{"class":98},[36,64156,833],{"class":109},[36,64158,51924],{"class":163},[36,64160,51953],{"class":109},[36,64162,62676],{"class":109},[36,64164,1772],{"class":98},[36,64166,64167],{"class":38,"line":256},[36,64168,2646],{"class":98},[36,64170,64171],{"class":38,"line":273},[36,64172,247],{"emptyLinePlaceholder":246},[36,64174,64175,64178],{"class":38,"line":278},[36,64176,64177],{"class":55},"    .tab-nav",[36,64179,16011],{"class":98},[36,64181,64182,64184,64186,64188,64190],{"class":38,"line":284},[36,64183,55203],{"class":109},[36,64185,51869],{"class":98},[36,64187,926],{"class":109},[36,64189,942],{"class":163},[36,64191,1772],{"class":98},[36,64193,64194,64196,64198,64200,64202],{"class":38,"line":315},[36,64195,55217],{"class":109},[36,64197,51869],{"class":98},[36,64199,1520],{"class":109},[36,64201,51924],{"class":163},[36,64203,1772],{"class":98},[36,64205,64206,64208,64210,64212,64214],{"class":38,"line":320},[36,64207,57791],{"class":109},[36,64209,51869],{"class":98},[36,64211,1520],{"class":109},[36,64213,51924],{"class":163},[36,64215,1772],{"class":98},[36,64217,64218,64220,64222,64224],{"class":38,"line":326},[36,64219,55441],{"class":109},[36,64221,51869],{"class":98},[36,64223,51909],{"class":109},[36,64225,1772],{"class":98},[36,64227,64228,64230,64232,64234],{"class":38,"line":343},[36,64229,55452],{"class":109},[36,64231,51869],{"class":98},[36,64233,52100],{"class":109},[36,64235,1772],{"class":98},[36,64237,64238],{"class":38,"line":348},[36,64239,2646],{"class":98},[36,64241,64242],{"class":38,"line":354},[36,64243,247],{"emptyLinePlaceholder":246},[36,64245,64246,64248,64251],{"class":38,"line":370},[36,64247,64177],{"class":55},[36,64249,64250],{"class":51733}," h3",[36,64252,16011],{"class":98},[36,64254,64255,64257,64259,64261,64263],{"class":38,"line":375},[36,64256,55354],{"class":109},[36,64258,51869],{"class":98},[36,64260,1413],{"class":109},[36,64262,51924],{"class":163},[36,64264,1772],{"class":98},[36,64266,64267,64269,64271,64274],{"class":38,"line":381},[36,64268,62766],{"class":109},[36,64270,51869],{"class":98},[36,64272,64273],{"class":109},"normal",[36,64275,1772],{"class":98},[36,64277,64278,64280,64282,64284,64286],{"class":38,"line":399},[36,64279,62432],{"class":109},[36,64281,51869],{"class":98},[36,64283,1313],{"class":109},[36,64285,51924],{"class":163},[36,64287,1772],{"class":98},[36,64289,64290],{"class":38,"line":404},[36,64291,2646],{"class":98},[36,64293,64294],{"class":38,"line":410},[36,64295,247],{"emptyLinePlaceholder":246},[36,64297,64298,64300,64302],{"class":38,"line":423},[36,64299,64177],{"class":55},[36,64301,61724],{"class":51733},[36,64303,16011],{"class":98},[36,64305,64306,64308,64310,64312],{"class":38,"line":436},[36,64307,55164],{"class":109},[36,64309,51869],{"class":98},[36,64311,55169],{"class":109},[36,64313,1772],{"class":98},[36,64315,64316,64318,64320,64322],{"class":38,"line":441},[36,64317,55441],{"class":109},[36,64319,51869],{"class":98},[36,64321,51909],{"class":109},[36,64323,1772],{"class":98},[36,64325,64326,64328,64330,64332],{"class":38,"line":447},[36,64327,55452],{"class":109},[36,64329,51869],{"class":98},[36,64331,52012],{"class":109},[36,64333,1772],{"class":98},[36,64335,64336],{"class":38,"line":465},[36,64337,2646],{"class":98},[36,64339,64340],{"class":38,"line":470},[36,64341,247],{"emptyLinePlaceholder":246},[36,64343,64344,64346,64348,64350],{"class":38,"line":476},[36,64345,64177],{"class":55},[36,64347,61724],{"class":51733},[36,64349,55507],{"class":51733},[36,64351,16011],{"class":98},[36,64353,64354,64356,64358,64360,64362,64364],{"class":38,"line":496},[36,64355,55138],{"class":109},[36,64357,51869],{"class":98},[36,64359,807],{"class":109},[36,64361,9391],{"class":109},[36,64363,51924],{"class":163},[36,64365,1772],{"class":98},[36,64367,64368,64370,64372,64374,64376],{"class":38,"line":501},[36,64369,55354],{"class":109},[36,64371,51869],{"class":98},[36,64373,1163],{"class":109},[36,64375,51924],{"class":163},[36,64377,1772],{"class":98},[36,64379,64380],{"class":38,"line":507},[36,64381,2646],{"class":98},[36,64383,64384],{"class":38,"line":517},[36,64385,247],{"emptyLinePlaceholder":246},[36,64387,64388,64390,64392,64394,64396],{"class":38,"line":522},[36,64389,64177],{"class":55},[36,64391,61724],{"class":51733},[36,64393,55507],{"class":51733},[36,64395,1877],{"class":51733},[36,64397,16011],{"class":98},[36,64399,64400,64403,64405,64407],{"class":38,"line":528},[36,64401,64402],{"class":109},"      text-decoration",[36,64404,51869],{"class":98},[36,64406,55169],{"class":109},[36,64408,1772],{"class":98},[36,64410,64411,64413,64415,64417,64419,64421,64424],{"class":38,"line":10203},[36,64412,62664],{"class":109},[36,64414,51869],{"class":98},[36,64416,694],{"class":109},[36,64418,51924],{"class":163},[36,64420,51953],{"class":109},[36,64422,64423],{"class":109}," transparent",[36,64425,1772],{"class":98},[36,64427,64428,64430,64432,64434],{"class":38,"line":10227},[36,64429,57848],{"class":109},[36,64431,51869],{"class":98},[36,64433,62801],{"class":109},[36,64435,1772],{"class":98},[36,64437,64438],{"class":38,"line":10232},[36,64439,2646],{"class":98},[36,64441,64442],{"class":38,"line":10237},[36,64443,247],{"emptyLinePlaceholder":246},[36,64445,64446,64448,64450,64452,64454,64457],{"class":38,"line":10242},[36,64447,64177],{"class":55},[36,64449,61724],{"class":51733},[36,64451,55507],{"class":51733},[36,64453,1877],{"class":51733},[36,64455,64456],{"class":55},".active",[36,64458,16011],{"class":98},[36,64460,64461,64463,64465,64468],{"class":38,"line":10251},[36,64462,62223],{"class":109},[36,64464,51869],{"class":98},[36,64466,64467],{"class":109},"#e1251b",[36,64469,1772],{"class":98},[36,64471,64472,64474,64476,64478],{"class":38,"line":10256},[36,64473,57848],{"class":109},[36,64475,51869],{"class":98},[36,64477,64467],{"class":109},[36,64479,1772],{"class":98},[36,64481,64482],{"class":38,"line":10262},[36,64483,2646],{"class":98},[36,64485,64486],{"class":38,"line":10283},[36,64487,247],{"emptyLinePlaceholder":246},[36,64489,64490,64493],{"class":38,"line":10289},[36,64491,64492],{"class":55},"    .tab-content",[36,64494,16011],{"class":98},[36,64496,64497,64499,64501,64503,64506,64508],{"class":38,"line":10303},[36,64498,55127],{"class":109},[36,64500,51869],{"class":98},[36,64502,807],{"class":109},[36,64504,64505],{"class":109}," 16",[36,64507,51924],{"class":163},[36,64509,1772],{"class":98},[36,64511,64512],{"class":38,"line":10309},[36,64513,2646],{"class":98},[36,64515,64516],{"class":38,"line":10336},[36,64517,247],{"emptyLinePlaceholder":246},[36,64519,64520,64522,64524],{"class":38,"line":10345},[36,64521,64492],{"class":55},[36,64523,62606],{"class":55},[36,64525,16011],{"class":98},[36,64527,64528,64530,64532,64534],{"class":38,"line":10351},[36,64529,55441],{"class":109},[36,64531,51869],{"class":98},[36,64533,55169],{"class":109},[36,64535,1772],{"class":98},[36,64537,64538],{"class":38,"line":10359},[36,64539,2646],{"class":98},[36,64541,64542],{"class":38,"line":10364},[36,64543,247],{"emptyLinePlaceholder":246},[36,64545,64546,64548,64551],{"class":38,"line":17043},[36,64547,64492],{"class":55},[36,64549,64550],{"class":55}," .item.active",[36,64552,16011],{"class":98},[36,64554,64555,64557,64559,64561],{"class":38,"line":17049},[36,64556,55441],{"class":109},[36,64558,51869],{"class":98},[36,64560,61301],{"class":109},[36,64562,1772],{"class":98},[36,64564,64565],{"class":38,"line":17072},[36,64566,2646],{"class":98},[36,64568,64569,64571,64573],{"class":38,"line":17078},[36,64570,52849],{"class":98},[36,64572,537],{"class":51733},[36,64574,188],{"class":98},[36,64576,64577,64579,64581],{"class":38,"line":17101},[36,64578,52217],{"class":98},[36,64580,51766],{"class":51733},[36,64582,188],{"class":98},[36,64584,64585],{"class":38,"line":17115},[36,64586,247],{"emptyLinePlaceholder":246},[36,64588,64589,64591,64593],{"class":38,"line":17135},[36,64590,179],{"class":98},[36,64592,52232],{"class":51733},[36,64594,188],{"class":98},[36,64596,64597,64599,64601,64603,64605,64608],{"class":38,"line":17141},[36,64598,52576],{"class":98},[36,64600,52043],{"class":51733},[36,64602,53918],{"class":55},[36,64604,176],{"class":98},[36,64606,64607],{"class":59},"\"tab\"",[36,64609,188],{"class":98},[36,64611,64612,64614,64616,64618,64620,64623],{"class":38,"line":17152},[36,64613,51773],{"class":98},[36,64615,52043],{"class":51733},[36,64617,53918],{"class":55},[36,64619,176],{"class":98},[36,64621,64622],{"class":59},"\"tab-nav\"",[36,64624,188],{"class":98},[36,64626,64627,64629,64631,64634,64636],{"class":38,"line":17175},[36,64628,55666],{"class":98},[36,64630,588],{"class":51733},[36,64632,64633],{"class":98},">每日特价\u003C\u002F",[36,64635,588],{"class":51733},[36,64637,188],{"class":98},[36,64639,64640,64642,64644],{"class":38,"line":17197},[36,64641,55666],{"class":98},[36,64643,1618],{"class":51733},[36,64645,188],{"class":98},[36,64647,64648,64650,64652,64654,64656,64658,64660,64662,64664,64666,64669,64672,64674,64676,64678],{"class":38,"line":17202},[36,64649,55734],{"class":98},[36,64651,574],{"class":51733},[36,64653,61484],{"class":98},[36,64655,20],{"class":51733},[36,64657,53918],{"class":55},[36,64659,176],{"class":98},[36,64661,60138],{"class":59},[36,64663,61489],{"class":55},[36,64665,176],{"class":98},[36,64667,64668],{"class":59},"\"javascript:;\"",[36,64670,64671],{"class":98},">精选\u003C\u002F",[36,64673,20],{"class":51733},[36,64675,55746],{"class":98},[36,64677,574],{"class":51733},[36,64679,188],{"class":98},[36,64681,64682,64684,64686,64688,64690,64692,64694,64696,64699,64701,64703,64705],{"class":38,"line":17208},[36,64683,55734],{"class":98},[36,64685,574],{"class":51733},[36,64687,61484],{"class":98},[36,64689,20],{"class":51733},[36,64691,61489],{"class":55},[36,64693,176],{"class":98},[36,64695,64668],{"class":59},[36,64697,64698],{"class":98},">美食\u003C\u002F",[36,64700,20],{"class":51733},[36,64702,55746],{"class":98},[36,64704,574],{"class":51733},[36,64706,188],{"class":98},[36,64708,64709,64711,64713,64715,64717,64719,64721,64723,64726,64728,64730,64732],{"class":38,"line":17222},[36,64710,55734],{"class":98},[36,64712,574],{"class":51733},[36,64714,61484],{"class":98},[36,64716,20],{"class":51733},[36,64718,61489],{"class":55},[36,64720,176],{"class":98},[36,64722,64668],{"class":59},[36,64724,64725],{"class":98},">百货\u003C\u002F",[36,64727,20],{"class":51733},[36,64729,55746],{"class":98},[36,64731,574],{"class":51733},[36,64733,188],{"class":98},[36,64735,64736,64738,64740,64742,64744,64746,64748,64750,64753,64755,64757,64759],{"class":38,"line":17235},[36,64737,55734],{"class":98},[36,64739,574],{"class":51733},[36,64741,61484],{"class":98},[36,64743,20],{"class":51733},[36,64745,61489],{"class":55},[36,64747,176],{"class":98},[36,64749,64668],{"class":59},[36,64751,64752],{"class":98},">个护\u003C\u002F",[36,64754,20],{"class":51733},[36,64756,55746],{"class":98},[36,64758,574],{"class":51733},[36,64760,188],{"class":98},[36,64762,64763,64765,64767,64769,64771,64773,64775,64777,64780,64782,64784,64786],{"class":38,"line":17240},[36,64764,55734],{"class":98},[36,64766,574],{"class":51733},[36,64768,61484],{"class":98},[36,64770,20],{"class":51733},[36,64772,61489],{"class":55},[36,64774,176],{"class":98},[36,64776,64668],{"class":59},[36,64778,64779],{"class":98},">预告\u003C\u002F",[36,64781,20],{"class":51733},[36,64783,55746],{"class":98},[36,64785,574],{"class":51733},[36,64787,188],{"class":98},[36,64789,64790,64792,64794],{"class":38,"line":17254},[36,64791,55839],{"class":98},[36,64793,1618],{"class":51733},[36,64795,188],{"class":98},[36,64797,64798,64800,64802],{"class":38,"line":17259},[36,64799,52208],{"class":98},[36,64801,52043],{"class":51733},[36,64803,188],{"class":98},[36,64805,64806,64808,64810,64812,64814,64817],{"class":38,"line":17265},[36,64807,51773],{"class":98},[36,64809,52043],{"class":51733},[36,64811,53918],{"class":55},[36,64813,176],{"class":98},[36,64815,64816],{"class":59},"\"tab-content\"",[36,64818,188],{"class":98},[36,64820,64821,64823,64825,64827,64829,64832,64834,64836,64838,64840,64843,64845,64847,64849,64852,64854],{"class":38,"line":17270},[36,64822,55666],{"class":98},[36,64824,52043],{"class":51733},[36,64826,53918],{"class":55},[36,64828,176],{"class":98},[36,64830,64831],{"class":59},"\"item active\"",[36,64833,61484],{"class":98},[36,64835,1941],{"class":51733},[36,64837,55671],{"class":55},[36,64839,176],{"class":98},[36,64841,64842],{"class":59},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[36,64844,55679],{"class":55},[36,64846,176],{"class":98},[36,64848,8103],{"class":59},[36,64850,64851],{"class":98}," \u002F>\u003C\u002F",[36,64853,52043],{"class":51733},[36,64855,188],{"class":98},[36,64857,64858,64860,64862,64864,64866,64868,64870,64872,64874,64876,64879,64881,64883,64885,64887,64889],{"class":38,"line":17284},[36,64859,55666],{"class":98},[36,64861,52043],{"class":51733},[36,64863,53918],{"class":55},[36,64865,176],{"class":98},[36,64867,63055],{"class":59},[36,64869,61484],{"class":98},[36,64871,1941],{"class":51733},[36,64873,55671],{"class":55},[36,64875,176],{"class":98},[36,64877,64878],{"class":59},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[36,64880,55679],{"class":55},[36,64882,176],{"class":98},[36,64884,8103],{"class":59},[36,64886,64851],{"class":98},[36,64888,52043],{"class":51733},[36,64890,188],{"class":98},[36,64892,64893,64895,64897,64899,64901,64903,64905,64907,64909,64911,64914,64916,64918,64920,64922,64924],{"class":38,"line":17289},[36,64894,55666],{"class":98},[36,64896,52043],{"class":51733},[36,64898,53918],{"class":55},[36,64900,176],{"class":98},[36,64902,63055],{"class":59},[36,64904,61484],{"class":98},[36,64906,1941],{"class":51733},[36,64908,55671],{"class":55},[36,64910,176],{"class":98},[36,64912,64913],{"class":59},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[36,64915,55679],{"class":55},[36,64917,176],{"class":98},[36,64919,8103],{"class":59},[36,64921,64851],{"class":98},[36,64923,52043],{"class":51733},[36,64925,188],{"class":98},[36,64927,64928,64930,64932,64934,64936,64938,64940,64942,64944,64946,64949,64951,64953,64955,64957,64959],{"class":38,"line":17294},[36,64929,55666],{"class":98},[36,64931,52043],{"class":51733},[36,64933,53918],{"class":55},[36,64935,176],{"class":98},[36,64937,63055],{"class":59},[36,64939,61484],{"class":98},[36,64941,1941],{"class":51733},[36,64943,55671],{"class":55},[36,64945,176],{"class":98},[36,64947,64948],{"class":59},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[36,64950,55679],{"class":55},[36,64952,176],{"class":98},[36,64954,8103],{"class":59},[36,64956,64851],{"class":98},[36,64958,52043],{"class":51733},[36,64960,188],{"class":98},[36,64962,64963,64965,64967,64969,64971,64973,64975,64977,64979,64981,64984,64986,64988,64990,64992,64994],{"class":38,"line":17308},[36,64964,55666],{"class":98},[36,64966,52043],{"class":51733},[36,64968,53918],{"class":55},[36,64970,176],{"class":98},[36,64972,63055],{"class":59},[36,64974,61484],{"class":98},[36,64976,1941],{"class":51733},[36,64978,55671],{"class":55},[36,64980,176],{"class":98},[36,64982,64983],{"class":59},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[36,64985,55679],{"class":55},[36,64987,176],{"class":98},[36,64989,8103],{"class":59},[36,64991,64851],{"class":98},[36,64993,52043],{"class":51733},[36,64995,188],{"class":98},[36,64997,64998,65000,65002],{"class":38,"line":17320},[36,64999,52208],{"class":98},[36,65001,52043],{"class":51733},[36,65003,188],{"class":98},[36,65005,65006,65008,65010],{"class":38,"line":17325},[36,65007,52849],{"class":98},[36,65009,52043],{"class":51733},[36,65011,188],{"class":98},[36,65013,65014,65016,65018],{"class":38,"line":17338},[36,65015,52576],{"class":98},[36,65017,52245],{"class":51733},[36,65019,188],{"class":98},[36,65021,65022],{"class":38,"line":17343},[36,65023,65024],{"class":42},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[36,65026,65027],{"class":38,"line":17348},[36,65028,65029],{"class":42},"    \u002F\u002F 1.1 获取 a 元素 \n",[36,65031,65032,65034,65037,65039,65041,65043,65045,65048],{"class":38,"line":17353},[36,65033,11660],{"class":163},[36,65035,65036],{"class":109}," as",[36,65038,14003],{"class":163},[36,65040,54828],{"class":98},[36,65042,56113],{"class":55},[36,65044,621],{"class":98},[36,65046,65047],{"class":59},"'.tab-nav a'",[36,65049,627],{"class":98},[36,65051,65052],{"class":38,"line":17366},[36,65053,65054],{"class":42},"    \u002F\u002F console.log(as) \n",[36,65056,65057,65059,65061,65063,65065,65067,65069,65071,65073,65076,65078,65080,65082],{"class":38,"line":17371},[36,65058,3652],{"class":163},[36,65060,2130],{"class":98},[36,65062,52279],{"class":163},[36,65064,9879],{"class":98},[36,65066,176],{"class":163},[36,65068,4544],{"class":109},[36,65070,9886],{"class":98},[36,65072,179],{"class":163},[36,65074,65075],{"class":98}," as.",[36,65077,52400],{"class":109},[36,65079,3665],{"class":98},[36,65081,2751],{"class":163},[36,65083,12881],{"class":98},[36,65085,65086],{"class":38,"line":33066},[36,65087,65088],{"class":42},"      \u002F\u002F console.log(as[i])\n",[36,65090,65091],{"class":38,"line":33072},[36,65092,65093],{"class":42},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[36,65095,65096,65099,65101,65103,65106,65108,65110],{"class":38,"line":33078},[36,65097,65098],{"class":98},"      as[i].",[36,65100,58245],{"class":55},[36,65102,621],{"class":98},[36,65104,65105],{"class":59},"'mouseenter'",[36,65107,12874],{"class":98},[36,65109,54881],{"class":163},[36,65111,54884],{"class":98},[36,65113,65114],{"class":38,"line":33084},[36,65115,65116],{"class":42},"        \u002F\u002F console.log('鼠标经过')\n",[36,65118,65119],{"class":38,"line":33090},[36,65120,65121],{"class":42},"        \u002F\u002F 排他思想  \n",[36,65123,65124],{"class":38,"line":33101},[36,65125,65126],{"class":42},"        \u002F\u002F 干掉别人 移除类active\n",[36,65128,65129,65131,65133,65135,65138,65140,65142,65144,65147],{"class":38,"line":33107},[36,65130,52357],{"class":98},[36,65132,54831],{"class":55},[36,65134,621],{"class":98},[36,65136,65137],{"class":59},"'.tab-nav .active'",[36,65139,57435],{"class":98},[36,65141,57438],{"class":55},[36,65143,621],{"class":98},[36,65145,65146],{"class":59},"'active'",[36,65148,627],{"class":98},[36,65150,65151],{"class":38,"line":33127},[36,65152,65153],{"class":42},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[36,65155,65156,65159,65162,65164,65166,65168],{"class":38,"line":33133},[36,65157,65158],{"class":109},"        this",[36,65160,65161],{"class":98},".classList.",[36,65163,5785],{"class":55},[36,65165,621],{"class":98},[36,65167,65146],{"class":59},[36,65169,627],{"class":98},[36,65171,65172],{"class":38,"line":33144},[36,65173,247],{"emptyLinePlaceholder":246},[36,65175,65176],{"class":38,"line":33150},[36,65177,65178],{"class":42},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[36,65180,65181],{"class":38,"line":33156},[36,65182,65183],{"class":42},"        \u002F\u002F 干掉别人\n",[36,65185,65186,65188,65190,65192,65195,65197,65199,65201,65203],{"class":38,"line":33162},[36,65187,52357],{"class":98},[36,65189,54831],{"class":55},[36,65191,621],{"class":98},[36,65193,65194],{"class":59},"'.tab-content .active'",[36,65196,57435],{"class":98},[36,65198,57438],{"class":55},[36,65200,621],{"class":98},[36,65202,65146],{"class":59},[36,65204,627],{"class":98},[36,65206,65207],{"class":38,"line":33168},[36,65208,65209],{"class":42},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[36,65211,65212,65214,65216,65218,65221,65223,65225,65227,65229,65231,65233,65235,65237],{"class":38,"line":33174},[36,65213,52357],{"class":98},[36,65215,54831],{"class":55},[36,65217,621],{"class":98},[36,65219,65220],{"class":59},"`.tab-content .item:nth-child(${",[36,65222,1055],{"class":98},[36,65224,45999],{"class":163},[36,65226,25555],{"class":109},[36,65228,57464],{"class":59},[36,65230,57435],{"class":98},[36,65232,5785],{"class":55},[36,65234,621],{"class":98},[36,65236,65146],{"class":59},[36,65238,627],{"class":98},[36,65240,65241],{"class":38,"line":33180},[36,65242,247],{"emptyLinePlaceholder":246},[36,65244,65245],{"class":38,"line":33186},[36,65246,65247],{"class":98},"      })\n",[36,65249,65250],{"class":38,"line":33206},[36,65251,2646],{"class":98},[36,65253,65254,65256,65258],{"class":38,"line":33212},[36,65255,52849],{"class":98},[36,65257,52245],{"class":51733},[36,65259,188],{"class":98},[36,65261,65262,65264,65266],{"class":38,"line":33228},[36,65263,52217],{"class":98},[36,65265,52232],{"class":51733},[36,65267,188],{"class":98},[36,65269,65270],{"class":38,"line":33234},[36,65271,247],{"emptyLinePlaceholder":246},[36,65273,65274,65276,65278],{"class":38,"line":33248},[36,65275,52217],{"class":98},[36,65277,51068],{"class":51733},[36,65279,188],{"class":98},[14,65281,65282],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,65284,65285],{},"在监听事件中，this指向的就是他的调用者",[14,65287,65288],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,65290,54152],{},[14,65292,65293],{},"(function () {",[14,65295,65296],{},"const list = document.querySelector('.xtx-elevator-list')",[14,65298,65299],{},"list.addEventListener('click', function (e) {",[14,65301,65302],{},"if (e.target.tagName === 'A') {",[14,65304,65305],{},"\u002F\u002F 排他思想",[14,65307,65308],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,65310,65311],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,65313,65314],{},"\u002F\u002F console.log(old);",[14,65316,65317],{},"\u002F\u002F 判断",[14,65319,65320],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,65322,65323],{},"if (old) old.classList.remove('active')",[14,65325,65326],{},"e.target.classList.add('active')",[14,65328,1558],{},[14,65330,52896],{},[14,65332,65333],{},"})();",[588,65335,65337],{"id":65336},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[26,65339,65341],{"className":51066,"code":65340,"language":51068,"meta":31,"style":31},"\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",[33,65342,65343,65353,65357,65365,65369,65383,65397,65409,65417,65423,65433,65443,65447,65451,65458,65470,65481,65498,65511,65525,65535,65539,65543,65550,65561,65579,65589,65601,65605,65609,65616,65633,65644,65656,65660,65664,65671,65683,65687,65695,65703,65707,65715,65723,65731,65746,65790,65798,65811,65824,65837,65845,65853,65861,65889,65897,65909,65922,65935,65943,65951,65959,65985,65993,66006,66018,66031,66039,66047,66055,66081,66089,66102,66114,66127,66135,66143,66151,66156,66176,66181,66201,66206,66223,66228,66236,66241,66270,66283,66287,66291,66296,66300,66328,66333,66350,66355,66360,66365,66370,66396,66400,66404,66412,66420,66424],{"__ignoreMap":31},[36,65344,65345,65347,65349,65351],{"class":38,"line":39},[36,65346,51730],{"class":98},[36,65348,51734],{"class":51733},[36,65350,51737],{"class":55},[36,65352,188],{"class":98},[36,65354,65355],{"class":38,"line":46},[36,65356,247],{"emptyLinePlaceholder":246},[36,65358,65359,65361,65363],{"class":38,"line":52},[36,65360,179],{"class":98},[36,65362,51068],{"class":51733},[36,65364,188],{"class":98},[36,65366,65367],{"class":38,"line":66},[36,65368,247],{"emptyLinePlaceholder":246},[36,65370,65371,65373,65375,65377,65379,65381],{"class":38,"line":72},[36,65372,179],{"class":98},[36,65374,51766],{"class":51733},[36,65376,51748],{"class":55},[36,65378,176],{"class":98},[36,65380,51753],{"class":59},[36,65382,188],{"class":98},[36,65384,65385,65387,65389,65391,65393,65395],{"class":38,"line":82},[36,65386,52576],{"class":98},[36,65388,51776],{"class":51733},[36,65390,51779],{"class":55},[36,65392,176],{"class":98},[36,65394,51784],{"class":59},[36,65396,188],{"class":98},[36,65398,65399,65401,65403,65405,65407],{"class":38,"line":88},[36,65400,52576],{"class":98},[36,65402,51839],{"class":51733},[36,65404,55746],{"class":98},[36,65406,51839],{"class":51733},[36,65408,188],{"class":98},[36,65410,65411,65413,65415],{"class":38,"line":113},[36,65412,52576],{"class":98},[36,65414,537],{"class":51733},[36,65416,188],{"class":98},[36,65418,65419,65421],{"class":38,"line":119},[36,65420,6854],{"class":51733},[36,65422,16011],{"class":98},[36,65424,65425,65427,65429,65431],{"class":38,"line":131},[36,65426,55138],{"class":109},[36,65428,51869],{"class":98},[36,65430,807],{"class":109},[36,65432,1772],{"class":98},[36,65434,65435,65437,65439,65441],{"class":38,"line":137},[36,65436,55127],{"class":109},[36,65438,51869],{"class":98},[36,65440,807],{"class":109},[36,65442,1772],{"class":98},[36,65444,65445],{"class":38,"line":147},[36,65446,2646],{"class":98},[36,65448,65449],{"class":38,"line":153},[36,65450,247],{"emptyLinePlaceholder":246},[36,65452,65453,65456],{"class":38,"line":191},[36,65454,65455],{"class":51733},"    table",[36,65457,16011],{"class":98},[36,65459,65460,65463,65465,65468],{"class":38,"line":197},[36,65461,65462],{"class":109},"      border-collapse",[36,65464,51869],{"class":98},[36,65466,65467],{"class":109},"collapse",[36,65469,1772],{"class":98},[36,65471,65472,65475,65477,65479],{"class":38,"line":217},[36,65473,65474],{"class":109},"      border-spacing",[36,65476,51869],{"class":98},[36,65478,807],{"class":109},[36,65480,1772],{"class":98},[36,65482,65483,65485,65487,65489,65491,65493,65496],{"class":38,"line":223},[36,65484,62409],{"class":109},[36,65486,51869],{"class":98},[36,65488,833],{"class":109},[36,65490,51924],{"class":163},[36,65492,51953],{"class":109},[36,65494,65495],{"class":109}," #c0c0c0",[36,65497,1772],{"class":98},[36,65499,65500,65502,65504,65507,65509],{"class":38,"line":243},[36,65501,55203],{"class":109},[36,65503,51869],{"class":98},[36,65505,65506],{"class":109},"500",[36,65508,51924],{"class":163},[36,65510,1772],{"class":98},[36,65512,65513,65515,65517,65519,65521,65523],{"class":38,"line":250},[36,65514,55138],{"class":109},[36,65516,51869],{"class":98},[36,65518,926],{"class":109},[36,65520,51924],{"class":163},[36,65522,51988],{"class":109},[36,65524,1772],{"class":98},[36,65526,65527,65529,65531,65533],{"class":38,"line":256},[36,65528,57718],{"class":109},[36,65530,51869],{"class":98},[36,65532,52024],{"class":109},[36,65534,1772],{"class":98},[36,65536,65537],{"class":38,"line":273},[36,65538,2646],{"class":98},[36,65540,65541],{"class":38,"line":278},[36,65542,247],{"emptyLinePlaceholder":246},[36,65544,65545,65548],{"class":38,"line":284},[36,65546,65547],{"class":51733},"    th",[36,65549,16011],{"class":98},[36,65551,65552,65554,65556,65559],{"class":38,"line":315},[36,65553,55316],{"class":109},[36,65555,51869],{"class":98},[36,65557,65558],{"class":109},"#09c",[36,65560,1772],{"class":98},[36,65562,65563,65566,65568,65570,65572,65574,65577],{"class":38,"line":320},[36,65564,65565],{"class":109},"      font",[36,65567,51869],{"class":98},[36,65569,62771],{"class":109},[36,65571,64505],{"class":109},[36,65573,51924],{"class":163},[36,65575,65576],{"class":59}," \"微软雅黑\"",[36,65578,1772],{"class":98},[36,65580,65581,65583,65585,65587],{"class":38,"line":326},[36,65582,57848],{"class":109},[36,65584,51869],{"class":98},[36,65586,61274],{"class":109},[36,65588,1772],{"class":98},[36,65590,65591,65593,65595,65597,65599],{"class":38,"line":343},[36,65592,55217],{"class":109},[36,65594,51869],{"class":98},[36,65596,1413],{"class":109},[36,65598,51924],{"class":163},[36,65600,1772],{"class":98},[36,65602,65603],{"class":38,"line":348},[36,65604,2646],{"class":98},[36,65606,65607],{"class":38,"line":354},[36,65608,247],{"emptyLinePlaceholder":246},[36,65610,65611,65614],{"class":38,"line":370},[36,65612,65613],{"class":51733},"    td",[36,65615,16011],{"class":98},[36,65617,65618,65620,65622,65624,65626,65628,65631],{"class":38,"line":375},[36,65619,62409],{"class":109},[36,65621,51869],{"class":98},[36,65623,833],{"class":109},[36,65625,51924],{"class":163},[36,65627,51953],{"class":109},[36,65629,65630],{"class":109}," #d0d0d0",[36,65632,1772],{"class":98},[36,65634,65635,65637,65639,65642],{"class":38,"line":381},[36,65636,57848],{"class":109},[36,65638,51869],{"class":98},[36,65640,65641],{"class":109},"#404060",[36,65643,1772],{"class":98},[36,65645,65646,65648,65650,65652,65654],{"class":38,"line":399},[36,65647,55127],{"class":109},[36,65649,51869],{"class":98},[36,65651,1060],{"class":109},[36,65653,51924],{"class":163},[36,65655,1772],{"class":98},[36,65657,65658],{"class":38,"line":404},[36,65659,2646],{"class":98},[36,65661,65662],{"class":38,"line":410},[36,65663,247],{"emptyLinePlaceholder":246},[36,65665,65666,65669],{"class":38,"line":423},[36,65667,65668],{"class":55},"    .allCheck",[36,65670,16011],{"class":98},[36,65672,65673,65675,65677,65679,65681],{"class":38,"line":436},[36,65674,55203],{"class":109},[36,65676,51869],{"class":98},[36,65678,1226],{"class":109},[36,65680,51924],{"class":163},[36,65682,1772],{"class":98},[36,65684,65685],{"class":38,"line":441},[36,65686,2646],{"class":98},[36,65688,65689,65691,65693],{"class":38,"line":447},[36,65690,52849],{"class":98},[36,65692,537],{"class":51733},[36,65694,188],{"class":98},[36,65696,65697,65699,65701],{"class":38,"line":465},[36,65698,52217],{"class":98},[36,65700,51766],{"class":51733},[36,65702,188],{"class":98},[36,65704,65705],{"class":38,"line":470},[36,65706,247],{"emptyLinePlaceholder":246},[36,65708,65709,65711,65713],{"class":38,"line":476},[36,65710,179],{"class":98},[36,65712,52232],{"class":51733},[36,65714,188],{"class":98},[36,65716,65717,65719,65721],{"class":38,"line":496},[36,65718,52576],{"class":98},[36,65720,753],{"class":51733},[36,65722,188],{"class":98},[36,65724,65725,65727,65729],{"class":38,"line":501},[36,65726,51773],{"class":98},[36,65728,759],{"class":51733},[36,65730,188],{"class":98},[36,65732,65733,65735,65737,65739,65741,65744],{"class":38,"line":507},[36,65734,55666],{"class":98},[36,65736,762],{"class":51733},[36,65738,53918],{"class":55},[36,65740,176],{"class":98},[36,65742,65743],{"class":59},"\"allCheck\"",[36,65745,188],{"class":98},[36,65747,65748,65750,65752,65754,65756,65758,65760,65762,65764,65766,65768,65771,65774,65776,65778,65780,65783,65786,65788],{"class":38,"line":517},[36,65749,55734],{"class":98},[36,65751,54253],{"class":51733},[36,65753,54256],{"class":55},[36,65755,176],{"class":98},[36,65757,54261],{"class":59},[36,65759,15359],{"class":55},[36,65761,176],{"class":98},[36,65763,8103],{"class":59},[36,65765,15398],{"class":55},[36,65767,176],{"class":98},[36,65769,65770],{"class":59},"\"checkAll\"",[36,65772,65773],{"class":98},"> \u003C",[36,65775,36],{"class":51733},[36,65777,53918],{"class":55},[36,65779,176],{"class":98},[36,65781,65782],{"class":59},"\"all\"",[36,65784,65785],{"class":98},">全选\u003C\u002F",[36,65787,36],{"class":51733},[36,65789,188],{"class":98},[36,65791,65792,65794,65796],{"class":38,"line":522},[36,65793,55839],{"class":98},[36,65795,762],{"class":51733},[36,65797,188],{"class":98},[36,65799,65800,65802,65804,65807,65809],{"class":38,"line":528},[36,65801,55666],{"class":98},[36,65803,762],{"class":51733},[36,65805,65806],{"class":98},">商品\u003C\u002F",[36,65808,762],{"class":51733},[36,65810,188],{"class":98},[36,65812,65813,65815,65817,65820,65822],{"class":38,"line":10203},[36,65814,55666],{"class":98},[36,65816,762],{"class":51733},[36,65818,65819],{"class":98},">商家\u003C\u002F",[36,65821,762],{"class":51733},[36,65823,188],{"class":98},[36,65825,65826,65828,65830,65833,65835],{"class":38,"line":10227},[36,65827,55666],{"class":98},[36,65829,762],{"class":51733},[36,65831,65832],{"class":98},">价格\u003C\u002F",[36,65834,762],{"class":51733},[36,65836,188],{"class":98},[36,65838,65839,65841,65843],{"class":38,"line":10232},[36,65840,52208],{"class":98},[36,65842,759],{"class":51733},[36,65844,188],{"class":98},[36,65846,65847,65849,65851],{"class":38,"line":10237},[36,65848,51773],{"class":98},[36,65850,759],{"class":51733},[36,65852,188],{"class":98},[36,65854,65855,65857,65859],{"class":38,"line":10242},[36,65856,55666],{"class":98},[36,65858,805],{"class":51733},[36,65860,188],{"class":98},[36,65862,65863,65865,65867,65869,65871,65873,65875,65877,65880,65882,65884,65887],{"class":38,"line":10251},[36,65864,55734],{"class":98},[36,65866,54253],{"class":51733},[36,65868,54256],{"class":55},[36,65870,176],{"class":98},[36,65872,54261],{"class":59},[36,65874,15359],{"class":55},[36,65876,176],{"class":98},[36,65878,65879],{"class":59},"\"check\"",[36,65881,53918],{"class":55},[36,65883,176],{"class":98},[36,65885,65886],{"class":59},"\"ck\"",[36,65888,188],{"class":98},[36,65890,65891,65893,65895],{"class":38,"line":10256},[36,65892,55839],{"class":98},[36,65894,805],{"class":51733},[36,65896,188],{"class":98},[36,65898,65899,65901,65903,65905,65907],{"class":38,"line":10262},[36,65900,55666],{"class":98},[36,65902,805],{"class":51733},[36,65904,61605],{"class":98},[36,65906,805],{"class":51733},[36,65908,188],{"class":98},[36,65910,65911,65913,65915,65918,65920],{"class":38,"line":10283},[36,65912,55666],{"class":98},[36,65914,805],{"class":51733},[36,65916,65917],{"class":98},">小米\u003C\u002F",[36,65919,805],{"class":51733},[36,65921,188],{"class":98},[36,65923,65924,65926,65928,65931,65933],{"class":38,"line":10289},[36,65925,55666],{"class":98},[36,65927,805],{"class":51733},[36,65929,65930],{"class":98},">￥1999\u003C\u002F",[36,65932,805],{"class":51733},[36,65934,188],{"class":98},[36,65936,65937,65939,65941],{"class":38,"line":10303},[36,65938,52208],{"class":98},[36,65940,759],{"class":51733},[36,65942,188],{"class":98},[36,65944,65945,65947,65949],{"class":38,"line":10309},[36,65946,51773],{"class":98},[36,65948,759],{"class":51733},[36,65950,188],{"class":98},[36,65952,65953,65955,65957],{"class":38,"line":10336},[36,65954,55666],{"class":98},[36,65956,805],{"class":51733},[36,65958,188],{"class":98},[36,65960,65961,65963,65965,65967,65969,65971,65973,65975,65977,65979,65981,65983],{"class":38,"line":10345},[36,65962,55734],{"class":98},[36,65964,54253],{"class":51733},[36,65966,54256],{"class":55},[36,65968,176],{"class":98},[36,65970,54261],{"class":59},[36,65972,15359],{"class":55},[36,65974,176],{"class":98},[36,65976,65879],{"class":59},[36,65978,53918],{"class":55},[36,65980,176],{"class":98},[36,65982,65886],{"class":59},[36,65984,188],{"class":98},[36,65986,65987,65989,65991],{"class":38,"line":10351},[36,65988,55839],{"class":98},[36,65990,805],{"class":51733},[36,65992,188],{"class":98},[36,65994,65995,65997,65999,66002,66004],{"class":38,"line":10359},[36,65996,55666],{"class":98},[36,65998,805],{"class":51733},[36,66000,66001],{"class":98},">小米净水器\u003C\u002F",[36,66003,805],{"class":51733},[36,66005,188],{"class":98},[36,66007,66008,66010,66012,66014,66016],{"class":38,"line":10364},[36,66009,55666],{"class":98},[36,66011,805],{"class":51733},[36,66013,65917],{"class":98},[36,66015,805],{"class":51733},[36,66017,188],{"class":98},[36,66019,66020,66022,66024,66027,66029],{"class":38,"line":17043},[36,66021,55666],{"class":98},[36,66023,805],{"class":51733},[36,66025,66026],{"class":98},">￥4999\u003C\u002F",[36,66028,805],{"class":51733},[36,66030,188],{"class":98},[36,66032,66033,66035,66037],{"class":38,"line":17049},[36,66034,52208],{"class":98},[36,66036,759],{"class":51733},[36,66038,188],{"class":98},[36,66040,66041,66043,66045],{"class":38,"line":17072},[36,66042,51773],{"class":98},[36,66044,759],{"class":51733},[36,66046,188],{"class":98},[36,66048,66049,66051,66053],{"class":38,"line":17078},[36,66050,55666],{"class":98},[36,66052,805],{"class":51733},[36,66054,188],{"class":98},[36,66056,66057,66059,66061,66063,66065,66067,66069,66071,66073,66075,66077,66079],{"class":38,"line":17101},[36,66058,55734],{"class":98},[36,66060,54253],{"class":51733},[36,66062,54256],{"class":55},[36,66064,176],{"class":98},[36,66066,54261],{"class":59},[36,66068,15359],{"class":55},[36,66070,176],{"class":98},[36,66072,65879],{"class":59},[36,66074,53918],{"class":55},[36,66076,176],{"class":98},[36,66078,65886],{"class":59},[36,66080,188],{"class":98},[36,66082,66083,66085,66087],{"class":38,"line":17115},[36,66084,55839],{"class":98},[36,66086,805],{"class":51733},[36,66088,188],{"class":98},[36,66090,66091,66093,66095,66098,66100],{"class":38,"line":17135},[36,66092,55666],{"class":98},[36,66094,805],{"class":51733},[36,66096,66097],{"class":98},">小米电视\u003C\u002F",[36,66099,805],{"class":51733},[36,66101,188],{"class":98},[36,66103,66104,66106,66108,66110,66112],{"class":38,"line":17141},[36,66105,55666],{"class":98},[36,66107,805],{"class":51733},[36,66109,65917],{"class":98},[36,66111,805],{"class":51733},[36,66113,188],{"class":98},[36,66115,66116,66118,66120,66123,66125],{"class":38,"line":17152},[36,66117,55666],{"class":98},[36,66119,805],{"class":51733},[36,66121,66122],{"class":98},">￥5999\u003C\u002F",[36,66124,805],{"class":51733},[36,66126,188],{"class":98},[36,66128,66129,66131,66133],{"class":38,"line":17175},[36,66130,52208],{"class":98},[36,66132,759],{"class":51733},[36,66134,188],{"class":98},[36,66136,66137,66139,66141],{"class":38,"line":17197},[36,66138,52849],{"class":98},[36,66140,753],{"class":51733},[36,66142,188],{"class":98},[36,66144,66145,66147,66149],{"class":38,"line":17202},[36,66146,52576],{"class":98},[36,66148,52245],{"class":51733},[36,66150,188],{"class":98},[36,66152,66153],{"class":38,"line":17208},[36,66154,66155],{"class":42},"    \u002F\u002F 1. 获取大复选框\n",[36,66157,66158,66160,66163,66165,66167,66169,66171,66174],{"class":38,"line":17222},[36,66159,11660],{"class":163},[36,66161,66162],{"class":109}," checkAll",[36,66164,14003],{"class":163},[36,66166,54828],{"class":98},[36,66168,54831],{"class":55},[36,66170,621],{"class":98},[36,66172,66173],{"class":59},"'#checkAll'",[36,66175,627],{"class":98},[36,66177,66178],{"class":38,"line":17235},[36,66179,66180],{"class":42},"    \u002F\u002F 2. 获取所有的小复选框\n",[36,66182,66183,66185,66188,66190,66192,66194,66196,66199],{"class":38,"line":17240},[36,66184,11660],{"class":163},[36,66186,66187],{"class":109}," cks",[36,66189,14003],{"class":163},[36,66191,54828],{"class":98},[36,66193,56113],{"class":55},[36,66195,621],{"class":98},[36,66197,66198],{"class":59},"'.ck'",[36,66200,627],{"class":98},[36,66202,66203],{"class":38,"line":17254},[36,66204,66205],{"class":42},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[36,66207,66208,66211,66213,66215,66217,66219,66221],{"class":38,"line":17259},[36,66209,66210],{"class":98},"    checkAll.",[36,66212,58245],{"class":55},[36,66214,621],{"class":98},[36,66216,58250],{"class":59},[36,66218,12874],{"class":98},[36,66220,54881],{"class":163},[36,66222,54884],{"class":98},[36,66224,66225],{"class":38,"line":17265},[36,66226,66227],{"class":42},"      \u002F\u002F 得到当前大复选框的选中状态\n",[36,66229,66230,66233],{"class":38,"line":17270},[36,66231,66232],{"class":42},"      \u002F\u002F console.log(checkAll.checked)",[36,66234,66235],{"class":42},"  \u002F\u002F 得到 是 true 或者是 false\n",[36,66237,66238],{"class":38,"line":17284},[36,66239,66240],{"class":42},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[36,66242,66243,66245,66247,66249,66251,66253,66255,66257,66259,66262,66264,66266,66268],{"class":38,"line":17289},[36,66244,52716],{"class":163},[36,66246,2130],{"class":98},[36,66248,52279],{"class":163},[36,66250,9879],{"class":98},[36,66252,176],{"class":163},[36,66254,4544],{"class":109},[36,66256,9886],{"class":98},[36,66258,179],{"class":163},[36,66260,66261],{"class":98}," cks.",[36,66263,52400],{"class":109},[36,66265,3665],{"class":98},[36,66267,2751],{"class":163},[36,66269,12881],{"class":98},[36,66271,66272,66275,66277,66280],{"class":38,"line":17294},[36,66273,66274],{"class":98},"        cks[i].checked ",[36,66276,176],{"class":163},[36,66278,66279],{"class":109}," this",[36,66281,66282],{"class":98},".checked\n",[36,66284,66285],{"class":38,"line":17308},[36,66286,52830],{"class":98},[36,66288,66289],{"class":38,"line":17320},[36,66290,33894],{"class":98},[36,66292,66293],{"class":38,"line":17325},[36,66294,66295],{"class":42},"    \u002F\u002F 5. 小复选框控制大复选框\n",[36,66297,66298],{"class":38,"line":17338},[36,66299,247],{"emptyLinePlaceholder":246},[36,66301,66302,66304,66306,66308,66310,66312,66314,66316,66318,66320,66322,66324,66326],{"class":38,"line":17343},[36,66303,3652],{"class":163},[36,66305,2130],{"class":98},[36,66307,52279],{"class":163},[36,66309,9879],{"class":98},[36,66311,176],{"class":163},[36,66313,4544],{"class":109},[36,66315,9886],{"class":98},[36,66317,179],{"class":163},[36,66319,66261],{"class":98},[36,66321,52400],{"class":109},[36,66323,3665],{"class":98},[36,66325,2751],{"class":163},[36,66327,12881],{"class":98},[36,66329,66330],{"class":38,"line":17348},[36,66331,66332],{"class":42},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[36,66334,66335,66338,66340,66342,66344,66346,66348],{"class":38,"line":17353},[36,66336,66337],{"class":98},"      cks[i].",[36,66339,58245],{"class":55},[36,66341,621],{"class":98},[36,66343,58250],{"class":59},[36,66345,12874],{"class":98},[36,66347,54881],{"class":163},[36,66349,54884],{"class":98},[36,66351,66352],{"class":38,"line":17366},[36,66353,66354],{"class":42},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[36,66356,66357],{"class":38,"line":17371},[36,66358,66359],{"class":42},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[36,66361,66362],{"class":38,"line":33066},[36,66363,66364],{"class":42},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[36,66366,66367],{"class":38,"line":33072},[36,66368,66369],{"class":42},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[36,66371,66372,66375,66377,66379,66381,66383,66386,66388,66390,66392,66394],{"class":38,"line":33078},[36,66373,66374],{"class":98},"        checkAll.checked ",[36,66376,176],{"class":163},[36,66378,54828],{"class":98},[36,66380,56113],{"class":55},[36,66382,621],{"class":98},[36,66384,66385],{"class":59},"'.ck:checked'",[36,66387,31259],{"class":98},[36,66389,52400],{"class":109},[36,66391,58338],{"class":163},[36,66393,66261],{"class":98},[36,66395,56263],{"class":109},[36,66397,66398],{"class":38,"line":33084},[36,66399,65247],{"class":98},[36,66401,66402],{"class":38,"line":33090},[36,66403,2646],{"class":98},[36,66405,66406,66408,66410],{"class":38,"line":33101},[36,66407,52849],{"class":98},[36,66409,52245],{"class":51733},[36,66411,188],{"class":98},[36,66413,66414,66416,66418],{"class":38,"line":33107},[36,66415,52217],{"class":98},[36,66417,52232],{"class":51733},[36,66419,188],{"class":98},[36,66421,66422],{"class":38,"line":33127},[36,66423,247],{"emptyLinePlaceholder":246},[36,66425,66426,66428,66430],{"class":38,"line":33133},[36,66427,52217],{"class":98},[36,66429,51068],{"class":51733},[36,66431,188],{"class":98},[14,66433,66434],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,66436,66437],{},"用好之间比较得到的布尔值！！！",[14,66439,66440,66441,66444,66445,2130,66448,1198,66450,66453],{},"在 JS 里访问的时候，",[33,66442,66443],{},"checkbox.checked"," 是一个 ",[765,66446,66447],{},"布尔值",[33,66449,1841],{},[33,66451,66452],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,66455,66456,66457,66460,66461],{},"HTML 的 ",[33,66458,66459],{},"checked=\"checked\""," 只是 ",[765,66462,66463,66464,66467],{},"初始值；JS 的 ",[33,66465,66466],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,66469,66470],{},"：checked是一个伪类选择器",[14,66472,66473],{},[1941,66474],{"alt":31,"src":66475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,66477,66478,66481],{},[66479,66480],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,66483,66484],{},[1941,66485],{"alt":31,"src":66486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[559,66488,66490],{"id":66489},"_33-dom事件进阶","3.3 DOM事件进阶",[588,66492,66494],{"id":66493},"_331-事件流","3.3.1 事件流",[14,66496,66497],{},[1941,66498],{"alt":31,"src":66499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22437,66501,66503],{"id":66502},"_3311-事件捕获","3.3.1.1 事件捕获",[14,66505,66506],{},[1941,66507],{"alt":31,"src":66508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[26,66510,66512],{"className":51066,"code":66511,"language":51068,"meta":31,"style":31},"\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",[33,66513,66514,66524,66538,66542,66550,66564,66584,66596,66604,66611,66623,66635,66645,66649,66653,66660,66672,66684,66694,66698,66706,66714,66718,66726,66741,66760,66768,66776,66796,66816,66832,66843,66851,66868,66879,66887,66904,66915,66923,66931,66939,66943],{"__ignoreMap":31},[36,66515,66516,66518,66520,66522],{"class":38,"line":39},[36,66517,51730],{"class":98},[36,66519,51734],{"class":51733},[36,66521,51737],{"class":55},[36,66523,188],{"class":98},[36,66525,66526,66528,66530,66532,66534,66536],{"class":38,"line":46},[36,66527,179],{"class":98},[36,66529,51068],{"class":51733},[36,66531,51748],{"class":55},[36,66533,176],{"class":98},[36,66535,51753],{"class":59},[36,66537,188],{"class":98},[36,66539,66540],{"class":38,"line":52},[36,66541,247],{"emptyLinePlaceholder":246},[36,66543,66544,66546,66548],{"class":38,"line":66},[36,66545,179],{"class":98},[36,66547,51766],{"class":51733},[36,66549,188],{"class":98},[36,66551,66552,66554,66556,66558,66560,66562],{"class":38,"line":72},[36,66553,52576],{"class":98},[36,66555,51776],{"class":51733},[36,66557,51779],{"class":55},[36,66559,176],{"class":98},[36,66561,51784],{"class":59},[36,66563,188],{"class":98},[36,66565,66566,66568,66570,66572,66574,66576,66578,66580,66582],{"class":38,"line":82},[36,66567,52576],{"class":98},[36,66569,51776],{"class":51733},[36,66571,15359],{"class":55},[36,66573,176],{"class":98},[36,66575,51823],{"class":59},[36,66577,51803],{"class":55},[36,66579,176],{"class":98},[36,66581,51830],{"class":59},[36,66583,188],{"class":98},[36,66585,66586,66588,66590,66592,66594],{"class":38,"line":88},[36,66587,52576],{"class":98},[36,66589,51839],{"class":51733},[36,66591,51842],{"class":98},[36,66593,51839],{"class":51733},[36,66595,188],{"class":98},[36,66597,66598,66600,66602],{"class":38,"line":113},[36,66599,52576],{"class":98},[36,66601,537],{"class":51733},[36,66603,188],{"class":98},[36,66605,66606,66609],{"class":38,"line":119},[36,66607,66608],{"class":55},"    .father",[36,66610,16011],{"class":98},[36,66612,66613,66615,66617,66619,66621],{"class":38,"line":131},[36,66614,55203],{"class":109},[36,66616,51869],{"class":98},[36,66618,65506],{"class":109},[36,66620,51924],{"class":163},[36,66622,1772],{"class":98},[36,66624,66625,66627,66629,66631,66633],{"class":38,"line":137},[36,66626,55217],{"class":109},[36,66628,51869],{"class":98},[36,66630,65506],{"class":109},[36,66632,51924],{"class":163},[36,66634,1772],{"class":98},[36,66636,66637,66639,66641,66643],{"class":38,"line":147},[36,66638,55316],{"class":109},[36,66640,51869],{"class":98},[36,66642,52077],{"class":109},[36,66644,1772],{"class":98},[36,66646,66647],{"class":38,"line":153},[36,66648,2646],{"class":98},[36,66650,66651],{"class":38,"line":191},[36,66652,247],{"emptyLinePlaceholder":246},[36,66654,66655,66658],{"class":38,"line":197},[36,66656,66657],{"class":55},"    .son",[36,66659,16011],{"class":98},[36,66661,66662,66664,66666,66668,66670],{"class":38,"line":217},[36,66663,55203],{"class":109},[36,66665,51869],{"class":98},[36,66667,2190],{"class":109},[36,66669,51924],{"class":163},[36,66671,1772],{"class":98},[36,66673,66674,66676,66678,66680,66682],{"class":38,"line":223},[36,66675,55217],{"class":109},[36,66677,51869],{"class":98},[36,66679,2190],{"class":109},[36,66681,51924],{"class":163},[36,66683,1772],{"class":98},[36,66685,66686,66688,66690,66692],{"class":38,"line":243},[36,66687,55316],{"class":109},[36,66689,51869],{"class":98},[36,66691,55321],{"class":109},[36,66693,1772],{"class":98},[36,66695,66696],{"class":38,"line":250},[36,66697,2646],{"class":98},[36,66699,66700,66702,66704],{"class":38,"line":256},[36,66701,52849],{"class":98},[36,66703,537],{"class":51733},[36,66705,188],{"class":98},[36,66707,66708,66710,66712],{"class":38,"line":273},[36,66709,52217],{"class":98},[36,66711,51766],{"class":51733},[36,66713,188],{"class":98},[36,66715,66716],{"class":38,"line":278},[36,66717,247],{"emptyLinePlaceholder":246},[36,66719,66720,66722,66724],{"class":38,"line":284},[36,66721,179],{"class":98},[36,66723,52232],{"class":51733},[36,66725,188],{"class":98},[36,66727,66728,66730,66732,66734,66736,66739],{"class":38,"line":315},[36,66729,52576],{"class":98},[36,66731,52043],{"class":51733},[36,66733,53918],{"class":55},[36,66735,176],{"class":98},[36,66737,66738],{"class":59},"\"father\"",[36,66740,188],{"class":98},[36,66742,66743,66745,66747,66749,66751,66754,66756,66758],{"class":38,"line":320},[36,66744,51773],{"class":98},[36,66746,52043],{"class":51733},[36,66748,53918],{"class":55},[36,66750,176],{"class":98},[36,66752,66753],{"class":59},"\"son\"",[36,66755,55746],{"class":98},[36,66757,52043],{"class":51733},[36,66759,188],{"class":98},[36,66761,66762,66764,66766],{"class":38,"line":326},[36,66763,52849],{"class":98},[36,66765,52043],{"class":51733},[36,66767,188],{"class":98},[36,66769,66770,66772,66774],{"class":38,"line":343},[36,66771,52576],{"class":98},[36,66773,52245],{"class":51733},[36,66775,188],{"class":98},[36,66777,66778,66780,66783,66785,66787,66789,66791,66794],{"class":38,"line":348},[36,66779,11660],{"class":163},[36,66781,66782],{"class":109}," fa",[36,66784,14003],{"class":163},[36,66786,54828],{"class":98},[36,66788,54831],{"class":55},[36,66790,621],{"class":98},[36,66792,66793],{"class":59},"'.father'",[36,66795,627],{"class":98},[36,66797,66798,66800,66803,66805,66807,66809,66811,66814],{"class":38,"line":354},[36,66799,11660],{"class":163},[36,66801,66802],{"class":109}," son",[36,66804,14003],{"class":163},[36,66806,54828],{"class":98},[36,66808,54831],{"class":55},[36,66810,621],{"class":98},[36,66812,66813],{"class":59},"'.son'",[36,66815,627],{"class":98},[36,66817,66818,66820,66822,66824,66826,66828,66830],{"class":38,"line":370},[36,66819,52839],{"class":98},[36,66821,58245],{"class":55},[36,66823,621],{"class":98},[36,66825,58250],{"class":59},[36,66827,12874],{"class":98},[36,66829,54881],{"class":163},[36,66831,54884],{"class":98},[36,66833,66834,66836,66838,66841],{"class":38,"line":375},[36,66835,59357],{"class":55},[36,66837,621],{"class":98},[36,66839,66840],{"class":59},"'woshiu1'",[36,66842,627],{"class":98},[36,66844,66845,66847,66849],{"class":38,"line":381},[36,66846,54967],{"class":98},[36,66848,1841],{"class":109},[36,66850,627],{"class":98},[36,66852,66853,66856,66858,66860,66862,66864,66866],{"class":38,"line":399},[36,66854,66855],{"class":98},"    fa.",[36,66857,58245],{"class":55},[36,66859,621],{"class":98},[36,66861,58250],{"class":59},[36,66863,12874],{"class":98},[36,66865,54881],{"class":163},[36,66867,54884],{"class":98},[36,66869,66870,66872,66874,66877],{"class":38,"line":404},[36,66871,59357],{"class":55},[36,66873,621],{"class":98},[36,66875,66876],{"class":59},"'1'",[36,66878,627],{"class":98},[36,66880,66881,66883,66885],{"class":38,"line":410},[36,66882,54967],{"class":98},[36,66884,1841],{"class":109},[36,66886,627],{"class":98},[36,66888,66889,66892,66894,66896,66898,66900,66902],{"class":38,"line":423},[36,66890,66891],{"class":98},"    son.",[36,66893,58245],{"class":55},[36,66895,621],{"class":98},[36,66897,58250],{"class":59},[36,66899,12874],{"class":98},[36,66901,54881],{"class":163},[36,66903,54884],{"class":98},[36,66905,66906,66908,66910,66913],{"class":38,"line":436},[36,66907,59357],{"class":55},[36,66909,621],{"class":98},[36,66911,66912],{"class":59},"'2'",[36,66914,627],{"class":98},[36,66916,66917,66919,66921],{"class":38,"line":441},[36,66918,54967],{"class":98},[36,66920,1841],{"class":109},[36,66922,627],{"class":98},[36,66924,66925,66927,66929],{"class":38,"line":447},[36,66926,52849],{"class":98},[36,66928,52245],{"class":51733},[36,66930,188],{"class":98},[36,66932,66933,66935,66937],{"class":38,"line":465},[36,66934,52217],{"class":98},[36,66936,52232],{"class":51733},[36,66938,188],{"class":98},[36,66940,66941],{"class":38,"line":470},[36,66942,247],{"emptyLinePlaceholder":246},[36,66944,66945,66947,66949],{"class":38,"line":476},[36,66946,52217],{"class":98},[36,66948,51068],{"class":51733},[36,66950,188],{"class":98},[14,66952,66953],{},[1941,66954],{"alt":31,"src":66955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,66957,66958],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22437,66960,66962],{"id":66961},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,66964,66965],{},[1941,66966],{"alt":31,"src":66967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,66969,66970],{},"反着来",[14,66972,66973],{},"注意是同名事件，比如都是‘click’",[22437,66975,66977],{"id":66976},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,66979,66980],{},[1941,66981],{"alt":31,"src":66982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22437,66984,66986],{"id":66985},"_3314-解绑事件","3.3.1.4 解绑事件",[14,66988,66989],{},[1941,66990],{"alt":31,"src":66991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,66993,66994],{},[1941,66995],{"alt":31,"src":66996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22437,66998,67000],{"id":66999},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[571,67002,67003],{},[574,67004,67005],{},"事件类型的区别",[14,67007,67008],{},[1941,67009],{"alt":31,"src":67010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,67012,67013],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[571,67015,67016],{"start":46},[574,67017,67018],{},"注册事件的区别",[14,67020,67021],{},[1941,67022],{"alt":31,"src":67023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22437,67025,67027],{"id":67026},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,67029,67030],{},[1941,67031],{"alt":31,"src":67032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,67034,67035],{},[1941,67036],{"alt":31,"src":67037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[26,67039,67041],{"className":53499,"code":67040,"language":53501,"meta":31,"style":31},"\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",[33,67042,67043,67051,67068,67091,67099,67104,67109,67114,67118,67126,67134],{"__ignoreMap":31},[36,67044,67045,67047,67049],{"class":38,"line":39},[36,67046,179],{"class":98},[36,67048,52232],{"class":51733},[36,67050,188],{"class":98},[36,67052,67053,67055,67058,67061,67063,67066],{"class":38,"line":46},[36,67054,52576],{"class":98},[36,67056,67057],{"class":51733},"form",[36,67059,67060],{"class":55}," action",[36,67062,176],{"class":98},[36,67064,67065],{"class":59},"\"http:\u002F\u002Fwww.itcast.cn\"",[36,67067,188],{"class":98},[36,67069,67070,67072,67074,67076,67078,67081,67084,67086,67089],{"class":38,"line":52},[36,67071,51773],{"class":98},[36,67073,54253],{"class":51733},[36,67075,54256],{"class":55},[36,67077,176],{"class":98},[36,67079,67080],{"class":59},"\"submit\"",[36,67082,67083],{"class":55}," value",[36,67085,176],{"class":98},[36,67087,67088],{"class":59},"\"免费注册\"",[36,67090,188],{"class":98},[36,67092,67093,67095,67097],{"class":38,"line":66},[36,67094,51773],{"class":98},[36,67096,52245],{"class":51733},[36,67098,188],{"class":98},[36,67100,67101],{"class":38,"line":72},[36,67102,67103],{"class":98},"      const form = document.querySelector('form')\n",[36,67105,67106],{"class":38,"line":82},[36,67107,67108],{"class":98},"      form.addEventListener('submit', function (e) {\n",[36,67110,67111],{"class":38,"line":88},[36,67112,67113],{"class":98},"        e.preventDefault()\n",[36,67115,67116],{"class":38,"line":113},[36,67117,65247],{"class":98},[36,67119,67120,67122,67124],{"class":38,"line":119},[36,67121,52208],{"class":98},[36,67123,52245],{"class":51733},[36,67125,188],{"class":98},[36,67127,67128,67130,67132],{"class":38,"line":131},[36,67129,52849],{"class":98},[36,67131,67057],{"class":51733},[36,67133,188],{"class":98},[36,67135,67136,67138,67140],{"class":38,"line":137},[36,67137,52217],{"class":98},[36,67139,52232],{"class":51733},[36,67141,188],{"class":98},[14,67143,67144],{},"点击不在跳转！！！",[588,67146,67148],{"id":67147},"_332-事件委托","3.3.2 事件委托",[14,67150,67151],{},[1941,67152],{"alt":31,"src":67153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[26,67155,67157],{"className":51066,"code":67156,"language":51068,"meta":31,"style":31},"\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",[33,67158,67159,67169,67183,67187,67195,67209,67229,67241,67249,67253,67261,67269,67281,67293,67305,67317,67329,67342,67350,67358,67363,67382,67403,67408,67413,67418,67423,67432,67436,67446,67450,67455,67460,67474,67484,67488,67492,67500,67508,67512],{"__ignoreMap":31},[36,67160,67161,67163,67165,67167],{"class":38,"line":39},[36,67162,51730],{"class":98},[36,67164,51734],{"class":51733},[36,67166,51737],{"class":55},[36,67168,188],{"class":98},[36,67170,67171,67173,67175,67177,67179,67181],{"class":38,"line":46},[36,67172,179],{"class":98},[36,67174,51068],{"class":51733},[36,67176,51748],{"class":55},[36,67178,176],{"class":98},[36,67180,51753],{"class":59},[36,67182,188],{"class":98},[36,67184,67185],{"class":38,"line":52},[36,67186,247],{"emptyLinePlaceholder":246},[36,67188,67189,67191,67193],{"class":38,"line":66},[36,67190,179],{"class":98},[36,67192,51766],{"class":51733},[36,67194,188],{"class":98},[36,67196,67197,67199,67201,67203,67205,67207],{"class":38,"line":72},[36,67198,52576],{"class":98},[36,67200,51776],{"class":51733},[36,67202,51779],{"class":55},[36,67204,176],{"class":98},[36,67206,51784],{"class":59},[36,67208,188],{"class":98},[36,67210,67211,67213,67215,67217,67219,67221,67223,67225,67227],{"class":38,"line":82},[36,67212,52576],{"class":98},[36,67214,51776],{"class":51733},[36,67216,15359],{"class":55},[36,67218,176],{"class":98},[36,67220,51823],{"class":59},[36,67222,51803],{"class":55},[36,67224,176],{"class":98},[36,67226,51830],{"class":59},[36,67228,188],{"class":98},[36,67230,67231,67233,67235,67237,67239],{"class":38,"line":88},[36,67232,52576],{"class":98},[36,67234,51839],{"class":51733},[36,67236,51842],{"class":98},[36,67238,51839],{"class":51733},[36,67240,188],{"class":98},[36,67242,67243,67245,67247],{"class":38,"line":113},[36,67244,52217],{"class":98},[36,67246,51766],{"class":51733},[36,67248,188],{"class":98},[36,67250,67251],{"class":38,"line":119},[36,67252,247],{"emptyLinePlaceholder":246},[36,67254,67255,67257,67259],{"class":38,"line":131},[36,67256,179],{"class":98},[36,67258,52232],{"class":51733},[36,67260,188],{"class":98},[36,67262,67263,67265,67267],{"class":38,"line":137},[36,67264,52576],{"class":98},[36,67266,1618],{"class":51733},[36,67268,188],{"class":98},[36,67270,67271,67273,67275,67277,67279],{"class":38,"line":147},[36,67272,51773],{"class":98},[36,67274,574],{"class":51733},[36,67276,54398],{"class":98},[36,67278,574],{"class":51733},[36,67280,188],{"class":98},[36,67282,67283,67285,67287,67289,67291],{"class":38,"line":153},[36,67284,51773],{"class":98},[36,67286,574],{"class":51733},[36,67288,54417],{"class":98},[36,67290,574],{"class":51733},[36,67292,188],{"class":98},[36,67294,67295,67297,67299,67301,67303],{"class":38,"line":191},[36,67296,51773],{"class":98},[36,67298,574],{"class":51733},[36,67300,54436],{"class":98},[36,67302,574],{"class":51733},[36,67304,188],{"class":98},[36,67306,67307,67309,67311,67313,67315],{"class":38,"line":197},[36,67308,51773],{"class":98},[36,67310,574],{"class":51733},[36,67312,54455],{"class":98},[36,67314,574],{"class":51733},[36,67316,188],{"class":98},[36,67318,67319,67321,67323,67325,67327],{"class":38,"line":217},[36,67320,51773],{"class":98},[36,67322,574],{"class":51733},[36,67324,54474],{"class":98},[36,67326,574],{"class":51733},[36,67328,188],{"class":98},[36,67330,67331,67333,67335,67338,67340],{"class":38,"line":223},[36,67332,51773],{"class":98},[36,67334,14],{"class":51733},[36,67336,67337],{"class":98},">我不需要变色\u003C\u002F",[36,67339,14],{"class":51733},[36,67341,188],{"class":98},[36,67343,67344,67346,67348],{"class":38,"line":243},[36,67345,52849],{"class":98},[36,67347,1618],{"class":51733},[36,67349,188],{"class":98},[36,67351,67352,67354,67356],{"class":38,"line":250},[36,67353,52576],{"class":98},[36,67355,52245],{"class":51733},[36,67357,188],{"class":98},[36,67359,67360],{"class":38,"line":256},[36,67361,67362],{"class":42},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[36,67364,67365,67367,67369,67371,67373,67375,67377,67380],{"class":38,"line":273},[36,67366,11660],{"class":163},[36,67368,61724],{"class":109},[36,67370,14003],{"class":163},[36,67372,54828],{"class":98},[36,67374,54831],{"class":55},[36,67376,621],{"class":98},[36,67378,67379],{"class":59},"'ul'",[36,67381,627],{"class":98},[36,67383,67384,67387,67389,67391,67393,67395,67397,67399,67401],{"class":38,"line":278},[36,67385,67386],{"class":98},"    ul.",[36,67388,58245],{"class":55},[36,67390,621],{"class":98},[36,67392,58250],{"class":59},[36,67394,12874],{"class":98},[36,67396,54881],{"class":163},[36,67398,2130],{"class":98},[36,67400,170],{"class":5667},[36,67402,12881],{"class":98},[36,67404,67405],{"class":38,"line":284},[36,67406,67407],{"class":42},"      \u002F\u002F alert(1)\n",[36,67409,67410],{"class":38,"line":315},[36,67411,67412],{"class":42},"      \u002F\u002F e.target就是我们点击的对象\n",[36,67414,67415],{"class":38,"line":320},[36,67416,67417],{"class":42},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[36,67419,67420],{"class":38,"line":326},[36,67421,67422],{"class":42},"      \u002F\u002F e.target.style.color = 'red'\n",[36,67424,67425,67427,67429],{"class":38,"line":343},[36,67426,58676],{"class":98},[36,67428,58679],{"class":55},[36,67430,67431],{"class":98},"(e)\n",[36,67433,67434],{"class":38,"line":348},[36,67435,247],{"emptyLinePlaceholder":246},[36,67437,67438,67440,67443],{"class":38,"line":354},[36,67439,58676],{"class":98},[36,67441,67442],{"class":55},"dir",[36,67444,67445],{"class":98},"(e.target)\n",[36,67447,67448],{"class":38,"line":370},[36,67449,247],{"emptyLinePlaceholder":246},[36,67451,67452],{"class":38,"line":375},[36,67453,67454],{"class":42},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[36,67456,67457],{"class":38,"line":381},[36,67458,67459],{"class":42},"      \u002F\u002F 通过tagName来进行判断\n",[36,67461,67462,67464,67467,67469,67472],{"class":38,"line":399},[36,67463,54912],{"class":163},[36,67465,67466],{"class":98}," (e.target.tagName ",[36,67468,54918],{"class":163},[36,67470,67471],{"class":59}," 'LI'",[36,67473,12881],{"class":98},[36,67475,67476,67479,67481],{"class":38,"line":404},[36,67477,67478],{"class":98},"        e.target.style.color ",[36,67480,176],{"class":163},[36,67482,67483],{"class":59}," 'red'\n",[36,67485,67486],{"class":38,"line":410},[36,67487,52830],{"class":98},[36,67489,67490],{"class":38,"line":423},[36,67491,33894],{"class":98},[36,67493,67494,67496,67498],{"class":38,"line":436},[36,67495,52849],{"class":98},[36,67497,52245],{"class":51733},[36,67499,188],{"class":98},[36,67501,67502,67504,67506],{"class":38,"line":441},[36,67503,52217],{"class":98},[36,67505,52232],{"class":51733},[36,67507,188],{"class":98},[36,67509,67510],{"class":38,"line":447},[36,67511,247],{"emptyLinePlaceholder":246},[36,67513,67514,67516,67518],{"class":38,"line":465},[36,67515,52217],{"class":98},[36,67517,51068],{"class":51733},[36,67519,188],{"class":98},[14,67521,67522],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,67524,67525],{},"if(e.target.ragName==='P') {}",[14,67527,67528],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,67530,67531],{},"通过事件委托的方式实现tab栏切换改造：",[14,67533,67534],{},"一定要记住自定义属性！！！！！！",[14,67536,67537],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,67539,67540],{},"id是自定义的属性名",[14,67542,67543],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[26,67545,67547],{"className":51066,"code":67546,"language":51068,"meta":31,"style":31},"\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",[33,67548,67549,67559,67573,67577,67585,67599,67619,67639,67651,67659,67665,67675,67685,67689,67693,67699,67711,67723,67735,67751,67755,67759,67765,67777,67789,67801,67811,67821,67825,67829,67837,67849,67859,67871,67875,67879,67887,67897,67907,67917,67921,67925,67935,67949,67961,67965,67969,67981,67991,68007,68017,68021,68025,68039,68049,68059,68063,68067,68073,68087,68091,68095,68103,68113,68117,68121,68130,68140,68144,68152,68160,68164,68172,68186,68200,68212,68220,68259,68291,68323,68355,68387,68395,68403,68417,68451,68485,68519,68553,68587,68595,68603,68611,68616,68621,68640,68645,68665,68673,68678,68691,68712,68725,68729,68734,68739,68752,68772,68800,68804,68808,68812,68820,68828,68832],{"__ignoreMap":31},[36,67550,67551,67553,67555,67557],{"class":38,"line":39},[36,67552,51730],{"class":98},[36,67554,51734],{"class":51733},[36,67556,51737],{"class":55},[36,67558,188],{"class":98},[36,67560,67561,67563,67565,67567,67569,67571],{"class":38,"line":46},[36,67562,179],{"class":98},[36,67564,51068],{"class":51733},[36,67566,51748],{"class":55},[36,67568,176],{"class":98},[36,67570,51753],{"class":59},[36,67572,188],{"class":98},[36,67574,67575],{"class":38,"line":52},[36,67576,247],{"emptyLinePlaceholder":246},[36,67578,67579,67581,67583],{"class":38,"line":66},[36,67580,179],{"class":98},[36,67582,51766],{"class":51733},[36,67584,188],{"class":98},[36,67586,67587,67589,67591,67593,67595,67597],{"class":38,"line":72},[36,67588,52576],{"class":98},[36,67590,51776],{"class":51733},[36,67592,51779],{"class":55},[36,67594,176],{"class":98},[36,67596,51784],{"class":59},[36,67598,59559],{"class":98},[36,67600,67601,67603,67605,67607,67609,67611,67613,67615,67617],{"class":38,"line":82},[36,67602,52576],{"class":98},[36,67604,51776],{"class":51733},[36,67606,51795],{"class":55},[36,67608,176],{"class":98},[36,67610,51800],{"class":59},[36,67612,51803],{"class":55},[36,67614,176],{"class":98},[36,67616,51808],{"class":59},[36,67618,59559],{"class":98},[36,67620,67621,67623,67625,67627,67629,67631,67633,67635,67637],{"class":38,"line":88},[36,67622,52576],{"class":98},[36,67624,51776],{"class":51733},[36,67626,15359],{"class":55},[36,67628,176],{"class":98},[36,67630,51823],{"class":59},[36,67632,51803],{"class":55},[36,67634,176],{"class":98},[36,67636,51830],{"class":59},[36,67638,59559],{"class":98},[36,67640,67641,67643,67645,67647,67649],{"class":38,"line":113},[36,67642,52576],{"class":98},[36,67644,51839],{"class":51733},[36,67646,64057],{"class":98},[36,67648,51839],{"class":51733},[36,67650,188],{"class":98},[36,67652,67653,67655,67657],{"class":38,"line":119},[36,67654,52576],{"class":98},[36,67656,537],{"class":51733},[36,67658,188],{"class":98},[36,67660,67661,67663],{"class":38,"line":131},[36,67662,6854],{"class":51733},[36,67664,16011],{"class":98},[36,67666,67667,67669,67671,67673],{"class":38,"line":137},[36,67668,55138],{"class":109},[36,67670,51869],{"class":98},[36,67672,807],{"class":109},[36,67674,1772],{"class":98},[36,67676,67677,67679,67681,67683],{"class":38,"line":147},[36,67678,55127],{"class":109},[36,67680,51869],{"class":98},[36,67682,807],{"class":109},[36,67684,1772],{"class":98},[36,67686,67687],{"class":38,"line":153},[36,67688,2646],{"class":98},[36,67690,67691],{"class":38,"line":191},[36,67692,247],{"emptyLinePlaceholder":246},[36,67694,67695,67697],{"class":38,"line":197},[36,67696,64108],{"class":55},[36,67698,16011],{"class":98},[36,67700,67701,67703,67705,67707,67709],{"class":38,"line":217},[36,67702,55203],{"class":109},[36,67704,51869],{"class":98},[36,67706,64119],{"class":109},[36,67708,51924],{"class":163},[36,67710,1772],{"class":98},[36,67712,67713,67715,67717,67719,67721],{"class":38,"line":223},[36,67714,55217],{"class":109},[36,67716,51869],{"class":98},[36,67718,64132],{"class":109},[36,67720,51924],{"class":163},[36,67722,1772],{"class":98},[36,67724,67725,67727,67729,67731,67733],{"class":38,"line":243},[36,67726,55138],{"class":109},[36,67728,51869],{"class":98},[36,67730,1313],{"class":109},[36,67732,51924],{"class":163},[36,67734,1772],{"class":98},[36,67736,67737,67739,67741,67743,67745,67747,67749],{"class":38,"line":250},[36,67738,62409],{"class":109},[36,67740,51869],{"class":98},[36,67742,833],{"class":109},[36,67744,51924],{"class":163},[36,67746,51953],{"class":109},[36,67748,62676],{"class":109},[36,67750,1772],{"class":98},[36,67752,67753],{"class":38,"line":256},[36,67754,2646],{"class":98},[36,67756,67757],{"class":38,"line":273},[36,67758,247],{"emptyLinePlaceholder":246},[36,67760,67761,67763],{"class":38,"line":278},[36,67762,64177],{"class":55},[36,67764,16011],{"class":98},[36,67766,67767,67769,67771,67773,67775],{"class":38,"line":284},[36,67768,55203],{"class":109},[36,67770,51869],{"class":98},[36,67772,926],{"class":109},[36,67774,942],{"class":163},[36,67776,1772],{"class":98},[36,67778,67779,67781,67783,67785,67787],{"class":38,"line":315},[36,67780,55217],{"class":109},[36,67782,51869],{"class":98},[36,67784,1520],{"class":109},[36,67786,51924],{"class":163},[36,67788,1772],{"class":98},[36,67790,67791,67793,67795,67797,67799],{"class":38,"line":320},[36,67792,57791],{"class":109},[36,67794,51869],{"class":98},[36,67796,1520],{"class":109},[36,67798,51924],{"class":163},[36,67800,1772],{"class":98},[36,67802,67803,67805,67807,67809],{"class":38,"line":326},[36,67804,55441],{"class":109},[36,67806,51869],{"class":98},[36,67808,51909],{"class":109},[36,67810,1772],{"class":98},[36,67812,67813,67815,67817,67819],{"class":38,"line":343},[36,67814,55452],{"class":109},[36,67816,51869],{"class":98},[36,67818,52100],{"class":109},[36,67820,1772],{"class":98},[36,67822,67823],{"class":38,"line":348},[36,67824,2646],{"class":98},[36,67826,67827],{"class":38,"line":354},[36,67828,247],{"emptyLinePlaceholder":246},[36,67830,67831,67833,67835],{"class":38,"line":370},[36,67832,64177],{"class":55},[36,67834,64250],{"class":51733},[36,67836,16011],{"class":98},[36,67838,67839,67841,67843,67845,67847],{"class":38,"line":375},[36,67840,55354],{"class":109},[36,67842,51869],{"class":98},[36,67844,1413],{"class":109},[36,67846,51924],{"class":163},[36,67848,1772],{"class":98},[36,67850,67851,67853,67855,67857],{"class":38,"line":381},[36,67852,62766],{"class":109},[36,67854,51869],{"class":98},[36,67856,64273],{"class":109},[36,67858,1772],{"class":98},[36,67860,67861,67863,67865,67867,67869],{"class":38,"line":399},[36,67862,62432],{"class":109},[36,67864,51869],{"class":98},[36,67866,1313],{"class":109},[36,67868,51924],{"class":163},[36,67870,1772],{"class":98},[36,67872,67873],{"class":38,"line":404},[36,67874,2646],{"class":98},[36,67876,67877],{"class":38,"line":410},[36,67878,247],{"emptyLinePlaceholder":246},[36,67880,67881,67883,67885],{"class":38,"line":423},[36,67882,64177],{"class":55},[36,67884,61724],{"class":51733},[36,67886,16011],{"class":98},[36,67888,67889,67891,67893,67895],{"class":38,"line":436},[36,67890,55164],{"class":109},[36,67892,51869],{"class":98},[36,67894,55169],{"class":109},[36,67896,1772],{"class":98},[36,67898,67899,67901,67903,67905],{"class":38,"line":441},[36,67900,55441],{"class":109},[36,67902,51869],{"class":98},[36,67904,51909],{"class":109},[36,67906,1772],{"class":98},[36,67908,67909,67911,67913,67915],{"class":38,"line":447},[36,67910,55452],{"class":109},[36,67912,51869],{"class":98},[36,67914,52012],{"class":109},[36,67916,1772],{"class":98},[36,67918,67919],{"class":38,"line":465},[36,67920,2646],{"class":98},[36,67922,67923],{"class":38,"line":470},[36,67924,247],{"emptyLinePlaceholder":246},[36,67926,67927,67929,67931,67933],{"class":38,"line":476},[36,67928,64177],{"class":55},[36,67930,61724],{"class":51733},[36,67932,55507],{"class":51733},[36,67934,16011],{"class":98},[36,67936,67937,67939,67941,67943,67945,67947],{"class":38,"line":496},[36,67938,55138],{"class":109},[36,67940,51869],{"class":98},[36,67942,807],{"class":109},[36,67944,9391],{"class":109},[36,67946,51924],{"class":163},[36,67948,1772],{"class":98},[36,67950,67951,67953,67955,67957,67959],{"class":38,"line":501},[36,67952,55354],{"class":109},[36,67954,51869],{"class":98},[36,67956,1163],{"class":109},[36,67958,51924],{"class":163},[36,67960,1772],{"class":98},[36,67962,67963],{"class":38,"line":507},[36,67964,2646],{"class":98},[36,67966,67967],{"class":38,"line":517},[36,67968,247],{"emptyLinePlaceholder":246},[36,67970,67971,67973,67975,67977,67979],{"class":38,"line":522},[36,67972,64177],{"class":55},[36,67974,61724],{"class":51733},[36,67976,55507],{"class":51733},[36,67978,1877],{"class":51733},[36,67980,16011],{"class":98},[36,67982,67983,67985,67987,67989],{"class":38,"line":528},[36,67984,64402],{"class":109},[36,67986,51869],{"class":98},[36,67988,55169],{"class":109},[36,67990,1772],{"class":98},[36,67992,67993,67995,67997,67999,68001,68003,68005],{"class":38,"line":10203},[36,67994,62664],{"class":109},[36,67996,51869],{"class":98},[36,67998,694],{"class":109},[36,68000,51924],{"class":163},[36,68002,51953],{"class":109},[36,68004,64423],{"class":109},[36,68006,1772],{"class":98},[36,68008,68009,68011,68013,68015],{"class":38,"line":10227},[36,68010,57848],{"class":109},[36,68012,51869],{"class":98},[36,68014,62801],{"class":109},[36,68016,1772],{"class":98},[36,68018,68019],{"class":38,"line":10232},[36,68020,2646],{"class":98},[36,68022,68023],{"class":38,"line":10237},[36,68024,247],{"emptyLinePlaceholder":246},[36,68026,68027,68029,68031,68033,68035,68037],{"class":38,"line":10242},[36,68028,64177],{"class":55},[36,68030,61724],{"class":51733},[36,68032,55507],{"class":51733},[36,68034,1877],{"class":51733},[36,68036,64456],{"class":55},[36,68038,16011],{"class":98},[36,68040,68041,68043,68045,68047],{"class":38,"line":10251},[36,68042,62223],{"class":109},[36,68044,51869],{"class":98},[36,68046,64467],{"class":109},[36,68048,1772],{"class":98},[36,68050,68051,68053,68055,68057],{"class":38,"line":10256},[36,68052,57848],{"class":109},[36,68054,51869],{"class":98},[36,68056,64467],{"class":109},[36,68058,1772],{"class":98},[36,68060,68061],{"class":38,"line":10262},[36,68062,2646],{"class":98},[36,68064,68065],{"class":38,"line":10283},[36,68066,247],{"emptyLinePlaceholder":246},[36,68068,68069,68071],{"class":38,"line":10289},[36,68070,64492],{"class":55},[36,68072,16011],{"class":98},[36,68074,68075,68077,68079,68081,68083,68085],{"class":38,"line":10303},[36,68076,55127],{"class":109},[36,68078,51869],{"class":98},[36,68080,807],{"class":109},[36,68082,64505],{"class":109},[36,68084,51924],{"class":163},[36,68086,1772],{"class":98},[36,68088,68089],{"class":38,"line":10309},[36,68090,2646],{"class":98},[36,68092,68093],{"class":38,"line":10336},[36,68094,247],{"emptyLinePlaceholder":246},[36,68096,68097,68099,68101],{"class":38,"line":10345},[36,68098,64492],{"class":55},[36,68100,62606],{"class":55},[36,68102,16011],{"class":98},[36,68104,68105,68107,68109,68111],{"class":38,"line":10351},[36,68106,55441],{"class":109},[36,68108,51869],{"class":98},[36,68110,55169],{"class":109},[36,68112,1772],{"class":98},[36,68114,68115],{"class":38,"line":10359},[36,68116,2646],{"class":98},[36,68118,68119],{"class":38,"line":10364},[36,68120,247],{"emptyLinePlaceholder":246},[36,68122,68123,68125,68128],{"class":38,"line":17043},[36,68124,64492],{"class":55},[36,68126,68127],{"class":55}," .active",[36,68129,16011],{"class":98},[36,68131,68132,68134,68136,68138],{"class":38,"line":17049},[36,68133,55441],{"class":109},[36,68135,51869],{"class":98},[36,68137,61301],{"class":109},[36,68139,1772],{"class":98},[36,68141,68142],{"class":38,"line":17072},[36,68143,2646],{"class":98},[36,68145,68146,68148,68150],{"class":38,"line":17078},[36,68147,52849],{"class":98},[36,68149,537],{"class":51733},[36,68151,188],{"class":98},[36,68153,68154,68156,68158],{"class":38,"line":17101},[36,68155,52217],{"class":98},[36,68157,51766],{"class":51733},[36,68159,188],{"class":98},[36,68161,68162],{"class":38,"line":17115},[36,68163,247],{"emptyLinePlaceholder":246},[36,68165,68166,68168,68170],{"class":38,"line":17135},[36,68167,179],{"class":98},[36,68169,52232],{"class":51733},[36,68171,188],{"class":98},[36,68173,68174,68176,68178,68180,68182,68184],{"class":38,"line":17141},[36,68175,52576],{"class":98},[36,68177,52043],{"class":51733},[36,68179,53918],{"class":55},[36,68181,176],{"class":98},[36,68183,64607],{"class":59},[36,68185,188],{"class":98},[36,68187,68188,68190,68192,68194,68196,68198],{"class":38,"line":17152},[36,68189,51773],{"class":98},[36,68191,52043],{"class":51733},[36,68193,53918],{"class":55},[36,68195,176],{"class":98},[36,68197,64622],{"class":59},[36,68199,188],{"class":98},[36,68201,68202,68204,68206,68208,68210],{"class":38,"line":17175},[36,68203,55666],{"class":98},[36,68205,588],{"class":51733},[36,68207,64633],{"class":98},[36,68209,588],{"class":51733},[36,68211,188],{"class":98},[36,68213,68214,68216,68218],{"class":38,"line":17197},[36,68215,55666],{"class":98},[36,68217,1618],{"class":51733},[36,68219,188],{"class":98},[36,68221,68222,68224,68226,68228,68230,68232,68234,68236,68238,68240,68242,68244,68246,68249,68251,68253,68255,68257],{"class":38,"line":17202},[36,68223,55734],{"class":98},[36,68225,574],{"class":51733},[36,68227,61484],{"class":98},[36,68229,20],{"class":51733},[36,68231,53918],{"class":55},[36,68233,176],{"class":98},[36,68235,60138],{"class":59},[36,68237,61489],{"class":55},[36,68239,176],{"class":98},[36,68241,64668],{"class":59},[36,68243,54383],{"class":55},[36,68245,176],{"class":98},[36,68247,68248],{"class":59},"\"0\"",[36,68250,64671],{"class":98},[36,68252,20],{"class":51733},[36,68254,55746],{"class":98},[36,68256,574],{"class":51733},[36,68258,188],{"class":98},[36,68260,68261,68263,68265,68267,68269,68271,68273,68275,68277,68279,68281,68283,68285,68287,68289],{"class":38,"line":17208},[36,68262,55734],{"class":98},[36,68264,574],{"class":51733},[36,68266,61484],{"class":98},[36,68268,20],{"class":51733},[36,68270,61489],{"class":55},[36,68272,176],{"class":98},[36,68274,64668],{"class":59},[36,68276,54383],{"class":55},[36,68278,176],{"class":98},[36,68280,4129],{"class":59},[36,68282,64698],{"class":98},[36,68284,20],{"class":51733},[36,68286,55746],{"class":98},[36,68288,574],{"class":51733},[36,68290,188],{"class":98},[36,68292,68293,68295,68297,68299,68301,68303,68305,68307,68309,68311,68313,68315,68317,68319,68321],{"class":38,"line":17222},[36,68294,55734],{"class":98},[36,68296,574],{"class":51733},[36,68298,61484],{"class":98},[36,68300,20],{"class":51733},[36,68302,61489],{"class":55},[36,68304,176],{"class":98},[36,68306,64668],{"class":59},[36,68308,54383],{"class":55},[36,68310,176],{"class":98},[36,68312,4152],{"class":59},[36,68314,64725],{"class":98},[36,68316,20],{"class":51733},[36,68318,55746],{"class":98},[36,68320,574],{"class":51733},[36,68322,188],{"class":98},[36,68324,68325,68327,68329,68331,68333,68335,68337,68339,68341,68343,68345,68347,68349,68351,68353],{"class":38,"line":17235},[36,68326,55734],{"class":98},[36,68328,574],{"class":51733},[36,68330,61484],{"class":98},[36,68332,20],{"class":51733},[36,68334,61489],{"class":55},[36,68336,176],{"class":98},[36,68338,64668],{"class":59},[36,68340,54383],{"class":55},[36,68342,176],{"class":98},[36,68344,4165],{"class":59},[36,68346,64752],{"class":98},[36,68348,20],{"class":51733},[36,68350,55746],{"class":98},[36,68352,574],{"class":51733},[36,68354,188],{"class":98},[36,68356,68357,68359,68361,68363,68365,68367,68369,68371,68373,68375,68377,68379,68381,68383,68385],{"class":38,"line":17240},[36,68358,55734],{"class":98},[36,68360,574],{"class":51733},[36,68362,61484],{"class":98},[36,68364,20],{"class":51733},[36,68366,61489],{"class":55},[36,68368,176],{"class":98},[36,68370,64668],{"class":59},[36,68372,54383],{"class":55},[36,68374,176],{"class":98},[36,68376,4178],{"class":59},[36,68378,64779],{"class":98},[36,68380,20],{"class":51733},[36,68382,55746],{"class":98},[36,68384,574],{"class":51733},[36,68386,188],{"class":98},[36,68388,68389,68391,68393],{"class":38,"line":17254},[36,68390,55839],{"class":98},[36,68392,1618],{"class":51733},[36,68394,188],{"class":98},[36,68396,68397,68399,68401],{"class":38,"line":17259},[36,68398,52208],{"class":98},[36,68400,52043],{"class":51733},[36,68402,188],{"class":98},[36,68404,68405,68407,68409,68411,68413,68415],{"class":38,"line":17265},[36,68406,51773],{"class":98},[36,68408,52043],{"class":51733},[36,68410,53918],{"class":55},[36,68412,176],{"class":98},[36,68414,64816],{"class":59},[36,68416,188],{"class":98},[36,68418,68419,68421,68423,68425,68427,68429,68431,68433,68435,68437,68439,68441,68443,68445,68447,68449],{"class":38,"line":17270},[36,68420,55666],{"class":98},[36,68422,52043],{"class":51733},[36,68424,53918],{"class":55},[36,68426,176],{"class":98},[36,68428,64831],{"class":59},[36,68430,61484],{"class":98},[36,68432,1941],{"class":51733},[36,68434,55671],{"class":55},[36,68436,176],{"class":98},[36,68438,64842],{"class":59},[36,68440,55679],{"class":55},[36,68442,176],{"class":98},[36,68444,8103],{"class":59},[36,68446,64851],{"class":98},[36,68448,52043],{"class":51733},[36,68450,188],{"class":98},[36,68452,68453,68455,68457,68459,68461,68463,68465,68467,68469,68471,68473,68475,68477,68479,68481,68483],{"class":38,"line":17284},[36,68454,55666],{"class":98},[36,68456,52043],{"class":51733},[36,68458,53918],{"class":55},[36,68460,176],{"class":98},[36,68462,63055],{"class":59},[36,68464,61484],{"class":98},[36,68466,1941],{"class":51733},[36,68468,55671],{"class":55},[36,68470,176],{"class":98},[36,68472,64878],{"class":59},[36,68474,55679],{"class":55},[36,68476,176],{"class":98},[36,68478,8103],{"class":59},[36,68480,64851],{"class":98},[36,68482,52043],{"class":51733},[36,68484,188],{"class":98},[36,68486,68487,68489,68491,68493,68495,68497,68499,68501,68503,68505,68507,68509,68511,68513,68515,68517],{"class":38,"line":17289},[36,68488,55666],{"class":98},[36,68490,52043],{"class":51733},[36,68492,53918],{"class":55},[36,68494,176],{"class":98},[36,68496,63055],{"class":59},[36,68498,61484],{"class":98},[36,68500,1941],{"class":51733},[36,68502,55671],{"class":55},[36,68504,176],{"class":98},[36,68506,64913],{"class":59},[36,68508,55679],{"class":55},[36,68510,176],{"class":98},[36,68512,8103],{"class":59},[36,68514,64851],{"class":98},[36,68516,52043],{"class":51733},[36,68518,188],{"class":98},[36,68520,68521,68523,68525,68527,68529,68531,68533,68535,68537,68539,68541,68543,68545,68547,68549,68551],{"class":38,"line":17294},[36,68522,55666],{"class":98},[36,68524,52043],{"class":51733},[36,68526,53918],{"class":55},[36,68528,176],{"class":98},[36,68530,63055],{"class":59},[36,68532,61484],{"class":98},[36,68534,1941],{"class":51733},[36,68536,55671],{"class":55},[36,68538,176],{"class":98},[36,68540,64948],{"class":59},[36,68542,55679],{"class":55},[36,68544,176],{"class":98},[36,68546,8103],{"class":59},[36,68548,64851],{"class":98},[36,68550,52043],{"class":51733},[36,68552,188],{"class":98},[36,68554,68555,68557,68559,68561,68563,68565,68567,68569,68571,68573,68575,68577,68579,68581,68583,68585],{"class":38,"line":17308},[36,68556,55666],{"class":98},[36,68558,52043],{"class":51733},[36,68560,53918],{"class":55},[36,68562,176],{"class":98},[36,68564,63055],{"class":59},[36,68566,61484],{"class":98},[36,68568,1941],{"class":51733},[36,68570,55671],{"class":55},[36,68572,176],{"class":98},[36,68574,64983],{"class":59},[36,68576,55679],{"class":55},[36,68578,176],{"class":98},[36,68580,8103],{"class":59},[36,68582,64851],{"class":98},[36,68584,52043],{"class":51733},[36,68586,188],{"class":98},[36,68588,68589,68591,68593],{"class":38,"line":17320},[36,68590,52208],{"class":98},[36,68592,52043],{"class":51733},[36,68594,188],{"class":98},[36,68596,68597,68599,68601],{"class":38,"line":17325},[36,68598,52849],{"class":98},[36,68600,52043],{"class":51733},[36,68602,188],{"class":98},[36,68604,68605,68607,68609],{"class":38,"line":17338},[36,68606,52576],{"class":98},[36,68608,52245],{"class":51733},[36,68610,188],{"class":98},[36,68612,68613],{"class":38,"line":17343},[36,68614,68615],{"class":42},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[36,68617,68618],{"class":38,"line":17348},[36,68619,68620],{"class":42},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[36,68622,68623,68625,68627,68629,68631,68633,68635,68638],{"class":38,"line":17353},[36,68624,11660],{"class":163},[36,68626,61724],{"class":109},[36,68628,14003],{"class":163},[36,68630,54828],{"class":98},[36,68632,54831],{"class":55},[36,68634,621],{"class":98},[36,68636,68637],{"class":59},"'.tab-nav ul'",[36,68639,627],{"class":98},[36,68641,68642],{"class":38,"line":17366},[36,68643,68644],{"class":42},"    \u002F\u002F 2.添加事件\n",[36,68646,68647,68649,68651,68653,68655,68657,68659,68661,68663],{"class":38,"line":17371},[36,68648,67386],{"class":98},[36,68650,58245],{"class":55},[36,68652,621],{"class":98},[36,68654,58250],{"class":59},[36,68656,12874],{"class":98},[36,68658,54881],{"class":163},[36,68660,2130],{"class":98},[36,68662,170],{"class":5667},[36,68664,12881],{"class":98},[36,68666,68667,68669,68671],{"class":38,"line":33066},[36,68668,58676],{"class":98},[36,68670,67442],{"class":55},[36,68672,67445],{"class":98},[36,68674,68675],{"class":38,"line":33072},[36,68676,68677],{"class":42},"      \u002F\u002Fe.targer是我们点击的对象\n",[36,68679,68680,68682,68684,68686,68689],{"class":38,"line":33078},[36,68681,54912],{"class":163},[36,68683,67466],{"class":98},[36,68685,54918],{"class":163},[36,68687,68688],{"class":59}," 'A'",[36,68690,12881],{"class":98},[36,68692,68693,68695,68697,68699,68702,68704,68706,68708,68710],{"class":38,"line":33084},[36,68694,52357],{"class":98},[36,68696,54831],{"class":55},[36,68698,621],{"class":98},[36,68700,68701],{"class":59},"'.active'",[36,68703,57435],{"class":98},[36,68705,57438],{"class":55},[36,68707,621],{"class":98},[36,68709,65146],{"class":59},[36,68711,627],{"class":98},[36,68713,68714,68717,68719,68721,68723],{"class":38,"line":33090},[36,68715,68716],{"class":98},"        e.target.classList.",[36,68718,5785],{"class":55},[36,68720,621],{"class":98},[36,68722,65146],{"class":59},[36,68724,627],{"class":98},[36,68726,68727],{"class":38,"line":33101},[36,68728,247],{"emptyLinePlaceholder":246},[36,68730,68731],{"class":38,"line":33107},[36,68732,68733],{"class":42},"        \u002F\u002F 下面大盒子模块\n",[36,68735,68736],{"class":38,"line":33127},[36,68737,68738],{"class":42},"        \u002F\u002F console.log(e.target.dataset.id)\n",[36,68740,68741,68743,68745,68747,68749],{"class":38,"line":33133},[36,68742,61702],{"class":163},[36,68744,3483],{"class":109},[36,68746,14003],{"class":163},[36,68748,45999],{"class":163},[36,68750,68751],{"class":98},"e.target.dataset.id\n",[36,68753,68754,68756,68758,68760,68762,68764,68766,68768,68770],{"class":38,"line":33144},[36,68755,52357],{"class":98},[36,68757,54831],{"class":55},[36,68759,621],{"class":98},[36,68761,65194],{"class":59},[36,68763,57435],{"class":98},[36,68765,57438],{"class":55},[36,68767,621],{"class":98},[36,68769,65146],{"class":59},[36,68771,627],{"class":98},[36,68773,68774,68776,68778,68780,68782,68784,68786,68788,68790,68792,68794,68796,68798],{"class":38,"line":33150},[36,68775,52357],{"class":98},[36,68777,54831],{"class":55},[36,68779,621],{"class":98},[36,68781,65220],{"class":59},[36,68783,1055],{"class":98},[36,68785,45999],{"class":163},[36,68787,25555],{"class":109},[36,68789,57464],{"class":59},[36,68791,57435],{"class":98},[36,68793,5785],{"class":55},[36,68795,621],{"class":98},[36,68797,65146],{"class":59},[36,68799,627],{"class":98},[36,68801,68802],{"class":38,"line":33156},[36,68803,247],{"emptyLinePlaceholder":246},[36,68805,68806],{"class":38,"line":33162},[36,68807,52830],{"class":98},[36,68809,68810],{"class":38,"line":33168},[36,68811,33894],{"class":98},[36,68813,68814,68816,68818],{"class":38,"line":33174},[36,68815,52849],{"class":98},[36,68817,52245],{"class":51733},[36,68819,188],{"class":98},[36,68821,68822,68824,68826],{"class":38,"line":33180},[36,68823,52217],{"class":98},[36,68825,52232],{"class":51733},[36,68827,188],{"class":98},[36,68829,68830],{"class":38,"line":33186},[36,68831,247],{"emptyLinePlaceholder":246},[36,68833,68834,68836,68838],{"class":38,"line":33206},[36,68835,52217],{"class":98},[36,68837,51068],{"class":51733},[36,68839,188],{"class":98},[588,68841,68843],{"id":68842},"_333-页面加载事件","3.3.3 页面加载事件",[571,68845,68846],{},[574,68847,68848],{},"load",[14,68850,68851],{},[1941,68852],{"alt":31,"src":68853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,68855,68856],{},"window代表整个窗口，比document还要大",[14,68858,68859],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,68861,68862],{},"img.addEventListener('load', function () {",[14,68864,68865],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,68867,52896],{},[571,68869,68870],{"start":46},[574,68871,68872],{},"DOMContentLoaded",[14,68874,68875],{},[1941,68876],{"alt":31,"src":68877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,68879,68880],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[588,68882,68884],{"id":68883},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,68886,68887],{},[1941,68888],{"alt":31,"src":68889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,68891,68892],{},[1941,68893],{"alt":31,"src":68894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,68896,68897],{},[1941,68898],{"alt":31,"src":68899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,68901,68902],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,68904,68905],{},"获得的是数字型数据，不带单位",[14,68907,68908],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,68910,68911],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,68913,68914],{},"它是通过document.documentElement来获取",[14,68916,68917],{},[1941,68918],{"alt":31,"src":68919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,68921,68922],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[588,68924,68926],{"id":68925},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,68928,68929],{},[1941,68930],{"alt":31,"src":68931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,68933,68934],{},[1941,68935],{"alt":31,"src":68936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[588,68938,68940],{"id":68939},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,68942,68943],{},[1941,68944],{"alt":31,"src":68945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,68947,68948],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,68950,68951],{},[1941,68952],{"alt":31,"src":68953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,68955,68956],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,68958,68959],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,68961,68962],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,68964,68965],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,68967,68968],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,68970,68971],{},[1941,68972],{"alt":31,"src":68973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,68975,68976],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,68978,68979],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,68981,68982],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,68984,68985],{},"e.pageX-box.getBoundingClientRect()",[588,68987,68989],{"id":68988},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,68991,68992],{},[1941,68993],{"alt":31,"src":68994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,68996,68997],{},"这个是相对于视口来说的，它是个方法，不是属性值",[588,68999,69001],{"id":69000},"_338-总结","3.3.8 总结",[14,69003,69004],{},[1941,69005],{"alt":31,"src":69006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,69008,69009],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,69011,69012],{},"修改盒子的宽高只能通过width和height来实现",[588,69014,69016],{"id":69015},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[26,69018,69020],{"className":51066,"code":69019,"language":51068,"meta":31,"style":31},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[33,69021,69022,69027,69032,69037,69042],{"__ignoreMap":31},[36,69023,69024],{"class":38,"line":39},[36,69025,69026],{"class":98},"\u002F* 页面滑动 *\u002F\n",[36,69028,69029],{"class":38,"line":46},[36,69030,69031],{"class":98},"html {\n",[36,69033,69034],{"class":38,"line":52},[36,69035,69036],{"class":98},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[36,69038,69039],{"class":38,"line":66},[36,69040,69041],{"class":98},"  scroll-behavior: smooth;\n",[36,69043,69044],{"class":38,"line":72},[36,69045,2044],{"class":98},[14,69047,69048],{},"默认是auto",[588,69050,69052],{"id":69051},"_3310-日期对象","3.3.10 日期对象",[22437,69054,69056],{"id":69055},"_33101-实例化","3.3.10.1 实例化",[14,69058,69059],{},[1941,69060],{"alt":31,"src":69061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22437,69063,69065],{"id":69064},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,69067,69068],{},[1941,69069],{"alt":31,"src":69070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,69072,69073],{},"月份+1",[14,69075,69076],{},"老外认为第一天为0，星期天",[14,69078,69079],{},"方法使用的时候必须要跟括号",[14,69081,69082],{},"快速获得日期",[14,69084,69085],{},"\u002F\u002F 得到年月日",[14,69087,69088],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,69090,69091],{},"\u002F\u002F 得到当地日期",[14,69093,69094],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,69096,69097],{},"\u002F\u002F 得到当地时间",[14,69099,69100],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,69102,69103],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,69105,69106],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52245,69108,69109],{},"\n\nconst div = document.querySelector('div')\n\nfunction getMyDate() {\n\nconst date = new Date()\n\nlet h = date.getHours()\n\nlet m = date.getMinutes()\n\nlet s = date.getSeconds()\n\nh = h \u003C 10 ? '0' + h : h\n\nm = m \u003C 10 ? '0' + m : m\n\ns = s \u003C 10 ? '0' + s : s\n\nreturn \\``今天是${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}号 ${h}:${m}:${s}`\\`\n\n}\n\n\u002F\u002F 外面还写一个这个时间是因为定时器需要经过1秒才调用一次函数，刚开始会有空白\n\ndiv.innerHTML = getMyDate()\n\nsetInterval(function () {\n\ndiv.innerHTML = getMyDate()\n\n}, 1000)\n\n",[14,69111,69112],{},"学会去封装函数！",[22437,69114,69116],{"id":69115},"_33103-时间戳","3.3.10.3 时间戳",[14,69118,69119],{},[1941,69120],{"alt":31,"src":69121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,69123,69124],{},[1941,69125],{"alt":31,"src":69126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,69128,69129],{},"三种方法记住一个就可以",[588,69131,69133],{"id":69132},"_3311-节点操作","3.3.11 节点操作",[22437,69135,69137],{"id":69136},"_33111-dom节点","3.3.11.1 DOM节点",[14,69139,69140],{},[1941,69141],{"alt":31,"src":69142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,69144,69145],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22437,69147,69149],{"id":69148},"_33112-查找节点","3.3.11.2 查找节点",[14,69151,69152],{},"前边的document.querySelector()是获取的元素",[14,69154,69155],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,69157,69158],{},[1941,69159],{"alt":31,"src":69160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[571,69162,69163],{},[574,69164,69165],{},"父节点",[14,69167,69168],{},[1941,69169],{"alt":31,"src":69170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[571,69172,69173],{"start":46},[574,69174,69175],{},"子节点",[14,69177,69178],{},[1941,69179],{"alt":31,"src":69180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,69182,69183],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,69185,69186],{},"children获得的是伪数组，是亲儿子",[571,69188,69189],{"start":52},[574,69190,69191],{},"兄弟节点",[14,69193,69194],{},[1941,69195],{"alt":31,"src":69196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22437,69198,69200],{"id":69199},"_33113-增加节点","3.3.11.3 增加节点",[14,69202,69203],{},[1941,69204],{"alt":31,"src":69205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,69207,69208],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,69210,69211],{},[1941,69212],{"alt":31,"src":69213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,69215,69216],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,69218,69219],{},"下面是写法的部分展示，就按照下边的格式来写",[14,69221,69222],{},"例：",[52245,69224,69225],{},"\n\n\u002F\u002F 1. 重构 let data = \\[\n\n{\n\nsrc: 'images\u002Fcourse01.png',\n\ntitle: 'Think PHP 5.0 博客系统实战项目演练',\n\nnum: 1125\n\n},\n\n{\n\nsrc: 'images\u002Fcourse02.png',\n\ntitle: 'Android 网络动态图片加载实战',\n\nnum: 357\n\n},\n\n{\n\nsrc: 'images\u002Fcourse03.png',\n\ntitle: 'Angular2 大前端商城实战项目演练',\n\nnum: 22250\n\n},\n\n{\n\nsrc: 'images\u002Fcourse04.png',\n\ntitle: 'Android APP 实战项目演练',\n\nnum: 389\n\n},\n\n{\n\nsrc: 'images\u002Fcourse05.png',\n\ntitle: 'UGUI 源码深度分析案例',\n\nnum: 124\n\n},\n\n{\n\nsrc: 'images\u002Fcourse06.png',\n\ntitle: 'Kami2首页界面切换效果实战演练',\n\nnum: 432\n\n},\n\n{\n\nsrc: 'images\u002Fcourse07.png',\n\ntitle: 'UNITY 从入门到精通实战案例',\n\nnum: 888\n\n},\n\n{\n\nsrc: 'images\u002Fcourse08.png',\n\ntitle: 'Cocos 深度学习你不会错过的实战',\n\nnum: 590\n\n},\n\n\\]\n\n\u002F\u002F 1.根据数据的个数创建对应的li\n\nconst ul = document.querySelector('ul')\n\nfor (let i = 0; i \u003C data.length; i++) {\n\n\u002F\u002F 2.创建新的li\n\nconst li = document.createElement('li')\n\nul.appendChild(li)\n\n\u002F\u002F 把内容给li\n\nli.innerHTML = `\u003Ca href=\"#\">`\n\n   `\u003Cimg src=\"${data[i].src}\" alt=\"\">`\n\n   `\u003Ch4>${data[i].title}\u003C\u002Fh4>`\n\n   `\u003Cdiv class=\"info\">`\n\n   `\u003Cspan>高级\u003C\u002Fspan>·\u003Cspan>${data[i].num}\u003C\u002Fspan>人在学 \u003C\u002Fdiv>`\n\n   `\u003C\u002Fa>`\n\n}\n\n",[14,69227,69228],{},[1941,69229],{"alt":31,"src":69230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,69232,69233],{},"false只克隆标签，里边的内容不会克隆过来",[26,69235,69237],{"className":51066,"code":69236,"language":51068,"meta":31,"style":31},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[33,69238,69239],{"__ignoreMap":31},[36,69240,69241],{"class":38,"line":39},[36,69242,69236],{"class":98},[22437,69244,69246],{"id":69245},"_33114-删除节点","3.3.11.4 删除节点",[14,69248,69249],{},[1941,69250],{"alt":31,"src":69251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,69253,69254],{},"父亲删儿子",[14,69256,69257],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[588,69259,69261],{"id":69260},"_3312-m端事件","3.3.12 M端事件",[14,69263,69264],{},"M端就是移动端",[14,69266,69267],{},[1941,69268],{"alt":31,"src":69269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[588,69271,69273],{"id":69272},"_3313-插件","3.3.13 插件",[14,69275,69276],{},"要熟悉官网！！！",[14,69278,69279],{},[20,69280,69281],{"href":69281,"rel":69282},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24],[14,69284,69285],{},[20,69286,69287],{"href":69287,"rel":69288},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24],[588,69290,69292],{"id":69291},"_3314-学生信息表","3.3.14 学生信息表",[571,69294,69295,69298,69301,69304,69307,69310,69313,69316],{},[574,69296,69297],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[574,69299,69300],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[574,69302,69303],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[574,69305,69306],{},"用好表单元素自带的属性，value,name等",[574,69308,69309],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[574,69311,69312],{},"不要忘记事件对象",[574,69314,69315],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[574,69317,69318],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,69320,69321],{},"结构：",[26,69323,69325],{"className":51066,"code":69324,"language":51068,"meta":31,"style":31},"\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",[33,69326,69327,69337,69351,69355,69363,69377,69397,69418,69431,69455,69463,69467,69475,69488,69509,69537,69565,69570,69592,69612,69631,69639,69667,69689,69709,69729,69749,69769,69789,69797,69817,69825,69829,69842,69850,69858,69866,69879,69892,69905,69918,69931,69944,69957,69965,69973,69981,69986,69991,69996,70001,70006,70011,70016,70021,70026,70031,70036,70041,70046,70054,70062,70070,70074,70094,70113,70133,70153,70173,70193,70197,70202,70222,70227,70237,70242,70247,70267,70289,70294,70304,70308,70312,70317,70322,70351,70365,70380,70384,70388,70392,70397,70408,70421,70426,70431,70436,70441,70446,70450,70455,70460,70469,70474,70479,70491,70496,70503,70507,70512,70522,70527,70537,70542,70570,70591,70601,70621,70639,70656,70673,70690,70707,70711,70721,70726,70731,70736,70747,70751,70755,70759,70764,70769,70790,70802,70807,70812,70817,70831,70836,70843,70847,70851,70859,70863,70871,70875],{"__ignoreMap":31},[36,69328,69329,69331,69333,69335],{"class":38,"line":39},[36,69330,51730],{"class":98},[36,69332,51734],{"class":51733},[36,69334,51737],{"class":55},[36,69336,188],{"class":98},[36,69338,69339,69341,69343,69345,69347,69349],{"class":38,"line":46},[36,69340,179],{"class":98},[36,69342,51068],{"class":51733},[36,69344,51748],{"class":55},[36,69346,176],{"class":98},[36,69348,51753],{"class":59},[36,69350,188],{"class":98},[36,69352,69353],{"class":38,"line":52},[36,69354,247],{"emptyLinePlaceholder":246},[36,69356,69357,69359,69361],{"class":38,"line":66},[36,69358,179],{"class":98},[36,69360,51766],{"class":51733},[36,69362,188],{"class":98},[36,69364,69365,69367,69369,69371,69373,69375],{"class":38,"line":72},[36,69366,52576],{"class":98},[36,69368,51776],{"class":51733},[36,69370,51779],{"class":55},[36,69372,176],{"class":98},[36,69374,51784],{"class":59},[36,69376,59559],{"class":98},[36,69378,69379,69381,69383,69385,69387,69389,69391,69393,69395],{"class":38,"line":82},[36,69380,52576],{"class":98},[36,69382,51776],{"class":51733},[36,69384,15359],{"class":55},[36,69386,176],{"class":98},[36,69388,51823],{"class":59},[36,69390,51803],{"class":55},[36,69392,176],{"class":98},[36,69394,51830],{"class":59},[36,69396,59559],{"class":98},[36,69398,69399,69401,69403,69405,69407,69409,69411,69413,69416],{"class":38,"line":88},[36,69400,52576],{"class":98},[36,69402,51776],{"class":51733},[36,69404,51795],{"class":55},[36,69406,176],{"class":98},[36,69408,51800],{"class":59},[36,69410,51803],{"class":55},[36,69412,176],{"class":98},[36,69414,69415],{"class":59},"\"ie=edge\"",[36,69417,59559],{"class":98},[36,69419,69420,69422,69424,69427,69429],{"class":38,"line":113},[36,69421,52576],{"class":98},[36,69423,51839],{"class":51733},[36,69425,69426],{"class":98},">学生信息管理\u003C\u002F",[36,69428,51839],{"class":51733},[36,69430,188],{"class":98},[36,69432,69433,69435,69438,69441,69443,69446,69448,69450,69453],{"class":38,"line":119},[36,69434,52576],{"class":98},[36,69436,69437],{"class":51733},"link",[36,69439,69440],{"class":55}," rel",[36,69442,176],{"class":98},[36,69444,69445],{"class":59},"\"stylesheet\"",[36,69447,61489],{"class":55},[36,69449,176],{"class":98},[36,69451,69452],{"class":59},"\"css\u002Findex.css\"",[36,69454,59559],{"class":98},[36,69456,69457,69459,69461],{"class":38,"line":131},[36,69458,52217],{"class":98},[36,69460,51766],{"class":51733},[36,69462,188],{"class":98},[36,69464,69465],{"class":38,"line":137},[36,69466,247],{"emptyLinePlaceholder":246},[36,69468,69469,69471,69473],{"class":38,"line":147},[36,69470,179],{"class":98},[36,69472,52232],{"class":51733},[36,69474,188],{"class":98},[36,69476,69477,69479,69481,69484,69486],{"class":38,"line":153},[36,69478,52576],{"class":98},[36,69480,10],{"class":51733},[36,69482,69483],{"class":98},">新增学员\u003C\u002F",[36,69485,10],{"class":51733},[36,69487,188],{"class":98},[36,69489,69490,69492,69494,69496,69498,69500,69503,69505,69507],{"class":38,"line":191},[36,69491,52576],{"class":98},[36,69493,67057],{"class":51733},[36,69495,53918],{"class":55},[36,69497,176],{"class":98},[36,69499,63096],{"class":59},[36,69501,69502],{"class":55}," autocomplete",[36,69504,176],{"class":98},[36,69506,32209],{"class":59},[36,69508,188],{"class":98},[36,69510,69511,69514,69516,69518,69520,69522,69524,69526,69529,69531,69533,69535],{"class":38,"line":197},[36,69512,69513],{"class":98},"    姓名：\u003C",[36,69515,54253],{"class":51733},[36,69517,54256],{"class":55},[36,69519,176],{"class":98},[36,69521,63131],{"class":59},[36,69523,53918],{"class":55},[36,69525,176],{"class":98},[36,69527,69528],{"class":59},"\"uname\"",[36,69530,15359],{"class":55},[36,69532,176],{"class":98},[36,69534,69528],{"class":59},[36,69536,59559],{"class":98},[36,69538,69539,69542,69544,69546,69548,69550,69552,69554,69557,69559,69561,69563],{"class":38,"line":217},[36,69540,69541],{"class":98},"    年龄：\u003C",[36,69543,54253],{"class":51733},[36,69545,54256],{"class":55},[36,69547,176],{"class":98},[36,69549,63131],{"class":59},[36,69551,53918],{"class":55},[36,69553,176],{"class":98},[36,69555,69556],{"class":59},"\"age\"",[36,69558,15359],{"class":55},[36,69560,176],{"class":98},[36,69562,69556],{"class":59},[36,69564,59559],{"class":98},[36,69566,69567],{"class":38,"line":223},[36,69568,69569],{"class":98},"    性别:\n",[36,69571,69572,69574,69577,69579,69581,69584,69586,69588,69590],{"class":38,"line":243},[36,69573,51773],{"class":98},[36,69575,69576],{"class":51733},"select",[36,69578,15359],{"class":55},[36,69580,176],{"class":98},[36,69582,69583],{"class":59},"\"gender\"",[36,69585,53918],{"class":55},[36,69587,176],{"class":98},[36,69589,69583],{"class":59},[36,69591,188],{"class":98},[36,69593,69594,69596,69599,69601,69603,69605,69608,69610],{"class":38,"line":250},[36,69595,55666],{"class":98},[36,69597,69598],{"class":51733},"option",[36,69600,67083],{"class":55},[36,69602,176],{"class":98},[36,69604,10400],{"class":59},[36,69606,69607],{"class":98},">男\u003C\u002F",[36,69609,69598],{"class":51733},[36,69611,188],{"class":98},[36,69613,69614,69616,69618,69620,69622,69624,69627,69629],{"class":38,"line":256},[36,69615,55666],{"class":98},[36,69617,69598],{"class":51733},[36,69619,67083],{"class":55},[36,69621,176],{"class":98},[36,69623,10469],{"class":59},[36,69625,69626],{"class":98},">女\u003C\u002F",[36,69628,69598],{"class":51733},[36,69630,188],{"class":98},[36,69632,69633,69635,69637],{"class":38,"line":273},[36,69634,52208],{"class":98},[36,69636,69576],{"class":51733},[36,69638,188],{"class":98},[36,69640,69641,69644,69646,69648,69650,69652,69654,69656,69659,69661,69663,69665],{"class":38,"line":278},[36,69642,69643],{"class":98},"    薪资：\u003C",[36,69645,54253],{"class":51733},[36,69647,54256],{"class":55},[36,69649,176],{"class":98},[36,69651,63131],{"class":59},[36,69653,53918],{"class":55},[36,69655,176],{"class":98},[36,69657,69658],{"class":59},"\"salary\"",[36,69660,15359],{"class":55},[36,69662,176],{"class":98},[36,69664,69658],{"class":59},[36,69666,59559],{"class":98},[36,69668,69669,69672,69674,69676,69678,69681,69683,69685,69687],{"class":38,"line":284},[36,69670,69671],{"class":98},"    就业城市：\u003C",[36,69673,69576],{"class":51733},[36,69675,15359],{"class":55},[36,69677,176],{"class":98},[36,69679,69680],{"class":59},"\"city\"",[36,69682,53918],{"class":55},[36,69684,176],{"class":98},[36,69686,69680],{"class":59},[36,69688,188],{"class":98},[36,69690,69691,69693,69695,69697,69699,69702,69705,69707],{"class":38,"line":315},[36,69692,55666],{"class":98},[36,69694,69598],{"class":51733},[36,69696,67083],{"class":55},[36,69698,176],{"class":98},[36,69700,69701],{"class":59},"\"北京\"",[36,69703,69704],{"class":98},">北京\u003C\u002F",[36,69706,69598],{"class":51733},[36,69708,188],{"class":98},[36,69710,69711,69713,69715,69717,69719,69722,69725,69727],{"class":38,"line":320},[36,69712,55666],{"class":98},[36,69714,69598],{"class":51733},[36,69716,67083],{"class":55},[36,69718,176],{"class":98},[36,69720,69721],{"class":59},"\"上海\"",[36,69723,69724],{"class":98},">上海\u003C\u002F",[36,69726,69598],{"class":51733},[36,69728,188],{"class":98},[36,69730,69731,69733,69735,69737,69739,69742,69745,69747],{"class":38,"line":326},[36,69732,55666],{"class":98},[36,69734,69598],{"class":51733},[36,69736,67083],{"class":55},[36,69738,176],{"class":98},[36,69740,69741],{"class":59},"\"广州\"",[36,69743,69744],{"class":98},">广州\u003C\u002F",[36,69746,69598],{"class":51733},[36,69748,188],{"class":98},[36,69750,69751,69753,69755,69757,69759,69762,69765,69767],{"class":38,"line":343},[36,69752,55666],{"class":98},[36,69754,69598],{"class":51733},[36,69756,67083],{"class":55},[36,69758,176],{"class":98},[36,69760,69761],{"class":59},"\"深圳\"",[36,69763,69764],{"class":98},">深圳\u003C\u002F",[36,69766,69598],{"class":51733},[36,69768,188],{"class":98},[36,69770,69771,69773,69775,69777,69779,69782,69785,69787],{"class":38,"line":348},[36,69772,55666],{"class":98},[36,69774,69598],{"class":51733},[36,69776,67083],{"class":55},[36,69778,176],{"class":98},[36,69780,69781],{"class":59},"\"曹县\"",[36,69783,69784],{"class":98},">曹县\u003C\u002F",[36,69786,69598],{"class":51733},[36,69788,188],{"class":98},[36,69790,69791,69793,69795],{"class":38,"line":354},[36,69792,52208],{"class":98},[36,69794,69576],{"class":51733},[36,69796,188],{"class":98},[36,69798,69799,69801,69803,69805,69807,69810,69813,69815],{"class":38,"line":370},[36,69800,51773],{"class":98},[36,69802,54319],{"class":51733},[36,69804,53918],{"class":55},[36,69806,176],{"class":98},[36,69808,69809],{"class":59},"\"add\"",[36,69811,69812],{"class":98},">录入\u003C\u002F",[36,69814,54319],{"class":51733},[36,69816,188],{"class":98},[36,69818,69819,69821,69823],{"class":38,"line":375},[36,69820,52849],{"class":98},[36,69822,67057],{"class":51733},[36,69824,188],{"class":98},[36,69826,69827],{"class":38,"line":381},[36,69828,247],{"emptyLinePlaceholder":246},[36,69830,69831,69833,69835,69838,69840],{"class":38,"line":399},[36,69832,52576],{"class":98},[36,69834,10],{"class":51733},[36,69836,69837],{"class":98},">就业榜\u003C\u002F",[36,69839,10],{"class":51733},[36,69841,188],{"class":98},[36,69843,69844,69846,69848],{"class":38,"line":404},[36,69845,52576],{"class":98},[36,69847,753],{"class":51733},[36,69849,188],{"class":98},[36,69851,69852,69854,69856],{"class":38,"line":410},[36,69853,51773],{"class":98},[36,69855,756],{"class":51733},[36,69857,188],{"class":98},[36,69859,69860,69862,69864],{"class":38,"line":423},[36,69861,55666],{"class":98},[36,69863,759],{"class":51733},[36,69865,188],{"class":98},[36,69867,69868,69870,69872,69875,69877],{"class":38,"line":436},[36,69869,55734],{"class":98},[36,69871,762],{"class":51733},[36,69873,69874],{"class":98},">序号\u003C\u002F",[36,69876,762],{"class":51733},[36,69878,188],{"class":98},[36,69880,69881,69883,69885,69888,69890],{"class":38,"line":441},[36,69882,55734],{"class":98},[36,69884,762],{"class":51733},[36,69886,69887],{"class":98},">姓名\u003C\u002F",[36,69889,762],{"class":51733},[36,69891,188],{"class":98},[36,69893,69894,69896,69898,69901,69903],{"class":38,"line":447},[36,69895,55734],{"class":98},[36,69897,762],{"class":51733},[36,69899,69900],{"class":98},">年龄\u003C\u002F",[36,69902,762],{"class":51733},[36,69904,188],{"class":98},[36,69906,69907,69909,69911,69914,69916],{"class":38,"line":465},[36,69908,55734],{"class":98},[36,69910,762],{"class":51733},[36,69912,69913],{"class":98},">性别\u003C\u002F",[36,69915,762],{"class":51733},[36,69917,188],{"class":98},[36,69919,69920,69922,69924,69927,69929],{"class":38,"line":470},[36,69921,55734],{"class":98},[36,69923,762],{"class":51733},[36,69925,69926],{"class":98},">薪资\u003C\u002F",[36,69928,762],{"class":51733},[36,69930,188],{"class":98},[36,69932,69933,69935,69937,69940,69942],{"class":38,"line":476},[36,69934,55734],{"class":98},[36,69936,762],{"class":51733},[36,69938,69939],{"class":98},">就业城市\u003C\u002F",[36,69941,762],{"class":51733},[36,69943,188],{"class":98},[36,69945,69946,69948,69950,69953,69955],{"class":38,"line":496},[36,69947,55734],{"class":98},[36,69949,762],{"class":51733},[36,69951,69952],{"class":98},">操作\u003C\u002F",[36,69954,762],{"class":51733},[36,69956,188],{"class":98},[36,69958,69959,69961,69963],{"class":38,"line":501},[36,69960,55839],{"class":98},[36,69962,759],{"class":51733},[36,69964,188],{"class":98},[36,69966,69967,69969,69971],{"class":38,"line":507},[36,69968,52208],{"class":98},[36,69970,756],{"class":51733},[36,69972,188],{"class":98},[36,69974,69975,69977,69979],{"class":38,"line":517},[36,69976,51773],{"class":98},[36,69978,800],{"class":51733},[36,69980,188],{"class":98},[36,69982,69983],{"class":38,"line":522},[36,69984,69985],{"class":42},"      \u003C!-- \n",[36,69987,69988],{"class":38,"line":528},[36,69989,69990],{"class":42},"        \u003Ctr>\n",[36,69992,69993],{"class":38,"line":10203},[36,69994,69995],{"class":42},"          \u003Ctd>1001\u003C\u002Ftd>\n",[36,69997,69998],{"class":38,"line":10227},[36,69999,70000],{"class":42},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[36,70002,70003],{"class":38,"line":10232},[36,70004,70005],{"class":42},"          \u003Ctd>19\u003C\u002Ftd>\n",[36,70007,70008],{"class":38,"line":10237},[36,70009,70010],{"class":42},"          \u003Ctd>男\u003C\u002Ftd>\n",[36,70012,70013],{"class":38,"line":10242},[36,70014,70015],{"class":42},"          \u003Ctd>15000\u003C\u002Ftd>\n",[36,70017,70018],{"class":38,"line":10251},[36,70019,70020],{"class":42},"          \u003Ctd>上海\u003C\u002Ftd>\n",[36,70022,70023],{"class":38,"line":10256},[36,70024,70025],{"class":42},"          \u003Ctd>\n",[36,70027,70028],{"class":38,"line":10262},[36,70029,70030],{"class":42},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[36,70032,70033],{"class":38,"line":10283},[36,70034,70035],{"class":42},"          \u003C\u002Ftd>\n",[36,70037,70038],{"class":38,"line":10289},[36,70039,70040],{"class":42},"        \u003C\u002Ftr> \n",[36,70042,70043],{"class":38,"line":10303},[36,70044,70045],{"class":42},"        -->\n",[36,70047,70048,70050,70052],{"class":38,"line":10309},[36,70049,52208],{"class":98},[36,70051,800],{"class":51733},[36,70053,188],{"class":98},[36,70055,70056,70058,70060],{"class":38,"line":10336},[36,70057,52849],{"class":98},[36,70059,753],{"class":51733},[36,70061,188],{"class":98},[36,70063,70064,70066,70068],{"class":38,"line":10345},[36,70065,52576],{"class":98},[36,70067,52245],{"class":51733},[36,70069,188],{"class":98},[36,70071,70072],{"class":38,"line":10351},[36,70073,60390],{"class":42},[36,70075,70076,70078,70081,70083,70085,70087,70089,70092],{"class":38,"line":10359},[36,70077,11660],{"class":163},[36,70079,70080],{"class":109}," uname",[36,70082,14003],{"class":163},[36,70084,54828],{"class":98},[36,70086,54831],{"class":55},[36,70088,621],{"class":98},[36,70090,70091],{"class":59},"'.uname'",[36,70093,627],{"class":98},[36,70095,70096,70098,70100,70102,70104,70106,70108,70111],{"class":38,"line":10364},[36,70097,11660],{"class":163},[36,70099,16128],{"class":109},[36,70101,14003],{"class":163},[36,70103,54828],{"class":98},[36,70105,54831],{"class":55},[36,70107,621],{"class":98},[36,70109,70110],{"class":59},"'.age'",[36,70112,627],{"class":98},[36,70114,70115,70117,70120,70122,70124,70126,70128,70131],{"class":38,"line":17043},[36,70116,11660],{"class":163},[36,70118,70119],{"class":109}," gender",[36,70121,14003],{"class":163},[36,70123,54828],{"class":98},[36,70125,54831],{"class":55},[36,70127,621],{"class":98},[36,70129,70130],{"class":59},"'.gender'",[36,70132,627],{"class":98},[36,70134,70135,70137,70140,70142,70144,70146,70148,70151],{"class":38,"line":17049},[36,70136,11660],{"class":163},[36,70138,70139],{"class":109}," salary",[36,70141,14003],{"class":163},[36,70143,54828],{"class":98},[36,70145,54831],{"class":55},[36,70147,621],{"class":98},[36,70149,70150],{"class":59},"'.salary'",[36,70152,627],{"class":98},[36,70154,70155,70157,70160,70162,70164,70166,70168,70171],{"class":38,"line":17072},[36,70156,11660],{"class":163},[36,70158,70159],{"class":109}," city",[36,70161,14003],{"class":163},[36,70163,54828],{"class":98},[36,70165,54831],{"class":55},[36,70167,621],{"class":98},[36,70169,70170],{"class":59},"'.city'",[36,70172,627],{"class":98},[36,70174,70175,70177,70180,70182,70184,70186,70188,70191],{"class":38,"line":17078},[36,70176,11660],{"class":163},[36,70178,70179],{"class":109}," tbody",[36,70181,14003],{"class":163},[36,70183,54828],{"class":98},[36,70185,54831],{"class":55},[36,70187,621],{"class":98},[36,70189,70190],{"class":59},"'tbody'",[36,70192,627],{"class":98},[36,70194,70195],{"class":38,"line":17101},[36,70196,247],{"emptyLinePlaceholder":246},[36,70198,70199],{"class":38,"line":17115},[36,70200,70201],{"class":42},"    \u002F\u002F 获取所有带有name属性的元素\n",[36,70203,70204,70206,70209,70211,70213,70215,70217,70220],{"class":38,"line":17135},[36,70205,11660],{"class":163},[36,70207,70208],{"class":109}," items",[36,70210,14003],{"class":163},[36,70212,54828],{"class":98},[36,70214,56113],{"class":55},[36,70216,621],{"class":98},[36,70218,70219],{"class":59},"'[name]'",[36,70221,627],{"class":98},[36,70223,70224],{"class":38,"line":17141},[36,70225,70226],{"class":42},"    \u002F\u002F 声明一个空的数组\n",[36,70228,70229,70231,70233,70235],{"class":38,"line":17152},[36,70230,11660],{"class":163},[36,70232,58127],{"class":109},[36,70234,14003],{"class":163},[36,70236,52270],{"class":98},[36,70238,70239],{"class":38,"line":17175},[36,70240,70241],{"class":42},"    \u002F\u002F 1.录入模块\n",[36,70243,70244],{"class":38,"line":17197},[36,70245,70246],{"class":42},"    \u002F\u002F 1.1这是一个表单提交事件\n",[36,70248,70249,70251,70254,70256,70258,70260,70262,70265],{"class":38,"line":17202},[36,70250,11660],{"class":163},[36,70252,70253],{"class":109}," info",[36,70255,14003],{"class":163},[36,70257,54828],{"class":98},[36,70259,54831],{"class":55},[36,70261,621],{"class":98},[36,70263,70264],{"class":59},"'.info'",[36,70266,627],{"class":98},[36,70268,70269,70272,70274,70276,70279,70281,70283,70285,70287],{"class":38,"line":17208},[36,70270,70271],{"class":98},"    info.",[36,70273,58245],{"class":55},[36,70275,621],{"class":98},[36,70277,70278],{"class":59},"'submit'",[36,70280,12874],{"class":98},[36,70282,54881],{"class":163},[36,70284,2130],{"class":98},[36,70286,170],{"class":5667},[36,70288,12881],{"class":98},[36,70290,70291],{"class":38,"line":17222},[36,70292,70293],{"class":42},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[36,70295,70296,70299,70302],{"class":38,"line":17235},[36,70297,70298],{"class":98},"      e.",[36,70300,70301],{"class":55},"preventDefault",[36,70303,2435],{"class":98},[36,70305,70306],{"class":38,"line":17240},[36,70307,60444],{"class":42},[36,70309,70310],{"class":38,"line":17254},[36,70311,247],{"emptyLinePlaceholder":246},[36,70313,70314],{"class":38,"line":17259},[36,70315,70316],{"class":42},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[36,70318,70319],{"class":38,"line":17265},[36,70320,70321],{"class":42},"      \u002F\u002F 先遍历循环\n",[36,70323,70324,70326,70328,70330,70332,70334,70336,70338,70340,70343,70345,70347,70349],{"class":38,"line":17270},[36,70325,52716],{"class":163},[36,70327,2130],{"class":98},[36,70329,52279],{"class":163},[36,70331,9879],{"class":98},[36,70333,176],{"class":163},[36,70335,4544],{"class":109},[36,70337,9886],{"class":98},[36,70339,179],{"class":163},[36,70341,70342],{"class":98}," items.",[36,70344,52400],{"class":109},[36,70346,3665],{"class":98},[36,70348,2751],{"class":163},[36,70350,12881],{"class":98},[36,70352,70353,70355,70358,70360,70363],{"class":38,"line":17284},[36,70354,2955],{"class":163},[36,70356,70357],{"class":98}," (items[i].value ",[36,70359,54918],{"class":163},[36,70361,70362],{"class":59}," ''",[36,70364,12881],{"class":98},[36,70366,70367,70370,70373,70375,70378],{"class":38,"line":17289},[36,70368,70369],{"class":163},"          return",[36,70371,70372],{"class":55}," alert",[36,70374,621],{"class":98},[36,70376,70377],{"class":59},"'输入内容不能为空'",[36,70379,627],{"class":98},[36,70381,70382],{"class":38,"line":17294},[36,70383,2987],{"class":98},[36,70385,70386],{"class":38,"line":17308},[36,70387,52830],{"class":98},[36,70389,70390],{"class":38,"line":17320},[36,70391,247],{"emptyLinePlaceholder":246},[36,70393,70394],{"class":38,"line":17325},[36,70395,70396],{"class":42},"      \u002F\u002F 创建新的对象\n",[36,70398,70399,70401,70404,70406],{"class":38,"line":17338},[36,70400,58660],{"class":163},[36,70402,70403],{"class":109}," obj",[36,70405,14003],{"class":163},[36,70407,16011],{"class":98},[36,70409,70410,70413,70415,70417,70419],{"class":38,"line":17343},[36,70411,70412],{"class":98},"        stuID: arr.",[36,70414,52400],{"class":109},[36,70416,45999],{"class":163},[36,70418,25555],{"class":109},[36,70420,31899],{"class":98},[36,70422,70423],{"class":38,"line":17348},[36,70424,70425],{"class":98},"        uname: uname.value,\n",[36,70427,70428],{"class":38,"line":17353},[36,70429,70430],{"class":98},"        age: age.value,\n",[36,70432,70433],{"class":38,"line":17366},[36,70434,70435],{"class":98},"        gender: gender.value,\n",[36,70437,70438],{"class":38,"line":17371},[36,70439,70440],{"class":98},"        salary: salary.value,\n",[36,70442,70443],{"class":38,"line":33066},[36,70444,70445],{"class":98},"        city: city.value\n",[36,70447,70448],{"class":38,"line":33072},[36,70449,52830],{"class":98},[36,70451,70452],{"class":38,"line":33078},[36,70453,70454],{"class":42},"      \u002F\u002F console.log(obj);\n",[36,70456,70457],{"class":38,"line":33084},[36,70458,70459],{"class":42},"      \u002F\u002F 追加到数组里面\n",[36,70461,70462,70464,70466],{"class":38,"line":33090},[36,70463,58439],{"class":98},[36,70465,52316],{"class":55},[36,70467,70468],{"class":98},"(obj)\n",[36,70470,70471],{"class":38,"line":33101},[36,70472,70473],{"class":42},"      \u002F\u002F console.log(arr);\n",[36,70475,70476],{"class":38,"line":33107},[36,70477,70478],{"class":42},"      \u002F\u002F 清空表单  reset重置表单\n",[36,70480,70481,70484,70486,70489],{"class":38,"line":33127},[36,70482,70483],{"class":109},"      this",[36,70485,1172],{"class":98},[36,70487,70488],{"class":55},"reset",[36,70490,2435],{"class":98},[36,70492,70493],{"class":38,"line":33133},[36,70494,70495],{"class":42},"      \u002F\u002F 调用渲染函数\n",[36,70497,70498,70501],{"class":38,"line":33144},[36,70499,70500],{"class":55},"      render",[36,70502,2435],{"class":98},[36,70504,70505],{"class":38,"line":33150},[36,70506,33894],{"class":98},[36,70508,70509],{"class":38,"line":33156},[36,70510,70511],{"class":42},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[36,70513,70514,70517,70520],{"class":38,"line":33162},[36,70515,70516],{"class":163},"    function",[36,70518,70519],{"class":55}," render",[36,70521,11292],{"class":98},[36,70523,70524],{"class":38,"line":33168},[36,70525,70526],{"class":42},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[36,70528,70529,70532,70534],{"class":38,"line":33174},[36,70530,70531],{"class":98},"      tbody.innerHTML ",[36,70533,176],{"class":163},[36,70535,70536],{"class":59}," ''\n",[36,70538,70539],{"class":38,"line":33180},[36,70540,70541],{"class":42},"      \u002F\u002F 遍历数组\n",[36,70543,70544,70546,70548,70550,70552,70554,70556,70558,70560,70562,70564,70566,70568],{"class":38,"line":33186},[36,70545,52716],{"class":163},[36,70547,2130],{"class":98},[36,70549,52279],{"class":163},[36,70551,9879],{"class":98},[36,70553,176],{"class":163},[36,70555,4544],{"class":109},[36,70557,9886],{"class":98},[36,70559,179],{"class":163},[36,70561,52397],{"class":98},[36,70563,52400],{"class":109},[36,70565,3665],{"class":98},[36,70567,2751],{"class":163},[36,70569,12881],{"class":98},[36,70571,70572,70574,70577,70579,70581,70584,70586,70589],{"class":38,"line":33206},[36,70573,61702],{"class":163},[36,70575,70576],{"class":109}," tr",[36,70578,14003],{"class":163},[36,70580,54828],{"class":98},[36,70582,70583],{"class":55},"createElement",[36,70585,621],{"class":98},[36,70587,70588],{"class":59},"'tr'",[36,70590,627],{"class":98},[36,70592,70593,70596,70598],{"class":38,"line":33212},[36,70594,70595],{"class":98},"        tr.innerHTML ",[36,70597,176],{"class":163},[36,70599,70600],{"class":59}," `\n",[36,70602,70603,70606,70608,70610,70612,70615,70618],{"class":38,"line":33228},[36,70604,70605],{"class":59},"        \u003Ctd>${",[36,70607,4331],{"class":98},[36,70609,1503],{"class":59},[36,70611,1055],{"class":98},[36,70613,70614],{"class":59},"].",[36,70616,70617],{"class":98},"stuID",[36,70619,70620],{"class":59},"}\u003C\u002Ftd>\n",[36,70622,70623,70626,70628,70630,70632,70634,70637],{"class":38,"line":33234},[36,70624,70625],{"class":59},"          \u003Ctd>${",[36,70627,4331],{"class":98},[36,70629,1503],{"class":59},[36,70631,1055],{"class":98},[36,70633,70614],{"class":59},[36,70635,70636],{"class":98},"uname",[36,70638,70620],{"class":59},[36,70640,70641,70643,70645,70647,70649,70651,70654],{"class":38,"line":33248},[36,70642,70625],{"class":59},[36,70644,4331],{"class":98},[36,70646,1503],{"class":59},[36,70648,1055],{"class":98},[36,70650,70614],{"class":59},[36,70652,70653],{"class":98},"age",[36,70655,70620],{"class":59},[36,70657,70658,70660,70662,70664,70666,70668,70671],{"class":38,"line":33254},[36,70659,70625],{"class":59},[36,70661,4331],{"class":98},[36,70663,1503],{"class":59},[36,70665,1055],{"class":98},[36,70667,70614],{"class":59},[36,70669,70670],{"class":98},"gender",[36,70672,70620],{"class":59},[36,70674,70675,70677,70679,70681,70683,70685,70688],{"class":38,"line":33269},[36,70676,70625],{"class":59},[36,70678,4331],{"class":98},[36,70680,1503],{"class":59},[36,70682,1055],{"class":98},[36,70684,70614],{"class":59},[36,70686,70687],{"class":98},"salary",[36,70689,70620],{"class":59},[36,70691,70692,70694,70696,70698,70700,70702,70705],{"class":38,"line":33275},[36,70693,70625],{"class":59},[36,70695,4331],{"class":98},[36,70697,1503],{"class":59},[36,70699,1055],{"class":98},[36,70701,70614],{"class":59},[36,70703,70704],{"class":98},"city",[36,70706,70620],{"class":59},[36,70708,70709],{"class":38,"line":33284},[36,70710,70025],{"class":59},[36,70712,70713,70716,70718],{"class":38,"line":33290},[36,70714,70715],{"class":59},"            \u003Ca href=\"javascript:\" data-id=${",[36,70717,1055],{"class":98},[36,70719,70720],{"class":59},"}>删除\u003C\u002Fa>\n",[36,70722,70723],{"class":38,"line":33299},[36,70724,70725],{"class":59},"          \u003C\u002Ftd> \n",[36,70727,70728],{"class":38,"line":33305},[36,70729,70730],{"class":59},"          `\n",[36,70732,70733],{"class":38,"line":33311},[36,70734,70735],{"class":42},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[36,70737,70738,70741,70744],{"class":38,"line":33320},[36,70739,70740],{"class":98},"        tbody.",[36,70742,70743],{"class":55},"appendChild",[36,70745,70746],{"class":98},"(tr)\n",[36,70748,70749],{"class":38,"line":33326},[36,70750,52830],{"class":98},[36,70752,70753],{"class":38,"line":33337},[36,70754,2646],{"class":98},[36,70756,70757],{"class":38,"line":33343},[36,70758,247],{"emptyLinePlaceholder":246},[36,70760,70761],{"class":38,"line":33362},[36,70762,70763],{"class":42},"    \u002F\u002F 3.删除委托\n",[36,70765,70766],{"class":38,"line":33368},[36,70767,70768],{"class":42},"    \u002F\u002F 3.1 事件委托 tbody\n",[36,70770,70771,70774,70776,70778,70780,70782,70784,70786,70788],{"class":38,"line":33379},[36,70772,70773],{"class":98},"    tbody.",[36,70775,58245],{"class":55},[36,70777,621],{"class":98},[36,70779,58250],{"class":59},[36,70781,12874],{"class":98},[36,70783,54881],{"class":163},[36,70785,2130],{"class":98},[36,70787,170],{"class":5667},[36,70789,12881],{"class":98},[36,70791,70792,70794,70796,70798,70800],{"class":38,"line":33385},[36,70793,54912],{"class":163},[36,70795,67466],{"class":98},[36,70797,54918],{"class":163},[36,70799,68688],{"class":59},[36,70801,12881],{"class":98},[36,70803,70804],{"class":38,"line":33405},[36,70805,70806],{"class":42},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[36,70808,70809],{"class":38,"line":33421},[36,70810,70811],{"class":42},"        \u002F\u002F console.log(e.target.dataset.id);\n",[36,70813,70814],{"class":38,"line":33427},[36,70815,70816],{"class":42},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[36,70818,70819,70822,70824,70827,70829],{"class":38,"line":33441},[36,70820,70821],{"class":98},"        arr.",[36,70823,58442],{"class":55},[36,70825,70826],{"class":98},"(e.target.dataset.id, ",[36,70828,833],{"class":109},[36,70830,627],{"class":98},[36,70832,70833],{"class":38,"line":33447},[36,70834,70835],{"class":42},"        \u002F\u002F 重新渲染一次\n",[36,70837,70838,70841],{"class":38,"line":33453},[36,70839,70840],{"class":55},"        render",[36,70842,2435],{"class":98},[36,70844,70845],{"class":38,"line":33464},[36,70846,52830],{"class":98},[36,70848,70849],{"class":38,"line":33470},[36,70850,33894],{"class":98},[36,70852,70853,70855,70857],{"class":38,"line":33476},[36,70854,52849],{"class":98},[36,70856,52245],{"class":51733},[36,70858,188],{"class":98},[36,70860,70861],{"class":38,"line":33486},[36,70862,247],{"emptyLinePlaceholder":246},[36,70864,70865,70867,70869],{"class":38,"line":33492},[36,70866,52217],{"class":98},[36,70868,52232],{"class":51733},[36,70870,188],{"class":98},[36,70872,70873],{"class":38,"line":33503},[36,70874,247],{"emptyLinePlaceholder":246},[36,70876,70877,70879,70881],{"class":38,"line":33509},[36,70878,52217],{"class":98},[36,70880,51068],{"class":51733},[36,70882,188],{"class":98},[14,70884,70885],{},"样式：",[26,70887,70891],{"className":70888,"code":70889,"language":70890,"meta":31,"style":31},"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",[33,70892,70893,70898,70908,70917,70921,70925,70930,70940,70945,70949,70954,70964,70969,70978,70982,70986,70991,70996,71006,71016,71021,71025,71030,71039,71049,71054,71064,71074,71078,71083,71091,71095,71100,71105,71110,71118,71127,71131,71136,71145,71149,71154,71163,71167,71172,71181,71190,71198,71202,71207,71216,71226,71235,71245,71251,71260,71270,71280,71284,71289,71298,71306,71316,71324,71333,71342,71352,71360,71364,71369,71378],{"__ignoreMap":31},[36,70894,70895],{"class":38,"line":39},[36,70896,70897],{"class":98},"* {\n",[36,70899,70900,70903,70905],{"class":38,"line":46},[36,70901,70902],{"class":51733},"  margin",[36,70904,51869],{"class":98},[36,70906,70907],{"class":59},"0;\n",[36,70909,70910,70913,70915],{"class":38,"line":52},[36,70911,70912],{"class":59},"  padding",[36,70914,51869],{"class":98},[36,70916,70907],{"class":59},[36,70918,70919],{"class":38,"line":66},[36,70920,2044],{"class":98},[36,70922,70923],{"class":38,"line":72},[36,70924,247],{"emptyLinePlaceholder":246},[36,70926,70927],{"class":38,"line":82},[36,70928,70929],{"class":59},"a {\n",[36,70931,70932,70935,70937],{"class":38,"line":88},[36,70933,70934],{"class":51733},"  text-decoration",[36,70936,51869],{"class":98},[36,70938,70939],{"class":59},"none;\n",[36,70941,70942],{"class":38,"line":113},[36,70943,70944],{"class":59},"  color:#721c24;\n",[36,70946,70947],{"class":38,"line":119},[36,70948,2044],{"class":98},[36,70950,70951],{"class":38,"line":131},[36,70952,70953],{"class":59},"h1 {\n",[36,70955,70956,70959,70961],{"class":38,"line":137},[36,70957,70958],{"class":51733},"  text-align",[36,70960,51869],{"class":98},[36,70962,70963],{"class":59},"center;\n",[36,70965,70966],{"class":38,"line":147},[36,70967,70968],{"class":59},"  color:#333;\n",[36,70970,70971,70973,70975],{"class":38,"line":153},[36,70972,70902],{"class":51733},[36,70974,51869],{"class":98},[36,70976,70977],{"class":59},"20px 0;\n",[36,70979,70980],{"class":38,"line":191},[36,70981,3125],{"class":98},[36,70983,70984],{"class":38,"line":197},[36,70985,2044],{"class":98},[36,70987,70988],{"class":38,"line":217},[36,70989,70990],{"class":59},"table {\n",[36,70992,70993],{"class":38,"line":223},[36,70994,70995],{"class":59},"  margin:0 auto;\n",[36,70997,70998,71001,71003],{"class":38,"line":243},[36,70999,71000],{"class":51733},"  width",[36,71002,51869],{"class":98},[36,71004,71005],{"class":59},"800px;\n",[36,71007,71008,71011,71013],{"class":38,"line":250},[36,71009,71010],{"class":51733},"  border-collapse",[36,71012,51869],{"class":98},[36,71014,71015],{"class":59},"collapse;\n",[36,71017,71018],{"class":38,"line":256},[36,71019,71020],{"class":59},"  color:#004085;\n",[36,71022,71023],{"class":38,"line":273},[36,71024,2044],{"class":98},[36,71026,71027],{"class":38,"line":278},[36,71028,71029],{"class":59},"th {\n",[36,71031,71032,71034,71036],{"class":38,"line":284},[36,71033,70912],{"class":51733},[36,71035,51869],{"class":98},[36,71037,71038],{"class":59},"10px;\n",[36,71040,71041,71044,71046],{"class":38,"line":315},[36,71042,71043],{"class":51733},"  background",[36,71045,51869],{"class":98},[36,71047,71048],{"class":42},"#cfe5ff;\n",[36,71050,71051],{"class":38,"line":320},[36,71052,71053],{"class":98},"  \n",[36,71055,71056,71059,71061],{"class":38,"line":326},[36,71057,71058],{"class":51733},"  font-size",[36,71060,51869],{"class":98},[36,71062,71063],{"class":59},"20px;\n",[36,71065,71066,71069,71071],{"class":38,"line":343},[36,71067,71068],{"class":51733},"  font-weight",[36,71070,51869],{"class":98},[36,71072,71073],{"class":59},"400;\n",[36,71075,71076],{"class":38,"line":348},[36,71077,2044],{"class":98},[36,71079,71080],{"class":38,"line":354},[36,71081,71082],{"class":59},"td,th {\n",[36,71084,71085,71088],{"class":38,"line":370},[36,71086,71087],{"class":59},"  border:1px solid",[36,71089,71090],{"class":42}," #b8daff;\n",[36,71092,71093],{"class":38,"line":375},[36,71094,2044],{"class":98},[36,71096,71097],{"class":38,"line":381},[36,71098,71099],{"class":59},"td {\n",[36,71101,71102],{"class":38,"line":399},[36,71103,71104],{"class":59},"  padding:10px;\n",[36,71106,71107],{"class":38,"line":404},[36,71108,71109],{"class":59},"  color:#666;\n",[36,71111,71112,71114,71116],{"class":38,"line":410},[36,71113,70958],{"class":51733},[36,71115,51869],{"class":98},[36,71117,70963],{"class":59},[36,71119,71120,71122,71124],{"class":38,"line":423},[36,71121,71058],{"class":51733},[36,71123,51869],{"class":98},[36,71125,71126],{"class":59},"16px;\n",[36,71128,71129],{"class":38,"line":436},[36,71130,2044],{"class":98},[36,71132,71133],{"class":38,"line":441},[36,71134,71135],{"class":59},"tbody tr {\n",[36,71137,71138,71140,71142],{"class":38,"line":447},[36,71139,71043],{"class":51733},[36,71141,51869],{"class":98},[36,71143,71144],{"class":42},"#fff;\n",[36,71146,71147],{"class":38,"line":465},[36,71148,2044],{"class":98},[36,71150,71151],{"class":38,"line":470},[36,71152,71153],{"class":59},"tbody tr:hover {\n",[36,71155,71156,71158,71160],{"class":38,"line":476},[36,71157,71043],{"class":51733},[36,71159,51869],{"class":98},[36,71161,71162],{"class":42},"#e1ecf8;\n",[36,71164,71165],{"class":38,"line":496},[36,71166,2044],{"class":98},[36,71168,71169],{"class":38,"line":501},[36,71170,71171],{"class":59},".info {\n",[36,71173,71174,71176,71178],{"class":38,"line":507},[36,71175,71000],{"class":51733},[36,71177,51869],{"class":98},[36,71179,71180],{"class":59},"900px;\n",[36,71182,71183,71185,71187],{"class":38,"line":517},[36,71184,70902],{"class":51733},[36,71186,51869],{"class":98},[36,71188,71189],{"class":59},"50px auto;\n",[36,71191,71192,71194,71196],{"class":38,"line":522},[36,71193,70958],{"class":51733},[36,71195,51869],{"class":98},[36,71197,70963],{"class":59},[36,71199,71200],{"class":38,"line":528},[36,71201,2044],{"class":98},[36,71203,71204],{"class":38,"line":10203},[36,71205,71206],{"class":59},".info  input, .info select {\n",[36,71208,71209,71211,71213],{"class":38,"line":10227},[36,71210,71000],{"class":51733},[36,71212,51869],{"class":98},[36,71214,71215],{"class":59},"80px;\n",[36,71217,71218,71221,71223],{"class":38,"line":10232},[36,71219,71220],{"class":51733},"  height",[36,71222,51869],{"class":98},[36,71224,71225],{"class":59},"27px;\n",[36,71227,71228,71231,71233],{"class":38,"line":10237},[36,71229,71230],{"class":51733},"  outline",[36,71232,51869],{"class":98},[36,71234,70939],{"class":59},[36,71236,71237,71240,71242],{"class":38,"line":10242},[36,71238,71239],{"class":51733},"  border-radius",[36,71241,51869],{"class":98},[36,71243,71244],{"class":59},"5px;\n",[36,71246,71247,71249],{"class":38,"line":10251},[36,71248,71087],{"class":59},[36,71250,71090],{"class":42},[36,71252,71253,71256,71258],{"class":38,"line":10256},[36,71254,71255],{"class":51733},"  padding-left",[36,71257,51869],{"class":98},[36,71259,71244],{"class":59},[36,71261,71262,71265,71267],{"class":38,"line":10262},[36,71263,71264],{"class":51733},"  box-sizing",[36,71266,51869],{"class":98},[36,71268,71269],{"class":59},"border-box;\n",[36,71271,71272,71275,71277],{"class":38,"line":10283},[36,71273,71274],{"class":51733},"  margin-right",[36,71276,51869],{"class":98},[36,71278,71279],{"class":59},"15px;\n",[36,71281,71282],{"class":38,"line":10289},[36,71283,2044],{"class":98},[36,71285,71286],{"class":38,"line":10303},[36,71287,71288],{"class":59},".info button {\n",[36,71290,71291,71293,71295],{"class":38,"line":10309},[36,71292,71000],{"class":51733},[36,71294,51869],{"class":98},[36,71296,71297],{"class":59},"60px;\n",[36,71299,71300,71302,71304],{"class":38,"line":10336},[36,71301,71220],{"class":51733},[36,71303,51869],{"class":98},[36,71305,71225],{"class":59},[36,71307,71308,71311,71313],{"class":38,"line":10345},[36,71309,71310],{"class":51733},"  background-color",[36,71312,51869],{"class":98},[36,71314,71315],{"class":42},"#004085;\n",[36,71317,71318,71320,71322],{"class":38,"line":10351},[36,71319,71230],{"class":51733},[36,71321,51869],{"class":98},[36,71323,70939],{"class":59},[36,71325,71326,71329,71331],{"class":38,"line":10359},[36,71327,71328],{"class":51733},"  border",[36,71330,51869],{"class":98},[36,71332,70907],{"class":59},[36,71334,71335,71338,71340],{"class":38,"line":10364},[36,71336,71337],{"class":51733},"  color",[36,71339,51869],{"class":98},[36,71341,71144],{"class":42},[36,71343,71344,71347,71349],{"class":38,"line":17043},[36,71345,71346],{"class":51733},"  cursor",[36,71348,51869],{"class":98},[36,71350,71351],{"class":59},"pointer;\n",[36,71353,71354,71356,71358],{"class":38,"line":17049},[36,71355,71239],{"class":51733},[36,71357,51869],{"class":98},[36,71359,71244],{"class":59},[36,71361,71362],{"class":38,"line":17072},[36,71363,2044],{"class":98},[36,71365,71366],{"class":38,"line":17078},[36,71367,71368],{"class":59},".info .age {\n",[36,71370,71371,71373,71375],{"class":38,"line":17101},[36,71372,71000],{"class":51733},[36,71374,51869],{"class":98},[36,71376,71377],{"class":59},"50px;\n",[36,71379,71380],{"class":38,"line":17115},[36,71381,2044],{"class":98},[14,71383,71384],{},"思路：",[14,71386,71387],{},[1941,71388],{"alt":31,"src":71389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,71391,71392],{},[1941,71393],{"alt":31,"src":71394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,71396,71397],{},[1941,71398],{"alt":31,"src":71399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[588,71401,71403],{"id":71402},"_3315-重绘回流","3.3.15 重绘回流",[14,71405,71406],{},[1941,71407],{"alt":31,"src":71408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,71410,71411],{},[1941,71412],{"alt":31,"src":71413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,71415,71416],{},[1941,71417],{"alt":31,"src":71418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[559,71420,71422],{"id":71421},"_34-bom","3.4 BOM",[14,71424,71425],{},[1941,71426],{"alt":31,"src":71427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,71429,71430],{},"平时写的document省略了window而已，实际上是window.document",[14,71432,71433],{},"函数也是这样，调用的时候实际为window.fn()",[14,71435,71436],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,71438,71439],{},"window大部分情况下可以省略",[588,71441,71443],{"id":71442},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,71445,71446],{},"只执行一次",[14,71448,71449],{},[1941,71450],{"alt":31,"src":71451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,71453,71454],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,71456,71457],{},[1941,71458],{"alt":31,"src":71459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[588,71461,71463],{"id":71462},"_342-js执行机制","3.4.2 JS执行机制",[14,71465,71466],{},[1941,71467],{"alt":31,"src":71468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,71470,71471],{},"两个的结果都是1111 3333 2222",[14,71473,71474],{},[1941,71475],{"alt":31,"src":71476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,71478,71479],{},[1941,71480],{"alt":31,"src":71481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,71483,71484],{},[1941,71485],{"alt":31,"src":71486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,71488,71489],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,71491,71492],{},"工作流程：",[14,71494,71495],{},[1941,71496],{"alt":31,"src":71497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,71499,71500],{},[1941,71501],{"alt":31,"src":71502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,71504,71505],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,71507,71508],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[588,71510,71512],{"id":71511},"_343-location对象","3.4.3 location对象",[14,71514,71515],{},"location对象属于window这个全局对象下的，可以 省略window",[14,71517,71518],{},[1941,71519],{"alt":31,"src":71520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,71522,71523],{},"href可以跳转页面",[571,71525,71526],{},[574,71527,71528],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,71530,71531],{},"search得到提交信息之后网站后边的地址",[14,71533,71534],{},[1941,71535],{"alt":31,"src":71536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,71538,71539],{},[1941,71540],{"alt":31,"src":71541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[571,71543,71544],{"start":46},[574,71545,71546],{},"hash:这个获取单页面应用#后边的地址",[14,71548,71549],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,71551,71552],{},[1941,71553],{"alt":31,"src":71554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[26,71556,71558],{"className":53499,"code":71557,"language":53501,"meta":31,"style":31},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[33,71559,71560,71580,71600],{"__ignoreMap":31},[36,71561,71562,71564,71566,71568,71570,71573,71576,71578],{"class":38,"line":39},[36,71563,52576],{"class":98},[36,71565,20],{"class":51733},[36,71567,61489],{"class":55},[36,71569,176],{"class":98},[36,71571,71572],{"class":59},"\"#\u002Fmy\"",[36,71574,71575],{"class":98},">我的\u003C\u002F",[36,71577,20],{"class":51733},[36,71579,188],{"class":98},[36,71581,71582,71584,71586,71588,71590,71593,71596,71598],{"class":38,"line":46},[36,71583,52576],{"class":98},[36,71585,20],{"class":51733},[36,71587,61489],{"class":55},[36,71589,176],{"class":98},[36,71591,71592],{"class":59},"\"#\u002Ffriend\"",[36,71594,71595],{"class":98},">关注\u003C\u002F",[36,71597,20],{"class":51733},[36,71599,188],{"class":98},[36,71601,71602,71604,71606,71608,71610,71613,71616,71618],{"class":38,"line":52},[36,71603,52576],{"class":98},[36,71605,20],{"class":51733},[36,71607,61489],{"class":55},[36,71609,176],{"class":98},[36,71611,71612],{"class":59},"\"#\u002Fdownload\"",[36,71614,71615],{"class":98},">下载\u003C\u002F",[36,71617,20],{"class":51733},[36,71619,188],{"class":98},[14,71621,71622],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[571,71624,71625],{"start":52},[574,71626,71627,71628,71630,71631,71633],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[54148,71629],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[54148,71632],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[588,71635,71637],{"id":71636},"_345-navigator对象","3.4.5 navigator对象",[14,71639,71640],{},[1941,71641],{"alt":31,"src":71642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[26,71644,71648],{"className":71645,"code":71646,"language":71647,"meta":31,"style":31},"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",[33,71649,71650,71655,71666,71678,71683,71734,71775,71780,71793,71805,71810],{"__ignoreMap":31},[36,71651,71652],{"class":38,"line":39},[36,71653,71654],{"class":42},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[36,71656,71657,71659,71661,71663],{"class":38,"line":46},[36,71658,842],{"class":163},[36,71660,621],{"class":98},[36,71662,54881],{"class":163},[36,71664,71665],{"class":98}," () { \n",[36,71667,71668,71670,71673,71675],{"class":38,"line":52},[36,71669,7243],{"class":163},[36,71671,71672],{"class":109}," userAgent",[36,71674,14003],{"class":163},[36,71676,71677],{"class":98}," navigator.userAgent \n",[36,71679,71680],{"class":38,"line":66},[36,71681,71682],{"class":42},"\u002F\u002F 验证是否为Android或iPhone \n",[36,71684,71685,71687,71690,71692,71695,71698,71700,71702,71705,71707,71710,71714,71716,71718,71720,71723,71725,71727,71729,71731],{"class":38,"line":72},[36,71686,7243],{"class":163},[36,71688,71689],{"class":109}," android",[36,71691,14003],{"class":163},[36,71693,71694],{"class":98}," userAgent.",[36,71696,71697],{"class":55},"match",[36,71699,621],{"class":98},[36,71701,1198],{"class":59},[36,71703,71704],{"class":48410},"(Android);",[36,71706,1597],{"class":163},[36,71708,71709],{"class":109},"[\\s",[36,71711,71713],{"class":71712},"snhLl","\\\u002F",[36,71715,1552],{"class":109},[36,71717,1095],{"class":163},[36,71719,621],{"class":48410},[36,71721,71722],{"class":109},"[\\d.]",[36,71724,1095],{"class":163},[36,71726,1043],{"class":48410},[36,71728,1597],{"class":163},[36,71730,1198],{"class":59},[36,71732,71733],{"class":98},") \n",[36,71735,71736,71738,71741,71743,71745,71747,71749,71751,71754,71757,71760,71762,71764,71767,71769,71771,71773],{"class":38,"line":82},[36,71737,7243],{"class":163},[36,71739,71740],{"class":109}," iphone",[36,71742,14003],{"class":163},[36,71744,71694],{"class":98},[36,71746,71697],{"class":55},[36,71748,621],{"class":98},[36,71750,1198],{"class":59},[36,71752,71753],{"class":48410},"(iPhone",[36,71755,71756],{"class":109},"\\s",[36,71758,71759],{"class":48410},"OS)",[36,71761,71756],{"class":109},[36,71763,621],{"class":48410},[36,71765,71766],{"class":109},"[\\d_]",[36,71768,1095],{"class":163},[36,71770,1043],{"class":48410},[36,71772,1198],{"class":59},[36,71774,71733],{"class":98},[36,71776,71777],{"class":38,"line":88},[36,71778,71779],{"class":42},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[36,71781,71782,71784,71787,71790],{"class":38,"line":113},[36,71783,2010],{"class":163},[36,71785,71786],{"class":98}," (android ",[36,71788,71789],{"class":163},"||",[36,71791,71792],{"class":98}," iphone) { \n",[36,71794,71795,71798,71800,71803],{"class":38,"line":119},[36,71796,71797],{"class":98},"location.href ",[36,71799,176],{"class":163},[36,71801,71802],{"class":59}," 'http:\u002F\u002Fm.itcast.cn'",[36,71804,3125],{"class":98},[36,71806,71807],{"class":38,"line":131},[36,71808,71809],{"class":98},"} \n",[36,71811,71812],{"class":38,"line":137},[36,71813,71814],{"class":98},"})()\n",[588,71816,71818],{"id":71817},"_346-histroy对象","3.4.6 histroy对象",[14,71820,71821],{},[1941,71822],{"alt":31,"src":71823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,71825,71826],{},"浏览器地址的前进与后退!!!",[14,71828,71829],{},"history.back() 等效于 history.go(-1)",[14,71831,71832],{},"history.forward() 等效于 history.go(1)",[559,71834,71836],{"id":71835},"_35-本地存储","3.5 本地存储",[571,71838,71839,71842,71845],{},[574,71840,71841],{},"数据存储在用户浏览器中",[574,71843,71844],{},"设置、读取方便、甚至页面刷新不丢失数据",[574,71846,71847],{},"容量较大，sessionStorage和localStorage约 5M 左右",[588,71849,71851],{"id":71850},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,71853,71854],{},"只能存储字符串",[14,71856,71857],{},[1941,71858],{"alt":31,"src":71859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,71861,71862],{},[1941,71863],{"alt":31,"src":71864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,71866,71867],{},"键值对要加引号,不然就会当变量来看了",[14,71869,71870],{},"localStorage.setItem('uname', 'pink')",[14,71872,71873],{},"刷新之后信息不再丢失",[14,71875,71876],{},"操作key,value会跟着变",[14,71878,71879],{},"删除只删除键就可以,即名字",[14,71881,71870],{},[14,71883,71884],{},"改:",[14,71886,71887],{},"localStorage.setItem('uname','red')",[14,71889,71890],{},"有这个键就是改,没有这个键就是改",[14,71892,71893],{},[1941,71894],{"alt":31,"src":71895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,71897,71898],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,71900,71901],{},[1941,71902],{"alt":31,"src":71903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,71905,71906],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[588,71908,71910],{"id":71909},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,71912,71913],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,71915,71916],{},"特性:",[571,71918,71919,71922,71925,71928],{},[574,71920,71921],{},"生命周期为关闭浏览器窗口",[574,71923,71924],{},"在同一个窗口(页面)下数据可以共享",[574,71926,71927],{},"以键值对的形式存储使用",[574,71929,71930],{},"用法跟localStorage 基本相同",[588,71932,71934],{"id":71933},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,71936,71937],{},"本地只能存储字符串,无法直接存储复杂数据类型",[26,71939,71941],{"className":53499,"code":71940,"language":53501,"meta":31,"style":31},"\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",[33,71942,71943,71951,71956,71961,71966,71971,71975,71980,71985],{"__ignoreMap":31},[36,71944,71945,71947,71949],{"class":38,"line":39},[36,71946,179],{"class":98},[36,71948,52245],{"class":51733},[36,71950,188],{"class":98},[36,71952,71953],{"class":38,"line":46},[36,71954,71955],{"class":98},"    const obj = {\n",[36,71957,71958],{"class":38,"line":52},[36,71959,71960],{"class":98},"      uname: 'pink老师',\n",[36,71962,71963],{"class":38,"line":66},[36,71964,71965],{"class":98},"      age: 18,\n",[36,71967,71968],{"class":38,"line":72},[36,71969,71970],{"class":98},"      gender: '女'\n",[36,71972,71973],{"class":38,"line":82},[36,71974,2646],{"class":98},[36,71976,71977],{"class":38,"line":88},[36,71978,71979],{"class":98},"    \u002F\u002F 存储复杂数据类型\n",[36,71981,71982],{"class":38,"line":113},[36,71983,71984],{"class":98},"    localStorage.setItem('obj', obj)\n",[36,71986,71987,71989,71991],{"class":38,"line":119},[36,71988,52849],{"class":98},[36,71990,52245],{"class":51733},[36,71992,188],{"class":98},[14,71994,71995],{},[1941,71996],{"alt":31,"src":71997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,71999,72000],{},"如果获取一下数据:",[14,72002,72003],{},"log(localStorage.getItem('obj'))",[14,72005,72006],{},[1941,72007],{"alt":31,"src":72008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,72010,72011],{},"发现直接存对象是使用不了的!!!",[22437,72013,72015],{"id":72014},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,72017,72018],{},[1941,72019],{"alt":31,"src":72020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[26,72022,72024],{"className":51066,"code":72023,"language":51068,"meta":31,"style":31},"\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",[33,72025,72026,72034,72044,72054,72063,72071,72075,72079,72105,72124,72132,72136,72141,72146],{"__ignoreMap":31},[36,72027,72028,72030,72032],{"class":38,"line":39},[36,72029,179],{"class":98},[36,72031,52245],{"class":51733},[36,72033,188],{"class":98},[36,72035,72036,72038,72040,72042],{"class":38,"line":46},[36,72037,11660],{"class":163},[36,72039,70403],{"class":109},[36,72041,14003],{"class":163},[36,72043,16011],{"class":98},[36,72045,72046,72049,72052],{"class":38,"line":52},[36,72047,72048],{"class":98},"      uname: ",[36,72050,72051],{"class":59},"'pink老师'",[36,72053,31899],{"class":98},[36,72055,72056,72059,72061],{"class":38,"line":66},[36,72057,72058],{"class":98},"      age: ",[36,72060,1264],{"class":109},[36,72062,31899],{"class":98},[36,72064,72065,72068],{"class":38,"line":72},[36,72066,72067],{"class":98},"      gender: ",[36,72069,72070],{"class":59},"'女'\n",[36,72072,72073],{"class":38,"line":82},[36,72074,2646],{"class":98},[36,72076,72077],{"class":38,"line":88},[36,72078,71979],{"class":42},[36,72080,72081,72084,72087,72089,72092,72094,72097,72099,72102],{"class":38,"line":113},[36,72082,72083],{"class":98},"  localStorage.",[36,72085,72086],{"class":55},"setItem",[36,72088,621],{"class":98},[36,72090,72091],{"class":59},"'obj'",[36,72093,12874],{"class":98},[36,72095,72096],{"class":109},"JSON",[36,72098,1172],{"class":98},[36,72100,72101],{"class":55},"stringify",[36,72103,72104],{"class":98},"(obj))\n",[36,72106,72107,72110,72112,72115,72118,72120,72122],{"class":38,"line":119},[36,72108,72109],{"class":98},"  console.",[36,72111,58679],{"class":55},[36,72113,72114],{"class":98},"(localStorage.",[36,72116,72117],{"class":55},"getItem",[36,72119,621],{"class":98},[36,72121,72091],{"class":59},[36,72123,30930],{"class":98},[36,72125,72126,72128,72130],{"class":38,"line":131},[36,72127,52849],{"class":98},[36,72129,52245],{"class":51733},[36,72131,188],{"class":98},[36,72133,72134],{"class":38,"line":137},[36,72135,71053],{"class":98},[36,72137,72138],{"class":38,"line":147},[36,72139,72140],{"class":98},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[36,72142,72143],{"class":38,"line":153},[36,72144,72145],{"class":98},"  类型是字符串的\n",[36,72147,72148],{"class":38,"line":191},[36,72149,72150],{"class":98},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22437,72152,72154],{"id":72153},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,72156,72157],{},[1941,72158],{"alt":31,"src":72159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,72161,72162],{},[1941,72163],{"alt":31,"src":72164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[26,72166,72168],{"className":53499,"code":72167,"language":53501,"meta":31,"style":31},"  \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",[33,72169,72170,72178,72182,72186,72190,72194,72198,72203,72208,72213,72218,72223,72228,72233,72238],{"__ignoreMap":31},[36,72171,72172,72174,72176],{"class":38,"line":39},[36,72173,52576],{"class":98},[36,72175,52245],{"class":51733},[36,72177,188],{"class":98},[36,72179,72180],{"class":38,"line":46},[36,72181,71955],{"class":98},[36,72183,72184],{"class":38,"line":52},[36,72185,71960],{"class":98},[36,72187,72188],{"class":38,"line":66},[36,72189,71965],{"class":98},[36,72191,72192],{"class":38,"line":72},[36,72193,71970],{"class":98},[36,72195,72196],{"class":38,"line":82},[36,72197,2646],{"class":98},[36,72199,72200],{"class":38,"line":88},[36,72201,72202],{"class":98},"    \u002F\u002F 1.存储复杂数据类型\n",[36,72204,72205],{"class":38,"line":113},[36,72206,72207],{"class":98},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[36,72209,72210],{"class":38,"line":119},[36,72211,72212],{"class":98},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[36,72214,72215],{"class":38,"line":131},[36,72216,72217],{"class":98},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[36,72219,72220],{"class":38,"line":137},[36,72221,72222],{"class":98},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[36,72224,72225],{"class":38,"line":147},[36,72226,72227],{"class":98},"    \u002F\u002F 取\n",[36,72229,72230],{"class":38,"line":153},[36,72231,72232],{"class":98},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[36,72234,72235],{"class":38,"line":191},[36,72236,72237],{"class":98},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[36,72239,72240,72242,72244],{"class":38,"line":197},[36,72241,52849],{"class":98},[36,72243,52245],{"class":51733},[36,72245,188],{"class":98},[14,72247,72248],{},[1941,72249],{"alt":31,"src":72250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[588,72252,72254],{"id":72253},"_356-数组map方法","3.5.6 数组map方法",[14,72256,72257],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,72259,72260],{},[1941,72261],{"alt":31,"src":72262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,72264,72265],{},[1941,72266],{"alt":31,"src":72267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,72269,72270,72273],{},[765,72271,72272],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,72275,72276],{},"map有返回值，但是forEach没有返回值",[14,72278,72279],{},"map是个方法。用的时候要加 ()",[14,72281,72282],{},"map返回的是一个数组",[588,72284,72286],{"id":72285},"_357-数组中join方法","3.5.7 数组中join方法",[14,72288,72289],{},[1941,72290],{"alt":31,"src":72291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,72293,72294],{},"类似于python中拼接字符串一样！",[571,72296,72297,72300,72303],{},[574,72298,72299],{},"小括号为空则逗号分开",[574,72301,72302],{},"小括号为空字符串 ''，则元素之间没有分隔符",[574,72304,72305],{},"小括号用啥符号就用进行分割",[588,72307,72309],{"id":72308},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[571,72311,72312,72315,72318,72321,72324],{},[574,72313,72314],{},"记住本地时间获取快速方式：new Date().toDateString()",[574,72316,72317],{},"尽量减少DOM操作，用好map+join的渲染方式",[574,72319,72320],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[574,72322,72323],{},"return可以实现函数的结束",[574,72325,72326],{},"禁止跳转是 preventDefault() 不要忘记",[26,72328,72330],{"className":51066,"code":72329,"language":51068,"meta":31,"style":31},"\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",[33,72331,72332,72342,72356,72360,72368,72382,72402,72414,72422,72428,72438,72448,72452,72456,72462,72472,72484,72488,72492,72499,72511,72525,72535,72539,72543,72550,72557,72564,72576,72588,72598,72610,72614,72618,72625,72632,72644,72656,72666,72678,72708,72712,72716,72723,72735,72747,72771,72781,72791,72795,72799,72807,72818,72830,72842,72854,72871,72883,72895,72899,72903,72910,72922,72934,72946,72957,72975,72988,73000,73024,73035,73039,73043,73051,73061,73065,73069,73075,73087,73098,73108,73112,73116,73122,73144,73148,73152,73158,73164,73176,73186,73198,73228,73241,73258,73262,73266,73277,73299,73309,73313,73317,73330,73340,73352,73364,73376,73388,73398,73408,73418,73429,73442,73446,73454,73462,73466,73474,73487,73507,73540,73573,73606,73632,73650,73668,73676,73702,73720,73738,73756,73774,73792,73800,73808,73826,73834,73863,73871,73879,73887,73900,73912,73924,73936,73948,73960,73973,73985,73993,74001,74009,74014,74019,74023,74027,74031,74035,74039,74043,74048,74053,74058,74063,74071,74079,74087,74092,74097,74102,74107,74112,74117,74122,74127,74132,74137,74142,74147,74152,74157,74161,74166,74171,74181,74190,74194,74199,74208,74224,74266,74306,74345,74410,74418,74422,74427,74445,74453,74458,74463,74493,74499,74504,74517,74529,74541,74553,74565,74577,74589,74593,74603,74607,74612,74617,74621,74630,74634,74639,74644,74663,74668,74688,74692,74697,74701,74706,74724,74742,74760,74779,74798,74817,74822,74828,74849,74855,74864,74870,74876,74882,74909,74922,74927,74937,74943,74949,74955,74961,74966,74972,74978,74984,74990,75023,75028,75033,75038,75043,75049,75055,75061,75072,75077,75083,75090,75104,75110,75134,75139,75144,75150,75156,75177,75183,75196,75202,75208,75214,75220,75225,75231,75237,75243,75261,75275,75281,75289,75295,75317,75322,75327,75332,75337,75342,75351,75360,75365],{"__ignoreMap":31},[36,72333,72334,72336,72338,72340],{"class":38,"line":39},[36,72335,51730],{"class":98},[36,72337,51734],{"class":51733},[36,72339,51737],{"class":55},[36,72341,188],{"class":98},[36,72343,72344,72346,72348,72350,72352,72354],{"class":38,"line":46},[36,72345,179],{"class":98},[36,72347,51068],{"class":51733},[36,72349,51748],{"class":55},[36,72351,176],{"class":98},[36,72353,51753],{"class":59},[36,72355,188],{"class":98},[36,72357,72358],{"class":38,"line":52},[36,72359,247],{"emptyLinePlaceholder":246},[36,72361,72362,72364,72366],{"class":38,"line":66},[36,72363,179],{"class":98},[36,72365,51766],{"class":51733},[36,72367,188],{"class":98},[36,72369,72370,72372,72374,72376,72378,72380],{"class":38,"line":72},[36,72371,52576],{"class":98},[36,72373,51776],{"class":51733},[36,72375,51779],{"class":55},[36,72377,176],{"class":98},[36,72379,51784],{"class":59},[36,72381,188],{"class":98},[36,72383,72384,72386,72388,72390,72392,72394,72396,72398,72400],{"class":38,"line":82},[36,72385,52576],{"class":98},[36,72387,51776],{"class":51733},[36,72389,15359],{"class":55},[36,72391,176],{"class":98},[36,72393,51823],{"class":59},[36,72395,51803],{"class":55},[36,72397,176],{"class":98},[36,72399,51830],{"class":59},[36,72401,188],{"class":98},[36,72403,72404,72406,72408,72410,72412],{"class":38,"line":88},[36,72405,52576],{"class":98},[36,72407,51839],{"class":51733},[36,72409,51842],{"class":98},[36,72411,51839],{"class":51733},[36,72413,188],{"class":98},[36,72415,72416,72418,72420],{"class":38,"line":113},[36,72417,52576],{"class":98},[36,72419,537],{"class":51733},[36,72421,188],{"class":98},[36,72423,72424,72426],{"class":38,"line":119},[36,72425,6854],{"class":51733},[36,72427,16011],{"class":98},[36,72429,72430,72432,72434,72436],{"class":38,"line":131},[36,72431,55127],{"class":109},[36,72433,51869],{"class":98},[36,72435,807],{"class":109},[36,72437,1772],{"class":98},[36,72439,72440,72442,72444,72446],{"class":38,"line":137},[36,72441,55138],{"class":109},[36,72443,51869],{"class":98},[36,72445,807],{"class":109},[36,72447,1772],{"class":98},[36,72449,72450],{"class":38,"line":147},[36,72451,2646],{"class":98},[36,72453,72454],{"class":38,"line":153},[36,72455,247],{"emptyLinePlaceholder":246},[36,72457,72458,72460],{"class":38,"line":191},[36,72459,57711],{"class":51733},[36,72461,16011],{"class":98},[36,72463,72464,72466,72468,72470],{"class":38,"line":197},[36,72465,57718],{"class":109},[36,72467,51869],{"class":98},[36,72469,52024],{"class":109},[36,72471,1772],{"class":98},[36,72473,72474,72476,72478,72480,72482],{"class":38,"line":217},[36,72475,62509],{"class":109},[36,72477,51869],{"class":98},[36,72479,1313],{"class":109},[36,72481,51924],{"class":163},[36,72483,1772],{"class":98},[36,72485,72486],{"class":38,"line":223},[36,72487,2646],{"class":98},[36,72489,72490],{"class":38,"line":243},[36,72491,247],{"emptyLinePlaceholder":246},[36,72493,72494,72497],{"class":38,"line":250},[36,72495,72496],{"class":55},"    .info",[36,72498,16011],{"class":98},[36,72500,72501,72503,72505,72507,72509],{"class":38,"line":256},[36,72502,55203],{"class":109},[36,72504,51869],{"class":98},[36,72506,51921],{"class":109},[36,72508,51924],{"class":163},[36,72510,1772],{"class":98},[36,72512,72513,72515,72517,72519,72521,72523],{"class":38,"line":273},[36,72514,55138],{"class":109},[36,72516,51869],{"class":98},[36,72518,1060],{"class":109},[36,72520,51924],{"class":163},[36,72522,51988],{"class":109},[36,72524,1772],{"class":98},[36,72526,72527,72529,72531,72533],{"class":38,"line":278},[36,72528,57718],{"class":109},[36,72530,51869],{"class":98},[36,72532,52024],{"class":109},[36,72534,1772],{"class":98},[36,72536,72537],{"class":38,"line":284},[36,72538,2646],{"class":98},[36,72540,72541],{"class":38,"line":315},[36,72542,247],{"emptyLinePlaceholder":246},[36,72544,72545,72548],{"class":38,"line":320},[36,72546,72547],{"class":55},"    .uname",[36,72549,31899],{"class":98},[36,72551,72552,72555],{"class":38,"line":326},[36,72553,72554],{"class":55},"    .age",[36,72556,31899],{"class":98},[36,72558,72559,72562],{"class":38,"line":343},[36,72560,72561],{"class":55},"    .salary",[36,72563,16011],{"class":98},[36,72565,72566,72568,72570,72572,72574],{"class":38,"line":348},[36,72567,55203],{"class":109},[36,72569,51869],{"class":98},[36,72571,926],{"class":109},[36,72573,51924],{"class":163},[36,72575,1772],{"class":98},[36,72577,72578,72580,72582,72584,72586],{"class":38,"line":354},[36,72579,55217],{"class":109},[36,72581,51869],{"class":98},[36,72583,1313],{"class":109},[36,72585,51924],{"class":163},[36,72587,1772],{"class":98},[36,72589,72590,72592,72594,72596],{"class":38,"line":370},[36,72591,62212],{"class":109},[36,72593,51869],{"class":98},[36,72595,55169],{"class":109},[36,72597,1772],{"class":98},[36,72599,72600,72602,72604,72606,72608],{"class":38,"line":375},[36,72601,62182],{"class":109},[36,72603,51869],{"class":98},[36,72605,1189],{"class":109},[36,72607,51924],{"class":163},[36,72609,1772],{"class":98},[36,72611,72612],{"class":38,"line":381},[36,72613,2646],{"class":98},[36,72615,72616],{"class":38,"line":399},[36,72617,247],{"emptyLinePlaceholder":246},[36,72619,72620,72623],{"class":38,"line":404},[36,72621,72622],{"class":55},"    .gender",[36,72624,31899],{"class":98},[36,72626,72627,72630],{"class":38,"line":410},[36,72628,72629],{"class":55},"    .city",[36,72631,16011],{"class":98},[36,72633,72634,72636,72638,72640,72642],{"class":38,"line":423},[36,72635,55203],{"class":109},[36,72637,51869],{"class":98},[36,72639,926],{"class":109},[36,72641,51924],{"class":163},[36,72643,1772],{"class":98},[36,72645,72646,72648,72650,72652,72654],{"class":38,"line":436},[36,72647,55217],{"class":109},[36,72649,51869],{"class":98},[36,72651,1438],{"class":109},[36,72653,51924],{"class":163},[36,72655,1772],{"class":98},[36,72657,72658,72660,72662,72664],{"class":38,"line":441},[36,72659,62212],{"class":109},[36,72661,51869],{"class":98},[36,72663,55169],{"class":109},[36,72665,1772],{"class":98},[36,72667,72668,72670,72672,72674,72676],{"class":38,"line":447},[36,72669,62182],{"class":109},[36,72671,51869],{"class":98},[36,72673,1189],{"class":109},[36,72675,51924],{"class":163},[36,72677,1772],{"class":98},[36,72679,72680,72682,72684,72686,72688,72690,72693,72695,72697,72699,72702,72704,72706],{"class":38,"line":465},[36,72681,62409],{"class":109},[36,72683,51869],{"class":98},[36,72685,833],{"class":109},[36,72687,51924],{"class":163},[36,72689,51953],{"class":109},[36,72691,72692],{"class":109}," rgb",[36,72694,621],{"class":98},[36,72696,2190],{"class":109},[36,72698,12874],{"class":98},[36,72700,72701],{"class":109},"197",[36,72703,12874],{"class":98},[36,72705,72701],{"class":109},[36,72707,3170],{"class":98},[36,72709,72710],{"class":38,"line":470},[36,72711,2646],{"class":98},[36,72713,72714],{"class":38,"line":476},[36,72715,247],{"emptyLinePlaceholder":246},[36,72717,72718,72721],{"class":38,"line":496},[36,72719,72720],{"class":51733},"    button",[36,72722,16011],{"class":98},[36,72724,72725,72727,72729,72731,72733],{"class":38,"line":501},[36,72726,55217],{"class":109},[36,72728,51869],{"class":98},[36,72730,1438],{"class":109},[36,72732,51924],{"class":163},[36,72734,1772],{"class":98},[36,72736,72737,72739,72741,72743,72745],{"class":38,"line":507},[36,72738,55203],{"class":109},[36,72740,51869],{"class":98},[36,72742,1098],{"class":109},[36,72744,51924],{"class":163},[36,72746,1772],{"class":98},[36,72748,72749,72751,72753,72756,72758,72760,72762,72765,72767,72769],{"class":38,"line":517},[36,72750,55316],{"class":109},[36,72752,51869],{"class":98},[36,72754,72755],{"class":109},"rgb",[36,72757,621],{"class":98},[36,72759,1580],{"class":109},[36,72761,12874],{"class":98},[36,72763,72764],{"class":109},"187",[36,72766,12874],{"class":98},[36,72768,914],{"class":109},[36,72770,3170],{"class":98},[36,72772,72773,72775,72777,72779],{"class":38,"line":522},[36,72774,57848],{"class":109},[36,72776,51869],{"class":98},[36,72778,61274],{"class":109},[36,72780,1772],{"class":98},[36,72782,72783,72785,72787,72789],{"class":38,"line":528},[36,72784,62409],{"class":109},[36,72786,51869],{"class":98},[36,72788,807],{"class":109},[36,72790,1772],{"class":98},[36,72792,72793],{"class":38,"line":10203},[36,72794,2646],{"class":98},[36,72796,72797],{"class":38,"line":10227},[36,72798,247],{"emptyLinePlaceholder":246},[36,72800,72801,72803,72805],{"class":38,"line":10232},[36,72802,72720],{"class":51733},[36,72804,52120],{"class":51733},[36,72806,16011],{"class":98},[36,72808,72809,72811,72813,72816],{"class":38,"line":10237},[36,72810,55441],{"class":109},[36,72812,51869],{"class":98},[36,72814,72815],{"class":109},"inline-block",[36,72817,1772],{"class":98},[36,72819,72820,72822,72824,72826,72828],{"class":38,"line":10242},[36,72821,55203],{"class":109},[36,72823,51869],{"class":98},[36,72825,1060],{"class":109},[36,72827,51924],{"class":163},[36,72829,1772],{"class":98},[36,72831,72832,72834,72836,72838,72840],{"class":38,"line":10251},[36,72833,55217],{"class":109},[36,72835,51869],{"class":98},[36,72837,1060],{"class":109},[36,72839,51924],{"class":163},[36,72841,1772],{"class":98},[36,72843,72844,72846,72848,72850,72852],{"class":38,"line":10256},[36,72845,57791],{"class":109},[36,72847,51869],{"class":98},[36,72849,1086],{"class":109},[36,72851,51924],{"class":163},[36,72853,1772],{"class":98},[36,72855,72856,72858,72860,72862,72864,72866,72869],{"class":38,"line":10262},[36,72857,62409],{"class":109},[36,72859,51869],{"class":98},[36,72861,833],{"class":109},[36,72863,51924],{"class":163},[36,72865,51953],{"class":109},[36,72867,72868],{"class":109}," #fff",[36,72870,1772],{"class":98},[36,72872,72873,72875,72877,72879,72881],{"class":38,"line":10283},[36,72874,55566],{"class":109},[36,72876,51869],{"class":98},[36,72878,933],{"class":109},[36,72880,51924],{"class":163},[36,72882,1772],{"class":98},[36,72884,72885,72887,72889,72891,72893],{"class":38,"line":10289},[36,72886,62182],{"class":109},[36,72888,51869],{"class":98},[36,72890,833],{"class":109},[36,72892,51924],{"class":163},[36,72894,1772],{"class":98},[36,72896,72897],{"class":38,"line":10303},[36,72898,2646],{"class":98},[36,72900,72901],{"class":38,"line":10309},[36,72902,247],{"emptyLinePlaceholder":246},[36,72904,72905,72908],{"class":38,"line":10336},[36,72906,72907],{"class":55},"    .total",[36,72909,16011],{"class":98},[36,72911,72912,72914,72916,72918,72920],{"class":38,"line":10345},[36,72913,55203],{"class":109},[36,72915,51869],{"class":98},[36,72917,62061],{"class":109},[36,72919,51924],{"class":163},[36,72921,1772],{"class":98},[36,72923,72924,72926,72928,72930,72932],{"class":38,"line":10351},[36,72925,55217],{"class":109},[36,72927,51869],{"class":98},[36,72929,1015],{"class":109},[36,72931,51924],{"class":163},[36,72933,1772],{"class":98},[36,72935,72936,72938,72940,72942,72944],{"class":38,"line":10359},[36,72937,57791],{"class":109},[36,72939,51869],{"class":98},[36,72941,1015],{"class":109},[36,72943,51924],{"class":163},[36,72945,1772],{"class":98},[36,72947,72948,72950,72952,72955],{"class":38,"line":10364},[36,72949,57718],{"class":109},[36,72951,51869],{"class":98},[36,72953,72954],{"class":109},"right",[36,72956,1772],{"class":98},[36,72958,72959,72961,72963,72965,72967,72969,72971,72973],{"class":38,"line":17043},[36,72960,55138],{"class":109},[36,72962,51869],{"class":98},[36,72964,1015],{"class":109},[36,72966,51924],{"class":163},[36,72968,51988],{"class":109},[36,72970,2497],{"class":109},[36,72972,51924],{"class":163},[36,72974,1772],{"class":98},[36,72976,72977,72980,72982,72984,72986],{"class":38,"line":17049},[36,72978,72979],{"class":109},"      padding-right",[36,72981,51869],{"class":98},[36,72983,1060],{"class":109},[36,72985,51924],{"class":163},[36,72987,1772],{"class":98},[36,72989,72990,72992,72994,72996,72998],{"class":38,"line":17072},[36,72991,55354],{"class":109},[36,72993,51869],{"class":98},[36,72995,1137],{"class":109},[36,72997,51924],{"class":163},[36,72999,1772],{"class":98},[36,73001,73002,73004,73006,73008,73010,73013,73015,73018,73020,73022],{"class":38,"line":17078},[36,73003,55316],{"class":109},[36,73005,51869],{"class":98},[36,73007,72755],{"class":109},[36,73009,621],{"class":98},[36,73011,73012],{"class":109},"237",[36,73014,12874],{"class":98},[36,73016,73017],{"class":109},"235",[36,73019,12874],{"class":98},[36,73021,73017],{"class":109},[36,73023,3170],{"class":98},[36,73025,73026,73029,73031,73033],{"class":38,"line":17101},[36,73027,73028],{"class":109},"      box-sizing",[36,73030,51869],{"class":98},[36,73032,60937],{"class":109},[36,73034,1772],{"class":98},[36,73036,73037],{"class":38,"line":17115},[36,73038,2646],{"class":98},[36,73040,73041],{"class":38,"line":17135},[36,73042,247],{"emptyLinePlaceholder":246},[36,73044,73045,73047,73049],{"class":38,"line":17141},[36,73046,72907],{"class":55},[36,73048,52120],{"class":51733},[36,73050,16011],{"class":98},[36,73052,73053,73055,73057,73059],{"class":38,"line":17152},[36,73054,57848],{"class":109},[36,73056,51869],{"class":98},[36,73058,57853],{"class":109},[36,73060,1772],{"class":98},[36,73062,73063],{"class":38,"line":17175},[36,73064,2646],{"class":98},[36,73066,73067],{"class":38,"line":17197},[36,73068,247],{"emptyLinePlaceholder":246},[36,73070,73071,73073],{"class":38,"line":17202},[36,73072,65455],{"class":51733},[36,73074,16011],{"class":98},[36,73076,73077,73079,73081,73083,73085],{"class":38,"line":17208},[36,73078,55203],{"class":109},[36,73080,51869],{"class":98},[36,73082,62061],{"class":109},[36,73084,51924],{"class":163},[36,73086,1772],{"class":98},[36,73088,73089,73091,73093,73096],{"class":38,"line":17222},[36,73090,55138],{"class":109},[36,73092,51869],{"class":98},[36,73094,73095],{"class":109},"auto",[36,73097,1772],{"class":98},[36,73099,73100,73102,73104,73106],{"class":38,"line":17235},[36,73101,65462],{"class":109},[36,73103,51869],{"class":98},[36,73105,65467],{"class":109},[36,73107,1772],{"class":98},[36,73109,73110],{"class":38,"line":17240},[36,73111,2646],{"class":98},[36,73113,73114],{"class":38,"line":17254},[36,73115,247],{"emptyLinePlaceholder":246},[36,73117,73118,73120],{"class":38,"line":17259},[36,73119,65547],{"class":51733},[36,73121,16011],{"class":98},[36,73123,73124,73126,73128,73130,73132,73134,73136,73138,73140,73142],{"class":38,"line":17265},[36,73125,55316],{"class":109},[36,73127,51869],{"class":98},[36,73129,72755],{"class":109},[36,73131,621],{"class":98},[36,73133,73012],{"class":109},[36,73135,12874],{"class":98},[36,73137,73017],{"class":109},[36,73139,12874],{"class":98},[36,73141,73017],{"class":109},[36,73143,3170],{"class":98},[36,73145,73146],{"class":38,"line":17270},[36,73147,2646],{"class":98},[36,73149,73150],{"class":38,"line":17284},[36,73151,247],{"emptyLinePlaceholder":246},[36,73153,73154,73156],{"class":38,"line":17289},[36,73155,65547],{"class":51733},[36,73157,31899],{"class":98},[36,73159,73160,73162],{"class":38,"line":17294},[36,73161,65613],{"class":51733},[36,73163,16011],{"class":98},[36,73165,73166,73168,73170,73172,73174],{"class":38,"line":17308},[36,73167,55217],{"class":109},[36,73169,51869],{"class":98},[36,73171,888],{"class":109},[36,73173,51924],{"class":163},[36,73175,1772],{"class":98},[36,73177,73178,73180,73182,73184],{"class":38,"line":17320},[36,73179,57718],{"class":109},[36,73181,51869],{"class":98},[36,73183,24175],{"class":109},[36,73185,1772],{"class":98},[36,73187,73188,73190,73192,73194,73196],{"class":38,"line":17325},[36,73189,55354],{"class":109},[36,73191,51869],{"class":98},[36,73193,1163],{"class":109},[36,73195,51924],{"class":163},[36,73197,1772],{"class":98},[36,73199,73200,73202,73204,73206,73208,73210,73212,73214,73217,73219,73222,73224,73226],{"class":38,"line":17338},[36,73201,62409],{"class":109},[36,73203,51869],{"class":98},[36,73205,833],{"class":109},[36,73207,51924],{"class":163},[36,73209,51953],{"class":109},[36,73211,72692],{"class":109},[36,73213,621],{"class":98},[36,73215,73216],{"class":109},"228",[36,73218,12874],{"class":98},[36,73220,73221],{"class":109},"225",[36,73223,12874],{"class":98},[36,73225,73221],{"class":109},[36,73227,3170],{"class":98},[36,73229,73230,73233,73235,73237,73239],{"class":38,"line":17343},[36,73231,73232],{"class":109},"      padding-left",[36,73234,51869],{"class":98},[36,73236,933],{"class":109},[36,73238,51924],{"class":163},[36,73240,1772],{"class":98},[36,73242,73243,73245,73247,73249,73252,73254,73256],{"class":38,"line":17348},[36,73244,62292],{"class":109},[36,73246,51869],{"class":98},[36,73248,28555],{"class":109},[36,73250,73251],{"class":109}," linear",[36,73253,62299],{"class":109},[36,73255,1308],{"class":163},[36,73257,1772],{"class":98},[36,73259,73260],{"class":38,"line":17353},[36,73261,2646],{"class":98},[36,73263,73264],{"class":38,"line":17366},[36,73265,247],{"emptyLinePlaceholder":246},[36,73267,73268,73271,73273,73275],{"class":38,"line":17371},[36,73269,73270],{"class":51733},"    tbody",[36,73272,70576],{"class":51733},[36,73274,61372],{"class":55},[36,73276,16011],{"class":98},[36,73278,73279,73281,73283,73285,73287,73289,73291,73293,73295,73297],{"class":38,"line":33066},[36,73280,55316],{"class":109},[36,73282,51869],{"class":98},[36,73284,72755],{"class":109},[36,73286,621],{"class":98},[36,73288,73012],{"class":109},[36,73290,12874],{"class":98},[36,73292,73017],{"class":109},[36,73294,12874],{"class":98},[36,73296,73017],{"class":109},[36,73298,3170],{"class":98},[36,73300,73301,73303,73305,73307],{"class":38,"line":33072},[36,73302,62457],{"class":109},[36,73304,51869],{"class":98},[36,73306,62462],{"class":109},[36,73308,1772],{"class":98},[36,73310,73311],{"class":38,"line":33078},[36,73312,2646],{"class":98},[36,73314,73315],{"class":38,"line":33084},[36,73316,247],{"emptyLinePlaceholder":246},[36,73318,73319,73321,73323,73326,73328],{"class":38,"line":33090},[36,73320,73270],{"class":51733},[36,73322,70576],{"class":51733},[36,73324,73325],{"class":51733}," td",[36,73327,1877],{"class":51733},[36,73329,16011],{"class":98},[36,73331,73332,73334,73336,73338],{"class":38,"line":33101},[36,73333,55441],{"class":109},[36,73335,51869],{"class":98},[36,73337,61301],{"class":109},[36,73339,1772],{"class":98},[36,73341,73342,73344,73346,73348,73350],{"class":38,"line":33107},[36,73343,55203],{"class":109},[36,73345,51869],{"class":98},[36,73347,1520],{"class":109},[36,73349,51924],{"class":163},[36,73351,1772],{"class":98},[36,73353,73354,73356,73358,73360,73362],{"class":38,"line":33127},[36,73355,55217],{"class":109},[36,73357,51869],{"class":98},[36,73359,1438],{"class":109},[36,73361,51924],{"class":163},[36,73363,1772],{"class":98},[36,73365,73366,73368,73370,73372,73374],{"class":38,"line":33133},[36,73367,57791],{"class":109},[36,73369,51869],{"class":98},[36,73371,1438],{"class":109},[36,73373,51924],{"class":163},[36,73375,1772],{"class":98},[36,73377,73378,73380,73382,73384,73386],{"class":38,"line":33144},[36,73379,62509],{"class":109},[36,73381,51869],{"class":98},[36,73383,694],{"class":109},[36,73385,51924],{"class":163},[36,73387,1772],{"class":98},[36,73389,73390,73392,73394,73396],{"class":38,"line":33150},[36,73391,57848],{"class":109},[36,73393,51869],{"class":98},[36,73395,61274],{"class":109},[36,73397,1772],{"class":98},[36,73399,73400,73402,73404,73406],{"class":38,"line":33156},[36,73401,57718],{"class":109},[36,73403,51869],{"class":98},[36,73405,52024],{"class":109},[36,73407,1772],{"class":98},[36,73409,73410,73412,73414,73416],{"class":38,"line":33162},[36,73411,64402],{"class":109},[36,73413,51869],{"class":98},[36,73415,55169],{"class":109},[36,73417,1772],{"class":98},[36,73419,73420,73422,73424,73427],{"class":38,"line":33168},[36,73421,55316],{"class":109},[36,73423,51869],{"class":98},[36,73425,73426],{"class":109},"orange",[36,73428,1772],{"class":98},[36,73430,73431,73433,73435,73438,73440],{"class":38,"line":33174},[36,73432,55566],{"class":109},[36,73434,51869],{"class":98},[36,73436,73437],{"class":109},"12.5",[36,73439,51924],{"class":163},[36,73441,1772],{"class":98},[36,73443,73444],{"class":38,"line":33180},[36,73445,2646],{"class":98},[36,73447,73448,73450,73452],{"class":38,"line":33186},[36,73449,52849],{"class":98},[36,73451,537],{"class":51733},[36,73453,188],{"class":98},[36,73455,73456,73458,73460],{"class":38,"line":33206},[36,73457,52217],{"class":98},[36,73459,51766],{"class":51733},[36,73461,188],{"class":98},[36,73463,73464],{"class":38,"line":33212},[36,73465,247],{"emptyLinePlaceholder":246},[36,73467,73468,73470,73472],{"class":38,"line":33228},[36,73469,179],{"class":98},[36,73471,52232],{"class":51733},[36,73473,188],{"class":98},[36,73475,73476,73478,73480,73483,73485],{"class":38,"line":33234},[36,73477,52576],{"class":98},[36,73479,559],{"class":51733},[36,73481,73482],{"class":98},">学生就业统计表\u003C\u002F",[36,73484,559],{"class":51733},[36,73486,188],{"class":98},[36,73488,73489,73491,73493,73495,73497,73499,73501,73503,73505],{"class":38,"line":33248},[36,73490,52576],{"class":98},[36,73492,67057],{"class":51733},[36,73494,53918],{"class":55},[36,73496,176],{"class":98},[36,73498,63096],{"class":59},[36,73500,69502],{"class":55},[36,73502,176],{"class":98},[36,73504,32209],{"class":59},[36,73506,188],{"class":98},[36,73508,73509,73511,73513,73515,73517,73519,73521,73523,73525,73527,73529,73532,73534,73536,73538],{"class":38,"line":33254},[36,73510,51773],{"class":98},[36,73512,54253],{"class":51733},[36,73514,54256],{"class":55},[36,73516,176],{"class":98},[36,73518,63131],{"class":59},[36,73520,15359],{"class":55},[36,73522,176],{"class":98},[36,73524,69528],{"class":59},[36,73526,61452],{"class":55},[36,73528,176],{"class":98},[36,73530,73531],{"class":59},"\"姓名\"",[36,73533,53918],{"class":55},[36,73535,176],{"class":98},[36,73537,69528],{"class":59},[36,73539,188],{"class":98},[36,73541,73542,73544,73546,73548,73550,73552,73554,73556,73558,73560,73562,73565,73567,73569,73571],{"class":38,"line":33269},[36,73543,51773],{"class":98},[36,73545,54253],{"class":51733},[36,73547,54256],{"class":55},[36,73549,176],{"class":98},[36,73551,63131],{"class":59},[36,73553,15359],{"class":55},[36,73555,176],{"class":98},[36,73557,69556],{"class":59},[36,73559,61452],{"class":55},[36,73561,176],{"class":98},[36,73563,73564],{"class":59},"\"年龄\"",[36,73566,53918],{"class":55},[36,73568,176],{"class":98},[36,73570,69556],{"class":59},[36,73572,188],{"class":98},[36,73574,73575,73577,73579,73581,73583,73585,73587,73589,73591,73593,73595,73598,73600,73602,73604],{"class":38,"line":33275},[36,73576,51773],{"class":98},[36,73578,54253],{"class":51733},[36,73580,54256],{"class":55},[36,73582,176],{"class":98},[36,73584,63131],{"class":59},[36,73586,15359],{"class":55},[36,73588,176],{"class":98},[36,73590,69658],{"class":59},[36,73592,61452],{"class":55},[36,73594,176],{"class":98},[36,73596,73597],{"class":59},"\"薪资\"",[36,73599,53918],{"class":55},[36,73601,176],{"class":98},[36,73603,69658],{"class":59},[36,73605,188],{"class":98},[36,73607,73608,73610,73612,73614,73616,73618,73620,73622,73624,73626,73628,73630],{"class":38,"line":33284},[36,73609,51773],{"class":98},[36,73611,69576],{"class":51733},[36,73613,15359],{"class":55},[36,73615,176],{"class":98},[36,73617,69583],{"class":59},[36,73619,15398],{"class":55},[36,73621,176],{"class":98},[36,73623,8103],{"class":59},[36,73625,53918],{"class":55},[36,73627,176],{"class":98},[36,73629,69583],{"class":59},[36,73631,188],{"class":98},[36,73633,73634,73636,73638,73640,73642,73644,73646,73648],{"class":38,"line":33290},[36,73635,55666],{"class":98},[36,73637,69598],{"class":51733},[36,73639,67083],{"class":55},[36,73641,176],{"class":98},[36,73643,10400],{"class":59},[36,73645,69607],{"class":98},[36,73647,69598],{"class":51733},[36,73649,188],{"class":98},[36,73651,73652,73654,73656,73658,73660,73662,73664,73666],{"class":38,"line":33299},[36,73653,55666],{"class":98},[36,73655,69598],{"class":51733},[36,73657,67083],{"class":55},[36,73659,176],{"class":98},[36,73661,10469],{"class":59},[36,73663,69626],{"class":98},[36,73665,69598],{"class":51733},[36,73667,188],{"class":98},[36,73669,73670,73672,73674],{"class":38,"line":33305},[36,73671,52208],{"class":98},[36,73673,69576],{"class":51733},[36,73675,188],{"class":98},[36,73677,73678,73680,73682,73684,73686,73688,73690,73692,73694,73696,73698,73700],{"class":38,"line":33311},[36,73679,51773],{"class":98},[36,73681,69576],{"class":51733},[36,73683,15359],{"class":55},[36,73685,176],{"class":98},[36,73687,69680],{"class":59},[36,73689,15398],{"class":55},[36,73691,176],{"class":98},[36,73693,8103],{"class":59},[36,73695,53918],{"class":55},[36,73697,176],{"class":98},[36,73699,69680],{"class":59},[36,73701,188],{"class":98},[36,73703,73704,73706,73708,73710,73712,73714,73716,73718],{"class":38,"line":33320},[36,73705,55666],{"class":98},[36,73707,69598],{"class":51733},[36,73709,67083],{"class":55},[36,73711,176],{"class":98},[36,73713,69701],{"class":59},[36,73715,69704],{"class":98},[36,73717,69598],{"class":51733},[36,73719,188],{"class":98},[36,73721,73722,73724,73726,73728,73730,73732,73734,73736],{"class":38,"line":33326},[36,73723,55666],{"class":98},[36,73725,69598],{"class":51733},[36,73727,67083],{"class":55},[36,73729,176],{"class":98},[36,73731,69721],{"class":59},[36,73733,69724],{"class":98},[36,73735,69598],{"class":51733},[36,73737,188],{"class":98},[36,73739,73740,73742,73744,73746,73748,73750,73752,73754],{"class":38,"line":33337},[36,73741,55666],{"class":98},[36,73743,69598],{"class":51733},[36,73745,67083],{"class":55},[36,73747,176],{"class":98},[36,73749,69741],{"class":59},[36,73751,69744],{"class":98},[36,73753,69598],{"class":51733},[36,73755,188],{"class":98},[36,73757,73758,73760,73762,73764,73766,73768,73770,73772],{"class":38,"line":33343},[36,73759,55666],{"class":98},[36,73761,69598],{"class":51733},[36,73763,67083],{"class":55},[36,73765,176],{"class":98},[36,73767,69761],{"class":59},[36,73769,69764],{"class":98},[36,73771,69598],{"class":51733},[36,73773,188],{"class":98},[36,73775,73776,73778,73780,73782,73784,73786,73788,73790],{"class":38,"line":33362},[36,73777,55666],{"class":98},[36,73779,69598],{"class":51733},[36,73781,67083],{"class":55},[36,73783,176],{"class":98},[36,73785,69781],{"class":59},[36,73787,69784],{"class":98},[36,73789,69598],{"class":51733},[36,73791,188],{"class":98},[36,73793,73794,73796,73798],{"class":38,"line":33368},[36,73795,52208],{"class":98},[36,73797,69576],{"class":51733},[36,73799,188],{"class":98},[36,73801,73802,73804,73806],{"class":38,"line":33379},[36,73803,51773],{"class":98},[36,73805,54319],{"class":51733},[36,73807,188],{"class":98},[36,73809,73810,73812,73814,73817,73819,73822,73824],{"class":38,"line":33385},[36,73811,55666],{"class":98},[36,73813,36],{"class":51733},[36,73815,73816],{"class":98},">+\u003C\u002F",[36,73818,36],{"class":51733},[36,73820,73821],{"class":98},">添加\u003C\u002F",[36,73823,54319],{"class":51733},[36,73825,188],{"class":98},[36,73827,73828,73830,73832],{"class":38,"line":33405},[36,73829,52849],{"class":98},[36,73831,67057],{"class":51733},[36,73833,188],{"class":98},[36,73835,73836,73838,73840,73842,73844,73846,73849,73851,73854,73856,73859,73861],{"class":38,"line":33421},[36,73837,52576],{"class":98},[36,73839,52043],{"class":51733},[36,73841,53918],{"class":55},[36,73843,176],{"class":98},[36,73845,63012],{"class":59},[36,73847,73848],{"class":98},">共有数据 \u003C",[36,73850,36],{"class":51733},[36,73852,73853],{"class":98},">0\u003C\u002F",[36,73855,36],{"class":51733},[36,73857,73858],{"class":98},"> 条\u003C\u002F",[36,73860,52043],{"class":51733},[36,73862,188],{"class":98},[36,73864,73865,73867,73869],{"class":38,"line":33427},[36,73866,52576],{"class":98},[36,73868,753],{"class":51733},[36,73870,188],{"class":98},[36,73872,73873,73875,73877],{"class":38,"line":33441},[36,73874,51773],{"class":98},[36,73876,756],{"class":51733},[36,73878,188],{"class":98},[36,73880,73881,73883,73885],{"class":38,"line":33447},[36,73882,55666],{"class":98},[36,73884,759],{"class":51733},[36,73886,188],{"class":98},[36,73888,73889,73891,73893,73896,73898],{"class":38,"line":33453},[36,73890,55734],{"class":98},[36,73892,762],{"class":51733},[36,73894,73895],{"class":98},">ID\u003C\u002F",[36,73897,762],{"class":51733},[36,73899,188],{"class":98},[36,73901,73902,73904,73906,73908,73910],{"class":38,"line":33464},[36,73903,55734],{"class":98},[36,73905,762],{"class":51733},[36,73907,69887],{"class":98},[36,73909,762],{"class":51733},[36,73911,188],{"class":98},[36,73913,73914,73916,73918,73920,73922],{"class":38,"line":33470},[36,73915,55734],{"class":98},[36,73917,762],{"class":51733},[36,73919,69900],{"class":98},[36,73921,762],{"class":51733},[36,73923,188],{"class":98},[36,73925,73926,73928,73930,73932,73934],{"class":38,"line":33476},[36,73927,55734],{"class":98},[36,73929,762],{"class":51733},[36,73931,69913],{"class":98},[36,73933,762],{"class":51733},[36,73935,188],{"class":98},[36,73937,73938,73940,73942,73944,73946],{"class":38,"line":33486},[36,73939,55734],{"class":98},[36,73941,762],{"class":51733},[36,73943,69926],{"class":98},[36,73945,762],{"class":51733},[36,73947,188],{"class":98},[36,73949,73950,73952,73954,73956,73958],{"class":38,"line":33492},[36,73951,55734],{"class":98},[36,73953,762],{"class":51733},[36,73955,69939],{"class":98},[36,73957,762],{"class":51733},[36,73959,188],{"class":98},[36,73961,73962,73964,73966,73969,73971],{"class":38,"line":33503},[36,73963,55734],{"class":98},[36,73965,762],{"class":51733},[36,73967,73968],{"class":98},">录入时间\u003C\u002F",[36,73970,762],{"class":51733},[36,73972,188],{"class":98},[36,73974,73975,73977,73979,73981,73983],{"class":38,"line":33509},[36,73976,55734],{"class":98},[36,73978,762],{"class":51733},[36,73980,69952],{"class":98},[36,73982,762],{"class":51733},[36,73984,188],{"class":98},[36,73986,73987,73989,73991],{"class":38,"line":33519},[36,73988,55839],{"class":98},[36,73990,759],{"class":51733},[36,73992,188],{"class":98},[36,73994,73995,73997,73999],{"class":38,"line":33524},[36,73996,52208],{"class":98},[36,73998,756],{"class":51733},[36,74000,188],{"class":98},[36,74002,74003,74005,74007],{"class":38,"line":33530},[36,74004,51773],{"class":98},[36,74006,800],{"class":51733},[36,74008,188],{"class":98},[36,74010,74011],{"class":38,"line":33579},[36,74012,74013],{"class":42},"      \u003C!-- \u003Ctr>\n",[36,74015,74016],{"class":38,"line":33626},[36,74017,74018],{"class":42},"        \u003Ctd>1\u003C\u002Ftd>\n",[36,74020,74021],{"class":38,"line":33631},[36,74022,74018],{"class":42},[36,74024,74025],{"class":38,"line":33637},[36,74026,74018],{"class":42},[36,74028,74029],{"class":38,"line":33656},[36,74030,74018],{"class":42},[36,74032,74033],{"class":38,"line":33662},[36,74034,74018],{"class":42},[36,74036,74037],{"class":38,"line":33682},[36,74038,74018],{"class":42},[36,74040,74041],{"class":38,"line":33688},[36,74042,74018],{"class":42},[36,74044,74045],{"class":38,"line":33694},[36,74046,74047],{"class":42},"        \u003Ctd>\n",[36,74049,74050],{"class":38,"line":33704},[36,74051,74052],{"class":42},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[36,74054,74055],{"class":38,"line":33709},[36,74056,74057],{"class":42},"        \u003C\u002Ftd>\n",[36,74059,74060],{"class":38,"line":33715},[36,74061,74062],{"class":42},"      \u003C\u002Ftr> -->\n",[36,74064,74065,74067,74069],{"class":38,"line":33731},[36,74066,52208],{"class":98},[36,74068,800],{"class":51733},[36,74070,188],{"class":98},[36,74072,74073,74075,74077],{"class":38,"line":33776},[36,74074,52849],{"class":98},[36,74076,753],{"class":51733},[36,74078,188],{"class":98},[36,74080,74081,74083,74085],{"class":38,"line":33782},[36,74082,52576],{"class":98},[36,74084,52245],{"class":51733},[36,74086,188],{"class":98},[36,74088,74089],{"class":38,"line":33788},[36,74090,74091],{"class":42},"    \u002F\u002F const initData = [{\n",[36,74093,74094],{"class":38,"line":33794},[36,74095,74096],{"class":42},"    \u002F\u002F   unameId: 1,\n",[36,74098,74099],{"class":38,"line":33805},[36,74100,74101],{"class":42},"    \u002F\u002F   uname: '华晨宇',\n",[36,74103,74104],{"class":38,"line":33811},[36,74105,74106],{"class":42},"    \u002F\u002F   age: 22,\n",[36,74108,74109],{"class":38,"line":33817},[36,74110,74111],{"class":42},"    \u002F\u002F   salary: 12000,\n",[36,74113,74114],{"class":38,"line":33823},[36,74115,74116],{"class":42},"    \u002F\u002F   gender: '男',\n",[36,74118,74119],{"class":38,"line":33841},[36,74120,74121],{"class":42},"    \u002F\u002F   city: '北京',\n",[36,74123,74124],{"class":38,"line":33855},[36,74125,74126],{"class":42},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[36,74128,74129],{"class":38,"line":33864},[36,74130,74131],{"class":42},"    \u002F\u002F }]\n",[36,74133,74134],{"class":38,"line":33873},[36,74135,74136],{"class":42},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[36,74138,74139],{"class":38,"line":33882},[36,74140,74141],{"class":42},"    \u002F\u002F 1.渲染业务\n",[36,74143,74144],{"class":38,"line":33891},[36,74145,74146],{"class":42},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[36,74148,74149],{"class":38,"line":33897},[36,74150,74151],{"class":42},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[36,74153,74154],{"class":38,"line":33903},[36,74155,74156],{"class":42},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[36,74158,74159],{"class":38,"line":33911},[36,74160,247],{"emptyLinePlaceholder":246},[36,74162,74163],{"class":38,"line":33916},[36,74164,74165],{"class":42},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[36,74167,74168],{"class":38,"line":33922},[36,74169,74170],{"class":42},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[36,74172,74173,74175,74177,74179],{"class":38,"line":33933},[36,74174,11660],{"class":163},[36,74176,58127],{"class":109},[36,74178,14003],{"class":163},[36,74180,52270],{"class":98},[36,74182,74183,74186,74188],{"class":38,"line":33939},[36,74184,74185],{"class":98},"    console.",[36,74187,58679],{"class":55},[36,74189,52844],{"class":98},[36,74191,74192],{"class":38,"line":33959},[36,74193,247],{"emptyLinePlaceholder":246},[36,74195,74196],{"class":38,"line":33965},[36,74197,74198],{"class":42},"    \u002F\u002F 时间函数\n",[36,74200,74201,74203,74206],{"class":38,"line":33971},[36,74202,70516],{"class":163},[36,74204,74205],{"class":55}," getTime",[36,74207,11292],{"class":98},[36,74209,74210,74212,74215,74217,74219,74222],{"class":38,"line":33977},[36,74211,58660],{"class":163},[36,74213,74214],{"class":109}," date",[36,74216,14003],{"class":163},[36,74218,12017],{"class":163},[36,74220,74221],{"class":55}," Date",[36,74223,2435],{"class":98},[36,74225,74226,74228,74230,74232,74235,74238,74240,74242,74244,74247,74250,74252,74254,74256,74258,74260,74262,74264],{"class":38,"line":33994},[36,74227,58660],{"class":163},[36,74229,16530],{"class":109},[36,74231,14003],{"class":163},[36,74233,74234],{"class":98}," date.",[36,74236,74237],{"class":55},"getHours",[36,74239,13489],{"class":98},[36,74241,179],{"class":163},[36,74243,2497],{"class":109},[36,74245,74246],{"class":163}," ?",[36,74248,74249],{"class":59}," '0'",[36,74251,45999],{"class":163},[36,74253,74234],{"class":98},[36,74255,74237],{"class":55},[36,74257,13489],{"class":98},[36,74259,1472],{"class":163},[36,74261,74234],{"class":98},[36,74263,74237],{"class":55},[36,74265,2435],{"class":98},[36,74267,74268,74270,74273,74275,74277,74280,74282,74284,74286,74288,74290,74292,74294,74296,74298,74300,74302,74304],{"class":38,"line":34000},[36,74269,58660],{"class":163},[36,74271,74272],{"class":109}," m",[36,74274,14003],{"class":163},[36,74276,74234],{"class":98},[36,74278,74279],{"class":55},"getMinutes",[36,74281,13489],{"class":98},[36,74283,179],{"class":163},[36,74285,2497],{"class":109},[36,74287,74246],{"class":163},[36,74289,74249],{"class":59},[36,74291,45999],{"class":163},[36,74293,74234],{"class":98},[36,74295,74279],{"class":55},[36,74297,13489],{"class":98},[36,74299,1472],{"class":163},[36,74301,74234],{"class":98},[36,74303,74279],{"class":55},[36,74305,2435],{"class":98},[36,74307,74308,74310,74312,74314,74316,74319,74321,74323,74325,74327,74329,74331,74333,74335,74337,74339,74341,74343],{"class":38,"line":34006},[36,74309,58660],{"class":163},[36,74311,8869],{"class":109},[36,74313,14003],{"class":163},[36,74315,74234],{"class":98},[36,74317,74318],{"class":55},"getSeconds",[36,74320,13489],{"class":98},[36,74322,179],{"class":163},[36,74324,2497],{"class":109},[36,74326,74246],{"class":163},[36,74328,74249],{"class":59},[36,74330,45999],{"class":163},[36,74332,74234],{"class":98},[36,74334,74318],{"class":55},[36,74336,13489],{"class":98},[36,74338,1472],{"class":163},[36,74340,74234],{"class":98},[36,74342,74318],{"class":55},[36,74344,2435],{"class":98},[36,74346,74347,74349,74352,74354,74356,74359,74361,74364,74366,74369,74371,74373,74376,74378,74380,74382,74384,74386,74388,74391,74393,74396,74398,74401,74403,74405,74407],{"class":38,"line":34012},[36,74348,58660],{"class":163},[36,74350,74351],{"class":109}," str",[36,74353,14003],{"class":163},[36,74355,63335],{"class":59},[36,74357,74358],{"class":98},"date",[36,74360,1172],{"class":59},[36,74362,74363],{"class":55},"getFullYear",[36,74365,2885],{"class":59},[36,74367,74368],{"class":59},"}\u002F${",[36,74370,74358],{"class":98},[36,74372,1172],{"class":59},[36,74374,74375],{"class":55},"getMonth",[36,74377,13489],{"class":59},[36,74379,1095],{"class":163},[36,74381,25555],{"class":109},[36,74383,74368],{"class":59},[36,74385,74358],{"class":98},[36,74387,1172],{"class":59},[36,74389,74390],{"class":55},"getDate",[36,74392,2885],{"class":59},[36,74394,74395],{"class":59},"} ${",[36,74397,1029],{"class":98},[36,74399,74400],{"class":59},"}:${",[36,74402,1158],{"class":98},[36,74404,74400],{"class":59},[36,74406,1308],{"class":98},[36,74408,74409],{"class":59},"}`\n",[36,74411,74412,74415],{"class":38,"line":34018},[36,74413,74414],{"class":163},"      return",[36,74416,74417],{"class":98}," str\n",[36,74419,74420],{"class":38,"line":34024},[36,74421,2646],{"class":98},[36,74423,74424],{"class":38,"line":34051},[36,74425,74426],{"class":42},"    \u002F\u002F 渲染函数\n",[36,74428,74429,74431,74433,74435,74437,74439,74441,74443],{"class":38,"line":34075},[36,74430,11660],{"class":163},[36,74432,70179],{"class":109},[36,74434,14003],{"class":163},[36,74436,54828],{"class":98},[36,74438,54831],{"class":55},[36,74440,621],{"class":98},[36,74442,70190],{"class":59},[36,74444,627],{"class":98},[36,74446,74447,74449,74451],{"class":38,"line":34081},[36,74448,70516],{"class":163},[36,74450,70519],{"class":55},[36,74452,11292],{"class":98},[36,74454,74455],{"class":38,"line":34087},[36,74456,74457],{"class":42},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[36,74459,74460],{"class":38,"line":34093},[36,74461,74462],{"class":42},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[36,74464,74465,74467,74470,74472,74474,74477,74479,74481,74483,74486,74488,74491],{"class":38,"line":34104},[36,74466,58660],{"class":163},[36,74468,74469],{"class":109}," trArr",[36,74471,14003],{"class":163},[36,74473,52397],{"class":98},[36,74475,74476],{"class":55},"map",[36,74478,621],{"class":98},[36,74480,54881],{"class":163},[36,74482,2130],{"class":98},[36,74484,74485],{"class":5667},"ele",[36,74487,12874],{"class":98},[36,74489,74490],{"class":5667},"index",[36,74492,12881],{"class":98},[36,74494,74495,74497],{"class":38,"line":34115},[36,74496,15191],{"class":163},[36,74498,70600],{"class":59},[36,74500,74501],{"class":38,"line":34121},[36,74502,74503],{"class":59},"      \u003Ctr>\n",[36,74505,74506,74508,74510,74512,74515],{"class":38,"line":34138},[36,74507,70605],{"class":59},[36,74509,74485],{"class":98},[36,74511,1172],{"class":59},[36,74513,74514],{"class":98},"unameId",[36,74516,70620],{"class":59},[36,74518,74519,74521,74523,74525,74527],{"class":38,"line":34161},[36,74520,70605],{"class":59},[36,74522,74485],{"class":98},[36,74524,1172],{"class":59},[36,74526,70636],{"class":98},[36,74528,70620],{"class":59},[36,74530,74531,74533,74535,74537,74539],{"class":38,"line":34184},[36,74532,70605],{"class":59},[36,74534,74485],{"class":98},[36,74536,1172],{"class":59},[36,74538,70653],{"class":98},[36,74540,70620],{"class":59},[36,74542,74543,74545,74547,74549,74551],{"class":38,"line":34190},[36,74544,70605],{"class":59},[36,74546,74485],{"class":98},[36,74548,1172],{"class":59},[36,74550,70670],{"class":98},[36,74552,70620],{"class":59},[36,74554,74555,74557,74559,74561,74563],{"class":38,"line":34195},[36,74556,70605],{"class":59},[36,74558,74485],{"class":98},[36,74560,1172],{"class":59},[36,74562,70687],{"class":98},[36,74564,70620],{"class":59},[36,74566,74567,74569,74571,74573,74575],{"class":38,"line":34204},[36,74568,70605],{"class":59},[36,74570,74485],{"class":98},[36,74572,1172],{"class":59},[36,74574,70704],{"class":98},[36,74576,70620],{"class":59},[36,74578,74579,74581,74583,74585,74587],{"class":38,"line":34214},[36,74580,70605],{"class":59},[36,74582,74485],{"class":98},[36,74584,1172],{"class":59},[36,74586,2846],{"class":98},[36,74588,70620],{"class":59},[36,74590,74591],{"class":38,"line":34220},[36,74592,74047],{"class":59},[36,74594,74595,74598,74600],{"class":38,"line":34225},[36,74596,74597],{"class":59},"          \u003Ca href=\"#\" data-id=\"${",[36,74599,74490],{"class":98},[36,74601,74602],{"class":59},"}\">删除\u003C\u002Fa>\n",[36,74604,74605],{"class":38,"line":34231},[36,74606,74057],{"class":59},[36,74608,74609],{"class":38,"line":34244},[36,74610,74611],{"class":59},"      \u003C\u002Ftr>\n",[36,74613,74614],{"class":38,"line":34250},[36,74615,74616],{"class":59},"  `\n",[36,74618,74619],{"class":38,"line":34261},[36,74620,65247],{"class":98},[36,74622,74623,74625,74627],{"class":38,"line":34272},[36,74624,58676],{"class":98},[36,74626,58679],{"class":55},[36,74628,74629],{"class":98},"(trArr)\n",[36,74631,74632],{"class":38,"line":34291},[36,74633,247],{"emptyLinePlaceholder":246},[36,74635,74636],{"class":38,"line":49951},[36,74637,74638],{"class":42},"      \u002F\u002F (2) 把数组转换为字符串join\n",[36,74640,74641],{"class":38,"line":49956},[36,74642,74643],{"class":42},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[36,74645,74646,74648,74650,74653,74656,74658,74661],{"class":38,"line":49965},[36,74647,70531],{"class":98},[36,74649,176],{"class":163},[36,74651,74652],{"class":98}," trArr.",[36,74654,74655],{"class":55},"join",[36,74657,621],{"class":98},[36,74659,74660],{"class":59},"''",[36,74662,627],{"class":98},[36,74664,74665],{"class":38,"line":49974},[36,74666,74667],{"class":42},"      \u002F\u002F 显示共有几条\n",[36,74669,74670,74672,74674,74676,74679,74682,74684,74686],{"class":38,"line":49979},[36,74671,56203],{"class":98},[36,74673,54831],{"class":55},[36,74675,621],{"class":98},[36,74677,74678],{"class":59},"'.total span'",[36,74680,74681],{"class":98},").innerHTML ",[36,74683,176],{"class":163},[36,74685,52397],{"class":98},[36,74687,56263],{"class":109},[36,74689,74690],{"class":38,"line":49984},[36,74691,2646],{"class":98},[36,74693,74694],{"class":38,"line":49989},[36,74695,74696],{"class":42},"    \u002F\u002F render()\n",[36,74698,74699],{"class":38,"line":50002},[36,74700,247],{"emptyLinePlaceholder":246},[36,74702,74703],{"class":38,"line":50007},[36,74704,74705],{"class":42},"    \u002F\u002F 获取DOM对象\n",[36,74707,74708,74710,74712,74714,74716,74718,74720,74722],{"class":38,"line":50016},[36,74709,11660],{"class":163},[36,74711,70253],{"class":109},[36,74713,14003],{"class":163},[36,74715,54828],{"class":98},[36,74717,54831],{"class":55},[36,74719,621],{"class":98},[36,74721,70264],{"class":59},[36,74723,627],{"class":98},[36,74725,74726,74728,74730,74732,74734,74736,74738,74740],{"class":38,"line":50025},[36,74727,11660],{"class":163},[36,74729,70080],{"class":109},[36,74731,14003],{"class":163},[36,74733,54828],{"class":98},[36,74735,54831],{"class":55},[36,74737,621],{"class":98},[36,74739,70091],{"class":59},[36,74741,627],{"class":98},[36,74743,74744,74746,74748,74750,74752,74754,74756,74758],{"class":38,"line":50042},[36,74745,11660],{"class":163},[36,74747,16128],{"class":109},[36,74749,14003],{"class":163},[36,74751,54828],{"class":98},[36,74753,54831],{"class":55},[36,74755,621],{"class":98},[36,74757,70110],{"class":59},[36,74759,627],{"class":98},[36,74761,74763,74765,74767,74769,74771,74773,74775,74777],{"class":38,"line":74762},231,[36,74764,11660],{"class":163},[36,74766,70139],{"class":109},[36,74768,14003],{"class":163},[36,74770,54828],{"class":98},[36,74772,54831],{"class":55},[36,74774,621],{"class":98},[36,74776,70150],{"class":59},[36,74778,627],{"class":98},[36,74780,74782,74784,74786,74788,74790,74792,74794,74796],{"class":38,"line":74781},232,[36,74783,11660],{"class":163},[36,74785,70119],{"class":109},[36,74787,14003],{"class":163},[36,74789,54828],{"class":98},[36,74791,54831],{"class":55},[36,74793,621],{"class":98},[36,74795,70130],{"class":59},[36,74797,627],{"class":98},[36,74799,74801,74803,74805,74807,74809,74811,74813,74815],{"class":38,"line":74800},233,[36,74802,11660],{"class":163},[36,74804,70159],{"class":109},[36,74806,14003],{"class":163},[36,74808,54828],{"class":98},[36,74810,54831],{"class":55},[36,74812,621],{"class":98},[36,74814,70170],{"class":59},[36,74816,627],{"class":98},[36,74818,74820],{"class":38,"line":74819},234,[36,74821,247],{"emptyLinePlaceholder":246},[36,74823,74825],{"class":38,"line":74824},235,[36,74826,74827],{"class":42},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[36,74829,74831,74833,74835,74837,74839,74841,74843,74845,74847],{"class":38,"line":74830},236,[36,74832,70271],{"class":98},[36,74834,58245],{"class":55},[36,74836,621],{"class":98},[36,74838,70278],{"class":59},[36,74840,12874],{"class":98},[36,74842,54881],{"class":163},[36,74844,2130],{"class":98},[36,74846,170],{"class":5667},[36,74848,12881],{"class":98},[36,74850,74852],{"class":38,"line":74851},237,[36,74853,74854],{"class":42},"      \u002F\u002F 禁止浏览器跳转\n",[36,74856,74858,74860,74862],{"class":38,"line":74857},238,[36,74859,70298],{"class":98},[36,74861,70301],{"class":55},[36,74863,2435],{"class":98},[36,74865,74867],{"class":38,"line":74866},239,[36,74868,74869],{"class":42},"      \u002F\u002F 非空判断\n",[36,74871,74873],{"class":38,"line":74872},240,[36,74874,74875],{"class":42},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[36,74877,74879],{"class":38,"line":74878},241,[36,74880,74881],{"class":42},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[36,74883,74885,74887,74889,74891,74894,74896,74899,74902,74904,74906],{"class":38,"line":74884},242,[36,74886,54912],{"class":163},[36,74888,2130],{"class":98},[36,74890,842],{"class":163},[36,74892,74893],{"class":98},"uname.value ",[36,74895,71789],{"class":163},[36,74897,74898],{"class":163}," !",[36,74900,74901],{"class":98},"age.value ",[36,74903,71789],{"class":163},[36,74905,74898],{"class":163},[36,74907,74908],{"class":98},"salary.value) {\n",[36,74910,74912,74914,74916,74918,74920],{"class":38,"line":74911},243,[36,74913,15191],{"class":163},[36,74915,70372],{"class":55},[36,74917,621],{"class":98},[36,74919,70377],{"class":59},[36,74921,627],{"class":98},[36,74923,74925],{"class":38,"line":74924},244,[36,74926,52830],{"class":98},[36,74928,74930,74932,74934],{"class":38,"line":74929},245,[36,74931,58439],{"class":98},[36,74933,52316],{"class":55},[36,74935,74936],{"class":98},"({\n",[36,74938,74940],{"class":38,"line":74939},246,[36,74941,74942],{"class":42},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[36,74944,74946],{"class":38,"line":74945},247,[36,74947,74948],{"class":42},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[36,74950,74952],{"class":38,"line":74951},248,[36,74953,74954],{"class":42},"        \u002F\u002F 对象的序号应为数组长度+1\n",[36,74956,74958],{"class":38,"line":74957},249,[36,74959,74960],{"class":42},"        \u002F\u002F unameId: arr.length + 1,\n",[36,74962,74964],{"class":38,"line":74963},250,[36,74965,247],{"emptyLinePlaceholder":246},[36,74967,74969],{"class":38,"line":74968},251,[36,74970,74971],{"class":42},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[36,74973,74975],{"class":38,"line":74974},252,[36,74976,74977],{"class":42},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[36,74979,74981],{"class":38,"line":74980},253,[36,74982,74983],{"class":42},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[36,74985,74987],{"class":38,"line":74986},254,[36,74988,74989],{"class":42},"        \u002F\u002F 0当假看\n",[36,74991,74993,74996,74998,75000,75003,75005,75007,75009,75012,75014,75016,75019,75021],{"class":38,"line":74992},255,[36,74994,74995],{"class":98},"        unameId: arr.",[36,74997,52400],{"class":109},[36,74999,74246],{"class":163},[36,75001,75002],{"class":98}," arr[arr.",[36,75004,52400],{"class":109},[36,75006,52703],{"class":163},[36,75008,25555],{"class":109},[36,75010,75011],{"class":98},"].unameId ",[36,75013,1095],{"class":163},[36,75015,25555],{"class":109},[36,75017,75018],{"class":163}," :",[36,75020,25555],{"class":109},[36,75022,31899],{"class":98},[36,75024,75026],{"class":38,"line":75025},256,[36,75027,70425],{"class":98},[36,75029,75031],{"class":38,"line":75030},257,[36,75032,70430],{"class":98},[36,75034,75036],{"class":38,"line":75035},258,[36,75037,70440],{"class":98},[36,75039,75041],{"class":38,"line":75040},259,[36,75042,70435],{"class":98},[36,75044,75046],{"class":38,"line":75045},260,[36,75047,75048],{"class":98},"        city: city.value,\n",[36,75050,75052],{"class":38,"line":75051},261,[36,75053,75054],{"class":42},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[36,75056,75058],{"class":38,"line":75057},262,[36,75059,75060],{"class":42},"        \u002F\u002F time: new Date().toDateString()\n",[36,75062,75064,75067,75070],{"class":38,"line":75063},263,[36,75065,75066],{"class":98},"        time: ",[36,75068,75069],{"class":55},"getTime",[36,75071,2435],{"class":98},[36,75073,75075],{"class":38,"line":75074},264,[36,75076,65247],{"class":98},[36,75078,75080],{"class":38,"line":75079},265,[36,75081,75082],{"class":42},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[36,75084,75086,75088],{"class":38,"line":75085},266,[36,75087,70500],{"class":55},[36,75089,2435],{"class":98},[36,75091,75093,75095,75097,75099,75101],{"class":38,"line":75092},267,[36,75094,70483],{"class":109},[36,75096,1172],{"class":98},[36,75098,70488],{"class":55},[36,75100,13489],{"class":98},[36,75102,75103],{"class":42},"\u002F\u002F重置表单\n",[36,75105,75107],{"class":38,"line":75106},268,[36,75108,75109],{"class":42},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[36,75111,75113,75116,75118,75120,75123,75125,75127,75129,75131],{"class":38,"line":75112},269,[36,75114,75115],{"class":98},"      localStorage.",[36,75117,72086],{"class":55},[36,75119,621],{"class":98},[36,75121,75122],{"class":59},"'data'",[36,75124,12874],{"class":98},[36,75126,72096],{"class":109},[36,75128,1172],{"class":98},[36,75130,72101],{"class":55},[36,75132,75133],{"class":98},"(arr))\n",[36,75135,75137],{"class":38,"line":75136},270,[36,75138,33894],{"class":98},[36,75140,75142],{"class":38,"line":75141},271,[36,75143,247],{"emptyLinePlaceholder":246},[36,75145,75147],{"class":38,"line":75146},272,[36,75148,75149],{"class":42},"    \u002F\u002F 3.删除业务\n",[36,75151,75153],{"class":38,"line":75152},273,[36,75154,75155],{"class":42},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[36,75157,75159,75161,75163,75165,75167,75169,75171,75173,75175],{"class":38,"line":75158},274,[36,75160,70773],{"class":98},[36,75162,58245],{"class":55},[36,75164,621],{"class":98},[36,75166,58250],{"class":59},[36,75168,12874],{"class":98},[36,75170,54881],{"class":163},[36,75172,2130],{"class":98},[36,75174,170],{"class":5667},[36,75176,12881],{"class":98},[36,75178,75180],{"class":38,"line":75179},275,[36,75181,75182],{"class":42},"      \u002F\u002F 判断是否点击的是删除按钮\n",[36,75184,75186,75188,75190,75192,75194],{"class":38,"line":75185},276,[36,75187,54912],{"class":163},[36,75189,67466],{"class":98},[36,75191,54918],{"class":163},[36,75193,68688],{"class":59},[36,75195,12881],{"class":98},[36,75197,75199],{"class":38,"line":75198},277,[36,75200,75201],{"class":42},"        \u002F\u002F alert(1)\n",[36,75203,75205],{"class":38,"line":75204},278,[36,75206,75207],{"class":42},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[36,75209,75211],{"class":38,"line":75210},279,[36,75212,75213],{"class":42},"        \u002F\u002F console.log(e.target)\n",[36,75215,75217],{"class":38,"line":75216},280,[36,75218,75219],{"class":42},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[36,75221,75223],{"class":38,"line":75222},281,[36,75224,247],{"emptyLinePlaceholder":246},[36,75226,75228],{"class":38,"line":75227},282,[36,75229,75230],{"class":42},"        \u002F\u002F 确认框，确然是否真的要删除\n",[36,75232,75234],{"class":38,"line":75233},283,[36,75235,75236],{"class":42},"        \u002F\u002F confirm()为确认框\n",[36,75238,75240],{"class":38,"line":75239},284,[36,75241,75242],{"class":42},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[36,75244,75246,75248,75250,75253,75255,75258],{"class":38,"line":75245},285,[36,75247,2955],{"class":163},[36,75249,2130],{"class":98},[36,75251,75252],{"class":55},"confirm",[36,75254,621],{"class":98},[36,75256,75257],{"class":59},"'您确定要删除这条数据吗？'",[36,75259,75260],{"class":98},")) {\n",[36,75262,75264,75267,75269,75271,75273],{"class":38,"line":75263},286,[36,75265,75266],{"class":98},"          arr.",[36,75268,58442],{"class":55},[36,75270,70826],{"class":98},[36,75272,833],{"class":109},[36,75274,627],{"class":98},[36,75276,75278],{"class":38,"line":75277},287,[36,75279,75280],{"class":42},"          \u002F\u002F 3.4 重新渲染页面\n",[36,75282,75284,75287],{"class":38,"line":75283},288,[36,75285,75286],{"class":55},"          render",[36,75288,2435],{"class":98},[36,75290,75292],{"class":38,"line":75291},289,[36,75293,75294],{"class":42},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[36,75296,75298,75301,75303,75305,75307,75309,75311,75313,75315],{"class":38,"line":75297},290,[36,75299,75300],{"class":98},"          localStorage.",[36,75302,72086],{"class":55},[36,75304,621],{"class":98},[36,75306,75122],{"class":59},[36,75308,12874],{"class":98},[36,75310,72096],{"class":109},[36,75312,1172],{"class":98},[36,75314,72101],{"class":55},[36,75316,75133],{"class":98},[36,75318,75320],{"class":38,"line":75319},291,[36,75321,2987],{"class":98},[36,75323,75325],{"class":38,"line":75324},292,[36,75326,52830],{"class":98},[36,75328,75330],{"class":38,"line":75329},293,[36,75331,247],{"emptyLinePlaceholder":246},[36,75333,75335],{"class":38,"line":75334},294,[36,75336,33894],{"class":98},[36,75338,75340],{"class":38,"line":75339},295,[36,75341,247],{"emptyLinePlaceholder":246},[36,75343,75345,75347,75349],{"class":38,"line":75344},296,[36,75346,52849],{"class":98},[36,75348,52245],{"class":51733},[36,75350,188],{"class":98},[36,75352,75354,75356,75358],{"class":38,"line":75353},297,[36,75355,52217],{"class":98},[36,75357,52232],{"class":51733},[36,75359,188],{"class":98},[36,75361,75363],{"class":38,"line":75362},298,[36,75364,247],{"emptyLinePlaceholder":246},[36,75366,75368,75370,75372],{"class":38,"line":75367},299,[36,75369,52217],{"class":98},[36,75371,51068],{"class":51733},[36,75373,188],{"class":98},[559,75375,75377],{"id":75376},"_36-正则表达式","3.6 正则表达式",[14,75379,75380],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,75382,75383],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,75385,75386],{},"正则表达式的作用：",[1618,75388,75389,75396,75402],{},[574,75390,75391,75392,75395],{},"表单验证（ ",[765,75393,75394],{},"匹配"," ）",[574,75397,75398,75399,75395],{},"过滤敏感词（ ",[765,75400,75401],{},"替换",[574,75403,75404,75405,75395],{},"字符串中提取我们想要的部分（ ",[765,75406,75407],{},"提取",[588,75409,75411],{"id":75410},"_361-语法","3.6.1 语法",[14,75413,75414],{},"正则表达式使用步骤：",[571,75416,75417,75420],{},[574,75418,75419],{},"定义规则",[574,75421,75422],{},"查找是否匹配",[14,75424,75425],{},"正则表达式里边不需要写引号",[14,75427,75428],{},[1941,75429],{"alt":31,"src":75430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,75432,75433],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,75435,75436],{},"reg.test(str)",[14,75438,75439],{},[1941,75440],{"alt":31,"src":75441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,75443,75444],{},[1941,75445],{"alt":31,"src":75446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[588,75448,75450],{"id":75449},"_362-元字符","3.6.2 元字符",[571,75452,75453,75456,75459,75462,75469],{},[574,75454,75455],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[574,75457,75458],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[574,75460,75461],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[574,75463,75464,75465],{},"正则验证工具：",[20,75466,75467],{"href":75467,"rel":75468},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24],[574,75470,75471],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22437,75473,75475],{"id":75474},"_3621-边界符","3.6.2.1 边界符",[14,75477,75478],{},[1941,75479],{"alt":31,"src":75480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,75482,75483],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,75485,75486],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,75488,75489],{},"只匹配一次",[14,75491,75492],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22437,75494,75496],{"id":75495},"_3622-量词","3.6.2.2 量词",[14,75498,75499],{},[1941,75500],{"alt":31,"src":75501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,75503,75504],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22437,75506,75508],{"id":75507},"_3623-元字符","3.6.2.3 元字符",[14,75510,75511],{},[1941,75512],{"alt":31,"src":75513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,75515,75516],{},"匹配的是a或b或c []只选一个",[14,75518,75519],{},[1941,75520],{"alt":31,"src":75521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,75523,75524],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,75526,75527],{},[1941,75528],{"alt":31,"src":75529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,75531,75532],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,75534,75535],{},[1941,75536],{"alt":31,"src":75537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[26,75539,75541],{"className":51066,"code":75540,"language":51068,"meta":31,"style":31},"\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",[33,75542,75543,75553,75567,75571,75579,75593,75613,75625,75633,75637,75645,75653,75658,75689,75716,75744,75748,75753,75781,75812,75817,75822,75853,75885,75917,75921,75926,75957,75987,76017,76021,76026,76057,76088,76118,76148,76152,76157,76190,76194,76199,76230,76261,76265,76270,76301,76331,76362,76366,76371,76403,76434,76465,76492,76523,76555,76588,76619,76650,76682,76713,76721,76729,76733],{"__ignoreMap":31},[36,75544,75545,75547,75549,75551],{"class":38,"line":39},[36,75546,51730],{"class":98},[36,75548,51734],{"class":51733},[36,75550,51737],{"class":55},[36,75552,188],{"class":98},[36,75554,75555,75557,75559,75561,75563,75565],{"class":38,"line":46},[36,75556,179],{"class":98},[36,75558,51068],{"class":51733},[36,75560,51748],{"class":55},[36,75562,176],{"class":98},[36,75564,51753],{"class":59},[36,75566,188],{"class":98},[36,75568,75569],{"class":38,"line":52},[36,75570,247],{"emptyLinePlaceholder":246},[36,75572,75573,75575,75577],{"class":38,"line":66},[36,75574,179],{"class":98},[36,75576,51766],{"class":51733},[36,75578,188],{"class":98},[36,75580,75581,75583,75585,75587,75589,75591],{"class":38,"line":72},[36,75582,52576],{"class":98},[36,75584,51776],{"class":51733},[36,75586,51779],{"class":55},[36,75588,176],{"class":98},[36,75590,51784],{"class":59},[36,75592,188],{"class":98},[36,75594,75595,75597,75599,75601,75603,75605,75607,75609,75611],{"class":38,"line":82},[36,75596,52576],{"class":98},[36,75598,51776],{"class":51733},[36,75600,15359],{"class":55},[36,75602,176],{"class":98},[36,75604,51823],{"class":59},[36,75606,51803],{"class":55},[36,75608,176],{"class":98},[36,75610,51830],{"class":59},[36,75612,188],{"class":98},[36,75614,75615,75617,75619,75621,75623],{"class":38,"line":88},[36,75616,52576],{"class":98},[36,75618,51839],{"class":51733},[36,75620,51842],{"class":98},[36,75622,51839],{"class":51733},[36,75624,188],{"class":98},[36,75626,75627,75629,75631],{"class":38,"line":113},[36,75628,52217],{"class":98},[36,75630,51766],{"class":51733},[36,75632,188],{"class":98},[36,75634,75635],{"class":38,"line":119},[36,75636,247],{"emptyLinePlaceholder":246},[36,75638,75639,75641,75643],{"class":38,"line":131},[36,75640,179],{"class":98},[36,75642,52232],{"class":51733},[36,75644,188],{"class":98},[36,75646,75647,75649,75651],{"class":38,"line":137},[36,75648,52576],{"class":98},[36,75650,52245],{"class":51733},[36,75652,188],{"class":98},[36,75654,75655],{"class":38,"line":147},[36,75656,75657],{"class":42},"    \u002F\u002F 元字符中\n",[36,75659,75660,75662,75664,75666,75668,75671,75673,75675,75678,75680,75683,75686],{"class":38,"line":153},[36,75661,74185],{"class":98},[36,75663,58679],{"class":55},[36,75665,621],{"class":98},[36,75667,1198],{"class":59},[36,75669,75670],{"class":48410},"哈",[36,75672,1198],{"class":59},[36,75674,1172],{"class":98},[36,75676,75677],{"class":55},"test",[36,75679,621],{"class":98},[36,75681,75682],{"class":59},"'哈'",[36,75684,75685],{"class":98},"))  ",[36,75687,75688],{"class":42},"\u002F\u002Ftrue\n",[36,75690,75691,75693,75695,75697,75699,75701,75703,75705,75707,75709,75712,75714],{"class":38,"line":191},[36,75692,74185],{"class":98},[36,75694,58679],{"class":55},[36,75696,621],{"class":98},[36,75698,1198],{"class":59},[36,75700,75670],{"class":48410},[36,75702,1198],{"class":59},[36,75704,1172],{"class":98},[36,75706,75677],{"class":55},[36,75708,621],{"class":98},[36,75710,75711],{"class":59},"'哈哈'",[36,75713,75685],{"class":98},[36,75715,75688],{"class":42},[36,75717,75718,75720,75722,75724,75726,75728,75730,75732,75734,75736,75739,75742],{"class":38,"line":197},[36,75719,74185],{"class":98},[36,75721,58679],{"class":55},[36,75723,621],{"class":98},[36,75725,1198],{"class":59},[36,75727,75670],{"class":48410},[36,75729,1198],{"class":59},[36,75731,1172],{"class":98},[36,75733,75677],{"class":55},[36,75735,621],{"class":98},[36,75737,75738],{"class":59},"'二哈'",[36,75740,75741],{"class":98},"))   ",[36,75743,75688],{"class":42},[36,75745,75746],{"class":38,"line":217},[36,75747,247],{"emptyLinePlaceholder":246},[36,75749,75750],{"class":38,"line":223},[36,75751,75752],{"class":42},"    \u002F\u002F 1.边界符\n",[36,75754,75755,75757,75759,75761,75763,75765,75767,75769,75771,75773,75775,75777,75779],{"class":38,"line":243},[36,75756,74185],{"class":98},[36,75758,58679],{"class":55},[36,75760,621],{"class":98},[36,75762,1198],{"class":59},[36,75764,1577],{"class":163},[36,75766,75670],{"class":48410},[36,75768,1198],{"class":59},[36,75770,1172],{"class":98},[36,75772,75677],{"class":55},[36,75774,621],{"class":98},[36,75776,75682],{"class":59},[36,75778,75685],{"class":98},[36,75780,75688],{"class":42},[36,75782,75783,75785,75787,75789,75791,75793,75795,75797,75799,75801,75803,75805,75807,75809],{"class":38,"line":250},[36,75784,74185],{"class":98},[36,75786,58679],{"class":55},[36,75788,621],{"class":98},[36,75790,1198],{"class":59},[36,75792,1577],{"class":163},[36,75794,75670],{"class":48410},[36,75796,917],{"class":163},[36,75798,1198],{"class":59},[36,75800,1172],{"class":98},[36,75802,75677],{"class":55},[36,75804,621],{"class":98},[36,75806,75711],{"class":59},[36,75808,75685],{"class":98},[36,75810,75811],{"class":42},"\u002F\u002Ffalse\n",[36,75813,75814],{"class":38,"line":256},[36,75815,75816],{"class":42},"    \u002F\u002F 2.量词\n",[36,75818,75819],{"class":38,"line":273},[36,75820,75821],{"class":42},"    \u002F\u002F 量词 * 类似于 >= 0\n",[36,75823,75824,75826,75828,75830,75832,75834,75836,75839,75841,75843,75845,75847,75849,75851],{"class":38,"line":278},[36,75825,74185],{"class":98},[36,75827,58679],{"class":55},[36,75829,621],{"class":98},[36,75831,1198],{"class":59},[36,75833,1577],{"class":163},[36,75835,75670],{"class":48410},[36,75837,75838],{"class":163},"*$",[36,75840,1198],{"class":59},[36,75842,1172],{"class":98},[36,75844,75677],{"class":55},[36,75846,621],{"class":98},[36,75848,75711],{"class":59},[36,75850,75685],{"class":98},[36,75852,75688],{"class":42},[36,75854,75855,75857,75859,75861,75863,75865,75867,75869,75871,75873,75875,75877,75880,75882],{"class":38,"line":284},[36,75856,74185],{"class":98},[36,75858,58679],{"class":55},[36,75860,621],{"class":98},[36,75862,1198],{"class":59},[36,75864,1577],{"class":163},[36,75866,75670],{"class":48410},[36,75868,75838],{"class":163},[36,75870,1198],{"class":59},[36,75872,1172],{"class":98},[36,75874,75677],{"class":55},[36,75876,621],{"class":98},[36,75878,75879],{"class":59},"'二哈好傻'",[36,75881,75685],{"class":98},[36,75883,75884],{"class":42},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[36,75886,75887,75889,75891,75893,75895,75897,75899,75901,75903,75905,75907,75909,75912,75914],{"class":38,"line":315},[36,75888,74185],{"class":98},[36,75890,58679],{"class":55},[36,75892,621],{"class":98},[36,75894,1198],{"class":59},[36,75896,1577],{"class":163},[36,75898,75670],{"class":48410},[36,75900,75838],{"class":163},[36,75902,1198],{"class":59},[36,75904,1172],{"class":98},[36,75906,75677],{"class":55},[36,75908,621],{"class":98},[36,75910,75911],{"class":59},"'哈好哈'",[36,75913,75741],{"class":98},[36,75915,75916],{"class":42},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[36,75918,75919],{"class":38,"line":320},[36,75920,247],{"emptyLinePlaceholder":246},[36,75922,75923],{"class":38,"line":326},[36,75924,75925],{"class":42},"    \u002F\u002F +类似于>=1\n",[36,75927,75928,75930,75932,75934,75936,75938,75940,75943,75945,75947,75949,75951,75953,75955],{"class":38,"line":343},[36,75929,74185],{"class":98},[36,75931,58679],{"class":55},[36,75933,621],{"class":98},[36,75935,1198],{"class":59},[36,75937,1577],{"class":163},[36,75939,75670],{"class":48410},[36,75941,75942],{"class":163},"+$",[36,75944,1198],{"class":59},[36,75946,1172],{"class":98},[36,75948,75677],{"class":55},[36,75950,621],{"class":98},[36,75952,75711],{"class":59},[36,75954,75685],{"class":98},[36,75956,75688],{"class":42},[36,75958,75959,75961,75963,75965,75967,75969,75971,75973,75975,75977,75979,75981,75983,75985],{"class":38,"line":348},[36,75960,74185],{"class":98},[36,75962,58679],{"class":55},[36,75964,621],{"class":98},[36,75966,1198],{"class":59},[36,75968,1577],{"class":163},[36,75970,75670],{"class":48410},[36,75972,75942],{"class":163},[36,75974,1198],{"class":59},[36,75976,1172],{"class":98},[36,75978,75677],{"class":55},[36,75980,621],{"class":98},[36,75982,75879],{"class":59},[36,75984,75685],{"class":98},[36,75986,75884],{"class":42},[36,75988,75989,75991,75993,75995,75997,75999,76001,76003,76005,76007,76009,76011,76013,76015],{"class":38,"line":354},[36,75990,74185],{"class":98},[36,75992,58679],{"class":55},[36,75994,621],{"class":98},[36,75996,1198],{"class":59},[36,75998,1577],{"class":163},[36,76000,75670],{"class":48410},[36,76002,75942],{"class":163},[36,76004,1198],{"class":59},[36,76006,1172],{"class":98},[36,76008,75677],{"class":55},[36,76010,621],{"class":98},[36,76012,75911],{"class":59},[36,76014,75741],{"class":98},[36,76016,75811],{"class":42},[36,76018,76019],{"class":38,"line":370},[36,76020,247],{"emptyLinePlaceholder":246},[36,76022,76023],{"class":38,"line":375},[36,76024,76025],{"class":42},"    \u002F\u002F ?类似于0次或一次\n",[36,76027,76028,76030,76032,76034,76036,76038,76041,76043,76045,76047,76049,76051,76053,76055],{"class":38,"line":381},[36,76029,74185],{"class":98},[36,76031,58679],{"class":55},[36,76033,621],{"class":98},[36,76035,1198],{"class":59},[36,76037,1577],{"class":163},[36,76039,76040],{"class":48410},"哈？",[36,76042,917],{"class":163},[36,76044,1198],{"class":59},[36,76046,1172],{"class":98},[36,76048,75677],{"class":55},[36,76050,621],{"class":98},[36,76052,74660],{"class":59},[36,76054,75741],{"class":98},[36,76056,75688],{"class":42},[36,76058,76059,76061,76063,76065,76067,76069,76071,76074,76076,76078,76080,76082,76084,76086],{"class":38,"line":399},[36,76060,74185],{"class":98},[36,76062,58679],{"class":55},[36,76064,621],{"class":98},[36,76066,1198],{"class":59},[36,76068,1577],{"class":163},[36,76070,75670],{"class":48410},[36,76072,76073],{"class":163},"?$",[36,76075,1198],{"class":59},[36,76077,1172],{"class":98},[36,76079,75677],{"class":55},[36,76081,621],{"class":98},[36,76083,75711],{"class":59},[36,76085,75685],{"class":98},[36,76087,75811],{"class":42},[36,76089,76090,76092,76094,76096,76098,76100,76102,76104,76106,76108,76110,76112,76114,76116],{"class":38,"line":404},[36,76091,74185],{"class":98},[36,76093,58679],{"class":55},[36,76095,621],{"class":98},[36,76097,1198],{"class":59},[36,76099,1577],{"class":163},[36,76101,75670],{"class":48410},[36,76103,76073],{"class":163},[36,76105,1198],{"class":59},[36,76107,1172],{"class":98},[36,76109,75677],{"class":55},[36,76111,621],{"class":98},[36,76113,75879],{"class":59},[36,76115,75685],{"class":98},[36,76117,75884],{"class":42},[36,76119,76120,76122,76124,76126,76128,76130,76132,76134,76136,76138,76140,76142,76144,76146],{"class":38,"line":410},[36,76121,74185],{"class":98},[36,76123,58679],{"class":55},[36,76125,621],{"class":98},[36,76127,1198],{"class":59},[36,76129,1577],{"class":163},[36,76131,75670],{"class":48410},[36,76133,76073],{"class":163},[36,76135,1198],{"class":59},[36,76137,1172],{"class":98},[36,76139,75677],{"class":55},[36,76141,621],{"class":98},[36,76143,75911],{"class":59},[36,76145,75685],{"class":98},[36,76147,75811],{"class":42},[36,76149,76150],{"class":38,"line":423},[36,76151,247],{"emptyLinePlaceholder":246},[36,76153,76154],{"class":38,"line":436},[36,76155,76156],{"class":42},"    \u002F\u002F {n}写几，就必须出现几次\n",[36,76158,76159,76161,76163,76165,76167,76169,76171,76174,76176,76178,76180,76182,76185,76188],{"class":38,"line":441},[36,76160,74185],{"class":98},[36,76162,58679],{"class":55},[36,76164,621],{"class":98},[36,76166,1198],{"class":59},[36,76168,1577],{"class":163},[36,76170,75670],{"class":48410},[36,76172,76173],{"class":163},"{4}$",[36,76175,1198],{"class":59},[36,76177,1172],{"class":98},[36,76179,75677],{"class":55},[36,76181,621],{"class":98},[36,76183,76184],{"class":59},"'哈哈哈哈'",[36,76186,76187],{"class":98},")) ",[36,76189,75688],{"class":42},[36,76191,76192],{"class":38,"line":447},[36,76193,247],{"emptyLinePlaceholder":246},[36,76195,76196],{"class":38,"line":465},[36,76197,76198],{"class":42},"    \u002F\u002F {n,}大于等于n次\n",[36,76200,76201,76203,76205,76207,76209,76211,76213,76216,76218,76220,76222,76224,76226,76228],{"class":38,"line":470},[36,76202,74185],{"class":98},[36,76204,58679],{"class":55},[36,76206,621],{"class":98},[36,76208,1198],{"class":59},[36,76210,1577],{"class":163},[36,76212,75670],{"class":48410},[36,76214,76215],{"class":163},"{4,}$",[36,76217,1198],{"class":59},[36,76219,1172],{"class":98},[36,76221,75677],{"class":55},[36,76223,621],{"class":98},[36,76225,76184],{"class":59},[36,76227,76187],{"class":98},[36,76229,75688],{"class":42},[36,76231,76232,76234,76236,76238,76240,76242,76244,76246,76248,76250,76252,76254,76257,76259],{"class":38,"line":476},[36,76233,74185],{"class":98},[36,76235,58679],{"class":55},[36,76237,621],{"class":98},[36,76239,1198],{"class":59},[36,76241,1577],{"class":163},[36,76243,75670],{"class":48410},[36,76245,76215],{"class":163},[36,76247,1198],{"class":59},[36,76249,1172],{"class":98},[36,76251,75677],{"class":55},[36,76253,621],{"class":98},[36,76255,76256],{"class":59},"'哈哈哈哈哈'",[36,76258,76187],{"class":98},[36,76260,75688],{"class":42},[36,76262,76263],{"class":38,"line":496},[36,76264,247],{"emptyLinePlaceholder":246},[36,76266,76267],{"class":38,"line":501},[36,76268,76269],{"class":42},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[36,76271,76272,76274,76276,76278,76280,76282,76284,76287,76289,76291,76293,76295,76297,76299],{"class":38,"line":507},[36,76273,74185],{"class":98},[36,76275,58679],{"class":55},[36,76277,621],{"class":98},[36,76279,1198],{"class":59},[36,76281,1577],{"class":163},[36,76283,75670],{"class":48410},[36,76285,76286],{"class":163},"{4,6}$",[36,76288,1198],{"class":59},[36,76290,1172],{"class":98},[36,76292,75677],{"class":55},[36,76294,621],{"class":98},[36,76296,76184],{"class":59},[36,76298,76187],{"class":98},[36,76300,75688],{"class":42},[36,76302,76303,76305,76307,76309,76311,76313,76315,76317,76319,76321,76323,76325,76327,76329],{"class":38,"line":517},[36,76304,74185],{"class":98},[36,76306,58679],{"class":55},[36,76308,621],{"class":98},[36,76310,1198],{"class":59},[36,76312,1577],{"class":163},[36,76314,75670],{"class":48410},[36,76316,76286],{"class":163},[36,76318,1198],{"class":59},[36,76320,1172],{"class":98},[36,76322,75677],{"class":55},[36,76324,621],{"class":98},[36,76326,76256],{"class":59},[36,76328,76187],{"class":98},[36,76330,75688],{"class":42},[36,76332,76333,76335,76337,76339,76341,76343,76345,76347,76349,76351,76353,76355,76358,76360],{"class":38,"line":522},[36,76334,74185],{"class":98},[36,76336,58679],{"class":55},[36,76338,621],{"class":98},[36,76340,1198],{"class":59},[36,76342,1577],{"class":163},[36,76344,75670],{"class":48410},[36,76346,76286],{"class":163},[36,76348,1198],{"class":59},[36,76350,1172],{"class":98},[36,76352,75677],{"class":55},[36,76354,621],{"class":98},[36,76356,76357],{"class":59},"'哈哈哈哈哈哈哈'",[36,76359,76187],{"class":98},[36,76361,75811],{"class":42},[36,76363,76364],{"class":38,"line":528},[36,76365,247],{"emptyLinePlaceholder":246},[36,76367,76368],{"class":38,"line":10203},[36,76369,76370],{"class":42},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[36,76372,76373,76375,76377,76379,76381,76383,76386,76388,76390,76392,76394,76396,76399,76401],{"class":38,"line":10227},[36,76374,74185],{"class":98},[36,76376,58679],{"class":55},[36,76378,621],{"class":98},[36,76380,1198],{"class":59},[36,76382,1577],{"class":163},[36,76384,76385],{"class":109},"[abc]",[36,76387,917],{"class":163},[36,76389,1198],{"class":59},[36,76391,1172],{"class":98},[36,76393,75677],{"class":55},[36,76395,621],{"class":98},[36,76397,76398],{"class":59},"'a'",[36,76400,75685],{"class":98},[36,76402,75688],{"class":42},[36,76404,76405,76407,76409,76411,76413,76415,76417,76419,76421,76423,76425,76427,76430,76432],{"class":38,"line":10232},[36,76406,74185],{"class":98},[36,76408,58679],{"class":55},[36,76410,621],{"class":98},[36,76412,1198],{"class":59},[36,76414,1577],{"class":163},[36,76416,76385],{"class":109},[36,76418,917],{"class":163},[36,76420,1198],{"class":59},[36,76422,1172],{"class":98},[36,76424,75677],{"class":55},[36,76426,621],{"class":98},[36,76428,76429],{"class":59},"'b'",[36,76431,75685],{"class":98},[36,76433,75688],{"class":42},[36,76435,76436,76438,76440,76442,76444,76446,76448,76450,76452,76454,76456,76458,76461,76463],{"class":38,"line":10237},[36,76437,74185],{"class":98},[36,76439,58679],{"class":55},[36,76441,621],{"class":98},[36,76443,1198],{"class":59},[36,76445,1577],{"class":163},[36,76447,76385],{"class":109},[36,76449,917],{"class":163},[36,76451,1198],{"class":59},[36,76453,1172],{"class":98},[36,76455,75677],{"class":55},[36,76457,621],{"class":98},[36,76459,76460],{"class":59},"'c'",[36,76462,75685],{"class":98},[36,76464,75688],{"class":42},[36,76466,76467,76469,76471,76473,76475,76477,76479,76481,76483,76485,76488,76490],{"class":38,"line":10242},[36,76468,74185],{"class":98},[36,76470,58679],{"class":55},[36,76472,621],{"class":98},[36,76474,1198],{"class":59},[36,76476,76385],{"class":109},[36,76478,1198],{"class":59},[36,76480,1172],{"class":98},[36,76482,75677],{"class":55},[36,76484,621],{"class":98},[36,76486,76487],{"class":59},"'ab'",[36,76489,75685],{"class":98},[36,76491,75688],{"class":42},[36,76493,76494,76496,76498,76500,76502,76504,76506,76508,76510,76512,76514,76516,76518,76520],{"class":38,"line":10251},[36,76495,74185],{"class":98},[36,76497,58679],{"class":55},[36,76499,621],{"class":98},[36,76501,1198],{"class":59},[36,76503,1577],{"class":163},[36,76505,76385],{"class":109},[36,76507,917],{"class":163},[36,76509,1198],{"class":59},[36,76511,1172],{"class":98},[36,76513,75677],{"class":55},[36,76515,621],{"class":98},[36,76517,76487],{"class":59},[36,76519,75685],{"class":98},[36,76521,76522],{"class":42},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[36,76524,76525,76527,76529,76531,76533,76535,76537,76540,76542,76544,76546,76548,76550,76552],{"class":38,"line":10256},[36,76526,74185],{"class":98},[36,76528,58679],{"class":55},[36,76530,621],{"class":98},[36,76532,1198],{"class":59},[36,76534,1577],{"class":163},[36,76536,76385],{"class":109},[36,76538,76539],{"class":163},"{2}$",[36,76541,1198],{"class":59},[36,76543,1172],{"class":98},[36,76545,75677],{"class":55},[36,76547,621],{"class":98},[36,76549,76487],{"class":59},[36,76551,75685],{"class":98},[36,76553,76554],{"class":42},"\u002F\u002Ftrue   可以选两个\n",[36,76556,76557,76559,76561,76563,76565,76567,76570,76572,76574,76576,76578,76580,76583,76585],{"class":38,"line":10262},[36,76558,74185],{"class":98},[36,76560,58679],{"class":55},[36,76562,621],{"class":98},[36,76564,1198],{"class":59},[36,76566,1577],{"class":163},[36,76568,76569],{"class":109},"[a-z]",[36,76571,917],{"class":163},[36,76573,1198],{"class":59},[36,76575,1172],{"class":98},[36,76577,75677],{"class":55},[36,76579,621],{"class":98},[36,76581,76582],{"class":59},"'p'",[36,76584,75741],{"class":98},[36,76586,76587],{"class":42},"\u002F\u002Ftrue   依然只能选一个\n",[36,76589,76590,76592,76594,76596,76598,76600,76603,76605,76607,76609,76611,76613,76615,76617],{"class":38,"line":10283},[36,76591,74185],{"class":98},[36,76593,58679],{"class":55},[36,76595,621],{"class":98},[36,76597,1198],{"class":59},[36,76599,1577],{"class":163},[36,76601,76602],{"class":109},"[A-Z]",[36,76604,917],{"class":163},[36,76606,1198],{"class":59},[36,76608,1172],{"class":98},[36,76610,75677],{"class":55},[36,76612,621],{"class":98},[36,76614,76582],{"class":59},[36,76616,75741],{"class":98},[36,76618,75811],{"class":42},[36,76620,76621,76623,76625,76627,76629,76631,76633,76635,76637,76639,76641,76643,76646,76648],{"class":38,"line":10289},[36,76622,74185],{"class":98},[36,76624,58679],{"class":55},[36,76626,621],{"class":98},[36,76628,1198],{"class":59},[36,76630,1577],{"class":163},[36,76632,76602],{"class":109},[36,76634,917],{"class":163},[36,76636,1198],{"class":59},[36,76638,1172],{"class":98},[36,76640,75677],{"class":55},[36,76642,621],{"class":98},[36,76644,76645],{"class":59},"'P'",[36,76647,75741],{"class":98},[36,76649,75688],{"class":42},[36,76651,76652,76654,76656,76658,76660,76662,76665,76667,76669,76671,76673,76675,76678,76680],{"class":38,"line":10303},[36,76653,74185],{"class":98},[36,76655,58679],{"class":55},[36,76657,621],{"class":98},[36,76659,1198],{"class":59},[36,76661,1577],{"class":163},[36,76663,76664],{"class":109},"[0-9]",[36,76666,917],{"class":163},[36,76668,1198],{"class":59},[36,76670,1172],{"class":98},[36,76672,75677],{"class":55},[36,76674,621],{"class":98},[36,76676,76677],{"class":59},"'0'",[36,76679,75741],{"class":98},[36,76681,75688],{"class":42},[36,76683,76684,76686,76688,76690,76692,76694,76697,76699,76701,76703,76705,76707,76709,76711],{"class":38,"line":10309},[36,76685,74185],{"class":98},[36,76687,58679],{"class":55},[36,76689,621],{"class":98},[36,76691,1198],{"class":59},[36,76693,1577],{"class":163},[36,76695,76696],{"class":109},"[a-zA-Z0-9]",[36,76698,917],{"class":163},[36,76700,1198],{"class":59},[36,76702,1172],{"class":98},[36,76704,75677],{"class":55},[36,76706,621],{"class":98},[36,76708,76582],{"class":59},[36,76710,75685],{"class":98},[36,76712,75688],{"class":42},[36,76714,76715,76717,76719],{"class":38,"line":10336},[36,76716,52849],{"class":98},[36,76718,52245],{"class":51733},[36,76720,188],{"class":98},[36,76722,76723,76725,76727],{"class":38,"line":10345},[36,76724,52217],{"class":98},[36,76726,52232],{"class":51733},[36,76728,188],{"class":98},[36,76730,76731],{"class":38,"line":10351},[36,76732,247],{"emptyLinePlaceholder":246},[36,76734,76735,76737,76739],{"class":38,"line":10359},[36,76736,52217],{"class":98},[36,76738,51068],{"class":51733},[36,76740,188],{"class":98},[22437,76742,76744],{"id":76743},"_3624-修饰符","3.6.2.4 修饰符",[14,76746,76747],{},[1941,76748],{"alt":31,"src":76749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,76751,76752],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,76754,76755],{},[1941,76756],{"alt":31,"src":76757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[26,76759,76761],{"className":51066,"code":76760,"language":51068,"meta":31,"style":31},"\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",[33,76762,76763,76773,76787,76795,76809,76829,76841,76849,76857,76865,76897,76928,76933,76965,76976,77009,77018,77026,77034],{"__ignoreMap":31},[36,76764,76765,76767,76769,76771],{"class":38,"line":39},[36,76766,51730],{"class":98},[36,76768,51734],{"class":51733},[36,76770,51737],{"class":55},[36,76772,188],{"class":98},[36,76774,76775,76777,76779,76781,76783,76785],{"class":38,"line":46},[36,76776,179],{"class":98},[36,76778,51068],{"class":51733},[36,76780,51748],{"class":55},[36,76782,176],{"class":98},[36,76784,51753],{"class":59},[36,76786,188],{"class":98},[36,76788,76789,76791,76793],{"class":38,"line":52},[36,76790,179],{"class":98},[36,76792,51766],{"class":51733},[36,76794,188],{"class":98},[36,76796,76797,76799,76801,76803,76805,76807],{"class":38,"line":66},[36,76798,52576],{"class":98},[36,76800,51776],{"class":51733},[36,76802,51779],{"class":55},[36,76804,176],{"class":98},[36,76806,51784],{"class":59},[36,76808,188],{"class":98},[36,76810,76811,76813,76815,76817,76819,76821,76823,76825,76827],{"class":38,"line":72},[36,76812,52576],{"class":98},[36,76814,51776],{"class":51733},[36,76816,15359],{"class":55},[36,76818,176],{"class":98},[36,76820,51823],{"class":59},[36,76822,51803],{"class":55},[36,76824,176],{"class":98},[36,76826,51830],{"class":59},[36,76828,188],{"class":98},[36,76830,76831,76833,76835,76837,76839],{"class":38,"line":82},[36,76832,52576],{"class":98},[36,76834,51839],{"class":51733},[36,76836,51842],{"class":98},[36,76838,51839],{"class":51733},[36,76840,188],{"class":98},[36,76842,76843,76845,76847],{"class":38,"line":88},[36,76844,52217],{"class":98},[36,76846,51766],{"class":51733},[36,76848,188],{"class":98},[36,76850,76851,76853,76855],{"class":38,"line":113},[36,76852,179],{"class":98},[36,76854,52232],{"class":51733},[36,76856,188],{"class":98},[36,76858,76859,76861,76863],{"class":38,"line":119},[36,76860,52576],{"class":98},[36,76862,52245],{"class":51733},[36,76864,188],{"class":98},[36,76866,76867,76869,76871,76873,76875,76877,76880,76882,76884,76886,76888,76890,76893,76895],{"class":38,"line":131},[36,76868,74185],{"class":98},[36,76870,58679],{"class":55},[36,76872,621],{"class":98},[36,76874,1198],{"class":59},[36,76876,1577],{"class":163},[36,76878,76879],{"class":48410},"java",[36,76881,917],{"class":163},[36,76883,1198],{"class":59},[36,76885,1172],{"class":98},[36,76887,75677],{"class":55},[36,76889,621],{"class":98},[36,76891,76892],{"class":59},"'java'",[36,76894,76187],{"class":98},[36,76896,75688],{"class":42},[36,76898,76899,76901,76903,76905,76907,76909,76911,76913,76915,76917,76919,76921,76924,76926],{"class":38,"line":137},[36,76900,74185],{"class":98},[36,76902,58679],{"class":55},[36,76904,621],{"class":98},[36,76906,1198],{"class":59},[36,76908,1577],{"class":163},[36,76910,76879],{"class":48410},[36,76912,917],{"class":163},[36,76914,1198],{"class":59},[36,76916,1172],{"class":98},[36,76918,75677],{"class":55},[36,76920,621],{"class":98},[36,76922,76923],{"class":59},"'Java'",[36,76925,76187],{"class":98},[36,76927,75811],{"class":42},[36,76929,76930],{"class":38,"line":147},[36,76931,76932],{"class":42},"    \u002F\u002F 不区分大小写、\n",[36,76934,76935,76937,76939,76941,76943,76945,76947,76949,76951,76953,76955,76957,76959,76961,76963],{"class":38,"line":153},[36,76936,74185],{"class":98},[36,76938,58679],{"class":55},[36,76940,621],{"class":98},[36,76942,1198],{"class":59},[36,76944,1577],{"class":163},[36,76946,76879],{"class":48410},[36,76948,917],{"class":163},[36,76950,1198],{"class":59},[36,76952,1055],{"class":163},[36,76954,1172],{"class":98},[36,76956,75677],{"class":55},[36,76958,621],{"class":98},[36,76960,76923],{"class":59},[36,76962,76187],{"class":98},[36,76964,75688],{"class":42},[36,76966,76967,76969,76971,76973],{"class":38,"line":191},[36,76968,11660],{"class":163},[36,76970,74351],{"class":109},[36,76972,14003],{"class":163},[36,76974,76975],{"class":59}," 'java是一门编程语言，学完java工资很高'\n",[36,76977,76978,76980,76983,76985,76988,76991,76993,76995,76997,76999,77002,77004,77007],{"class":38,"line":197},[36,76979,11660],{"class":163},[36,76981,76982],{"class":109}," result",[36,76984,14003],{"class":163},[36,76986,76987],{"class":98}," str.",[36,76989,76990],{"class":55},"replace",[36,76992,621],{"class":98},[36,76994,1198],{"class":59},[36,76996,76879],{"class":48410},[36,76998,1198],{"class":59},[36,77000,77001],{"class":163},"ig",[36,77003,12874],{"class":98},[36,77005,77006],{"class":59},"'前端'",[36,77008,627],{"class":98},[36,77010,77011,77013,77015],{"class":38,"line":217},[36,77012,74185],{"class":98},[36,77014,58679],{"class":55},[36,77016,77017],{"class":98},"(result)\n",[36,77019,77020,77022,77024],{"class":38,"line":223},[36,77021,52849],{"class":98},[36,77023,52245],{"class":51733},[36,77025,188],{"class":98},[36,77027,77028,77030,77032],{"class":38,"line":243},[36,77029,52217],{"class":98},[36,77031,52232],{"class":51733},[36,77033,188],{"class":98},[36,77035,77036,77038,77040],{"class":38,"line":250},[36,77037,52217],{"class":98},[36,77039,51068],{"class":51733},[36,77041,188],{"class":98},[537,77043,77044],{},"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":31,"searchDepth":46,"depth":46,"links":77046},[77047,77057,77069,77086,77093,77101],{"id":53792,"depth":46,"text":53793,"children":77048},[77049,77050,77051,77052,77053,77054,77055,77056],{"id":53796,"depth":52,"text":53797},{"id":53829,"depth":52,"text":53830},{"id":53868,"depth":52,"text":53869},{"id":54026,"depth":52,"text":54027},{"id":54074,"depth":52,"text":54075},{"id":54211,"depth":52,"text":54212},{"id":54533,"depth":52,"text":54534},{"id":57521,"depth":52,"text":57522},{"id":57549,"depth":46,"text":57550,"children":77058},[77059,77060,77061,77062,77063,77064,77065,77066,77067,77068],{"id":57553,"depth":52,"text":57554},{"id":57576,"depth":52,"text":57577},{"id":58491,"depth":52,"text":58492},{"id":59181,"depth":52,"text":59182},{"id":59463,"depth":52,"text":59464},{"id":63624,"depth":52,"text":63625},{"id":63794,"depth":52,"text":63795},{"id":63922,"depth":52,"text":63923},{"id":63947,"depth":52,"text":63948},{"id":65336,"depth":52,"text":65337},{"id":66489,"depth":46,"text":66490,"children":77070},[77071,77072,77073,77074,77075,77076,77077,77078,77079,77080,77081,77082,77083,77084,77085],{"id":66493,"depth":52,"text":66494},{"id":67147,"depth":52,"text":67148},{"id":68842,"depth":52,"text":68843},{"id":68883,"depth":52,"text":68884},{"id":68925,"depth":52,"text":68926},{"id":68939,"depth":52,"text":68940},{"id":68988,"depth":52,"text":68989},{"id":69000,"depth":52,"text":69001},{"id":69015,"depth":52,"text":69016},{"id":69051,"depth":52,"text":69052},{"id":69132,"depth":52,"text":69133},{"id":69260,"depth":52,"text":69261},{"id":69272,"depth":52,"text":69273},{"id":69291,"depth":52,"text":69292},{"id":71402,"depth":52,"text":71403},{"id":71421,"depth":46,"text":71422,"children":77087},[77088,77089,77090,77091,77092],{"id":71442,"depth":52,"text":71443},{"id":71462,"depth":52,"text":71463},{"id":71511,"depth":52,"text":71512},{"id":71636,"depth":52,"text":71637},{"id":71817,"depth":52,"text":71818},{"id":71835,"depth":46,"text":71836,"children":77094},[77095,77096,77097,77098,77099,77100],{"id":71850,"depth":52,"text":71851},{"id":71909,"depth":52,"text":71910},{"id":71933,"depth":52,"text":71934},{"id":72253,"depth":52,"text":72254},{"id":72285,"depth":52,"text":72286},{"id":72308,"depth":52,"text":72309},{"id":75376,"depth":46,"text":75377,"children":77102},[77103,77104],{"id":75410,"depth":52,"text":75411},{"id":75449,"depth":52,"text":75450},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53764,"description":542},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":77111,"title":77112,"body":77113,"description":542,"extension":543,"meta":93250,"navigation":246,"path":93251,"seo":93252,"stem":93253,"__hash__":93254},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":77114,"toc":93186},[77115,77118,77121,77125,77129,77134,77139,77150,77154,77159,77162,77166,77169,77174,77178,77182,77185,77190,77193,77197,77200,77208,77211,77215,77220,77225,77228,77232,77237,77242,77245,77249,77254,77257,77262,77265,77270,77273,77278,77283,77286,77289,77293,77298,77303,77306,77310,77314,77317,77320,77323,77327,77331,77336,77341,77344,77348,77353,77358,77361,77364,77367,77370,77373,77376,77379,77382,77385,77390,77394,77399,77404,77407,77410,77413,77416,77419,77422,77425,77428,77432,77436,77439,77442,77445,77450,77452,77455,77458,77461,77464,77467,77470,77473,77476,77479,77482,77485,77488,77491,77496,77501,77506,77509,77513,77516,77521,77525,77527,77538,77543,77644,77647,77650,77653,77656,77659,77662,77665,77668,77670,77673,77676,77679,77682,77685,77687,77690,77693,77696,77699,77702,77705,77707,77710,77712,77714,77717,77721,77725,77728,77731,77734,77737,77740,77743,77746,77749,77752,77757,77877,77880,77883,77888,77891,77894,77897,77900,77905,77908,77911,77914,77917,77922,77925,78025,78090,78164,78168,78171,78174,78178,78181,78195,78224,78227,78230,78233,78236,78239,78242,78245,78247,78250,78253,78256,78259,78263,78268,78272,78277,78352,78355,78538,78541,78544,78547,78550,78553,78555,78558,78561,78564,78567,78570,78573,78575,78579,78582,78587,78590,78593,78596,78599,78601,78606,78609,78612,78615,78618,78620,78625,78628,78631,78633,78635,78638,78642,78645,78648,78653,78656,78659,78662,78712,78717,78721,78726,78729,78798,78801,78810,78814,78819,78822,78825,78833,78836,78853,80655,80659,80663,80668,80671,80675,80681,80687,80839,80844,80849,80852,80855,80858,80861,80864,80867,80870,80873,80876,80879,80882,80885,80890,80894,80897,80908,80912,80917,80920,80923,80926,80929,80932,80934,80937,80940,80943,80946,80948,80965,80968,80972,80975,80980,80985,80988,80991,80995,80998,81001,81010,81013,81017,81020,81025,81030,81097,81101,81104,81107,81112,81117,81203,81208,81212,81215,81218,81233,81236,81241,81245,81250,81359,81362,81373,81523,81527,81532,81641,81645,81650,81655,81660,81663,81670,81690,81726,81890,81895,81898,81903,81910,81913,81916,81919,81978,82034,82090,82094,82099,82414,82417,82421,82424,82429,82538,82543,82547,82552,82556,82627,82631,82633,82636,82639,82677,82953,82957,82974,83040,83074,83078,83081,83086,83115,83122,83131,83136,83151,83156,83165,83168,83305,83309,83371,83375,83380,83625,83629,83634,83637,83640,83643,83646,83650,83655,85236,85240,85244,85250,85253,85258,85262,85265,85270,85273,85284,85288,85293,85297,85302,85307,85310,85315,85319,85323,85326,85331,85336,85339,85342,85345,85467,85472,85574,85577,85580,85584,85589,85761,85766,85770,85773,85778,85844,85849,85852,85983,85986,85991,85994,85997,86088,86093,86096,86099,86102,86105,86110,86115,86118,86123,86128,86133,86137,86140,86143,86148,86153,86158,86163,86217,86220,86223,86228,86231,86234,86239,86244,86249,86253,86258,86272,86277,86280,86285,86289,86294,86299,86304,86309,86314,86319,86324,86329,86332,86336,86341,86344,86347,86350,86355,86360,86363,86366,86370,86373,86376,86381,86386,86391,86396,86399,86404,86409,86470,86475,86478,86483,87724,87729,87733,87737,87742,87745,87750,87755,87758,87763,87765,87770,87774,87777,87780,87791,87795,87800,87805,87860,87865,87870,87875,88086,88091,88095,88100,88103,88105,88108,88111,88558,88563,88570,88576,88579,88582,88846,88851,88855,89120,89125,89129,89134,89139,89144,89149,89480,89483,89488,89493,89496,89500,89504,89509,89514,89519,89524,89529,89534,89538,89541,89546,89551,89554,89628,89633,89638,89643,89645,89648,90018,90023,90028,90033,90036,90039,90141,90146,90151,90254,90258,90263,90267,90271,90276,90281,90284,90289,90292,90295,90688,90693,90696,90699,90702,90705,91225,91229,91234,91239,91244,91247,91252,91255,91258,91640,91645,91647,91649,91652,91655,92167,92171,92232,92235,92238,92241,92245,92248,92253,92258,93183],[10,77116,77112],{"id":77117},"_4js进阶",[14,77119,77120],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[559,77122,77124],{"id":77123},"_41-作用域","4.1 作用域",[588,77126,77128],{"id":77127},"_411-局部作用域","4.1.1 局部作用域",[14,77130,77131],{},[1941,77132],{"alt":31,"src":77133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,77135,77136],{},[1941,77137],{"alt":31,"src":77138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1618,77140,77141,77144,77147],{},[574,77142,77143],{},"函数作用域在函数内部",[574,77145,77146],{},"块级作用域在{}",[574,77148,77149],{},"对象的那个{}不是作用域，不是块作用域",[588,77151,77153],{"id":77152},"_412-全局作用域","4.1.2 全局作用域",[14,77155,77156],{},[1941,77157],{"alt":31,"src":77158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,77160,77161],{},"window.a=10不要这样写",[588,77163,77165],{"id":77164},"_413-作用域链","4.1.3 作用域链",[14,77167,77168],{},"变量查找机制",[14,77170,77171],{},[1941,77172],{"alt":31,"src":77173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[559,77175,77177],{"id":77176},"_42-垃圾回收机制","4.2 垃圾回收机制",[588,77179,77181],{"id":77180},"_421-大体介绍","4.2.1 大体介绍",[14,77183,77184],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,77186,77187],{},[1941,77188],{"alt":31,"src":77189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,77191,77192],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[588,77194,77196],{"id":77195},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,77198,77199],{},"堆栈空间分配区别：",[571,77201,77202,77205],{},[574,77203,77204],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[574,77206,77207],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,77209,77210],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22437,77212,77214],{"id":77213},"_4221-引用计数","4.2.2.1 引用计数",[14,77216,77217],{},[1941,77218],{"alt":31,"src":77219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,77221,77222],{},[1941,77223],{"alt":31,"src":77224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,77226,77227],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22437,77229,77231],{"id":77230},"_4222-标记清除法","4.2.2.2 标记清除法",[14,77233,77234],{},[1941,77235],{"alt":31,"src":77236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,77238,77239],{},[1941,77240],{"alt":31,"src":77241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,77243,77244],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[559,77246,77248],{"id":77247},"_43-闭包","4.3 闭包",[14,77250,77251],{},[1941,77252],{"alt":31,"src":77253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,77255,77256],{},"闭包：内层函数+外层函数的变量",[14,77258,77259],{},[1941,77260],{"alt":31,"src":77261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,77263,77264],{},"closure就是闭包",[14,77266,77267],{},[1941,77268],{"alt":31,"src":77269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,77271,77272],{},"内层函数必须包含外层函数的变量才是闭包",[14,77274,77275],{},[1941,77276],{"alt":31,"src":77277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,77279,77280],{},[1941,77281],{"alt":31,"src":77282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,77284,77285],{},"闭包可能会引起内存泄漏",[14,77287,77288],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[559,77290,77292],{"id":77291},"_44-变量提升","4.4 变量提升",[14,77294,77295],{},[1941,77296],{"alt":31,"src":77297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,77299,77300],{},[1941,77301],{"alt":31,"src":77302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,77304,77305],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[559,77307,77309],{"id":77308},"_45-函数进阶","4.5 函数进阶",[588,77311,77313],{"id":77312},"_451-函数提升","4.5.1 函数提升",[14,77315,77316],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,77318,77319],{},"只提升函数声明，不提升函数调用",[52245,77321,77322],{},"\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",[588,77324,77326],{"id":77325},"_452-函数参数","4.5.2 函数参数",[22437,77328,77330],{"id":77329},"_4521-动态参数","4.5.2.1 动态参数",[14,77332,77333],{},[1941,77334],{"alt":31,"src":77335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,77337,77338],{},[1941,77339],{"alt":31,"src":77340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,77342,77343],{},"箭头函数里边没有arguments",[22437,77345,77347],{"id":77346},"_4522-剩余参数","4.5.2.2 剩余参数",[14,77349,77350],{},[1941,77351],{"alt":31,"src":77352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,77354,77355],{},[1941,77356],{"alt":31,"src":77357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,77359,77360],{},"剩余参数使用的时候不需要写...",[14,77362,77363],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,77365,77366],{},"  function getSum(a,b,...arr) {",[14,77368,77369],{},"  console.log(11)",[14,77371,77372],{},"  }",[14,77374,77375],{},"  getSum(1,2,3,4)",[14,77377,77378],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,77380,77381],{},"  getSum(1,2)",[14,77383,77384],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,77386,77387],{},[1941,77388],{"alt":31,"src":77389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22437,77391,77393],{"id":77392},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,77395,77396],{},[1941,77397],{"alt":31,"src":77398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,77400,77401],{},[1941,77402],{"alt":31,"src":77403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,77405,77406],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,77408,77409],{},"展开运算符可以用于数组之间的合并：",[14,77411,77412],{},"const arr1 = [1, 2, 3]",[14,77414,77415],{},"const arr2 = [3, 4, 5]",[14,77417,77418],{},"const arr = [...arr1, ...arr2]",[14,77420,77421],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,77423,77424],{},"剩余参数：函数参数使用，得到真数组",[14,77426,77427],{},"展开运算符：数组中使用，数组展开",[588,77429,77431],{"id":77430},"_453-箭头函数","4.5.3 箭头函数",[22437,77433,77435],{"id":77434},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,77437,77438],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,77440,77441],{},"它不是万能的！！！",[14,77443,77444],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,77446,77447],{},[1941,77448],{"alt":31,"src":77449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,77451,650],{},[14,77453,77454],{},"① 只有一个形参的时候，可以省略小括号：",[14,77456,77457],{},"const fn=x=>{console.log(x)}",[14,77459,77460],{},"② 只有一行代码时可以省略大括号：",[14,77462,77463],{},"const fn=x=>console.log(11)",[14,77465,77466],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,77468,77469],{},"const fn=x=>x+x",[14,77471,77472],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,77474,77475],{},"⑤ 阻止表单默认提交：",[14,77477,77478],{},"const form = document.querySelector('form')",[14,77480,77481],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,77483,77484],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,77486,77487],{},"const fn=uname=>({uname:uname})",[14,77489,77490],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,77492,77493],{},[1941,77494],{"alt":31,"src":77495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,77497,77498],{},[1941,77499],{"alt":31,"src":77500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,77502,77503],{},[1941,77504],{"alt":31,"src":77505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,77507,77508],{},"一定不要忘记用()，有()就理解为自带return",[22437,77510,77512],{"id":77511},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,77514,77515],{},"箭头函数是没有动态参数的arguments",[14,77517,77518],{},[1941,77519],{"alt":31,"src":77520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22437,77522,77524],{"id":77523},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,77526,11771],{},[571,77528,77529,77532,77535],{},[574,77530,77531],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[574,77533,77534],{},"事件回调函数使用箭头函数时，this 为全局的 window",[574,77536,77537],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,77539,77540],{},[1941,77541],{"alt":31,"src":77542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[26,77544,77546],{"className":53499,"code":77545,"language":53501,"meta":31,"style":31},"  \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",[33,77547,77548,77556,77561,77566,77571,77576,77581,77585,77590,77594,77598,77603,77608,77613,77617,77621,77626,77631,77636],{"__ignoreMap":31},[36,77549,77550,77552,77554],{"class":38,"line":39},[36,77551,52576],{"class":98},[36,77553,52245],{"class":51733},[36,77555,188],{"class":98},[36,77557,77558],{"class":38,"line":46},[36,77559,77560],{"class":98},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[36,77562,77563],{"class":38,"line":52},[36,77564,77565],{"class":98},"    console.log(this) \u002F\u002F指向window\n",[36,77567,77568],{"class":38,"line":66},[36,77569,77570],{"class":98},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[36,77572,77573],{"class":38,"line":72},[36,77574,77575],{"class":98},"    function fn() {\n",[36,77577,77578],{"class":38,"line":82},[36,77579,77580],{"class":98},"      console.log(this)  \u002F\u002F指向window\n",[36,77582,77583],{"class":38,"line":88},[36,77584,2646],{"class":98},[36,77586,77587],{"class":38,"line":113},[36,77588,77589],{"class":98},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[36,77591,77592],{"class":38,"line":119},[36,77593,247],{"emptyLinePlaceholder":246},[36,77595,77596],{"class":38,"line":131},[36,77597,71955],{"class":98},[36,77599,77600],{"class":38,"line":137},[36,77601,77602],{"class":98},"      name: 'andy',\n",[36,77604,77605],{"class":38,"line":147},[36,77606,77607],{"class":98},"      sayHai: function () {\n",[36,77609,77610],{"class":38,"line":153},[36,77611,77612],{"class":98},"        console.log(this)\n",[36,77614,77615],{"class":38,"line":191},[36,77616,52830],{"class":98},[36,77618,77619],{"class":38,"line":197},[36,77620,2646],{"class":98},[36,77622,77623],{"class":38,"line":217},[36,77624,77625],{"class":98},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[36,77627,77628],{"class":38,"line":223},[36,77629,77630],{"class":98},"    \u002F\u002F 2.箭头函数的this\n",[36,77632,77633],{"class":38,"line":243},[36,77634,77635],{"class":98},"    const fn = () => console.log(this)\n",[36,77637,77638,77640,77642],{"class":38,"line":250},[36,77639,52849],{"class":98},[36,77641,52245],{"class":51733},[36,77643,188],{"class":98},[14,77645,77646],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,77648,77649],{},"const fn = () => console.log(this)",[14,77651,77652],{},"fn() \u002F\u002F指向window",[14,77654,77655],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,77657,77658],{},"①",[14,77660,77661],{},"const obj = {",[14,77663,77664],{},"uname: 'pink老师',",[14,77666,77667],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,77669,1558],{},[14,77671,77672],{},"调用对象里边的函数",[14,77674,77675],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,77677,77678],{},"obj.sayHai()",[14,77680,77681],{},"②",[14,77683,77684],{},"const obj1 = {",[14,77686,77664],{},[14,77688,77689],{},"sayHai: function () {",[14,77691,77692],{},"let i = 10",[14,77694,77695],{},"const count = () => {",[14,77697,77698],{},"console.log(this)",[14,77700,77701],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,77703,77704],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,77706,1558],{},[14,77708,77709],{},"count()",[14,77711,1558],{},[14,77713,1558],{},[14,77715,77716],{},"obj1.sayHai()",[559,77718,77720],{"id":77719},"_46-解构赋值","4.6 解构赋值",[588,77722,77724],{"id":77723},"_461-数组解构","4.6.1 数组解构",[14,77726,77727],{},"以前要是使用数组中的值的话：",[14,77729,77730],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,77732,77733],{},"const arr=[100,60,80]",[14,77735,77736],{},"const max=arr[0]",[14,77738,77739],{},"const min=arr[1]",[14,77741,77742],{},"const avg=arr[2]",[14,77744,77745],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,77747,77748],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,77750,77751],{},"这个写法就类似于上边的那种用很多const的方法",[14,77753,77754],{},[1941,77755],{"alt":31,"src":77756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[26,77758,77760],{"className":51066,"code":77759,"language":51068,"meta":31,"style":31},"①变量之间交换值:\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",[33,77761,77762,77767,77772,77777,77782,77787,77791,77795,77800,77804,77809,77814,77818,77823,77828,77839,77849,77854,77859,77864,77868,77872],{"__ignoreMap":31},[36,77763,77764],{"class":38,"line":39},[36,77765,77766],{"class":98},"①变量之间交换值:\n",[36,77768,77769],{"class":38,"line":46},[36,77770,77771],{"class":98},"let a=1\n",[36,77773,77774],{"class":38,"line":52},[36,77775,77776],{"class":98},"let b=2;\n",[36,77778,77779],{"class":38,"line":66},[36,77780,77781],{"class":98},"必须加这行代码，不然就会报错\n",[36,77783,77784],{"class":38,"line":72},[36,77785,77786],{"class":98},"[b,a]=[a,b]\n",[36,77788,77789],{"class":38,"line":82},[36,77790,247],{"emptyLinePlaceholder":246},[36,77792,77793],{"class":38,"line":88},[36,77794,247],{"emptyLinePlaceholder":246},[36,77796,77797],{"class":38,"line":113},[36,77798,77799],{"class":98},"可以写成下面的方式：\n",[36,77801,77802],{"class":38,"line":119},[36,77803,77771],{"class":98},[36,77805,77806],{"class":38,"line":131},[36,77807,77808],{"class":98},"let b=2\n",[36,77810,77811],{"class":38,"line":137},[36,77812,77813],{"class":98},";[b,a]=[a,b]\n",[36,77815,77816],{"class":38,"line":147},[36,77817,247],{"emptyLinePlaceholder":246},[36,77819,77820],{"class":38,"line":153},[36,77821,77822],{"class":98},"②排序\n",[36,77824,77825],{"class":38,"line":191},[36,77826,77827],{"class":98},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[36,77829,77830,77833,77836],{"class":38,"line":197},[36,77831,77832],{"class":98},"for (let i = 0; i ",[36,77834,179],{"class":77835},"s7hpK",[36,77837,77838],{"class":98}," arr1.length; i++) {\n",[36,77840,77841,77844,77846],{"class":38,"line":217},[36,77842,77843],{"class":98},"   for (let j = 0; j ",[36,77845,179],{"class":77835},[36,77847,77848],{"class":98}," arr1.length - 1; j++) {\n",[36,77850,77851],{"class":38,"line":223},[36,77852,77853],{"class":98},"      if (arr1[j] > arr1[j + 1]) {\n",[36,77855,77856],{"class":38,"line":243},[36,77857,77858],{"class":98},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[36,77860,77861],{"class":38,"line":250},[36,77862,77863],{"class":98},"       }\n",[36,77865,77866],{"class":38,"line":256},[36,77867,4760],{"class":98},[36,77869,77870],{"class":38,"line":273},[36,77871,2044],{"class":98},[36,77873,77874],{"class":38,"line":278},[36,77875,77876],{"class":98},"console.log(arr1)\n",[14,77878,77879],{},"数组解构的细节：",[14,77881,77882],{},"①变量多，单元值少",[14,77884,77885],{},[1941,77886],{"alt":31,"src":77887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,77889,77890],{},"防止出现undefined的方法：",[14,77892,77893],{},"const [a=0,b=0] =[1]",[14,77895,77896],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,77898,77899],{},"②变量少，单元值多",[14,77901,77902],{},[1941,77903],{"alt":31,"src":77904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,77906,77907],{},"此时可以使用剩余参数来接收多余的值",[14,77909,77910],{},"const [a,b,...c]=[1,2,3,4]",[14,77912,77913],{},"console.log(c) 输出[3,4]",[14,77915,77916],{},"③可以按需导入，忽略某些返回值",[14,77918,77919],{},[1941,77920],{"alt":31,"src":77921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,77923,77924],{},"④支持多维数组的结构",[26,77926,77930],{"className":77927,"code":77928,"language":77929,"meta":31,"style":31},"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",[33,77931,77932,77960,77976,77991,78006],{"__ignoreMap":31},[36,77933,77934,77936,77938,77940,77942,77944,77946,77948,77951,77953,77955,77957],{"class":38,"line":39},[36,77935,7243],{"class":163},[36,77937,52265],{"class":98},[36,77939,176],{"class":163},[36,77941,52658],{"class":98},[36,77943,833],{"class":109},[36,77945,12874],{"class":98},[36,77947,694],{"class":109},[36,77949,77950],{"class":98},", [",[36,77952,689],{"class":109},[36,77954,12874],{"class":98},[36,77956,908],{"class":109},[36,77958,77959],{"class":98},"]]\n",[36,77961,77962,77965,77967,77969,77971,77973],{"class":38,"line":46},[36,77963,77964],{"class":98},"console.",[36,77966,58679],{"class":55},[36,77968,4302],{"class":98},[36,77970,807],{"class":109},[36,77972,4667],{"class":98},[36,77974,77975],{"class":42},"  \u002F\u002F1\n",[36,77977,77978,77980,77982,77984,77986,77988],{"class":38,"line":52},[36,77979,77964],{"class":98},[36,77981,58679],{"class":55},[36,77983,4302],{"class":98},[36,77985,833],{"class":109},[36,77987,4667],{"class":98},[36,77989,77990],{"class":42},"  \u002F\u002F2\n",[36,77992,77993,77995,77997,77999,78001,78003],{"class":38,"line":66},[36,77994,77964],{"class":98},[36,77996,58679],{"class":55},[36,77998,4302],{"class":98},[36,78000,694],{"class":109},[36,78002,4667],{"class":98},[36,78004,78005],{"class":42},"  \u002F\u002F[3,4]\n",[36,78007,78008,78010,78012,78014,78016,78018,78020,78022],{"class":38,"line":72},[36,78009,77964],{"class":98},[36,78011,58679],{"class":55},[36,78013,4302],{"class":98},[36,78015,694],{"class":109},[36,78017,5352],{"class":98},[36,78019,807],{"class":109},[36,78021,4667],{"class":98},[36,78023,78024],{"class":42},"  \u002F\u002F3\n",[26,78026,78028],{"className":77927,"code":78027,"language":77929,"meta":31,"style":31},"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",[33,78029,78030,78057,78068,78079],{"__ignoreMap":31},[36,78031,78032,78034,78037,78039,78041,78043,78045,78047,78049,78051,78053,78055],{"class":38,"line":39},[36,78033,7243],{"class":163},[36,78035,78036],{"class":98}," [a, b, c] ",[36,78038,176],{"class":163},[36,78040,52658],{"class":98},[36,78042,833],{"class":109},[36,78044,12874],{"class":98},[36,78046,694],{"class":109},[36,78048,77950],{"class":98},[36,78050,689],{"class":109},[36,78052,12874],{"class":98},[36,78054,908],{"class":109},[36,78056,77959],{"class":98},[36,78058,78059,78061,78063,78066],{"class":38,"line":46},[36,78060,77964],{"class":98},[36,78062,58679],{"class":55},[36,78064,78065],{"class":98},"(a)",[36,78067,77975],{"class":42},[36,78069,78070,78072,78074,78077],{"class":38,"line":52},[36,78071,77964],{"class":98},[36,78073,58679],{"class":55},[36,78075,78076],{"class":98},"(b)",[36,78078,77990],{"class":42},[36,78080,78081,78083,78085,78088],{"class":38,"line":66},[36,78082,77964],{"class":98},[36,78084,58679],{"class":55},[36,78086,78087],{"class":98},"(c)",[36,78089,78005],{"class":42},[26,78091,78093],{"className":77927,"code":78092,"language":77929,"meta":31,"style":31},"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",[33,78094,78095,78122,78132,78142,78152],{"__ignoreMap":31},[36,78096,78097,78099,78102,78104,78106,78108,78110,78112,78114,78116,78118,78120],{"class":38,"line":39},[36,78098,7243],{"class":163},[36,78100,78101],{"class":98}," [a, b, [c, d]] ",[36,78103,176],{"class":163},[36,78105,52658],{"class":98},[36,78107,833],{"class":109},[36,78109,12874],{"class":98},[36,78111,694],{"class":109},[36,78113,77950],{"class":98},[36,78115,689],{"class":109},[36,78117,12874],{"class":98},[36,78119,908],{"class":109},[36,78121,77959],{"class":98},[36,78123,78124,78126,78128,78130],{"class":38,"line":46},[36,78125,77964],{"class":98},[36,78127,58679],{"class":55},[36,78129,78065],{"class":98},[36,78131,77975],{"class":42},[36,78133,78134,78136,78138,78140],{"class":38,"line":52},[36,78135,77964],{"class":98},[36,78137,58679],{"class":55},[36,78139,78076],{"class":98},[36,78141,77990],{"class":42},[36,78143,78144,78146,78148,78150],{"class":38,"line":66},[36,78145,77964],{"class":98},[36,78147,58679],{"class":55},[36,78149,78087],{"class":98},[36,78151,78024],{"class":42},[36,78153,78154,78156,78158,78161],{"class":38,"line":72},[36,78155,77964],{"class":98},[36,78157,58679],{"class":55},[36,78159,78160],{"class":98},"(d)",[36,78162,78163],{"class":42},"  \u002F\u002F4\n",[588,78165,78167],{"id":78166},"_462-对象解构","4.6.2 对象解构",[14,78169,78170],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,78172,78173],{},"用的非常非常多！！！！！！",[22437,78175,78177],{"id":78176},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,78179,78180],{},"基本语法：",[571,78182,78183,78186,78189,78192],{},[574,78184,78185],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[574,78187,78188],{},"对象属性的值将被赋值给与属性名相同的变量",[574,78190,78191],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[574,78193,78194],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[26,78196,78198],{"className":51066,"code":78197,"language":51068,"meta":31,"style":31},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[33,78199,78200,78205,78210,78215,78219],{"__ignoreMap":31},[36,78201,78202],{"class":38,"line":39},[36,78203,78204],{"class":98},"const obj = {\n",[36,78206,78207],{"class":38,"line":46},[36,78208,78209],{"class":98},"   uname: 'pink老师',\n",[36,78211,78212],{"class":38,"line":52},[36,78213,78214],{"class":98},"   age: 18,\n",[36,78216,78217],{"class":38,"line":66},[36,78218,2044],{"class":98},[36,78220,78221],{"class":38,"line":72},[36,78222,78223],{"class":98},"const { uname, age } = obj\n",[14,78225,78226],{},"上方代码这样写等价于：",[14,78228,78229],{},"const uname等价于obj.uname",[14,78231,78232],{},"变量名可以重新改名：",[14,78234,78235],{},"const uname='red老师'",[14,78237,78238],{},"const user={",[14,78240,78241],{},"  uname:'pink老师',",[14,78243,78244],{},"  age:18",[14,78246,1558],{},[14,78248,78249],{},"const {uname,age}=user",[14,78251,78252],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,78254,78255],{},"const {旧变量名：新变量名}=对象",[14,78257,78258],{},"const {uname:username,age}=user",[22437,78260,78262],{"id":78261},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,78264,78265],{},[1941,78266],{"alt":31,"src":78267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22437,78269,78271],{"id":78270},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,78273,78274],{},[1941,78275],{"alt":31,"src":78276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[26,78278,78280],{"className":53499,"code":78279,"language":53501,"meta":31,"style":31},"  \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",[33,78281,78282,78290,78295,78300,78305,78310,78315,78320,78325,78330,78334,78339,78344],{"__ignoreMap":31},[36,78283,78284,78286,78288],{"class":38,"line":39},[36,78285,52576],{"class":98},[36,78287,52245],{"class":51733},[36,78289,188],{"class":98},[36,78291,78292],{"class":38,"line":46},[36,78293,78294],{"class":98},"    const pig = {\n",[36,78296,78297],{"class":38,"line":52},[36,78298,78299],{"class":98},"      name: '佩奇',\n",[36,78301,78302],{"class":38,"line":66},[36,78303,78304],{"class":98},"      family: {\n",[36,78306,78307],{"class":38,"line":72},[36,78308,78309],{"class":98},"        mother: '猪妈妈',\n",[36,78311,78312],{"class":38,"line":82},[36,78313,78314],{"class":98},"        father: '猪爸爸',\n",[36,78316,78317],{"class":38,"line":88},[36,78318,78319],{"class":98},"        sister: '乔治'\n",[36,78321,78322],{"class":38,"line":113},[36,78323,78324],{"class":98},"      },\n",[36,78326,78327],{"class":38,"line":119},[36,78328,78329],{"class":98},"      age: 6\n",[36,78331,78332],{"class":38,"line":131},[36,78333,2646],{"class":98},[36,78335,78336],{"class":38,"line":137},[36,78337,78338],{"class":98},"    \u002F\u002F 多级对象解构\n",[36,78340,78341],{"class":38,"line":147},[36,78342,78343],{"class":98},"    const { name, family: { mother, father, sister }, age } = pig\n",[36,78345,78346,78348,78350],{"class":38,"line":153},[36,78347,52849],{"class":98},[36,78349,52245],{"class":51733},[36,78351,188],{"class":98},[14,78353,78354],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[26,78356,78359],{"className":78357,"code":78358,"language":76879,"meta":31,"style":31},"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",[33,78360,78361,78366,78377,78389,78401,78410,78414,78425,78437,78447,78452,78456,78466,78477,78486,78490,78494,78505,78516,78525,78529,78534],{"__ignoreMap":31},[36,78362,78363],{"class":38,"line":39},[36,78364,78365],{"class":42},"    \u002F\u002F 这是后台传递过来的数据\n",[36,78367,78368,78370,78373,78375],{"class":38,"line":46},[36,78369,11660],{"class":163},[36,78371,78372],{"class":98}," msg ",[36,78374,176],{"class":163},[36,78376,16011],{"class":98},[36,78378,78379,78382,78384,78387],{"class":38,"line":52},[36,78380,78381],{"class":59},"      \"code\"",[36,78383,1472],{"class":163},[36,78385,78386],{"class":109}," 200",[36,78388,31899],{"class":98},[36,78390,78391,78394,78396,78399],{"class":38,"line":66},[36,78392,78393],{"class":59},"      \"msg\"",[36,78395,1472],{"class":163},[36,78397,78398],{"class":59}," \"获取新闻列表成功\"",[36,78400,31899],{"class":98},[36,78402,78403,78406,78408],{"class":38,"line":72},[36,78404,78405],{"class":59},"      \"data\"",[36,78407,1472],{"class":163},[36,78409,55879],{"class":98},[36,78411,78412],{"class":38,"line":82},[36,78413,2968],{"class":98},[36,78415,78416,78419,78421,78423],{"class":38,"line":88},[36,78417,78418],{"class":59},"          \"id\"",[36,78420,1472],{"class":163},[36,78422,25555],{"class":109},[36,78424,31899],{"class":98},[36,78426,78427,78430,78432,78435],{"class":38,"line":113},[36,78428,78429],{"class":59},"          \"title\"",[36,78431,1472],{"class":163},[36,78433,78434],{"class":59}," \"5G商用自己，三大运用商收入下降\"",[36,78436,31899],{"class":98},[36,78438,78439,78442,78444],{"class":38,"line":119},[36,78440,78441],{"class":59},"          \"count\"",[36,78443,1472],{"class":163},[36,78445,78446],{"class":109}," 58\n",[36,78448,78449],{"class":38,"line":131},[36,78450,78451],{"class":98},"        },\n",[36,78453,78454],{"class":38,"line":137},[36,78455,2968],{"class":98},[36,78457,78458,78460,78462,78464],{"class":38,"line":147},[36,78459,78418],{"class":59},[36,78461,1472],{"class":163},[36,78463,15194],{"class":109},[36,78465,31899],{"class":98},[36,78467,78468,78470,78472,78475],{"class":38,"line":153},[36,78469,78429],{"class":59},[36,78471,1472],{"class":163},[36,78473,78474],{"class":59}," \"国际媒体头条速览\"",[36,78476,31899],{"class":98},[36,78478,78479,78481,78483],{"class":38,"line":191},[36,78480,78441],{"class":59},[36,78482,1472],{"class":163},[36,78484,78485],{"class":109}," 56\n",[36,78487,78488],{"class":38,"line":197},[36,78489,78451],{"class":98},[36,78491,78492],{"class":38,"line":217},[36,78493,2968],{"class":98},[36,78495,78496,78498,78500,78503],{"class":38,"line":223},[36,78497,78418],{"class":59},[36,78499,1472],{"class":163},[36,78501,78502],{"class":109}," 3",[36,78504,31899],{"class":98},[36,78506,78507,78509,78511,78514],{"class":38,"line":243},[36,78508,78429],{"class":59},[36,78510,1472],{"class":163},[36,78512,78513],{"class":59}," \"乌克兰和俄罗斯持续冲突\"",[36,78515,31899],{"class":98},[36,78517,78518,78520,78522],{"class":38,"line":250},[36,78519,78441],{"class":59},[36,78521,1472],{"class":163},[36,78523,78524],{"class":109}," 1669\n",[36,78526,78527],{"class":38,"line":256},[36,78528,78451],{"class":98},[36,78530,78531],{"class":38,"line":273},[36,78532,78533],{"class":98},"      ]\n",[36,78535,78536],{"class":38,"line":278},[36,78537,2646],{"class":98},[14,78539,78540],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,78542,78543],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,78545,78546],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[14,78548,78549],{},"function({data}) {",[14,78551,78552],{},"console.log(data)",[14,78554,1558],{},[14,78556,78557],{},"render(msg)",[14,78559,78560],{},"实参传递给形参的时候解构了",[14,78562,78563],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,78565,78566],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,78568,78569],{},"function render({data:mydata}) {",[14,78571,78572],{},"  console.log(data)",[14,78574,1558],{},[588,78576,78578],{"id":78577},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,78580,78581],{},"有两种情况：一个是数组结构，一个是立即执行函数",[571,78583,78584],{},[574,78585,78586],{},"如果对一个数组进行遍历，有两种方式：",[14,78588,78589],{},"①法1",[14,78591,78592],{},"const arr=[1,2,3]",[14,78594,78595],{},"arr.map(function(item,index) {",[14,78597,78598],{},"  console.log(item)",[14,78600,52896],{},[14,78602,78603],{},[1941,78604],{"alt":31,"src":78605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,78607,78608],{},"②法2",[14,78610,78611],{},"const str='pink'",[14,78613,78614],{},"[1,2,3].map(function(item,index) {",[14,78616,78617],{},"console.log(item)",[14,78619,52896],{},[14,78621,78622],{},[1941,78623],{"alt":31,"src":78624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,78626,78627],{},"此时会报错",[14,78629,78630],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,78632,78617],{},[14,78634,52896],{},[14,78636,78637],{},"内部会当成这样处理，所以我们用分号进行隔开",[559,78639,78641],{"id":78640},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,78643,78644],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,78646,78647],{},"可以理解为加强版的for循环",[14,78649,78650],{},[1941,78651],{"alt":31,"src":78652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,78654,78655],{},"里边不写return，不返回数组，只遍历不返回",[14,78657,78658],{},"map是返回数组",[14,78660,78661],{},"forEach主要用于遍历数组对象",[26,78663,78665],{"className":53499,"code":78664,"language":53501,"meta":31,"style":31},"  \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",[33,78666,78667,78675,78680,78685,78690,78695,78699,78704],{"__ignoreMap":31},[36,78668,78669,78671,78673],{"class":38,"line":39},[36,78670,52576],{"class":98},[36,78672,52245],{"class":51733},[36,78674,188],{"class":98},[36,78676,78677],{"class":38,"line":46},[36,78678,78679],{"class":98},"    const arr = ['red', 'green', 'pink']\n",[36,78681,78682],{"class":38,"line":52},[36,78683,78684],{"class":98},"    const result = arr.forEach(function (item, index) {\n",[36,78686,78687],{"class":38,"line":66},[36,78688,78689],{"class":98},"      console.log(item)\n",[36,78691,78692],{"class":38,"line":72},[36,78693,78694],{"class":98},"      console.log(index)\n",[36,78696,78697],{"class":38,"line":82},[36,78698,33894],{"class":98},[36,78700,78701],{"class":38,"line":88},[36,78702,78703],{"class":98},"    console.log(result)\n",[36,78705,78706,78708,78710],{"class":38,"line":113},[36,78707,52849],{"class":98},[36,78709,52245],{"class":51733},[36,78711,188],{"class":98},[14,78713,78714],{},[1941,78715],{"alt":31,"src":78716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[559,78718,78720],{"id":78719},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,78722,78723],{},[1941,78724],{"alt":31,"src":78725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,78727,78728],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[26,78730,78732],{"className":53499,"code":78731,"language":53501,"meta":31,"style":31},"\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",[33,78733,78734,78742,78750,78755,78760,78764,78768,78773,78777,78782,78790],{"__ignoreMap":31},[36,78735,78736,78738,78740],{"class":38,"line":39},[36,78737,179],{"class":98},[36,78739,52232],{"class":51733},[36,78741,188],{"class":98},[36,78743,78744,78746,78748],{"class":38,"line":46},[36,78745,52576],{"class":98},[36,78747,52245],{"class":51733},[36,78749,188],{"class":98},[36,78751,78752],{"class":38,"line":52},[36,78753,78754],{"class":98},"    const arr = [10, 20, 30]\n",[36,78756,78757],{"class":38,"line":66},[36,78758,78759],{"class":98},"    const newArr = arr.filter(function (item, index) {\n",[36,78761,78762],{"class":38,"line":72},[36,78763,78689],{"class":98},[36,78765,78766],{"class":38,"line":82},[36,78767,78694],{"class":98},[36,78769,78770],{"class":38,"line":88},[36,78771,78772],{"class":98},"      return item >= 20\n",[36,78774,78775],{"class":38,"line":113},[36,78776,33894],{"class":98},[36,78778,78779],{"class":38,"line":119},[36,78780,78781],{"class":98},"    console.log(newArr)\n",[36,78783,78784,78786,78788],{"class":38,"line":131},[36,78785,52849],{"class":98},[36,78787,52245],{"class":51733},[36,78789,188],{"class":98},[36,78791,78792,78794,78796],{"class":38,"line":137},[36,78793,52217],{"class":98},[36,78795,52232],{"class":51733},[36,78797,188],{"class":98},[14,78799,78800],{},"这个也可以写成箭头函数：",[26,78802,78804],{"className":51066,"code":78803,"language":51068,"meta":31,"style":31},"const newArr = arr.filter(item => item >= 20)\n",[33,78805,78806],{"__ignoreMap":31},[36,78807,78808],{"class":38,"line":39},[36,78809,78803],{"class":98},[559,78811,78813],{"id":78812},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,78815,78816],{},[1941,78817],{"alt":31,"src":78818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,78820,78821],{},"步骤：",[14,78823,78824],{},"①：渲染页面模块",[1618,78826,78827,78830],{},[574,78828,78829],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[574,78831,78832],{},"用forEach+字符串的形式",[14,78834,78835],{},"②：点击不同需求，显示不同页面内容",[1618,78837,78838,78841,78844,78847,78850],{},[574,78839,78840],{},"点击采取事件委托方式 .filter",[574,78842,78843],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[574,78845,78846],{},"筛选条件是根据点击的 data-index 来判断",[574,78848,78849],{},"可以使用对象解构，把事件对象解构",[574,78851,78852],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[26,78854,78856],{"className":51066,"code":78855,"language":51068,"meta":31,"style":31},"\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",[33,78857,78858,78868,78882,78886,78894,78908,78928,78940,78948,78954,78964,78974,78984,78988,78992,78998,79011,79023,79033,79045,79049,79053,79060,79073,79085,79102,79120,79133,79137,79141,79153,79163,79167,79171,79178,79219,79246,79256,79260,79264,79272,79284,79288,79292,79300,79312,79324,79335,79339,79343,79352,79364,79375,79379,79383,79392,79404,79416,79420,79424,79431,79441,79453,79465,79480,79484,79488,79496,79512,79522,79532,79542,79554,79558,79562,79572,79583,79593,79597,79605,79613,79617,79625,79640,79666,79691,79716,79735,79743,79757,79762,79767,79772,79777,79782,79790,79798,79803,79814,79819,79829,79839,79849,79859,79863,79867,79876,79885,79894,79903,79907,79911,79920,79929,79938,79947,79951,79955,79964,79973,79982,79991,79995,79999,80008,80017,80026,80035,80039,80043,80052,80061,80070,80079,80083,80087,80096,80105,80114,80123,80127,80131,80140,80149,80157,80166,80170,80174,80178,80183,80195,80200,80212,80216,80233,80261,80270,80275,80285,80295,80304,80309,80314,80318,80323,80340,80344,80349,80357,80362,80389,80394,80414,80419,80431,80436,80441,80446,80457,80471,80508,80526,80559,80576,80600,80604,80609,80615,80619,80623,80627,80635,80643,80647],{"__ignoreMap":31},[36,78859,78860,78862,78864,78866],{"class":38,"line":39},[36,78861,51730],{"class":98},[36,78863,51734],{"class":51733},[36,78865,51737],{"class":55},[36,78867,188],{"class":98},[36,78869,78870,78872,78874,78876,78878,78880],{"class":38,"line":46},[36,78871,179],{"class":98},[36,78873,51068],{"class":51733},[36,78875,51748],{"class":55},[36,78877,176],{"class":98},[36,78879,51753],{"class":59},[36,78881,188],{"class":98},[36,78883,78884],{"class":38,"line":52},[36,78885,247],{"emptyLinePlaceholder":246},[36,78887,78888,78890,78892],{"class":38,"line":66},[36,78889,179],{"class":98},[36,78891,51766],{"class":51733},[36,78893,188],{"class":98},[36,78895,78896,78898,78900,78902,78904,78906],{"class":38,"line":72},[36,78897,52576],{"class":98},[36,78899,51776],{"class":51733},[36,78901,51779],{"class":55},[36,78903,176],{"class":98},[36,78905,51784],{"class":59},[36,78907,188],{"class":98},[36,78909,78910,78912,78914,78916,78918,78920,78922,78924,78926],{"class":38,"line":82},[36,78911,52576],{"class":98},[36,78913,51776],{"class":51733},[36,78915,15359],{"class":55},[36,78917,176],{"class":98},[36,78919,51823],{"class":59},[36,78921,51803],{"class":55},[36,78923,176],{"class":98},[36,78925,51830],{"class":59},[36,78927,188],{"class":98},[36,78929,78930,78932,78934,78936,78938],{"class":38,"line":88},[36,78931,52576],{"class":98},[36,78933,51839],{"class":51733},[36,78935,51842],{"class":98},[36,78937,51839],{"class":51733},[36,78939,188],{"class":98},[36,78941,78942,78944,78946],{"class":38,"line":113},[36,78943,52576],{"class":98},[36,78945,537],{"class":51733},[36,78947,188],{"class":98},[36,78949,78950,78952],{"class":38,"line":119},[36,78951,6854],{"class":51733},[36,78953,16011],{"class":98},[36,78955,78956,78958,78960,78962],{"class":38,"line":131},[36,78957,55127],{"class":109},[36,78959,51869],{"class":98},[36,78961,807],{"class":109},[36,78963,1772],{"class":98},[36,78965,78966,78968,78970,78972],{"class":38,"line":137},[36,78967,55138],{"class":109},[36,78969,51869],{"class":98},[36,78971,807],{"class":109},[36,78973,1772],{"class":98},[36,78975,78976,78978,78980,78982],{"class":38,"line":147},[36,78977,73028],{"class":109},[36,78979,51869],{"class":98},[36,78981,60937],{"class":109},[36,78983,1772],{"class":98},[36,78985,78986],{"class":38,"line":153},[36,78987,2646],{"class":98},[36,78989,78990],{"class":38,"line":191},[36,78991,247],{"emptyLinePlaceholder":246},[36,78993,78994,78996],{"class":38,"line":197},[36,78995,62555],{"class":55},[36,78997,16011],{"class":98},[36,78999,79000,79002,79004,79007,79009],{"class":38,"line":217},[36,79001,55203],{"class":109},[36,79003,51869],{"class":98},[36,79005,79006],{"class":109},"990",[36,79008,51924],{"class":163},[36,79010,1772],{"class":98},[36,79012,79013,79015,79017,79019,79021],{"class":38,"line":223},[36,79014,55138],{"class":109},[36,79016,51869],{"class":98},[36,79018,807],{"class":109},[36,79020,51988],{"class":109},[36,79022,1772],{"class":98},[36,79024,79025,79027,79029,79031],{"class":38,"line":243},[36,79026,55441],{"class":109},[36,79028,51869],{"class":98},[36,79030,51909],{"class":109},[36,79032,1772],{"class":98},[36,79034,79035,79038,79040,79043],{"class":38,"line":250},[36,79036,79037],{"class":109},"      flex-wrap",[36,79039,51869],{"class":98},[36,79041,79042],{"class":109},"wrap",[36,79044,1772],{"class":98},[36,79046,79047],{"class":38,"line":256},[36,79048,2646],{"class":98},[36,79050,79051],{"class":38,"line":273},[36,79052,247],{"emptyLinePlaceholder":246},[36,79054,79055,79058],{"class":38,"line":278},[36,79056,79057],{"class":55},"    .item",[36,79059,16011],{"class":98},[36,79061,79062,79064,79066,79069,79071],{"class":38,"line":284},[36,79063,55203],{"class":109},[36,79065,51869],{"class":98},[36,79067,79068],{"class":109},"240",[36,79070,51924],{"class":163},[36,79072,1772],{"class":98},[36,79074,79075,79077,79079,79081,79083],{"class":38,"line":315},[36,79076,62432],{"class":109},[36,79078,51869],{"class":98},[36,79080,1060],{"class":109},[36,79082,51924],{"class":163},[36,79084,1772],{"class":98},[36,79086,79087,79089,79091,79093,79095,79098,79100],{"class":38,"line":320},[36,79088,55127],{"class":109},[36,79090,51869],{"class":98},[36,79092,1313],{"class":109},[36,79094,51924],{"class":163},[36,79096,79097],{"class":109}," 30",[36,79099,51924],{"class":163},[36,79101,1772],{"class":98},[36,79103,79104,79106,79108,79110,79113,79116,79118],{"class":38,"line":326},[36,79105,62292],{"class":109},[36,79107,51869],{"class":98},[36,79109,28555],{"class":109},[36,79111,79112],{"class":109}," ease",[36,79114,79115],{"class":109}," .5",[36,79117,1308],{"class":163},[36,79119,1772],{"class":98},[36,79121,79122,79125,79127,79129,79131],{"class":38,"line":343},[36,79123,79124],{"class":109},"      margin-bottom",[36,79126,51869],{"class":98},[36,79128,1313],{"class":109},[36,79130,51924],{"class":163},[36,79132,1772],{"class":98},[36,79134,79135],{"class":38,"line":348},[36,79136,2646],{"class":98},[36,79138,79139],{"class":38,"line":354},[36,79140,247],{"emptyLinePlaceholder":246},[36,79142,79143,79146,79148,79151],{"class":38,"line":370},[36,79144,79145],{"class":55},"    .item:nth-child",[36,79147,621],{"class":98},[36,79149,79150],{"class":109},"4n",[36,79152,12881],{"class":98},[36,79154,79155,79157,79159,79161],{"class":38,"line":375},[36,79156,62432],{"class":109},[36,79158,51869],{"class":98},[36,79160,807],{"class":109},[36,79162,1772],{"class":98},[36,79164,79165],{"class":38,"line":381},[36,79166,2646],{"class":98},[36,79168,79169],{"class":38,"line":399},[36,79170,247],{"emptyLinePlaceholder":246},[36,79172,79173,79176],{"class":38,"line":404},[36,79174,79175],{"class":55},"    .item:hover",[36,79177,16011],{"class":98},[36,79179,79180,79183,79185,79187,79189,79191,79193,79195,79197,79200,79202,79204,79206,79208,79210,79212,79214,79217],{"class":38,"line":410},[36,79181,79182],{"class":109},"      box-shadow",[36,79184,51869],{"class":98},[36,79186,807],{"class":109},[36,79188,51924],{"class":163},[36,79190,4544],{"class":109},[36,79192,51924],{"class":163},[36,79194,2607],{"class":109},[36,79196,51924],{"class":163},[36,79198,79199],{"class":109}," rgba",[36,79201,621],{"class":98},[36,79203,807],{"class":109},[36,79205,12874],{"class":98},[36,79207,807],{"class":109},[36,79209,12874],{"class":98},[36,79211,807],{"class":109},[36,79213,12874],{"class":98},[36,79215,79216],{"class":109},".2",[36,79218,3170],{"class":98},[36,79220,79221,79224,79226,79229,79231,79233,79235,79238,79240,79242,79244],{"class":38,"line":423},[36,79222,79223],{"class":109},"      transform",[36,79225,51869],{"class":98},[36,79227,79228],{"class":109},"translate3d",[36,79230,621],{"class":98},[36,79232,807],{"class":109},[36,79234,12874],{"class":98},[36,79236,79237],{"class":109},"-4",[36,79239,51924],{"class":163},[36,79241,12874],{"class":98},[36,79243,807],{"class":109},[36,79245,3170],{"class":98},[36,79247,79248,79250,79252,79254],{"class":38,"line":436},[36,79249,62457],{"class":109},[36,79251,51869],{"class":98},[36,79253,62462],{"class":109},[36,79255,1772],{"class":98},[36,79257,79258],{"class":38,"line":441},[36,79259,2646],{"class":98},[36,79261,79262],{"class":38,"line":447},[36,79263,247],{"emptyLinePlaceholder":246},[36,79265,79266,79268,79270],{"class":38,"line":465},[36,79267,79057],{"class":55},[36,79269,56047],{"class":51733},[36,79271,16011],{"class":98},[36,79273,79274,79276,79278,79280,79282],{"class":38,"line":470},[36,79275,55203],{"class":109},[36,79277,51869],{"class":98},[36,79279,926],{"class":109},[36,79281,942],{"class":163},[36,79283,1772],{"class":98},[36,79285,79286],{"class":38,"line":476},[36,79287,2646],{"class":98},[36,79289,79290],{"class":38,"line":496},[36,79291,247],{"emptyLinePlaceholder":246},[36,79293,79294,79296,79298],{"class":38,"line":501},[36,79295,79057],{"class":55},[36,79297,62736],{"class":55},[36,79299,16011],{"class":98},[36,79301,79302,79304,79306,79308,79310],{"class":38,"line":507},[36,79303,55354],{"class":109},[36,79305,51869],{"class":98},[36,79307,1264],{"class":109},[36,79309,51924],{"class":163},[36,79311,1772],{"class":98},[36,79313,79314,79316,79318,79320,79322],{"class":38,"line":517},[36,79315,79124],{"class":109},[36,79317,51869],{"class":98},[36,79319,1060],{"class":109},[36,79321,51924],{"class":163},[36,79323,1772],{"class":98},[36,79325,79326,79328,79330,79333],{"class":38,"line":522},[36,79327,57848],{"class":109},[36,79329,51869],{"class":98},[36,79331,79332],{"class":109},"#666",[36,79334,1772],{"class":98},[36,79336,79337],{"class":38,"line":528},[36,79338,2646],{"class":98},[36,79340,79341],{"class":38,"line":10203},[36,79342,247],{"emptyLinePlaceholder":246},[36,79344,79345,79347,79350],{"class":38,"line":10227},[36,79346,79057],{"class":55},[36,79348,79349],{"class":55}," .price",[36,79351,16011],{"class":98},[36,79353,79354,79356,79358,79360,79362],{"class":38,"line":10232},[36,79355,55354],{"class":109},[36,79357,51869],{"class":98},[36,79359,1363],{"class":109},[36,79361,51924],{"class":163},[36,79363,1772],{"class":98},[36,79365,79366,79368,79370,79373],{"class":38,"line":10237},[36,79367,57848],{"class":109},[36,79369,51869],{"class":98},[36,79371,79372],{"class":109},"firebrick",[36,79374,1772],{"class":98},[36,79376,79377],{"class":38,"line":10242},[36,79378,2646],{"class":98},[36,79380,79381],{"class":38,"line":10251},[36,79382,247],{"emptyLinePlaceholder":246},[36,79384,79385,79387,79390],{"class":38,"line":10256},[36,79386,79057],{"class":55},[36,79388,79389],{"class":55}," .price::before",[36,79391,16011],{"class":98},[36,79393,79394,79397,79399,79402],{"class":38,"line":10262},[36,79395,79396],{"class":109},"      content",[36,79398,51869],{"class":98},[36,79400,79401],{"class":59},"'￥'",[36,79403,1772],{"class":98},[36,79405,79406,79408,79410,79412,79414],{"class":38,"line":10283},[36,79407,55354],{"class":109},[36,79409,51869],{"class":98},[36,79411,1163],{"class":109},[36,79413,51924],{"class":163},[36,79415,1772],{"class":98},[36,79417,79418],{"class":38,"line":10289},[36,79419,2646],{"class":98},[36,79421,79422],{"class":38,"line":10303},[36,79423,247],{"emptyLinePlaceholder":246},[36,79425,79426,79429],{"class":38,"line":10309},[36,79427,79428],{"class":55},"    .filter",[36,79430,16011],{"class":98},[36,79432,79433,79435,79437,79439],{"class":38,"line":10336},[36,79434,55441],{"class":109},[36,79436,51869],{"class":98},[36,79438,51909],{"class":109},[36,79440,1772],{"class":98},[36,79442,79443,79445,79447,79449,79451],{"class":38,"line":10345},[36,79444,55203],{"class":109},[36,79446,51869],{"class":98},[36,79448,79006],{"class":109},[36,79450,51924],{"class":163},[36,79452,1772],{"class":98},[36,79454,79455,79457,79459,79461,79463],{"class":38,"line":10351},[36,79456,55138],{"class":109},[36,79458,51869],{"class":98},[36,79460,807],{"class":109},[36,79462,51988],{"class":109},[36,79464,1772],{"class":98},[36,79466,79467,79469,79471,79473,79475,79477],{"class":38,"line":10359},[36,79468,55127],{"class":109},[36,79470,51869],{"class":98},[36,79472,1270],{"class":109},[36,79474,51924],{"class":163},[36,79476,79097],{"class":109},[36,79478,79479],{"class":163},"px\n",[36,79481,79482],{"class":38,"line":10364},[36,79483,2646],{"class":98},[36,79485,79486],{"class":38,"line":17043},[36,79487,247],{"emptyLinePlaceholder":246},[36,79489,79490,79492,79494],{"class":38,"line":17049},[36,79491,79428],{"class":55},[36,79493,1877],{"class":51733},[36,79495,16011],{"class":98},[36,79497,79498,79500,79502,79504,79506,79508,79510],{"class":38,"line":17072},[36,79499,55127],{"class":109},[36,79501,51869],{"class":98},[36,79503,1060],{"class":109},[36,79505,51924],{"class":163},[36,79507,9391],{"class":109},[36,79509,51924],{"class":163},[36,79511,1772],{"class":98},[36,79513,79514,79516,79518,79520],{"class":38,"line":17078},[36,79515,62153],{"class":109},[36,79517,51869],{"class":98},[36,79519,62250],{"class":109},[36,79521,1772],{"class":98},[36,79523,79524,79526,79528,79530],{"class":38,"line":17101},[36,79525,57848],{"class":109},[36,79527,51869],{"class":98},[36,79529,79332],{"class":109},[36,79531,1772],{"class":98},[36,79533,79534,79536,79538,79540],{"class":38,"line":17115},[36,79535,64402],{"class":109},[36,79537,51869],{"class":98},[36,79539,55169],{"class":109},[36,79541,1772],{"class":98},[36,79543,79544,79546,79548,79550,79552],{"class":38,"line":17135},[36,79545,62182],{"class":109},[36,79547,51869],{"class":98},[36,79549,1313],{"class":109},[36,79551,51924],{"class":163},[36,79553,1772],{"class":98},[36,79555,79556],{"class":38,"line":17141},[36,79557,2646],{"class":98},[36,79559,79560],{"class":38,"line":17152},[36,79561,247],{"emptyLinePlaceholder":246},[36,79563,79564,79566,79568,79570],{"class":38,"line":17175},[36,79565,79428],{"class":55},[36,79567,1877],{"class":51733},[36,79569,62332],{"class":55},[36,79571,16011],{"class":98},[36,79573,79574,79576,79578,79581],{"class":38,"line":17197},[36,79575,55316],{"class":109},[36,79577,51869],{"class":98},[36,79579,79580],{"class":109},"#05943c",[36,79582,1772],{"class":98},[36,79584,79585,79587,79589,79591],{"class":38,"line":17202},[36,79586,57848],{"class":109},[36,79588,51869],{"class":98},[36,79590,61274],{"class":109},[36,79592,1772],{"class":98},[36,79594,79595],{"class":38,"line":17208},[36,79596,2646],{"class":98},[36,79598,79599,79601,79603],{"class":38,"line":17222},[36,79600,52849],{"class":98},[36,79602,537],{"class":51733},[36,79604,188],{"class":98},[36,79606,79607,79609,79611],{"class":38,"line":17235},[36,79608,52217],{"class":98},[36,79610,51766],{"class":51733},[36,79612,188],{"class":98},[36,79614,79615],{"class":38,"line":17240},[36,79616,247],{"emptyLinePlaceholder":246},[36,79618,79619,79621,79623],{"class":38,"line":17254},[36,79620,179],{"class":98},[36,79622,52232],{"class":51733},[36,79624,188],{"class":98},[36,79626,79627,79629,79631,79633,79635,79638],{"class":38,"line":17259},[36,79628,52576],{"class":98},[36,79630,52043],{"class":51733},[36,79632,53918],{"class":55},[36,79634,176],{"class":98},[36,79636,79637],{"class":59},"\"filter\"",[36,79639,188],{"class":98},[36,79641,79642,79644,79646,79648,79650,79652,79655,79657,79659,79662,79664],{"class":38,"line":17265},[36,79643,51773],{"class":98},[36,79645,20],{"class":51733},[36,79647,61489],{"class":55},[36,79649,176],{"class":98},[36,79651,61494],{"class":59},[36,79653,79654],{"class":55}," data-index",[36,79656,176],{"class":98},[36,79658,4129],{"class":59},[36,79660,79661],{"class":98},">0-100元\u003C\u002F",[36,79663,20],{"class":51733},[36,79665,188],{"class":98},[36,79667,79668,79670,79672,79674,79676,79678,79680,79682,79684,79687,79689],{"class":38,"line":17270},[36,79669,51773],{"class":98},[36,79671,20],{"class":51733},[36,79673,61489],{"class":55},[36,79675,176],{"class":98},[36,79677,61494],{"class":59},[36,79679,79654],{"class":55},[36,79681,176],{"class":98},[36,79683,4152],{"class":59},[36,79685,79686],{"class":98},">100-300元\u003C\u002F",[36,79688,20],{"class":51733},[36,79690,188],{"class":98},[36,79692,79693,79695,79697,79699,79701,79703,79705,79707,79709,79712,79714],{"class":38,"line":17284},[36,79694,51773],{"class":98},[36,79696,20],{"class":51733},[36,79698,61489],{"class":55},[36,79700,176],{"class":98},[36,79702,61494],{"class":59},[36,79704,79654],{"class":55},[36,79706,176],{"class":98},[36,79708,4165],{"class":59},[36,79710,79711],{"class":98},">300元以上\u003C\u002F",[36,79713,20],{"class":51733},[36,79715,188],{"class":98},[36,79717,79718,79720,79722,79724,79726,79728,79731,79733],{"class":38,"line":17289},[36,79719,51773],{"class":98},[36,79721,20],{"class":51733},[36,79723,61489],{"class":55},[36,79725,176],{"class":98},[36,79727,61494],{"class":59},[36,79729,79730],{"class":98},">全部区间\u003C\u002F",[36,79732,20],{"class":51733},[36,79734,188],{"class":98},[36,79736,79737,79739,79741],{"class":38,"line":17294},[36,79738,52849],{"class":98},[36,79740,52043],{"class":51733},[36,79742,188],{"class":98},[36,79744,79745,79747,79749,79751,79753,79755],{"class":38,"line":17308},[36,79746,52576],{"class":98},[36,79748,52043],{"class":51733},[36,79750,53918],{"class":55},[36,79752,176],{"class":98},[36,79754,63040],{"class":59},[36,79756,188],{"class":98},[36,79758,79759],{"class":38,"line":17320},[36,79760,79761],{"class":42},"    \u003C!-- \u003Cdiv class=\"item\">\n",[36,79763,79764],{"class":38,"line":17325},[36,79765,79766],{"class":42},"      \u003Cimg src=\"\" alt=\"\">\n",[36,79768,79769],{"class":38,"line":17338},[36,79770,79771],{"class":42},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[36,79773,79774],{"class":38,"line":17343},[36,79775,79776],{"class":42},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[36,79778,79779],{"class":38,"line":17348},[36,79780,79781],{"class":42},"    \u003C\u002Fdiv> -->\n",[36,79783,79784,79786,79788],{"class":38,"line":17353},[36,79785,52849],{"class":98},[36,79787,52043],{"class":51733},[36,79789,188],{"class":98},[36,79791,79792,79794,79796],{"class":38,"line":17366},[36,79793,52576],{"class":98},[36,79795,52245],{"class":51733},[36,79797,188],{"class":98},[36,79799,79800],{"class":38,"line":17371},[36,79801,79802],{"class":42},"    \u002F\u002F 2. 初始化数据\n",[36,79804,79805,79807,79810,79812],{"class":38,"line":33066},[36,79806,11660],{"class":163},[36,79808,79809],{"class":109}," goodsList",[36,79811,14003],{"class":163},[36,79813,55879],{"class":98},[36,79815,79816],{"class":38,"line":33072},[36,79817,79818],{"class":98},"      {\n",[36,79820,79821,79824,79827],{"class":38,"line":33078},[36,79822,79823],{"class":98},"        id: ",[36,79825,79826],{"class":59},"'4001172'",[36,79828,31899],{"class":98},[36,79830,79831,79834,79837],{"class":38,"line":33084},[36,79832,79833],{"class":98},"        name: ",[36,79835,79836],{"class":59},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[36,79838,31899],{"class":98},[36,79840,79841,79844,79847],{"class":38,"line":33090},[36,79842,79843],{"class":98},"        price: ",[36,79845,79846],{"class":59},"'289.00'",[36,79848,31899],{"class":98},[36,79850,79851,79854,79857],{"class":38,"line":33101},[36,79852,79853],{"class":98},"        picture: ",[36,79855,79856],{"class":59},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[36,79858,31899],{"class":98},[36,79860,79861],{"class":38,"line":33107},[36,79862,78324],{"class":98},[36,79864,79865],{"class":38,"line":33127},[36,79866,79818],{"class":98},[36,79868,79869,79871,79874],{"class":38,"line":33133},[36,79870,79823],{"class":98},[36,79872,79873],{"class":59},"'4001594'",[36,79875,31899],{"class":98},[36,79877,79878,79880,79883],{"class":38,"line":33144},[36,79879,79833],{"class":98},[36,79881,79882],{"class":59},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[36,79884,31899],{"class":98},[36,79886,79887,79889,79892],{"class":38,"line":33150},[36,79888,79843],{"class":98},[36,79890,79891],{"class":59},"'288.00'",[36,79893,31899],{"class":98},[36,79895,79896,79898,79901],{"class":38,"line":33156},[36,79897,79853],{"class":98},[36,79899,79900],{"class":59},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[36,79902,31899],{"class":98},[36,79904,79905],{"class":38,"line":33162},[36,79906,78324],{"class":98},[36,79908,79909],{"class":38,"line":33168},[36,79910,79818],{"class":98},[36,79912,79913,79915,79918],{"class":38,"line":33174},[36,79914,79823],{"class":98},[36,79916,79917],{"class":59},"'4001009'",[36,79919,31899],{"class":98},[36,79921,79922,79924,79927],{"class":38,"line":33180},[36,79923,79833],{"class":98},[36,79925,79926],{"class":59},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[36,79928,31899],{"class":98},[36,79930,79931,79933,79936],{"class":38,"line":33186},[36,79932,79843],{"class":98},[36,79934,79935],{"class":59},"'109.00'",[36,79937,31899],{"class":98},[36,79939,79940,79942,79945],{"class":38,"line":33206},[36,79941,79853],{"class":98},[36,79943,79944],{"class":59},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[36,79946,31899],{"class":98},[36,79948,79949],{"class":38,"line":33212},[36,79950,78324],{"class":98},[36,79952,79953],{"class":38,"line":33228},[36,79954,79818],{"class":98},[36,79956,79957,79959,79962],{"class":38,"line":33234},[36,79958,79823],{"class":98},[36,79960,79961],{"class":59},"'4001874'",[36,79963,31899],{"class":98},[36,79965,79966,79968,79971],{"class":38,"line":33248},[36,79967,79833],{"class":98},[36,79969,79970],{"class":59},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[36,79972,31899],{"class":98},[36,79974,79975,79977,79980],{"class":38,"line":33254},[36,79976,79843],{"class":98},[36,79978,79979],{"class":59},"'488.00'",[36,79981,31899],{"class":98},[36,79983,79984,79986,79989],{"class":38,"line":33269},[36,79985,79853],{"class":98},[36,79987,79988],{"class":59},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[36,79990,31899],{"class":98},[36,79992,79993],{"class":38,"line":33275},[36,79994,78324],{"class":98},[36,79996,79997],{"class":38,"line":33284},[36,79998,79818],{"class":98},[36,80000,80001,80003,80006],{"class":38,"line":33290},[36,80002,79823],{"class":98},[36,80004,80005],{"class":59},"'4001649'",[36,80007,31899],{"class":98},[36,80009,80010,80012,80015],{"class":38,"line":33299},[36,80011,79833],{"class":98},[36,80013,80014],{"class":59},"'大师监制龙泉青瓷茶叶罐'",[36,80016,31899],{"class":98},[36,80018,80019,80021,80024],{"class":38,"line":33305},[36,80020,79843],{"class":98},[36,80022,80023],{"class":59},"'139.00'",[36,80025,31899],{"class":98},[36,80027,80028,80030,80033],{"class":38,"line":33311},[36,80029,79853],{"class":98},[36,80031,80032],{"class":59},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[36,80034,31899],{"class":98},[36,80036,80037],{"class":38,"line":33320},[36,80038,78324],{"class":98},[36,80040,80041],{"class":38,"line":33326},[36,80042,79818],{"class":98},[36,80044,80045,80047,80050],{"class":38,"line":33337},[36,80046,79823],{"class":98},[36,80048,80049],{"class":59},"'3997185'",[36,80051,31899],{"class":98},[36,80053,80054,80056,80059],{"class":38,"line":33343},[36,80055,79833],{"class":98},[36,80057,80058],{"class":59},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[36,80060,31899],{"class":98},[36,80062,80063,80065,80068],{"class":38,"line":33362},[36,80064,79843],{"class":98},[36,80066,80067],{"class":59},"'108.00'",[36,80069,31899],{"class":98},[36,80071,80072,80074,80077],{"class":38,"line":33368},[36,80073,79853],{"class":98},[36,80075,80076],{"class":59},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[36,80078,31899],{"class":98},[36,80080,80081],{"class":38,"line":33379},[36,80082,78324],{"class":98},[36,80084,80085],{"class":38,"line":33385},[36,80086,79818],{"class":98},[36,80088,80089,80091,80094],{"class":38,"line":33405},[36,80090,79823],{"class":98},[36,80092,80093],{"class":59},"'3997403'",[36,80095,31899],{"class":98},[36,80097,80098,80100,80103],{"class":38,"line":33421},[36,80099,79833],{"class":98},[36,80101,80102],{"class":59},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[36,80104,31899],{"class":98},[36,80106,80107,80109,80112],{"class":38,"line":33427},[36,80108,79843],{"class":98},[36,80110,80111],{"class":59},"'100.00'",[36,80113,31899],{"class":98},[36,80115,80116,80118,80121],{"class":38,"line":33441},[36,80117,79853],{"class":98},[36,80119,80120],{"class":59},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[36,80122,31899],{"class":98},[36,80124,80125],{"class":38,"line":33447},[36,80126,78324],{"class":98},[36,80128,80129],{"class":38,"line":33453},[36,80130,79818],{"class":98},[36,80132,80133,80135,80138],{"class":38,"line":33464},[36,80134,79823],{"class":98},[36,80136,80137],{"class":59},"'3998274'",[36,80139,31899],{"class":98},[36,80141,80142,80144,80147],{"class":38,"line":33470},[36,80143,79833],{"class":98},[36,80145,80146],{"class":59},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[36,80148,31899],{"class":98},[36,80150,80151,80153,80155],{"class":38,"line":33476},[36,80152,79843],{"class":98},[36,80154,80023],{"class":59},[36,80156,31899],{"class":98},[36,80158,80159,80161,80164],{"class":38,"line":33486},[36,80160,79853],{"class":98},[36,80162,80163],{"class":59},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[36,80165,31899],{"class":98},[36,80167,80168],{"class":38,"line":33492},[36,80169,78324],{"class":98},[36,80171,80172],{"class":38,"line":33503},[36,80173,53541],{"class":98},[36,80175,80176],{"class":38,"line":33509},[36,80177,247],{"emptyLinePlaceholder":246},[36,80179,80180],{"class":38,"line":33519},[36,80181,80182],{"class":42},"    \u002F\u002F 1.渲染函数\n",[36,80184,80185,80187,80189,80191,80193],{"class":38,"line":33524},[36,80186,70516],{"class":163},[36,80188,70519],{"class":55},[36,80190,621],{"class":98},[36,80192,4331],{"class":5667},[36,80194,12881],{"class":98},[36,80196,80197],{"class":38,"line":33530},[36,80198,80199],{"class":42},"      \u002F\u002F 声明空字符串\n",[36,80201,80202,80205,80208,80210],{"class":38,"line":33579},[36,80203,80204],{"class":163},"      let",[36,80206,80207],{"class":98}," str ",[36,80209,176],{"class":163},[36,80211,70536],{"class":59},[36,80213,80214],{"class":38,"line":33626},[36,80215,70541],{"class":42},[36,80217,80218,80220,80223,80225,80228,80231],{"class":38,"line":33631},[36,80219,58439],{"class":98},[36,80221,80222],{"class":55},"forEach",[36,80224,621],{"class":98},[36,80226,80227],{"class":5667},"item",[36,80229,80230],{"class":163}," =>",[36,80232,16011],{"class":98},[36,80234,80235,80237,80240,80243,80245,80248,80250,80253,80256,80258],{"class":38,"line":33637},[36,80236,61702],{"class":163},[36,80238,80239],{"class":98}," { ",[36,80241,80242],{"class":109},"name",[36,80244,12874],{"class":98},[36,80246,80247],{"class":109},"price",[36,80249,12874],{"class":98},[36,80251,80252],{"class":109},"picture",[36,80254,80255],{"class":98}," } ",[36,80257,176],{"class":163},[36,80259,80260],{"class":98}," item\n",[36,80262,80263,80266,80268],{"class":38,"line":33656},[36,80264,80265],{"class":98},"        str ",[36,80267,9918],{"class":163},[36,80269,70600],{"class":59},[36,80271,80272],{"class":38,"line":33662},[36,80273,80274],{"class":59},"          \u003Cdiv class=\"item\">\n",[36,80276,80277,80280,80282],{"class":38,"line":33682},[36,80278,80279],{"class":59},"            \u003Cimg src=\"${",[36,80281,80252],{"class":98},[36,80283,80284],{"class":59},"}\" alt=\"\">\n",[36,80286,80287,80290,80292],{"class":38,"line":33688},[36,80288,80289],{"class":59},"            \u003Cp class=\"name\">${",[36,80291,80242],{"class":98},[36,80293,80294],{"class":59},"}\u003C\u002Fp>\n",[36,80296,80297,80300,80302],{"class":38,"line":33694},[36,80298,80299],{"class":59},"            \u003Cp class=\"price\">${",[36,80301,80247],{"class":98},[36,80303,80294],{"class":59},[36,80305,80306],{"class":38,"line":33704},[36,80307,80308],{"class":59},"          \u003C\u002Fdiv>\n",[36,80310,80311],{"class":38,"line":33709},[36,80312,80313],{"class":59},"        `\n",[36,80315,80316],{"class":38,"line":33715},[36,80317,65247],{"class":98},[36,80319,80320],{"class":38,"line":33731},[36,80321,80322],{"class":42},"      \u002F\u002F 追加给List\n",[36,80324,80325,80327,80329,80331,80334,80336,80338],{"class":38,"line":33776},[36,80326,56203],{"class":98},[36,80328,54831],{"class":55},[36,80330,621],{"class":98},[36,80332,80333],{"class":59},"'.list'",[36,80335,74681],{"class":98},[36,80337,176],{"class":163},[36,80339,74417],{"class":98},[36,80341,80342],{"class":38,"line":33782},[36,80343,2646],{"class":98},[36,80345,80346],{"class":38,"line":33788},[36,80347,80348],{"class":42},"    \u002F\u002F 页面一打开就需要渲染\n",[36,80350,80351,80354],{"class":38,"line":33794},[36,80352,80353],{"class":55},"    render",[36,80355,80356],{"class":98},"(goodsList)\n",[36,80358,80359],{"class":38,"line":33805},[36,80360,80361],{"class":42},"    \u002F\u002F 2.过滤筛选\n",[36,80363,80364,80366,80368,80370,80373,80375,80377,80379,80381,80383,80385,80387],{"class":38,"line":33811},[36,80365,52839],{"class":98},[36,80367,54831],{"class":55},[36,80369,621],{"class":98},[36,80371,80372],{"class":59},"'.filter'",[36,80374,31259],{"class":98},[36,80376,58245],{"class":55},[36,80378,621],{"class":98},[36,80380,58250],{"class":59},[36,80382,12874],{"class":98},[36,80384,170],{"class":5667},[36,80386,80230],{"class":163},[36,80388,16011],{"class":98},[36,80390,80391],{"class":38,"line":33817},[36,80392,80393],{"class":42},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[36,80395,80396,80398,80400,80403,80405,80407,80409,80411],{"class":38,"line":33823},[36,80397,58660],{"class":163},[36,80399,80239],{"class":98},[36,80401,80402],{"class":109},"tagName",[36,80404,12874],{"class":98},[36,80406,31970],{"class":109},[36,80408,80255],{"class":98},[36,80410,176],{"class":163},[36,80412,80413],{"class":98}," e.target\n",[36,80415,80416],{"class":38,"line":33841},[36,80417,80418],{"class":42},"      \u002F\u002F 判断\n",[36,80420,80421,80423,80425,80427,80429],{"class":38,"line":33855},[36,80422,54912],{"class":163},[36,80424,67466],{"class":98},[36,80426,54918],{"class":163},[36,80428,68688],{"class":59},[36,80430,12881],{"class":98},[36,80432,80433],{"class":38,"line":33864},[36,80434,80435],{"class":42},"        \u002F\u002F console.log(11)\n",[36,80437,80438],{"class":38,"line":33873},[36,80439,80440],{"class":42},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[36,80442,80443],{"class":38,"line":33882},[36,80444,80445],{"class":42},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[36,80447,80448,80450,80452,80454],{"class":38,"line":33891},[36,80449,52262],{"class":163},[36,80451,52265],{"class":98},[36,80453,176],{"class":163},[36,80455,80456],{"class":98}," goodsList\n",[36,80458,80459,80461,80464,80466,80469],{"class":38,"line":33897},[36,80460,2955],{"class":163},[36,80462,80463],{"class":98}," (dataset.index ",[36,80465,54918],{"class":163},[36,80467,80468],{"class":59}," '1'",[36,80470,12881],{"class":98},[36,80472,80473,80476,80478,80481,80484,80486,80488,80490,80493,80495,80497,80500,80502,80504,80506],{"class":38,"line":33903},[36,80474,80475],{"class":98},"          arr ",[36,80477,176],{"class":163},[36,80479,80480],{"class":98}," goodsList.",[36,80482,80483],{"class":55},"filter",[36,80485,621],{"class":98},[36,80487,80227],{"class":5667},[36,80489,80230],{"class":163},[36,80491,80492],{"class":98}," item.price ",[36,80494,2178],{"class":163},[36,80496,4544],{"class":109},[36,80498,80499],{"class":163}," &&",[36,80501,80492],{"class":98},[36,80503,2067],{"class":163},[36,80505,6205],{"class":109},[36,80507,627],{"class":98},[36,80509,80510,80513,80515,80517,80519,80521,80524],{"class":38,"line":33911},[36,80511,80512],{"class":98},"        } ",[36,80514,2169],{"class":163},[36,80516,2172],{"class":163},[36,80518,80463],{"class":98},[36,80520,54918],{"class":163},[36,80522,80523],{"class":59}," '2'",[36,80525,12881],{"class":98},[36,80527,80528,80530,80532,80534,80536,80538,80540,80542,80544,80546,80548,80550,80552,80554,80557],{"class":38,"line":33916},[36,80529,80475],{"class":98},[36,80531,176],{"class":163},[36,80533,80480],{"class":98},[36,80535,80483],{"class":55},[36,80537,621],{"class":98},[36,80539,80227],{"class":5667},[36,80541,80230],{"class":163},[36,80543,80492],{"class":98},[36,80545,2178],{"class":163},[36,80547,6205],{"class":109},[36,80549,80499],{"class":163},[36,80551,80492],{"class":98},[36,80553,2067],{"class":163},[36,80555,80556],{"class":109}," 300",[36,80558,627],{"class":98},[36,80560,80561,80563,80565,80567,80569,80571,80574],{"class":38,"line":33922},[36,80562,80512],{"class":98},[36,80564,2169],{"class":163},[36,80566,2172],{"class":163},[36,80568,80463],{"class":98},[36,80570,54918],{"class":163},[36,80572,80573],{"class":59}," '3'",[36,80575,12881],{"class":98},[36,80577,80578,80580,80582,80584,80586,80588,80590,80592,80594,80596,80598],{"class":38,"line":33933},[36,80579,80475],{"class":98},[36,80581,176],{"class":163},[36,80583,80480],{"class":98},[36,80585,80483],{"class":55},[36,80587,621],{"class":98},[36,80589,80227],{"class":5667},[36,80591,80230],{"class":163},[36,80593,80492],{"class":98},[36,80595,2178],{"class":163},[36,80597,80556],{"class":109},[36,80599,627],{"class":98},[36,80601,80602],{"class":38,"line":33939},[36,80603,2987],{"class":98},[36,80605,80606],{"class":38,"line":33959},[36,80607,80608],{"class":42},"        \u002F\u002F 渲染函数\n",[36,80610,80611,80613],{"class":38,"line":33965},[36,80612,70840],{"class":55},[36,80614,52844],{"class":98},[36,80616,80617],{"class":38,"line":33971},[36,80618,52830],{"class":98},[36,80620,80621],{"class":38,"line":33977},[36,80622,247],{"emptyLinePlaceholder":246},[36,80624,80625],{"class":38,"line":33994},[36,80626,33894],{"class":98},[36,80628,80629,80631,80633],{"class":38,"line":34000},[36,80630,52849],{"class":98},[36,80632,52245],{"class":51733},[36,80634,188],{"class":98},[36,80636,80637,80639,80641],{"class":38,"line":34006},[36,80638,52217],{"class":98},[36,80640,52232],{"class":51733},[36,80642,188],{"class":98},[36,80644,80645],{"class":38,"line":34012},[36,80646,247],{"emptyLinePlaceholder":246},[36,80648,80649,80651,80653],{"class":38,"line":34018},[36,80650,52217],{"class":98},[36,80652,51068],{"class":51733},[36,80654,188],{"class":98},[559,80656,80658],{"id":80657},"_410-深入了解对象","4.10 深入了解对象",[588,80660,80662],{"id":80661},"_4101-创建对象","4.10.1 创建对象",[14,80664,80665],{},[1941,80666],{"alt":31,"src":80667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,80669,80670],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[588,80672,80674],{"id":80673},"_4102-构造函数","4.10.2 构造函数",[14,80676,80677,80680],{},[765,80678,80679],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,80682,80683,80686],{},[765,80684,80685],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[26,80688,80690],{"className":51066,"code":80689,"language":51068,"meta":31,"style":31},"\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",[33,80691,80692,80700,80705,80726,80739,80751,80763,80767,80772,80799,80804,80831],{"__ignoreMap":31},[36,80693,80694,80696,80698],{"class":38,"line":39},[36,80695,179],{"class":98},[36,80697,52245],{"class":51733},[36,80699,188],{"class":98},[36,80701,80702],{"class":38,"line":46},[36,80703,80704],{"class":42},"\u002F\u002F例：\n",[36,80706,80707,80709,80712,80714,80716,80718,80720,80722,80724],{"class":38,"line":52},[36,80708,54881],{"class":163},[36,80710,80711],{"class":55}," Pig",[36,80713,621],{"class":98},[36,80715,80242],{"class":5667},[36,80717,992],{"class":98},[36,80719,70653],{"class":5667},[36,80721,992],{"class":98},[36,80723,70670],{"class":5667},[36,80725,12881],{"class":98},[36,80727,80728,80731,80734,80736],{"class":38,"line":66},[36,80729,80730],{"class":109},"    this",[36,80732,80733],{"class":98},".name",[36,80735,176],{"class":163},[36,80737,80738],{"class":98},"name\n",[36,80740,80741,80743,80746,80748],{"class":38,"line":72},[36,80742,80730],{"class":109},[36,80744,80745],{"class":98},".age",[36,80747,176],{"class":163},[36,80749,80750],{"class":98},"age\n",[36,80752,80753,80755,80758,80760],{"class":38,"line":82},[36,80754,80730],{"class":109},[36,80756,80757],{"class":98},".gender",[36,80759,176],{"class":163},[36,80761,80762],{"class":98},"gender    \n",[36,80764,80765],{"class":38,"line":88},[36,80766,2044],{"class":98},[36,80768,80769],{"class":38,"line":113},[36,80770,80771],{"class":42},"\u002F\u002F创建佩奇对象\n",[36,80773,80774,80776,80779,80781,80783,80785,80788,80790,80792,80794,80797],{"class":38,"line":119},[36,80775,7243],{"class":163},[36,80777,80778],{"class":109}," Peppa",[36,80780,12156],{"class":163},[36,80782,80711],{"class":55},[36,80784,621],{"class":98},[36,80786,80787],{"class":59},"'佩奇'",[36,80789,992],{"class":98},[36,80791,958],{"class":109},[36,80793,992],{"class":98},[36,80795,80796],{"class":59},"'女'",[36,80798,627],{"class":98},[36,80800,80801],{"class":38,"line":131},[36,80802,80803],{"class":42},"\u002F\u002F创建乔治对象\n",[36,80805,80806,80808,80811,80813,80815,80817,80820,80822,80824,80826,80829],{"class":38,"line":137},[36,80807,7243],{"class":163},[36,80809,80810],{"class":109}," George",[36,80812,12156],{"class":163},[36,80814,80711],{"class":55},[36,80816,621],{"class":98},[36,80818,80819],{"class":59},"'乔治'",[36,80821,992],{"class":98},[36,80823,689],{"class":109},[36,80825,992],{"class":98},[36,80827,80828],{"class":59},"'男'",[36,80830,627],{"class":98},[36,80832,80833,80835,80837],{"class":38,"line":147},[36,80834,52217],{"class":98},[36,80836,52245],{"class":51733},[36,80838,188],{"class":98},[14,80840,80841],{},[1941,80842],{"alt":31,"src":80843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,80845,80846],{},[1941,80847],{"alt":31,"src":80848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,80850,80851],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,80853,80854],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,80856,80857],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,80859,80860],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,80862,80863],{},"这里用等号是因为：对象.属性=值",[14,80865,80866],{},"①利用对象字面量创建对象",[14,80868,80869],{},"const o={",[14,80871,80872],{},"name:'pink'",[14,80874,80875],{},"} ②利用new Object创建对象",[14,80877,80878],{},"const o=new Object({name:'pink'})",[14,80880,80881],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,80883,80884],{},"构造函数创建对象的执行过程：",[14,80886,80887],{},[1941,80888],{"alt":31,"src":80889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[588,80891,80893],{"id":80892},"_4103-实例成员","4.10.3 实例成员",[14,80895,80896],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[571,80898,80899,80902,80905],{},[574,80900,80901],{},"实例对象的属性和方法即为实例成员",[574,80903,80904],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[574,80906,80907],{},"构造函数创建的实例对象彼此独立互不影响",[588,80909,80911],{"id":80910},"_4104-静态成员","4.10.4 静态成员",[14,80913,80914],{},[1941,80915],{"alt":31,"src":80916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,80918,80919],{},"静态成员有Date.now() Math.PI Math.random()",[14,80921,80922],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,80924,80925],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,80927,80928],{},"function Pig(name) n {",[14,80930,80931],{},"this.name=name",[14,80933,1558],{},[14,80935,80936],{},"Pig.eyes=2",[14,80938,80939],{},"Pig.sayHai=function () { console.log(this) }",[14,80941,80942],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,80944,80945],{},"console.log(Pig.eyes) \u002F\u002F2",[14,80947,11771],{},[571,80949,80950,80953,80956,80959,80962],{},[574,80951,80952],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[574,80954,80955],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[574,80957,80958],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[574,80960,80961],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[574,80963,80964],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,80966,80967],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[588,80969,80971],{"id":80970},"_4105-内置构造函数","4.10.5 内置构造函数",[14,80973,80974],{},"内置构造函数包含：",[14,80976,80977],{},[1941,80978],{"alt":31,"src":80979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,80981,80982],{},[1941,80983],{"alt":31,"src":80984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,80986,80987],{},"这些基本数据类型，js对他们进行了包装",[52245,80989,80990],{},"\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",[22437,80992,80994],{"id":80993},"_41051-object","4.10.5.1 Object",[14,80996,80997],{},"Object 是内置的构造函数，用于创建普通对象",[14,80999,81000],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[26,81002,81004],{"className":51066,"code":81003,"language":51068,"meta":31,"style":31},"const user=new Object({name:'小明',age:15})\n",[33,81005,81006],{"__ignoreMap":31},[36,81007,81008],{"class":38,"line":39},[36,81009,81003],{"class":98},[14,81011,81012],{},"三个常用的静态方法：",[23349,81014,81016],{"id":81015},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,81018,81019],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,81021,81022],{},[1941,81023],{"alt":31,"src":81024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,81026,81027],{},[1941,81028],{"alt":31,"src":81029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[26,81031,81033],{"className":53499,"code":81032,"language":53501,"meta":31,"style":31},"\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",[33,81034,81035,81043,81051,81056,81061,81066,81071,81076,81081,81089],{"__ignoreMap":31},[36,81036,81037,81039,81041],{"class":38,"line":39},[36,81038,179],{"class":98},[36,81040,52232],{"class":51733},[36,81042,188],{"class":98},[36,81044,81045,81047,81049],{"class":38,"line":46},[36,81046,52576],{"class":98},[36,81048,52245],{"class":51733},[36,81050,188],{"class":98},[36,81052,81053],{"class":38,"line":52},[36,81054,81055],{"class":98},"    const o = { name: 'pink', age: 6 }\n",[36,81057,81058],{"class":38,"line":66},[36,81059,81060],{"class":98},"    \u002F\u002F 获得所有属性名\n",[36,81062,81063],{"class":38,"line":72},[36,81064,81065],{"class":98},"    const arr = Object.keys(o)\n",[36,81067,81068],{"class":38,"line":82},[36,81069,81070],{"class":98},"    console.log(arr)\n",[36,81072,81073],{"class":38,"line":88},[36,81074,81075],{"class":98},"    \u002F\u002F 获得所有属性值\n",[36,81077,81078],{"class":38,"line":113},[36,81079,81080],{"class":98},"    console.log(Object.values(o))\n",[36,81082,81083,81085,81087],{"class":38,"line":119},[36,81084,52849],{"class":98},[36,81086,52245],{"class":51733},[36,81088,188],{"class":98},[36,81090,81091,81093,81095],{"class":38,"line":131},[36,81092,52217],{"class":98},[36,81094,52232],{"class":51733},[36,81096,188],{"class":98},[23349,81098,81100],{"id":81099},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,81102,81103],{},"Object.assign(oo,o)",[14,81105,81106],{},"后的东西添加给前 是追加",[14,81108,81109],{},[1941,81110],{"alt":31,"src":81111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,81113,81114],{},[1941,81115],{"alt":31,"src":81116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[26,81118,81120],{"className":53499,"code":81119,"language":53501,"meta":31,"style":31},"\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",[33,81121,81122,81130,81138,81142,81146,81150,81154,81158,81162,81167,81172,81177,81182,81187,81195],{"__ignoreMap":31},[36,81123,81124,81126,81128],{"class":38,"line":39},[36,81125,179],{"class":98},[36,81127,52232],{"class":51733},[36,81129,188],{"class":98},[36,81131,81132,81134,81136],{"class":38,"line":46},[36,81133,52576],{"class":98},[36,81135,52245],{"class":51733},[36,81137,188],{"class":98},[36,81139,81140],{"class":38,"line":52},[36,81141,81055],{"class":98},[36,81143,81144],{"class":38,"line":66},[36,81145,81060],{"class":98},[36,81147,81148],{"class":38,"line":72},[36,81149,81065],{"class":98},[36,81151,81152],{"class":38,"line":82},[36,81153,81070],{"class":98},[36,81155,81156],{"class":38,"line":88},[36,81157,81075],{"class":98},[36,81159,81160],{"class":38,"line":113},[36,81161,81080],{"class":98},[36,81163,81164],{"class":38,"line":119},[36,81165,81166],{"class":98},"    const oo = {}\n",[36,81168,81169],{"class":38,"line":131},[36,81170,81171],{"class":98},"    Object.assign(oo, o)\n",[36,81173,81174],{"class":38,"line":137},[36,81175,81176],{"class":98},"    console.log(oo)\n",[36,81178,81179],{"class":38,"line":147},[36,81180,81181],{"class":98},"    Object.assign(o, { gender: '女' })\n",[36,81183,81184],{"class":38,"line":153},[36,81185,81186],{"class":98},"    console.log(o)\n",[36,81188,81189,81191,81193],{"class":38,"line":191},[36,81190,52849],{"class":98},[36,81192,52245],{"class":51733},[36,81194,188],{"class":98},[36,81196,81197,81199,81201],{"class":38,"line":197},[36,81198,52217],{"class":98},[36,81200,52232],{"class":51733},[36,81202,188],{"class":98},[14,81204,81205],{},[1941,81206],{"alt":31,"src":81207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22437,81209,81211],{"id":81210},"_41052-array","4.10.5.2 Array",[14,81213,81214],{},"Array 是内置的构造函数，用于创建数组",[14,81216,81217],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[26,81219,81221],{"className":51066,"code":81220,"language":51068,"meta":31,"style":31},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[33,81222,81223,81228],{"__ignoreMap":31},[36,81224,81225],{"class":38,"line":39},[36,81226,81227],{"class":98},"const arr=new Array(3,5)\n",[36,81229,81230],{"class":38,"line":46},[36,81231,81232],{"class":98},"console.log(arr)  \u002F\u002F[3,5]\n",[14,81234,81235],{},"Array的实例方法，这个方法是实例成员",[14,81237,81238],{},[1941,81239],{"alt":31,"src":81240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23349,81242,81244],{"id":81243},"_410521-reduce","4.10.5.2.1 reduce",[14,81246,81247],{},[1941,81248],{"alt":31,"src":81249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[26,81251,81253],{"className":53499,"code":81252,"language":53501,"meta":31,"style":31},"\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",[33,81254,81255,81263,81271,81276,81281,81286,81291,81295,81300,81305,81310,81314,81319,81324,81328,81333,81338,81343,81351],{"__ignoreMap":31},[36,81256,81257,81259,81261],{"class":38,"line":39},[36,81258,179],{"class":98},[36,81260,52232],{"class":51733},[36,81262,188],{"class":98},[36,81264,81265,81267,81269],{"class":38,"line":46},[36,81266,52576],{"class":98},[36,81268,52245],{"class":51733},[36,81270,188],{"class":98},[36,81272,81273],{"class":38,"line":52},[36,81274,81275],{"class":98},"    const arr = [1, 5, 8]\n",[36,81277,81278],{"class":38,"line":66},[36,81279,81280],{"class":98},"    \u002F\u002F 1.没有初始值\n",[36,81282,81283],{"class":38,"line":72},[36,81284,81285],{"class":98},"    const total = arr.reduce(function (prev, current) {\n",[36,81287,81288],{"class":38,"line":82},[36,81289,81290],{"class":98},"      return prev + current\n",[36,81292,81293],{"class":38,"line":88},[36,81294,33894],{"class":98},[36,81296,81297],{"class":38,"line":113},[36,81298,81299],{"class":98},"    console.log(total)   \u002F\u002F14\n",[36,81301,81302],{"class":38,"line":119},[36,81303,81304],{"class":98},"    \u002F\u002F 2.有初始值\n",[36,81306,81307],{"class":38,"line":131},[36,81308,81309],{"class":98},"    const total1 = arr.reduce(function (prev, current) {\n",[36,81311,81312],{"class":38,"line":137},[36,81313,81290],{"class":98},[36,81315,81316],{"class":38,"line":147},[36,81317,81318],{"class":98},"    }, 10)\n",[36,81320,81321],{"class":38,"line":153},[36,81322,81323],{"class":98},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[36,81325,81326],{"class":38,"line":191},[36,81327,247],{"emptyLinePlaceholder":246},[36,81329,81330],{"class":38,"line":197},[36,81331,81332],{"class":98},"    \u002F\u002F 3.箭头函数写法\n",[36,81334,81335],{"class":38,"line":217},[36,81336,81337],{"class":98},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[36,81339,81340],{"class":38,"line":223},[36,81341,81342],{"class":98},"    console.log(total2)   \u002F\u002F24\n",[36,81344,81345,81347,81349],{"class":38,"line":243},[36,81346,52849],{"class":98},[36,81348,52245],{"class":51733},[36,81350,188],{"class":98},[36,81352,81353,81355,81357],{"class":38,"line":250},[36,81354,52217],{"class":98},[36,81356,52232],{"class":51733},[36,81358,188],{"class":98},[14,81360,81361],{},"执行过程：",[571,81363,81364,81367,81370],{},[574,81365,81366],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[574,81368,81369],{},"每一次循环，把返回值给作为下一次循环的上一次值",[574,81371,81372],{},"如果有起始值，则起始值作为上一次值",[26,81374,81376],{"className":53499,"code":81375,"language":53501,"meta":31,"style":31},"\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",[33,81377,81378,81386,81394,81398,81402,81406,81410,81414,81418,81423,81428,81433,81438,81443,81447,81451,81455,81459,81463,81467,81472,81476,81481,81485,81490,81495,81499,81503,81507,81515],{"__ignoreMap":31},[36,81379,81380,81382,81384],{"class":38,"line":39},[36,81381,179],{"class":98},[36,81383,52232],{"class":51733},[36,81385,188],{"class":98},[36,81387,81388,81390,81392],{"class":38,"line":46},[36,81389,52576],{"class":98},[36,81391,52245],{"class":51733},[36,81393,188],{"class":98},[36,81395,81396],{"class":38,"line":52},[36,81397,81275],{"class":98},[36,81399,81400],{"class":38,"line":66},[36,81401,81280],{"class":98},[36,81403,81404],{"class":38,"line":72},[36,81405,81285],{"class":98},[36,81407,81408],{"class":38,"line":82},[36,81409,81290],{"class":98},[36,81411,81412],{"class":38,"line":88},[36,81413,33894],{"class":98},[36,81415,81416],{"class":38,"line":113},[36,81417,81299],{"class":98},[36,81419,81420],{"class":38,"line":119},[36,81421,81422],{"class":98},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[36,81424,81425],{"class":38,"line":131},[36,81426,81427],{"class":98},"    \u002F\u002F     1              5                    6\n",[36,81429,81430],{"class":38,"line":137},[36,81431,81432],{"class":98},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[36,81434,81435],{"class":38,"line":147},[36,81436,81437],{"class":98},"    \u002F\u002F     6              8                    14\n",[36,81439,81440],{"class":38,"line":153},[36,81441,81442],{"class":98},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[36,81444,81445],{"class":38,"line":191},[36,81446,81304],{"class":98},[36,81448,81449],{"class":38,"line":197},[36,81450,81309],{"class":98},[36,81452,81453],{"class":38,"line":217},[36,81454,81290],{"class":98},[36,81456,81457],{"class":38,"line":223},[36,81458,81318],{"class":98},[36,81460,81461],{"class":38,"line":243},[36,81462,81323],{"class":98},[36,81464,81465],{"class":38,"line":250},[36,81466,81422],{"class":98},[36,81468,81469],{"class":38,"line":256},[36,81470,81471],{"class":98},"    \u002F\u002F     10             1                     11\n",[36,81473,81474],{"class":38,"line":273},[36,81475,81432],{"class":98},[36,81477,81478],{"class":38,"line":278},[36,81479,81480],{"class":98},"    \u002F\u002F     11             5                    16\n",[36,81482,81483],{"class":38,"line":284},[36,81484,81432],{"class":98},[36,81486,81487],{"class":38,"line":315},[36,81488,81489],{"class":98},"    \u002F\u002F     16             8                    24\n",[36,81491,81492],{"class":38,"line":320},[36,81493,81494],{"class":98},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[36,81496,81497],{"class":38,"line":326},[36,81498,81332],{"class":98},[36,81500,81501],{"class":38,"line":343},[36,81502,81337],{"class":98},[36,81504,81505],{"class":38,"line":348},[36,81506,81342],{"class":98},[36,81508,81509,81511,81513],{"class":38,"line":354},[36,81510,52849],{"class":98},[36,81512,52245],{"class":51733},[36,81514,188],{"class":98},[36,81516,81517,81519,81521],{"class":38,"line":370},[36,81518,52217],{"class":98},[36,81520,52232],{"class":51733},[36,81522,188],{"class":98},[23349,81524,81526],{"id":81525},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,81528,81529],{},[1941,81530],{"alt":31,"src":81531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[26,81533,81535],{"className":53499,"code":81534,"language":53501,"meta":31,"style":31},"\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",[33,81536,81537,81545,81553,81558,81563,81568,81573,81577,81582,81587,81592,81597,81602,81607,81611,81616,81620,81625,81633],{"__ignoreMap":31},[36,81538,81539,81541,81543],{"class":38,"line":39},[36,81540,179],{"class":98},[36,81542,52232],{"class":51733},[36,81544,188],{"class":98},[36,81546,81547,81549,81551],{"class":38,"line":46},[36,81548,52576],{"class":98},[36,81550,52245],{"class":51733},[36,81552,188],{"class":98},[36,81554,81555],{"class":38,"line":52},[36,81556,81557],{"class":98},"    const arr = [\n",[36,81559,81560],{"class":38,"line":66},[36,81561,81562],{"class":98},"      { name: '张三', salary: 10000 },\n",[36,81564,81565],{"class":38,"line":72},[36,81566,81567],{"class":98},"      { name: '李四', salary: 10000 },\n",[36,81569,81570],{"class":38,"line":82},[36,81571,81572],{"class":98},"      { name: '王五', salary: 10000 }\n",[36,81574,81575],{"class":38,"line":88},[36,81576,53541],{"class":98},[36,81578,81579],{"class":38,"line":113},[36,81580,81581],{"class":98},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[36,81583,81584],{"class":38,"line":119},[36,81585,81586],{"class":98},"    \u002F\u002F prev是累计值\n",[36,81588,81589],{"class":38,"line":131},[36,81590,81591],{"class":98},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[36,81593,81594],{"class":38,"line":137},[36,81595,81596],{"class":98},"    console.log(total)\n",[36,81598,81599],{"class":38,"line":147},[36,81600,81601],{"class":98},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[36,81603,81604],{"class":38,"line":153},[36,81605,81606],{"class":98},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[36,81608,81609],{"class":38,"line":191},[36,81610,81601],{"class":98},[36,81612,81613],{"class":38,"line":197},[36,81614,81615],{"class":98},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[36,81617,81618],{"class":38,"line":217},[36,81619,81601],{"class":98},[36,81621,81622],{"class":38,"line":223},[36,81623,81624],{"class":98},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[36,81626,81627,81629,81631],{"class":38,"line":243},[36,81628,52849],{"class":98},[36,81630,52245],{"class":51733},[36,81632,188],{"class":98},[36,81634,81635,81637,81639],{"class":38,"line":250},[36,81636,52217],{"class":98},[36,81638,52232],{"class":51733},[36,81640,188],{"class":98},[23349,81642,81644],{"id":81643},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,81646,81647],{},[1941,81648],{"alt":31,"src":81649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,81651,81652],{},[1941,81653],{"alt":31,"src":81654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[571,81656,81657],{},[574,81658,81659],{},"find()",[14,81661,81662],{},"循环查找，找到第一个就ok",[14,81664,81665],{},[20,81666,81669],{"href":81667,"rel":81668},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[26,81671,81673],{"className":51066,"code":81672,"language":51068,"meta":31,"style":31},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[33,81674,81675,81680,81685],{"__ignoreMap":31},[36,81676,81677],{"class":38,"line":39},[36,81678,81679],{"class":98},"const array1 = [5, 12, 8, 130, 44]\n",[36,81681,81682],{"class":38,"line":46},[36,81683,81684],{"class":98},"const found = array1.find((element) => element > 10)\n",[36,81686,81687],{"class":38,"line":52},[36,81688,81689],{"class":98},"console.log(found)  \u002F\u002F12\n",[14,81691,81692,81694,81695,81700,81701,81704,81705,81707,81708,81713,81714,81716,81717,81719,81720,81722,81723],{},[33,81693,81659],{}," 方法是一个",[20,81696,81699],{"href":81697,"rel":81698},"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",[24],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[33,81702,81703],{},"callbackFn"," 函数，直到 ",[33,81706,81703],{}," 返回一个",[20,81709,81712],{"href":81710,"rel":81711},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24],"真值","。然后 ",[33,81715,81659],{}," 返回该元素并停止迭代数组。如果 ",[33,81718,81703],{}," 从未返回真值，则 ",[33,81721,81659],{}," 返回 ",[33,81724,81725],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[26,81727,81729],{"className":53499,"code":81728,"language":53501,"meta":31,"style":31},"\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",[33,81730,81731,81739,81747,81752,81757,81762,81766,81771,81776,81780,81785,81790,81794,81798,81803,81808,81812,81816,81821,81826,81831,81836,81841,81845,81850,81855,81860,81865,81869,81874,81882],{"__ignoreMap":31},[36,81732,81733,81735,81737],{"class":38,"line":39},[36,81734,179],{"class":98},[36,81736,52232],{"class":51733},[36,81738,188],{"class":98},[36,81740,81741,81743,81745],{"class":38,"line":46},[36,81742,52576],{"class":98},[36,81744,52245],{"class":51733},[36,81746,188],{"class":98},[36,81748,81749],{"class":38,"line":52},[36,81750,81751],{"class":98},"    const arr = ['red', 'blue', 'green']\n",[36,81753,81754],{"class":38,"line":66},[36,81755,81756],{"class":98},"    const found = arr.find(item => item === 'pink')\n",[36,81758,81759],{"class":38,"line":72},[36,81760,81761],{"class":98},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[36,81763,81764],{"class":38,"line":82},[36,81765,247],{"emptyLinePlaceholder":246},[36,81767,81768],{"class":38,"line":88},[36,81769,81770],{"class":98},"    \u002F\u002F 使用场景，用于查找数据\n",[36,81772,81773],{"class":38,"line":113},[36,81774,81775],{"class":98},"    const arr1 = [\n",[36,81777,81778],{"class":38,"line":119},[36,81779,79818],{"class":98},[36,81781,81782],{"class":38,"line":131},[36,81783,81784],{"class":98},"        name: '小米',\n",[36,81786,81787],{"class":38,"line":137},[36,81788,81789],{"class":98},"        price: 1999\n",[36,81791,81792],{"class":38,"line":147},[36,81793,78324],{"class":98},[36,81795,81796],{"class":38,"line":153},[36,81797,79818],{"class":98},[36,81799,81800],{"class":38,"line":191},[36,81801,81802],{"class":98},"        name: '华为',\n",[36,81804,81805],{"class":38,"line":197},[36,81806,81807],{"class":98},"        price: 3999\n",[36,81809,81810],{"class":38,"line":217},[36,81811,52830],{"class":98},[36,81813,81814],{"class":38,"line":223},[36,81815,53541],{"class":98},[36,81817,81818],{"class":38,"line":243},[36,81819,81820],{"class":98},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[36,81822,81823],{"class":38,"line":250},[36,81824,81825],{"class":98},"    \u002F\u002F const found1 = arr1.find(item => {\n",[36,81827,81828],{"class":38,"line":256},[36,81829,81830],{"class":98},"    \u002F\u002F   if (item.name === '小米') {\n",[36,81832,81833],{"class":38,"line":273},[36,81834,81835],{"class":98},"    \u002F\u002F     return item\n",[36,81837,81838],{"class":38,"line":278},[36,81839,81840],{"class":98},"    \u002F\u002F   }\n",[36,81842,81843],{"class":38,"line":284},[36,81844,63722],{"class":98},[36,81846,81847],{"class":38,"line":315},[36,81848,81849],{"class":98},"    \u002F\u002F 另一种写法\n",[36,81851,81852],{"class":38,"line":320},[36,81853,81854],{"class":98},"    const found1 = arr1.find(item => {\n",[36,81856,81857],{"class":38,"line":326},[36,81858,81859],{"class":98},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[36,81861,81862],{"class":38,"line":343},[36,81863,81864],{"class":98},"      return item.name = '小米'\n",[36,81866,81867],{"class":38,"line":348},[36,81868,33894],{"class":98},[36,81870,81871],{"class":38,"line":354},[36,81872,81873],{"class":98},"    console.log(found1)\n",[36,81875,81876,81878,81880],{"class":38,"line":370},[36,81877,52849],{"class":98},[36,81879,52245],{"class":51733},[36,81881,188],{"class":98},[36,81883,81884,81886,81888],{"class":38,"line":375},[36,81885,52217],{"class":98},[36,81887,52232],{"class":51733},[36,81889,188],{"class":98},[14,81891,81892],{},[1941,81893],{"alt":31,"src":81894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,81896,81897],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[571,81899,81900],{"start":46},[574,81901,81902],{},"every()返回的是布尔值",[14,81904,81905],{},[20,81906,81909],{"href":81907,"rel":81908},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,81911,81912],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,81914,81915],{},"some是只有有一个就没问题",[14,81917,81918],{},"every是必须全是才行",[26,81920,81924],{"className":81921,"code":81922,"language":81923,"meta":31,"style":31},"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",[33,81925,81926,81942,81956,81960,81969],{"__ignoreMap":31},[36,81927,81928,81930,81933,81935,81937,81940],{"class":38,"line":39},[36,81929,54881],{"class":163},[36,81931,81932],{"class":98}," isBigEnough(element, ",[36,81934,74490],{"class":163},[36,81936,12874],{"class":98},[36,81938,81939],{"class":163},"array",[36,81941,12881],{"class":98},[36,81943,81944,81947,81950,81952,81954],{"class":38,"line":46},[36,81945,81946],{"class":163},"  return",[36,81948,81949],{"class":98}," element ",[36,81951,2178],{"class":163},[36,81953,2497],{"class":109},[36,81955,1772],{"class":98},[36,81957,81958],{"class":38,"line":52},[36,81959,2044],{"class":98},[36,81961,81962,81965,81967],{"class":38,"line":66},[36,81963,81964],{"class":98},"[12, 5, 8, 130, 44].every(isBigEnough); ",[36,81966,33762],{"class":163},[36,81968,54948],{"class":98},[36,81970,81971,81974,81976],{"class":38,"line":72},[36,81972,81973],{"class":98},"[12, 54, 18, 130, 44].every(isBigEnough); ",[36,81975,33762],{"class":163},[36,81977,58372],{"class":98},[26,81979,81981],{"className":53499,"code":81980,"language":53501,"meta":31,"style":31},"\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",[33,81982,81983,81991,81999,82004,82008,82013,82018,82026],{"__ignoreMap":31},[36,81984,81985,81987,81989],{"class":38,"line":39},[36,81986,179],{"class":98},[36,81988,52232],{"class":51733},[36,81990,188],{"class":98},[36,81992,81993,81995,81997],{"class":38,"line":46},[36,81994,52576],{"class":98},[36,81996,52245],{"class":51733},[36,81998,188],{"class":98},[36,82000,82001],{"class":38,"line":52},[36,82002,82003],{"class":98},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[36,82005,82006],{"class":38,"line":66},[36,82007,78754],{"class":98},[36,82009,82010],{"class":38,"line":72},[36,82011,82012],{"class":98},"    const flag = arr.every(item => item >= 10)\n",[36,82014,82015],{"class":38,"line":82},[36,82016,82017],{"class":98},"    console.log(flag)    \u002F\u002Ftrue\n",[36,82019,82020,82022,82024],{"class":38,"line":88},[36,82021,52849],{"class":98},[36,82023,52245],{"class":51733},[36,82025,188],{"class":98},[36,82027,82028,82030,82032],{"class":38,"line":113},[36,82029,52217],{"class":98},[36,82031,52232],{"class":51733},[36,82033,188],{"class":98},[26,82035,82037],{"className":53499,"code":82036,"language":53501,"meta":31,"style":31},"\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",[33,82038,82039,82047,82055,82059,82064,82069,82074,82082],{"__ignoreMap":31},[36,82040,82041,82043,82045],{"class":38,"line":39},[36,82042,179],{"class":98},[36,82044,52232],{"class":51733},[36,82046,188],{"class":98},[36,82048,82049,82051,82053],{"class":38,"line":46},[36,82050,52576],{"class":98},[36,82052,52245],{"class":51733},[36,82054,188],{"class":98},[36,82056,82057],{"class":38,"line":52},[36,82058,82003],{"class":98},[36,82060,82061],{"class":38,"line":66},[36,82062,82063],{"class":98},"    const arr = [10, 0, 5]\n",[36,82065,82066],{"class":38,"line":72},[36,82067,82068],{"class":98},"    const flag = arr.some(item => item >= 10)\n",[36,82070,82071],{"class":38,"line":82},[36,82072,82073],{"class":98},"    console.log(flag)   \u002F\u002Ftrue\n",[36,82075,82076,82078,82080],{"class":38,"line":88},[36,82077,52849],{"class":98},[36,82079,52245],{"class":51733},[36,82081,188],{"class":98},[36,82083,82084,82086,82088],{"class":38,"line":113},[36,82085,52217],{"class":98},[36,82087,52232],{"class":51733},[36,82089,188],{"class":98},[23349,82091,82093],{"id":82092},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,82095,82096],{},[1941,82097],{"alt":31,"src":82098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[26,82100,82102],{"className":51066,"code":82101,"language":51068,"meta":31,"style":31},"\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",[33,82103,82104,82114,82128,82132,82140,82154,82174,82186,82194,82201,82213,82225,82237,82249,82259,82269,82273,82281,82289,82293,82301,82313,82321,82343,82348,82353,82386,82394,82402,82406],{"__ignoreMap":31},[36,82105,82106,82108,82110,82112],{"class":38,"line":39},[36,82107,51730],{"class":98},[36,82109,51734],{"class":51733},[36,82111,51737],{"class":55},[36,82113,188],{"class":98},[36,82115,82116,82118,82120,82122,82124,82126],{"class":38,"line":46},[36,82117,179],{"class":98},[36,82119,51068],{"class":51733},[36,82121,51748],{"class":55},[36,82123,176],{"class":98},[36,82125,51753],{"class":59},[36,82127,188],{"class":98},[36,82129,82130],{"class":38,"line":52},[36,82131,247],{"emptyLinePlaceholder":246},[36,82133,82134,82136,82138],{"class":38,"line":66},[36,82135,179],{"class":98},[36,82137,51766],{"class":51733},[36,82139,188],{"class":98},[36,82141,82142,82144,82146,82148,82150,82152],{"class":38,"line":72},[36,82143,52576],{"class":98},[36,82145,51776],{"class":51733},[36,82147,51779],{"class":55},[36,82149,176],{"class":98},[36,82151,51784],{"class":59},[36,82153,188],{"class":98},[36,82155,82156,82158,82160,82162,82164,82166,82168,82170,82172],{"class":38,"line":82},[36,82157,52576],{"class":98},[36,82159,51776],{"class":51733},[36,82161,15359],{"class":55},[36,82163,176],{"class":98},[36,82165,51823],{"class":59},[36,82167,51803],{"class":55},[36,82169,176],{"class":98},[36,82171,51830],{"class":59},[36,82173,188],{"class":98},[36,82175,82176,82178,82180,82182,82184],{"class":38,"line":88},[36,82177,52576],{"class":98},[36,82179,51839],{"class":51733},[36,82181,51842],{"class":98},[36,82183,51839],{"class":51733},[36,82185,188],{"class":98},[36,82187,82188,82190,82192],{"class":38,"line":113},[36,82189,52576],{"class":98},[36,82191,537],{"class":51733},[36,82193,188],{"class":98},[36,82195,82196,82199],{"class":38,"line":119},[36,82197,82198],{"class":51733},"    div",[36,82200,16011],{"class":98},[36,82202,82203,82205,82207,82209,82211],{"class":38,"line":131},[36,82204,55203],{"class":109},[36,82206,51869],{"class":98},[36,82208,2190],{"class":109},[36,82210,51924],{"class":163},[36,82212,1772],{"class":98},[36,82214,82215,82217,82219,82221,82223],{"class":38,"line":137},[36,82216,55217],{"class":109},[36,82218,51869],{"class":98},[36,82220,1015],{"class":109},[36,82222,51924],{"class":163},[36,82224,1772],{"class":98},[36,82226,82227,82229,82231,82233,82235],{"class":38,"line":147},[36,82228,57791],{"class":109},[36,82230,51869],{"class":98},[36,82232,1015],{"class":109},[36,82234,51924],{"class":163},[36,82236,1772],{"class":98},[36,82238,82239,82241,82243,82245,82247],{"class":38,"line":153},[36,82240,65565],{"class":109},[36,82242,51869],{"class":98},[36,82244,1112],{"class":109},[36,82246,51924],{"class":163},[36,82248,1772],{"class":98},[36,82250,82251,82253,82255,82257],{"class":38,"line":191},[36,82252,57718],{"class":109},[36,82254,51869],{"class":98},[36,82256,52024],{"class":109},[36,82258,1772],{"class":98},[36,82260,82261,82263,82265,82267],{"class":38,"line":197},[36,82262,55316],{"class":109},[36,82264,51869],{"class":98},[36,82266,52077],{"class":109},[36,82268,1772],{"class":98},[36,82270,82271],{"class":38,"line":217},[36,82272,2646],{"class":98},[36,82274,82275,82277,82279],{"class":38,"line":223},[36,82276,52849],{"class":98},[36,82278,537],{"class":51733},[36,82280,188],{"class":98},[36,82282,82283,82285,82287],{"class":38,"line":243},[36,82284,52217],{"class":98},[36,82286,51766],{"class":51733},[36,82288,188],{"class":98},[36,82290,82291],{"class":38,"line":250},[36,82292,247],{"emptyLinePlaceholder":246},[36,82294,82295,82297,82299],{"class":38,"line":256},[36,82296,179],{"class":98},[36,82298,52232],{"class":51733},[36,82300,188],{"class":98},[36,82302,82303,82305,82307,82309,82311],{"class":38,"line":273},[36,82304,52576],{"class":98},[36,82306,52043],{"class":51733},[36,82308,55746],{"class":98},[36,82310,52043],{"class":51733},[36,82312,188],{"class":98},[36,82314,82315,82317,82319],{"class":38,"line":278},[36,82316,52576],{"class":98},[36,82318,52245],{"class":51733},[36,82320,188],{"class":98},[36,82322,82323,82325,82328,82330,82333,82336,82338,82341],{"class":38,"line":284},[36,82324,11660],{"class":163},[36,82326,82327],{"class":109}," spec",[36,82329,14003],{"class":163},[36,82331,82332],{"class":98}," { size: ",[36,82334,82335],{"class":59},"'40cm*40cm'",[36,82337,55896],{"class":98},[36,82339,82340],{"class":59},"'黑色'",[36,82342,56036],{"class":98},[36,82344,82345],{"class":38,"line":315},[36,82346,82347],{"class":42},"    \u002F\u002F const arr = Object.values(spec)\n",[36,82349,82350],{"class":38,"line":320},[36,82351,82352],{"class":42},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[36,82354,82355,82357,82359,82361,82364,82366,82368,82371,82374,82377,82379,82381,82384],{"class":38,"line":326},[36,82356,52839],{"class":98},[36,82358,54831],{"class":55},[36,82360,621],{"class":98},[36,82362,82363],{"class":59},"'div'",[36,82365,74681],{"class":98},[36,82367,176],{"class":163},[36,82369,82370],{"class":98}," Object.",[36,82372,82373],{"class":55},"values",[36,82375,82376],{"class":98},"(spec).",[36,82378,74655],{"class":55},[36,82380,621],{"class":98},[36,82382,82383],{"class":59},"'\u002F'",[36,82385,627],{"class":98},[36,82387,82388,82390,82392],{"class":38,"line":343},[36,82389,52849],{"class":98},[36,82391,52245],{"class":51733},[36,82393,188],{"class":98},[36,82395,82396,82398,82400],{"class":38,"line":348},[36,82397,52217],{"class":98},[36,82399,52232],{"class":51733},[36,82401,188],{"class":98},[36,82403,82404],{"class":38,"line":354},[36,82405,247],{"emptyLinePlaceholder":246},[36,82407,82408,82410,82412],{"class":38,"line":370},[36,82409,52217],{"class":98},[36,82411,51068],{"class":51733},[36,82413,188],{"class":98},[14,82415,82416],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23349,82418,82420],{"id":82419},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,82422,82423],{},"静态方法，将伪数组转换为真数组",[14,82425,82426],{},[1941,82427],{"alt":31,"src":82428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[26,82430,82432],{"className":53499,"code":82431,"language":53501,"meta":31,"style":31},"\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",[33,82433,82434,82442,82450,82462,82474,82486,82494,82502,82507,82512,82517,82522,82530],{"__ignoreMap":31},[36,82435,82436,82438,82440],{"class":38,"line":39},[36,82437,179],{"class":98},[36,82439,52232],{"class":51733},[36,82441,188],{"class":98},[36,82443,82444,82446,82448],{"class":38,"line":46},[36,82445,52576],{"class":98},[36,82447,1618],{"class":51733},[36,82449,188],{"class":98},[36,82451,82452,82454,82456,82458,82460],{"class":38,"line":52},[36,82453,51773],{"class":98},[36,82455,574],{"class":51733},[36,82457,55746],{"class":98},[36,82459,574],{"class":51733},[36,82461,188],{"class":98},[36,82463,82464,82466,82468,82470,82472],{"class":38,"line":66},[36,82465,51773],{"class":98},[36,82467,574],{"class":51733},[36,82469,55746],{"class":98},[36,82471,574],{"class":51733},[36,82473,188],{"class":98},[36,82475,82476,82478,82480,82482,82484],{"class":38,"line":72},[36,82477,51773],{"class":98},[36,82479,574],{"class":51733},[36,82481,55746],{"class":98},[36,82483,574],{"class":51733},[36,82485,188],{"class":98},[36,82487,82488,82490,82492],{"class":38,"line":82},[36,82489,52849],{"class":98},[36,82491,1618],{"class":51733},[36,82493,188],{"class":98},[36,82495,82496,82498,82500],{"class":38,"line":88},[36,82497,52576],{"class":98},[36,82499,52245],{"class":51733},[36,82501,188],{"class":98},[36,82503,82504],{"class":38,"line":113},[36,82505,82506],{"class":98},"    const lis = document.querySelectorAll('li')\n",[36,82508,82509],{"class":38,"line":119},[36,82510,82511],{"class":98},"    const liss = Array.from(lis)\n",[36,82513,82514],{"class":38,"line":131},[36,82515,82516],{"class":98},"    liss.pop()\n",[36,82518,82519],{"class":38,"line":137},[36,82520,82521],{"class":98},"    console.log(liss)\n",[36,82523,82524,82526,82528],{"class":38,"line":147},[36,82525,52849],{"class":98},[36,82527,52245],{"class":51733},[36,82529,188],{"class":98},[36,82531,82532,82534,82536],{"class":38,"line":153},[36,82533,52217],{"class":98},[36,82535,52232],{"class":51733},[36,82537,188],{"class":98},[14,82539,82540],{},[1941,82541],{"alt":31,"src":82542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22437,82544,82546],{"id":82545},"_41053-string","4.10.5.3 String",[14,82548,82549],{},[1941,82550],{"alt":31,"src":82551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23349,82553,82555],{"id":82554},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[26,82557,82559],{"className":53499,"code":82558,"language":53501,"meta":31,"style":31},"\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",[33,82560,82561,82569,82577,82582,82587,82592,82596,82601,82606,82611,82619],{"__ignoreMap":31},[36,82562,82563,82565,82567],{"class":38,"line":39},[36,82564,179],{"class":98},[36,82566,52232],{"class":51733},[36,82568,188],{"class":98},[36,82570,82571,82573,82575],{"class":38,"line":46},[36,82572,52576],{"class":98},[36,82574,52245],{"class":51733},[36,82576,188],{"class":98},[36,82578,82579],{"class":38,"line":52},[36,82580,82581],{"class":98},"    \u002F\u002F 把字符串转化为数组\n",[36,82583,82584],{"class":38,"line":66},[36,82585,82586],{"class":98},"    const str = 'pink,red'\n",[36,82588,82589],{"class":38,"line":72},[36,82590,82591],{"class":98},"    const arr = str.split(',')\n",[36,82593,82594],{"class":38,"line":82},[36,82595,81070],{"class":98},[36,82597,82598],{"class":38,"line":88},[36,82599,82600],{"class":98},"    const str1 = '2025-8-25'\n",[36,82602,82603],{"class":38,"line":113},[36,82604,82605],{"class":98},"    const arr1 = str1.split('-')\n",[36,82607,82608],{"class":38,"line":119},[36,82609,82610],{"class":98},"    console.log(arr1)\n",[36,82612,82613,82615,82617],{"class":38,"line":131},[36,82614,52849],{"class":98},[36,82616,52245],{"class":51733},[36,82618,188],{"class":98},[36,82620,82621,82623,82625],{"class":38,"line":137},[36,82622,52217],{"class":98},[36,82624,52232],{"class":51733},[36,82626,188],{"class":98},[23349,82628,82630],{"id":82629},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,82632,5632],{},[14,82634,82635],{},"substring(indexStart)",[14,82637,82638],{},"substring(indexStart, indexEnd)",[1618,82640,82641,82652,82664,82674],{},[574,82642,82643,82644,82647,82648,82651],{},"如果省略了 ",[33,82645,82646],{},"indexEnd","，则 ",[33,82649,82650],{},"substring()"," 提取字符直到字符串的末尾",[574,82653,82654,82655,82658,82659,82647,82661,82663],{},"如果 ",[33,82656,82657],{},"indexStart"," 等于 ",[33,82660,82646],{},[33,82662,82650],{}," 返回一个空字符串",[574,82665,82654,82666,82668,82669,82647,82671,82673],{},[33,82667,82657],{}," 大于 ",[33,82670,82646],{},[33,82672,82650],{}," 的效果就像交换了这两个参数一样",[574,82675,82676],{},"结束的索引号不包含想要截取的部分",[26,82678,82680],{"className":81921,"code":82679,"language":81923,"meta":31,"style":31},"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",[33,82681,82682,82694,82698,82732,82762,82766,82797,82801,82828,82858,82888,82892,82923],{"__ignoreMap":31},[36,82683,82684,82687,82689,82692],{"class":38,"line":39},[36,82685,82686],{"class":98},"const anyString ",[36,82688,176],{"class":163},[36,82690,82691],{"class":59}," \"Mozilla\"",[36,82693,1772],{"class":98},[36,82695,82696],{"class":38,"line":46},[36,82697,247],{"emptyLinePlaceholder":246},[36,82699,82700,82703,82705,82707,82709,82712,82714,82717,82719,82721,82723,82725,82727,82729],{"class":38,"line":52},[36,82701,82702],{"class":109},"console",[36,82704,1172],{"class":98},[36,82706,58679],{"class":109},[36,82708,621],{"class":98},[36,82710,82711],{"class":109},"anyString",[36,82713,1172],{"class":98},[36,82715,82716],{"class":109},"substring",[36,82718,621],{"class":98},[36,82720,807],{"class":109},[36,82722,12874],{"class":98},[36,82724,833],{"class":109},[36,82726,75685],{"class":98},[36,82728,33762],{"class":163},[36,82730,82731],{"class":59}," 'M'\n",[36,82733,82734,82736,82738,82740,82742,82744,82746,82748,82750,82752,82754,82756,82758,82760],{"class":38,"line":66},[36,82735,82702],{"class":109},[36,82737,1172],{"class":98},[36,82739,58679],{"class":109},[36,82741,621],{"class":98},[36,82743,82711],{"class":109},[36,82745,1172],{"class":98},[36,82747,82716],{"class":109},[36,82749,621],{"class":98},[36,82751,833],{"class":109},[36,82753,12874],{"class":98},[36,82755,807],{"class":109},[36,82757,75685],{"class":98},[36,82759,33762],{"class":163},[36,82761,82731],{"class":59},[36,82763,82764],{"class":38,"line":72},[36,82765,247],{"emptyLinePlaceholder":246},[36,82767,82768,82770,82772,82774,82776,82778,82780,82782,82784,82786,82788,82790,82792,82794],{"class":38,"line":82},[36,82769,82702],{"class":109},[36,82771,1172],{"class":98},[36,82773,58679],{"class":109},[36,82775,621],{"class":98},[36,82777,82711],{"class":109},[36,82779,1172],{"class":98},[36,82781,82716],{"class":109},[36,82783,621],{"class":98},[36,82785,807],{"class":109},[36,82787,12874],{"class":98},[36,82789,958],{"class":109},[36,82791,75685],{"class":98},[36,82793,33762],{"class":163},[36,82795,82796],{"class":59}," 'Mozill'\n",[36,82798,82799],{"class":38,"line":88},[36,82800,247],{"emptyLinePlaceholder":246},[36,82802,82803,82805,82807,82809,82811,82813,82815,82817,82819,82821,82823,82825],{"class":38,"line":113},[36,82804,82702],{"class":109},[36,82806,1172],{"class":98},[36,82808,58679],{"class":109},[36,82810,621],{"class":98},[36,82812,82711],{"class":109},[36,82814,1172],{"class":98},[36,82816,82716],{"class":109},[36,82818,621],{"class":98},[36,82820,908],{"class":109},[36,82822,75685],{"class":98},[36,82824,33762],{"class":163},[36,82826,82827],{"class":59}," 'lla'\n",[36,82829,82830,82832,82834,82836,82838,82840,82842,82844,82846,82848,82850,82852,82854,82856],{"class":38,"line":119},[36,82831,82702],{"class":109},[36,82833,1172],{"class":98},[36,82835,58679],{"class":109},[36,82837,621],{"class":98},[36,82839,82711],{"class":109},[36,82841,1172],{"class":98},[36,82843,82716],{"class":109},[36,82845,621],{"class":98},[36,82847,908],{"class":109},[36,82849,12874],{"class":98},[36,82851,983],{"class":109},[36,82853,75741],{"class":98},[36,82855,33762],{"class":163},[36,82857,82827],{"class":59},[36,82859,82860,82862,82864,82866,82868,82870,82872,82874,82876,82878,82880,82882,82884,82886],{"class":38,"line":131},[36,82861,82702],{"class":109},[36,82863,1172],{"class":98},[36,82865,58679],{"class":109},[36,82867,621],{"class":98},[36,82869,82711],{"class":109},[36,82871,1172],{"class":98},[36,82873,82716],{"class":109},[36,82875,621],{"class":98},[36,82877,983],{"class":109},[36,82879,12874],{"class":98},[36,82881,908],{"class":109},[36,82883,75685],{"class":98},[36,82885,33762],{"class":163},[36,82887,82827],{"class":59},[36,82889,82890],{"class":38,"line":137},[36,82891,247],{"emptyLinePlaceholder":246},[36,82893,82894,82896,82898,82900,82902,82904,82906,82908,82910,82912,82914,82916,82918,82920],{"class":38,"line":147},[36,82895,82702],{"class":109},[36,82897,1172],{"class":98},[36,82899,58679],{"class":109},[36,82901,621],{"class":98},[36,82903,82711],{"class":109},[36,82905,1172],{"class":98},[36,82907,82716],{"class":109},[36,82909,621],{"class":98},[36,82911,807],{"class":109},[36,82913,12874],{"class":98},[36,82915,983],{"class":109},[36,82917,75685],{"class":98},[36,82919,33762],{"class":163},[36,82921,82922],{"class":59}," 'Mozilla'\n",[36,82924,82925,82927,82929,82931,82933,82935,82937,82939,82941,82943,82945,82947,82949,82951],{"class":38,"line":153},[36,82926,82702],{"class":109},[36,82928,1172],{"class":98},[36,82930,58679],{"class":109},[36,82932,621],{"class":98},[36,82934,82711],{"class":109},[36,82936,1172],{"class":98},[36,82938,82716],{"class":109},[36,82940,621],{"class":98},[36,82942,807],{"class":109},[36,82944,12874],{"class":98},[36,82946,1060],{"class":109},[36,82948,75685],{"class":98},[36,82950,33762],{"class":163},[36,82952,82922],{"class":59},[23349,82954,82956],{"id":82955},"_410533-startswith","4.10.5.3.3 startsWith",[14,82958,82959,82962,82963,82968,82969,82971,82972],{},[33,82960,82961],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[765,82964,82965],{},[33,82966,82967],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[33,82970,1841],{}," 或 ",[33,82973,66452],{},[26,82975,82977],{"className":77927,"code":82976,"language":77929,"meta":31,"style":31},"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",[33,82978,82979,82991,83010,83015,83035],{"__ignoreMap":31},[36,82980,82981,82983,82986,82988],{"class":38,"line":39},[36,82982,7243],{"class":163},[36,82984,82985],{"class":98}," str1 ",[36,82987,176],{"class":163},[36,82989,82990],{"class":59}," \"Saturday night plans\"\n",[36,82992,82993,82995,82997,83000,83003,83005,83008],{"class":38,"line":46},[36,82994,77964],{"class":98},[36,82996,58679],{"class":55},[36,82998,82999],{"class":98},"(str1.",[36,83001,83002],{"class":55},"startsWith",[36,83004,621],{"class":98},[36,83006,83007],{"class":59},"\"Sat\"",[36,83009,30930],{"class":98},[36,83011,83012],{"class":38,"line":52},[36,83013,83014],{"class":42},"\u002F\u002F Expected output: true\n",[36,83016,83017,83019,83021,83023,83025,83027,83029,83031,83033],{"class":38,"line":66},[36,83018,77964],{"class":98},[36,83020,58679],{"class":55},[36,83022,82999],{"class":98},[36,83024,83002],{"class":55},[36,83026,621],{"class":98},[36,83028,83007],{"class":59},[36,83030,12874],{"class":98},[36,83032,689],{"class":109},[36,83034,30930],{"class":98},[36,83036,83037],{"class":38,"line":72},[36,83038,83039],{"class":42},"\u002F\u002F Expected output: false\n",[26,83041,83043],{"className":51066,"code":83042,"language":51068,"meta":31,"style":31},"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",[33,83044,83045,83050,83055,83059,83064,83069],{"__ignoreMap":31},[36,83046,83047],{"class":38,"line":39},[36,83048,83049],{"class":98},"startsWith(searchString)\n",[36,83051,83052],{"class":38,"line":46},[36,83053,83054],{"class":98},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[36,83056,83057],{"class":38,"line":52},[36,83058,247],{"emptyLinePlaceholder":246},[36,83060,83061],{"class":38,"line":66},[36,83062,83063],{"class":98},"const str3 = 'pink老师上课中'\n",[36,83065,83066],{"class":38,"line":72},[36,83067,83068],{"class":98},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[36,83070,83071],{"class":38,"line":82},[36,83072,83073],{"class":98},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23349,83075,83077],{"id":83076},"_410534-includes","4.10.5.3.4 includes",[14,83079,83080],{},"includes(searchString) includes(searchString, position)",[571,83082,83083],{},[574,83084,83085],{},"searchString:",[14,83087,83088,83089,83091,83092,83097,83098,83103,83104,21939,83107,83110,83111,83114],{},"一个要在 ",[33,83090,1781],{}," 中查找的字符串。",[20,83093,83096],{"href":83094,"rel":83095},"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",[24],"不能是正则表达式","。所有非正则表达式的值都会被",[20,83099,83102],{"href":83100,"rel":83101},"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",[24],"强制转换为字符串","，因此如果该参数被省略或传入 ",[33,83105,83106],{},"undefined",[33,83108,83109],{},"includes()"," 方法会在字符串中搜索 ",[33,83112,83113],{},"\"undefined\"","，这通常不是你想要的",[571,83116,83117],{"start":46},[574,83118,83119,1472],{},[33,83120,83121],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,83123,83124,83125,83128,83129],{},"在字符串中开始搜索 ",[33,83126,83127],{},"searchString"," 的位置。默认值为 ",[33,83130,807],{},[571,83132,83133],{"start":52},[574,83134,83135],{},"返回值：",[14,83137,83138,83139,83141,83142,83146,83147],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[33,83140,83127],{}," 为空字符串的情况），则返回 ",[765,83143,83144],{},[33,83145,1841],{}," ，否则返回 ",[765,83148,83149],{},[33,83150,66452],{},[571,83152,83153],{"start":66},[574,83154,83155],{},"异常：",[14,83157,82654,83158,14234,83160,83164],{},[33,83159,83127],{},[20,83161,83163],{"href":83094,"rel":83162},[24],"是一个正则表达式","，则会抛出",[14,83166,83167],{},"只要是有就是true，不需要非得以谁开头结尾",[26,83169,83171],{"className":77927,"code":83170,"language":77929,"meta":31,"style":31},"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",[33,83172,83173,83184,83207,83226,83246,83268,83287],{"__ignoreMap":31},[36,83174,83175,83177,83179,83181],{"class":38,"line":39},[36,83176,7243],{"class":163},[36,83178,80207],{"class":98},[36,83180,176],{"class":163},[36,83182,83183],{"class":59}," \"To be, or not to be, that is the question.\"\n",[36,83185,83186,83188,83190,83193,83196,83198,83201,83204],{"class":38,"line":46},[36,83187,77964],{"class":98},[36,83189,58679],{"class":55},[36,83191,83192],{"class":98},"(str.",[36,83194,83195],{"class":55},"includes",[36,83197,621],{"class":98},[36,83199,83200],{"class":59},"\"To be\"",[36,83202,83203],{"class":98},"))",[36,83205,83206],{"class":42},"  \u002F\u002F true\n",[36,83208,83209,83211,83213,83215,83217,83219,83222,83224],{"class":38,"line":52},[36,83210,77964],{"class":98},[36,83212,58679],{"class":55},[36,83214,83192],{"class":98},[36,83216,83195],{"class":55},[36,83218,621],{"class":98},[36,83220,83221],{"class":59},"\"question\"",[36,83223,83203],{"class":98},[36,83225,83206],{"class":42},[36,83227,83228,83230,83232,83234,83236,83238,83241,83243],{"class":38,"line":66},[36,83229,77964],{"class":98},[36,83231,58679],{"class":55},[36,83233,83192],{"class":98},[36,83235,83195],{"class":55},[36,83237,621],{"class":98},[36,83239,83240],{"class":59},"\"nonexistent\"",[36,83242,83203],{"class":98},[36,83244,83245],{"class":42},"  \u002F\u002F false\n",[36,83247,83248,83250,83252,83254,83256,83258,83260,83262,83264,83266],{"class":38,"line":72},[36,83249,77964],{"class":98},[36,83251,58679],{"class":55},[36,83253,83192],{"class":98},[36,83255,83195],{"class":55},[36,83257,621],{"class":98},[36,83259,83200],{"class":59},[36,83261,12874],{"class":98},[36,83263,833],{"class":109},[36,83265,83203],{"class":98},[36,83267,83245],{"class":42},[36,83269,83270,83272,83274,83276,83278,83280,83283,83285],{"class":38,"line":82},[36,83271,77964],{"class":98},[36,83273,58679],{"class":55},[36,83275,83192],{"class":98},[36,83277,83195],{"class":55},[36,83279,621],{"class":98},[36,83281,83282],{"class":59},"\"TO BE\"",[36,83284,83203],{"class":98},[36,83286,83245],{"class":42},[36,83288,83289,83291,83293,83295,83297,83299,83301,83303],{"class":38,"line":88},[36,83290,77964],{"class":98},[36,83292,58679],{"class":55},[36,83294,83192],{"class":98},[36,83296,83195],{"class":55},[36,83298,621],{"class":98},[36,83300,8103],{"class":59},[36,83302,83203],{"class":98},[36,83304,83206],{"class":42},[23349,83306,83308],{"id":83307},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[26,83310,83312],{"className":53499,"code":83311,"language":53501,"meta":31,"style":31},"\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",[33,83313,83314,83322,83330,83335,83340,83345,83350,83355,83363],{"__ignoreMap":31},[36,83315,83316,83318,83320],{"class":38,"line":39},[36,83317,179],{"class":98},[36,83319,52232],{"class":51733},[36,83321,188],{"class":98},[36,83323,83324,83326,83328],{"class":38,"line":46},[36,83325,52576],{"class":98},[36,83327,52245],{"class":51733},[36,83329,188],{"class":98},[36,83331,83332],{"class":38,"line":52},[36,83333,83334],{"class":98},"    const num = 10\n",[36,83336,83337],{"class":38,"line":66},[36,83338,83339],{"class":98},"    \u002F\u002F 强制转换\n",[36,83341,83342],{"class":38,"line":72},[36,83343,83344],{"class":98},"    console.log(String(num))\n",[36,83346,83347],{"class":38,"line":82},[36,83348,83349],{"class":98},"    \u002F\u002F toString()方法转换\n",[36,83351,83352],{"class":38,"line":88},[36,83353,83354],{"class":98},"    console.log(num.toString())\n",[36,83356,83357,83359,83361],{"class":38,"line":113},[36,83358,52849],{"class":98},[36,83360,52245],{"class":51733},[36,83362,188],{"class":98},[36,83364,83365,83367,83369],{"class":38,"line":119},[36,83366,52217],{"class":98},[36,83368,52232],{"class":51733},[36,83370,188],{"class":98},[23349,83372,83374],{"id":83373},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,83376,83377],{},[1941,83378],{"alt":31,"src":83379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[26,83381,83383],{"className":51066,"code":83382,"language":51068,"meta":31,"style":31},"\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",[33,83384,83385,83395,83409,83413,83421,83435,83455,83467,83475,83479,83487,83499,83507,83519,83524,83529,83534,83581,83597,83605,83613,83617],{"__ignoreMap":31},[36,83386,83387,83389,83391,83393],{"class":38,"line":39},[36,83388,51730],{"class":98},[36,83390,51734],{"class":51733},[36,83392,51737],{"class":55},[36,83394,188],{"class":98},[36,83396,83397,83399,83401,83403,83405,83407],{"class":38,"line":46},[36,83398,179],{"class":98},[36,83400,51068],{"class":51733},[36,83402,51748],{"class":55},[36,83404,176],{"class":98},[36,83406,51753],{"class":59},[36,83408,188],{"class":98},[36,83410,83411],{"class":38,"line":52},[36,83412,247],{"emptyLinePlaceholder":246},[36,83414,83415,83417,83419],{"class":38,"line":66},[36,83416,179],{"class":98},[36,83418,51766],{"class":51733},[36,83420,188],{"class":98},[36,83422,83423,83425,83427,83429,83431,83433],{"class":38,"line":72},[36,83424,52576],{"class":98},[36,83426,51776],{"class":51733},[36,83428,51779],{"class":55},[36,83430,176],{"class":98},[36,83432,51784],{"class":59},[36,83434,188],{"class":98},[36,83436,83437,83439,83441,83443,83445,83447,83449,83451,83453],{"class":38,"line":82},[36,83438,52576],{"class":98},[36,83440,51776],{"class":51733},[36,83442,15359],{"class":55},[36,83444,176],{"class":98},[36,83446,51823],{"class":59},[36,83448,51803],{"class":55},[36,83450,176],{"class":98},[36,83452,51830],{"class":59},[36,83454,188],{"class":98},[36,83456,83457,83459,83461,83463,83465],{"class":38,"line":88},[36,83458,52576],{"class":98},[36,83460,51839],{"class":51733},[36,83462,51842],{"class":98},[36,83464,51839],{"class":51733},[36,83466,188],{"class":98},[36,83468,83469,83471,83473],{"class":38,"line":113},[36,83470,52217],{"class":98},[36,83472,51766],{"class":51733},[36,83474,188],{"class":98},[36,83476,83477],{"class":38,"line":119},[36,83478,247],{"emptyLinePlaceholder":246},[36,83480,83481,83483,83485],{"class":38,"line":131},[36,83482,179],{"class":98},[36,83484,52232],{"class":51733},[36,83486,188],{"class":98},[36,83488,83489,83491,83493,83495,83497],{"class":38,"line":137},[36,83490,52576],{"class":98},[36,83492,52043],{"class":51733},[36,83494,55746],{"class":98},[36,83496,52043],{"class":51733},[36,83498,188],{"class":98},[36,83500,83501,83503,83505],{"class":38,"line":147},[36,83502,52576],{"class":98},[36,83504,52245],{"class":51733},[36,83506,188],{"class":98},[36,83508,83509,83511,83514,83516],{"class":38,"line":153},[36,83510,11660],{"class":163},[36,83512,83513],{"class":109}," gift",[36,83515,14003],{"class":163},[36,83517,83518],{"class":59}," '50g的茶叶，清洗球'\n",[36,83520,83521],{"class":38,"line":191},[36,83522,83523],{"class":42},"    \u002F\u002F 1.把字符串拆分为数组\n",[36,83525,83526],{"class":38,"line":197},[36,83527,83528],{"class":42},"    \u002F\u002F console.log(gift.split(','))\n",[36,83530,83531],{"class":38,"line":217},[36,83532,83533],{"class":42},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[36,83535,83536,83538,83540,83542,83545,83548,83550,83553,83555,83557,83559,83561,83563,83566,83568,83571,83573,83575,83577,83579],{"class":38,"line":223},[36,83537,11660],{"class":163},[36,83539,74351],{"class":109},[36,83541,14003],{"class":163},[36,83543,83544],{"class":98}," gift.",[36,83546,83547],{"class":55},"split",[36,83549,621],{"class":98},[36,83551,83552],{"class":59},"'，'",[36,83554,31259],{"class":98},[36,83556,74476],{"class":55},[36,83558,621],{"class":98},[36,83560,80227],{"class":5667},[36,83562,80230],{"class":163},[36,83564,83565],{"class":59}," `\u003Cspan>【赠品】${",[36,83567,80227],{"class":98},[36,83569,83570],{"class":59},"}\u003C\u002Fspan>\u003Cbr>`",[36,83572,31259],{"class":98},[36,83574,74655],{"class":55},[36,83576,621],{"class":98},[36,83578,74660],{"class":59},[36,83580,627],{"class":98},[36,83582,83583,83585,83587,83589,83591,83593,83595],{"class":38,"line":243},[36,83584,52839],{"class":98},[36,83586,54831],{"class":55},[36,83588,621],{"class":98},[36,83590,82363],{"class":59},[36,83592,74681],{"class":98},[36,83594,176],{"class":163},[36,83596,74417],{"class":98},[36,83598,83599,83601,83603],{"class":38,"line":250},[36,83600,52849],{"class":98},[36,83602,52245],{"class":51733},[36,83604,188],{"class":98},[36,83606,83607,83609,83611],{"class":38,"line":256},[36,83608,52217],{"class":98},[36,83610,52232],{"class":51733},[36,83612,188],{"class":98},[36,83614,83615],{"class":38,"line":273},[36,83616,247],{"emptyLinePlaceholder":246},[36,83618,83619,83621,83623],{"class":38,"line":278},[36,83620,52217],{"class":98},[36,83622,51068],{"class":51733},[36,83624,188],{"class":98},[22437,83626,83628],{"id":83627},"_41054-number","4.10.5.4 Number",[14,83630,83631],{},[1941,83632],{"alt":31,"src":83633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,83635,83636],{},"整数也可以进行toFixed来保留小数",[14,83638,83639],{},"比如：",[14,83641,83642],{},"const price=10",[14,83644,83645],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22437,83647,83649],{"id":83648},"_41055-购物车展示","4.10.5.5 购物车展示",[14,83651,83652],{},[1941,83653],{"alt":31,"src":83654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[26,83656,83658],{"className":51066,"code":83657,"language":51068,"meta":31,"style":31},"\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",[33,83659,83660,83670,83684,83688,83696,83710,83730,83742,83750,83756,83766,83776,83786,83790,83794,83800,83812,83826,83830,83834,83840,83852,83868,83878,83894,83898,83902,83908,83918,83928,83932,83936,83944,83956,83968,83980,83984,83988,83996,84008,84012,84016,84027,84037,84049,84061,84071,84075,84079,84087,84096,84108,84118,84128,84132,84136,84144,84153,84160,84170,84182,84186,84190,84199,84209,84220,84232,84244,84248,84252,84261,84271,84282,84286,84290,84296,84308,84320,84330,84340,84358,84370,84374,84378,84387,84399,84409,84419,84431,84435,84443,84451,84455,84463,84477,84485,84499,84527,84535,84543,84553,84557,84565,84573,84582,84590,84599,84609,84613,84617,84625,84633,84642,84650,84658,84671,84675,84679,84687,84695,84704,84712,84720,84735,84739,84743,84751,84759,84768,84776,84784,84798,84806,84810,84814,84819,84845,84850,84887,84892,84915,84920,84974,84979,85015,85019,85025,85030,85039,85053,85062,85081,85090,85100,85105,85110,85123,85128,85182,85208,85216,85224,85228],{"__ignoreMap":31},[36,83661,83662,83664,83666,83668],{"class":38,"line":39},[36,83663,51730],{"class":98},[36,83665,51734],{"class":51733},[36,83667,51737],{"class":55},[36,83669,188],{"class":98},[36,83671,83672,83674,83676,83678,83680,83682],{"class":38,"line":46},[36,83673,179],{"class":98},[36,83675,51068],{"class":51733},[36,83677,51748],{"class":55},[36,83679,176],{"class":98},[36,83681,51753],{"class":59},[36,83683,188],{"class":98},[36,83685,83686],{"class":38,"line":52},[36,83687,247],{"emptyLinePlaceholder":246},[36,83689,83690,83692,83694],{"class":38,"line":66},[36,83691,179],{"class":98},[36,83693,51766],{"class":51733},[36,83695,188],{"class":98},[36,83697,83698,83700,83702,83704,83706,83708],{"class":38,"line":72},[36,83699,52576],{"class":98},[36,83701,51776],{"class":51733},[36,83703,51779],{"class":55},[36,83705,176],{"class":98},[36,83707,51784],{"class":59},[36,83709,188],{"class":98},[36,83711,83712,83714,83716,83718,83720,83722,83724,83726,83728],{"class":38,"line":82},[36,83713,52576],{"class":98},[36,83715,51776],{"class":51733},[36,83717,15359],{"class":55},[36,83719,176],{"class":98},[36,83721,51823],{"class":59},[36,83723,51803],{"class":55},[36,83725,176],{"class":98},[36,83727,51830],{"class":59},[36,83729,188],{"class":98},[36,83731,83732,83734,83736,83738,83740],{"class":38,"line":88},[36,83733,52576],{"class":98},[36,83735,51839],{"class":51733},[36,83737,51842],{"class":98},[36,83739,51839],{"class":51733},[36,83741,188],{"class":98},[36,83743,83744,83746,83748],{"class":38,"line":113},[36,83745,52576],{"class":98},[36,83747,537],{"class":51733},[36,83749,188],{"class":98},[36,83751,83752,83754],{"class":38,"line":119},[36,83753,6854],{"class":51733},[36,83755,16011],{"class":98},[36,83757,83758,83760,83762,83764],{"class":38,"line":131},[36,83759,55127],{"class":109},[36,83761,51869],{"class":98},[36,83763,807],{"class":109},[36,83765,1772],{"class":98},[36,83767,83768,83770,83772,83774],{"class":38,"line":137},[36,83769,55138],{"class":109},[36,83771,51869],{"class":98},[36,83773,807],{"class":109},[36,83775,1772],{"class":98},[36,83777,83778,83780,83782,83784],{"class":38,"line":147},[36,83779,73028],{"class":109},[36,83781,51869],{"class":98},[36,83783,60937],{"class":109},[36,83785,1772],{"class":98},[36,83787,83788],{"class":38,"line":153},[36,83789,2646],{"class":98},[36,83791,83792],{"class":38,"line":191},[36,83793,247],{"emptyLinePlaceholder":246},[36,83795,83796,83798],{"class":38,"line":197},[36,83797,62555],{"class":55},[36,83799,16011],{"class":98},[36,83801,83802,83804,83806,83808,83810],{"class":38,"line":217},[36,83803,55203],{"class":109},[36,83805,51869],{"class":98},[36,83807,79006],{"class":109},[36,83809,51924],{"class":163},[36,83811,1772],{"class":98},[36,83813,83814,83816,83818,83820,83822,83824],{"class":38,"line":223},[36,83815,55138],{"class":109},[36,83817,51869],{"class":98},[36,83819,926],{"class":109},[36,83821,51924],{"class":163},[36,83823,51988],{"class":109},[36,83825,1772],{"class":98},[36,83827,83828],{"class":38,"line":243},[36,83829,2646],{"class":98},[36,83831,83832],{"class":38,"line":250},[36,83833,247],{"emptyLinePlaceholder":246},[36,83835,83836,83838],{"class":38,"line":256},[36,83837,79057],{"class":55},[36,83839,16011],{"class":98},[36,83841,83842,83844,83846,83848,83850],{"class":38,"line":273},[36,83843,55127],{"class":109},[36,83845,51869],{"class":98},[36,83847,1189],{"class":109},[36,83849,51924],{"class":163},[36,83851,1772],{"class":98},[36,83853,83854,83856,83858,83860,83862,83864,83866],{"class":38,"line":278},[36,83855,62292],{"class":109},[36,83857,51869],{"class":98},[36,83859,28555],{"class":109},[36,83861,79112],{"class":109},[36,83863,79115],{"class":109},[36,83865,1308],{"class":163},[36,83867,1772],{"class":98},[36,83869,83870,83872,83874,83876],{"class":38,"line":284},[36,83871,55441],{"class":109},[36,83873,51869],{"class":98},[36,83875,51909],{"class":109},[36,83877,1772],{"class":98},[36,83879,83880,83882,83884,83886,83888,83890,83892],{"class":38,"line":315},[36,83881,62409],{"class":109},[36,83883,51869],{"class":98},[36,83885,833],{"class":109},[36,83887,51924],{"class":163},[36,83889,51953],{"class":109},[36,83891,62676],{"class":109},[36,83893,1772],{"class":98},[36,83895,83896],{"class":38,"line":320},[36,83897,2646],{"class":98},[36,83899,83900],{"class":38,"line":326},[36,83901,247],{"emptyLinePlaceholder":246},[36,83903,83904,83906],{"class":38,"line":343},[36,83905,79175],{"class":55},[36,83907,16011],{"class":98},[36,83909,83910,83912,83914,83916],{"class":38,"line":348},[36,83911,62457],{"class":109},[36,83913,51869],{"class":98},[36,83915,62462],{"class":109},[36,83917,1772],{"class":98},[36,83919,83920,83922,83924,83926],{"class":38,"line":354},[36,83921,55316],{"class":109},[36,83923,51869],{"class":98},[36,83925,62250],{"class":109},[36,83927,1772],{"class":98},[36,83929,83930],{"class":38,"line":370},[36,83931,2646],{"class":98},[36,83933,83934],{"class":38,"line":375},[36,83935,247],{"emptyLinePlaceholder":246},[36,83937,83938,83940,83942],{"class":38,"line":381},[36,83939,79057],{"class":55},[36,83941,56047],{"class":51733},[36,83943,16011],{"class":98},[36,83945,83946,83948,83950,83952,83954],{"class":38,"line":399},[36,83947,55203],{"class":109},[36,83949,51869],{"class":98},[36,83951,1226],{"class":109},[36,83953,51924],{"class":163},[36,83955,1772],{"class":98},[36,83957,83958,83960,83962,83964,83966],{"class":38,"line":404},[36,83959,55217],{"class":109},[36,83961,51869],{"class":98},[36,83963,1226],{"class":109},[36,83965,51924],{"class":163},[36,83967,1772],{"class":98},[36,83969,83970,83972,83974,83976,83978],{"class":38,"line":410},[36,83971,62182],{"class":109},[36,83973,51869],{"class":98},[36,83975,933],{"class":109},[36,83977,51924],{"class":163},[36,83979,1772],{"class":98},[36,83981,83982],{"class":38,"line":423},[36,83983,2646],{"class":98},[36,83985,83986],{"class":38,"line":436},[36,83987,247],{"emptyLinePlaceholder":246},[36,83989,83990,83992,83994],{"class":38,"line":441},[36,83991,79057],{"class":55},[36,83993,62736],{"class":55},[36,83995,16011],{"class":98},[36,83997,83998,84000,84002,84004,84006],{"class":38,"line":447},[36,83999,55203],{"class":109},[36,84001,51869],{"class":98},[36,84003,2190],{"class":109},[36,84005,51924],{"class":163},[36,84007,1772],{"class":98},[36,84009,84010],{"class":38,"line":465},[36,84011,2646],{"class":98},[36,84013,84014],{"class":38,"line":470},[36,84015,247],{"emptyLinePlaceholder":246},[36,84017,84018,84020,84022,84025],{"class":38,"line":476},[36,84019,79057],{"class":55},[36,84021,62736],{"class":55},[36,84023,84024],{"class":55}," .tag",[36,84026,16011],{"class":98},[36,84028,84029,84031,84033,84035],{"class":38,"line":496},[36,84030,55441],{"class":109},[36,84032,51869],{"class":98},[36,84034,61301],{"class":109},[36,84036,1772],{"class":98},[36,84038,84039,84041,84043,84045,84047],{"class":38,"line":501},[36,84040,55127],{"class":109},[36,84042,51869],{"class":98},[36,84044,694],{"class":109},[36,84046,51924],{"class":163},[36,84048,1772],{"class":98},[36,84050,84051,84053,84055,84057,84059],{"class":38,"line":507},[36,84052,55354],{"class":109},[36,84054,51869],{"class":98},[36,84056,1112],{"class":109},[36,84058,51924],{"class":163},[36,84060,1772],{"class":98},[36,84062,84063,84065,84067,84069],{"class":38,"line":517},[36,84064,57848],{"class":109},[36,84066,51869],{"class":98},[36,84068,62502],{"class":109},[36,84070,1772],{"class":98},[36,84072,84073],{"class":38,"line":522},[36,84074,2646],{"class":98},[36,84076,84077],{"class":38,"line":528},[36,84078,247],{"emptyLinePlaceholder":246},[36,84080,84081,84083,84085],{"class":38,"line":10203},[36,84082,79057],{"class":55},[36,84084,79349],{"class":55},[36,84086,31899],{"class":98},[36,84088,84089,84091,84094],{"class":38,"line":10227},[36,84090,79057],{"class":55},[36,84092,84093],{"class":55}," .sub-total",[36,84095,16011],{"class":98},[36,84097,84098,84100,84102,84104,84106],{"class":38,"line":10232},[36,84099,55354],{"class":109},[36,84101,51869],{"class":98},[36,84103,1264],{"class":109},[36,84105,51924],{"class":163},[36,84107,1772],{"class":98},[36,84109,84110,84112,84114,84116],{"class":38,"line":10237},[36,84111,57848],{"class":109},[36,84113,51869],{"class":98},[36,84115,79372],{"class":109},[36,84117,1772],{"class":98},[36,84119,84120,84122,84124,84126],{"class":38,"line":10242},[36,84121,62269],{"class":109},[36,84123,51869],{"class":98},[36,84125,833],{"class":109},[36,84127,1772],{"class":98},[36,84129,84130],{"class":38,"line":10251},[36,84131,2646],{"class":98},[36,84133,84134],{"class":38,"line":10256},[36,84135,247],{"emptyLinePlaceholder":246},[36,84137,84138,84140,84142],{"class":38,"line":10262},[36,84139,79057],{"class":55},[36,84141,79389],{"class":55},[36,84143,31899],{"class":98},[36,84145,84146,84148,84151],{"class":38,"line":10283},[36,84147,79057],{"class":55},[36,84149,84150],{"class":55}," .sub-total::before",[36,84152,31899],{"class":98},[36,84154,84155,84158],{"class":38,"line":10289},[36,84156,84157],{"class":55},"    .amount::before",[36,84159,16011],{"class":98},[36,84161,84162,84164,84166,84168],{"class":38,"line":10303},[36,84163,79396],{"class":109},[36,84165,51869],{"class":98},[36,84167,79401],{"class":59},[36,84169,1772],{"class":98},[36,84171,84172,84174,84176,84178,84180],{"class":38,"line":10309},[36,84173,55354],{"class":109},[36,84175,51869],{"class":98},[36,84177,1112],{"class":109},[36,84179,51924],{"class":163},[36,84181,1772],{"class":98},[36,84183,84184],{"class":38,"line":10336},[36,84185,2646],{"class":98},[36,84187,84188],{"class":38,"line":10345},[36,84189,247],{"emptyLinePlaceholder":246},[36,84191,84192,84194,84197],{"class":38,"line":10351},[36,84193,79057],{"class":55},[36,84195,84196],{"class":55}," .spec",[36,84198,16011],{"class":98},[36,84200,84201,84203,84205,84207],{"class":38,"line":10359},[36,84202,62269],{"class":109},[36,84204,51869],{"class":98},[36,84206,694],{"class":109},[36,84208,1772],{"class":98},[36,84210,84211,84213,84215,84218],{"class":38,"line":10364},[36,84212,57848],{"class":109},[36,84214,51869],{"class":98},[36,84216,84217],{"class":109},"#888",[36,84219,1772],{"class":98},[36,84221,84222,84224,84226,84228,84230],{"class":38,"line":17043},[36,84223,55354],{"class":109},[36,84225,51869],{"class":98},[36,84227,1163],{"class":109},[36,84229,51924],{"class":163},[36,84231,1772],{"class":98},[36,84233,84234,84236,84238,84240,84242],{"class":38,"line":17049},[36,84235,62432],{"class":109},[36,84237,51869],{"class":98},[36,84239,1313],{"class":109},[36,84241,51924],{"class":163},[36,84243,1772],{"class":98},[36,84245,84246],{"class":38,"line":17072},[36,84247,2646],{"class":98},[36,84249,84250],{"class":38,"line":17078},[36,84251,247],{"emptyLinePlaceholder":246},[36,84253,84254,84256,84259],{"class":38,"line":17101},[36,84255,79057],{"class":55},[36,84257,84258],{"class":55}," .count",[36,84260,16011],{"class":98},[36,84262,84263,84265,84267,84269],{"class":38,"line":17115},[36,84264,62269],{"class":109},[36,84266,51869],{"class":98},[36,84268,833],{"class":109},[36,84270,1772],{"class":98},[36,84272,84273,84275,84277,84280],{"class":38,"line":17135},[36,84274,57848],{"class":109},[36,84276,51869],{"class":98},[36,84278,84279],{"class":109},"#aaa",[36,84281,1772],{"class":98},[36,84283,84284],{"class":38,"line":17141},[36,84285,2646],{"class":98},[36,84287,84288],{"class":38,"line":17152},[36,84289,247],{"emptyLinePlaceholder":246},[36,84291,84292,84294],{"class":38,"line":17175},[36,84293,72907],{"class":55},[36,84295,16011],{"class":98},[36,84297,84298,84300,84302,84304,84306],{"class":38,"line":17197},[36,84299,55203],{"class":109},[36,84301,51869],{"class":98},[36,84303,79006],{"class":109},[36,84305,51924],{"class":163},[36,84307,1772],{"class":98},[36,84309,84310,84312,84314,84316,84318],{"class":38,"line":17202},[36,84311,55138],{"class":109},[36,84313,51869],{"class":98},[36,84315,807],{"class":109},[36,84317,51988],{"class":109},[36,84319,1772],{"class":98},[36,84321,84322,84324,84326,84328],{"class":38,"line":17208},[36,84323,55441],{"class":109},[36,84325,51869],{"class":98},[36,84327,51909],{"class":109},[36,84329,1772],{"class":98},[36,84331,84332,84334,84336,84338],{"class":38,"line":17222},[36,84333,55452],{"class":109},[36,84335,51869],{"class":98},[36,84337,52012],{"class":109},[36,84339,1772],{"class":98},[36,84341,84342,84345,84347,84349,84351,84353,84356],{"class":38,"line":17235},[36,84343,84344],{"class":109},"      border-top",[36,84346,51869],{"class":98},[36,84348,833],{"class":109},[36,84350,51924],{"class":163},[36,84352,51953],{"class":109},[36,84354,84355],{"class":109}," #4e4e4e",[36,84357,1772],{"class":98},[36,84359,84360,84362,84364,84366,84368],{"class":38,"line":17240},[36,84361,55127],{"class":109},[36,84363,51869],{"class":98},[36,84365,1313],{"class":109},[36,84367,51924],{"class":163},[36,84369,1772],{"class":98},[36,84371,84372],{"class":38,"line":17254},[36,84373,2646],{"class":98},[36,84375,84376],{"class":38,"line":17259},[36,84377,247],{"emptyLinePlaceholder":246},[36,84379,84380,84382,84385],{"class":38,"line":17265},[36,84381,72907],{"class":55},[36,84383,84384],{"class":55}," .amount",[36,84386,16011],{"class":98},[36,84388,84389,84391,84393,84395,84397],{"class":38,"line":17270},[36,84390,55354],{"class":109},[36,84392,51869],{"class":98},[36,84394,1264],{"class":109},[36,84396,51924],{"class":163},[36,84398,1772],{"class":98},[36,84400,84401,84403,84405,84407],{"class":38,"line":17284},[36,84402,57848],{"class":109},[36,84404,51869],{"class":98},[36,84406,79372],{"class":109},[36,84408,1772],{"class":98},[36,84410,84411,84413,84415,84417],{"class":38,"line":17289},[36,84412,62766],{"class":109},[36,84414,51869],{"class":98},[36,84416,51921],{"class":109},[36,84418,1772],{"class":98},[36,84420,84421,84423,84425,84427,84429],{"class":38,"line":17294},[36,84422,62182],{"class":109},[36,84424,51869],{"class":98},[36,84426,1270],{"class":109},[36,84428,51924],{"class":163},[36,84430,1772],{"class":98},[36,84432,84433],{"class":38,"line":17308},[36,84434,2646],{"class":98},[36,84436,84437,84439,84441],{"class":38,"line":17320},[36,84438,52849],{"class":98},[36,84440,537],{"class":51733},[36,84442,188],{"class":98},[36,84444,84445,84447,84449],{"class":38,"line":17325},[36,84446,52217],{"class":98},[36,84448,51766],{"class":51733},[36,84450,188],{"class":98},[36,84452,84453],{"class":38,"line":17338},[36,84454,247],{"emptyLinePlaceholder":246},[36,84456,84457,84459,84461],{"class":38,"line":17343},[36,84458,179],{"class":98},[36,84460,52232],{"class":51733},[36,84462,188],{"class":98},[36,84464,84465,84467,84469,84471,84473,84475],{"class":38,"line":17348},[36,84466,52576],{"class":98},[36,84468,52043],{"class":51733},[36,84470,53918],{"class":55},[36,84472,176],{"class":98},[36,84474,63040],{"class":59},[36,84476,188],{"class":98},[36,84478,84479,84481,84483],{"class":38,"line":17353},[36,84480,52849],{"class":98},[36,84482,52043],{"class":51733},[36,84484,188],{"class":98},[36,84486,84487,84489,84491,84493,84495,84497],{"class":38,"line":17366},[36,84488,52576],{"class":98},[36,84490,52043],{"class":51733},[36,84492,53918],{"class":55},[36,84494,176],{"class":98},[36,84496,63012],{"class":59},[36,84498,188],{"class":98},[36,84500,84501,84503,84505,84508,84510,84512,84514,84517,84519,84521,84523,84525],{"class":38,"line":17371},[36,84502,51773],{"class":98},[36,84504,52043],{"class":51733},[36,84506,84507],{"class":98},">合计：\u003C",[36,84509,36],{"class":51733},[36,84511,53918],{"class":55},[36,84513,176],{"class":98},[36,84515,84516],{"class":59},"\"amount\"",[36,84518,55746],{"class":98},[36,84520,36],{"class":51733},[36,84522,55746],{"class":98},[36,84524,52043],{"class":51733},[36,84526,188],{"class":98},[36,84528,84529,84531,84533],{"class":38,"line":33066},[36,84530,52849],{"class":98},[36,84532,52043],{"class":51733},[36,84534,188],{"class":98},[36,84536,84537,84539,84541],{"class":38,"line":33072},[36,84538,52576],{"class":98},[36,84540,52245],{"class":51733},[36,84542,188],{"class":98},[36,84544,84545,84547,84549,84551],{"class":38,"line":33078},[36,84546,11660],{"class":163},[36,84548,79809],{"class":109},[36,84550,14003],{"class":163},[36,84552,55879],{"class":98},[36,84554,84555],{"class":38,"line":33084},[36,84556,79818],{"class":98},[36,84558,84559,84561,84563],{"class":38,"line":33090},[36,84560,79823],{"class":98},[36,84562,79826],{"class":59},[36,84564,31899],{"class":98},[36,84566,84567,84569,84571],{"class":38,"line":33101},[36,84568,79833],{"class":98},[36,84570,79836],{"class":59},[36,84572,31899],{"class":98},[36,84574,84575,84577,84580],{"class":38,"line":33107},[36,84576,79843],{"class":98},[36,84578,84579],{"class":109},"289.9",[36,84581,31899],{"class":98},[36,84583,84584,84586,84588],{"class":38,"line":33127},[36,84585,79853],{"class":98},[36,84587,79856],{"class":59},[36,84589,31899],{"class":98},[36,84591,84592,84595,84597],{"class":38,"line":33133},[36,84593,84594],{"class":98},"        count: ",[36,84596,694],{"class":109},[36,84598,31899],{"class":98},[36,84600,84601,84604,84607],{"class":38,"line":33144},[36,84602,84603],{"class":98},"        spec: { color: ",[36,84605,84606],{"class":59},"'白色'",[36,84608,56036],{"class":98},[36,84610,84611],{"class":38,"line":33150},[36,84612,78324],{"class":98},[36,84614,84615],{"class":38,"line":33156},[36,84616,79818],{"class":98},[36,84618,84619,84621,84623],{"class":38,"line":33162},[36,84620,79823],{"class":98},[36,84622,79917],{"class":59},[36,84624,31899],{"class":98},[36,84626,84627,84629,84631],{"class":38,"line":33168},[36,84628,79833],{"class":98},[36,84630,79926],{"class":59},[36,84632,31899],{"class":98},[36,84634,84635,84637,84640],{"class":38,"line":33174},[36,84636,79843],{"class":98},[36,84638,84639],{"class":109},"109.8",[36,84641,31899],{"class":98},[36,84643,84644,84646,84648],{"class":38,"line":33180},[36,84645,79853],{"class":98},[36,84647,79944],{"class":59},[36,84649,31899],{"class":98},[36,84651,84652,84654,84656],{"class":38,"line":33186},[36,84653,84594],{"class":98},[36,84655,689],{"class":109},[36,84657,31899],{"class":98},[36,84659,84660,84663,84665,84667,84669],{"class":38,"line":33206},[36,84661,84662],{"class":98},"        spec: { size: ",[36,84664,82335],{"class":59},[36,84666,55896],{"class":98},[36,84668,82340],{"class":59},[36,84670,56036],{"class":98},[36,84672,84673],{"class":38,"line":33212},[36,84674,78324],{"class":98},[36,84676,84677],{"class":38,"line":33228},[36,84678,79818],{"class":98},[36,84680,84681,84683,84685],{"class":38,"line":33234},[36,84682,79823],{"class":98},[36,84684,79961],{"class":59},[36,84686,31899],{"class":98},[36,84688,84689,84691,84693],{"class":38,"line":33248},[36,84690,79833],{"class":98},[36,84692,79970],{"class":59},[36,84694,31899],{"class":98},[36,84696,84697,84699,84702],{"class":38,"line":33254},[36,84698,79843],{"class":98},[36,84700,84701],{"class":109},"488",[36,84703,31899],{"class":98},[36,84705,84706,84708,84710],{"class":38,"line":33269},[36,84707,79853],{"class":98},[36,84709,79988],{"class":59},[36,84711,31899],{"class":98},[36,84713,84714,84716,84718],{"class":38,"line":33275},[36,84715,84594],{"class":98},[36,84717,833],{"class":109},[36,84719,31899],{"class":98},[36,84721,84722,84724,84727,84730,84733],{"class":38,"line":33284},[36,84723,84603],{"class":98},[36,84725,84726],{"class":59},"'青色'",[36,84728,84729],{"class":98},", sum: ",[36,84731,84732],{"class":59},"'一大四小'",[36,84734,56036],{"class":98},[36,84736,84737],{"class":38,"line":33290},[36,84738,78324],{"class":98},[36,84740,84741],{"class":38,"line":33299},[36,84742,79818],{"class":98},[36,84744,84745,84747,84749],{"class":38,"line":33305},[36,84746,79823],{"class":98},[36,84748,80005],{"class":59},[36,84750,31899],{"class":98},[36,84752,84753,84755,84757],{"class":38,"line":33311},[36,84754,79833],{"class":98},[36,84756,80014],{"class":59},[36,84758,31899],{"class":98},[36,84760,84761,84763,84766],{"class":38,"line":33320},[36,84762,79843],{"class":98},[36,84764,84765],{"class":109},"139",[36,84767,31899],{"class":98},[36,84769,84770,84772,84774],{"class":38,"line":33326},[36,84771,79853],{"class":98},[36,84773,80032],{"class":59},[36,84775,31899],{"class":98},[36,84777,84778,84780,84782],{"class":38,"line":33337},[36,84779,84594],{"class":98},[36,84781,833],{"class":109},[36,84783,31899],{"class":98},[36,84785,84786,84788,84791,84793,84796],{"class":38,"line":33343},[36,84787,84662],{"class":98},[36,84789,84790],{"class":59},"'小号'",[36,84792,55896],{"class":98},[36,84794,84795],{"class":59},"'紫色'",[36,84797,55902],{"class":98},[36,84799,84800,84803],{"class":38,"line":33362},[36,84801,84802],{"class":98},"        gift: ",[36,84804,84805],{"class":59},"'50g茶叶,清洗球'\n",[36,84807,84808],{"class":38,"line":33368},[36,84809,52830],{"class":98},[36,84811,84812],{"class":38,"line":33379},[36,84813,53541],{"class":98},[36,84815,84816],{"class":38,"line":33385},[36,84817,84818],{"class":42},"    \u002F\u002F  1.根据数据渲染页面\n",[36,84820,84821,84823,84825,84827,84829,84831,84833,84835,84837,84839,84841,84843],{"class":38,"line":33405},[36,84822,52839],{"class":98},[36,84824,54831],{"class":55},[36,84826,621],{"class":98},[36,84828,80333],{"class":59},[36,84830,74681],{"class":98},[36,84832,176],{"class":163},[36,84834,80480],{"class":98},[36,84836,74476],{"class":55},[36,84838,621],{"class":98},[36,84840,80227],{"class":5667},[36,84842,80230],{"class":163},[36,84844,16011],{"class":98},[36,84846,84847],{"class":38,"line":33421},[36,84848,84849],{"class":42},"      \u002F\u002F 对象解构\n",[36,84851,84852,84854,84856,84858,84860,84862,84864,84867,84869,84871,84873,84876,84878,84881,84883,84885],{"class":38,"line":33427},[36,84853,58660],{"class":163},[36,84855,80239],{"class":98},[36,84857,80252],{"class":109},[36,84859,12874],{"class":98},[36,84861,80242],{"class":109},[36,84863,12874],{"class":98},[36,84865,84866],{"class":109},"count",[36,84868,12874],{"class":98},[36,84870,80247],{"class":109},[36,84872,12874],{"class":98},[36,84874,84875],{"class":109},"spec",[36,84877,12874],{"class":98},[36,84879,84880],{"class":109},"gift",[36,84882,80255],{"class":98},[36,84884,176],{"class":163},[36,84886,80260],{"class":98},[36,84888,84889],{"class":38,"line":33441},[36,84890,84891],{"class":42},"      \u002F\u002F 规格文字模块处理\n",[36,84893,84894,84896,84899,84901,84903,84905,84907,84909,84911,84913],{"class":38,"line":33447},[36,84895,58660],{"class":163},[36,84897,84898],{"class":109}," text",[36,84900,14003],{"class":163},[36,84902,82370],{"class":98},[36,84904,82373],{"class":55},[36,84906,82376],{"class":98},[36,84908,74655],{"class":55},[36,84910,621],{"class":98},[36,84912,82383],{"class":59},[36,84914,627],{"class":98},[36,84916,84917],{"class":38,"line":33453},[36,84918,84919],{"class":42},"      \u002F\u002F 处理赠品模块\n",[36,84921,84922,84924,84926,84928,84931,84933,84935,84937,84939,84942,84944,84946,84948,84950,84952,84955,84957,84960,84962,84964,84966,84968,84970,84972],{"class":38,"line":33464},[36,84923,58660],{"class":163},[36,84925,74351],{"class":109},[36,84927,14003],{"class":163},[36,84929,84930],{"class":98}," gift ",[36,84932,1597],{"class":163},[36,84934,83544],{"class":98},[36,84936,83547],{"class":55},[36,84938,621],{"class":98},[36,84940,84941],{"class":59},"','",[36,84943,31259],{"class":98},[36,84945,74476],{"class":55},[36,84947,621],{"class":98},[36,84949,80227],{"class":5667},[36,84951,80230],{"class":163},[36,84953,84954],{"class":59}," `\u003Cspan class=\"tag\">【赠品】${",[36,84956,80227],{"class":98},[36,84958,84959],{"class":59},"}\u003C\u002Fspan>`",[36,84961,31259],{"class":98},[36,84963,74655],{"class":55},[36,84965,621],{"class":98},[36,84967,74660],{"class":59},[36,84969,14153],{"class":98},[36,84971,1472],{"class":163},[36,84973,70536],{"class":59},[36,84975,84976],{"class":38,"line":33470},[36,84977,84978],{"class":42},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[36,84980,84981,84983,84986,84988,84991,84993,84995,84997,85000,85002,85004,85006,85009,85011,85013],{"class":38,"line":33476},[36,84982,58660],{"class":163},[36,84984,84985],{"class":109}," subtotal",[36,84987,14003],{"class":163},[36,84989,84990],{"class":98}," ((price ",[36,84992,1069],{"class":163},[36,84994,6205],{"class":109},[36,84996,6969],{"class":163},[36,84998,84999],{"class":98}," count) ",[36,85001,1198],{"class":163},[36,85003,6205],{"class":109},[36,85005,31259],{"class":98},[36,85007,85008],{"class":55},"toFixed",[36,85010,621],{"class":98},[36,85012,694],{"class":109},[36,85014,627],{"class":98},[36,85016,85017],{"class":38,"line":33486},[36,85018,247],{"emptyLinePlaceholder":246},[36,85020,85021,85023],{"class":38,"line":33492},[36,85022,74414],{"class":163},[36,85024,70600],{"class":59},[36,85026,85027],{"class":38,"line":33503},[36,85028,85029],{"class":59},"        \u003Cdiv class=\"item\">\n",[36,85031,85032,85035,85037],{"class":38,"line":33509},[36,85033,85034],{"class":59},"          \u003Cimg src=\"${",[36,85036,80252],{"class":98},[36,85038,80284],{"class":59},[36,85040,85041,85044,85046,85049,85051],{"class":38,"line":33519},[36,85042,85043],{"class":59},"          \u003Cp class=\"name\">${",[36,85045,80242],{"class":98},[36,85047,85048],{"class":59},"}${",[36,85050,1781],{"class":98},[36,85052,80294],{"class":59},[36,85054,85055,85058,85060],{"class":38,"line":33524},[36,85056,85057],{"class":59},"          \u003Cp class=\"spec\">${",[36,85059,5638],{"class":98},[36,85061,80294],{"class":59},[36,85063,85064,85067,85069,85071,85073,85075,85077,85079],{"class":38,"line":33530},[36,85065,85066],{"class":59},"          \u003Cp class=\"price\">${",[36,85068,80247],{"class":98},[36,85070,1172],{"class":59},[36,85072,85008],{"class":55},[36,85074,621],{"class":59},[36,85076,694],{"class":109},[36,85078,1043],{"class":59},[36,85080,80294],{"class":59},[36,85082,85083,85086,85088],{"class":38,"line":33579},[36,85084,85085],{"class":59},"          \u003Cp class=\"count\">x${",[36,85087,84866],{"class":98},[36,85089,80294],{"class":59},[36,85091,85092,85095,85098],{"class":38,"line":33626},[36,85093,85094],{"class":59},"          \u003Cp class=\"sub-total\">${",[36,85096,85097],{"class":98},"subtotal",[36,85099,80294],{"class":59},[36,85101,85102],{"class":38,"line":33631},[36,85103,85104],{"class":59},"        \u003C\u002Fdiv> \n",[36,85106,85107],{"class":38,"line":33637},[36,85108,85109],{"class":59},"             `\n",[36,85111,85112,85115,85117,85119,85121],{"class":38,"line":33656},[36,85113,85114],{"class":98},"    }).",[36,85116,74655],{"class":55},[36,85118,621],{"class":98},[36,85120,74660],{"class":59},[36,85122,627],{"class":98},[36,85124,85125],{"class":38,"line":33662},[36,85126,85127],{"class":42},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[36,85129,85130,85132,85134,85136,85138,85141,85143,85146,85148,85150,85152,85155,85158,85160,85163,85165,85167,85169,85172,85174,85176,85178,85180],{"class":38,"line":33682},[36,85131,11660],{"class":163},[36,85133,63217],{"class":109},[36,85135,14003],{"class":163},[36,85137,80480],{"class":98},[36,85139,85140],{"class":55},"reduce",[36,85142,2835],{"class":98},[36,85144,85145],{"class":5667},"prev",[36,85147,12874],{"class":98},[36,85149,80227],{"class":5667},[36,85151,14153],{"class":98},[36,85153,85154],{"class":163},"=>",[36,85156,85157],{"class":98}," prev ",[36,85159,1095],{"class":163},[36,85161,85162],{"class":98}," (item.price ",[36,85164,1069],{"class":163},[36,85166,6205],{"class":109},[36,85168,6969],{"class":163},[36,85170,85171],{"class":98}," item.count) ",[36,85173,1198],{"class":163},[36,85175,6205],{"class":109},[36,85177,12874],{"class":98},[36,85179,807],{"class":109},[36,85181,627],{"class":98},[36,85183,85184,85186,85188,85190,85193,85195,85197,85200,85202,85204,85206],{"class":38,"line":33688},[36,85185,52839],{"class":98},[36,85187,54831],{"class":55},[36,85189,621],{"class":98},[36,85191,85192],{"class":59},"'.amount'",[36,85194,74681],{"class":98},[36,85196,176],{"class":163},[36,85198,85199],{"class":98}," total.",[36,85201,85008],{"class":55},[36,85203,621],{"class":98},[36,85205,694],{"class":109},[36,85207,627],{"class":98},[36,85209,85210,85212,85214],{"class":38,"line":33694},[36,85211,52849],{"class":98},[36,85213,52245],{"class":51733},[36,85215,188],{"class":98},[36,85217,85218,85220,85222],{"class":38,"line":33704},[36,85219,52217],{"class":98},[36,85221,52232],{"class":51733},[36,85223,188],{"class":98},[36,85225,85226],{"class":38,"line":33709},[36,85227,247],{"emptyLinePlaceholder":246},[36,85229,85230,85232,85234],{"class":38,"line":33715},[36,85231,52217],{"class":98},[36,85233,51068],{"class":51733},[36,85235,188],{"class":98},[559,85237,85239],{"id":85238},"_411-编程思想","4.11 编程思想",[588,85241,85243],{"id":85242},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,85245,85246,85249],{},[765,85247,85248],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,85251,85252],{},"调用就可以了",[14,85254,85255],{},[1941,85256],{"alt":31,"src":85257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[588,85259,85261],{"id":85260},"_4112-面向对象","4.11.2 面向对象",[14,85263,85264],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,85266,85267],{},[1941,85268],{"alt":31,"src":85269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,85271,85272],{},"面向对象的特性：",[1618,85274,85275,85278,85281],{},[574,85276,85277],{},"封装性",[574,85279,85280],{},"继承性",[574,85282,85283],{},"多态性",[588,85285,85287],{"id":85286},"_4113-两者比较","4.11.3 两者比较",[14,85289,85290],{},[1941,85291],{"alt":31,"src":85292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[559,85294,85296],{"id":85295},"_412-构造函数回顾","4.12 构造函数回顾",[14,85298,85299],{},[1941,85300],{"alt":31,"src":85301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,85303,85304],{},[1941,85305],{"alt":31,"src":85306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,85308,85309],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,85311,85312],{},[1941,85313],{"alt":31,"src":85314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[559,85316,85318],{"id":85317},"_413-原型","4.13 原型",[588,85320,85322],{"id":85321},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,85324,85325],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,85327,85328],{},[1941,85329],{"alt":31,"src":85330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,85332,85333],{},[1941,85334],{"alt":31,"src":85335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,85337,85338],{},"原型是构造函数的属性，它也是一个对象",[14,85340,85341],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,85343,85344],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[26,85346,85348],{"className":53499,"code":85347,"language":53501,"meta":31,"style":31},"\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",[33,85349,85350,85358,85363,85371,85376,85381,85386,85391,85396,85400,85404,85408,85413,85418,85422,85427,85432,85437,85442,85447,85451,85459],{"__ignoreMap":31},[36,85351,85352,85354,85356],{"class":38,"line":39},[36,85353,179],{"class":98},[36,85355,52232],{"class":51733},[36,85357,188],{"class":98},[36,85359,85360],{"class":38,"line":46},[36,85361,85362],{"class":42},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[36,85364,85365,85367,85369],{"class":38,"line":52},[36,85366,52576],{"class":98},[36,85368,52245],{"class":51733},[36,85370,188],{"class":98},[36,85372,85373],{"class":38,"line":66},[36,85374,85375],{"class":98},"    function Star(uname, age) {\n",[36,85377,85378],{"class":38,"line":72},[36,85379,85380],{"class":98},"      this.uname = uname,\n",[36,85382,85383],{"class":38,"line":82},[36,85384,85385],{"class":98},"        this.age = age\n",[36,85387,85388],{"class":38,"line":88},[36,85389,85390],{"class":98},"      \u002F\u002F this.sing = function () {\n",[36,85392,85393],{"class":38,"line":113},[36,85394,85395],{"class":98},"      \u002F\u002F   console.log('唱歌')\n",[36,85397,85398],{"class":38,"line":119},[36,85399,247],{"emptyLinePlaceholder":246},[36,85401,85402],{"class":38,"line":131},[36,85403,60469],{"class":98},[36,85405,85406],{"class":38,"line":137},[36,85407,2646],{"class":98},[36,85409,85410],{"class":38,"line":147},[36,85411,85412],{"class":98},"    Star.prototype.sing = function () {\n",[36,85414,85415],{"class":38,"line":153},[36,85416,85417],{"class":98},"      console.log('唱歌')\n",[36,85419,85420],{"class":38,"line":191},[36,85421,2646],{"class":98},[36,85423,85424],{"class":38,"line":197},[36,85425,85426],{"class":98},"    \u002F\u002F console.dir(Star.prototype)\n",[36,85428,85429],{"class":38,"line":217},[36,85430,85431],{"class":98},"    const pink = new Star('pink', 18)\n",[36,85433,85434],{"class":38,"line":223},[36,85435,85436],{"class":98},"    const red = new Star('red', 20)\n",[36,85438,85439],{"class":38,"line":243},[36,85440,85441],{"class":98},"    pink.sing()\n",[36,85443,85444],{"class":38,"line":250},[36,85445,85446],{"class":98},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[36,85448,85449],{"class":38,"line":256},[36,85450,247],{"emptyLinePlaceholder":246},[36,85452,85453,85455,85457],{"class":38,"line":273},[36,85454,52849],{"class":98},[36,85456,52245],{"class":51733},[36,85458,188],{"class":98},[36,85460,85461,85463,85465],{"class":38,"line":278},[36,85462,52217],{"class":98},[36,85464,52232],{"class":51733},[36,85466,188],{"class":98},[14,85468,85469],{},[1941,85470],{"alt":31,"src":85471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[26,85473,85475],{"className":53499,"code":85474,"language":53501,"meta":31,"style":31},"\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",[33,85476,85477,85485,85493,85498,85503,85508,85513,85517,85522,85527,85532,85536,85541,85545,85549,85554,85558,85566],{"__ignoreMap":31},[36,85478,85479,85481,85483],{"class":38,"line":39},[36,85480,179],{"class":98},[36,85482,52232],{"class":51733},[36,85484,188],{"class":98},[36,85486,85487,85489,85491],{"class":38,"line":46},[36,85488,52576],{"class":98},[36,85490,52245],{"class":51733},[36,85492,188],{"class":98},[36,85494,85495],{"class":38,"line":52},[36,85496,85497],{"class":98},"    let that\n",[36,85499,85500],{"class":38,"line":66},[36,85501,85502],{"class":98},"    function Star(uname) {\n",[36,85504,85505],{"class":38,"line":72},[36,85506,85507],{"class":98},"      this.uname = uname\n",[36,85509,85510],{"class":38,"line":82},[36,85511,85512],{"class":98},"      that = this\n",[36,85514,85515],{"class":38,"line":88},[36,85516,2646],{"class":98},[36,85518,85519],{"class":38,"line":113},[36,85520,85521],{"class":98},"    \u002F\u002F 实例对象是 ldh\n",[36,85523,85524],{"class":38,"line":119},[36,85525,85526],{"class":98},"    const ldh = new Star('刘德华')\n",[36,85528,85529],{"class":38,"line":131},[36,85530,85531],{"class":98},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[36,85533,85534],{"class":38,"line":137},[36,85535,247],{"emptyLinePlaceholder":246},[36,85537,85538],{"class":38,"line":147},[36,85539,85540],{"class":98},"    Star.sing = function () {\n",[36,85542,85543],{"class":38,"line":153},[36,85544,85417],{"class":98},[36,85546,85547],{"class":38,"line":191},[36,85548,2646],{"class":98},[36,85550,85551],{"class":38,"line":197},[36,85552,85553],{"class":98},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[36,85555,85556],{"class":38,"line":217},[36,85557,247],{"emptyLinePlaceholder":246},[36,85559,85560,85562,85564],{"class":38,"line":223},[36,85561,52849],{"class":98},[36,85563,52245],{"class":51733},[36,85565,188],{"class":98},[36,85567,85568,85570,85572],{"class":38,"line":243},[36,85569,52217],{"class":98},[36,85571,52232],{"class":51733},[36,85573,188],{"class":98},[14,85575,85576],{},"构造函数的this指向的是实例对象；",[14,85578,85579],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[588,85581,85583],{"id":85582},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,85585,85586],{},[1941,85587],{"alt":31,"src":85588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[26,85590,85592],{"className":53499,"code":85591,"language":53501,"meta":31,"style":31},"\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",[33,85593,85594,85602,85610,85615,85620,85625,85630,85635,85640,85645,85650,85655,85660,85664,85669,85674,85679,85684,85688,85693,85698,85703,85708,85712,85717,85722,85727,85732,85736,85741,85745,85753],{"__ignoreMap":31},[36,85595,85596,85598,85600],{"class":38,"line":39},[36,85597,179],{"class":98},[36,85599,52232],{"class":51733},[36,85601,188],{"class":98},[36,85603,85604,85606,85608],{"class":38,"line":46},[36,85605,52576],{"class":98},[36,85607,52245],{"class":51733},[36,85609,188],{"class":98},[36,85611,85612],{"class":38,"line":52},[36,85613,85614],{"class":98},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[36,85616,85617],{"class":38,"line":66},[36,85618,85619],{"class":98},"    const arr = [1, 2, 3]\n",[36,85621,85622],{"class":38,"line":72},[36,85623,85624],{"class":98},"    \u002F\u002F 自己定义数组的扩展方法\n",[36,85626,85627],{"class":38,"line":82},[36,85628,85629],{"class":98},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[36,85631,85632],{"class":38,"line":88},[36,85633,85634],{"class":98},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[36,85636,85637],{"class":38,"line":113},[36,85638,85639],{"class":98},"    \u002F\u002F ①.最大值\n",[36,85641,85642],{"class":38,"line":119},[36,85643,85644],{"class":98},"    Array.prototype.max = function () {\n",[36,85646,85647],{"class":38,"line":131},[36,85648,85649],{"class":98},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[36,85651,85652],{"class":38,"line":137},[36,85653,85654],{"class":98},"      return Math.max(...this)\n",[36,85656,85657],{"class":38,"line":147},[36,85658,85659],{"class":98},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[36,85661,85662],{"class":38,"line":153},[36,85663,2646],{"class":98},[36,85665,85666],{"class":38,"line":191},[36,85667,85668],{"class":98},"    console.log(arr.max())\n",[36,85670,85671],{"class":38,"line":197},[36,85672,85673],{"class":98},"    \u002F\u002F ②最小值\n",[36,85675,85676],{"class":38,"line":217},[36,85677,85678],{"class":98},"    Array.prototype.min = function () {\n",[36,85680,85681],{"class":38,"line":223},[36,85682,85683],{"class":98},"      return Math.min(...this)\n",[36,85685,85686],{"class":38,"line":243},[36,85687,2646],{"class":98},[36,85689,85690],{"class":38,"line":250},[36,85691,85692],{"class":98},"    console.log(arr.min())\n",[36,85694,85695],{"class":38,"line":256},[36,85696,85697],{"class":98},"    \u002F\u002F③求和\n",[36,85699,85700],{"class":38,"line":273},[36,85701,85702],{"class":98},"    Array.prototype.sum = function () {\n",[36,85704,85705],{"class":38,"line":278},[36,85706,85707],{"class":98},"      return this.reduce((prev, current) => prev + current, 0)\n",[36,85709,85710],{"class":38,"line":284},[36,85711,2646],{"class":98},[36,85713,85714],{"class":38,"line":315},[36,85715,85716],{"class":98},"    console.log(arr.sum())\n",[36,85718,85719],{"class":38,"line":320},[36,85720,85721],{"class":98},"    \u002F\u002F ③排序\n",[36,85723,85724],{"class":38,"line":326},[36,85725,85726],{"class":98},"    Array.prototype.rever = function () {\n",[36,85728,85729],{"class":38,"line":343},[36,85730,85731],{"class":98},"      return this.reverse()\n",[36,85733,85734],{"class":38,"line":348},[36,85735,2646],{"class":98},[36,85737,85738],{"class":38,"line":354},[36,85739,85740],{"class":98},"    console.log(arr.rever())\n",[36,85742,85743],{"class":38,"line":370},[36,85744,247],{"emptyLinePlaceholder":246},[36,85746,85747,85749,85751],{"class":38,"line":375},[36,85748,52849],{"class":98},[36,85750,52245],{"class":51733},[36,85752,188],{"class":98},[36,85754,85755,85757,85759],{"class":38,"line":381},[36,85756,52217],{"class":98},[36,85758,52232],{"class":51733},[36,85760,188],{"class":98},[14,85762,85763],{},[1941,85764],{"alt":31,"src":85765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[588,85767,85769],{"id":85768},"_4133-constructor-属性","4.13.3 constructor 属性",[14,85771,85772],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,85774,85775],{},[1941,85776],{"alt":31,"src":85777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[26,85779,85781],{"className":53499,"code":85780,"language":53501,"meta":31,"style":31},"\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",[33,85782,85783,85791,85799,85804,85809,85813,85818,85823,85828,85836],{"__ignoreMap":31},[36,85784,85785,85787,85789],{"class":38,"line":39},[36,85786,179],{"class":98},[36,85788,52232],{"class":51733},[36,85790,188],{"class":98},[36,85792,85793,85795,85797],{"class":38,"line":46},[36,85794,52576],{"class":98},[36,85796,52245],{"class":51733},[36,85798,188],{"class":98},[36,85800,85801],{"class":38,"line":52},[36,85802,85803],{"class":98},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[36,85805,85806],{"class":38,"line":66},[36,85807,85808],{"class":98},"    function Star() {\n",[36,85810,85811],{"class":38,"line":72},[36,85812,2646],{"class":98},[36,85814,85815],{"class":38,"line":82},[36,85816,85817],{"class":98},"    const ldh = new Star()\n",[36,85819,85820],{"class":38,"line":88},[36,85821,85822],{"class":98},"    console.log(Star.prototype)\n",[36,85824,85825],{"class":38,"line":113},[36,85826,85827],{"class":98},"    console.log(Star.prototype.constructor === Star)\n",[36,85829,85830,85832,85834],{"class":38,"line":119},[36,85831,52849],{"class":98},[36,85833,52245],{"class":51733},[36,85835,188],{"class":98},[36,85837,85838,85840,85842],{"class":38,"line":131},[36,85839,52217],{"class":98},[36,85841,52232],{"class":51733},[36,85843,188],{"class":98},[14,85845,85846],{},[1941,85847],{"alt":31,"src":85848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,85850,85851],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[26,85853,85855],{"className":53499,"code":85854,"language":53501,"meta":31,"style":31},"  \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",[33,85856,85857,85865,85869,85873,85877,85882,85887,85892,85896,85901,85906,85911,85916,85921,85926,85930,85934,85939,85944,85949,85953,85958,85963,85967,85971,85975],{"__ignoreMap":31},[36,85858,85859,85861,85863],{"class":38,"line":39},[36,85860,52576],{"class":98},[36,85862,52245],{"class":51733},[36,85864,188],{"class":98},[36,85866,85867],{"class":38,"line":46},[36,85868,85803],{"class":98},[36,85870,85871],{"class":38,"line":52},[36,85872,85808],{"class":98},[36,85874,85875],{"class":38,"line":66},[36,85876,2646],{"class":98},[36,85878,85879],{"class":38,"line":72},[36,85880,85881],{"class":98},"    \u002F\u002F const ldh = new Star()\n",[36,85883,85884],{"class":38,"line":82},[36,85885,85886],{"class":98},"    \u002F\u002F console.log(Star.prototype)\n",[36,85888,85889],{"class":38,"line":88},[36,85890,85891],{"class":98},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[36,85893,85894],{"class":38,"line":113},[36,85895,247],{"emptyLinePlaceholder":246},[36,85897,85898],{"class":38,"line":119},[36,85899,85900],{"class":98},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[36,85902,85903],{"class":38,"line":131},[36,85904,85905],{"class":98},"    \u002F\u002F Star.prototype.sing = function () {\n",[36,85907,85908],{"class":38,"line":137},[36,85909,85910],{"class":98},"    \u002F\u002F   console.log('唱歌')\n",[36,85912,85913],{"class":38,"line":147},[36,85914,85915],{"class":98},"    \u002F\u002F }\n",[36,85917,85918],{"class":38,"line":153},[36,85919,85920],{"class":98},"    \u002F\u002F Star.prototype.dance = function () {\n",[36,85922,85923],{"class":38,"line":191},[36,85924,85925],{"class":98},"    \u002F\u002F   console.log('跳舞')\n",[36,85927,85928],{"class":38,"line":197},[36,85929,85915],{"class":98},[36,85931,85932],{"class":38,"line":217},[36,85933,85822],{"class":98},[36,85935,85936],{"class":38,"line":223},[36,85937,85938],{"class":98},"    Star.prototype = {\n",[36,85940,85941],{"class":38,"line":243},[36,85942,85943],{"class":98},"      sing: function () {\n",[36,85945,85946],{"class":38,"line":250},[36,85947,85948],{"class":98},"        console.log('唱歌')\n",[36,85950,85951],{"class":38,"line":256},[36,85952,78324],{"class":98},[36,85954,85955],{"class":38,"line":273},[36,85956,85957],{"class":98},"      dance: function () {\n",[36,85959,85960],{"class":38,"line":278},[36,85961,85962],{"class":98},"        console.log('跳舞')\n",[36,85964,85965],{"class":38,"line":284},[36,85966,52830],{"class":98},[36,85968,85969],{"class":38,"line":315},[36,85970,2646],{"class":98},[36,85972,85973],{"class":38,"line":320},[36,85974,85822],{"class":98},[36,85976,85977,85979,85981],{"class":38,"line":326},[36,85978,52849],{"class":98},[36,85980,52245],{"class":51733},[36,85982,188],{"class":98},[14,85984,85985],{},"进行输出结果后会发现：",[14,85987,85988],{},[1941,85989],{"alt":31,"src":85990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,85992,85993],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,85995,85996],{},"所以，要重新指回创造这个原型对象的构造函数",[26,85998,86000],{"className":71645,"code":85999,"language":71647,"meta":31,"style":31},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[33,86001,86002,86016,86021,86026,86037,86050,86055,86066,86080,86084],{"__ignoreMap":31},[36,86003,86004,86007,86009,86012,86014],{"class":38,"line":39},[36,86005,86006],{"class":109},"Star",[36,86008,1172],{"class":98},[36,86010,86011],{"class":109},"prototype",[36,86013,14003],{"class":163},[36,86015,16011],{"class":98},[36,86017,86018],{"class":38,"line":46},[36,86019,86020],{"class":42},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[36,86022,86023],{"class":38,"line":52},[36,86024,86025],{"class":98},"  constructor: Star,\n",[36,86027,86028,86031,86033,86035],{"class":38,"line":66},[36,86029,86030],{"class":55},"  sing",[36,86032,51869],{"class":98},[36,86034,54881],{"class":163},[36,86036,54884],{"class":98},[36,86038,86039,86041,86043,86045,86048],{"class":38,"line":72},[36,86040,74185],{"class":98},[36,86042,58679],{"class":55},[36,86044,621],{"class":98},[36,86046,86047],{"class":59},"'唱歌'",[36,86049,627],{"class":98},[36,86051,86052],{"class":38,"line":82},[36,86053,86054],{"class":98},"   },\n",[36,86056,86057,86060,86062,86064],{"class":38,"line":88},[36,86058,86059],{"class":55},"   dance",[36,86061,51869],{"class":98},[36,86063,54881],{"class":163},[36,86065,54884],{"class":98},[36,86067,86068,86071,86073,86075,86078],{"class":38,"line":113},[36,86069,86070],{"class":98},"     console.",[36,86072,58679],{"class":55},[36,86074,621],{"class":98},[36,86076,86077],{"class":59},"'跳舞'",[36,86079,627],{"class":98},[36,86081,86082],{"class":38,"line":119},[36,86083,4760],{"class":98},[36,86085,86086],{"class":38,"line":131},[36,86087,2044],{"class":98},[14,86089,86090],{},[1941,86091],{"alt":31,"src":86092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,86094,86095],{},"总结1：",[14,86097,86098],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,86100,86101],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,86103,86104],{},"constructor指的是他的来源",[14,86106,86107],{},[1941,86108],{"alt":31,"src":86109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,86111,86112],{},[1941,86113],{"alt":31,"src":86114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,86116,86117],{},"总结2：",[14,86119,86120],{},[1941,86121],{"alt":31,"src":86122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,86124,86125],{},[1941,86126],{"alt":31,"src":86127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,86129,86130],{},[1941,86131],{"alt":31,"src":86132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[588,86134,86136],{"id":86135},"_4134-对象原型","4.13.4 对象原型",[14,86138,86139],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,86141,86142],{},"对象原型就是__proto__这个属性",[14,86144,86145],{},[1941,86146],{"alt":31,"src":86147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,86149,86150],{},[1941,86151],{"alt":31,"src":86152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,86154,86155],{},[1941,86156],{"alt":31,"src":86157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,86159,86160],{},[1941,86161],{"alt":31,"src":86162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[26,86164,86166],{"className":53499,"code":86165,"language":53501,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,86167,86168,86176,86184,86188,86192,86196,86201,86209],{"__ignoreMap":31},[36,86169,86170,86172,86174],{"class":38,"line":39},[36,86171,179],{"class":98},[36,86173,52232],{"class":51733},[36,86175,188],{"class":98},[36,86177,86178,86180,86182],{"class":38,"line":46},[36,86179,52576],{"class":98},[36,86181,52245],{"class":51733},[36,86183,188],{"class":98},[36,86185,86186],{"class":38,"line":52},[36,86187,85808],{"class":98},[36,86189,86190],{"class":38,"line":66},[36,86191,2646],{"class":98},[36,86193,86194],{"class":38,"line":72},[36,86195,85817],{"class":98},[36,86197,86198],{"class":38,"line":82},[36,86199,86200],{"class":98},"    console.log(ldh)\n",[36,86202,86203,86205,86207],{"class":38,"line":88},[36,86204,52849],{"class":98},[36,86206,52245],{"class":51733},[36,86208,188],{"class":98},[36,86210,86211,86213,86215],{"class":38,"line":113},[36,86212,52217],{"class":98},[36,86214,52232],{"class":51733},[36,86216,188],{"class":98},[14,86218,86219],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,86221,86222],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,86224,86225],{},[1941,86226],{"alt":31,"src":86227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,86229,86230],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,86232,86233],{},"对象原型指向原型对象",[14,86235,86236],{},[1941,86237],{"alt":31,"src":86238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,86240,86241],{},[1941,86242],{"alt":31,"src":86243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,86245,86246],{},[1941,86247],{"alt":31,"src":86248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[588,86250,86252],{"id":86251},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,86254,86255],{},[1941,86256],{"alt":31,"src":86257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[571,86259,86260,86263,86266,86269],{},[574,86261,86262],{},"构造函数通过new的形式实例化得到实例对象",[574,86264,86265],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[574,86267,86268],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[574,86270,86271],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,86273,86274],{},[1941,86275],{"alt":31,"src":86276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,86278,86279],{},"题目梳理：",[14,86281,86282],{},[1941,86283],{"alt":31,"src":86284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[588,86286,86288],{"id":86287},"_4136-原型继承","4.13.6 原型继承",[14,86290,86291],{},[1941,86292],{"alt":31,"src":86293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,86295,86296],{},[1941,86297],{"alt":31,"src":86298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,86300,86301],{},[1941,86302],{"alt":31,"src":86303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,86305,86306],{},[1941,86307],{"alt":31,"src":86308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,86310,86311],{},[1941,86312],{"alt":31,"src":86313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,86315,86316],{},[1941,86317],{"alt":31,"src":86318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,86320,86321],{},[1941,86322],{"alt":31,"src":86323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,86325,86326],{},[1941,86327],{"alt":31,"src":86328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,86330,86331],{},"回顾：构造函数每次new得到对象都是不同的",[588,86333,86335],{"id":86334},"_4137-原型链","4.13.7 原型链",[14,86337,86338],{},[1941,86339],{"alt":31,"src":86340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,86342,86343],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,86345,86346],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,86348,86349],{},"大哥是Object",[14,86351,86352],{},[1941,86353],{"alt":31,"src":86354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,86356,86357],{},[1941,86358],{"alt":31,"src":86359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,86361,86362],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,86364,86365],{},"万物皆对象",[588,86367,86369],{"id":86368},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,86371,86372],{},"模态框",[14,86374,86375],{},"以后遇见这个效果直接使用这个就行",[14,86377,86378],{},[1941,86379],{"alt":31,"src":86380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,86382,86383],{},[1941,86384],{"alt":31,"src":86385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,86387,86388],{},[1941,86389],{"alt":31,"src":86390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,86392,86393],{},[1941,86394],{"alt":31,"src":86395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,86397,86398],{},"补充知识点：",[571,86400,86401],{},[574,86402,86403],{},"append()",[14,86405,86406],{},[1941,86407],{"alt":31,"src":86408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[26,86410,86412],{"className":51066,"code":86411,"language":51068,"meta":31,"style":31},"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",[33,86413,86414,86419,86424,86429,86433,86437,86441,86446,86451,86456,86460],{"__ignoreMap":31},[36,86415,86416],{"class":38,"line":39},[36,86417,86418],{"class":98},"append(param1)\n",[36,86420,86421],{"class":38,"line":46},[36,86422,86423],{"class":98},"append(param1, param2)\n",[36,86425,86426],{"class":38,"line":52},[36,86427,86428],{"class":98},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[36,86430,86431],{"class":38,"line":66},[36,86432,247],{"emptyLinePlaceholder":246},[36,86434,86435],{"class":38,"line":72},[36,86436,247],{"emptyLinePlaceholder":246},[36,86438,86439],{"class":38,"line":82},[36,86440,247],{"emptyLinePlaceholder":246},[36,86442,86443],{"class":38,"line":88},[36,86444,86445],{"class":98},"let div = document.createElement(\"div\");\n",[36,86447,86448],{"class":38,"line":113},[36,86449,86450],{"class":98},"let p = document.createElement(\"p\");\n",[36,86452,86453],{"class":38,"line":119},[36,86454,86455],{"class":98},"div.append(p);\n",[36,86457,86458],{"class":38,"line":131},[36,86459,247],{"emptyLinePlaceholder":246},[36,86461,86462,86465,86467],{"class":38,"line":137},[36,86463,86464],{"class":98},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[36,86466,14],{"class":51733},[36,86468,86469],{"class":98},"> ]\n",[571,86471,86472],{"start":46},[574,86473,86474],{},"remove()",[14,86476,86477],{},"自己删自己",[14,86479,86480],{},[1941,86481],{"alt":31,"src":86482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[26,86484,86486],{"className":51066,"code":86485,"language":51068,"meta":31,"style":31},"\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",[33,86487,86488,86498,86512,86516,86524,86538,86558,86570,86578,86585,86597,86610,86645,86657,86668,86680,86692,86704,86731,86741,86745,86749,86758,86770,86784,86794,86806,86810,86814,86824,86835,86845,86855,86868,86881,86891,86895,86899,86908,86918,86930,86934,86938,86947,86957,86967,86979,86983,86987,86997,87013,87024,87034,87044,87056,87068,87080,87084,87088,87101,87112,87116,87124,87132,87136,87144,87164,87184,87192,87197,87223,87228,87233,87252,87257,87269,87274,87285,87295,87305,87310,87315,87319,87324,87329,87334,87354,87359,87379,87384,87398,87403,87408,87413,87429,87433,87438,87467,87472,87477,87482,87493,87497,87501,87505,87510,87535,87540,87565,87570,87579,87583,87588,87613,87617,87642,87646,87655,87659,87664,87682,87692,87696,87704,87712,87716],{"__ignoreMap":31},[36,86489,86490,86492,86494,86496],{"class":38,"line":39},[36,86491,51730],{"class":98},[36,86493,51734],{"class":51733},[36,86495,51737],{"class":55},[36,86497,188],{"class":98},[36,86499,86500,86502,86504,86506,86508,86510],{"class":38,"line":46},[36,86501,179],{"class":98},[36,86503,51068],{"class":51733},[36,86505,51748],{"class":55},[36,86507,176],{"class":98},[36,86509,51753],{"class":59},[36,86511,188],{"class":98},[36,86513,86514],{"class":38,"line":52},[36,86515,247],{"emptyLinePlaceholder":246},[36,86517,86518,86520,86522],{"class":38,"line":66},[36,86519,179],{"class":98},[36,86521,51766],{"class":51733},[36,86523,188],{"class":98},[36,86525,86526,86528,86530,86532,86534,86536],{"class":38,"line":72},[36,86527,52576],{"class":98},[36,86529,51776],{"class":51733},[36,86531,51779],{"class":55},[36,86533,176],{"class":98},[36,86535,51784],{"class":59},[36,86537,188],{"class":98},[36,86539,86540,86542,86544,86546,86548,86550,86552,86554,86556],{"class":38,"line":82},[36,86541,52576],{"class":98},[36,86543,51776],{"class":51733},[36,86545,15359],{"class":55},[36,86547,176],{"class":98},[36,86549,51823],{"class":59},[36,86551,51803],{"class":55},[36,86553,176],{"class":98},[36,86555,51830],{"class":59},[36,86557,188],{"class":98},[36,86559,86560,86562,86564,86566,86568],{"class":38,"line":88},[36,86561,52576],{"class":98},[36,86563,51839],{"class":51733},[36,86565,51842],{"class":98},[36,86567,51839],{"class":51733},[36,86569,188],{"class":98},[36,86571,86572,86574,86576],{"class":38,"line":113},[36,86573,52576],{"class":98},[36,86575,537],{"class":51733},[36,86577,188],{"class":98},[36,86579,86580,86583],{"class":38,"line":119},[36,86581,86582],{"class":55},"    .modal",[36,86584,16011],{"class":98},[36,86586,86587,86589,86591,86593,86595],{"class":38,"line":131},[36,86588,55203],{"class":109},[36,86590,51869],{"class":98},[36,86592,4424],{"class":109},[36,86594,51924],{"class":163},[36,86596,1772],{"class":98},[36,86598,86599,86602,86604,86606,86608],{"class":38,"line":137},[36,86600,86601],{"class":109},"      min-height",[36,86603,51869],{"class":98},[36,86605,926],{"class":109},[36,86607,51924],{"class":163},[36,86609,1772],{"class":98},[36,86611,86612,86614,86616,86618,86620,86622,86624,86626,86628,86630,86632,86634,86636,86638,86640,86643],{"class":38,"line":147},[36,86613,79182],{"class":109},[36,86615,51869],{"class":98},[36,86617,807],{"class":109},[36,86619,4544],{"class":109},[36,86621,2497],{"class":109},[36,86623,51924],{"class":163},[36,86625,79199],{"class":109},[36,86627,621],{"class":98},[36,86629,807],{"class":109},[36,86631,12874],{"class":98},[36,86633,807],{"class":109},[36,86635,12874],{"class":98},[36,86637,807],{"class":109},[36,86639,12874],{"class":98},[36,86641,86642],{"class":109},"0.1",[36,86644,3170],{"class":98},[36,86646,86647,86649,86651,86653,86655],{"class":38,"line":153},[36,86648,55566],{"class":109},[36,86650,51869],{"class":98},[36,86652,908],{"class":109},[36,86654,51924],{"class":163},[36,86656,1772],{"class":98},[36,86658,86659,86661,86663,86666],{"class":38,"line":191},[36,86660,55191],{"class":109},[36,86662,51869],{"class":98},[36,86664,86665],{"class":109},"fixed",[36,86667,1772],{"class":98},[36,86669,86670,86673,86675,86678],{"class":38,"line":197},[36,86671,86672],{"class":109},"      z-index",[36,86674,51869],{"class":98},[36,86676,86677],{"class":109},"999",[36,86679,1772],{"class":98},[36,86681,86682,86684,86686,86688,86690],{"class":38,"line":217},[36,86683,55270],{"class":109},[36,86685,51869],{"class":98},[36,86687,1270],{"class":109},[36,86689,942],{"class":163},[36,86691,1772],{"class":98},[36,86693,86694,86696,86698,86700,86702],{"class":38,"line":223},[36,86695,55379],{"class":109},[36,86697,51869],{"class":98},[36,86699,1270],{"class":109},[36,86701,942],{"class":163},[36,86703,1772],{"class":98},[36,86705,86706,86708,86710,86712,86714,86717,86719,86721,86723,86725,86727,86729],{"class":38,"line":243},[36,86707,79223],{"class":109},[36,86709,51869],{"class":98},[36,86711,79228],{"class":109},[36,86713,621],{"class":98},[36,86715,86716],{"class":109},"-50",[36,86718,942],{"class":163},[36,86720,12874],{"class":98},[36,86722,86716],{"class":109},[36,86724,942],{"class":163},[36,86726,12874],{"class":98},[36,86728,807],{"class":109},[36,86730,3170],{"class":98},[36,86732,86733,86735,86737,86739],{"class":38,"line":250},[36,86734,55316],{"class":109},[36,86736,51869],{"class":98},[36,86738,61274],{"class":109},[36,86740,1772],{"class":98},[36,86742,86743],{"class":38,"line":256},[36,86744,2646],{"class":98},[36,86746,86747],{"class":38,"line":273},[36,86748,247],{"emptyLinePlaceholder":246},[36,86750,86751,86753,86756],{"class":38,"line":278},[36,86752,86582],{"class":55},[36,86754,86755],{"class":55}," .header",[36,86757,16011],{"class":98},[36,86759,86760,86762,86764,86766,86768],{"class":38,"line":284},[36,86761,57791],{"class":109},[36,86763,51869],{"class":98},[36,86765,1015],{"class":109},[36,86767,51924],{"class":163},[36,86769,1772],{"class":98},[36,86771,86772,86774,86776,86778,86780,86782],{"class":38,"line":315},[36,86773,55127],{"class":109},[36,86775,51869],{"class":98},[36,86777,807],{"class":109},[36,86779,2497],{"class":109},[36,86781,51924],{"class":163},[36,86783,1772],{"class":98},[36,86785,86786,86788,86790,86792],{"class":38,"line":320},[36,86787,55191],{"class":109},[36,86789,51869],{"class":98},[36,86791,55196],{"class":109},[36,86793,1772],{"class":98},[36,86795,86796,86798,86800,86802,86804],{"class":38,"line":326},[36,86797,55354],{"class":109},[36,86799,51869],{"class":98},[36,86801,1313],{"class":109},[36,86803,51924],{"class":163},[36,86805,1772],{"class":98},[36,86807,86808],{"class":38,"line":343},[36,86809,2646],{"class":98},[36,86811,86812],{"class":38,"line":348},[36,86813,247],{"emptyLinePlaceholder":246},[36,86815,86816,86818,86820,86822],{"class":38,"line":354},[36,86817,86582],{"class":55},[36,86819,86755],{"class":55},[36,86821,3483],{"class":51733},[36,86823,16011],{"class":98},[36,86825,86826,86829,86831,86833],{"class":38,"line":370},[36,86827,86828],{"class":109},"      font-style",[36,86830,51869],{"class":98},[36,86832,64273],{"class":109},[36,86834,1772],{"class":98},[36,86836,86837,86839,86841,86843],{"class":38,"line":375},[36,86838,57848],{"class":109},[36,86840,51869],{"class":98},[36,86842,62502],{"class":109},[36,86844,1772],{"class":98},[36,86846,86847,86849,86851,86853],{"class":38,"line":381},[36,86848,55191],{"class":109},[36,86850,51869],{"class":98},[36,86852,55263],{"class":109},[36,86854,1772],{"class":98},[36,86856,86857,86860,86862,86864,86866],{"class":38,"line":399},[36,86858,86859],{"class":109},"      right",[36,86861,51869],{"class":98},[36,86863,1189],{"class":109},[36,86865,51924],{"class":163},[36,86867,1772],{"class":98},[36,86869,86870,86872,86874,86877,86879],{"class":38,"line":404},[36,86871,55379],{"class":109},[36,86873,51869],{"class":98},[36,86875,86876],{"class":109},"-2",[36,86878,51924],{"class":163},[36,86880,1772],{"class":98},[36,86882,86883,86885,86887,86889],{"class":38,"line":410},[36,86884,62457],{"class":109},[36,86886,51869],{"class":98},[36,86888,62462],{"class":109},[36,86890,1772],{"class":98},[36,86892,86893],{"class":38,"line":423},[36,86894,2646],{"class":98},[36,86896,86897],{"class":38,"line":436},[36,86898,247],{"emptyLinePlaceholder":246},[36,86900,86901,86903,86906],{"class":38,"line":441},[36,86902,86582],{"class":55},[36,86904,86905],{"class":55}," .body",[36,86907,16011],{"class":98},[36,86909,86910,86912,86914,86916],{"class":38,"line":447},[36,86911,57718],{"class":109},[36,86913,51869],{"class":98},[36,86915,52024],{"class":109},[36,86917,1772],{"class":98},[36,86919,86920,86922,86924,86926,86928],{"class":38,"line":465},[36,86921,55127],{"class":109},[36,86923,51869],{"class":98},[36,86925,1060],{"class":109},[36,86927,51924],{"class":163},[36,86929,1772],{"class":98},[36,86931,86932],{"class":38,"line":470},[36,86933,2646],{"class":98},[36,86935,86936],{"class":38,"line":476},[36,86937,247],{"emptyLinePlaceholder":246},[36,86939,86940,86942,86945],{"class":38,"line":496},[36,86941,86582],{"class":55},[36,86943,86944],{"class":55}," .footer",[36,86946,16011],{"class":98},[36,86948,86949,86951,86953,86955],{"class":38,"line":501},[36,86950,55441],{"class":109},[36,86952,51869],{"class":98},[36,86954,51909],{"class":109},[36,86956,1772],{"class":98},[36,86958,86959,86961,86963,86965],{"class":38,"line":507},[36,86960,55452],{"class":109},[36,86962,51869],{"class":98},[36,86964,52012],{"class":109},[36,86966,1772],{"class":98},[36,86968,86969,86971,86973,86975,86977],{"class":38,"line":517},[36,86970,55127],{"class":109},[36,86972,51869],{"class":98},[36,86974,1060],{"class":109},[36,86976,51924],{"class":163},[36,86978,1772],{"class":98},[36,86980,86981],{"class":38,"line":522},[36,86982,2646],{"class":98},[36,86984,86985],{"class":38,"line":528},[36,86986,247],{"emptyLinePlaceholder":246},[36,86988,86989,86991,86993,86995],{"class":38,"line":10203},[36,86990,86582],{"class":55},[36,86992,86944],{"class":55},[36,86994,1877],{"class":51733},[36,86996,16011],{"class":98},[36,86998,86999,87001,87003,87005,87007,87009,87011],{"class":38,"line":10227},[36,87000,55127],{"class":109},[36,87002,51869],{"class":98},[36,87004,689],{"class":109},[36,87006,51924],{"class":163},[36,87008,2542],{"class":109},[36,87010,51924],{"class":163},[36,87012,1772],{"class":98},[36,87014,87015,87017,87019,87022],{"class":38,"line":10232},[36,87016,62153],{"class":109},[36,87018,51869],{"class":98},[36,87020,87021],{"class":109},"#ccc",[36,87023,1772],{"class":98},[36,87025,87026,87028,87030,87032],{"class":38,"line":10237},[36,87027,64402],{"class":109},[36,87029,51869],{"class":98},[36,87031,55169],{"class":109},[36,87033,1772],{"class":98},[36,87035,87036,87038,87040,87042],{"class":38,"line":10242},[36,87037,57848],{"class":109},[36,87039,51869],{"class":98},[36,87041,61274],{"class":109},[36,87043,1772],{"class":98},[36,87045,87046,87048,87050,87052,87054],{"class":38,"line":10251},[36,87047,55566],{"class":109},[36,87049,51869],{"class":98},[36,87051,694],{"class":109},[36,87053,51924],{"class":163},[36,87055,1772],{"class":98},[36,87057,87058,87060,87062,87064,87066],{"class":38,"line":10256},[36,87059,62182],{"class":109},[36,87061,51869],{"class":98},[36,87063,1060],{"class":109},[36,87065,51924],{"class":163},[36,87067,1772],{"class":98},[36,87069,87070,87072,87074,87076,87078],{"class":38,"line":10262},[36,87071,55354],{"class":109},[36,87073,51869],{"class":98},[36,87075,1163],{"class":109},[36,87077,51924],{"class":163},[36,87079,1772],{"class":98},[36,87081,87082],{"class":38,"line":10283},[36,87083,2646],{"class":98},[36,87085,87086],{"class":38,"line":10289},[36,87087,247],{"emptyLinePlaceholder":246},[36,87089,87090,87092,87094,87096,87099],{"class":38,"line":10303},[36,87091,86582],{"class":55},[36,87093,86944],{"class":55},[36,87095,1877],{"class":51733},[36,87097,87098],{"class":55},".submit",[36,87100,16011],{"class":98},[36,87102,87103,87105,87107,87110],{"class":38,"line":10309},[36,87104,55316],{"class":109},[36,87106,51869],{"class":98},[36,87108,87109],{"class":109},"#369",[36,87111,1772],{"class":98},[36,87113,87114],{"class":38,"line":10336},[36,87115,2646],{"class":98},[36,87117,87118,87120,87122],{"class":38,"line":10345},[36,87119,52849],{"class":98},[36,87121,537],{"class":51733},[36,87123,188],{"class":98},[36,87125,87126,87128,87130],{"class":38,"line":10351},[36,87127,52217],{"class":98},[36,87129,51766],{"class":51733},[36,87131,188],{"class":98},[36,87133,87134],{"class":38,"line":10359},[36,87135,247],{"emptyLinePlaceholder":246},[36,87137,87138,87140,87142],{"class":38,"line":10364},[36,87139,179],{"class":98},[36,87141,52232],{"class":51733},[36,87143,188],{"class":98},[36,87145,87146,87148,87150,87152,87154,87157,87160,87162],{"class":38,"line":17043},[36,87147,52576],{"class":98},[36,87149,54319],{"class":51733},[36,87151,15398],{"class":55},[36,87153,176],{"class":98},[36,87155,87156],{"class":59},"\"delete\"",[36,87158,87159],{"class":98},">删除\u003C\u002F",[36,87161,54319],{"class":51733},[36,87163,188],{"class":98},[36,87165,87166,87168,87170,87172,87174,87177,87180,87182],{"class":38,"line":17049},[36,87167,52576],{"class":98},[36,87169,54319],{"class":51733},[36,87171,15398],{"class":55},[36,87173,176],{"class":98},[36,87175,87176],{"class":59},"\"login\"",[36,87178,87179],{"class":98},">登录\u003C\u002F",[36,87181,54319],{"class":51733},[36,87183,188],{"class":98},[36,87185,87186,87188,87190],{"class":38,"line":17072},[36,87187,52576],{"class":98},[36,87189,52245],{"class":51733},[36,87191,188],{"class":98},[36,87193,87194],{"class":38,"line":17078},[36,87195,87196],{"class":42},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[36,87198,87199,87201,87204,87206,87208,87210,87212,87214,87217,87219,87221],{"class":38,"line":17101},[36,87200,70516],{"class":163},[36,87202,87203],{"class":55}," Modal",[36,87205,621],{"class":98},[36,87207,51839],{"class":5667},[36,87209,14003],{"class":163},[36,87211,70362],{"class":59},[36,87213,12874],{"class":98},[36,87215,87216],{"class":5667},"message",[36,87218,14003],{"class":163},[36,87220,70362],{"class":59},[36,87222,12881],{"class":98},[36,87224,87225],{"class":38,"line":17115},[36,87226,87227],{"class":42},"      \u002F\u002F 创建Model 模态框盒子\n",[36,87229,87230],{"class":38,"line":17135},[36,87231,87232],{"class":42},"      \u002F\u002F 1.1 创建div标签\n",[36,87234,87235,87237,87240,87242,87244,87246,87248,87250],{"class":38,"line":17141},[36,87236,70483],{"class":109},[36,87238,87239],{"class":98},".modalBox ",[36,87241,176],{"class":163},[36,87243,54828],{"class":98},[36,87245,70583],{"class":55},[36,87247,621],{"class":98},[36,87249,82363],{"class":59},[36,87251,627],{"class":98},[36,87253,87254],{"class":38,"line":17152},[36,87255,87256],{"class":42},"      \u002F\u002F 1.2 给div 添加类名为model\n",[36,87258,87259,87261,87264,87266],{"class":38,"line":17175},[36,87260,70483],{"class":109},[36,87262,87263],{"class":98},".modalBox.className ",[36,87265,176],{"class":163},[36,87267,87268],{"class":59}," 'modal'\n",[36,87270,87271],{"class":38,"line":17197},[36,87272,87273],{"class":42},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[36,87275,87276,87278,87281,87283],{"class":38,"line":17202},[36,87277,70483],{"class":109},[36,87279,87280],{"class":98},".modalBox.innerHTML ",[36,87282,176],{"class":163},[36,87284,70600],{"class":59},[36,87286,87287,87290,87292],{"class":38,"line":17208},[36,87288,87289],{"class":59},"        \u003Cdiv class=\"header\">${",[36,87291,51839],{"class":98},[36,87293,87294],{"class":59},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[36,87296,87297,87300,87302],{"class":38,"line":17222},[36,87298,87299],{"class":59},"        \u003Cdiv class=\"body\">${",[36,87301,87216],{"class":98},[36,87303,87304],{"class":59},"}\u003C\u002Fdiv>\n",[36,87306,87307],{"class":38,"line":17235},[36,87308,87309],{"class":59},"      `\n",[36,87311,87312],{"class":38,"line":17240},[36,87313,87314],{"class":42},"      \u002F\u002F console.log(this.modalBox)\n",[36,87316,87317],{"class":38,"line":17254},[36,87318,2646],{"class":98},[36,87320,87321],{"class":38,"line":17259},[36,87322,87323],{"class":42},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[36,87325,87326],{"class":38,"line":17265},[36,87327,87328],{"class":42},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[36,87330,87331],{"class":38,"line":17270},[36,87332,87333],{"class":42},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[36,87335,87336,87339,87341,87343,87345,87348,87350,87352],{"class":38,"line":17284},[36,87337,87338],{"class":109},"    Modal",[36,87340,1172],{"class":98},[36,87342,86011],{"class":109},[36,87344,1172],{"class":98},[36,87346,87347],{"class":55},"open",[36,87349,14003],{"class":163},[36,87351,59350],{"class":163},[36,87353,54884],{"class":98},[36,87355,87356],{"class":38,"line":17289},[36,87357,87358],{"class":42},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[36,87360,87361,87363,87366,87368,87370,87372,87374,87377],{"class":38,"line":17294},[36,87362,58660],{"class":163},[36,87364,87365],{"class":109}," box",[36,87367,14003],{"class":163},[36,87369,54828],{"class":98},[36,87371,54831],{"class":55},[36,87373,621],{"class":98},[36,87375,87376],{"class":59},"'.modal'",[36,87378,627],{"class":98},[36,87380,87381],{"class":38,"line":17308},[36,87382,87383],{"class":42},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[36,87385,87386,87389,87391,87394,87396],{"class":38,"line":17320},[36,87387,87388],{"class":98},"      box ",[36,87390,2183],{"class":163},[36,87392,87393],{"class":98}," box.",[36,87395,57438],{"class":55},[36,87397,2435],{"class":98},[36,87399,87400],{"class":38,"line":17325},[36,87401,87402],{"class":42},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[36,87404,87405],{"class":38,"line":17338},[36,87406,87407],{"class":42},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[36,87409,87410],{"class":38,"line":17343},[36,87411,87412],{"class":42},"      \u002F\u002F append可以增加对象\n",[36,87414,87415,87418,87421,87423,87426],{"class":38,"line":17348},[36,87416,87417],{"class":98},"      document.body.",[36,87419,87420],{"class":55},"append",[36,87422,621],{"class":98},[36,87424,87425],{"class":109},"this",[36,87427,87428],{"class":98},".modalBox)\n",[36,87430,87431],{"class":38,"line":17353},[36,87432,247],{"emptyLinePlaceholder":246},[36,87434,87435],{"class":38,"line":17366},[36,87436,87437],{"class":42},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[36,87439,87440,87442,87445,87447,87449,87452,87454,87456,87458,87460,87463,87465],{"class":38,"line":17371},[36,87441,70483],{"class":109},[36,87443,87444],{"class":98},".modalBox.",[36,87446,54831],{"class":55},[36,87448,621],{"class":98},[36,87450,87451],{"class":59},"'i'",[36,87453,31259],{"class":98},[36,87455,58245],{"class":55},[36,87457,621],{"class":98},[36,87459,58250],{"class":59},[36,87461,87462],{"class":98},", () ",[36,87464,85154],{"class":163},[36,87466,16011],{"class":98},[36,87468,87469],{"class":38,"line":33066},[36,87470,87471],{"class":42},"        \u002F\u002F 这个地方需要用到箭头函数\n",[36,87473,87474],{"class":38,"line":33072},[36,87475,87476],{"class":42},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[36,87478,87479],{"class":38,"line":33078},[36,87480,87481],{"class":42},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[36,87483,87484,87486,87488,87491],{"class":38,"line":33084},[36,87485,65158],{"class":109},[36,87487,1172],{"class":98},[36,87489,87490],{"class":55},"close",[36,87492,2435],{"class":98},[36,87494,87495],{"class":38,"line":33090},[36,87496,65247],{"class":98},[36,87498,87499],{"class":38,"line":33101},[36,87500,2646],{"class":98},[36,87502,87503],{"class":38,"line":33107},[36,87504,247],{"emptyLinePlaceholder":246},[36,87506,87507],{"class":38,"line":33127},[36,87508,87509],{"class":42},"    \u002F\u002F 测试一下 点击 删除按钮\n",[36,87511,87512,87514,87516,87518,87521,87523,87525,87527,87529,87531,87533],{"class":38,"line":33133},[36,87513,52839],{"class":98},[36,87515,54831],{"class":55},[36,87517,621],{"class":98},[36,87519,87520],{"class":59},"'#delete'",[36,87522,31259],{"class":98},[36,87524,58245],{"class":55},[36,87526,621],{"class":98},[36,87528,58250],{"class":59},[36,87530,87462],{"class":98},[36,87532,85154],{"class":163},[36,87534,16011],{"class":98},[36,87536,87537],{"class":38,"line":33144},[36,87538,87539],{"class":42},"      \u002F\u002F 先调用Model构造函数\n",[36,87541,87542,87544,87547,87549,87551,87553,87555,87558,87560,87563],{"class":38,"line":33150},[36,87543,58660],{"class":163},[36,87545,87546],{"class":109}," del",[36,87548,14003],{"class":163},[36,87550,12017],{"class":163},[36,87552,87203],{"class":55},[36,87554,621],{"class":98},[36,87556,87557],{"class":59},"'温馨的提示'",[36,87559,12874],{"class":98},[36,87561,87562],{"class":59},"'您没有删除权限操作'",[36,87564,627],{"class":98},[36,87566,87567],{"class":38,"line":33156},[36,87568,87569],{"class":42},"      \u002F\u002F 实例对象调用open方法\n",[36,87571,87572,87575,87577],{"class":38,"line":33162},[36,87573,87574],{"class":98},"      del.",[36,87576,87347],{"class":55},[36,87578,2435],{"class":98},[36,87580,87581],{"class":38,"line":33168},[36,87582,33894],{"class":98},[36,87584,87585],{"class":38,"line":33174},[36,87586,87587],{"class":42},"    \u002F\u002F 测试一下 点击 登录按钮\n",[36,87589,87590,87592,87594,87596,87599,87601,87603,87605,87607,87609,87611],{"class":38,"line":33180},[36,87591,52839],{"class":98},[36,87593,54831],{"class":55},[36,87595,621],{"class":98},[36,87597,87598],{"class":59},"'#login'",[36,87600,31259],{"class":98},[36,87602,58245],{"class":55},[36,87604,621],{"class":98},[36,87606,58250],{"class":59},[36,87608,87462],{"class":98},[36,87610,85154],{"class":163},[36,87612,16011],{"class":98},[36,87614,87615],{"class":38,"line":33186},[36,87616,87539],{"class":42},[36,87618,87619,87621,87624,87626,87628,87630,87632,87635,87637,87640],{"class":38,"line":33206},[36,87620,58660],{"class":163},[36,87622,87623],{"class":109}," log",[36,87625,14003],{"class":163},[36,87627,12017],{"class":163},[36,87629,87203],{"class":55},[36,87631,621],{"class":98},[36,87633,87634],{"class":59},"'友情提示'",[36,87636,12874],{"class":98},[36,87638,87639],{"class":59},"'您还没有登录呢'",[36,87641,627],{"class":98},[36,87643,87644],{"class":38,"line":33212},[36,87645,87569],{"class":42},[36,87647,87648,87651,87653],{"class":38,"line":33228},[36,87649,87650],{"class":98},"      log.",[36,87652,87347],{"class":55},[36,87654,2435],{"class":98},[36,87656,87657],{"class":38,"line":33234},[36,87658,33894],{"class":98},[36,87660,87661],{"class":38,"line":33248},[36,87662,87663],{"class":42},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[36,87665,87666,87668,87670,87672,87674,87676,87678,87680],{"class":38,"line":33254},[36,87667,87338],{"class":109},[36,87669,1172],{"class":98},[36,87671,86011],{"class":109},[36,87673,1172],{"class":98},[36,87675,87490],{"class":55},[36,87677,14003],{"class":163},[36,87679,59350],{"class":163},[36,87681,54884],{"class":98},[36,87683,87684,87686,87688,87690],{"class":38,"line":33269},[36,87685,70483],{"class":109},[36,87687,87444],{"class":98},[36,87689,57438],{"class":55},[36,87691,2435],{"class":98},[36,87693,87694],{"class":38,"line":33275},[36,87695,2646],{"class":98},[36,87697,87698,87700,87702],{"class":38,"line":33284},[36,87699,52849],{"class":98},[36,87701,52245],{"class":51733},[36,87703,188],{"class":98},[36,87705,87706,87708,87710],{"class":38,"line":33290},[36,87707,52217],{"class":98},[36,87709,52232],{"class":51733},[36,87711,188],{"class":98},[36,87713,87714],{"class":38,"line":33299},[36,87715,247],{"emptyLinePlaceholder":246},[36,87717,87718,87720,87722],{"class":38,"line":33305},[36,87719,52217],{"class":98},[36,87721,51068],{"class":51733},[36,87723,188],{"class":98},[14,87725,87726],{},[1941,87727],{"alt":31,"src":87728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[559,87730,87732],{"id":87731},"_414-深浅拷贝","4.14 深浅拷贝",[588,87734,87736],{"id":87735},"_4141-浅拷贝","4.14.1 浅拷贝",[14,87738,87739],{},[1941,87740],{"alt":31,"src":87741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,87743,87744],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,87746,87747],{},[1941,87748],{"alt":31,"src":87749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,87751,87752],{},[1941,87753],{"alt":31,"src":87754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,87756,87757],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,87759,87760],{},[1941,87761],{"alt":31,"src":87762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,87764,11771],{},[14,87766,87767],{},[1941,87768],{"alt":31,"src":87769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[588,87771,87773],{"id":87772},"_4142-深拷贝","4.14.2 深拷贝",[14,87775,87776],{},"深拷贝：拷贝的是对象，不是地址",[14,87778,87779],{},"常用的三种方法：",[571,87781,87782,87785,87788],{},[574,87783,87784],{},"通过递归实现深拷贝",[574,87786,87787],{},"lodash\u002FcloneDeep",[574,87789,87790],{},"通过JSON.stringify()实现",[22437,87792,87794],{"id":87793},"_41421-递归函数","4.14.2.1 递归函数",[14,87796,87797],{},[1941,87798],{"alt":31,"src":87799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[571,87801,87802],{},[574,87803,87804],{},"死递归占溢出：",[26,87806,87808],{"className":53499,"code":87807,"language":53501,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[33,87809,87810,87818,87826,87830,87835,87839,87844,87852],{"__ignoreMap":31},[36,87811,87812,87814,87816],{"class":38,"line":39},[36,87813,179],{"class":98},[36,87815,52232],{"class":51733},[36,87817,188],{"class":98},[36,87819,87820,87822,87824],{"class":38,"line":46},[36,87821,52576],{"class":98},[36,87823,52245],{"class":51733},[36,87825,188],{"class":98},[36,87827,87828],{"class":38,"line":52},[36,87829,77575],{"class":98},[36,87831,87832],{"class":38,"line":66},[36,87833,87834],{"class":98},"      fn()\n",[36,87836,87837],{"class":38,"line":72},[36,87838,2646],{"class":98},[36,87840,87841],{"class":38,"line":82},[36,87842,87843],{"class":98},"    fn()\n",[36,87845,87846,87848,87850],{"class":38,"line":88},[36,87847,52849],{"class":98},[36,87849,52245],{"class":51733},[36,87851,188],{"class":98},[36,87853,87854,87856,87858],{"class":38,"line":113},[36,87855,52217],{"class":98},[36,87857,52232],{"class":51733},[36,87859,188],{"class":98},[571,87861,87862],{"start":46},[574,87863,87864],{},"递归函数要加判断条件：",[14,87866,87867],{},[1941,87868],{"alt":31,"src":87869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[571,87871,87872],{"start":52},[574,87873,87874],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[26,87876,87878],{"className":51066,"code":87877,"language":51068,"meta":31,"style":31},"\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",[33,87879,87880,87890,87904,87908,87916,87930,87950,87962,87970,87974,87982,87994,88002,88010,88035,88047,88051,88058,88066,88074,88078],{"__ignoreMap":31},[36,87881,87882,87884,87886,87888],{"class":38,"line":39},[36,87883,51730],{"class":98},[36,87885,51734],{"class":51733},[36,87887,51737],{"class":55},[36,87889,188],{"class":98},[36,87891,87892,87894,87896,87898,87900,87902],{"class":38,"line":46},[36,87893,179],{"class":98},[36,87895,51068],{"class":51733},[36,87897,51748],{"class":55},[36,87899,176],{"class":98},[36,87901,51753],{"class":59},[36,87903,188],{"class":98},[36,87905,87906],{"class":38,"line":52},[36,87907,247],{"emptyLinePlaceholder":246},[36,87909,87910,87912,87914],{"class":38,"line":66},[36,87911,179],{"class":98},[36,87913,51766],{"class":51733},[36,87915,188],{"class":98},[36,87917,87918,87920,87922,87924,87926,87928],{"class":38,"line":72},[36,87919,52576],{"class":98},[36,87921,51776],{"class":51733},[36,87923,51779],{"class":55},[36,87925,176],{"class":98},[36,87927,51784],{"class":59},[36,87929,188],{"class":98},[36,87931,87932,87934,87936,87938,87940,87942,87944,87946,87948],{"class":38,"line":82},[36,87933,52576],{"class":98},[36,87935,51776],{"class":51733},[36,87937,15359],{"class":55},[36,87939,176],{"class":98},[36,87941,51823],{"class":59},[36,87943,51803],{"class":55},[36,87945,176],{"class":98},[36,87947,51830],{"class":59},[36,87949,188],{"class":98},[36,87951,87952,87954,87956,87958,87960],{"class":38,"line":88},[36,87953,52576],{"class":98},[36,87955,51839],{"class":51733},[36,87957,51842],{"class":98},[36,87959,51839],{"class":51733},[36,87961,188],{"class":98},[36,87963,87964,87966,87968],{"class":38,"line":113},[36,87965,52217],{"class":98},[36,87967,51766],{"class":51733},[36,87969,188],{"class":98},[36,87971,87972],{"class":38,"line":119},[36,87973,247],{"emptyLinePlaceholder":246},[36,87975,87976,87978,87980],{"class":38,"line":131},[36,87977,179],{"class":98},[36,87979,52232],{"class":51733},[36,87981,188],{"class":98},[36,87983,87984,87986,87988,87990,87992],{"class":38,"line":137},[36,87985,52576],{"class":98},[36,87987,52043],{"class":51733},[36,87989,55746],{"class":98},[36,87991,52043],{"class":51733},[36,87993,188],{"class":98},[36,87995,87996,87998,88000],{"class":38,"line":147},[36,87997,52576],{"class":98},[36,87999,52245],{"class":51733},[36,88001,188],{"class":98},[36,88003,88004,88006,88008],{"class":38,"line":153},[36,88005,70516],{"class":163},[36,88007,74205],{"class":55},[36,88009,11292],{"class":98},[36,88011,88012,88014,88016,88018,88020,88022,88024,88026,88028,88030,88033],{"class":38,"line":191},[36,88013,56203],{"class":98},[36,88015,54831],{"class":55},[36,88017,621],{"class":98},[36,88019,82363],{"class":59},[36,88021,74681],{"class":98},[36,88023,176],{"class":163},[36,88025,12017],{"class":163},[36,88027,74221],{"class":55},[36,88029,17700],{"class":98},[36,88031,88032],{"class":55},"toLocaleString",[36,88034,2435],{"class":98},[36,88036,88037,88040,88043,88045],{"class":38,"line":197},[36,88038,88039],{"class":55},"      setTimeout",[36,88041,88042],{"class":98},"(getTime, ",[36,88044,6861],{"class":109},[36,88046,627],{"class":98},[36,88048,88049],{"class":38,"line":217},[36,88050,2646],{"class":98},[36,88052,88053,88056],{"class":38,"line":223},[36,88054,88055],{"class":55},"    getTime",[36,88057,2435],{"class":98},[36,88059,88060,88062,88064],{"class":38,"line":243},[36,88061,52849],{"class":98},[36,88063,52245],{"class":51733},[36,88065,188],{"class":98},[36,88067,88068,88070,88072],{"class":38,"line":250},[36,88069,52217],{"class":98},[36,88071,52232],{"class":51733},[36,88073,188],{"class":98},[36,88075,88076],{"class":38,"line":256},[36,88077,247],{"emptyLinePlaceholder":246},[36,88079,88080,88082,88084],{"class":38,"line":273},[36,88081,52217],{"class":98},[36,88083,51068],{"class":51733},[36,88085,188],{"class":98},[14,88087,88088],{},[1941,88089],{"alt":31,"src":88090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[571,88092,88093],{"start":66},[574,88094,87784],{},[14,88096,88097],{},[1941,88098],{"alt":31,"src":88099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,88101,88102],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,88104,39622],{},[14,88106,88107],{},"这个是简易版的递归函数深拷贝",[14,88109,88110],{},"一定要注意先数组再对象，因为万物皆可对象",[26,88112,88114],{"className":51066,"code":88113,"language":51068,"meta":31,"style":31},"\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",[33,88115,88116,88126,88140,88144,88152,88166,88186,88198,88206,88210,88218,88226,88236,88245,88253,88269,88273,88281,88285,88289,88301,88306,88325,88341,88346,88351,88356,88371,88376,88381,88390,88398,88415,88423,88429,88437,88442,88447,88456,88460,88464,88468,88479,88488,88498,88512,88522,88530,88538,88546,88550],{"__ignoreMap":31},[36,88117,88118,88120,88122,88124],{"class":38,"line":39},[36,88119,51730],{"class":98},[36,88121,51734],{"class":51733},[36,88123,51737],{"class":55},[36,88125,188],{"class":98},[36,88127,88128,88130,88132,88134,88136,88138],{"class":38,"line":46},[36,88129,179],{"class":98},[36,88131,51068],{"class":51733},[36,88133,51748],{"class":55},[36,88135,176],{"class":98},[36,88137,51753],{"class":59},[36,88139,188],{"class":98},[36,88141,88142],{"class":38,"line":52},[36,88143,247],{"emptyLinePlaceholder":246},[36,88145,88146,88148,88150],{"class":38,"line":66},[36,88147,179],{"class":98},[36,88149,51766],{"class":51733},[36,88151,188],{"class":98},[36,88153,88154,88156,88158,88160,88162,88164],{"class":38,"line":72},[36,88155,52576],{"class":98},[36,88157,51776],{"class":51733},[36,88159,51779],{"class":55},[36,88161,176],{"class":98},[36,88163,51784],{"class":59},[36,88165,188],{"class":98},[36,88167,88168,88170,88172,88174,88176,88178,88180,88182,88184],{"class":38,"line":82},[36,88169,52576],{"class":98},[36,88171,51776],{"class":51733},[36,88173,15359],{"class":55},[36,88175,176],{"class":98},[36,88177,51823],{"class":59},[36,88179,51803],{"class":55},[36,88181,176],{"class":98},[36,88183,51830],{"class":59},[36,88185,188],{"class":98},[36,88187,88188,88190,88192,88194,88196],{"class":38,"line":88},[36,88189,52576],{"class":98},[36,88191,51839],{"class":51733},[36,88193,51842],{"class":98},[36,88195,51839],{"class":51733},[36,88197,188],{"class":98},[36,88199,88200,88202,88204],{"class":38,"line":113},[36,88201,52217],{"class":98},[36,88203,51766],{"class":51733},[36,88205,188],{"class":98},[36,88207,88208],{"class":38,"line":119},[36,88209,247],{"emptyLinePlaceholder":246},[36,88211,88212,88214,88216],{"class":38,"line":131},[36,88213,179],{"class":98},[36,88215,52232],{"class":51733},[36,88217,188],{"class":98},[36,88219,88220,88222,88224],{"class":38,"line":137},[36,88221,52576],{"class":98},[36,88223,52245],{"class":51733},[36,88225,188],{"class":98},[36,88227,88228,88230,88232,88234],{"class":38,"line":147},[36,88229,11660],{"class":163},[36,88231,70403],{"class":109},[36,88233,14003],{"class":163},[36,88235,16011],{"class":98},[36,88237,88238,88240,88243],{"class":38,"line":153},[36,88239,72048],{"class":98},[36,88241,88242],{"class":59},"'pink'",[36,88244,31899],{"class":98},[36,88246,88247,88249,88251],{"class":38,"line":191},[36,88248,72058],{"class":98},[36,88250,1264],{"class":109},[36,88252,31899],{"class":98},[36,88254,88255,88258,88261,88263,88266],{"class":38,"line":197},[36,88256,88257],{"class":98},"      hobby: [",[36,88259,88260],{"class":59},"'乒乓球'",[36,88262,12874],{"class":98},[36,88264,88265],{"class":59},"'足球'",[36,88267,88268],{"class":98},"],\n",[36,88270,88271],{"class":38,"line":217},[36,88272,78304],{"class":98},[36,88274,88275,88278],{"class":38,"line":223},[36,88276,88277],{"class":98},"        baby: ",[36,88279,88280],{"class":59},"'小pink'\n",[36,88282,88283],{"class":38,"line":243},[36,88284,52830],{"class":98},[36,88286,88287],{"class":38,"line":250},[36,88288,2646],{"class":98},[36,88290,88291,88293,88296,88298],{"class":38,"line":256},[36,88292,11660],{"class":163},[36,88294,88295],{"class":109}," o",[36,88297,14003],{"class":163},[36,88299,88300],{"class":98}," {}\n",[36,88302,88303],{"class":38,"line":273},[36,88304,88305],{"class":42},"    \u002F\u002F 拷贝函数\n",[36,88307,88308,88310,88313,88315,88318,88320,88323],{"class":38,"line":278},[36,88309,70516],{"class":163},[36,88311,88312],{"class":55}," deepCopy",[36,88314,621],{"class":98},[36,88316,88317],{"class":5667},"newObj",[36,88319,12874],{"class":98},[36,88321,88322],{"class":5667},"oldObj",[36,88324,12881],{"class":98},[36,88326,88327,88329,88331,88333,88336,88338],{"class":38,"line":284},[36,88328,52716],{"class":163},[36,88330,2130],{"class":98},[36,88332,52279],{"class":163},[36,88334,88335],{"class":98}," k ",[36,88337,26480],{"class":163},[36,88339,88340],{"class":98}," oldObj) {\n",[36,88342,88343],{"class":38,"line":315},[36,88344,88345],{"class":42},"        \u002F\u002F 处理数组的问题\n",[36,88347,88348],{"class":38,"line":320},[36,88349,88350],{"class":42},"        \u002F\u002F 判断是否属于数组\n",[36,88352,88353],{"class":38,"line":326},[36,88354,88355],{"class":42},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[36,88357,88358,88360,88363,88366,88369],{"class":38,"line":343},[36,88359,2955],{"class":163},[36,88361,88362],{"class":98}," (oldObj[k] ",[36,88364,88365],{"class":163},"instanceof",[36,88367,88368],{"class":55}," Array",[36,88370,12881],{"class":98},[36,88372,88373],{"class":38,"line":348},[36,88374,88375],{"class":42},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[36,88377,88378],{"class":38,"line":354},[36,88379,88380],{"class":42},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[36,88382,88383,88386,88388],{"class":38,"line":370},[36,88384,88385],{"class":98},"          newObj[k] ",[36,88387,176],{"class":163},[36,88389,52270],{"class":98},[36,88391,88392,88395],{"class":38,"line":375},[36,88393,88394],{"class":55},"          deepCopy",[36,88396,88397],{"class":98},"(newObj[k], oldObj[k])\n",[36,88399,88400,88402,88404,88406,88408,88410,88413],{"class":38,"line":381},[36,88401,80512],{"class":98},[36,88403,2169],{"class":163},[36,88405,2172],{"class":163},[36,88407,88362],{"class":98},[36,88409,88365],{"class":163},[36,88411,88412],{"class":55}," Object",[36,88414,12881],{"class":98},[36,88416,88417,88419,88421],{"class":38,"line":399},[36,88418,88385],{"class":98},[36,88420,176],{"class":163},[36,88422,88300],{"class":98},[36,88424,88425,88427],{"class":38,"line":404},[36,88426,88394],{"class":55},[36,88428,88397],{"class":98},[36,88430,88431,88433,88435],{"class":38,"line":410},[36,88432,80512],{"class":98},[36,88434,2169],{"class":163},[36,88436,16011],{"class":98},[36,88438,88439],{"class":38,"line":423},[36,88440,88441],{"class":42},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[36,88443,88444],{"class":38,"line":436},[36,88445,88446],{"class":42},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[36,88448,88449,88451,88453],{"class":38,"line":441},[36,88450,88385],{"class":98},[36,88452,176],{"class":163},[36,88454,88455],{"class":98}," oldObj[k]\n",[36,88457,88458],{"class":38,"line":447},[36,88459,2987],{"class":98},[36,88461,88462],{"class":38,"line":465},[36,88463,52830],{"class":98},[36,88465,88466],{"class":38,"line":470},[36,88467,2646],{"class":98},[36,88469,88470,88473,88476],{"class":38,"line":476},[36,88471,88472],{"class":55},"    deepCopy",[36,88474,88475],{"class":98},"(o, obj) ",[36,88477,88478],{"class":42},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[36,88480,88481,88483,88485],{"class":38,"line":496},[36,88482,74185],{"class":98},[36,88484,58679],{"class":55},[36,88486,88487],{"class":98},"(o)\n",[36,88489,88490,88493,88495],{"class":38,"line":501},[36,88491,88492],{"class":98},"    o.age ",[36,88494,176],{"class":163},[36,88496,88497],{"class":109}," 20\n",[36,88499,88500,88503,88505,88507,88509],{"class":38,"line":507},[36,88501,88502],{"class":98},"    o.hobby[",[36,88504,807],{"class":109},[36,88506,4894],{"class":98},[36,88508,176],{"class":163},[36,88510,88511],{"class":59}," '篮球'\n",[36,88513,88514,88517,88519],{"class":38,"line":517},[36,88515,88516],{"class":98},"    o.family ",[36,88518,176],{"class":163},[36,88520,88521],{"class":59}," '老pink'\n",[36,88523,88524,88526,88528],{"class":38,"line":522},[36,88525,74185],{"class":98},[36,88527,58679],{"class":55},[36,88529,70468],{"class":98},[36,88531,88532,88534,88536],{"class":38,"line":528},[36,88533,52849],{"class":98},[36,88535,52245],{"class":51733},[36,88537,188],{"class":98},[36,88539,88540,88542,88544],{"class":38,"line":10203},[36,88541,52217],{"class":98},[36,88543,52232],{"class":51733},[36,88545,188],{"class":98},[36,88547,88548],{"class":38,"line":10227},[36,88549,247],{"emptyLinePlaceholder":246},[36,88551,88552,88554,88556],{"class":38,"line":10232},[36,88553,52217],{"class":98},[36,88555,51068],{"class":51733},[36,88557,188],{"class":98},[14,88559,88560],{},[1941,88561],{"alt":31,"src":88562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22437,88564,88566,88567],{"id":88565},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[765,88568,88569],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,88571,88572],{},[20,88573,88574],{"href":88574,"rel":88575},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24],[14,88577,88578],{},"lodash里边的方法都要加上一个下划线_",[14,88580,88581],{},"_.cloneDeep()",[26,88583,88585],{"className":51066,"code":88584,"language":51068,"meta":31,"style":31},"\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",[33,88586,88587,88597,88611,88615,88623,88637,88657,88669,88677,88681,88689,88694,88713,88721,88731,88739,88747,88759,88763,88769,88773,88777,88793,88801,88810,88818,88826,88834,88838],{"__ignoreMap":31},[36,88588,88589,88591,88593,88595],{"class":38,"line":39},[36,88590,51730],{"class":98},[36,88592,51734],{"class":51733},[36,88594,51737],{"class":55},[36,88596,188],{"class":98},[36,88598,88599,88601,88603,88605,88607,88609],{"class":38,"line":46},[36,88600,179],{"class":98},[36,88602,51068],{"class":51733},[36,88604,51748],{"class":55},[36,88606,176],{"class":98},[36,88608,51753],{"class":59},[36,88610,188],{"class":98},[36,88612,88613],{"class":38,"line":52},[36,88614,247],{"emptyLinePlaceholder":246},[36,88616,88617,88619,88621],{"class":38,"line":66},[36,88618,179],{"class":98},[36,88620,51766],{"class":51733},[36,88622,188],{"class":98},[36,88624,88625,88627,88629,88631,88633,88635],{"class":38,"line":72},[36,88626,52576],{"class":98},[36,88628,51776],{"class":51733},[36,88630,51779],{"class":55},[36,88632,176],{"class":98},[36,88634,51784],{"class":59},[36,88636,188],{"class":98},[36,88638,88639,88641,88643,88645,88647,88649,88651,88653,88655],{"class":38,"line":82},[36,88640,52576],{"class":98},[36,88642,51776],{"class":51733},[36,88644,15359],{"class":55},[36,88646,176],{"class":98},[36,88648,51823],{"class":59},[36,88650,51803],{"class":55},[36,88652,176],{"class":98},[36,88654,51830],{"class":59},[36,88656,188],{"class":98},[36,88658,88659,88661,88663,88665,88667],{"class":38,"line":88},[36,88660,52576],{"class":98},[36,88662,51839],{"class":51733},[36,88664,51842],{"class":98},[36,88666,51839],{"class":51733},[36,88668,188],{"class":98},[36,88670,88671,88673,88675],{"class":38,"line":113},[36,88672,52217],{"class":98},[36,88674,51766],{"class":51733},[36,88676,188],{"class":98},[36,88678,88679],{"class":38,"line":119},[36,88680,247],{"emptyLinePlaceholder":246},[36,88682,88683,88685,88687],{"class":38,"line":131},[36,88684,179],{"class":98},[36,88686,52232],{"class":51733},[36,88688,188],{"class":98},[36,88690,88691],{"class":38,"line":137},[36,88692,88693],{"class":42},"  \u003C!-- 先引用这个库 -->\n",[36,88695,88696,88698,88700,88702,88704,88707,88709,88711],{"class":38,"line":147},[36,88697,52576],{"class":98},[36,88699,52245],{"class":51733},[36,88701,55671],{"class":55},[36,88703,176],{"class":98},[36,88705,88706],{"class":59},"\"lodash.min.js\"",[36,88708,55746],{"class":98},[36,88710,52245],{"class":51733},[36,88712,188],{"class":98},[36,88714,88715,88717,88719],{"class":38,"line":153},[36,88716,52576],{"class":98},[36,88718,52245],{"class":51733},[36,88720,188],{"class":98},[36,88722,88723,88725,88727,88729],{"class":38,"line":191},[36,88724,11660],{"class":163},[36,88726,70403],{"class":109},[36,88728,14003],{"class":163},[36,88730,16011],{"class":98},[36,88732,88733,88735,88737],{"class":38,"line":197},[36,88734,72048],{"class":98},[36,88736,88242],{"class":59},[36,88738,31899],{"class":98},[36,88740,88741,88743,88745],{"class":38,"line":217},[36,88742,72058],{"class":98},[36,88744,1264],{"class":109},[36,88746,31899],{"class":98},[36,88748,88749,88751,88753,88755,88757],{"class":38,"line":223},[36,88750,88257],{"class":98},[36,88752,88260],{"class":59},[36,88754,12874],{"class":98},[36,88756,88265],{"class":59},[36,88758,88268],{"class":98},[36,88760,88761],{"class":38,"line":243},[36,88762,78304],{"class":98},[36,88764,88765,88767],{"class":38,"line":250},[36,88766,88277],{"class":98},[36,88768,88280],{"class":59},[36,88770,88771],{"class":38,"line":256},[36,88772,52830],{"class":98},[36,88774,88775],{"class":38,"line":273},[36,88776,2646],{"class":98},[36,88778,88779,88781,88783,88785,88788,88791],{"class":38,"line":278},[36,88780,11660],{"class":163},[36,88782,88295],{"class":109},[36,88784,14003],{"class":163},[36,88786,88787],{"class":98}," _.",[36,88789,88790],{"class":55},"cloneDeep",[36,88792,70468],{"class":98},[36,88794,88795,88797,88799],{"class":38,"line":284},[36,88796,74185],{"class":98},[36,88798,58679],{"class":55},[36,88800,88487],{"class":98},[36,88802,88803,88806,88808],{"class":38,"line":315},[36,88804,88805],{"class":98},"    o.family.baby ",[36,88807,176],{"class":163},[36,88809,88521],{"class":59},[36,88811,88812,88814,88816],{"class":38,"line":320},[36,88813,74185],{"class":98},[36,88815,58679],{"class":55},[36,88817,70468],{"class":98},[36,88819,88820,88822,88824],{"class":38,"line":326},[36,88821,52849],{"class":98},[36,88823,52245],{"class":51733},[36,88825,188],{"class":98},[36,88827,88828,88830,88832],{"class":38,"line":343},[36,88829,52217],{"class":98},[36,88831,52232],{"class":51733},[36,88833,188],{"class":98},[36,88835,88836],{"class":38,"line":348},[36,88837,247],{"emptyLinePlaceholder":246},[36,88839,88840,88842,88844],{"class":38,"line":354},[36,88841,52217],{"class":98},[36,88843,51068],{"class":51733},[36,88845,188],{"class":98},[14,88847,88848],{},[1941,88849],{"alt":31,"src":88850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22437,88852,88854],{"id":88853},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[26,88856,88858],{"className":51066,"code":88857,"language":51068,"meta":31,"style":31},"\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",[33,88859,88860,88870,88884,88888,88896,88910,88930,88942,88950,88954,88962,88970,88980,88988,88996,89008,89012,89018,89022,89026,89031,89036,89041,89067,89075,89084,89092,89100,89108,89112],{"__ignoreMap":31},[36,88861,88862,88864,88866,88868],{"class":38,"line":39},[36,88863,51730],{"class":98},[36,88865,51734],{"class":51733},[36,88867,51737],{"class":55},[36,88869,188],{"class":98},[36,88871,88872,88874,88876,88878,88880,88882],{"class":38,"line":46},[36,88873,179],{"class":98},[36,88875,51068],{"class":51733},[36,88877,51748],{"class":55},[36,88879,176],{"class":98},[36,88881,51753],{"class":59},[36,88883,188],{"class":98},[36,88885,88886],{"class":38,"line":52},[36,88887,247],{"emptyLinePlaceholder":246},[36,88889,88890,88892,88894],{"class":38,"line":66},[36,88891,179],{"class":98},[36,88893,51766],{"class":51733},[36,88895,188],{"class":98},[36,88897,88898,88900,88902,88904,88906,88908],{"class":38,"line":72},[36,88899,52576],{"class":98},[36,88901,51776],{"class":51733},[36,88903,51779],{"class":55},[36,88905,176],{"class":98},[36,88907,51784],{"class":59},[36,88909,188],{"class":98},[36,88911,88912,88914,88916,88918,88920,88922,88924,88926,88928],{"class":38,"line":82},[36,88913,52576],{"class":98},[36,88915,51776],{"class":51733},[36,88917,15359],{"class":55},[36,88919,176],{"class":98},[36,88921,51823],{"class":59},[36,88923,51803],{"class":55},[36,88925,176],{"class":98},[36,88927,51830],{"class":59},[36,88929,188],{"class":98},[36,88931,88932,88934,88936,88938,88940],{"class":38,"line":88},[36,88933,52576],{"class":98},[36,88935,51839],{"class":51733},[36,88937,51842],{"class":98},[36,88939,51839],{"class":51733},[36,88941,188],{"class":98},[36,88943,88944,88946,88948],{"class":38,"line":113},[36,88945,52217],{"class":98},[36,88947,51766],{"class":51733},[36,88949,188],{"class":98},[36,88951,88952],{"class":38,"line":119},[36,88953,247],{"emptyLinePlaceholder":246},[36,88955,88956,88958,88960],{"class":38,"line":131},[36,88957,179],{"class":98},[36,88959,52232],{"class":51733},[36,88961,188],{"class":98},[36,88963,88964,88966,88968],{"class":38,"line":137},[36,88965,52576],{"class":98},[36,88967,52245],{"class":51733},[36,88969,188],{"class":98},[36,88971,88972,88974,88976,88978],{"class":38,"line":147},[36,88973,11660],{"class":163},[36,88975,70403],{"class":109},[36,88977,14003],{"class":163},[36,88979,16011],{"class":98},[36,88981,88982,88984,88986],{"class":38,"line":153},[36,88983,72048],{"class":98},[36,88985,88242],{"class":59},[36,88987,31899],{"class":98},[36,88989,88990,88992,88994],{"class":38,"line":191},[36,88991,72058],{"class":98},[36,88993,1264],{"class":109},[36,88995,31899],{"class":98},[36,88997,88998,89000,89002,89004,89006],{"class":38,"line":197},[36,88999,88257],{"class":98},[36,89001,88260],{"class":59},[36,89003,12874],{"class":98},[36,89005,88265],{"class":59},[36,89007,88268],{"class":98},[36,89009,89010],{"class":38,"line":217},[36,89011,78304],{"class":98},[36,89013,89014,89016],{"class":38,"line":223},[36,89015,88277],{"class":98},[36,89017,88280],{"class":59},[36,89019,89020],{"class":38,"line":243},[36,89021,52830],{"class":98},[36,89023,89024],{"class":38,"line":250},[36,89025,2646],{"class":98},[36,89027,89028],{"class":38,"line":256},[36,89029,89030],{"class":42},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[36,89032,89033],{"class":38,"line":273},[36,89034,89035],{"class":42},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[36,89037,89038],{"class":38,"line":278},[36,89039,89040],{"class":42},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[36,89042,89043,89045,89047,89049,89052,89054,89057,89059,89061,89063,89065],{"class":38,"line":284},[36,89044,11660],{"class":163},[36,89046,88295],{"class":109},[36,89048,14003],{"class":163},[36,89050,89051],{"class":109}," JSON",[36,89053,1172],{"class":98},[36,89055,89056],{"class":55},"parse",[36,89058,621],{"class":98},[36,89060,72096],{"class":109},[36,89062,1172],{"class":98},[36,89064,72101],{"class":55},[36,89066,72104],{"class":98},[36,89068,89069,89071,89073],{"class":38,"line":315},[36,89070,74185],{"class":98},[36,89072,58679],{"class":55},[36,89074,88487],{"class":98},[36,89076,89077,89079,89081],{"class":38,"line":320},[36,89078,88805],{"class":98},[36,89080,176],{"class":163},[36,89082,89083],{"class":59}," '123'\n",[36,89085,89086,89088,89090],{"class":38,"line":326},[36,89087,74185],{"class":98},[36,89089,58679],{"class":55},[36,89091,70468],{"class":98},[36,89093,89094,89096,89098],{"class":38,"line":343},[36,89095,52849],{"class":98},[36,89097,52245],{"class":51733},[36,89099,188],{"class":98},[36,89101,89102,89104,89106],{"class":38,"line":348},[36,89103,52217],{"class":98},[36,89105,52232],{"class":51733},[36,89107,188],{"class":98},[36,89109,89110],{"class":38,"line":354},[36,89111,247],{"emptyLinePlaceholder":246},[36,89113,89114,89116,89118],{"class":38,"line":370},[36,89115,52217],{"class":98},[36,89117,51068],{"class":51733},[36,89119,188],{"class":98},[14,89121,89122],{},[1941,89123],{"alt":31,"src":89124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[559,89126,89128],{"id":89127},"_415-异常处理","4.15 异常处理",[571,89130,89131],{},[574,89132,89133],{},"throw抛异常",[14,89135,89136],{},[1941,89137],{"alt":31,"src":89138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[571,89140,89141],{"start":46},[574,89142,89143],{},"try\u002Fcatch 捕获错误信息",[14,89145,89146],{},[1941,89147],{"alt":31,"src":89148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[26,89150,89152],{"className":51066,"code":89151,"language":51068,"meta":31,"style":31},"\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",[33,89153,89154,89164,89178,89182,89190,89204,89224,89236,89244,89248,89256,89268,89276,89285,89292,89297,89316,89325,89336,89341,89351,89356,89361,89366,89383,89387,89392,89399,89411,89415,89427,89431,89435,89440,89445,89452,89460,89468,89472],{"__ignoreMap":31},[36,89155,89156,89158,89160,89162],{"class":38,"line":39},[36,89157,51730],{"class":98},[36,89159,51734],{"class":51733},[36,89161,51737],{"class":55},[36,89163,188],{"class":98},[36,89165,89166,89168,89170,89172,89174,89176],{"class":38,"line":46},[36,89167,179],{"class":98},[36,89169,51068],{"class":51733},[36,89171,51748],{"class":55},[36,89173,176],{"class":98},[36,89175,51753],{"class":59},[36,89177,188],{"class":98},[36,89179,89180],{"class":38,"line":52},[36,89181,247],{"emptyLinePlaceholder":246},[36,89183,89184,89186,89188],{"class":38,"line":66},[36,89185,179],{"class":98},[36,89187,51766],{"class":51733},[36,89189,188],{"class":98},[36,89191,89192,89194,89196,89198,89200,89202],{"class":38,"line":72},[36,89193,52576],{"class":98},[36,89195,51776],{"class":51733},[36,89197,51779],{"class":55},[36,89199,176],{"class":98},[36,89201,51784],{"class":59},[36,89203,188],{"class":98},[36,89205,89206,89208,89210,89212,89214,89216,89218,89220,89222],{"class":38,"line":82},[36,89207,52576],{"class":98},[36,89209,51776],{"class":51733},[36,89211,15359],{"class":55},[36,89213,176],{"class":98},[36,89215,51823],{"class":59},[36,89217,51803],{"class":55},[36,89219,176],{"class":98},[36,89221,51830],{"class":59},[36,89223,188],{"class":98},[36,89225,89226,89228,89230,89232,89234],{"class":38,"line":88},[36,89227,52576],{"class":98},[36,89229,51839],{"class":51733},[36,89231,51842],{"class":98},[36,89233,51839],{"class":51733},[36,89235,188],{"class":98},[36,89237,89238,89240,89242],{"class":38,"line":113},[36,89239,52217],{"class":98},[36,89241,51766],{"class":51733},[36,89243,188],{"class":98},[36,89245,89246],{"class":38,"line":119},[36,89247,247],{"emptyLinePlaceholder":246},[36,89249,89250,89252,89254],{"class":38,"line":131},[36,89251,179],{"class":98},[36,89253,52232],{"class":51733},[36,89255,188],{"class":98},[36,89257,89258,89260,89262,89264,89266],{"class":38,"line":137},[36,89259,52576],{"class":98},[36,89261,14],{"class":51733},[36,89263,53926],{"class":98},[36,89265,14],{"class":51733},[36,89267,188],{"class":98},[36,89269,89270,89272,89274],{"class":38,"line":147},[36,89271,52576],{"class":98},[36,89273,52245],{"class":51733},[36,89275,188],{"class":98},[36,89277,89278,89280,89283],{"class":38,"line":153},[36,89279,70516],{"class":163},[36,89281,89282],{"class":55}," fn",[36,89284,11292],{"class":98},[36,89286,89287,89290],{"class":38,"line":191},[36,89288,89289],{"class":163},"      try",[36,89291,16011],{"class":98},[36,89293,89294],{"class":38,"line":197},[36,89295,89296],{"class":42},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[36,89298,89299,89301,89303,89305,89307,89309,89311,89314],{"class":38,"line":217},[36,89300,61702],{"class":163},[36,89302,7276],{"class":109},[36,89304,14003],{"class":163},[36,89306,54828],{"class":98},[36,89308,54831],{"class":55},[36,89310,621],{"class":98},[36,89312,89313],{"class":59},"'.p'",[36,89315,627],{"class":98},[36,89317,89318,89321,89323],{"class":38,"line":223},[36,89319,89320],{"class":98},"        p.style.color ",[36,89322,176],{"class":163},[36,89324,67483],{"class":59},[36,89326,89327,89330,89333],{"class":38,"line":243},[36,89328,89329],{"class":98},"      } ",[36,89331,89332],{"class":163},"catch",[36,89334,89335],{"class":98}," (err) {\n",[36,89337,89338],{"class":38,"line":250},[36,89339,89340],{"class":42},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[36,89342,89343,89346,89348],{"class":38,"line":256},[36,89344,89345],{"class":98},"        console.",[36,89347,58679],{"class":55},[36,89349,89350],{"class":98},"(err.message)\n",[36,89352,89353],{"class":38,"line":273},[36,89354,89355],{"class":42},"        \u002F\u002F 想要中断程序，需要加return\n",[36,89357,89358],{"class":38,"line":278},[36,89359,89360],{"class":42},"        \u002F\u002F return\n",[36,89362,89363],{"class":38,"line":284},[36,89364,89365],{"class":42},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[36,89367,89368,89371,89373,89376,89378,89381],{"class":38,"line":315},[36,89369,89370],{"class":163},"        throw",[36,89372,12017],{"class":163},[36,89374,89375],{"class":55}," Error",[36,89377,621],{"class":98},[36,89379,89380],{"class":59},"'你看看，选择器错误了吧'",[36,89382,627],{"class":98},[36,89384,89385],{"class":38,"line":320},[36,89386,52830],{"class":98},[36,89388,89389],{"class":38,"line":326},[36,89390,89391],{"class":42},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[36,89393,89394,89397],{"class":38,"line":343},[36,89395,89396],{"class":163},"      finally",[36,89398,16011],{"class":98},[36,89400,89401,89404,89406,89409],{"class":38,"line":348},[36,89402,89403],{"class":55},"        alert",[36,89405,621],{"class":98},[36,89407,89408],{"class":59},"'弹出对话框'",[36,89410,627],{"class":98},[36,89412,89413],{"class":38,"line":354},[36,89414,52830],{"class":98},[36,89416,89417,89419,89421,89423,89425],{"class":38,"line":370},[36,89418,58676],{"class":98},[36,89420,58679],{"class":55},[36,89422,621],{"class":98},[36,89424,1086],{"class":109},[36,89426,627],{"class":98},[36,89428,89429],{"class":38,"line":375},[36,89430,247],{"emptyLinePlaceholder":246},[36,89432,89433],{"class":38,"line":381},[36,89434,2646],{"class":98},[36,89436,89437],{"class":38,"line":399},[36,89438,89439],{"class":42},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[36,89441,89442],{"class":38,"line":404},[36,89443,89444],{"class":42},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[36,89446,89447,89450],{"class":38,"line":410},[36,89448,89449],{"class":55},"    fn",[36,89451,2435],{"class":98},[36,89453,89454,89456,89458],{"class":38,"line":423},[36,89455,52849],{"class":98},[36,89457,52245],{"class":51733},[36,89459,188],{"class":98},[36,89461,89462,89464,89466],{"class":38,"line":436},[36,89463,52217],{"class":98},[36,89465,52232],{"class":51733},[36,89467,188],{"class":98},[36,89469,89470],{"class":38,"line":441},[36,89471,247],{"emptyLinePlaceholder":246},[36,89473,89474,89476,89478],{"class":38,"line":447},[36,89475,52217],{"class":98},[36,89477,51068],{"class":51733},[36,89479,188],{"class":98},[14,89481,89482],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[571,89484,89485],{"start":52},[574,89486,89487],{},"debugger",[14,89489,89490],{},[1941,89491],{"alt":31,"src":89492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,89494,89495],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[559,89497,89499],{"id":89498},"_416-处理this","4.16 处理this",[588,89501,89503],{"id":89502},"_4161-this的指向","4.16.1 this的指向",[571,89505,89506],{},[574,89507,89508],{},"普通函数的this",[14,89510,89511],{},[1941,89512],{"alt":31,"src":89513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[571,89515,89516],{"start":46},[574,89517,89518],{},"箭头函数的this",[14,89520,89521],{},[1941,89522],{"alt":31,"src":89523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,89525,89526],{},[1941,89527],{"alt":31,"src":89528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,89530,89531],{},[1941,89532],{"alt":31,"src":89533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[588,89535,89537],{"id":89536},"_4162-this的改变","4.16.2 this的改变",[14,89539,89540],{},"call() apply() bind()",[571,89542,89543],{},[574,89544,89545],{},"call()",[14,89547,89548],{},[1941,89549],{"alt":31,"src":89550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,89552,89553],{},"两个作用：①调用函数；②改变this指向",[26,89555,89557],{"className":53499,"code":89556,"language":53501,"meta":31,"style":31},"\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",[33,89558,89559,89567,89575,89579,89584,89588,89593,89598,89603,89607,89612,89620],{"__ignoreMap":31},[36,89560,89561,89563,89565],{"class":38,"line":39},[36,89562,179],{"class":98},[36,89564,52232],{"class":51733},[36,89566,188],{"class":98},[36,89568,89569,89571,89573],{"class":38,"line":46},[36,89570,52576],{"class":98},[36,89572,52245],{"class":51733},[36,89574,188],{"class":98},[36,89576,89577],{"class":38,"line":52},[36,89578,71955],{"class":98},[36,89580,89581],{"class":38,"line":66},[36,89582,89583],{"class":98},"      uname: 'pink'\n",[36,89585,89586],{"class":38,"line":72},[36,89587,2646],{"class":98},[36,89589,89590],{"class":38,"line":82},[36,89591,89592],{"class":98},"    function fn(x, y) {\n",[36,89594,89595],{"class":38,"line":88},[36,89596,89597],{"class":98},"      console.log(this)  \u002F\u002Fwindow\n",[36,89599,89600],{"class":38,"line":113},[36,89601,89602],{"class":98},"      console.log(x + y)\n",[36,89604,89605],{"class":38,"line":119},[36,89606,2646],{"class":98},[36,89608,89609],{"class":38,"line":131},[36,89610,89611],{"class":98},"    fn.call(obj, 1, 2)\n",[36,89613,89614,89616,89618],{"class":38,"line":137},[36,89615,52849],{"class":98},[36,89617,52245],{"class":51733},[36,89619,188],{"class":98},[36,89621,89622,89624,89626],{"class":38,"line":147},[36,89623,52217],{"class":98},[36,89625,52232],{"class":51733},[36,89627,188],{"class":98},[14,89629,89630],{},[1941,89631],{"alt":31,"src":89632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[571,89634,89635],{"start":46},[574,89636,89637],{},"apply()",[14,89639,89640],{},[1941,89641],{"alt":31,"src":89642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,89644,89553],{},[14,89646,89647],{},"call传递的是普通参数，而apply必须传递的是数组",[26,89649,89651],{"className":51066,"code":89650,"language":51068,"meta":31,"style":31},"\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",[33,89652,89653,89663,89677,89681,89689,89703,89723,89735,89743,89747,89755,89763,89773,89780,89784,89789,89805,89817,89831,89835,89840,89859,89864,89868,89873,89878,89886,89891,89913,89918,89934,89950,89962,89966,89971,89990,89998,90006,90010],{"__ignoreMap":31},[36,89654,89655,89657,89659,89661],{"class":38,"line":39},[36,89656,51730],{"class":98},[36,89658,51734],{"class":51733},[36,89660,51737],{"class":55},[36,89662,188],{"class":98},[36,89664,89665,89667,89669,89671,89673,89675],{"class":38,"line":46},[36,89666,179],{"class":98},[36,89668,51068],{"class":51733},[36,89670,51748],{"class":55},[36,89672,176],{"class":98},[36,89674,51753],{"class":59},[36,89676,188],{"class":98},[36,89678,89679],{"class":38,"line":52},[36,89680,247],{"emptyLinePlaceholder":246},[36,89682,89683,89685,89687],{"class":38,"line":66},[36,89684,179],{"class":98},[36,89686,51766],{"class":51733},[36,89688,188],{"class":98},[36,89690,89691,89693,89695,89697,89699,89701],{"class":38,"line":72},[36,89692,52576],{"class":98},[36,89694,51776],{"class":51733},[36,89696,51779],{"class":55},[36,89698,176],{"class":98},[36,89700,51784],{"class":59},[36,89702,188],{"class":98},[36,89704,89705,89707,89709,89711,89713,89715,89717,89719,89721],{"class":38,"line":82},[36,89706,52576],{"class":98},[36,89708,51776],{"class":51733},[36,89710,15359],{"class":55},[36,89712,176],{"class":98},[36,89714,51823],{"class":59},[36,89716,51803],{"class":55},[36,89718,176],{"class":98},[36,89720,51830],{"class":59},[36,89722,188],{"class":98},[36,89724,89725,89727,89729,89731,89733],{"class":38,"line":88},[36,89726,52576],{"class":98},[36,89728,51839],{"class":51733},[36,89730,51842],{"class":98},[36,89732,51839],{"class":51733},[36,89734,188],{"class":98},[36,89736,89737,89739,89741],{"class":38,"line":113},[36,89738,52217],{"class":98},[36,89740,51766],{"class":51733},[36,89742,188],{"class":98},[36,89744,89745],{"class":38,"line":119},[36,89746,247],{"emptyLinePlaceholder":246},[36,89748,89749,89751,89753],{"class":38,"line":131},[36,89750,179],{"class":98},[36,89752,52232],{"class":51733},[36,89754,188],{"class":98},[36,89756,89757,89759,89761],{"class":38,"line":137},[36,89758,52576],{"class":98},[36,89760,52245],{"class":51733},[36,89762,188],{"class":98},[36,89764,89765,89767,89769,89771],{"class":38,"line":147},[36,89766,11660],{"class":163},[36,89768,70403],{"class":109},[36,89770,14003],{"class":163},[36,89772,16011],{"class":98},[36,89774,89775,89777],{"class":38,"line":153},[36,89776,72058],{"class":98},[36,89778,89779],{"class":109},"18\n",[36,89781,89782],{"class":38,"line":191},[36,89783,2646],{"class":98},[36,89785,89786],{"class":38,"line":197},[36,89787,89788],{"class":42},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[36,89790,89791,89793,89795,89797,89799,89801,89803],{"class":38,"line":217},[36,89792,70516],{"class":163},[36,89794,89282],{"class":55},[36,89796,621],{"class":98},[36,89798,1433],{"class":5667},[36,89800,12874],{"class":98},[36,89802,1458],{"class":5667},[36,89804,12881],{"class":98},[36,89806,89807,89809,89811,89813,89815],{"class":38,"line":223},[36,89808,58676],{"class":98},[36,89810,58679],{"class":55},[36,89812,621],{"class":98},[36,89814,87425],{"class":109},[36,89816,627],{"class":98},[36,89818,89819,89821,89823,89826,89828],{"class":38,"line":243},[36,89820,58676],{"class":98},[36,89822,58679],{"class":55},[36,89824,89825],{"class":98},"(x ",[36,89827,1095],{"class":163},[36,89829,89830],{"class":98}," y)\n",[36,89832,89833],{"class":38,"line":250},[36,89834,2646],{"class":98},[36,89836,89837],{"class":38,"line":256},[36,89838,89839],{"class":42},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[36,89841,89842,89845,89848,89851,89853,89855,89857],{"class":38,"line":273},[36,89843,89844],{"class":98},"    fn.",[36,89846,89847],{"class":55},"apply",[36,89849,89850],{"class":98},"(obj, [",[36,89852,833],{"class":109},[36,89854,12874],{"class":98},[36,89856,694],{"class":109},[36,89858,5108],{"class":98},[36,89860,89861],{"class":38,"line":278},[36,89862,89863],{"class":42},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[36,89865,89866],{"class":38,"line":284},[36,89867,247],{"emptyLinePlaceholder":246},[36,89869,89870],{"class":38,"line":315},[36,89871,89872],{"class":42},"    \u002F\u002F 使用场景：求数组最大值\n",[36,89874,89875],{"class":38,"line":320},[36,89876,89877],{"class":42},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[36,89879,89880,89883],{"class":38,"line":326},[36,89881,89882],{"class":42},"    \u002F\u002F console.log(max)",[36,89884,89885],{"class":42},"   \u002F\u002F3\n",[36,89887,89888],{"class":38,"line":343},[36,89889,89890],{"class":42},"    \u002F\u002F 指向空或者Math都是可以的\n",[36,89892,89893,89895,89897,89899,89901,89903,89905,89907,89909,89911],{"class":38,"line":348},[36,89894,11660],{"class":163},[36,89896,58127],{"class":109},[36,89898,14003],{"class":163},[36,89900,52658],{"class":98},[36,89902,926],{"class":109},[36,89904,12874],{"class":98},[36,89906,1118],{"class":109},[36,89908,12874],{"class":98},[36,89910,1149],{"class":109},[36,89912,33679],{"class":98},[36,89914,89915],{"class":38,"line":354},[36,89916,89917],{"class":42},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[36,89919,89920,89922,89924,89926,89929,89931],{"class":38,"line":370},[36,89921,11660],{"class":163},[36,89923,6402],{"class":109},[36,89925,14003],{"class":163},[36,89927,89928],{"class":98}," Math.max.",[36,89930,89847],{"class":55},[36,89932,89933],{"class":98},"(Math, arr)\n",[36,89935,89936,89938,89941,89943,89946,89948],{"class":38,"line":375},[36,89937,11660],{"class":163},[36,89939,89940],{"class":109}," min",[36,89942,14003],{"class":163},[36,89944,89945],{"class":98}," Math.min.",[36,89947,89847],{"class":55},[36,89949,89933],{"class":98},[36,89951,89952,89954,89956,89959],{"class":38,"line":381},[36,89953,74185],{"class":98},[36,89955,58679],{"class":55},[36,89957,89958],{"class":98},"(max, min)     ",[36,89960,89961],{"class":42},"\u002F\u002F100,4\n",[36,89963,89964],{"class":38,"line":399},[36,89965,247],{"emptyLinePlaceholder":246},[36,89967,89968],{"class":38,"line":404},[36,89969,89970],{"class":42},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[36,89972,89973,89975,89977,89980,89982,89984,89987],{"class":38,"line":410},[36,89974,74185],{"class":98},[36,89976,58679],{"class":55},[36,89978,89979],{"class":98},"(Max.",[36,89981,6466],{"class":55},[36,89983,621],{"class":98},[36,89985,89986],{"class":163},"...",[36,89988,89989],{"class":98},"arr))\n",[36,89991,89992,89994,89996],{"class":38,"line":423},[36,89993,52849],{"class":98},[36,89995,52245],{"class":51733},[36,89997,188],{"class":98},[36,89999,90000,90002,90004],{"class":38,"line":436},[36,90001,52217],{"class":98},[36,90003,52232],{"class":51733},[36,90005,188],{"class":98},[36,90007,90008],{"class":38,"line":441},[36,90009,247],{"emptyLinePlaceholder":246},[36,90011,90012,90014,90016],{"class":38,"line":447},[36,90013,52217],{"class":98},[36,90015,51068],{"class":51733},[36,90017,188],{"class":98},[14,90019,90020],{},[1941,90021],{"alt":31,"src":90022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[571,90024,90025],{"start":52},[574,90026,90027],{},"bind()",[14,90029,90030],{},[1941,90031],{"alt":31,"src":90032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,90034,90035],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,90037,90038],{},"bind的语法跟call很相似",[26,90040,90042],{"className":53499,"code":90041,"language":53501,"meta":31,"style":31},"\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",[33,90043,90044,90052,90060,90064,90069,90073,90077,90082,90086,90091,90096,90101,90106,90111,90116,90121,90125,90133],{"__ignoreMap":31},[36,90045,90046,90048,90050],{"class":38,"line":39},[36,90047,179],{"class":98},[36,90049,52232],{"class":51733},[36,90051,188],{"class":98},[36,90053,90054,90056,90058],{"class":38,"line":46},[36,90055,52576],{"class":98},[36,90057,52245],{"class":51733},[36,90059,188],{"class":98},[36,90061,90062],{"class":38,"line":52},[36,90063,71955],{"class":98},[36,90065,90066],{"class":38,"line":66},[36,90067,90068],{"class":98},"      age: 18\n",[36,90070,90071],{"class":38,"line":72},[36,90072,2646],{"class":98},[36,90074,90075],{"class":38,"line":82},[36,90076,77575],{"class":98},[36,90078,90079],{"class":38,"line":88},[36,90080,90081],{"class":98},"      console.log(this)\n",[36,90083,90084],{"class":38,"line":113},[36,90085,2646],{"class":98},[36,90087,90088],{"class":38,"line":119},[36,90089,90090],{"class":98},"    \u002F\u002F 1.bind 不会调用函数\n",[36,90092,90093],{"class":38,"line":131},[36,90094,90095],{"class":98},"    \u002F\u002F 2.bind能改变this的指向\n",[36,90097,90098],{"class":38,"line":137},[36,90099,90100],{"class":98},"    fn.bind()\n",[36,90102,90103],{"class":38,"line":147},[36,90104,90105],{"class":98},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[36,90107,90108],{"class":38,"line":153},[36,90109,90110],{"class":98},"    const fun = fn.bind(obj)\n",[36,90112,90113],{"class":38,"line":191},[36,90114,90115],{"class":98},"    \u002F\u002F console.log(fun)\n",[36,90117,90118],{"class":38,"line":197},[36,90119,90120],{"class":98},"    \u002F\u002F 调用,查看this的指向\n",[36,90122,90123],{"class":38,"line":217},[36,90124,53083],{"class":98},[36,90126,90127,90129,90131],{"class":38,"line":223},[36,90128,52849],{"class":98},[36,90130,52245],{"class":51733},[36,90132,188],{"class":98},[36,90134,90135,90137,90139],{"class":38,"line":243},[36,90136,52217],{"class":98},[36,90138,52232],{"class":51733},[36,90140,188],{"class":98},[14,90142,90143],{},[1941,90144],{"alt":31,"src":90145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[571,90147,90148],{"start":66},[574,90149,90150],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[26,90152,90154],{"className":53499,"code":90153,"language":53501,"meta":31,"style":31},"\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",[33,90155,90156,90164,90177,90185,90190,90194,90199,90204,90209,90214,90219,90224,90229,90234,90238,90246],{"__ignoreMap":31},[36,90157,90158,90160,90162],{"class":38,"line":39},[36,90159,179],{"class":98},[36,90161,52232],{"class":51733},[36,90163,188],{"class":98},[36,90165,90166,90168,90170,90173,90175],{"class":38,"line":46},[36,90167,52576],{"class":98},[36,90169,54319],{"class":51733},[36,90171,90172],{"class":98},">禁用\u003C\u002F",[36,90174,54319],{"class":51733},[36,90176,188],{"class":98},[36,90178,90179,90181,90183],{"class":38,"line":52},[36,90180,52576],{"class":98},[36,90182,52245],{"class":51733},[36,90184,188],{"class":98},[36,90186,90187],{"class":38,"line":66},[36,90188,90189],{"class":98},"    const btn = document.querySelector('button')\n",[36,90191,90192],{"class":38,"line":72},[36,90193,59448],{"class":98},[36,90195,90196],{"class":38,"line":82},[36,90197,90198],{"class":98},"      this.disabled = true\n",[36,90200,90201],{"class":38,"line":88},[36,90202,90203],{"class":98},"      \u002F\u002F 定时器是window进行调用的\n",[36,90205,90206],{"class":38,"line":113},[36,90207,90208],{"class":98},"      setTimeout(function () {\n",[36,90210,90211],{"class":38,"line":119},[36,90212,90213],{"class":98},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[36,90215,90216],{"class":38,"line":131},[36,90217,90218],{"class":98},"        this.disabled = false\n",[36,90220,90221],{"class":38,"line":137},[36,90222,90223],{"class":98},"      }.bind(this), 2000)\n",[36,90225,90226],{"class":38,"line":147},[36,90227,90228],{"class":98},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[36,90230,90231],{"class":38,"line":153},[36,90232,90233],{"class":98},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[36,90235,90236],{"class":38,"line":191},[36,90237,33894],{"class":98},[36,90239,90240,90242,90244],{"class":38,"line":197},[36,90241,52849],{"class":98},[36,90243,52245],{"class":51733},[36,90245,188],{"class":98},[36,90247,90248,90250,90252],{"class":38,"line":217},[36,90249,52217],{"class":98},[36,90251,52232],{"class":51733},[36,90253,188],{"class":98},[571,90255,90256],{"start":72},[574,90257,22392],{},[14,90259,90260],{},[1941,90261],{"alt":31,"src":90262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[559,90264,90266],{"id":90265},"_417-性能优化","4.17 性能优化",[588,90268,90270],{"id":90269},"_4171-防抖","4.17.1 防抖",[14,90272,90273],{},[1941,90274],{"alt":31,"src":90275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,90277,90278],{},[765,90279,90280],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,90282,90283],{},"防抖实现方式：",[1618,90285,90286],{},[574,90287,90288],{},"lodash 提供了防抖处理",[14,90290,90291],{},"_.debounce(func,[wait=0],[options={}])",[14,90293,90294],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[26,90296,90298],{"className":51066,"code":90297,"language":51068,"meta":31,"style":31},"\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",[33,90299,90300,90310,90324,90328,90336,90350,90370,90382,90390,90396,90406,90418,90430,90441,90453,90463,90473,90486,90490,90498,90506,90510,90518,90536,90554,90562,90581,90591,90600,90611,90616,90620,90625,90630,90635,90660,90668,90676,90680],{"__ignoreMap":31},[36,90301,90302,90304,90306,90308],{"class":38,"line":39},[36,90303,51730],{"class":98},[36,90305,51734],{"class":51733},[36,90307,51737],{"class":55},[36,90309,188],{"class":98},[36,90311,90312,90314,90316,90318,90320,90322],{"class":38,"line":46},[36,90313,179],{"class":98},[36,90315,51068],{"class":51733},[36,90317,51748],{"class":55},[36,90319,176],{"class":98},[36,90321,51753],{"class":59},[36,90323,188],{"class":98},[36,90325,90326],{"class":38,"line":52},[36,90327,247],{"emptyLinePlaceholder":246},[36,90329,90330,90332,90334],{"class":38,"line":66},[36,90331,179],{"class":98},[36,90333,51766],{"class":51733},[36,90335,188],{"class":98},[36,90337,90338,90340,90342,90344,90346,90348],{"class":38,"line":72},[36,90339,52576],{"class":98},[36,90341,51776],{"class":51733},[36,90343,51779],{"class":55},[36,90345,176],{"class":98},[36,90347,51784],{"class":59},[36,90349,188],{"class":98},[36,90351,90352,90354,90356,90358,90360,90362,90364,90366,90368],{"class":38,"line":82},[36,90353,52576],{"class":98},[36,90355,51776],{"class":51733},[36,90357,15359],{"class":55},[36,90359,176],{"class":98},[36,90361,51823],{"class":59},[36,90363,51803],{"class":55},[36,90365,176],{"class":98},[36,90367,51830],{"class":59},[36,90369,188],{"class":98},[36,90371,90372,90374,90376,90378,90380],{"class":38,"line":88},[36,90373,52576],{"class":98},[36,90375,51839],{"class":51733},[36,90377,51842],{"class":98},[36,90379,51839],{"class":51733},[36,90381,188],{"class":98},[36,90383,90384,90386,90388],{"class":38,"line":113},[36,90385,52576],{"class":98},[36,90387,537],{"class":51733},[36,90389,188],{"class":98},[36,90391,90392,90394],{"class":38,"line":119},[36,90393,55184],{"class":55},[36,90395,16011],{"class":98},[36,90397,90398,90400,90402,90404],{"class":38,"line":131},[36,90399,73028],{"class":109},[36,90401,51869],{"class":98},[36,90403,60937],{"class":109},[36,90405,1772],{"class":98},[36,90407,90408,90410,90412,90414,90416],{"class":38,"line":137},[36,90409,55203],{"class":109},[36,90411,51869],{"class":98},[36,90413,2190],{"class":109},[36,90415,51924],{"class":163},[36,90417,1772],{"class":98},[36,90419,90420,90422,90424,90426,90428],{"class":38,"line":147},[36,90421,55217],{"class":109},[36,90423,51869],{"class":98},[36,90425,2190],{"class":109},[36,90427,51924],{"class":163},[36,90429,1772],{"class":98},[36,90431,90432,90434,90436,90439],{"class":38,"line":153},[36,90433,55316],{"class":109},[36,90435,51869],{"class":98},[36,90437,90438],{"class":109},"gray",[36,90440,1772],{"class":98},[36,90442,90443,90445,90447,90449,90451],{"class":38,"line":191},[36,90444,55354],{"class":109},[36,90446,51869],{"class":98},[36,90448,1438],{"class":109},[36,90450,51924],{"class":163},[36,90452,1772],{"class":98},[36,90454,90455,90457,90459,90461],{"class":38,"line":197},[36,90456,57848],{"class":109},[36,90458,51869],{"class":98},[36,90460,61274],{"class":109},[36,90462,1772],{"class":98},[36,90464,90465,90467,90469,90471],{"class":38,"line":217},[36,90466,57718],{"class":109},[36,90468,51869],{"class":98},[36,90470,52024],{"class":109},[36,90472,1772],{"class":98},[36,90474,90475,90478,90480,90482,90484],{"class":38,"line":223},[36,90476,90477],{"class":109},"      padding-top",[36,90479,51869],{"class":98},[36,90481,933],{"class":109},[36,90483,51924],{"class":163},[36,90485,1772],{"class":98},[36,90487,90488],{"class":38,"line":243},[36,90489,2646],{"class":98},[36,90491,90492,90494,90496],{"class":38,"line":250},[36,90493,52849],{"class":98},[36,90495,537],{"class":51733},[36,90497,188],{"class":98},[36,90499,90500,90502,90504],{"class":38,"line":256},[36,90501,52217],{"class":98},[36,90503,51766],{"class":51733},[36,90505,188],{"class":98},[36,90507,90508],{"class":38,"line":273},[36,90509,247],{"emptyLinePlaceholder":246},[36,90511,90512,90514,90516],{"class":38,"line":278},[36,90513,179],{"class":98},[36,90515,52232],{"class":51733},[36,90517,188],{"class":98},[36,90519,90520,90522,90524,90526,90528,90530,90532,90534],{"class":38,"line":284},[36,90521,52576],{"class":98},[36,90523,52043],{"class":51733},[36,90525,53918],{"class":55},[36,90527,176],{"class":98},[36,90529,53923],{"class":59},[36,90531,55746],{"class":98},[36,90533,52043],{"class":51733},[36,90535,188],{"class":98},[36,90537,90538,90540,90542,90544,90546,90548,90550,90552],{"class":38,"line":315},[36,90539,52576],{"class":98},[36,90541,52245],{"class":51733},[36,90543,55671],{"class":55},[36,90545,176],{"class":98},[36,90547,88706],{"class":59},[36,90549,55746],{"class":98},[36,90551,52245],{"class":51733},[36,90553,188],{"class":98},[36,90555,90556,90558,90560],{"class":38,"line":320},[36,90557,52576],{"class":98},[36,90559,52245],{"class":51733},[36,90561,188],{"class":98},[36,90563,90564,90566,90568,90570,90572,90574,90576,90579],{"class":38,"line":326},[36,90565,11660],{"class":163},[36,90567,87365],{"class":109},[36,90569,14003],{"class":163},[36,90571,54828],{"class":98},[36,90573,54831],{"class":55},[36,90575,621],{"class":98},[36,90577,90578],{"class":59},"'.box'",[36,90580,627],{"class":98},[36,90582,90583,90585,90587,90589],{"class":38,"line":343},[36,90584,52651],{"class":163},[36,90586,9879],{"class":98},[36,90588,176],{"class":163},[36,90590,47766],{"class":109},[36,90592,90593,90595,90598],{"class":38,"line":348},[36,90594,70516],{"class":163},[36,90596,90597],{"class":55}," mouseMove",[36,90599,11292],{"class":98},[36,90601,90602,90605,90607,90609],{"class":38,"line":354},[36,90603,90604],{"class":98},"      box.innerHTML ",[36,90606,176],{"class":163},[36,90608,3483],{"class":98},[36,90610,3153],{"class":163},[36,90612,90613],{"class":38,"line":370},[36,90614,90615],{"class":42},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[36,90617,90618],{"class":38,"line":375},[36,90619,2646],{"class":98},[36,90621,90622],{"class":38,"line":381},[36,90623,90624],{"class":42},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[36,90626,90627],{"class":38,"line":399},[36,90628,90629],{"class":42},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[36,90631,90632],{"class":38,"line":404},[36,90633,90634],{"class":42},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[36,90636,90637,90640,90642,90644,90647,90650,90653,90656,90658],{"class":38,"line":410},[36,90638,90639],{"class":98},"    box.",[36,90641,58245],{"class":55},[36,90643,621],{"class":98},[36,90645,90646],{"class":59},"'mousemove'",[36,90648,90649],{"class":98},", _.",[36,90651,90652],{"class":55},"debounce",[36,90654,90655],{"class":98},"(mouseMove, ",[36,90657,65506],{"class":109},[36,90659,30930],{"class":98},[36,90661,90662,90664,90666],{"class":38,"line":423},[36,90663,52849],{"class":98},[36,90665,52245],{"class":51733},[36,90667,188],{"class":98},[36,90669,90670,90672,90674],{"class":38,"line":436},[36,90671,52217],{"class":98},[36,90673,52232],{"class":51733},[36,90675,188],{"class":98},[36,90677,90678],{"class":38,"line":441},[36,90679,247],{"emptyLinePlaceholder":246},[36,90681,90682,90684,90686],{"class":38,"line":447},[36,90683,52217],{"class":98},[36,90685,51068],{"class":51733},[36,90687,188],{"class":98},[1618,90689,90690],{},[574,90691,90692],{},"手写一个防抖函数来处理",[14,90694,90695],{},"防抖的核心就是利用定时器来实现的：",[14,90697,90698],{},"①声明一个定时器变量",[14,90700,90701],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,90703,90704],{},"③如果没有定时器则开启定时器，记得存到变量里面",[26,90706,90708],{"className":51066,"code":90707,"language":51068,"meta":31,"style":31},"\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",[33,90709,90710,90720,90734,90738,90746,90760,90780,90792,90800,90806,90816,90828,90840,90850,90862,90872,90882,90894,90898,90906,90914,90918,90926,90944,90962,90970,90988,90998,91006,91016,91020,91024,91028,91033,91038,91043,91048,91053,91058,91076,91083,91088,91096,91101,91114,91130,91140,91145,91149,91153,91173,91177,91182,91187,91192,91197,91205,91213,91217],{"__ignoreMap":31},[36,90711,90712,90714,90716,90718],{"class":38,"line":39},[36,90713,51730],{"class":98},[36,90715,51734],{"class":51733},[36,90717,51737],{"class":55},[36,90719,188],{"class":98},[36,90721,90722,90724,90726,90728,90730,90732],{"class":38,"line":46},[36,90723,179],{"class":98},[36,90725,51068],{"class":51733},[36,90727,51748],{"class":55},[36,90729,176],{"class":98},[36,90731,51753],{"class":59},[36,90733,188],{"class":98},[36,90735,90736],{"class":38,"line":52},[36,90737,247],{"emptyLinePlaceholder":246},[36,90739,90740,90742,90744],{"class":38,"line":66},[36,90741,179],{"class":98},[36,90743,51766],{"class":51733},[36,90745,188],{"class":98},[36,90747,90748,90750,90752,90754,90756,90758],{"class":38,"line":72},[36,90749,52576],{"class":98},[36,90751,51776],{"class":51733},[36,90753,51779],{"class":55},[36,90755,176],{"class":98},[36,90757,51784],{"class":59},[36,90759,188],{"class":98},[36,90761,90762,90764,90766,90768,90770,90772,90774,90776,90778],{"class":38,"line":82},[36,90763,52576],{"class":98},[36,90765,51776],{"class":51733},[36,90767,15359],{"class":55},[36,90769,176],{"class":98},[36,90771,51823],{"class":59},[36,90773,51803],{"class":55},[36,90775,176],{"class":98},[36,90777,51830],{"class":59},[36,90779,188],{"class":98},[36,90781,90782,90784,90786,90788,90790],{"class":38,"line":88},[36,90783,52576],{"class":98},[36,90785,51839],{"class":51733},[36,90787,51842],{"class":98},[36,90789,51839],{"class":51733},[36,90791,188],{"class":98},[36,90793,90794,90796,90798],{"class":38,"line":113},[36,90795,52576],{"class":98},[36,90797,537],{"class":51733},[36,90799,188],{"class":98},[36,90801,90802,90804],{"class":38,"line":119},[36,90803,55184],{"class":55},[36,90805,16011],{"class":98},[36,90807,90808,90810,90812,90814],{"class":38,"line":131},[36,90809,73028],{"class":109},[36,90811,51869],{"class":98},[36,90813,60937],{"class":109},[36,90815,1772],{"class":98},[36,90817,90818,90820,90822,90824,90826],{"class":38,"line":137},[36,90819,55203],{"class":109},[36,90821,51869],{"class":98},[36,90823,2190],{"class":109},[36,90825,51924],{"class":163},[36,90827,1772],{"class":98},[36,90829,90830,90832,90834,90836,90838],{"class":38,"line":147},[36,90831,55217],{"class":109},[36,90833,51869],{"class":98},[36,90835,2190],{"class":109},[36,90837,51924],{"class":163},[36,90839,1772],{"class":98},[36,90841,90842,90844,90846,90848],{"class":38,"line":153},[36,90843,55316],{"class":109},[36,90845,51869],{"class":98},[36,90847,90438],{"class":109},[36,90849,1772],{"class":98},[36,90851,90852,90854,90856,90858,90860],{"class":38,"line":191},[36,90853,55354],{"class":109},[36,90855,51869],{"class":98},[36,90857,1438],{"class":109},[36,90859,51924],{"class":163},[36,90861,1772],{"class":98},[36,90863,90864,90866,90868,90870],{"class":38,"line":197},[36,90865,57848],{"class":109},[36,90867,51869],{"class":98},[36,90869,61274],{"class":109},[36,90871,1772],{"class":98},[36,90873,90874,90876,90878,90880],{"class":38,"line":217},[36,90875,57718],{"class":109},[36,90877,51869],{"class":98},[36,90879,52024],{"class":109},[36,90881,1772],{"class":98},[36,90883,90884,90886,90888,90890,90892],{"class":38,"line":223},[36,90885,90477],{"class":109},[36,90887,51869],{"class":98},[36,90889,933],{"class":109},[36,90891,51924],{"class":163},[36,90893,1772],{"class":98},[36,90895,90896],{"class":38,"line":243},[36,90897,2646],{"class":98},[36,90899,90900,90902,90904],{"class":38,"line":250},[36,90901,52849],{"class":98},[36,90903,537],{"class":51733},[36,90905,188],{"class":98},[36,90907,90908,90910,90912],{"class":38,"line":256},[36,90909,52217],{"class":98},[36,90911,51766],{"class":51733},[36,90913,188],{"class":98},[36,90915,90916],{"class":38,"line":273},[36,90917,247],{"emptyLinePlaceholder":246},[36,90919,90920,90922,90924],{"class":38,"line":278},[36,90921,179],{"class":98},[36,90923,52232],{"class":51733},[36,90925,188],{"class":98},[36,90927,90928,90930,90932,90934,90936,90938,90940,90942],{"class":38,"line":284},[36,90929,52576],{"class":98},[36,90931,52043],{"class":51733},[36,90933,53918],{"class":55},[36,90935,176],{"class":98},[36,90937,53923],{"class":59},[36,90939,55746],{"class":98},[36,90941,52043],{"class":51733},[36,90943,188],{"class":98},[36,90945,90946,90948,90950,90952,90954,90956,90958,90960],{"class":38,"line":315},[36,90947,52576],{"class":98},[36,90949,52245],{"class":51733},[36,90951,55671],{"class":55},[36,90953,176],{"class":98},[36,90955,88706],{"class":59},[36,90957,55746],{"class":98},[36,90959,52245],{"class":51733},[36,90961,188],{"class":98},[36,90963,90964,90966,90968],{"class":38,"line":320},[36,90965,52576],{"class":98},[36,90967,52245],{"class":51733},[36,90969,188],{"class":98},[36,90971,90972,90974,90976,90978,90980,90982,90984,90986],{"class":38,"line":326},[36,90973,11660],{"class":163},[36,90975,87365],{"class":109},[36,90977,14003],{"class":163},[36,90979,54828],{"class":98},[36,90981,54831],{"class":55},[36,90983,621],{"class":98},[36,90985,90578],{"class":59},[36,90987,627],{"class":98},[36,90989,90990,90992,90994,90996],{"class":38,"line":343},[36,90991,52651],{"class":163},[36,90993,9879],{"class":98},[36,90995,176],{"class":163},[36,90997,47766],{"class":109},[36,90999,91000,91002,91004],{"class":38,"line":348},[36,91001,70516],{"class":163},[36,91003,90597],{"class":55},[36,91005,11292],{"class":98},[36,91007,91008,91010,91012,91014],{"class":38,"line":354},[36,91009,90604],{"class":98},[36,91011,176],{"class":163},[36,91013,3483],{"class":98},[36,91015,3153],{"class":163},[36,91017,91018],{"class":38,"line":370},[36,91019,90615],{"class":42},[36,91021,91022],{"class":38,"line":375},[36,91023,2646],{"class":98},[36,91025,91026],{"class":38,"line":381},[36,91027,90624],{"class":42},[36,91029,91030],{"class":38,"line":399},[36,91031,91032],{"class":42},"    \u002F\u002F 手写防抖函数\n",[36,91034,91035],{"class":38,"line":404},[36,91036,91037],{"class":42},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[36,91039,91040],{"class":38,"line":410},[36,91041,91042],{"class":42},"    \u002F\u002F 1.声明定时器变量\n",[36,91044,91045],{"class":38,"line":423},[36,91046,91047],{"class":42},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[36,91049,91050],{"class":38,"line":436},[36,91051,91052],{"class":42},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[36,91054,91055],{"class":38,"line":441},[36,91056,91057],{"class":42},"    \u002F\u002F 4.定时器里面写函数调用\n",[36,91059,91060,91062,91065,91067,91070,91072,91074],{"class":38,"line":447},[36,91061,70516],{"class":163},[36,91063,91064],{"class":55}," debounce",[36,91066,621],{"class":98},[36,91068,91069],{"class":5667},"fn",[36,91071,12874],{"class":98},[36,91073,1333],{"class":5667},[36,91075,12881],{"class":98},[36,91077,91078,91080],{"class":38,"line":465},[36,91079,80204],{"class":163},[36,91081,91082],{"class":98}," timer\n",[36,91084,91085],{"class":38,"line":470},[36,91086,91087],{"class":42},"      \u002F\u002F return 返回一个匿名函数\n",[36,91089,91090,91092,91094],{"class":38,"line":476},[36,91091,74414],{"class":163},[36,91093,59350],{"class":163},[36,91095,54884],{"class":98},[36,91097,91098],{"class":38,"line":496},[36,91099,91100],{"class":42},"        \u002F\u002F 这里边写第二三四步\n",[36,91102,91103,91105,91108,91111],{"class":38,"line":501},[36,91104,2955],{"class":163},[36,91106,91107],{"class":98}," (timer) ",[36,91109,91110],{"class":55},"clearTimeout",[36,91112,91113],{"class":98},"(timer)\n",[36,91115,91116,91119,91121,91124,91126,91128],{"class":38,"line":507},[36,91117,91118],{"class":98},"        timer ",[36,91120,176],{"class":163},[36,91122,91123],{"class":55}," setTimeout",[36,91125,621],{"class":98},[36,91127,54881],{"class":163},[36,91129,54884],{"class":98},[36,91131,91132,91135,91137],{"class":38,"line":517},[36,91133,91134],{"class":55},"          fn",[36,91136,13489],{"class":98},[36,91138,91139],{"class":42},"\u002F\u002F加小括号调用fn }, t)\n",[36,91141,91142],{"class":38,"line":522},[36,91143,91144],{"class":98},"        }, t)\n",[36,91146,91147],{"class":38,"line":528},[36,91148,52830],{"class":98},[36,91150,91151],{"class":38,"line":10203},[36,91152,2646],{"class":98},[36,91154,91155,91157,91159,91161,91163,91165,91167,91169,91171],{"class":38,"line":10227},[36,91156,90639],{"class":98},[36,91158,58245],{"class":55},[36,91160,621],{"class":98},[36,91162,90646],{"class":59},[36,91164,12874],{"class":98},[36,91166,90652],{"class":55},[36,91168,90655],{"class":98},[36,91170,65506],{"class":109},[36,91172,30930],{"class":98},[36,91174,91175],{"class":38,"line":10232},[36,91176,247],{"emptyLinePlaceholder":246},[36,91178,91179],{"class":38,"line":10237},[36,91180,91181],{"class":42},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[36,91183,91184],{"class":38,"line":10242},[36,91185,91186],{"class":42},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[36,91188,91189],{"class":38,"line":10251},[36,91190,91191],{"class":42},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[36,91193,91194],{"class":38,"line":10256},[36,91195,91196],{"class":42},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[36,91198,91199,91201,91203],{"class":38,"line":10262},[36,91200,52849],{"class":98},[36,91202,52245],{"class":51733},[36,91204,188],{"class":98},[36,91206,91207,91209,91211],{"class":38,"line":10283},[36,91208,52217],{"class":98},[36,91210,52232],{"class":51733},[36,91212,188],{"class":98},[36,91214,91215],{"class":38,"line":10289},[36,91216,247],{"emptyLinePlaceholder":246},[36,91218,91219,91221,91223],{"class":38,"line":10303},[36,91220,52217],{"class":98},[36,91222,51068],{"class":51733},[36,91224,188],{"class":98},[588,91226,91228],{"id":91227},"_4172-节流","4.17.2 节流",[14,91230,91231],{},[1941,91232],{"alt":31,"src":91233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,91235,91236],{},[1941,91237],{"alt":31,"src":91238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,91240,91241],{},[765,91242,91243],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,91245,91246],{},"实现方式：",[1618,91248,91249],{},[574,91250,91251],{},"lodash 提供的节流函数来处理",[14,91253,91254],{},"_.throttle(func,[wait=0],[options=])",[14,91256,91257],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[26,91259,91261],{"className":51066,"code":91260,"language":51068,"meta":31,"style":31},"\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",[33,91262,91263,91273,91287,91291,91299,91313,91333,91345,91353,91359,91369,91381,91393,91403,91415,91425,91435,91447,91451,91459,91467,91471,91479,91497,91515,91523,91541,91551,91559,91569,91573,91577,91581,91586,91591,91612,91620,91628,91632],{"__ignoreMap":31},[36,91264,91265,91267,91269,91271],{"class":38,"line":39},[36,91266,51730],{"class":98},[36,91268,51734],{"class":51733},[36,91270,51737],{"class":55},[36,91272,188],{"class":98},[36,91274,91275,91277,91279,91281,91283,91285],{"class":38,"line":46},[36,91276,179],{"class":98},[36,91278,51068],{"class":51733},[36,91280,51748],{"class":55},[36,91282,176],{"class":98},[36,91284,51753],{"class":59},[36,91286,188],{"class":98},[36,91288,91289],{"class":38,"line":52},[36,91290,247],{"emptyLinePlaceholder":246},[36,91292,91293,91295,91297],{"class":38,"line":66},[36,91294,179],{"class":98},[36,91296,51766],{"class":51733},[36,91298,188],{"class":98},[36,91300,91301,91303,91305,91307,91309,91311],{"class":38,"line":72},[36,91302,52576],{"class":98},[36,91304,51776],{"class":51733},[36,91306,51779],{"class":55},[36,91308,176],{"class":98},[36,91310,51784],{"class":59},[36,91312,188],{"class":98},[36,91314,91315,91317,91319,91321,91323,91325,91327,91329,91331],{"class":38,"line":82},[36,91316,52576],{"class":98},[36,91318,51776],{"class":51733},[36,91320,15359],{"class":55},[36,91322,176],{"class":98},[36,91324,51823],{"class":59},[36,91326,51803],{"class":55},[36,91328,176],{"class":98},[36,91330,51830],{"class":59},[36,91332,188],{"class":98},[36,91334,91335,91337,91339,91341,91343],{"class":38,"line":88},[36,91336,52576],{"class":98},[36,91338,51839],{"class":51733},[36,91340,51842],{"class":98},[36,91342,51839],{"class":51733},[36,91344,188],{"class":98},[36,91346,91347,91349,91351],{"class":38,"line":113},[36,91348,52576],{"class":98},[36,91350,537],{"class":51733},[36,91352,188],{"class":98},[36,91354,91355,91357],{"class":38,"line":119},[36,91356,55184],{"class":55},[36,91358,16011],{"class":98},[36,91360,91361,91363,91365,91367],{"class":38,"line":131},[36,91362,73028],{"class":109},[36,91364,51869],{"class":98},[36,91366,60937],{"class":109},[36,91368,1772],{"class":98},[36,91370,91371,91373,91375,91377,91379],{"class":38,"line":137},[36,91372,55203],{"class":109},[36,91374,51869],{"class":98},[36,91376,2190],{"class":109},[36,91378,51924],{"class":163},[36,91380,1772],{"class":98},[36,91382,91383,91385,91387,91389,91391],{"class":38,"line":147},[36,91384,55217],{"class":109},[36,91386,51869],{"class":98},[36,91388,2190],{"class":109},[36,91390,51924],{"class":163},[36,91392,1772],{"class":98},[36,91394,91395,91397,91399,91401],{"class":38,"line":153},[36,91396,55316],{"class":109},[36,91398,51869],{"class":98},[36,91400,90438],{"class":109},[36,91402,1772],{"class":98},[36,91404,91405,91407,91409,91411,91413],{"class":38,"line":191},[36,91406,55354],{"class":109},[36,91408,51869],{"class":98},[36,91410,1438],{"class":109},[36,91412,51924],{"class":163},[36,91414,1772],{"class":98},[36,91416,91417,91419,91421,91423],{"class":38,"line":197},[36,91418,57848],{"class":109},[36,91420,51869],{"class":98},[36,91422,61274],{"class":109},[36,91424,1772],{"class":98},[36,91426,91427,91429,91431,91433],{"class":38,"line":217},[36,91428,57718],{"class":109},[36,91430,51869],{"class":98},[36,91432,52024],{"class":109},[36,91434,1772],{"class":98},[36,91436,91437,91439,91441,91443,91445],{"class":38,"line":223},[36,91438,90477],{"class":109},[36,91440,51869],{"class":98},[36,91442,933],{"class":109},[36,91444,51924],{"class":163},[36,91446,1772],{"class":98},[36,91448,91449],{"class":38,"line":243},[36,91450,2646],{"class":98},[36,91452,91453,91455,91457],{"class":38,"line":250},[36,91454,52849],{"class":98},[36,91456,537],{"class":51733},[36,91458,188],{"class":98},[36,91460,91461,91463,91465],{"class":38,"line":256},[36,91462,52217],{"class":98},[36,91464,51766],{"class":51733},[36,91466,188],{"class":98},[36,91468,91469],{"class":38,"line":273},[36,91470,247],{"emptyLinePlaceholder":246},[36,91472,91473,91475,91477],{"class":38,"line":278},[36,91474,179],{"class":98},[36,91476,52232],{"class":51733},[36,91478,188],{"class":98},[36,91480,91481,91483,91485,91487,91489,91491,91493,91495],{"class":38,"line":284},[36,91482,52576],{"class":98},[36,91484,52043],{"class":51733},[36,91486,53918],{"class":55},[36,91488,176],{"class":98},[36,91490,53923],{"class":59},[36,91492,55746],{"class":98},[36,91494,52043],{"class":51733},[36,91496,188],{"class":98},[36,91498,91499,91501,91503,91505,91507,91509,91511,91513],{"class":38,"line":315},[36,91500,52576],{"class":98},[36,91502,52245],{"class":51733},[36,91504,55671],{"class":55},[36,91506,176],{"class":98},[36,91508,88706],{"class":59},[36,91510,55746],{"class":98},[36,91512,52245],{"class":51733},[36,91514,188],{"class":98},[36,91516,91517,91519,91521],{"class":38,"line":320},[36,91518,52576],{"class":98},[36,91520,52245],{"class":51733},[36,91522,188],{"class":98},[36,91524,91525,91527,91529,91531,91533,91535,91537,91539],{"class":38,"line":326},[36,91526,11660],{"class":163},[36,91528,87365],{"class":109},[36,91530,14003],{"class":163},[36,91532,54828],{"class":98},[36,91534,54831],{"class":55},[36,91536,621],{"class":98},[36,91538,90578],{"class":59},[36,91540,627],{"class":98},[36,91542,91543,91545,91547,91549],{"class":38,"line":343},[36,91544,52651],{"class":163},[36,91546,9879],{"class":98},[36,91548,176],{"class":163},[36,91550,47766],{"class":109},[36,91552,91553,91555,91557],{"class":38,"line":348},[36,91554,70516],{"class":163},[36,91556,90597],{"class":55},[36,91558,11292],{"class":98},[36,91560,91561,91563,91565,91567],{"class":38,"line":354},[36,91562,90604],{"class":98},[36,91564,176],{"class":163},[36,91566,3483],{"class":98},[36,91568,3153],{"class":163},[36,91570,91571],{"class":38,"line":370},[36,91572,90615],{"class":42},[36,91574,91575],{"class":38,"line":375},[36,91576,2646],{"class":98},[36,91578,91579],{"class":38,"line":381},[36,91580,90624],{"class":42},[36,91582,91583],{"class":38,"line":399},[36,91584,91585],{"class":42},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[36,91587,91588],{"class":38,"line":404},[36,91589,91590],{"class":42},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[36,91592,91593,91595,91597,91599,91601,91603,91606,91608,91610],{"class":38,"line":410},[36,91594,90639],{"class":98},[36,91596,58245],{"class":55},[36,91598,621],{"class":98},[36,91600,90646],{"class":59},[36,91602,90649],{"class":98},[36,91604,91605],{"class":55},"throttle",[36,91607,90655],{"class":98},[36,91609,65506],{"class":109},[36,91611,30930],{"class":98},[36,91613,91614,91616,91618],{"class":38,"line":423},[36,91615,52849],{"class":98},[36,91617,52245],{"class":51733},[36,91619,188],{"class":98},[36,91621,91622,91624,91626],{"class":38,"line":436},[36,91623,52217],{"class":98},[36,91625,52232],{"class":51733},[36,91627,188],{"class":98},[36,91629,91630],{"class":38,"line":441},[36,91631,247],{"emptyLinePlaceholder":246},[36,91633,91634,91636,91638],{"class":38,"line":447},[36,91635,52217],{"class":98},[36,91637,51068],{"class":51733},[36,91639,188],{"class":98},[1618,91641,91642],{},[574,91643,91644],{},"手写一个节流函数来处理",[14,91646,71384],{},[14,91648,90698],{},[14,91650,91651],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,91653,91654],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[26,91656,91658],{"className":51066,"code":91657,"language":51068,"meta":31,"style":31},"\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",[33,91659,91660,91670,91684,91688,91696,91710,91730,91742,91750,91756,91766,91778,91790,91800,91812,91822,91832,91844,91848,91856,91864,91868,91876,91894,91912,91920,91938,91948,91956,91966,91970,91974,91978,91983,91988,91993,91998,92003,92008,92025,92031,92039,92050,92065,92072,92077,92082,92092,92097,92102,92107,92111,92115,92119,92139,92147,92155,92159],{"__ignoreMap":31},[36,91661,91662,91664,91666,91668],{"class":38,"line":39},[36,91663,51730],{"class":98},[36,91665,51734],{"class":51733},[36,91667,51737],{"class":55},[36,91669,188],{"class":98},[36,91671,91672,91674,91676,91678,91680,91682],{"class":38,"line":46},[36,91673,179],{"class":98},[36,91675,51068],{"class":51733},[36,91677,51748],{"class":55},[36,91679,176],{"class":98},[36,91681,51753],{"class":59},[36,91683,188],{"class":98},[36,91685,91686],{"class":38,"line":52},[36,91687,247],{"emptyLinePlaceholder":246},[36,91689,91690,91692,91694],{"class":38,"line":66},[36,91691,179],{"class":98},[36,91693,51766],{"class":51733},[36,91695,188],{"class":98},[36,91697,91698,91700,91702,91704,91706,91708],{"class":38,"line":72},[36,91699,52576],{"class":98},[36,91701,51776],{"class":51733},[36,91703,51779],{"class":55},[36,91705,176],{"class":98},[36,91707,51784],{"class":59},[36,91709,188],{"class":98},[36,91711,91712,91714,91716,91718,91720,91722,91724,91726,91728],{"class":38,"line":82},[36,91713,52576],{"class":98},[36,91715,51776],{"class":51733},[36,91717,15359],{"class":55},[36,91719,176],{"class":98},[36,91721,51823],{"class":59},[36,91723,51803],{"class":55},[36,91725,176],{"class":98},[36,91727,51830],{"class":59},[36,91729,188],{"class":98},[36,91731,91732,91734,91736,91738,91740],{"class":38,"line":88},[36,91733,52576],{"class":98},[36,91735,51839],{"class":51733},[36,91737,51842],{"class":98},[36,91739,51839],{"class":51733},[36,91741,188],{"class":98},[36,91743,91744,91746,91748],{"class":38,"line":113},[36,91745,52576],{"class":98},[36,91747,537],{"class":51733},[36,91749,188],{"class":98},[36,91751,91752,91754],{"class":38,"line":119},[36,91753,55184],{"class":55},[36,91755,16011],{"class":98},[36,91757,91758,91760,91762,91764],{"class":38,"line":131},[36,91759,73028],{"class":109},[36,91761,51869],{"class":98},[36,91763,60937],{"class":109},[36,91765,1772],{"class":98},[36,91767,91768,91770,91772,91774,91776],{"class":38,"line":137},[36,91769,55203],{"class":109},[36,91771,51869],{"class":98},[36,91773,2190],{"class":109},[36,91775,51924],{"class":163},[36,91777,1772],{"class":98},[36,91779,91780,91782,91784,91786,91788],{"class":38,"line":147},[36,91781,55217],{"class":109},[36,91783,51869],{"class":98},[36,91785,2190],{"class":109},[36,91787,51924],{"class":163},[36,91789,1772],{"class":98},[36,91791,91792,91794,91796,91798],{"class":38,"line":153},[36,91793,55316],{"class":109},[36,91795,51869],{"class":98},[36,91797,90438],{"class":109},[36,91799,1772],{"class":98},[36,91801,91802,91804,91806,91808,91810],{"class":38,"line":191},[36,91803,55354],{"class":109},[36,91805,51869],{"class":98},[36,91807,1438],{"class":109},[36,91809,51924],{"class":163},[36,91811,1772],{"class":98},[36,91813,91814,91816,91818,91820],{"class":38,"line":197},[36,91815,57848],{"class":109},[36,91817,51869],{"class":98},[36,91819,61274],{"class":109},[36,91821,1772],{"class":98},[36,91823,91824,91826,91828,91830],{"class":38,"line":217},[36,91825,57718],{"class":109},[36,91827,51869],{"class":98},[36,91829,52024],{"class":109},[36,91831,1772],{"class":98},[36,91833,91834,91836,91838,91840,91842],{"class":38,"line":223},[36,91835,90477],{"class":109},[36,91837,51869],{"class":98},[36,91839,933],{"class":109},[36,91841,51924],{"class":163},[36,91843,1772],{"class":98},[36,91845,91846],{"class":38,"line":243},[36,91847,2646],{"class":98},[36,91849,91850,91852,91854],{"class":38,"line":250},[36,91851,52849],{"class":98},[36,91853,537],{"class":51733},[36,91855,188],{"class":98},[36,91857,91858,91860,91862],{"class":38,"line":256},[36,91859,52217],{"class":98},[36,91861,51766],{"class":51733},[36,91863,188],{"class":98},[36,91865,91866],{"class":38,"line":273},[36,91867,247],{"emptyLinePlaceholder":246},[36,91869,91870,91872,91874],{"class":38,"line":278},[36,91871,179],{"class":98},[36,91873,52232],{"class":51733},[36,91875,188],{"class":98},[36,91877,91878,91880,91882,91884,91886,91888,91890,91892],{"class":38,"line":284},[36,91879,52576],{"class":98},[36,91881,52043],{"class":51733},[36,91883,53918],{"class":55},[36,91885,176],{"class":98},[36,91887,53923],{"class":59},[36,91889,55746],{"class":98},[36,91891,52043],{"class":51733},[36,91893,188],{"class":98},[36,91895,91896,91898,91900,91902,91904,91906,91908,91910],{"class":38,"line":315},[36,91897,52576],{"class":98},[36,91899,52245],{"class":51733},[36,91901,55671],{"class":55},[36,91903,176],{"class":98},[36,91905,88706],{"class":59},[36,91907,55746],{"class":98},[36,91909,52245],{"class":51733},[36,91911,188],{"class":98},[36,91913,91914,91916,91918],{"class":38,"line":320},[36,91915,52576],{"class":98},[36,91917,52245],{"class":51733},[36,91919,188],{"class":98},[36,91921,91922,91924,91926,91928,91930,91932,91934,91936],{"class":38,"line":326},[36,91923,11660],{"class":163},[36,91925,87365],{"class":109},[36,91927,14003],{"class":163},[36,91929,54828],{"class":98},[36,91931,54831],{"class":55},[36,91933,621],{"class":98},[36,91935,90578],{"class":59},[36,91937,627],{"class":98},[36,91939,91940,91942,91944,91946],{"class":38,"line":343},[36,91941,52651],{"class":163},[36,91943,9879],{"class":98},[36,91945,176],{"class":163},[36,91947,47766],{"class":109},[36,91949,91950,91952,91954],{"class":38,"line":348},[36,91951,70516],{"class":163},[36,91953,90597],{"class":55},[36,91955,11292],{"class":98},[36,91957,91958,91960,91962,91964],{"class":38,"line":354},[36,91959,90604],{"class":98},[36,91961,176],{"class":163},[36,91963,3483],{"class":98},[36,91965,3153],{"class":163},[36,91967,91968],{"class":38,"line":370},[36,91969,90615],{"class":42},[36,91971,91972],{"class":38,"line":375},[36,91973,2646],{"class":98},[36,91975,91976],{"class":38,"line":381},[36,91977,90624],{"class":42},[36,91979,91980],{"class":38,"line":399},[36,91981,91982],{"class":42},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[36,91984,91985],{"class":38,"line":404},[36,91986,91987],{"class":42},"    \u002F\u002F 1.声明一个定时器变量\n",[36,91989,91990],{"class":38,"line":410},[36,91991,91992],{"class":42},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[36,91994,91995],{"class":38,"line":423},[36,91996,91997],{"class":42},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[36,91999,92000],{"class":38,"line":436},[36,92001,92002],{"class":42},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[36,92004,92005],{"class":38,"line":441},[36,92006,92007],{"class":42},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[36,92009,92010,92012,92015,92017,92019,92021,92023],{"class":38,"line":447},[36,92011,70516],{"class":163},[36,92013,92014],{"class":55}," throttle",[36,92016,621],{"class":98},[36,92018,91069],{"class":5667},[36,92020,12874],{"class":98},[36,92022,1333],{"class":5667},[36,92024,12881],{"class":98},[36,92026,92027,92029],{"class":38,"line":465},[36,92028,80204],{"class":163},[36,92030,91082],{"class":98},[36,92032,92033,92035,92037],{"class":38,"line":470},[36,92034,74414],{"class":163},[36,92036,59350],{"class":163},[36,92038,54884],{"class":98},[36,92040,92041,92043,92045,92047],{"class":38,"line":476},[36,92042,2955],{"class":163},[36,92044,2130],{"class":98},[36,92046,842],{"class":163},[36,92048,92049],{"class":98},"timer) {\n",[36,92051,92052,92055,92057,92059,92061,92063],{"class":38,"line":496},[36,92053,92054],{"class":98},"          timer ",[36,92056,176],{"class":163},[36,92058,91123],{"class":55},[36,92060,621],{"class":98},[36,92062,54881],{"class":163},[36,92064,54884],{"class":98},[36,92066,92067,92070],{"class":38,"line":501},[36,92068,92069],{"class":55},"            fn",[36,92071,2435],{"class":98},[36,92073,92074],{"class":38,"line":507},[36,92075,92076],{"class":42},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[36,92078,92079],{"class":38,"line":517},[36,92080,92081],{"class":42},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[36,92083,92084,92087,92089],{"class":38,"line":522},[36,92085,92086],{"class":98},"            timer ",[36,92088,176],{"class":163},[36,92090,92091],{"class":109}," null\n",[36,92093,92094],{"class":38,"line":528},[36,92095,92096],{"class":42},"            \u002F\u002F 不能用clearTimeout(timer)\n",[36,92098,92099],{"class":38,"line":10203},[36,92100,92101],{"class":42},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[36,92103,92104],{"class":38,"line":10227},[36,92105,92106],{"class":98},"          }, t)\n",[36,92108,92109],{"class":38,"line":10232},[36,92110,2987],{"class":98},[36,92112,92113],{"class":38,"line":10237},[36,92114,52830],{"class":98},[36,92116,92117],{"class":38,"line":10242},[36,92118,2646],{"class":98},[36,92120,92121,92123,92125,92127,92129,92131,92133,92135,92137],{"class":38,"line":10251},[36,92122,90639],{"class":98},[36,92124,58245],{"class":55},[36,92126,621],{"class":98},[36,92128,90646],{"class":59},[36,92130,12874],{"class":98},[36,92132,91605],{"class":55},[36,92134,90655],{"class":98},[36,92136,65506],{"class":109},[36,92138,30930],{"class":98},[36,92140,92141,92143,92145],{"class":38,"line":10256},[36,92142,52849],{"class":98},[36,92144,52245],{"class":51733},[36,92146,188],{"class":98},[36,92148,92149,92151,92153],{"class":38,"line":10262},[36,92150,52217],{"class":98},[36,92152,52232],{"class":51733},[36,92154,188],{"class":98},[36,92156,92157],{"class":38,"line":10283},[36,92158,247],{"emptyLinePlaceholder":246},[36,92160,92161,92163,92165],{"class":38,"line":10289},[36,92162,52217],{"class":98},[36,92164,51068],{"class":51733},[36,92166,188],{"class":98},[588,92168,92170],{"id":92169},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[26,92172,92174],{"className":53499,"code":92173,"language":53501,"meta":31,"style":31},"\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",[33,92175,92176,92184,92192,92197,92202,92207,92212,92216,92224],{"__ignoreMap":31},[36,92177,92178,92180,92182],{"class":38,"line":39},[36,92179,179],{"class":98},[36,92181,52232],{"class":51733},[36,92183,188],{"class":98},[36,92185,92186,92188,92190],{"class":38,"line":46},[36,92187,52576],{"class":98},[36,92189,52245],{"class":51733},[36,92191,188],{"class":98},[36,92193,92194],{"class":38,"line":52},[36,92195,92196],{"class":98},"    let timer = null\n",[36,92198,92199],{"class":38,"line":66},[36,92200,92201],{"class":98},"    timer = setTimeout(() => {\n",[36,92203,92204],{"class":38,"line":72},[36,92205,92206],{"class":98},"      clearTimeout(timer)\n",[36,92208,92209],{"class":38,"line":82},[36,92210,92211],{"class":98},"      console.log(timer)\n",[36,92213,92214],{"class":38,"line":88},[36,92215,60657],{"class":98},[36,92217,92218,92220,92222],{"class":38,"line":113},[36,92219,52849],{"class":98},[36,92221,52245],{"class":51733},[36,92223,188],{"class":98},[36,92225,92226,92228,92230],{"class":38,"line":119},[36,92227,52217],{"class":98},[36,92229,52232],{"class":51733},[36,92231,188],{"class":98},[14,92233,92234],{},"输出为1",[14,92236,92237],{},"在开启的定时器里边写清除定时器",[14,92239,92240],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[588,92242,92244],{"id":92243},"_4174-节流综合案例","4.17.4 节流综合案例",[14,92246,92247],{},"页面打开，可以记录上一次的视频播放位置",[14,92249,92250],{},[1941,92251],{"alt":31,"src":92252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,92254,92255],{},[1941,92256],{"alt":31,"src":92257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[26,92259,92261],{"className":51066,"code":92260,"language":51068,"meta":31,"style":31},"\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",[33,92262,92263,92273,92287,92291,92299,92313,92333,92353,92375,92388,92396,92402,92412,92422,92432,92436,92440,92447,92460,92472,92476,92480,92490,92502,92516,92520,92524,92531,92541,92554,92566,92576,92586,92602,92614,92618,92622,92630,92640,92652,92662,92672,92682,92686,92690,92700,92711,92715,92723,92731,92735,92743,92758,92773,92788,92809,92817,92825,92840,92862,92870,92885,92911,92937,92963,92971,92979,92998,93006,93011,93030,93035,93053,93058,93063,93071,93076,93090,93098,93103,93120,93124,93129,93151,93155,93163,93171,93175],{"__ignoreMap":31},[36,92264,92265,92267,92269,92271],{"class":38,"line":39},[36,92266,51730],{"class":98},[36,92268,51734],{"class":51733},[36,92270,51737],{"class":55},[36,92272,188],{"class":98},[36,92274,92275,92277,92279,92281,92283,92285],{"class":38,"line":46},[36,92276,179],{"class":98},[36,92278,51068],{"class":51733},[36,92280,51748],{"class":55},[36,92282,176],{"class":98},[36,92284,51753],{"class":59},[36,92286,188],{"class":98},[36,92288,92289],{"class":38,"line":52},[36,92290,247],{"emptyLinePlaceholder":246},[36,92292,92293,92295,92297],{"class":38,"line":66},[36,92294,179],{"class":98},[36,92296,51766],{"class":51733},[36,92298,188],{"class":98},[36,92300,92301,92303,92305,92307,92309,92311],{"class":38,"line":72},[36,92302,52576],{"class":98},[36,92304,51776],{"class":51733},[36,92306,51779],{"class":55},[36,92308,176],{"class":98},[36,92310,51784],{"class":59},[36,92312,59559],{"class":98},[36,92314,92315,92317,92319,92321,92323,92325,92327,92329,92331],{"class":38,"line":82},[36,92316,52576],{"class":98},[36,92318,51776],{"class":51733},[36,92320,51795],{"class":55},[36,92322,176],{"class":98},[36,92324,51800],{"class":59},[36,92326,51803],{"class":55},[36,92328,176],{"class":98},[36,92330,51808],{"class":59},[36,92332,59559],{"class":98},[36,92334,92335,92337,92339,92341,92343,92345,92347,92349,92351],{"class":38,"line":88},[36,92336,52576],{"class":98},[36,92338,51776],{"class":51733},[36,92340,15359],{"class":55},[36,92342,176],{"class":98},[36,92344,51823],{"class":59},[36,92346,51803],{"class":55},[36,92348,176],{"class":98},[36,92350,51830],{"class":59},[36,92352,59559],{"class":98},[36,92354,92355,92357,92359,92361,92363,92366,92368,92370,92373],{"class":38,"line":113},[36,92356,52576],{"class":98},[36,92358,51776],{"class":51733},[36,92360,15359],{"class":55},[36,92362,176],{"class":98},[36,92364,92365],{"class":59},"\"referrer\"",[36,92367,51803],{"class":55},[36,92369,176],{"class":98},[36,92371,92372],{"class":59},"\"never\"",[36,92374,59559],{"class":98},[36,92376,92377,92379,92381,92384,92386],{"class":38,"line":119},[36,92378,52576],{"class":98},[36,92380,51839],{"class":51733},[36,92382,92383],{"class":98},">综合案例\u003C\u002F",[36,92385,51839],{"class":51733},[36,92387,188],{"class":98},[36,92389,92390,92392,92394],{"class":38,"line":131},[36,92391,52576],{"class":98},[36,92393,537],{"class":51733},[36,92395,188],{"class":98},[36,92397,92398,92400],{"class":38,"line":137},[36,92399,6854],{"class":51733},[36,92401,16011],{"class":98},[36,92403,92404,92406,92408,92410],{"class":38,"line":147},[36,92405,55127],{"class":109},[36,92407,51869],{"class":98},[36,92409,807],{"class":109},[36,92411,1772],{"class":98},[36,92413,92414,92416,92418,92420],{"class":38,"line":153},[36,92415,55138],{"class":109},[36,92417,51869],{"class":98},[36,92419,807],{"class":109},[36,92421,1772],{"class":98},[36,92423,92424,92426,92428,92430],{"class":38,"line":191},[36,92425,73028],{"class":109},[36,92427,51869],{"class":98},[36,92429,60937],{"class":109},[36,92431,1772],{"class":98},[36,92433,92434],{"class":38,"line":197},[36,92435,2646],{"class":98},[36,92437,92438],{"class":38,"line":217},[36,92439,247],{"emptyLinePlaceholder":246},[36,92441,92442,92445],{"class":38,"line":223},[36,92443,92444],{"class":55},"    .container",[36,92446,16011],{"class":98},[36,92448,92449,92451,92453,92456,92458],{"class":38,"line":243},[36,92450,55203],{"class":109},[36,92452,51869],{"class":98},[36,92454,92455],{"class":109},"1200",[36,92457,51924],{"class":163},[36,92459,1772],{"class":98},[36,92461,92462,92464,92466,92468,92470],{"class":38,"line":250},[36,92463,55138],{"class":109},[36,92465,51869],{"class":98},[36,92467,807],{"class":109},[36,92469,51988],{"class":109},[36,92471,1772],{"class":98},[36,92473,92474],{"class":38,"line":256},[36,92475,2646],{"class":98},[36,92477,92478],{"class":38,"line":273},[36,92479,247],{"emptyLinePlaceholder":246},[36,92481,92482,92485,92488],{"class":38,"line":278},[36,92483,92484],{"class":55},"    .video",[36,92486,92487],{"class":51733}," video",[36,92489,16011],{"class":98},[36,92491,92492,92494,92496,92498,92500],{"class":38,"line":284},[36,92493,55203],{"class":109},[36,92495,51869],{"class":98},[36,92497,926],{"class":109},[36,92499,942],{"class":163},[36,92501,1772],{"class":98},[36,92503,92504,92506,92508,92510,92512,92514],{"class":38,"line":315},[36,92505,55127],{"class":109},[36,92507,51869],{"class":98},[36,92509,1313],{"class":109},[36,92511,51924],{"class":163},[36,92513,4544],{"class":109},[36,92515,1772],{"class":98},[36,92517,92518],{"class":38,"line":320},[36,92519,2646],{"class":98},[36,92521,92522],{"class":38,"line":326},[36,92523,247],{"emptyLinePlaceholder":246},[36,92525,92526,92529],{"class":38,"line":343},[36,92527,92528],{"class":55},"    .elevator",[36,92530,16011],{"class":98},[36,92532,92533,92535,92537,92539],{"class":38,"line":348},[36,92534,55191],{"class":109},[36,92536,51869],{"class":98},[36,92538,86665],{"class":109},[36,92540,1772],{"class":98},[36,92542,92543,92545,92547,92550,92552],{"class":38,"line":354},[36,92544,55379],{"class":109},[36,92546,51869],{"class":98},[36,92548,92549],{"class":109},"280",[36,92551,51924],{"class":163},[36,92553,1772],{"class":98},[36,92555,92556,92558,92560,92562,92564],{"class":38,"line":370},[36,92557,86859],{"class":109},[36,92559,51869],{"class":98},[36,92561,1313],{"class":109},[36,92563,51924],{"class":163},[36,92565,1772],{"class":98},[36,92567,92568,92570,92572,92574],{"class":38,"line":375},[36,92569,86672],{"class":109},[36,92571,51869],{"class":98},[36,92573,86677],{"class":109},[36,92575,1772],{"class":98},[36,92577,92578,92580,92582,92584],{"class":38,"line":381},[36,92579,62153],{"class":109},[36,92581,51869],{"class":98},[36,92583,61274],{"class":109},[36,92585,1772],{"class":98},[36,92587,92588,92590,92592,92594,92596,92598,92600],{"class":38,"line":399},[36,92589,62409],{"class":109},[36,92591,51869],{"class":98},[36,92593,833],{"class":109},[36,92595,51924],{"class":163},[36,92597,51953],{"class":109},[36,92599,62676],{"class":109},[36,92601,1772],{"class":98},[36,92603,92604,92606,92608,92610,92612],{"class":38,"line":404},[36,92605,55203],{"class":109},[36,92607,51869],{"class":98},[36,92609,1520],{"class":109},[36,92611,51924],{"class":163},[36,92613,1772],{"class":98},[36,92615,92616],{"class":38,"line":410},[36,92617,2646],{"class":98},[36,92619,92620],{"class":38,"line":423},[36,92621,247],{"emptyLinePlaceholder":246},[36,92623,92624,92626,92628],{"class":38,"line":436},[36,92625,92528],{"class":55},[36,92627,1877],{"class":51733},[36,92629,16011],{"class":98},[36,92631,92632,92634,92636,92638],{"class":38,"line":441},[36,92633,55441],{"class":109},[36,92635,51869],{"class":98},[36,92637,61301],{"class":109},[36,92639,1772],{"class":98},[36,92641,92642,92644,92646,92648,92650],{"class":38,"line":447},[36,92643,55127],{"class":109},[36,92645,51869],{"class":98},[36,92647,1060],{"class":109},[36,92649,51924],{"class":163},[36,92651,1772],{"class":98},[36,92653,92654,92656,92658,92660],{"class":38,"line":465},[36,92655,64402],{"class":109},[36,92657,51869],{"class":98},[36,92659,55169],{"class":109},[36,92661,1772],{"class":98},[36,92663,92664,92666,92668,92670],{"class":38,"line":470},[36,92665,57718],{"class":109},[36,92667,51869],{"class":98},[36,92669,52024],{"class":109},[36,92671,1772],{"class":98},[36,92673,92674,92676,92678,92680],{"class":38,"line":476},[36,92675,57848],{"class":109},[36,92677,51869],{"class":98},[36,92679,62502],{"class":109},[36,92681,1772],{"class":98},[36,92683,92684],{"class":38,"line":496},[36,92685,2646],{"class":98},[36,92687,92688],{"class":38,"line":501},[36,92689,247],{"emptyLinePlaceholder":246},[36,92691,92692,92694,92696,92698],{"class":38,"line":507},[36,92693,92528],{"class":55},[36,92695,1877],{"class":51733},[36,92697,64456],{"class":55},[36,92699,16011],{"class":98},[36,92701,92702,92704,92706,92709],{"class":38,"line":517},[36,92703,57848],{"class":109},[36,92705,51869],{"class":98},[36,92707,92708],{"class":109},"#1286ff",[36,92710,1772],{"class":98},[36,92712,92713],{"class":38,"line":522},[36,92714,2646],{"class":98},[36,92716,92717,92719,92721],{"class":38,"line":528},[36,92718,52849],{"class":98},[36,92720,537],{"class":51733},[36,92722,188],{"class":98},[36,92724,92725,92727,92729],{"class":38,"line":10203},[36,92726,52217],{"class":98},[36,92728,51766],{"class":51733},[36,92730,188],{"class":98},[36,92732,92733],{"class":38,"line":10227},[36,92734,247],{"emptyLinePlaceholder":246},[36,92736,92737,92739,92741],{"class":38,"line":10232},[36,92738,179],{"class":98},[36,92740,52232],{"class":51733},[36,92742,188],{"class":98},[36,92744,92745,92747,92749,92751,92753,92756],{"class":38,"line":10237},[36,92746,52576],{"class":98},[36,92748,52043],{"class":51733},[36,92750,53918],{"class":55},[36,92752,176],{"class":98},[36,92754,92755],{"class":59},"\"container\"",[36,92757,188],{"class":98},[36,92759,92760,92762,92764,92766,92768,92771],{"class":38,"line":10242},[36,92761,51773],{"class":98},[36,92763,52043],{"class":51733},[36,92765,53918],{"class":55},[36,92767,176],{"class":98},[36,92769,92770],{"class":59},"\"header\"",[36,92772,188],{"class":98},[36,92774,92775,92777,92779,92781,92783,92786],{"class":38,"line":10251},[36,92776,55666],{"class":98},[36,92778,20],{"class":51733},[36,92780,61489],{"class":55},[36,92782,176],{"class":98},[36,92784,92785],{"class":59},"\"http:\u002F\u002Fpip.itcast.cn\"",[36,92787,188],{"class":98},[36,92789,92790,92792,92794,92796,92798,92801,92803,92805,92807],{"class":38,"line":10256},[36,92791,55734],{"class":98},[36,92793,1941],{"class":51733},[36,92795,55671],{"class":55},[36,92797,176],{"class":98},[36,92799,92800],{"class":59},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[36,92802,55679],{"class":55},[36,92804,176],{"class":98},[36,92806,8103],{"class":59},[36,92808,59559],{"class":98},[36,92810,92811,92813,92815],{"class":38,"line":10262},[36,92812,55839],{"class":98},[36,92814,20],{"class":51733},[36,92816,188],{"class":98},[36,92818,92819,92821,92823],{"class":38,"line":10283},[36,92820,52208],{"class":98},[36,92822,52043],{"class":51733},[36,92824,188],{"class":98},[36,92826,92827,92829,92831,92833,92835,92838],{"class":38,"line":10289},[36,92828,51773],{"class":98},[36,92830,52043],{"class":51733},[36,92832,53918],{"class":55},[36,92834,176],{"class":98},[36,92836,92837],{"class":59},"\"video\"",[36,92839,188],{"class":98},[36,92841,92842,92844,92846,92848,92850,92853,92856,92858,92860],{"class":38,"line":10303},[36,92843,55666],{"class":98},[36,92845,28617],{"class":51733},[36,92847,55671],{"class":55},[36,92849,176],{"class":98},[36,92851,92852],{"class":59},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[36,92854,92855],{"class":55}," controls",[36,92857,55746],{"class":98},[36,92859,28617],{"class":51733},[36,92861,188],{"class":98},[36,92863,92864,92866,92868],{"class":38,"line":10309},[36,92865,52208],{"class":98},[36,92867,52043],{"class":51733},[36,92869,188],{"class":98},[36,92871,92872,92874,92876,92878,92880,92883],{"class":38,"line":10336},[36,92873,51773],{"class":98},[36,92875,52043],{"class":51733},[36,92877,53918],{"class":55},[36,92879,176],{"class":98},[36,92881,92882],{"class":59},"\"elevator\"",[36,92884,188],{"class":98},[36,92886,92887,92889,92891,92893,92895,92897,92900,92902,92904,92907,92909],{"class":38,"line":10345},[36,92888,55666],{"class":98},[36,92890,20],{"class":51733},[36,92892,61489],{"class":55},[36,92894,176],{"class":98},[36,92896,64668],{"class":59},[36,92898,92899],{"class":55}," data-ref",[36,92901,176],{"class":98},[36,92903,92837],{"class":59},[36,92905,92906],{"class":98},">视频介绍\u003C\u002F",[36,92908,20],{"class":51733},[36,92910,188],{"class":98},[36,92912,92913,92915,92917,92919,92921,92923,92925,92927,92930,92933,92935],{"class":38,"line":10351},[36,92914,55666],{"class":98},[36,92916,20],{"class":51733},[36,92918,61489],{"class":55},[36,92920,176],{"class":98},[36,92922,64668],{"class":59},[36,92924,92899],{"class":55},[36,92926,176],{"class":98},[36,92928,92929],{"class":59},"\"intro\"",[36,92931,92932],{"class":98},">课程简介\u003C\u002F",[36,92934,20],{"class":51733},[36,92936,188],{"class":98},[36,92938,92939,92941,92943,92945,92947,92949,92951,92953,92956,92959,92961],{"class":38,"line":10359},[36,92940,55666],{"class":98},[36,92942,20],{"class":51733},[36,92944,61489],{"class":55},[36,92946,176],{"class":98},[36,92948,64668],{"class":59},[36,92950,92899],{"class":55},[36,92952,176],{"class":98},[36,92954,92955],{"class":59},"\"outline\"",[36,92957,92958],{"class":98},">评论列表\u003C\u002F",[36,92960,20],{"class":51733},[36,92962,188],{"class":98},[36,92964,92965,92967,92969],{"class":38,"line":10364},[36,92966,52208],{"class":98},[36,92968,52043],{"class":51733},[36,92970,188],{"class":98},[36,92972,92973,92975,92977],{"class":38,"line":17043},[36,92974,52849],{"class":98},[36,92976,52043],{"class":51733},[36,92978,188],{"class":98},[36,92980,92981,92983,92985,92987,92989,92992,92994,92996],{"class":38,"line":17049},[36,92982,52576],{"class":98},[36,92984,52245],{"class":51733},[36,92986,55671],{"class":55},[36,92988,176],{"class":98},[36,92990,92991],{"class":59},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[36,92993,55746],{"class":98},[36,92995,52245],{"class":51733},[36,92997,188],{"class":98},[36,92999,93000,93002,93004],{"class":38,"line":17072},[36,93001,52576],{"class":98},[36,93003,52245],{"class":51733},[36,93005,188],{"class":98},[36,93007,93008],{"class":38,"line":17078},[36,93009,93010],{"class":42},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[36,93012,93013,93015,93017,93019,93021,93023,93025,93028],{"class":38,"line":17101},[36,93014,11660],{"class":163},[36,93016,92487],{"class":109},[36,93018,14003],{"class":163},[36,93020,54828],{"class":98},[36,93022,54831],{"class":55},[36,93024,621],{"class":98},[36,93026,93027],{"class":59},"'video'",[36,93029,627],{"class":98},[36,93031,93032],{"class":38,"line":17115},[36,93033,93034],{"class":42},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[36,93036,93037,93040,93042,93044,93046,93049,93051],{"class":38,"line":17135},[36,93038,93039],{"class":98},"    video.ontimeupdate ",[36,93041,176],{"class":163},[36,93043,88787],{"class":98},[36,93045,91605],{"class":55},[36,93047,93048],{"class":98},"(() ",[36,93050,85154],{"class":163},[36,93052,16011],{"class":98},[36,93054,93055],{"class":38,"line":17141},[36,93056,93057],{"class":42},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[36,93059,93060],{"class":38,"line":17152},[36,93061,93062],{"class":42},"      \u002F\u002F 控制台输出当前的时间\n",[36,93064,93065,93068],{"class":38,"line":17175},[36,93066,93067],{"class":42},"      \u002F\u002F console.log(video.currentTime)",[36,93069,93070],{"class":42},"  \u002F\u002F获得当前的视频时间\n",[36,93072,93073],{"class":38,"line":17197},[36,93074,93075],{"class":42},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[36,93077,93078,93080,93082,93084,93087],{"class":38,"line":17202},[36,93079,75115],{"class":98},[36,93081,72086],{"class":55},[36,93083,621],{"class":98},[36,93085,93086],{"class":59},"'currentTime'",[36,93088,93089],{"class":98},", video.currentTime)\n",[36,93091,93092,93094,93096],{"class":38,"line":17208},[36,93093,54967],{"class":98},[36,93095,6861],{"class":109},[36,93097,627],{"class":98},[36,93099,93100],{"class":38,"line":17222},[36,93101,93102],{"class":42},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[36,93104,93105,93108,93111,93113,93116,93118],{"class":38,"line":17235},[36,93106,93107],{"class":98},"    video.",[36,93109,93110],{"class":55},"onloadeddata",[36,93112,14003],{"class":163},[36,93114,93115],{"class":98}," () ",[36,93117,85154],{"class":163},[36,93119,16011],{"class":98},[36,93121,93122],{"class":38,"line":17240},[36,93123,60444],{"class":42},[36,93125,93126],{"class":38,"line":17254},[36,93127,93128],{"class":42},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[36,93130,93131,93134,93136,93139,93141,93143,93145,93147,93149],{"class":38,"line":17259},[36,93132,93133],{"class":98},"      video.currentTime ",[36,93135,176],{"class":163},[36,93137,93138],{"class":98}," localStorage.",[36,93140,72117],{"class":55},[36,93142,621],{"class":98},[36,93144,93086],{"class":59},[36,93146,14153],{"class":98},[36,93148,71789],{"class":163},[36,93150,47766],{"class":109},[36,93152,93153],{"class":38,"line":17265},[36,93154,2646],{"class":98},[36,93156,93157,93159,93161],{"class":38,"line":17270},[36,93158,52849],{"class":98},[36,93160,52245],{"class":51733},[36,93162,188],{"class":98},[36,93164,93165,93167,93169],{"class":38,"line":17284},[36,93166,52217],{"class":98},[36,93168,52232],{"class":51733},[36,93170,188],{"class":98},[36,93172,93173],{"class":38,"line":17289},[36,93174,247],{"emptyLinePlaceholder":246},[36,93176,93177,93179,93181],{"class":38,"line":17294},[36,93178,52217],{"class":98},[36,93180,51068],{"class":51733},[36,93182,188],{"class":98},[537,93184,93185],{},"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":31,"searchDepth":46,"depth":46,"links":93187},[93188,93193,93197,93198,93199,93204,93209,93210,93211,93212,93219,93224,93225,93235,93239,93240,93244],{"id":77123,"depth":46,"text":77124,"children":93189},[93190,93191,93192],{"id":77127,"depth":52,"text":77128},{"id":77152,"depth":52,"text":77153},{"id":77164,"depth":52,"text":77165},{"id":77176,"depth":46,"text":77177,"children":93194},[93195,93196],{"id":77180,"depth":52,"text":77181},{"id":77195,"depth":52,"text":77196},{"id":77247,"depth":46,"text":77248},{"id":77291,"depth":46,"text":77292},{"id":77308,"depth":46,"text":77309,"children":93200},[93201,93202,93203],{"id":77312,"depth":52,"text":77313},{"id":77325,"depth":52,"text":77326},{"id":77430,"depth":52,"text":77431},{"id":77719,"depth":46,"text":77720,"children":93205},[93206,93207,93208],{"id":77723,"depth":52,"text":77724},{"id":78166,"depth":52,"text":78167},{"id":78577,"depth":52,"text":78578},{"id":78640,"depth":46,"text":78641},{"id":78719,"depth":46,"text":78720},{"id":78812,"depth":46,"text":78813},{"id":80657,"depth":46,"text":80658,"children":93213},[93214,93215,93216,93217,93218],{"id":80661,"depth":52,"text":80662},{"id":80673,"depth":52,"text":80674},{"id":80892,"depth":52,"text":80893},{"id":80910,"depth":52,"text":80911},{"id":80970,"depth":52,"text":80971},{"id":85238,"depth":46,"text":85239,"children":93220},[93221,93222,93223],{"id":85242,"depth":52,"text":85243},{"id":85260,"depth":52,"text":85261},{"id":85286,"depth":52,"text":85287},{"id":85295,"depth":46,"text":85296},{"id":85317,"depth":46,"text":85318,"children":93226},[93227,93228,93229,93230,93231,93232,93233,93234],{"id":85321,"depth":52,"text":85322},{"id":85582,"depth":52,"text":85583},{"id":85768,"depth":52,"text":85769},{"id":86135,"depth":52,"text":86136},{"id":86251,"depth":52,"text":86252},{"id":86287,"depth":52,"text":86288},{"id":86334,"depth":52,"text":86335},{"id":86368,"depth":52,"text":86369},{"id":87731,"depth":46,"text":87732,"children":93236},[93237,93238],{"id":87735,"depth":52,"text":87736},{"id":87772,"depth":52,"text":87773},{"id":89127,"depth":46,"text":89128},{"id":89498,"depth":46,"text":89499,"children":93241},[93242,93243],{"id":89502,"depth":52,"text":89503},{"id":89536,"depth":52,"text":89537},{"id":90265,"depth":46,"text":90266,"children":93245},[93246,93247,93248,93249],{"id":90269,"depth":52,"text":90270},{"id":91227,"depth":52,"text":91228},{"id":92169,"depth":52,"text":92170},{"id":92243,"depth":52,"text":92244},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":77112,"description":542},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93256,"title":93257,"body":93258,"description":93269,"extension":543,"meta":93270,"navigation":246,"path":93272,"seo":93273,"stem":93274,"__hash__":93275},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93259,"toc":93267},[93260],[14,93261,93262,93263],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[20,93264,93265],{"href":93265,"rel":93266},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24],{"title":31,"searchDepth":46,"depth":46,"links":93268},[],"三件套第三套学习",{"category":93271},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93257,"description":93269},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93277,"title":93278,"body":93279,"description":542,"extension":543,"meta":93384,"navigation":246,"path":93385,"seo":93386,"stem":93387,"__hash__":93388},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93280,"toc":93379},[93281,93288,93291,93294,93297,93301,93310,93313,93316,93320,93329,93332,93336,93339,93359,93362,93376],[14,93282,93283],{},[20,93284,93287],{"href":93285,"rel":93286},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93289,93278],{"id":93290},"_1安装",[14,93292,93293],{},"numpy是科学计算基础库,底层是C语言",[14,93295,93296],{},"三种方式：",[559,93298,93300],{"id":93299},"_11-通过pip安装","1.1 通过pip安装",[26,93302,93304],{"className":30811,"code":93303,"language":30813,"meta":31,"style":31},"pip install numpy\n",[33,93305,93306],{"__ignoreMap":31},[36,93307,93308],{"class":38,"line":39},[36,93309,93303],{"class":98},[14,93311,93312],{},"首选方式，自动处理依赖项",[14,93314,93315],{},"在提示系统命令符中使用cmd",[559,93317,93319],{"id":93318},"_12-通过anaconda安装","1.2 通过Anaconda安装",[26,93321,93323],{"className":30811,"code":93322,"language":30813,"meta":31,"style":31},"conda install numpy\n",[33,93324,93325],{"__ignoreMap":31},[36,93326,93327],{"class":38,"line":39},[36,93328,93322],{"class":98},[14,93330,93331],{},"自动解决环境依赖",[559,93333,93335],{"id":93334},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,93337,93338],{},"对于Debian\u002FUbuntu",[26,93340,93342],{"className":30811,"code":93341,"language":30813,"meta":31,"style":31},"sudo apt-get install python3-numpy\n",[33,93343,93344],{"__ignoreMap":31},[36,93345,93346,93349,93351,93354,93356],{"class":38,"line":39},[36,93347,93348],{"class":98},"sudo apt",[36,93350,1146],{"class":163},[36,93352,93353],{"class":98},"get install python3",[36,93355,1146],{"class":163},[36,93357,93358],{"class":98},"numpy\n",[14,93360,93361],{},"对于Fedora:",[26,93363,93365],{"className":30811,"code":93364,"language":30813,"meta":31,"style":31},"sudo dnf install python3-numpy\n",[33,93366,93367],{"__ignoreMap":31},[36,93368,93369,93372,93374],{"class":38,"line":39},[36,93370,93371],{"class":98},"sudo dnf install python3",[36,93373,1146],{"class":163},[36,93375,93358],{"class":98},[537,93377,93378],{},"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":31,"searchDepth":46,"depth":46,"links":93380},[93381,93382,93383],{"id":93299,"depth":46,"text":93300},{"id":93318,"depth":46,"text":93319},{"id":93334,"depth":46,"text":93335},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93278,"description":542},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93390,"title":93391,"body":93392,"description":542,"extension":543,"meta":93505,"navigation":246,"path":93506,"seo":93507,"stem":93508,"__hash__":93509},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93393,"toc":93503},[93394,93397,93400,93403,93406,93409,93412,93415,93418,93421,93497,93500],[10,93395,93391],{"id":93396},"_10算数函数",[14,93398,93399],{},"加减乘除运算跟python基础语法没区别",[14,93401,93402],{},"除了python那种方法外还可以使用函数",[14,93404,93405],{},"加：np.add(a,b)",[14,93407,93408],{},"减：np.subtract(a,b)",[14,93410,93411],{},"乘：np.multiply(a,b)",[14,93413,93414],{},"除：np.divide(a,b) == a\u002Fb",[14,93416,93417],{},"取余：np.mod(a,b) == a%b",[14,93419,93420],{},"必须会的用法：",[26,93422,93424],{"className":30811,"code":93423,"language":30813,"meta":31,"style":31},"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",[33,93425,93426,93448,93469,93479,93492],{"__ignoreMap":31},[36,93427,93428,93430,93432,93435,93437,93440,93442,93444,93446],{"class":38,"line":39},[36,93429,20],{"class":98},[36,93431,176],{"class":163},[36,93433,93434],{"class":98},"np.arange(",[36,93436,1034],{"class":109},[36,93438,93439],{"class":98},").reshape(",[36,93441,689],{"class":109},[36,93443,992],{"class":98},[36,93445,689],{"class":109},[36,93447,627],{"class":98},[36,93449,93450,93452,93454,93457,93459,93461,93463,93465,93467],{"class":38,"line":46},[36,93451,878],{"class":98},[36,93453,176],{"class":163},[36,93455,93456],{"class":98},"np.array([",[36,93458,1060],{"class":109},[36,93460,992],{"class":98},[36,93462,1060],{"class":109},[36,93464,992],{"class":98},[36,93466,1060],{"class":109},[36,93468,5108],{"class":98},[36,93470,93471,93474,93476],{"class":38,"line":52},[36,93472,93473],{"class":98},"result",[36,93475,176],{"class":163},[36,93477,93478],{"class":98},"np.empty_like(a)\n",[36,93480,93481,93484,93487,93489],{"class":38,"line":66},[36,93482,93483],{"class":98},"np.add(a,b,",[36,93485,93486],{"class":5667},"out",[36,93488,176],{"class":163},[36,93490,93491],{"class":98},"result)\n",[36,93493,93494],{"class":38,"line":72},[36,93495,93496],{"class":98},"result\n",[14,93498,93499],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[537,93501,93502],{},"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":31,"searchDepth":46,"depth":46,"links":93504},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93391,"description":542},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93511,"title":93512,"body":93513,"description":542,"extension":543,"meta":94275,"navigation":246,"path":94276,"seo":94277,"stem":94278,"__hash__":94279},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93514,"toc":94262},[93515,93518,93521,93524,93528,93567,93571,93615,93675,93679,93682,93721,93724,93769,93773,93809,93813,93882,93886,93950,93954,93957,93960,93963,93966,94002,94006,94046,94050,94122,94125,94129,94192,94196,94259],[10,93516,93512],{"id":93517},"_11统计函数",[14,93519,93520],{},"sum max min mean",[14,93522,93523],{},"这些有axis参数，可以指定方向",[559,93525,93527],{"id":93526},"_111-sum求和函数","11.1 sum()求和函数",[26,93529,93531],{"className":30811,"code":93530,"language":30813,"meta":31,"style":31},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[33,93532,93533,93538,93559],{"__ignoreMap":31},[36,93534,93535],{"class":38,"line":39},[36,93536,93537],{"class":42},"#创建一维数组\n",[36,93539,93540,93542,93544,93547,93549,93551,93553,93555,93557],{"class":38,"line":46},[36,93541,20],{"class":98},[36,93543,176],{"class":163},[36,93545,93546],{"class":98},"np.random.randint(",[36,93548,833],{"class":109},[36,93550,992],{"class":98},[36,93552,926],{"class":109},[36,93554,992],{"class":98},[36,93556,1313],{"class":109},[36,93558,627],{"class":98},[36,93560,93561,93564],{"class":38,"line":52},[36,93562,93563],{"class":98},"np.sum(a)",[36,93565,93566],{"class":42},"#求和\n",[559,93568,93570],{"id":93569},"_112-max求最大值函数","11.2 max()求最大值函数",[26,93572,93574],{"className":30811,"code":93573,"language":30813,"meta":31,"style":31},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[33,93575,93576,93580,93600,93605,93610],{"__ignoreMap":31},[36,93577,93578],{"class":38,"line":39},[36,93579,93537],{"class":42},[36,93581,93582,93584,93586,93588,93590,93592,93594,93596,93598],{"class":38,"line":46},[36,93583,20],{"class":98},[36,93585,176],{"class":163},[36,93587,93546],{"class":98},[36,93589,833],{"class":109},[36,93591,992],{"class":98},[36,93593,926],{"class":109},[36,93595,992],{"class":98},[36,93597,1313],{"class":109},[36,93599,627],{"class":98},[36,93601,93602],{"class":38,"line":52},[36,93603,93604],{"class":98},"np.max(a)\n",[36,93606,93607],{"class":38,"line":66},[36,93608,93609],{"class":42},"#最大索引(求最大元素的索引)arg\n",[36,93611,93612],{"class":38,"line":72},[36,93613,93614],{"class":98},"np.argmax(a)\n",[26,93616,93618],{"className":30811,"code":93617,"language":30813,"meta":31,"style":31},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[33,93619,93620,93641,93661,93665],{"__ignoreMap":31},[36,93621,93622,93624,93626,93629,93631,93633,93635,93637,93639],{"class":38,"line":39},[36,93623,11358],{"class":98},[36,93625,176],{"class":163},[36,93627,93628],{"class":98}," np.array([",[36,93630,833],{"class":109},[36,93632,12874],{"class":98},[36,93634,933],{"class":109},[36,93636,12874],{"class":98},[36,93638,689],{"class":109},[36,93640,5108],{"class":98},[36,93642,93643,93645,93647,93649,93651,93653,93655,93657,93659],{"class":38,"line":46},[36,93644,11384],{"class":98},[36,93646,176],{"class":163},[36,93648,93628],{"class":98},[36,93650,689],{"class":109},[36,93652,12874],{"class":98},[36,93654,694],{"class":109},[36,93656,12874],{"class":98},[36,93658,908],{"class":109},[36,93660,5108],{"class":98},[36,93662,93663],{"class":38,"line":52},[36,93664,247],{"emptyLinePlaceholder":246},[36,93666,93667,93669,93672],{"class":38,"line":66},[36,93668,30848],{"class":109},[36,93670,93671],{"class":98},"(np.maximum(a, b))   ",[36,93673,93674],{"class":42},"# [3 5 4]，每个位置上取较大值\n",[559,93676,93678],{"id":93677},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,93680,93681],{},"①一维数组：",[26,93683,93685],{"className":30811,"code":93684,"language":30813,"meta":31,"style":31},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[33,93686,93687,93691,93711,93716],{"__ignoreMap":31},[36,93688,93689],{"class":38,"line":39},[36,93690,93537],{"class":42},[36,93692,93693,93695,93697,93699,93701,93703,93705,93707,93709],{"class":38,"line":46},[36,93694,20],{"class":98},[36,93696,176],{"class":163},[36,93698,93546],{"class":98},[36,93700,833],{"class":109},[36,93702,992],{"class":98},[36,93704,926],{"class":109},[36,93706,992],{"class":98},[36,93708,1313],{"class":109},[36,93710,627],{"class":98},[36,93712,93713],{"class":38,"line":52},[36,93714,93715],{"class":42},"#求平均值\n",[36,93717,93718],{"class":38,"line":66},[36,93719,93720],{"class":98},"np.mean(a)\n",[14,93722,93723],{},"②二维数组",[26,93725,93727],{"className":30811,"code":93726,"language":30813,"meta":31,"style":31},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[33,93728,93729,93734,93759,93764],{"__ignoreMap":31},[36,93730,93731],{"class":38,"line":39},[36,93732,93733],{"class":42},"#二维数组\n",[36,93735,93736,93739,93741,93743,93745,93747,93749,93751,93753,93755,93757],{"class":38,"line":46},[36,93737,93738],{"class":98},"aa",[36,93740,176],{"class":163},[36,93742,93434],{"class":98},[36,93744,833],{"class":109},[36,93746,992],{"class":98},[36,93748,1137],{"class":109},[36,93750,93439],{"class":98},[36,93752,689],{"class":109},[36,93754,992],{"class":98},[36,93756,908],{"class":109},[36,93758,627],{"class":98},[36,93760,93761],{"class":38,"line":52},[36,93762,93763],{"class":42},"#对数组中的所有数求平均\n",[36,93765,93766],{"class":38,"line":66},[36,93767,93768],{"class":98},"np.mean(aa)\n",[559,93770,93772],{"id":93771},"_114-median求中位数函数","11.4 median()求中位数函数",[26,93774,93776],{"className":30811,"code":93775,"language":30813,"meta":31,"style":31},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[33,93777,93778,93783,93799,93804],{"__ignoreMap":31},[36,93779,93780],{"class":38,"line":39},[36,93781,93782],{"class":42},"#求中位数\n",[36,93784,93785,93787,93789,93791,93793,93795,93797],{"class":38,"line":46},[36,93786,878],{"class":98},[36,93788,176],{"class":163},[36,93790,93434],{"class":98},[36,93792,833],{"class":109},[36,93794,992],{"class":98},[36,93796,1060],{"class":109},[36,93798,627],{"class":98},[36,93800,93801],{"class":38,"line":52},[36,93802,93803],{"class":98},"np.median(b)\n",[36,93805,93806],{"class":38,"line":66},[36,93807,93808],{"class":42},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[559,93810,93812],{"id":93811},"_115-power求幂运算函数","11.5 power()求幂运算函数",[26,93814,93816],{"className":30811,"code":93815,"language":30813,"meta":31,"style":31},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[33,93817,93818,93834,93839,93844,93853,93858,93867],{"__ignoreMap":31},[36,93819,93820,93822,93824,93826,93828,93830,93832],{"class":38,"line":39},[36,93821,878],{"class":98},[36,93823,176],{"class":163},[36,93825,93434],{"class":98},[36,93827,833],{"class":109},[36,93829,992],{"class":98},[36,93831,1060],{"class":109},[36,93833,627],{"class":98},[36,93835,93836],{"class":38,"line":46},[36,93837,93838],{"class":42},"#幂运算\n",[36,93840,93841],{"class":38,"line":52},[36,93842,93843],{"class":42},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[36,93845,93846,93849,93851],{"class":38,"line":66},[36,93847,93848],{"class":98},"np.power(b,",[36,93850,694],{"class":109},[36,93852,627],{"class":98},[36,93854,93855],{"class":38,"line":72},[36,93856,93857],{"class":42},"#或者以下代码，将数据存储起来\n",[36,93859,93860,93862,93864],{"class":38,"line":82},[36,93861,1458],{"class":98},[36,93863,176],{"class":163},[36,93865,93866],{"class":98},"np.empty_like(b)\n",[36,93868,93869,93871,93873,93875,93877,93879],{"class":38,"line":88},[36,93870,93848],{"class":98},[36,93872,694],{"class":109},[36,93874,992],{"class":98},[36,93876,93486],{"class":5667},[36,93878,176],{"class":163},[36,93880,93881],{"class":98},"y)\n",[559,93883,93885],{"id":93884},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[26,93887,93889],{"className":30811,"code":93888,"language":30813,"meta":31,"style":31},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[33,93890,93891,93907,93912,93917,93921,93939],{"__ignoreMap":31},[36,93892,93893,93895,93897,93899,93901,93903,93905],{"class":38,"line":39},[36,93894,878],{"class":98},[36,93896,176],{"class":163},[36,93898,93434],{"class":98},[36,93900,833],{"class":109},[36,93902,992],{"class":98},[36,93904,1060],{"class":109},[36,93906,627],{"class":98},[36,93908,93909],{"class":38,"line":46},[36,93910,93911],{"class":42},"#开方\n",[36,93913,93914],{"class":38,"line":52},[36,93915,93916],{"class":98},"np.sqrt(b)\n",[36,93918,93919],{"class":38,"line":66},[36,93920,93857],{"class":42},[36,93922,93923,93925,93927,93930,93933,93935,93937],{"class":38,"line":72},[36,93924,1458],{"class":98},[36,93926,176],{"class":163},[36,93928,93929],{"class":98},"np.empty_like(b,",[36,93931,93932],{"class":5667},"dtype",[36,93934,176],{"class":163},[36,93936,660],{"class":109},[36,93938,627],{"class":98},[36,93940,93941,93944,93946,93948],{"class":38,"line":82},[36,93942,93943],{"class":98},"np.sqrt(b,",[36,93945,93486],{"class":5667},[36,93947,176],{"class":163},[36,93949,93881],{"class":98},[559,93951,93953],{"id":93952},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,93955,93956],{},"对数组中的元素累计求和，可指定轴",[14,93958,93959],{},"#累计求和的意思是：",[14,93961,93962],{},"a = np.array([1, 2, 3, 4])",[14,93964,93965],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[26,93967,93969],{"className":30811,"code":93968,"language":30813,"meta":31,"style":31},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[33,93970,93971,93987,93992,93997],{"__ignoreMap":31},[36,93972,93973,93975,93977,93979,93981,93983,93985],{"class":38,"line":39},[36,93974,878],{"class":98},[36,93976,176],{"class":163},[36,93978,93434],{"class":98},[36,93980,833],{"class":109},[36,93982,992],{"class":98},[36,93984,1060],{"class":109},[36,93986,627],{"class":98},[36,93988,93989],{"class":38,"line":46},[36,93990,93991],{"class":98},"np.cumsum(b)\n",[36,93993,93994],{"class":38,"line":52},[36,93995,93996],{"class":42},"#结果：\n",[36,93998,93999],{"class":38,"line":66},[36,94000,94001],{"class":42},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[559,94003,94005],{"id":94004},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[26,94007,94009],{"className":30811,"code":94008,"language":30813,"meta":31,"style":31},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[33,94010,94011,94027,94032,94037,94041],{"__ignoreMap":31},[36,94012,94013,94015,94017,94019,94021,94023,94025],{"class":38,"line":39},[36,94014,878],{"class":98},[36,94016,176],{"class":163},[36,94018,93434],{"class":98},[36,94020,833],{"class":109},[36,94022,992],{"class":98},[36,94024,1060],{"class":109},[36,94026,627],{"class":98},[36,94028,94029],{"class":38,"line":46},[36,94030,94031],{"class":42},"#对数组中的元素累计求积，可指定轴\n",[36,94033,94034],{"class":38,"line":52},[36,94035,94036],{"class":98},"np.cumprod(b)\n",[36,94038,94039],{"class":38,"line":66},[36,94040,93996],{"class":42},[36,94042,94043],{"class":38,"line":72},[36,94044,94045],{"class":42},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[559,94047,94049],{"id":94048},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[26,94051,94053],{"className":30811,"code":94052,"language":30813,"meta":31,"style":31},"#删除数组中的重复数据，并对数据进行排序\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",[33,94054,94055,94060,94108,94113,94117],{"__ignoreMap":31},[36,94056,94057],{"class":38,"line":39},[36,94058,94059],{"class":42},"#删除数组中的重复数据，并对数据进行排序\n",[36,94061,94062,94064,94066,94068,94070,94072,94074,94076,94078,94080,94082,94084,94086,94088,94090,94092,94094,94096,94098,94100,94102,94104,94106],{"class":38,"line":46},[36,94063,20],{"class":98},[36,94065,176],{"class":163},[36,94067,93456],{"class":98},[36,94069,833],{"class":109},[36,94071,992],{"class":98},[36,94073,694],{"class":109},[36,94075,992],{"class":98},[36,94077,689],{"class":109},[36,94079,992],{"class":98},[36,94081,1112],{"class":109},[36,94083,992],{"class":98},[36,94085,689],{"class":109},[36,94087,992],{"class":98},[36,94089,1060],{"class":109},[36,94091,992],{"class":98},[36,94093,813],{"class":109},[36,94095,992],{"class":98},[36,94097,807],{"class":109},[36,94099,992],{"class":98},[36,94101,1388],{"class":109},[36,94103,992],{"class":98},[36,94105,908],{"class":109},[36,94107,5108],{"class":98},[36,94109,94110],{"class":38,"line":52},[36,94111,94112],{"class":98},"np.unique(a)\n",[36,94114,94115],{"class":38,"line":66},[36,94116,93996],{"class":42},[36,94118,94119],{"class":38,"line":72},[36,94120,94121],{"class":42},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,94123,94124],{},"升序形式排序",[559,94126,94128],{"id":94127},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[26,94130,94132],{"className":30811,"code":94131,"language":30813,"meta":31,"style":31},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[33,94133,94134,94182,94187],{"__ignoreMap":31},[36,94135,94136,94138,94140,94142,94144,94146,94148,94150,94152,94154,94156,94158,94160,94162,94164,94166,94168,94170,94172,94174,94176,94178,94180],{"class":38,"line":39},[36,94137,20],{"class":98},[36,94139,176],{"class":163},[36,94141,93456],{"class":98},[36,94143,833],{"class":109},[36,94145,992],{"class":98},[36,94147,694],{"class":109},[36,94149,992],{"class":98},[36,94151,689],{"class":109},[36,94153,992],{"class":98},[36,94155,1112],{"class":109},[36,94157,992],{"class":98},[36,94159,689],{"class":109},[36,94161,992],{"class":98},[36,94163,1060],{"class":109},[36,94165,992],{"class":98},[36,94167,813],{"class":109},[36,94169,992],{"class":98},[36,94171,807],{"class":109},[36,94173,992],{"class":98},[36,94175,1388],{"class":109},[36,94177,992],{"class":98},[36,94179,908],{"class":109},[36,94181,5108],{"class":98},[36,94183,94184],{"class":38,"line":46},[36,94185,94186],{"class":42},"#返回数组中非零元素的索引\n",[36,94188,94189],{"class":38,"line":52},[36,94190,94191],{"class":98},"np.nonzero(a)\n",[559,94193,94195],{"id":94194},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[26,94197,94199],{"className":30811,"code":94198,"language":30813,"meta":31,"style":31},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[33,94200,94201,94249,94254],{"__ignoreMap":31},[36,94202,94203,94205,94207,94209,94211,94213,94215,94217,94219,94221,94223,94225,94227,94229,94231,94233,94235,94237,94239,94241,94243,94245,94247],{"class":38,"line":39},[36,94204,20],{"class":98},[36,94206,176],{"class":163},[36,94208,93456],{"class":98},[36,94210,833],{"class":109},[36,94212,992],{"class":98},[36,94214,694],{"class":109},[36,94216,992],{"class":98},[36,94218,689],{"class":109},[36,94220,992],{"class":98},[36,94222,1112],{"class":109},[36,94224,992],{"class":98},[36,94226,689],{"class":109},[36,94228,992],{"class":98},[36,94230,1060],{"class":109},[36,94232,992],{"class":98},[36,94234,813],{"class":109},[36,94236,992],{"class":98},[36,94238,807],{"class":109},[36,94240,992],{"class":98},[36,94242,1388],{"class":109},[36,94244,992],{"class":98},[36,94246,908],{"class":109},[36,94248,5108],{"class":98},[36,94250,94251],{"class":38,"line":46},[36,94252,94253],{"class":42},"#计算一组数中最大值与最小值的差，可指定轴\n",[36,94255,94256],{"class":38,"line":52},[36,94257,94258],{"class":98},"np.ptp(a)\n",[537,94260,94261],{},"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":31,"searchDepth":46,"depth":46,"links":94263},[94264,94265,94266,94267,94268,94269,94270,94271,94272,94273,94274],{"id":93526,"depth":46,"text":93527},{"id":93569,"depth":46,"text":93570},{"id":93677,"depth":46,"text":93678},{"id":93771,"depth":46,"text":93772},{"id":93811,"depth":46,"text":93812},{"id":93884,"depth":46,"text":93885},{"id":93952,"depth":46,"text":93953},{"id":94004,"depth":46,"text":94005},{"id":94048,"depth":46,"text":94049},{"id":94127,"depth":46,"text":94128},{"id":94194,"depth":46,"text":94195},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93512,"description":542},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94281,"title":94282,"body":94283,"description":542,"extension":543,"meta":94938,"navigation":246,"path":94939,"seo":94940,"stem":94941,"__hash__":94942},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94284,"toc":94926},[94285,94288,94292,94295,94511,94515,94518,94727,94731,94797,94802,94806,94809,94812,94850,94854,94857,94862,94866,94869,94872,94877,94881,94884,94888,94891,94894,94899,94903,94906,94909,94914,94918,94923],[10,94286,94282],{"id":94287},"_12其他常用函数",[559,94289,94291],{"id":94290},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,94293,94294],{},"将数组的数据按照行列复制扩展",[26,94296,94298],{"className":30811,"code":94297,"language":30813,"meta":31,"style":31},"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",[33,94299,94300,94316,94325,94329,94334,94339,94352,94356,94361,94366,94371,94375,94380,94404,94416,94420,94424,94429,94434,94439,94444,94448,94461,94465,94469,94474,94479,94484,94489,94494,94498,94502,94507],{"__ignoreMap":31},[36,94301,94302,94304,94306,94308,94310,94312,94314],{"class":38,"line":39},[36,94303,20],{"class":98},[36,94305,176],{"class":163},[36,94307,93434],{"class":98},[36,94309,833],{"class":109},[36,94311,992],{"class":98},[36,94313,933],{"class":109},[36,94315,627],{"class":98},[36,94317,94318,94321,94323],{"class":38,"line":46},[36,94319,94320],{"class":98},"np.tile(a,",[36,94322,694],{"class":109},[36,94324,627],{"class":98},[36,94326,94327],{"class":38,"line":52},[36,94328,93996],{"class":42},[36,94330,94331],{"class":38,"line":66},[36,94332,94333],{"class":42},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[36,94335,94336],{"class":38,"line":72},[36,94337,94338],{"class":42},"#行复制两次，列复制三次\n",[36,94340,94341,94344,94346,94348,94350],{"class":38,"line":82},[36,94342,94343],{"class":98},"np.tile(a,(",[36,94345,694],{"class":109},[36,94347,992],{"class":98},[36,94349,689],{"class":109},[36,94351,30930],{"class":98},[36,94353,94354],{"class":38,"line":88},[36,94355,93996],{"class":42},[36,94357,94358],{"class":38,"line":113},[36,94359,94360],{"class":59},"'''\n",[36,94362,94363],{"class":38,"line":119},[36,94364,94365],{"class":59},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[36,94367,94368],{"class":38,"line":131},[36,94369,94370],{"class":59},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[36,94372,94373],{"class":38,"line":137},[36,94374,94360],{"class":59},[36,94376,94377],{"class":38,"line":147},[36,94378,94379],{"class":42},"#创建二维数组\n",[36,94381,94382,94384,94386,94388,94390,94392,94394,94396,94398,94400,94402],{"class":38,"line":153},[36,94383,93738],{"class":98},[36,94385,176],{"class":163},[36,94387,93434],{"class":98},[36,94389,833],{"class":109},[36,94391,992],{"class":98},[36,94393,1137],{"class":109},[36,94395,93439],{"class":98},[36,94397,908],{"class":109},[36,94399,992],{"class":98},[36,94401,689],{"class":109},[36,94403,627],{"class":98},[36,94405,94406,94409,94411,94413],{"class":38,"line":191},[36,94407,94408],{"class":98},"np.tile(aa,",[36,94410,694],{"class":109},[36,94412,1043],{"class":98},[36,94414,94415],{"class":42},"#一个数的时候就是行\n",[36,94417,94418],{"class":38,"line":197},[36,94419,93996],{"class":42},[36,94421,94422],{"class":38,"line":217},[36,94423,94360],{"class":59},[36,94425,94426],{"class":38,"line":223},[36,94427,94428],{"class":59},"array([[ 1,  2,  3,  1,  2,  3],\n",[36,94430,94431],{"class":38,"line":243},[36,94432,94433],{"class":59},"       [ 4,  5,  6,  4,  5,  6],\n",[36,94435,94436],{"class":38,"line":250},[36,94437,94438],{"class":59},"       [ 7,  8,  9,  7,  8,  9],\n",[36,94440,94441],{"class":38,"line":256},[36,94442,94443],{"class":59},"       [10, 11, 12, 10, 11, 12]])\n",[36,94445,94446],{"class":38,"line":273},[36,94447,94360],{"class":59},[36,94449,94450,94453,94455,94457,94459],{"class":38,"line":278},[36,94451,94452],{"class":98},"np.tile(aa,(",[36,94454,694],{"class":109},[36,94456,992],{"class":98},[36,94458,689],{"class":109},[36,94460,30930],{"class":98},[36,94462,94463],{"class":38,"line":284},[36,94464,93996],{"class":42},[36,94466,94467],{"class":38,"line":315},[36,94468,94360],{"class":59},[36,94470,94471],{"class":38,"line":320},[36,94472,94473],{"class":59},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[36,94475,94476],{"class":38,"line":326},[36,94477,94478],{"class":59},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[36,94480,94481],{"class":38,"line":343},[36,94482,94483],{"class":59},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[36,94485,94486],{"class":38,"line":348},[36,94487,94488],{"class":59},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[36,94490,94491],{"class":38,"line":354},[36,94492,94493],{"class":59},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[36,94495,94496],{"class":38,"line":370},[36,94497,94478],{"class":59},[36,94499,94500],{"class":38,"line":375},[36,94501,94483],{"class":59},[36,94503,94504],{"class":38,"line":381},[36,94505,94506],{"class":59},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[36,94508,94509],{"class":38,"line":399},[36,94510,94360],{"class":59},[559,94512,94514],{"id":94513},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,94516,94517],{},"repeat()将数组中的每个元素重复若干次",[26,94519,94521],{"className":30811,"code":94520,"language":30813,"meta":31,"style":31},"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",[33,94522,94523,94539,94548,94552,94557,94581,94586,94595,94599,94604,94608,94613,94629,94633,94637,94642,94647,94652,94656,94661,94665,94670,94675,94679,94695,94699,94703,94708,94713,94718,94723],{"__ignoreMap":31},[36,94524,94525,94527,94529,94531,94533,94535,94537],{"class":38,"line":39},[36,94526,20],{"class":98},[36,94528,176],{"class":163},[36,94530,93434],{"class":98},[36,94532,833],{"class":109},[36,94534,992],{"class":98},[36,94536,933],{"class":109},[36,94538,627],{"class":98},[36,94540,94541,94544,94546],{"class":38,"line":46},[36,94542,94543],{"class":98},"np.repeat(a,",[36,94545,689],{"class":109},[36,94547,627],{"class":98},[36,94549,94550],{"class":38,"line":52},[36,94551,93996],{"class":42},[36,94553,94554],{"class":38,"line":66},[36,94555,94556],{"class":42},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[36,94558,94559,94561,94563,94565,94567,94569,94571,94573,94575,94577,94579],{"class":38,"line":72},[36,94560,93738],{"class":98},[36,94562,176],{"class":163},[36,94564,93434],{"class":98},[36,94566,833],{"class":109},[36,94568,992],{"class":98},[36,94570,1137],{"class":109},[36,94572,93439],{"class":98},[36,94574,908],{"class":109},[36,94576,992],{"class":98},[36,94578,689],{"class":109},[36,94580,627],{"class":98},[36,94582,94583],{"class":38,"line":82},[36,94584,94585],{"class":42},"#这个重复之后二维变成一维\n",[36,94587,94588,94591,94593],{"class":38,"line":88},[36,94589,94590],{"class":98},"np.repeat(aa,",[36,94592,694],{"class":109},[36,94594,627],{"class":98},[36,94596,94597],{"class":38,"line":113},[36,94598,94360],{"class":59},[36,94600,94601],{"class":38,"line":119},[36,94602,94603],{"class":59},"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",[36,94605,94606],{"class":38,"line":131},[36,94607,94360],{"class":59},[36,94609,94610],{"class":38,"line":137},[36,94611,94612],{"class":42},"#指定axis\n",[36,94614,94615,94617,94619,94621,94623,94625,94627],{"class":38,"line":147},[36,94616,94590],{"class":98},[36,94618,694],{"class":109},[36,94620,992],{"class":98},[36,94622,47947],{"class":5667},[36,94624,176],{"class":163},[36,94626,807],{"class":109},[36,94628,627],{"class":98},[36,94630,94631],{"class":38,"line":153},[36,94632,93996],{"class":42},[36,94634,94635],{"class":38,"line":191},[36,94636,94360],{"class":59},[36,94638,94639],{"class":38,"line":197},[36,94640,94641],{"class":59},"array([[ 1,  2,  3],\n",[36,94643,94644],{"class":38,"line":217},[36,94645,94646],{"class":59},"       [ 1,  2,  3],\n",[36,94648,94649],{"class":38,"line":223},[36,94650,94651],{"class":59},"       [ 4,  5,  6],\n",[36,94653,94654],{"class":38,"line":243},[36,94655,94651],{"class":59},[36,94657,94658],{"class":38,"line":250},[36,94659,94660],{"class":59},"       [ 7,  8,  9],\n",[36,94662,94663],{"class":38,"line":256},[36,94664,94660],{"class":59},[36,94666,94667],{"class":38,"line":273},[36,94668,94669],{"class":59},"       [10, 11, 12],\n",[36,94671,94672],{"class":38,"line":278},[36,94673,94674],{"class":59},"       [10, 11, 12]])\n",[36,94676,94677],{"class":38,"line":284},[36,94678,94360],{"class":59},[36,94680,94681,94683,94685,94687,94689,94691,94693],{"class":38,"line":315},[36,94682,94590],{"class":98},[36,94684,694],{"class":109},[36,94686,992],{"class":98},[36,94688,47947],{"class":5667},[36,94690,176],{"class":163},[36,94692,833],{"class":109},[36,94694,627],{"class":98},[36,94696,94697],{"class":38,"line":320},[36,94698,93996],{"class":42},[36,94700,94701],{"class":38,"line":326},[36,94702,94360],{"class":59},[36,94704,94705],{"class":38,"line":343},[36,94706,94707],{"class":59},"array([[ 1,  1,  2,  2,  3,  3],\n",[36,94709,94710],{"class":38,"line":348},[36,94711,94712],{"class":59},"       [ 4,  4,  5,  5,  6,  6],\n",[36,94714,94715],{"class":38,"line":354},[36,94716,94717],{"class":59},"       [ 7,  7,  8,  8,  9,  9],\n",[36,94719,94720],{"class":38,"line":370},[36,94721,94722],{"class":59},"       [10, 10, 11, 11, 12, 12]])\n",[36,94724,94725],{"class":38,"line":375},[36,94726,94360],{"class":59},[559,94728,94730],{"id":94729},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[26,94732,94734],{"className":30811,"code":94733,"language":30813,"meta":31,"style":31},"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",[33,94735,94736,94752,94757,94769,94773,94778,94788,94792],{"__ignoreMap":31},[36,94737,94738,94740,94742,94744,94746,94748,94750],{"class":38,"line":39},[36,94739,20],{"class":98},[36,94741,176],{"class":163},[36,94743,93434],{"class":98},[36,94745,833],{"class":109},[36,94747,992],{"class":98},[36,94749,933],{"class":109},[36,94751,627],{"class":98},[36,94753,94754],{"class":38,"line":46},[36,94755,94756],{"class":42},"#array([，2，3，4])\n",[36,94758,94759,94762,94764,94766],{"class":38,"line":52},[36,94760,94761],{"class":98},"np.roll(a,",[36,94763,694],{"class":109},[36,94765,1043],{"class":98},[36,94767,94768],{"class":42},"#传正数向后调多少位，传负数向前调多少位\n",[36,94770,94771],{"class":38,"line":66},[36,94772,93996],{"class":42},[36,94774,94775],{"class":38,"line":72},[36,94776,94777],{"class":42},"#array([3, 4, 1, 2])\n",[36,94779,94780,94782,94784,94786],{"class":38,"line":82},[36,94781,94761],{"class":98},[36,94783,1146],{"class":163},[36,94785,833],{"class":109},[36,94787,627],{"class":98},[36,94789,94790],{"class":38,"line":88},[36,94791,93996],{"class":42},[36,94793,94794],{"class":38,"line":113},[36,94795,94796],{"class":42},"#array([2, 3, 4, 1])\n",[14,94798,94799],{},[1941,94800],{"alt":31,"src":94801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[559,94803,94805],{"id":94804},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,94807,94808],{},"resize()重新调整数组的大小",[14,94810,94811],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[26,94813,94815],{"className":30811,"code":94814,"language":30813,"meta":31,"style":31},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[33,94816,94817,94822,94835],{"__ignoreMap":31},[36,94818,94819],{"class":38,"line":39},[36,94820,94821],{"class":42},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[36,94823,94824,94827,94829,94831,94833],{"class":38,"line":46},[36,94825,94826],{"class":98},"np.resize(aa,(",[36,94828,694],{"class":109},[36,94830,992],{"class":98},[36,94832,958],{"class":109},[36,94834,30930],{"class":98},[36,94836,94837,94839,94841,94843,94845,94847],{"class":38,"line":52},[36,94838,94826],{"class":98},[36,94840,694],{"class":109},[36,94842,992],{"class":98},[36,94844,1034],{"class":109},[36,94846,83203],{"class":98},[36,94848,94849],{"class":42},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[559,94851,94853],{"id":94852},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,94855,94856],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,94858,94859],{},[1941,94860],{"alt":31,"src":94861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[559,94863,94865],{"id":94864},"_126-保存加载文件","12.6 保存加载文件",[14,94867,94868],{},"savetxt():将数据保存到txt文件中",[14,94870,94871],{},"loadtxt():从文件加载数据",[14,94873,94874],{},[1941,94875],{"alt":31,"src":94876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[559,94878,94880],{"id":94879},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,94882,94883],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[559,94885,94887],{"id":94886},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,94889,94890],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,94892,94893],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,94895,94896],{},[1941,94897],{"alt":31,"src":94898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[559,94900,94902],{"id":94901},"_129-where语句","12.9 where语句",[14,94904,94905],{},"np.where(条件,x,y)",[14,94907,94908],{},"如果条件为True,对应值为x,否则对应值为y",[14,94910,94911],{},[1941,94912],{"alt":31,"src":94913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[559,94915,94917],{"id":94916},"_1210-dot矩阵","12.10 dot()矩阵",[14,94919,94920],{},[1941,94921],{"alt":31,"src":94922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[537,94924,94925],{},"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":31,"searchDepth":46,"depth":46,"links":94927},[94928,94929,94930,94931,94932,94933,94934,94935,94936,94937],{"id":94290,"depth":46,"text":94291},{"id":94513,"depth":46,"text":94514},{"id":94729,"depth":46,"text":94730},{"id":94804,"depth":46,"text":94805},{"id":94852,"depth":46,"text":94853},{"id":94864,"depth":46,"text":94865},{"id":94879,"depth":46,"text":94880},{"id":94886,"depth":46,"text":94887},{"id":94901,"depth":46,"text":94902},{"id":94916,"depth":46,"text":94917},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94282,"description":542},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94944,"title":94945,"body":94946,"description":542,"extension":543,"meta":95299,"navigation":246,"path":95300,"seo":95301,"stem":95302,"__hash__":95303},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94947,"toc":95297},[94948,94951,94954,94957,94960,94963,95028,95030,95294],[10,94949,94945],{"id":94950},"_13数组排序",[14,94952,94953],{},"排序主要用到的方法是np.sort和np.argsort",[14,94955,94956],{},"其中np.sort()对数组直接排序",[14,94958,94959],{},"而np.argsort()是返回排序后的原始索引",[14,94961,94962],{},"①一维数组",[26,94964,94966],{"className":30811,"code":94965,"language":30813,"meta":31,"style":31},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[33,94967,94968,94972,95012,95020],{"__ignoreMap":31},[36,94969,94970],{"class":38,"line":39},[36,94971,93537],{"class":42},[36,94973,94974,94976,94978,94980,94982,94984,94986,94988,94990,94992,94994,94996,94998,95000,95002,95004,95006,95008,95010],{"class":38,"line":46},[36,94975,20],{"class":98},[36,94977,176],{"class":163},[36,94979,93456],{"class":98},[36,94981,689],{"class":109},[36,94983,992],{"class":98},[36,94985,1112],{"class":109},[36,94987,992],{"class":98},[36,94989,1009],{"class":109},[36,94991,992],{"class":98},[36,94993,1388],{"class":109},[36,94995,992],{"class":98},[36,94997,894],{"class":109},[36,94999,992],{"class":98},[36,95001,1506],{"class":109},[36,95003,992],{"class":98},[36,95005,958],{"class":109},[36,95007,992],{"class":98},[36,95009,1060],{"class":109},[36,95011,5108],{"class":98},[36,95013,95014,95017],{"class":38,"line":52},[36,95015,95016],{"class":98},"np.sort(a)",[36,95018,95019],{"class":42},"#升序排序\n",[36,95021,95022,95025],{"class":38,"line":66},[36,95023,95024],{"class":98},"np.argsort(a)",[36,95026,95027],{"class":42},"#按照元素大小来索引排序\n",[14,95029,93723],{},[26,95031,95033],{"className":30811,"code":95032,"language":30813,"meta":31,"style":31},"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",[33,95034,95035,95047,95073,95078,95082,95087,95092,95097,95102,95106,95114,95118,95123,95128,95133,95138,95142,95147,95160,95164,95169,95174,95179,95184,95188,95193,95205,95209,95213,95217,95221,95225,95229,95234,95249,95254,95263,95268,95272,95276,95281,95285,95290],{"__ignoreMap":31},[36,95036,95037,95040,95042,95044],{"class":38,"line":39},[36,95038,95039],{"class":98},"np.random.seed(",[36,95041,807],{"class":109},[36,95043,1043],{"class":98},[36,95045,95046],{"class":42},"#保证每次值一样\n",[36,95048,95049,95051,95053,95055,95057,95059,95061,95063,95065,95067,95069,95071],{"class":38,"line":46},[36,95050,93738],{"class":98},[36,95052,176],{"class":163},[36,95054,93546],{"class":98},[36,95056,926],{"class":109},[36,95058,992],{"class":98},[36,95060,31929],{"class":5667},[36,95062,176],{"class":163},[36,95064,621],{"class":98},[36,95066,908],{"class":109},[36,95068,992],{"class":98},[36,95070,958],{"class":109},[36,95072,30930],{"class":98},[36,95074,95075],{"class":38,"line":52},[36,95076,95077],{"class":42},"#原数组：\n",[36,95079,95080],{"class":38,"line":66},[36,95081,94360],{"class":59},[36,95083,95084],{"class":38,"line":72},[36,95085,95086],{"class":59},"array([[44, 47, 64, 67, 67,  9],\n",[36,95088,95089],{"class":38,"line":82},[36,95090,95091],{"class":59},"       [83, 21, 36, 87, 70, 88],\n",[36,95093,95094],{"class":38,"line":88},[36,95095,95096],{"class":59},"       [88, 12, 58, 65, 39, 87],\n",[36,95098,95099],{"class":38,"line":113},[36,95100,95101],{"class":59},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[36,95103,95104],{"class":38,"line":119},[36,95105,94360],{"class":59},[36,95107,95108,95111],{"class":38,"line":131},[36,95109,95110],{"class":98},"np.sort(aa)",[36,95112,95113],{"class":42},"#每行进行了排序\n",[36,95115,95116],{"class":38,"line":137},[36,95117,94360],{"class":59},[36,95119,95120],{"class":38,"line":147},[36,95121,95122],{"class":59},"array([[ 9, 44, 47, 64, 67, 67],\n",[36,95124,95125],{"class":38,"line":153},[36,95126,95127],{"class":59},"       [21, 36, 70, 83, 87, 88],\n",[36,95129,95130],{"class":38,"line":191},[36,95131,95132],{"class":59},"       [12, 39, 58, 65, 87, 88],\n",[36,95134,95135],{"class":38,"line":197},[36,95136,95137],{"class":59},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[36,95139,95140],{"class":38,"line":217},[36,95141,94360],{"class":59},[36,95143,95144],{"class":38,"line":223},[36,95145,95146],{"class":42},"#axis=0时\n",[36,95148,95149,95152,95154,95156,95158],{"class":38,"line":243},[36,95150,95151],{"class":98},"np.sort(aa,",[36,95153,47947],{"class":5667},[36,95155,176],{"class":163},[36,95157,807],{"class":109},[36,95159,627],{"class":98},[36,95161,95162],{"class":38,"line":250},[36,95163,94360],{"class":59},[36,95165,95166],{"class":38,"line":256},[36,95167,95168],{"class":59},"array([[44, 12, 36, 37, 25,  9],\n",[36,95170,95171],{"class":38,"line":273},[36,95172,95173],{"class":59},"       [46, 21, 58, 65, 39, 77],\n",[36,95175,95176],{"class":38,"line":278},[36,95177,95178],{"class":59},"       [83, 47, 64, 67, 67, 87],\n",[36,95180,95181],{"class":38,"line":284},[36,95182,95183],{"class":59},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[36,95185,95186],{"class":38,"line":315},[36,95187,94360],{"class":59},[36,95189,95190],{"class":38,"line":320},[36,95191,95192],{"class":42},"#axis=1时,为默认值\n",[36,95194,95195,95197,95199,95201,95203],{"class":38,"line":326},[36,95196,95151],{"class":98},[36,95198,47947],{"class":5667},[36,95200,176],{"class":163},[36,95202,833],{"class":109},[36,95204,627],{"class":98},[36,95206,95207],{"class":38,"line":343},[36,95208,94360],{"class":59},[36,95210,95211],{"class":38,"line":348},[36,95212,95122],{"class":59},[36,95214,95215],{"class":38,"line":354},[36,95216,95127],{"class":59},[36,95218,95219],{"class":38,"line":370},[36,95220,95132],{"class":59},[36,95222,95223],{"class":38,"line":375},[36,95224,95137],{"class":59},[36,95226,95227],{"class":38,"line":381},[36,95228,94360],{"class":59},[36,95230,95231],{"class":38,"line":399},[36,95232,95233],{"class":42},"#按最后一列排序\n",[36,95235,95236,95238,95240,95243,95245,95247],{"class":38,"line":404},[36,95237,878],{"class":98},[36,95239,176],{"class":163},[36,95241,95242],{"class":98},"aa[:,",[36,95244,1146],{"class":163},[36,95246,833],{"class":109},[36,95248,33679],{"class":98},[36,95250,95251],{"class":38,"line":410},[36,95252,95253],{"class":42},"#获取最后一列排好序的索引\n",[36,95255,95256,95258,95260],{"class":38,"line":423},[36,95257,74490],{"class":98},[36,95259,176],{"class":163},[36,95261,95262],{"class":98},"np.argsort(b)\n",[36,95264,95265],{"class":38,"line":436},[36,95266,95267],{"class":98},"aa[index]\n",[36,95269,95270],{"class":38,"line":441},[36,95271,94360],{"class":59},[36,95273,95274],{"class":38,"line":447},[36,95275,95086],{"class":59},[36,95277,95278],{"class":38,"line":465},[36,95279,95280],{"class":59},"       [46, 88, 81, 37, 25, 77],\n",[36,95282,95283],{"class":38,"line":470},[36,95284,95096],{"class":59},[36,95286,95287],{"class":38,"line":476},[36,95288,95289],{"class":59},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[36,95291,95292],{"class":38,"line":496},[36,95293,94360],{"class":59},[537,95295,95296],{},"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":31,"searchDepth":46,"depth":46,"links":95298},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94945,"description":542},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95305,"title":95306,"body":95307,"description":542,"extension":543,"meta":95337,"navigation":246,"path":95338,"seo":95339,"stem":95340,"__hash__":95341},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95308,"toc":95335},[95309,95312,95315,95318,95321,95324,95327,95330],[10,95310,95306],{"id":95311},"_14广播机制",[14,95313,95314],{},"广播的规则：",[14,95316,95317],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,95319,95320],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,95322,95323],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,95325,95326],{},"3.如果没有维度形状为1，则会引发异常",[14,95328,95329],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,95331,95332],{},[1941,95333],{"alt":31,"src":95334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":31,"searchDepth":46,"depth":46,"links":95336},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95306,"description":542},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95343,"title":95344,"body":95345,"description":542,"extension":543,"meta":95443,"navigation":246,"path":95444,"seo":95445,"stem":95446,"__hash__":95447},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95346,"toc":95441},[95347,95350,95353,95438],[10,95348,95344],{"id":95349},"_15比较掩码",[14,95351,95352],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[26,95354,95356],{"className":30811,"code":95355,"language":30813,"meta":31,"style":31},"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",[33,95357,95358,95404,95415,95429,95433],{"__ignoreMap":31},[36,95359,95360,95362,95364,95367,95369,95371,95373,95375,95377,95379,95381,95383,95385,95387,95389,95391,95393,95395,95397,95399,95401],{"class":38,"line":39},[36,95361,20],{"class":98},[36,95363,176],{"class":163},[36,95365,95366],{"class":98},"np.array([[",[36,95368,833],{"class":109},[36,95370,992],{"class":98},[36,95372,694],{"class":109},[36,95374,992],{"class":98},[36,95376,689],{"class":109},[36,95378,48463],{"class":98},[36,95380,1086],{"class":109},[36,95382,992],{"class":98},[36,95384,1112],{"class":109},[36,95386,992],{"class":98},[36,95388,1137],{"class":109},[36,95390,48463],{"class":98},[36,95392,1338],{"class":109},[36,95394,992],{"class":98},[36,95396,1363],{"class":109},[36,95398,992],{"class":98},[36,95400,1388],{"class":109},[36,95402,95403],{"class":98},"]])\n",[36,95405,95406,95408,95410,95412],{"class":38,"line":46},[36,95407,20],{"class":98},[36,95409,179],{"class":163},[36,95411,1313],{"class":109},[36,95413,95414],{"class":42},"#结果是一个由True,False组成的数组\n",[36,95416,95417,95420,95422,95424,95426],{"class":38,"line":52},[36,95418,95419],{"class":98},"a[a",[36,95421,179],{"class":163},[36,95423,1313],{"class":109},[36,95425,1552],{"class":98},[36,95427,95428],{"class":42},"#小于20的元素会存到这个数组中\n",[36,95430,95431],{"class":38,"line":66},[36,95432,93996],{"class":42},[36,95434,95435],{"class":38,"line":72},[36,95436,95437],{"class":42},"#array([ 1,  2,  3, 11, 12, 13])\n",[537,95439,95440],{},"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":31,"searchDepth":46,"depth":46,"links":95442},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95344,"description":542},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95449,"title":95450,"body":95451,"description":542,"extension":543,"meta":95543,"navigation":246,"path":95544,"seo":95545,"stem":95546,"__hash__":95547},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95452,"toc":95541},[95453,95456,95459,95462,95465,95468,95533,95538],[10,95454,95450],{"id":95455},"_16魔法命令time",[14,95457,95458],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,95460,95461],{},"%:行模式",[14,95463,95464],{},"%%:单元格模式",[14,95466,95467],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[26,95469,95471],{"className":30811,"code":95470,"language":30813,"meta":31,"style":31},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[33,95472,95473,95478,95485,95490,95499,95512,95516,95524],{"__ignoreMap":31},[36,95474,95475],{"class":38,"line":39},[36,95476,95477],{"class":42},"#程序执行时间\n",[36,95479,95480,95482],{"class":38,"line":46},[36,95481,30825],{"class":163},[36,95483,95484],{"class":98}," time \n",[36,95486,95487],{"class":38,"line":52},[36,95488,95489],{"class":42},"#获取时间\n",[36,95491,95492,95495,95497],{"class":38,"line":66},[36,95493,95494],{"class":98},"start",[36,95496,176],{"class":163},[36,95498,32851],{"class":98},[36,95500,95501,95504,95507,95509],{"class":38,"line":72},[36,95502,95503],{"class":98},"time.sleep(",[36,95505,95506],{"class":109},"0.4",[36,95508,1043],{"class":98},[36,95510,95511],{"class":42},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[36,95513,95514],{"class":38,"line":82},[36,95515,95489],{"class":42},[36,95517,95518,95520,95522],{"class":38,"line":88},[36,95519,46234],{"class":98},[36,95521,176],{"class":163},[36,95523,32851],{"class":98},[36,95525,95526,95528,95530],{"class":38,"line":113},[36,95527,46234],{"class":98},[36,95529,1146],{"class":163},[36,95531,95532],{"class":98},"start\n",[14,95534,95535],{},[1941,95536],{"alt":31,"src":95537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[537,95539,95540],{},"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":31,"searchDepth":46,"depth":46,"links":95542},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95450,"description":542},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95549,"title":95550,"body":95551,"description":542,"extension":543,"meta":95586,"navigation":246,"path":95587,"seo":95588,"stem":95589,"__hash__":95590},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95552,"toc":95584},[95553,95556,95559,95562,95565,95568,95571,95574,95579],[10,95554,95550],{"id":95555},"_17魔法命令timeit",[14,95557,95558],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,95560,95561],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,95563,95564],{},"单元格模式：",[14,95566,95567],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,95569,95570],{},"初始化语句执行次数由轮数来决定",[14,95572,95573],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,95575,95576],{},[1941,95577],{"alt":31,"src":95578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,95580,95581],{},[1941,95582],{"alt":31,"src":95583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":31,"searchDepth":46,"depth":46,"links":95585},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95550,"description":542},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95592,"title":95593,"body":95594,"description":542,"extension":543,"meta":95612,"navigation":246,"path":95613,"seo":95614,"stem":95615,"__hash__":95616},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95595,"toc":95610},[95596,95599,95602,95605],[10,95597,95593],{"id":95598},"_18魔法命令writefile和run",[14,95600,95601],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,95603,95604],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,95606,95607],{},[1941,95608],{"alt":31,"src":95609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":31,"searchDepth":46,"depth":46,"links":95611},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95593,"description":542},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95618,"title":95619,"body":95620,"description":542,"extension":543,"meta":95673,"navigation":246,"path":95674,"seo":95675,"stem":95676,"__hash__":95677},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95621,"toc":95671},[95622,95625,95628,95630,95633,95636,95641,95644,95647,95650,95653,95656,95659,95662,95665,95668],[10,95623,95619],{"id":95624},"_19魔法命令memit",[14,95626,95627],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,95629,25036],{},[14,95631,95632],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,95634,95635],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,95637,95638],{},[1941,95639],{"alt":31,"src":95640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,95642,95643],{},"补充：",[14,95645,95646],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,95648,95649],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,95651,95652],{},"解决方法：",[14,95654,95655],{},"1.cmd",[14,95657,95658],{},"2.依次输入以下代码：",[14,95660,95661],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,95663,95664],{},"pip install --upgrade ipython",[14,95666,95667],{},"#升级 memory_profiler 和 setuptools",[14,95669,95670],{},"pip install --upgrade memory_profiler setuptools",{"title":31,"searchDepth":46,"depth":46,"links":95672},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95619,"description":542},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95679,"title":95680,"body":95681,"description":542,"extension":543,"meta":97327,"navigation":246,"path":97328,"seo":97329,"stem":97330,"__hash__":97331},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95682,"toc":97297},[95683,95686,95690,95694,95755,95758,95763,95767,95772,95777,95782,95787,95790,95795,95799,95803,95836,95839,95842,95845,95897,95900,95936,95939,95981,95985,96006,96008,96045,96047,96052,96054,96059,96063,96066,96094,96098,96102,96155,96159,96251,96255,96259,96262,96267,96271,96296,96301,96305,96308,96311,96314,96317,96320,96323,96326,96338,96342,96346,96349,96381,96384,96407,96410,96436,96439,96465,96468,96502,96505,96567,96571,96574,96578,96581,96607,96610,96613,96618,96621,96690,96692,96697,96758,96761,96772,96778,96783,96787,96790,96803,96807,96822,96824,96847,96849,96875,96878,96881,96884,96932,96934,96939,96943,96947,96974,96978,97005,97008,97013,97018,97108,97112,97170,97175,97178,97181,97223,97227,97283,97288,97291,97294],[10,95684,95680],{"id":95685},"_2创建数组",[559,95687,95689],{"id":95688},"_21-array函数创建数组","2.1 array()函数创建数组",[588,95691,95693],{"id":95692},"_221-函数语句","2.2.1 函数语句",[26,95695,95697],{"className":30811,"code":95696,"language":30813,"meta":31,"style":31},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[33,95698,95699],{"__ignoreMap":31},[36,95700,95701,95704,95707,95709,95711,95713,95715,95717,95720,95722,95725,95727,95730,95732,95734,95736,95739,95741,95744,95746,95749,95751,95753],{"class":38,"line":39},[36,95702,95703],{"class":98},"numpy.array(",[36,95705,95706],{"class":109},"object",[36,95708,12874],{"class":98},[36,95710,93932],{"class":5667},[36,95712,14003],{"class":163},[36,95714,39366],{"class":109},[36,95716,12874],{"class":98},[36,95718,95719],{"class":5667},"copy",[36,95721,14003],{"class":163},[36,95723,95724],{"class":109}," True",[36,95726,12874],{"class":98},[36,95728,95729],{"class":5667},"order",[36,95731,14003],{"class":163},[36,95733,39366],{"class":109},[36,95735,12874],{"class":98},[36,95737,95738],{"class":5667},"subok",[36,95740,14003],{"class":163},[36,95742,95743],{"class":109}," False",[36,95745,12874],{"class":98},[36,95747,95748],{"class":5667},"ndmin",[36,95750,14003],{"class":163},[36,95752,4544],{"class":109},[36,95754,627],{"class":98},[14,95756,95757],{},"参数：",[14,95759,95760],{},[1941,95761],{"alt":31,"src":95762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[588,95764,95766],{"id":95765},"_222-实例","2.2.2 实例",[14,95768,95769],{},[1941,95770],{"alt":31,"src":95771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,95773,95774],{},[1941,95775],{"alt":31,"src":95776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,95778,95779],{},[1941,95780],{"alt":31,"src":95781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,95783,95784],{},[1941,95785],{"alt":31,"src":95786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,95788,95789],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,95791,95792],{},[1941,95793],{"alt":31,"src":95794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[559,95796,95798],{"id":95797},"_22-随机数创建数组","2.2 随机数创建数组",[588,95800,95802],{"id":95801},"_221-random语句","2.2.1 random语句",[26,95804,95806],{"className":30811,"code":95805,"language":30813,"meta":31,"style":31},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[33,95807,95808,95813,95818,95826,95831],{"__ignoreMap":31},[36,95809,95810],{"class":38,"line":39},[36,95811,95812],{"class":42},"#random.random()\n",[36,95814,95815],{"class":38,"line":46},[36,95816,95817],{"class":42},"#确定随机种子,就是每次运行结果是相同的\n",[36,95819,95820,95822,95824],{"class":38,"line":52},[36,95821,95039],{"class":98},[36,95823,807],{"class":109},[36,95825,627],{"class":98},[36,95827,95828],{"class":38,"line":66},[36,95829,95830],{"class":98},"np.random.random()\n",[36,95832,95833],{"class":38,"line":72},[36,95834,95835],{"class":42},"#生成一个随机的数目\n",[14,95837,95838],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,95840,95841],{},"可以指定数组形状 size",[14,95843,95844],{},"①生成一维数组",[26,95846,95848],{"className":30811,"code":95847,"language":30813,"meta":31,"style":31},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[33,95849,95850,95855,95868,95873,95889],{"__ignoreMap":31},[36,95851,95852],{"class":38,"line":39},[36,95853,95854],{"class":42},"#random.random(size())\n",[36,95856,95857,95860,95862,95864,95866],{"class":38,"line":46},[36,95858,95859],{"class":98},"np.random.random(",[36,95861,31929],{"class":5667},[36,95863,176],{"class":163},[36,95865,933],{"class":109},[36,95867,627],{"class":98},[36,95869,95870],{"class":38,"line":52},[36,95871,95872],{"class":42},"#生成一位的五个元素\n",[36,95874,95875,95877,95879,95881,95883,95885,95887],{"class":38,"line":66},[36,95876,20],{"class":98},[36,95878,176],{"class":163},[36,95880,95859],{"class":98},[36,95882,31929],{"class":5667},[36,95884,176],{"class":163},[36,95886,908],{"class":109},[36,95888,627],{"class":98},[36,95890,95891,95894],{"class":38,"line":72},[36,95892,95893],{"class":98},"a.shape ",[36,95895,95896],{"class":42},"#输出数组形状\n",[14,95898,95899],{},"②生成二维数组",[26,95901,95903],{"className":30811,"code":95902,"language":30813,"meta":31,"style":31},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[33,95904,95905,95909,95931],{"__ignoreMap":31},[36,95906,95907],{"class":38,"line":39},[36,95908,93733],{"class":42},[36,95910,95911,95913,95915,95917,95919,95921,95923,95925,95927,95929],{"class":38,"line":46},[36,95912,93738],{"class":98},[36,95914,176],{"class":163},[36,95916,95859],{"class":98},[36,95918,31929],{"class":5667},[36,95920,176],{"class":163},[36,95922,621],{"class":98},[36,95924,908],{"class":109},[36,95926,992],{"class":98},[36,95928,933],{"class":109},[36,95930,30930],{"class":98},[36,95932,95933],{"class":38,"line":52},[36,95934,95935],{"class":42},"#生成四行五列的数组\n",[14,95937,95938],{},"③生成三维数组",[26,95940,95942],{"className":30811,"code":95941,"language":30813,"meta":31,"style":31},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[33,95943,95944,95949,95976],{"__ignoreMap":31},[36,95945,95946],{"class":38,"line":39},[36,95947,95948],{"class":42},"#三维数组\n",[36,95950,95951,95954,95956,95958,95960,95962,95964,95966,95968,95970,95972,95974],{"class":38,"line":46},[36,95952,95953],{"class":98},"aaa",[36,95955,176],{"class":163},[36,95957,95859],{"class":98},[36,95959,31929],{"class":5667},[36,95961,176],{"class":163},[36,95963,621],{"class":98},[36,95965,694],{"class":109},[36,95967,992],{"class":98},[36,95969,689],{"class":109},[36,95971,992],{"class":98},[36,95973,908],{"class":109},[36,95975,30930],{"class":98},[36,95977,95978],{"class":38,"line":52},[36,95979,95980],{"class":98},"aaa.shape\n",[588,95982,95984],{"id":95983},"_222-randint语句","2.2.2 randint语句",[26,95986,95988],{"className":30811,"code":95987,"language":30813,"meta":31,"style":31},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[33,95989,95990,95995],{"__ignoreMap":31},[36,95991,95992],{"class":38,"line":39},[36,95993,95994],{"class":42},"#生成随机的整数 random.randint(low,high,size)\n",[36,95996,95997,95999,96001,96003],{"class":38,"line":46},[36,95998,93546],{"class":98},[36,96000,933],{"class":109},[36,96002,14153],{"class":98},[36,96004,96005],{"class":42},"#0~5中的随机一个数\n",[14,96007,95844],{},[26,96009,96011],{"className":30811,"code":96010,"language":30813,"meta":31,"style":31},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[33,96012,96013,96018,96040],{"__ignoreMap":31},[36,96014,96015],{"class":38,"line":39},[36,96016,96017],{"class":42},"#一维\n",[36,96019,96020,96022,96024,96026,96028,96030,96032,96034,96036,96038],{"class":38,"line":46},[36,96021,93546],{"class":98},[36,96023,833],{"class":109},[36,96025,992],{"class":98},[36,96027,1086],{"class":109},[36,96029,992],{"class":98},[36,96031,31929],{"class":5667},[36,96033,176],{"class":163},[36,96035,621],{"class":98},[36,96037,1060],{"class":109},[36,96039,30930],{"class":98},[36,96041,96042],{"class":38,"line":52},[36,96043,96044],{"class":42},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,96046,95899],{},[14,96048,96049],{},[1941,96050],{"alt":31,"src":96051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,96053,95938],{},[14,96055,96056],{},[1941,96057],{"alt":31,"src":96058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[588,96060,96062],{"id":96061},"_222-rand语句","2.2.2 rand语句",[14,96064,96065],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[26,96067,96069],{"className":30811,"code":96068,"language":30813,"meta":31,"style":31},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[33,96070,96071,96084,96089],{"__ignoreMap":31},[36,96072,96073,96076,96078,96080,96082],{"class":38,"line":39},[36,96074,96075],{"class":98},"np.random.rand(",[36,96077,926],{"class":109},[36,96079,992],{"class":98},[36,96081,1060],{"class":109},[36,96083,627],{"class":98},[36,96085,96086],{"class":38,"line":46},[36,96087,96088],{"class":42},"#第一个参数100：行数，表示有100个样本\n",[36,96090,96091],{"class":38,"line":52},[36,96092,96093],{"class":42},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[559,96095,96097],{"id":96096},"_23-arange创建数组","2.3 arange()创建数组",[588,96099,96101],{"id":96100},"_231-函数语句","2.3.1 函数语句",[26,96103,96105],{"className":30811,"code":96104,"language":30813,"meta":31,"style":31},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[33,96106,96107,96121,96126,96131,96136,96141,96146,96151],{"__ignoreMap":31},[36,96108,96109,96112,96114,96116,96119],{"class":38,"line":39},[36,96110,96111],{"class":98},"numpy.arange([start,] stop[, step], ",[36,96113,93932],{"class":5667},[36,96115,176],{"class":163},[36,96117,96118],{"class":109},"None",[36,96120,627],{"class":98},[36,96122,96123],{"class":38,"line":46},[36,96124,96125],{"class":42},"#参数\n",[36,96127,96128],{"class":38,"line":52},[36,96129,96130],{"class":59},"\"\"\"\n",[36,96132,96133],{"class":38,"line":66},[36,96134,96135],{"class":59},"start:起始值，可选，默认从 0 开始。\n",[36,96137,96138],{"class":38,"line":72},[36,96139,96140],{"class":59},"stop:结束值（不包含该值）。\n",[36,96142,96143],{"class":38,"line":82},[36,96144,96145],{"class":59},"step:步长，可选，默认是 1。可以为浮点数。\n",[36,96147,96148],{"class":38,"line":88},[36,96149,96150],{"class":59},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[36,96152,96153],{"class":38,"line":113},[36,96154,96130],{"class":59},[588,96156,96158],{"id":96157},"_232-实例","2.3.2 实例",[26,96160,96162],{"className":30811,"code":96161,"language":30813,"meta":31,"style":31},"#创建一维数组\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",[33,96163,96164,96168,96192,96197,96202,96206,96229,96233,96237,96242,96247],{"__ignoreMap":31},[36,96165,96166],{"class":38,"line":39},[36,96167,93537],{"class":42},[36,96169,96170,96172,96174,96176,96178,96180,96182,96184,96186,96188,96190],{"class":38,"line":46},[36,96171,93434],{"class":98},[36,96173,833],{"class":109},[36,96175,992],{"class":98},[36,96177,1338],{"class":109},[36,96179,992],{"class":98},[36,96181,833],{"class":109},[36,96183,992],{"class":98},[36,96185,93932],{"class":5667},[36,96187,176],{"class":163},[36,96189,624],{"class":109},[36,96191,627],{"class":98},[36,96193,96194],{"class":38,"line":52},[36,96195,96196],{"class":42},"#输出结果：\n",[36,96198,96199],{"class":38,"line":66},[36,96200,96201],{"class":42},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[36,96203,96204],{"class":38,"line":72},[36,96205,94379],{"class":42},[36,96207,96208,96211,96213,96215,96217,96220,96222,96224,96226],{"class":38,"line":82},[36,96209,96210],{"class":98},"np.array([np.arange(",[36,96212,833],{"class":109},[36,96214,992],{"class":98},[36,96216,908],{"class":109},[36,96218,96219],{"class":98},"),np.arange(",[36,96221,908],{"class":109},[36,96223,992],{"class":98},[36,96225,983],{"class":109},[36,96227,96228],{"class":98},")])\n",[36,96230,96231],{"class":38,"line":88},[36,96232,93996],{"class":42},[36,96234,96235],{"class":38,"line":113},[36,96236,96130],{"class":59},[36,96238,96239],{"class":38,"line":119},[36,96240,96241],{"class":59},"array([[1, 2, 3],\n",[36,96243,96244],{"class":38,"line":131},[36,96245,96246],{"class":59},"       [4, 5, 6]])\n",[36,96248,96249],{"class":38,"line":137},[36,96250,96130],{"class":59},[559,96252,96254],{"id":96253},"_24-生态分布","2.4 生态分布",[588,96256,96258],{"id":96257},"_241-标准正态分布","2.4.1 标准正态分布",[14,96260,96261],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,96263,96264],{},[1941,96265],{"alt":31,"src":96266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[588,96268,96270],{"id":96269},"_242-常规正态分布","2.4.2 常规正态分布",[26,96272,96274],{"className":30811,"code":96273,"language":30813,"meta":31,"style":31},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[33,96275,96276,96281,96286,96291],{"__ignoreMap":31},[36,96277,96278],{"class":38,"line":39},[36,96279,96280],{"class":98},"random.normal(loc,scale,size)也可以生成正态分布\n",[36,96282,96283],{"class":38,"line":46},[36,96284,96285],{"class":42},"#loc:期望\n",[36,96287,96288],{"class":38,"line":52},[36,96289,96290],{"class":42},"#scale:方差\n",[36,96292,96293],{"class":38,"line":66},[36,96294,96295],{"class":42},"#size:用于确定是几维的数列\n",[14,96297,96298],{},[1941,96299],{"alt":31,"src":96300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[559,96302,96304],{"id":96303},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,96306,96307],{},"ndim:秩，维度个数",[14,96309,96310],{},"size:数组元素的个数",[14,96312,96313],{},"shape:数组的形状",[14,96315,96316],{},"dtype:数组元素的类型",[14,96318,96319],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,96321,96322],{},"他们都是属性，通过数组.属性的形式来确定",[14,96324,96325],{},"如果需要输出多个可以通过以下方式：",[26,96327,96329],{"className":30811,"code":96328,"language":30813,"meta":31,"style":31},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[33,96330,96331],{"__ignoreMap":31},[36,96332,96333,96335],{"class":38,"line":39},[36,96334,30848],{"class":109},[36,96336,96337],{"class":98},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[559,96339,96341],{"id":96340},"_26-其他方式创建数组","2.6 其他方式创建数组",[588,96343,96345],{"id":96344},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,96347,96348],{},"①创建一维数组",[26,96350,96352],{"className":30811,"code":96351,"language":30813,"meta":31,"style":31},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[33,96353,96354,96363,96367,96372,96377],{"__ignoreMap":31},[36,96355,96356,96359,96361],{"class":38,"line":39},[36,96357,96358],{"class":98},"np.zeros(",[36,96360,1060],{"class":109},[36,96362,627],{"class":98},[36,96364,96365],{"class":38,"line":46},[36,96366,96130],{"class":59},[36,96368,96369],{"class":38,"line":52},[36,96370,96371],{"class":59},"输出结果：\n",[36,96373,96374],{"class":38,"line":66},[36,96375,96376],{"class":59},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[36,96378,96379],{"class":38,"line":72},[36,96380,96130],{"class":59},[14,96382,96383],{},"上方代码等价于：",[26,96385,96387],{"className":30811,"code":96386,"language":30813,"meta":31,"style":31},"np.zeros(shape=(10))#创建10个元素的0数组\n",[33,96388,96389],{"__ignoreMap":31},[36,96390,96391,96393,96396,96398,96400,96402,96404],{"class":38,"line":39},[36,96392,96358],{"class":98},[36,96394,96395],{"class":5667},"shape",[36,96397,176],{"class":163},[36,96399,621],{"class":98},[36,96401,1060],{"class":109},[36,96403,83203],{"class":98},[36,96405,96406],{"class":42},"#创建10个元素的0数组\n",[14,96408,96409],{},"也可以指定类型",[26,96411,96413],{"className":30811,"code":96412,"language":30813,"meta":31,"style":31},"#指定类型\nnp.zeros(5,dtype=int)\n",[33,96414,96415,96420],{"__ignoreMap":31},[36,96416,96417],{"class":38,"line":39},[36,96418,96419],{"class":42},"#指定类型\n",[36,96421,96422,96424,96426,96428,96430,96432,96434],{"class":38,"line":46},[36,96423,96358],{"class":98},[36,96425,933],{"class":109},[36,96427,992],{"class":98},[36,96429,93932],{"class":5667},[36,96431,176],{"class":163},[36,96433,624],{"class":109},[36,96435,627],{"class":98},[14,96437,96438],{},"②创建二维数组",[26,96440,96442],{"className":30811,"code":96441,"language":30813,"meta":31,"style":31},"np.zeros((3,4),dtype=int)\n",[33,96443,96444],{"__ignoreMap":31},[36,96445,96446,96449,96451,96453,96455,96457,96459,96461,96463],{"class":38,"line":39},[36,96447,96448],{"class":98},"np.zeros((",[36,96450,689],{"class":109},[36,96452,992],{"class":98},[36,96454,908],{"class":109},[36,96456,42689],{"class":98},[36,96458,93932],{"class":5667},[36,96460,176],{"class":163},[36,96462,624],{"class":109},[36,96464,627],{"class":98},[14,96466,96467],{},"③创建三维数组",[26,96469,96471],{"className":30811,"code":96470,"language":30813,"meta":31,"style":31},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[33,96472,96473,96478],{"__ignoreMap":31},[36,96474,96475],{"class":38,"line":39},[36,96476,96477],{"class":42},"#创建三维数组\n",[36,96479,96480,96482,96484,96486,96488,96490,96492,96494,96496,96498,96500],{"class":38,"line":46},[36,96481,96448],{"class":98},[36,96483,689],{"class":109},[36,96485,992],{"class":98},[36,96487,908],{"class":109},[36,96489,992],{"class":98},[36,96491,933],{"class":109},[36,96493,42689],{"class":98},[36,96495,93932],{"class":5667},[36,96497,176],{"class":163},[36,96499,624],{"class":109},[36,96501,627],{"class":98},[14,96503,96504],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[26,96506,96508],{"className":30811,"code":96507,"language":30813,"meta":31,"style":31},"#使用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",[33,96509,96510,96515,96530,96535,96540,96562],{"__ignoreMap":31},[36,96511,96512],{"class":38,"line":39},[36,96513,96514],{"class":42},"#使用zeros_like将创建的一维数组变成全0的数组\n",[36,96516,96517,96519,96521,96523,96525,96527],{"class":38,"line":46},[36,96518,20],{"class":98},[36,96520,176],{"class":163},[36,96522,93434],{"class":98},[36,96524,908],{"class":109},[36,96526,1043],{"class":98},[36,96528,96529],{"class":42},"#这个得到的结果：一维数组0，1，2，3\n",[36,96531,96532],{"class":38,"line":52},[36,96533,96534],{"class":98},"np.zeros_like(a)\n",[36,96536,96537],{"class":38,"line":66},[36,96538,96539],{"class":42},"#使用zeros_like将创建的二维数组变成全0的数组\n",[36,96541,96542,96544,96546,96548,96550,96552,96554,96556,96558,96560],{"class":38,"line":72},[36,96543,93738],{"class":98},[36,96545,176],{"class":163},[36,96547,95859],{"class":98},[36,96549,31929],{"class":5667},[36,96551,176],{"class":163},[36,96553,621],{"class":98},[36,96555,908],{"class":109},[36,96557,992],{"class":98},[36,96559,933],{"class":109},[36,96561,30930],{"class":98},[36,96563,96564],{"class":38,"line":82},[36,96565,96566],{"class":98},"np.zeros_like(aa)\n",[588,96568,96570],{"id":96569},"_262-ones创建数组","2.6.2 ones()创建数组",[14,96572,96573],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[588,96575,96577],{"id":96576},"_263-empty创建数组","2.6.3 empty()创建数组",[14,96579,96580],{},"①empty()用法",[26,96582,96584],{"className":30811,"code":96583,"language":30813,"meta":31,"style":31},"numpy.empty(shape,dtype=float,order='c')\n",[33,96585,96586],{"__ignoreMap":31},[36,96587,96588,96591,96593,96595,96597,96599,96601,96603,96605],{"class":38,"line":39},[36,96589,96590],{"class":98},"numpy.empty(shape,",[36,96592,93932],{"class":5667},[36,96594,176],{"class":163},[36,96596,660],{"class":109},[36,96598,992],{"class":98},[36,96600,95729],{"class":5667},[36,96602,176],{"class":163},[36,96604,76460],{"class":59},[36,96606,627],{"class":98},[14,96608,96609],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,96611,96612],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,96614,96615],{},[1941,96616],{"alt":31,"src":96617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,96619,96620],{},"②empty()用法",[26,96622,96624],{"className":30811,"code":96623,"language":30813,"meta":31,"style":31},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[33,96625,96626,96647,96659,96680,96685],{"__ignoreMap":31},[36,96627,96628,96630,96632,96635,96637,96639,96641,96643,96645],{"class":38,"line":39},[36,96629,1458],{"class":98},[36,96631,176],{"class":163},[36,96633,96634],{"class":98},"np.empty(",[36,96636,1060],{"class":109},[36,96638,992],{"class":98},[36,96640,93932],{"class":5667},[36,96642,176],{"class":163},[36,96644,624],{"class":109},[36,96646,627],{"class":98},[36,96648,96649,96651,96653,96655,96657],{"class":38,"line":46},[36,96650,1433],{"class":98},[36,96652,176],{"class":163},[36,96654,93434],{"class":98},[36,96656,933],{"class":109},[36,96658,627],{"class":98},[36,96660,96661,96664,96666,96669,96671,96673,96676,96678],{"class":38,"line":52},[36,96662,96663],{"class":98},"np.add(",[36,96665,694],{"class":109},[36,96667,96668],{"class":98},",x,",[36,96670,93486],{"class":5667},[36,96672,176],{"class":163},[36,96674,96675],{"class":98},"y[:",[36,96677,933],{"class":109},[36,96679,5108],{"class":98},[36,96681,96682],{"class":38,"line":66},[36,96683,96684],{"class":42},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[36,96686,96687],{"class":38,"line":72},[36,96688,96689],{"class":98},"y\n",[14,96691,11953],{},[14,96693,96694],{},[1941,96695],{"alt":31,"src":96696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[26,96698,96700],{"className":30811,"code":96699,"language":30813,"meta":31,"style":31},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[33,96701,96702,96718,96738,96753],{"__ignoreMap":31},[36,96703,96704,96706,96708,96710,96712,96714,96716],{"class":38,"line":39},[36,96705,1433],{"class":98},[36,96707,176],{"class":163},[36,96709,93434],{"class":98},[36,96711,833],{"class":109},[36,96713,992],{"class":98},[36,96715,958],{"class":109},[36,96717,627],{"class":98},[36,96719,96720,96722,96724,96726,96728,96730,96732,96734,96736],{"class":38,"line":46},[36,96721,1458],{"class":98},[36,96723,176],{"class":163},[36,96725,96634],{"class":98},[36,96727,933],{"class":109},[36,96729,992],{"class":98},[36,96731,93932],{"class":5667},[36,96733,176],{"class":163},[36,96735,624],{"class":109},[36,96737,627],{"class":98},[36,96739,96740,96743,96745,96747,96749,96751],{"class":38,"line":52},[36,96741,96742],{"class":98},"np.add(x,",[36,96744,694],{"class":109},[36,96746,992],{"class":98},[36,96748,93486],{"class":5667},[36,96750,176],{"class":163},[36,96752,93881],{"class":98},[36,96754,96755],{"class":38,"line":66},[36,96756,96757],{"class":42},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,96759,96760],{},"③empty_like()",[14,96762,96763],{},[765,96764,96765,96766,96771],{},"创建一个",[765,96767,96768],{},[765,96769,96770],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,96773,96774,96777],{},[33,96775,96776],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,96779,96780],{},[1941,96781],{"alt":31,"src":96782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[588,96784,96786],{"id":96785},"_264-用法","2.6.4 ？？用法",[14,96788,96789],{},"当想查看一个函数的参数时，可以通过？？来实现",[26,96791,96793],{"className":30811,"code":96792,"language":30813,"meta":31,"style":31},"np.full??\n",[33,96794,96795],{"__ignoreMap":31},[36,96796,96797,96800],{"class":38,"line":39},[36,96798,96799],{"class":98},"np.full",[36,96801,96802],{"class":77835},"??\n",[588,96804,96806],{"id":96805},"_265-full创建数组","2.6.5 full()创建数组",[26,96808,96810],{"className":30811,"code":96809,"language":30813,"meta":31,"style":31},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[33,96811,96812,96817],{"__ignoreMap":31},[36,96813,96814],{"class":38,"line":39},[36,96815,96816],{"class":98},"full(shape,fill_value)\n",[36,96818,96819],{"class":38,"line":46},[36,96820,96821],{"class":98},"创建全为某个指定值的数组\n",[14,96823,94962],{},[26,96825,96827],{"className":30811,"code":96826,"language":30813,"meta":31,"style":31},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[33,96828,96829,96834],{"__ignoreMap":31},[36,96830,96831],{"class":38,"line":39},[36,96832,96833],{"class":42},"#创建一个一维数组,以20进行填充\n",[36,96835,96836,96839,96841,96843,96845],{"class":38,"line":46},[36,96837,96838],{"class":98},"np.full(",[36,96840,1060],{"class":109},[36,96842,992],{"class":98},[36,96844,1313],{"class":109},[36,96846,627],{"class":98},[14,96848,93723],{},[26,96850,96852],{"className":30811,"code":96851,"language":30813,"meta":31,"style":31},"#创建二维数组\nnp.full((3,5),11)\n",[33,96853,96854,96858],{"__ignoreMap":31},[36,96855,96856],{"class":38,"line":39},[36,96857,94379],{"class":42},[36,96859,96860,96863,96865,96867,96869,96871,96873],{"class":38,"line":46},[36,96861,96862],{"class":98},"np.full((",[36,96864,689],{"class":109},[36,96866,992],{"class":98},[36,96868,933],{"class":109},[36,96870,42689],{"class":98},[36,96872,1086],{"class":109},[36,96874,627],{"class":98},[14,96876,96877],{},"③full_like用法",[14,96879,96880],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,96882,96883],{},"这里是指定填充而已",[26,96885,96887],{"className":30811,"code":96886,"language":30813,"meta":31,"style":31},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[33,96888,96889,96894,96918,96923],{"__ignoreMap":31},[36,96890,96891],{"class":38,"line":39},[36,96892,96893],{"class":42},"#创建一个指定形状数组\n",[36,96895,96896,96898,96900,96902,96904,96906,96908,96910,96912,96914,96916],{"class":38,"line":46},[36,96897,20],{"class":98},[36,96899,176],{"class":163},[36,96901,93434],{"class":98},[36,96903,833],{"class":109},[36,96905,992],{"class":98},[36,96907,939],{"class":109},[36,96909,93439],{"class":98},[36,96911,908],{"class":109},[36,96913,992],{"class":98},[36,96915,1034],{"class":109},[36,96917,627],{"class":98},[36,96919,96920],{"class":38,"line":52},[36,96921,96922],{"class":42},"#进行指定填充\n",[36,96924,96925,96928,96930],{"class":38,"line":66},[36,96926,96927],{"class":98},"np.full_like(a,",[36,96929,1060],{"class":109},[36,96931,627],{"class":98},[14,96933,11953],{},[14,96935,96936],{},[1941,96937],{"alt":31,"src":96938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[588,96940,96942],{"id":96941},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22437,96944,96946],{"id":96945},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[26,96948,96950],{"className":30811,"code":96949,"language":30813,"meta":31,"style":31},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[33,96951,96952,96969],{"__ignoreMap":31},[36,96953,96954,96957,96959,96961,96963,96965,96967],{"class":38,"line":39},[36,96955,96956],{"class":98},"np.eye(",[36,96958,908],{"class":109},[36,96960,992],{"class":98},[36,96962,93932],{"class":5667},[36,96964,176],{"class":163},[36,96966,624],{"class":109},[36,96968,627],{"class":98},[36,96970,96971],{"class":38,"line":46},[36,96972,96973],{"class":42},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22437,96975,96977],{"id":96976},"_2662-法2identity","2.6.6.2 法2：identity()",[26,96979,96981],{"className":30811,"code":96980,"language":30813,"meta":31,"style":31},"#identity()\nnp.identity(5,dtype=int)\n",[33,96982,96983,96988],{"__ignoreMap":31},[36,96984,96985],{"class":38,"line":39},[36,96986,96987],{"class":42},"#identity()\n",[36,96989,96990,96993,96995,96997,96999,97001,97003],{"class":38,"line":46},[36,96991,96992],{"class":98},"np.identity(",[36,96994,933],{"class":109},[36,96996,992],{"class":98},[36,96998,93932],{"class":5667},[36,97000,176],{"class":163},[36,97002,624],{"class":109},[36,97004,627],{"class":98},[14,97006,97007],{},"两个函数是有区别的",[14,97009,97010],{},[1941,97011],{"alt":31,"src":97012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,97014,97015],{},[1941,97016],{"alt":31,"src":97017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[26,97019,97021],{"className":30811,"code":97020,"language":30813,"meta":31,"style":31},"# 创建一个 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",[33,97022,97023,97028,97040,97045,97050,97055,97060,97064,97069,97089,97093,97098,97103],{"__ignoreMap":31},[36,97024,97025],{"class":38,"line":39},[36,97026,97027],{"class":42},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[36,97029,97030,97032,97034,97036,97038],{"class":38,"line":46},[36,97031,96956],{"class":98},[36,97033,689],{"class":109},[36,97035,12874],{"class":98},[36,97037,908],{"class":109},[36,97039,627],{"class":98},[36,97041,97042],{"class":38,"line":52},[36,97043,97044],{"class":42},"# 输出:\n",[36,97046,97047],{"class":38,"line":66},[36,97048,97049],{"class":42},"# [[1. 0. 0. 0.]\n",[36,97051,97052],{"class":38,"line":72},[36,97053,97054],{"class":42},"#  [0. 1. 0. 0.]\n",[36,97056,97057],{"class":38,"line":82},[36,97058,97059],{"class":42},"#  [0. 0. 1. 0.]]\n",[36,97061,97062],{"class":38,"line":88},[36,97063,247],{"emptyLinePlaceholder":246},[36,97065,97066],{"class":38,"line":113},[36,97067,97068],{"class":42},"# 对角线向上偏移1\n",[36,97070,97071,97073,97075,97077,97079,97081,97083,97085,97087],{"class":38,"line":119},[36,97072,96956],{"class":98},[36,97074,689],{"class":109},[36,97076,12874],{"class":98},[36,97078,908],{"class":109},[36,97080,12874],{"class":98},[36,97082,1107],{"class":5667},[36,97084,176],{"class":163},[36,97086,833],{"class":109},[36,97088,627],{"class":98},[36,97090,97091],{"class":38,"line":131},[36,97092,97044],{"class":42},[36,97094,97095],{"class":38,"line":137},[36,97096,97097],{"class":42},"# [[0. 1. 0. 0.]\n",[36,97099,97100],{"class":38,"line":147},[36,97101,97102],{"class":42},"#  [0. 0. 1. 0.]\n",[36,97104,97105],{"class":38,"line":153},[36,97106,97107],{"class":42},"#  [0. 0. 0. 1.]]\n",[588,97109,97111],{"id":97110},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[26,97113,97115],{"className":30811,"code":97114,"language":30813,"meta":31,"style":31},"#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",[33,97116,97117,97122,97126,97131,97136,97141,97146,97151,97156,97161,97166],{"__ignoreMap":31},[36,97118,97119],{"class":38,"line":39},[36,97120,97121],{"class":42},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[36,97123,97124],{"class":38,"line":46},[36,97125,96130],{"class":59},[36,97127,97128],{"class":38,"line":52},[36,97129,97130],{"class":59},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[36,97132,97133],{"class":38,"line":66},[36,97134,97135],{"class":59},"参数介绍：\n",[36,97137,97138],{"class":38,"line":72},[36,97139,97140],{"class":59},"start：序列的起始值\n",[36,97142,97143],{"class":38,"line":82},[36,97144,97145],{"class":59},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[36,97147,97148],{"class":38,"line":88},[36,97149,97150],{"class":59},"num：要生长的等步长的样本数量，默认为50\n",[36,97152,97153],{"class":38,"line":113},[36,97154,97155],{"class":59},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[36,97157,97158],{"class":38,"line":119},[36,97159,97160],{"class":59},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[36,97162,97163],{"class":38,"line":131},[36,97164,97165],{"class":59},"dtype：ndarry的数据类型\n",[36,97167,97168],{"class":38,"line":137},[36,97169,96130],{"class":59},[14,97171,97172],{},[1941,97173],{"alt":31,"src":97174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,97176,97177],{},"这里num=是可以省略的",[14,97179,97180],{},"也就是下方两行代码结果是一模一样的",[26,97182,97184],{"className":30811,"code":97183,"language":30813,"meta":31,"style":31},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[33,97185,97186,97203],{"__ignoreMap":31},[36,97187,97188,97191,97193,97195,97197,97199,97201],{"class":38,"line":39},[36,97189,97190],{"class":98},"np.linspace(",[36,97192,833],{"class":109},[36,97194,992],{"class":98},[36,97196,933],{"class":109},[36,97198,992],{"class":98},[36,97200,933],{"class":109},[36,97202,627],{"class":98},[36,97204,97205,97207,97209,97211,97213,97215,97217,97219,97221],{"class":38,"line":46},[36,97206,97190],{"class":98},[36,97208,833],{"class":109},[36,97210,992],{"class":98},[36,97212,933],{"class":109},[36,97214,992],{"class":98},[36,97216,2137],{"class":5667},[36,97218,176],{"class":163},[36,97220,933],{"class":109},[36,97222,627],{"class":98},[588,97224,97226],{"id":97225},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[26,97228,97230],{"className":30811,"code":97229,"language":30813,"meta":31,"style":31},"#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",[33,97231,97232,97237,97241,97246,97251,97256,97261,97265,97270,97275,97279],{"__ignoreMap":31},[36,97233,97234],{"class":38,"line":39},[36,97235,97236],{"class":42},"#logspace函数用于创建一个等比数列，格式如下：\n",[36,97238,97239],{"class":38,"line":46},[36,97240,96130],{"class":59},[36,97242,97243],{"class":38,"line":52},[36,97244,97245],{"class":59},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[36,97247,97248],{"class":38,"line":66},[36,97249,97250],{"class":59},"参数为：\n",[36,97252,97253],{"class":38,"line":72},[36,97254,97255],{"class":59},"start:序列的起始位置为：base**start\n",[36,97257,97258],{"class":38,"line":82},[36,97259,97260],{"class":59},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[36,97262,97263],{"class":38,"line":88},[36,97264,97150],{"class":59},[36,97266,97267],{"class":38,"line":113},[36,97268,97269],{"class":59},"endpoint：是否包含 stop 这个值，默认是 True\n",[36,97271,97272],{"class":38,"line":119},[36,97273,97274],{"class":59},"base：对数的底数，默认是 10（常见对数）\n",[36,97276,97277],{"class":38,"line":131},[36,97278,97165],{"class":59},[36,97280,97281],{"class":38,"line":137},[36,97282,96130],{"class":59},[14,97284,97285],{},[1941,97286],{"alt":31,"src":97287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,97289,97290],{},"logspace()函数中的num参数也是可以不写num=的",[14,97292,97293],{},"endpoint是不可以省略的",[537,97295,97296],{},"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":31,"searchDepth":46,"depth":46,"links":97298},[97299,97303,97308,97312,97316,97317],{"id":95688,"depth":46,"text":95689,"children":97300},[97301,97302],{"id":95692,"depth":52,"text":95693},{"id":95765,"depth":52,"text":95766},{"id":95797,"depth":46,"text":95798,"children":97304},[97305,97306,97307],{"id":95801,"depth":52,"text":95802},{"id":95983,"depth":52,"text":95984},{"id":96061,"depth":52,"text":96062},{"id":96096,"depth":46,"text":96097,"children":97309},[97310,97311],{"id":96100,"depth":52,"text":96101},{"id":96157,"depth":52,"text":96158},{"id":96253,"depth":46,"text":96254,"children":97313},[97314,97315],{"id":96257,"depth":52,"text":96258},{"id":96269,"depth":52,"text":96270},{"id":96303,"depth":46,"text":96304},{"id":96340,"depth":46,"text":96341,"children":97318},[97319,97320,97321,97322,97323,97324,97325,97326],{"id":96344,"depth":52,"text":96345},{"id":96569,"depth":52,"text":96570},{"id":96576,"depth":52,"text":96577},{"id":96785,"depth":52,"text":96786},{"id":96805,"depth":52,"text":96806},{"id":96941,"depth":52,"text":96942},{"id":97110,"depth":52,"text":97111},{"id":97225,"depth":52,"text":97226},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95680,"description":542},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97333,"title":97334,"body":97335,"description":542,"extension":543,"meta":97428,"navigation":246,"path":97429,"seo":97430,"stem":97431,"__hash__":97432},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97336,"toc":97426},[97337,97340,97343,97346,97349,97352,97355,97358,97361,97364,97367,97370,97372,97375,97378,97383,97386,97389,97423],[10,97338,97334],{"id":97339},"_20魔法命令mprun",[14,97341,97342],{},"逐行分析数据内存的使用情况",[14,97344,97345],{},"语法格式：",[14,97347,97348],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,97350,97351],{},"分析结果列如下：",[14,97353,97354],{},"Line行号",[14,97356,97357],{},"Mem usage内存使用大小",[14,97359,97360],{},"increment内存增量",[14,97362,97363],{},"Line content代码内容",[14,97365,97366],{},"补充说明：",[14,97368,97369],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,97371,95635],{},[14,97373,97374],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,97376,97377],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,97379,97380],{},[1941,97381],{"alt":31,"src":97382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,97384,97385],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,97387,97388],{},"这时候需要重新加载模块",[26,97390,97392],{"className":30811,"code":97391,"language":30813,"meta":31,"style":31},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[33,97393,97394,97399,97406,97411],{"__ignoreMap":31},[36,97395,97396],{"class":38,"line":39},[36,97397,97398],{"class":42},"#重新加载模块\n",[36,97400,97401,97403],{"class":38,"line":46},[36,97402,30825],{"class":163},[36,97404,97405],{"class":98}," importlib\n",[36,97407,97408],{"class":38,"line":52},[36,97409,97410],{"class":98},"importlib.reload(mprun_test)\n",[36,97412,97413,97415,97418,97420],{"class":38,"line":66},[36,97414,942],{"class":163},[36,97416,97417],{"class":98},"mprun ",[36,97419,1146],{"class":163},[36,97421,97422],{"class":98},"f mprun_test.fun_test mprun_test.fun_test()\n",[537,97424,97425],{},"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":31,"searchDepth":46,"depth":46,"links":97427},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97334,"description":542},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97434,"title":97435,"body":97436,"description":542,"extension":543,"meta":97453,"navigation":246,"path":97454,"seo":97455,"stem":97456,"__hash__":97457},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97437,"toc":97451},[97438,97441,97446],[10,97439,97435],{"id":97440},"_3一维数组的索引和切片",[14,97442,97443],{},[1941,97444],{"alt":31,"src":97445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,97447,97448],{},[1941,97449],{"alt":31,"src":97450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":31,"searchDepth":46,"depth":46,"links":97452},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97435,"description":542},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97459,"title":97460,"body":97461,"description":542,"extension":543,"meta":97944,"navigation":246,"path":97945,"seo":97946,"stem":97947,"__hash__":97948},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97462,"toc":97942},[97463,97466,97469,97474,97507,97510,97548,97551,97585,97588,97693,97696,97733,97736,97837,97840,97891,97894,97936,97939],[10,97464,97460],{"id":97465},"_4二维数组的索引与切片",[14,97467,97468],{},"①获取指定单个元素",[14,97470,97471],{},[1941,97472],{"alt":31,"src":97473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[26,97475,97477],{"className":30811,"code":97476,"language":30813,"meta":31,"style":31},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[33,97478,97479,97484,97489,97494],{"__ignoreMap":31},[36,97480,97481],{"class":38,"line":39},[36,97482,97483],{"class":42},"#获取元素9\n",[36,97485,97486],{"class":38,"line":46},[36,97487,97488],{"class":42},"#先获取所在行，再获取所在列\n",[36,97490,97491],{"class":38,"line":52},[36,97492,97493],{"class":42},"#数组[行索引号，列索引号]\n",[36,97495,97496,97499,97501,97503,97505],{"class":38,"line":66},[36,97497,97498],{"class":98},"a[",[36,97500,833],{"class":109},[36,97502,992],{"class":98},[36,97504,694],{"class":109},[36,97506,33679],{"class":98},[14,97508,97509],{},"②获取整行元素",[26,97511,97513],{"className":30811,"code":97512,"language":30813,"meta":31,"style":31},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[33,97514,97515,97520,97525,97533,97538],{"__ignoreMap":31},[36,97516,97517],{"class":38,"line":39},[36,97518,97519],{"class":42},"#获取整行 数组[行索引号]\n",[36,97521,97522],{"class":38,"line":46},[36,97523,97524],{"class":42},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[36,97526,97527,97529,97531],{"class":38,"line":52},[36,97528,97498],{"class":98},[36,97530,694],{"class":109},[36,97532,33679],{"class":98},[36,97534,97535],{"class":38,"line":66},[36,97536,97537],{"class":42},"#也可以负索引获取一行\n",[36,97539,97540,97542,97544,97546],{"class":38,"line":72},[36,97541,97498],{"class":98},[36,97543,1146],{"class":163},[36,97545,833],{"class":109},[36,97547,33679],{"class":98},[14,97549,97550],{},"③获取整列元素",[26,97552,97554],{"className":30811,"code":97553,"language":30813,"meta":31,"style":31},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[33,97555,97556,97561,97570,97575],{"__ignoreMap":31},[36,97557,97558],{"class":38,"line":39},[36,97559,97560],{"class":42},"#获取整列 数组名[:,列索引]\n",[36,97562,97563,97566,97568],{"class":38,"line":46},[36,97564,97565],{"class":98},"a[:,",[36,97567,694],{"class":109},[36,97569,33679],{"class":98},[36,97571,97572],{"class":38,"line":52},[36,97573,97574],{"class":42},"#也可以负索引获取一列\n",[36,97576,97577,97579,97581,97583],{"class":38,"line":66},[36,97578,97565],{"class":98},[36,97580,1146],{"class":163},[36,97582,833],{"class":109},[36,97584,33679],{"class":98},[14,97586,97587],{},"④部分行部分列的元素",[26,97589,97591],{"className":30811,"code":97590,"language":30813,"meta":31,"style":31},"#部分行部分列 数组名[行切片，列切片]\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",[33,97592,97593,97598,97608,97612,97616,97621,97626,97630,97642,97646,97650,97655,97660,97665,97670,97674,97679],{"__ignoreMap":31},[36,97594,97595],{"class":38,"line":39},[36,97596,97597],{"class":42},"#部分行部分列 数组名[行切片，列切片]\n",[36,97599,97600,97603,97605],{"class":38,"line":46},[36,97601,97602],{"class":98},"a[:",[36,97604,694],{"class":109},[36,97606,97607],{"class":98},",:]\n",[36,97609,97610],{"class":38,"line":52},[36,97611,93996],{"class":42},[36,97613,97614],{"class":38,"line":66},[36,97615,94360],{"class":59},[36,97617,97618],{"class":38,"line":72},[36,97619,97620],{"class":59},"array([[ 1,  2,  3,  4,  5,  6],\n",[36,97622,97623],{"class":38,"line":82},[36,97624,97625],{"class":59},"       [ 7,  8,  9, 10, 11, 12]])\n",[36,97627,97628],{"class":38,"line":88},[36,97629,94360],{"class":59},[36,97631,97632,97634,97636,97638,97640],{"class":38,"line":113},[36,97633,97565],{"class":98},[36,97635,833],{"class":109},[36,97637,1472],{"class":98},[36,97639,908],{"class":109},[36,97641,33679],{"class":98},[36,97643,97644],{"class":38,"line":119},[36,97645,93996],{"class":42},[36,97647,97648],{"class":38,"line":131},[36,97649,94360],{"class":59},[36,97651,97652],{"class":38,"line":137},[36,97653,97654],{"class":59},"array([[ 2,  3,  4],\n",[36,97656,97657],{"class":38,"line":147},[36,97658,97659],{"class":59},"       [ 8,  9, 10],\n",[36,97661,97662],{"class":38,"line":153},[36,97663,97664],{"class":59},"       [14, 15, 16],\n",[36,97666,97667],{"class":38,"line":191},[36,97668,97669],{"class":59},"       [20, 21, 22]])\n",[36,97671,97672],{"class":38,"line":197},[36,97673,94360],{"class":59},[36,97675,97676],{"class":38,"line":217},[36,97677,97678],{"class":42},"#对列行同时进行切片，使用了step参数\n",[36,97680,97681,97684,97686,97689,97691],{"class":38,"line":223},[36,97682,97683],{"class":98},"a[::",[36,97685,694],{"class":109},[36,97687,97688],{"class":98},",::",[36,97690,694],{"class":109},[36,97692,33679],{"class":98},[14,97694,97695],{},"⑤同时获取两个元素",[26,97697,97699],{"className":30811,"code":97698,"language":30813,"meta":31,"style":31},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[33,97700,97701,97706,97711],{"__ignoreMap":31},[36,97702,97703],{"class":38,"line":39},[36,97704,97705],{"class":42},"#同时获取第三行第二列，第四行第一列\n",[36,97707,97708],{"class":38,"line":46},[36,97709,97710],{"class":42},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[36,97712,97713,97716,97718,97720,97722,97724,97726,97728,97730],{"class":38,"line":52},[36,97714,97715],{"class":98},"a[(",[36,97717,694],{"class":109},[36,97719,992],{"class":98},[36,97721,689],{"class":109},[36,97723,42680],{"class":98},[36,97725,833],{"class":109},[36,97727,992],{"class":98},[36,97729,807],{"class":109},[36,97731,97732],{"class":98},")]\n",[14,97734,97735],{},"⑥切片，对行进行反向获取",[26,97737,97739],{"className":30811,"code":97738,"language":30813,"meta":31,"style":31},"#切片 对所有行进行反向获取\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",[33,97740,97741,97746,97756,97760,97764,97769,97774,97779,97784,97788,97793,97809,97813,97818,97823,97828,97833],{"__ignoreMap":31},[36,97742,97743],{"class":38,"line":39},[36,97744,97745],{"class":42},"#切片 对所有行进行反向获取\n",[36,97747,97748,97750,97752,97754],{"class":38,"line":46},[36,97749,97683],{"class":98},[36,97751,1146],{"class":163},[36,97753,833],{"class":109},[36,97755,33679],{"class":98},[36,97757,97758],{"class":38,"line":52},[36,97759,93996],{"class":42},[36,97761,97762],{"class":38,"line":66},[36,97763,94360],{"class":59},[36,97765,97766],{"class":38,"line":72},[36,97767,97768],{"class":59},"array([[19, 20, 21, 22, 23, 24],\n",[36,97770,97771],{"class":38,"line":82},[36,97772,97773],{"class":59},"       [13, 14, 15, 16, 17, 18],\n",[36,97775,97776],{"class":38,"line":88},[36,97777,97778],{"class":59},"       [ 7,  8,  9, 10, 11, 12],\n",[36,97780,97781],{"class":38,"line":113},[36,97782,97783],{"class":59},"       [ 1,  2,  3,  4,  5,  6]])\n",[36,97785,97786],{"class":38,"line":119},[36,97787,94360],{"class":59},[36,97789,97790],{"class":38,"line":131},[36,97791,97792],{"class":42},"#对行列都进行反向切片获取\n",[36,97794,97795,97797,97799,97801,97803,97805,97807],{"class":38,"line":137},[36,97796,97683],{"class":98},[36,97798,1146],{"class":163},[36,97800,833],{"class":109},[36,97802,97688],{"class":98},[36,97804,1146],{"class":163},[36,97806,833],{"class":109},[36,97808,33679],{"class":98},[36,97810,97811],{"class":38,"line":147},[36,97812,94360],{"class":59},[36,97814,97815],{"class":38,"line":153},[36,97816,97817],{"class":59},"array([[24, 23, 22, 21, 20, 19],\n",[36,97819,97820],{"class":38,"line":191},[36,97821,97822],{"class":59},"       [18, 17, 16, 15, 14, 13],\n",[36,97824,97825],{"class":38,"line":197},[36,97826,97827],{"class":59},"       [12, 11, 10,  9,  8,  7],\n",[36,97829,97830],{"class":38,"line":217},[36,97831,97832],{"class":59},"       [ 6,  5,  4,  3,  2,  1]])\n",[36,97834,97835],{"class":38,"line":223},[36,97836,94360],{"class":59},[14,97838,97839],{},"⑦修改元素",[26,97841,97843],{"className":30811,"code":97842,"language":30813,"meta":31,"style":31},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[33,97844,97845,97850,97868,97873],{"__ignoreMap":31},[36,97846,97847],{"class":38,"line":39},[36,97848,97849],{"class":42},"#获取前两行和前两列\n",[36,97851,97852,97855,97857,97859,97861,97864,97866],{"class":38,"line":46},[36,97853,97854],{"class":98},"sub_a",[36,97856,176],{"class":163},[36,97858,97602],{"class":98},[36,97860,694],{"class":109},[36,97862,97863],{"class":98},",:",[36,97865,694],{"class":109},[36,97867,33679],{"class":98},[36,97869,97870],{"class":38,"line":52},[36,97871,97872],{"class":42},"#修改sub_a第一个元素的值\n",[36,97874,97875,97878,97880,97882,97884,97886,97888],{"class":38,"line":66},[36,97876,97877],{"class":98},"sub_a[",[36,97879,807],{"class":109},[36,97881,992],{"class":98},[36,97883,807],{"class":109},[36,97885,1552],{"class":98},[36,97887,176],{"class":163},[36,97889,97890],{"class":109},"100\n",[14,97892,97893],{},"⑧数组复制copy()",[26,97895,97897],{"className":30811,"code":97896,"language":30813,"meta":31,"style":31},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[33,97898,97899,97904,97914,97919],{"__ignoreMap":31},[36,97900,97901],{"class":38,"line":39},[36,97902,97903],{"class":42},"#数组复制\n",[36,97905,97906,97909,97911],{"class":38,"line":46},[36,97907,97908],{"class":98},"copy_a",[36,97910,176],{"class":163},[36,97912,97913],{"class":98},"np.copy(sub_a)\n",[36,97915,97916],{"class":38,"line":52},[36,97917,97918],{"class":42},"#修改copy_a后不影响原数组\n",[36,97920,97921,97924,97926,97928,97930,97932,97934],{"class":38,"line":66},[36,97922,97923],{"class":98},"copy_a[",[36,97925,807],{"class":109},[36,97927,992],{"class":98},[36,97929,807],{"class":109},[36,97931,1552],{"class":98},[36,97933,176],{"class":163},[36,97935,97890],{"class":109},[14,97937,97938],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[537,97940,97941],{},"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":31,"searchDepth":46,"depth":46,"links":97943},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97460,"description":542},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97950,"title":97951,"body":97952,"description":542,"extension":543,"meta":98444,"navigation":246,"path":98445,"seo":98446,"stem":98447,"__hash__":98448},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97953,"toc":98436},[97954,97957,97961,97964,97967,98020,98023,98048,98051,98070,98090,98093,98109,98113,98159,98163,98205,98209,98212,98215,98218,98221,98224,98286,98346,98350,98353,98410,98414,98419,98428,98433],[10,97955,97951],{"id":97956},"_5改变数组的维度",[559,97958,97960],{"id":97959},"_51-使用reshape","5.1 使用reshape()",[14,97962,97963],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,97965,97966],{},"①一维数组转换为二维数组",[26,97968,97970],{"className":30811,"code":97969,"language":30813,"meta":31,"style":31},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[33,97971,97972,97988,97993,97998,98003],{"__ignoreMap":31},[36,97973,97974,97976,97978,97980,97982,97984,97986],{"class":38,"line":39},[36,97975,20],{"class":98},[36,97977,176],{"class":163},[36,97979,93434],{"class":98},[36,97981,833],{"class":109},[36,97983,992],{"class":98},[36,97985,1137],{"class":109},[36,97987,627],{"class":98},[36,97989,97990],{"class":38,"line":46},[36,97991,97992],{"class":42},"#将一维数组进行转换\n",[36,97994,97995],{"class":38,"line":52},[36,97996,97997],{"class":42},"#注意点：元素个数不可以变\n",[36,97999,98000],{"class":38,"line":66},[36,98001,98002],{"class":42},"#转换维度要保持一致，不一致就异常！！！\n",[36,98004,98005,98007,98009,98012,98014,98016,98018],{"class":38,"line":72},[36,98006,93738],{"class":98},[36,98008,176],{"class":163},[36,98010,98011],{"class":98},"a.reshape(",[36,98013,694],{"class":109},[36,98015,992],{"class":98},[36,98017,958],{"class":109},[36,98019,627],{"class":98},[14,98021,98022],{},"②一维数组转换为三维数组",[26,98024,98026],{"className":30811,"code":98025,"language":30813,"meta":31,"style":31},"aaa=a.reshape(2,3,2)\n",[33,98027,98028],{"__ignoreMap":31},[36,98029,98030,98032,98034,98036,98038,98040,98042,98044,98046],{"class":38,"line":39},[36,98031,95953],{"class":98},[36,98033,176],{"class":163},[36,98035,98011],{"class":98},[36,98037,694],{"class":109},[36,98039,992],{"class":98},[36,98041,689],{"class":109},[36,98043,992],{"class":98},[36,98045,694],{"class":109},[36,98047,627],{"class":98},[14,98049,98050],{},"③二维数组转化为一维数组",[26,98052,98054],{"className":30811,"code":98053,"language":30813,"meta":31,"style":31},"#知道元素个数：\naa.reshape(12)\n",[33,98055,98056,98061],{"__ignoreMap":31},[36,98057,98058],{"class":38,"line":39},[36,98059,98060],{"class":42},"#知道元素个数：\n",[36,98062,98063,98066,98068],{"class":38,"line":46},[36,98064,98065],{"class":98},"aa.reshape(",[36,98067,1112],{"class":109},[36,98069,627],{"class":98},[26,98071,98073],{"className":30811,"code":98072,"language":30813,"meta":31,"style":31},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[33,98074,98075,98080],{"__ignoreMap":31},[36,98076,98077],{"class":38,"line":39},[36,98078,98079],{"class":42},"#不知道元素个数，参数传递-1\n",[36,98081,98082,98084,98086,98088],{"class":38,"line":46},[36,98083,98065],{"class":98},[36,98085,1146],{"class":163},[36,98087,833],{"class":109},[36,98089,627],{"class":98},[14,98091,98092],{},"④三维数组转换为一维数组",[26,98094,98096],{"className":30811,"code":98095,"language":30813,"meta":31,"style":31},"aaa.reshape(-1)\n",[33,98097,98098],{"__ignoreMap":31},[36,98099,98100,98103,98105,98107],{"class":38,"line":39},[36,98101,98102],{"class":98},"aaa.reshape(",[36,98104,1146],{"class":163},[36,98106,833],{"class":109},[36,98108,627],{"class":98},[559,98110,98112],{"id":98111},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[26,98114,98116],{"className":30811,"code":98115,"language":30813,"meta":31,"style":31},"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",[33,98117,98118,98145,98150,98154],{"__ignoreMap":31},[36,98119,98120,98122,98124,98126,98128,98130,98132,98134,98136,98138,98140,98142],{"class":38,"line":39},[36,98121,93738],{"class":98},[36,98123,176],{"class":163},[36,98125,93434],{"class":98},[36,98127,833],{"class":109},[36,98129,992],{"class":98},[36,98131,1137],{"class":109},[36,98133,93439],{"class":98},[36,98135,694],{"class":109},[36,98137,992],{"class":98},[36,98139,958],{"class":109},[36,98141,1043],{"class":98},[36,98143,98144],{"class":42},"#转换为2行6列的数组\n",[36,98146,98147],{"class":38,"line":46},[36,98148,98149],{"class":98},"aa.revel()\n",[36,98151,98152],{"class":38,"line":52},[36,98153,93996],{"class":42},[36,98155,98156],{"class":38,"line":66},[36,98157,98158],{"class":42},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[559,98160,98162],{"id":98161},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[26,98164,98166],{"className":30811,"code":98165,"language":30813,"meta":31,"style":31},"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",[33,98167,98168,98192,98197,98201],{"__ignoreMap":31},[36,98169,98170,98172,98174,98176,98178,98180,98182,98184,98186,98188,98190],{"class":38,"line":39},[36,98171,93738],{"class":98},[36,98173,176],{"class":163},[36,98175,93434],{"class":98},[36,98177,833],{"class":109},[36,98179,992],{"class":98},[36,98181,1137],{"class":109},[36,98183,93439],{"class":98},[36,98185,694],{"class":109},[36,98187,992],{"class":98},[36,98189,958],{"class":109},[36,98191,627],{"class":98},[36,98193,98194],{"class":38,"line":46},[36,98195,98196],{"class":98},"aa.flatten()\n",[36,98198,98199],{"class":38,"line":52},[36,98200,93996],{"class":42},[36,98202,98203],{"class":38,"line":66},[36,98204,98158],{"class":42},[559,98206,98208],{"id":98207},"_54-使用resize","5.4 使用resize()",[14,98210,98211],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,98213,98214],{},"通过resize方法可以改变数组的维度",[14,98216,98217],{},"#resize修改数组维度",[14,98219,98220],{},"#以元组的形式指定形状",[14,98222,98223],{},"#改变的是原数组",[26,98225,98227],{"className":30811,"code":98226,"language":30813,"meta":31,"style":31},"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",[33,98228,98229,98245,98265,98278,98282],{"__ignoreMap":31},[36,98230,98231,98233,98235,98237,98239,98241,98243],{"class":38,"line":39},[36,98232,20],{"class":98},[36,98234,176],{"class":163},[36,98236,93434],{"class":98},[36,98238,833],{"class":109},[36,98240,992],{"class":98},[36,98242,1137],{"class":109},[36,98244,627],{"class":98},[36,98246,98247,98250,98252,98254,98256,98258,98260,98262],{"class":38,"line":46},[36,98248,98249],{"class":98},"a.shape",[36,98251,176],{"class":163},[36,98253,621],{"class":98},[36,98255,694],{"class":109},[36,98257,992],{"class":98},[36,98259,958],{"class":109},[36,98261,1043],{"class":98},[36,98263,98264],{"class":42},"#改变了原数组\n",[36,98266,98267,98269,98271,98274,98276],{"class":38,"line":52},[36,98268,20],{"class":98},[36,98270,176],{"class":163},[36,98272,98273],{"class":98},"resize((",[36,98275,1112],{"class":109},[36,98277,30930],{"class":98},[36,98279,98280],{"class":38,"line":66},[36,98281,93996],{"class":42},[36,98283,98284],{"class":38,"line":72},[36,98285,98158],{"class":42},[26,98287,98289],{"className":30811,"code":98288,"language":30813,"meta":31,"style":31},"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",[33,98290,98291,98304,98308,98312,98317,98322,98327,98332,98337,98342],{"__ignoreMap":31},[36,98292,98293,98296,98298,98300,98302],{"class":38,"line":39},[36,98294,98295],{"class":98},"a.resize((",[36,98297,958],{"class":109},[36,98299,992],{"class":98},[36,98301,694],{"class":109},[36,98303,30930],{"class":98},[36,98305,98306],{"class":38,"line":46},[36,98307,93996],{"class":42},[36,98309,98310],{"class":38,"line":52},[36,98311,94360],{"class":59},[36,98313,98314],{"class":38,"line":66},[36,98315,98316],{"class":59},"array([[ 1,  2],\n",[36,98318,98319],{"class":38,"line":72},[36,98320,98321],{"class":59},"       [ 3,  4],\n",[36,98323,98324],{"class":38,"line":82},[36,98325,98326],{"class":59},"       [ 5,  6],\n",[36,98328,98329],{"class":38,"line":88},[36,98330,98331],{"class":59},"       [ 7,  8],\n",[36,98333,98334],{"class":38,"line":113},[36,98335,98336],{"class":59},"       [ 9, 10],\n",[36,98338,98339],{"class":38,"line":119},[36,98340,98341],{"class":59},"       [11, 12]])\n",[36,98343,98344],{"class":38,"line":131},[36,98345,94360],{"class":59},[559,98347,98349],{"id":98348},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,98351,98352],{},"改变了原数组",[26,98354,98356],{"className":30811,"code":98355,"language":30813,"meta":31,"style":31},"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",[33,98357,98358,98374,98390,98394,98398,98402,98406],{"__ignoreMap":31},[36,98359,98360,98362,98364,98366,98368,98370,98372],{"class":38,"line":39},[36,98361,20],{"class":98},[36,98363,176],{"class":163},[36,98365,93434],{"class":98},[36,98367,833],{"class":109},[36,98369,992],{"class":98},[36,98371,1137],{"class":109},[36,98373,627],{"class":98},[36,98375,98376,98378,98380,98382,98384,98386,98388],{"class":38,"line":46},[36,98377,98249],{"class":98},[36,98379,176],{"class":163},[36,98381,621],{"class":98},[36,98383,694],{"class":109},[36,98385,992],{"class":98},[36,98387,958],{"class":109},[36,98389,627],{"class":98},[36,98391,98392],{"class":38,"line":52},[36,98393,93996],{"class":42},[36,98395,98396],{"class":38,"line":66},[36,98397,94360],{"class":59},[36,98399,98400],{"class":38,"line":72},[36,98401,97620],{"class":59},[36,98403,98404],{"class":38,"line":82},[36,98405,97625],{"class":59},[36,98407,98408],{"class":38,"line":88},[36,98409,94360],{"class":59},[559,98411,98413],{"id":98412},"_56-重要比较","5.6 重要比较：",[14,98415,98416],{},[1941,98417],{"alt":31,"src":98418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,98420,98421,98422,98424,98425,98427],{},"口诀：NumPy 函数要么用 ",[33,98423,96395],{},"，要么用 ",[33,98426,31929],{},"，创建结构用 shape，造数据用 size",[14,98429,98430],{},[1941,98431],{"alt":31,"src":98432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[537,98434,98435],{},"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":31,"searchDepth":46,"depth":46,"links":98437},[98438,98439,98440,98441,98442,98443],{"id":97959,"depth":46,"text":97960},{"id":98111,"depth":46,"text":98112},{"id":98161,"depth":46,"text":98162},{"id":98207,"depth":46,"text":98208},{"id":98348,"depth":46,"text":98349},{"id":98412,"depth":46,"text":98413},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97951,"description":542},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98450,"title":98451,"body":98452,"description":542,"extension":543,"meta":99524,"navigation":246,"path":99525,"seo":99526,"stem":99527,"__hash__":99528},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98453,"toc":99518},[98454,98457,98461,98464,98467,98470,98535,98538,98578,98581,98663,98666,98671,98693,98695,98700,98705,98708,98711,98866,98869,99071,99075,99078,99081,99149,99151,99156,99159,99162,99242,99246,99249,99251,99324,99326,99331,99333,99413,99417,99420,99423,99426,99429,99432,99435,99515],[10,98455,98451],{"id":98456},"_6数组的拼接",[559,98458,98460],{"id":98459},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,98462,98463],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,98465,98466],{},"函数内部传两个数列构成的数列或者元组",[14,98468,98469],{},"①一维数组的拼接",[26,98471,98473],{"className":30811,"code":98472,"language":30813,"meta":31,"style":31},"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",[33,98474,98475,98495,98515,98520,98525,98530],{"__ignoreMap":31},[36,98476,98477,98479,98481,98483,98485,98487,98489,98491,98493],{"class":38,"line":39},[36,98478,20],{"class":98},[36,98480,176],{"class":163},[36,98482,93456],{"class":98},[36,98484,833],{"class":109},[36,98486,992],{"class":98},[36,98488,694],{"class":109},[36,98490,992],{"class":98},[36,98492,689],{"class":109},[36,98494,5108],{"class":98},[36,98496,98497,98499,98501,98503,98505,98507,98509,98511,98513],{"class":38,"line":46},[36,98498,878],{"class":98},[36,98500,176],{"class":163},[36,98502,93456],{"class":98},[36,98504,908],{"class":109},[36,98506,992],{"class":98},[36,98508,933],{"class":109},[36,98510,992],{"class":98},[36,98512,958],{"class":109},[36,98514,5108],{"class":98},[36,98516,98517],{"class":38,"line":52},[36,98518,98519],{"class":42},"#调用concatenate进行数组拼接\n",[36,98521,98522],{"class":38,"line":66},[36,98523,98524],{"class":98},"np.concatenate((a,b))\n",[36,98526,98527],{"class":38,"line":72},[36,98528,98529],{"class":42},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[36,98531,98532],{"class":38,"line":82},[36,98533,98534],{"class":42},"#np.concatenate([a,b])\n",[14,98536,98537],{},"②一维多个数组拼接",[26,98539,98541],{"className":30811,"code":98540,"language":30813,"meta":31,"style":31},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[33,98542,98543,98548,98568,98573],{"__ignoreMap":31},[36,98544,98545],{"class":38,"line":39},[36,98546,98547],{"class":42},"#也可以多个数组进行拼接\n",[36,98549,98550,98552,98554,98556,98558,98560,98562,98564,98566],{"class":38,"line":46},[36,98551,903],{"class":98},[36,98553,176],{"class":163},[36,98555,93456],{"class":98},[36,98557,1060],{"class":109},[36,98559,992],{"class":98},[36,98561,1086],{"class":109},[36,98563,992],{"class":98},[36,98565,1137],{"class":109},[36,98567,5108],{"class":98},[36,98569,98570],{"class":38,"line":52},[36,98571,98572],{"class":98},"c\n",[36,98574,98575],{"class":38,"line":66},[36,98576,98577],{"class":98},"np.concatenate((a,b,c))\n",[14,98579,98580],{},"③二维数组拼接",[26,98582,98584],{"className":30811,"code":98583,"language":30813,"meta":31,"style":31},"#二维数组使用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",[33,98585,98586,98591,98615,98640,98645,98650],{"__ignoreMap":31},[36,98587,98588],{"class":38,"line":39},[36,98589,98590],{"class":42},"#二维数组使用concatenate进行拼接\n",[36,98592,98593,98595,98597,98599,98601,98603,98605,98607,98609,98611,98613],{"class":38,"line":46},[36,98594,93738],{"class":98},[36,98596,176],{"class":163},[36,98598,93434],{"class":98},[36,98600,833],{"class":109},[36,98602,992],{"class":98},[36,98604,1137],{"class":109},[36,98606,93439],{"class":98},[36,98608,689],{"class":109},[36,98610,992],{"class":98},[36,98612,908],{"class":109},[36,98614,627],{"class":98},[36,98616,98617,98620,98622,98624,98626,98628,98630,98632,98634,98636,98638],{"class":38,"line":52},[36,98618,98619],{"class":98},"bb",[36,98621,176],{"class":163},[36,98623,93434],{"class":98},[36,98625,951],{"class":109},[36,98627,992],{"class":98},[36,98629,1256],{"class":109},[36,98631,93439],{"class":98},[36,98633,689],{"class":109},[36,98635,992],{"class":98},[36,98637,908],{"class":109},[36,98639,627],{"class":98},[36,98641,98642],{"class":38,"line":66},[36,98643,98644],{"class":42},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[36,98646,98647],{"class":38,"line":72},[36,98648,98649],{"class":42},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[36,98651,98652,98655,98657,98659,98661],{"class":38,"line":82},[36,98653,98654],{"class":98},"np.concatenate((aa,bb),",[36,98656,47947],{"class":5667},[36,98658,176],{"class":163},[36,98660,807],{"class":109},[36,98662,627],{"class":98},[14,98664,98665],{},"结果：",[14,98667,98668],{},[1941,98669],{"alt":31,"src":98670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[26,98672,98674],{"className":30811,"code":98673,"language":30813,"meta":31,"style":31},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[33,98675,98676,98681],{"__ignoreMap":31},[36,98677,98678],{"class":38,"line":39},[36,98679,98680],{"class":42},"#指定axis为1进行拼接\n",[36,98682,98683,98685,98687,98689,98691],{"class":38,"line":46},[36,98684,98654],{"class":98},[36,98686,47947],{"class":5667},[36,98688,176],{"class":163},[36,98690,833],{"class":109},[36,98692,627],{"class":98},[14,98694,98665],{},[14,98696,98697],{},[1941,98698],{"alt":31,"src":98699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,98701,98702],{},[765,98703,98704],{},"二维数组总结：0竖着方向，1横着方向",[14,98706,98707],{},"④三维数组拼接",[14,98709,98710],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[26,98712,98714],{"className":30811,"code":98713,"language":30813,"meta":31,"style":31},"#两个三行六列\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",[33,98715,98716,98721,98749,98779,98784,98801,98806,98811,98816,98833,98838,98843,98848,98861],{"__ignoreMap":31},[36,98717,98718],{"class":38,"line":39},[36,98719,98720],{"class":42},"#两个三行六列\n",[36,98722,98723,98725,98727,98729,98731,98733,98735,98737,98739,98741,98743,98745,98747],{"class":38,"line":46},[36,98724,95953],{"class":98},[36,98726,176],{"class":163},[36,98728,93434],{"class":98},[36,98730,833],{"class":109},[36,98732,992],{"class":98},[36,98734,939],{"class":109},[36,98736,93439],{"class":98},[36,98738,694],{"class":109},[36,98740,992],{"class":98},[36,98742,689],{"class":109},[36,98744,992],{"class":98},[36,98746,958],{"class":109},[36,98748,627],{"class":98},[36,98750,98751,98754,98756,98758,98760,98762,98765,98767,98769,98771,98773,98775,98777],{"class":38,"line":52},[36,98752,98753],{"class":98},"bbb",[36,98755,176],{"class":163},[36,98757,93434],{"class":98},[36,98759,951],{"class":109},[36,98761,992],{"class":98},[36,98763,98764],{"class":109},"137",[36,98766,93439],{"class":98},[36,98768,694],{"class":109},[36,98770,992],{"class":98},[36,98772,689],{"class":109},[36,98774,992],{"class":98},[36,98776,958],{"class":109},[36,98778,627],{"class":98},[36,98780,98781],{"class":38,"line":66},[36,98782,98783],{"class":42},"#axis=0\n",[36,98785,98786,98788,98790,98793,98795,98797,98799],{"class":38,"line":72},[36,98787,1308],{"class":98},[36,98789,176],{"class":163},[36,98791,98792],{"class":98},"np.concatenate((aaa,bbb),",[36,98794,47947],{"class":5667},[36,98796,176],{"class":163},[36,98798,807],{"class":109},[36,98800,627],{"class":98},[36,98802,98803],{"class":38,"line":82},[36,98804,98805],{"class":98},"s.shape\n",[36,98807,98808],{"class":38,"line":88},[36,98809,98810],{"class":42},"#输出：(4,3,6)\n",[36,98812,98813],{"class":38,"line":113},[36,98814,98815],{"class":42},"#axis=1\n",[36,98817,98818,98821,98823,98825,98827,98829,98831],{"class":38,"line":119},[36,98819,98820],{"class":98},"ss",[36,98822,176],{"class":163},[36,98824,98792],{"class":98},[36,98826,47947],{"class":5667},[36,98828,176],{"class":163},[36,98830,833],{"class":109},[36,98832,627],{"class":98},[36,98834,98835],{"class":38,"line":131},[36,98836,98837],{"class":98},"ss.shape\n",[36,98839,98840],{"class":38,"line":137},[36,98841,98842],{"class":42},"#输出：(2,6,6)\n",[36,98844,98845],{"class":38,"line":147},[36,98846,98847],{"class":42},"#axis=2\n",[36,98849,98850,98852,98854,98856,98858],{"class":38,"line":153},[36,98851,98792],{"class":98},[36,98853,47947],{"class":5667},[36,98855,176],{"class":163},[36,98857,694],{"class":109},[36,98859,98860],{"class":98},").shape\n",[36,98862,98863],{"class":38,"line":191},[36,98864,98865],{"class":42},"#输出：（2，3，12）\n",[14,98867,98868],{},"⑤四维数组拼接",[26,98870,98872],{"className":30811,"code":98871,"language":30813,"meta":31,"style":31},"#两个三行六列\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",[33,98873,98874,98878,98906,98934,98959,98985,98989,99002,99007,99011,99023,99028,99032,99044,99049,99054,99066],{"__ignoreMap":31},[36,98875,98876],{"class":38,"line":39},[36,98877,98720],{"class":42},[36,98879,98880,98882,98884,98886,98888,98890,98892,98894,98896,98898,98900,98902,98904],{"class":38,"line":46},[36,98881,95953],{"class":98},[36,98883,176],{"class":163},[36,98885,93434],{"class":98},[36,98887,833],{"class":109},[36,98889,992],{"class":98},[36,98891,939],{"class":109},[36,98893,93439],{"class":98},[36,98895,694],{"class":109},[36,98897,992],{"class":98},[36,98899,689],{"class":109},[36,98901,992],{"class":98},[36,98903,958],{"class":109},[36,98905,627],{"class":98},[36,98907,98908,98910,98912,98914,98916,98918,98920,98922,98924,98926,98928,98930,98932],{"class":38,"line":52},[36,98909,98753],{"class":98},[36,98911,176],{"class":163},[36,98913,93434],{"class":98},[36,98915,951],{"class":109},[36,98917,992],{"class":98},[36,98919,98764],{"class":109},[36,98921,93439],{"class":98},[36,98923,694],{"class":109},[36,98925,992],{"class":98},[36,98927,689],{"class":109},[36,98929,992],{"class":98},[36,98931,958],{"class":109},[36,98933,627],{"class":98},[36,98935,98936,98939,98941,98943,98945,98947,98949,98951,98953,98955,98957],{"class":38,"line":66},[36,98937,98938],{"class":98},"aaaa",[36,98940,176],{"class":163},[36,98942,98102],{"class":98},[36,98944,694],{"class":109},[36,98946,992],{"class":98},[36,98948,689],{"class":109},[36,98950,992],{"class":98},[36,98952,689],{"class":109},[36,98954,992],{"class":98},[36,98956,694],{"class":109},[36,98958,627],{"class":98},[36,98960,98961,98964,98966,98969,98971,98973,98975,98977,98979,98981,98983],{"class":38,"line":72},[36,98962,98963],{"class":98},"bbbb",[36,98965,176],{"class":163},[36,98967,98968],{"class":98},"bbb.reshape(",[36,98970,694],{"class":109},[36,98972,992],{"class":98},[36,98974,689],{"class":109},[36,98976,992],{"class":98},[36,98978,689],{"class":109},[36,98980,992],{"class":98},[36,98982,694],{"class":109},[36,98984,627],{"class":98},[36,98986,98987],{"class":38,"line":82},[36,98988,98783],{"class":42},[36,98990,98991,98994,98996,98998,99000],{"class":38,"line":88},[36,98992,98993],{"class":98},"np.concatenate((aaaa,bbbb),",[36,98995,47947],{"class":5667},[36,98997,176],{"class":163},[36,98999,807],{"class":109},[36,99001,98860],{"class":98},[36,99003,99004],{"class":38,"line":113},[36,99005,99006],{"class":42},"#结果：（4，3，3，2）\n",[36,99008,99009],{"class":38,"line":119},[36,99010,98815],{"class":42},[36,99012,99013,99015,99017,99019,99021],{"class":38,"line":131},[36,99014,98993],{"class":98},[36,99016,47947],{"class":5667},[36,99018,176],{"class":163},[36,99020,833],{"class":109},[36,99022,98860],{"class":98},[36,99024,99025],{"class":38,"line":137},[36,99026,99027],{"class":42},"#结果：（2，6，3，2）\n",[36,99029,99030],{"class":38,"line":147},[36,99031,98847],{"class":42},[36,99033,99034,99036,99038,99040,99042],{"class":38,"line":153},[36,99035,98993],{"class":98},[36,99037,47947],{"class":5667},[36,99039,176],{"class":163},[36,99041,694],{"class":109},[36,99043,98860],{"class":98},[36,99045,99046],{"class":38,"line":191},[36,99047,99048],{"class":42},"#结果：（2，3，6，2）\n",[36,99050,99051],{"class":38,"line":197},[36,99052,99053],{"class":42},"#axis=3\n",[36,99055,99056,99058,99060,99062,99064],{"class":38,"line":217},[36,99057,98993],{"class":98},[36,99059,47947],{"class":5667},[36,99061,176],{"class":163},[36,99063,689],{"class":109},[36,99065,98860],{"class":98},[36,99067,99068],{"class":38,"line":223},[36,99069,99070],{"class":42},"#结果：（2，3，3，4）\n",[559,99072,99074],{"id":99073},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,99076,99077],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,99079,99080],{},"①二维数组",[26,99082,99084],{"className":30811,"code":99083,"language":30813,"meta":31,"style":31},"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",[33,99085,99086,99110,99134,99139,99144],{"__ignoreMap":31},[36,99087,99088,99090,99092,99094,99096,99098,99100,99102,99104,99106,99108],{"class":38,"line":39},[36,99089,93738],{"class":98},[36,99091,176],{"class":163},[36,99093,93434],{"class":98},[36,99095,833],{"class":109},[36,99097,992],{"class":98},[36,99099,1137],{"class":109},[36,99101,93439],{"class":98},[36,99103,689],{"class":109},[36,99105,992],{"class":98},[36,99107,908],{"class":109},[36,99109,627],{"class":98},[36,99111,99112,99114,99116,99118,99120,99122,99124,99126,99128,99130,99132],{"class":38,"line":46},[36,99113,98619],{"class":98},[36,99115,176],{"class":163},[36,99117,93434],{"class":98},[36,99119,951],{"class":109},[36,99121,992],{"class":98},[36,99123,1256],{"class":109},[36,99125,93439],{"class":98},[36,99127,689],{"class":109},[36,99129,992],{"class":98},[36,99131,908],{"class":109},[36,99133,627],{"class":98},[36,99135,99136],{"class":38,"line":52},[36,99137,99138],{"class":98},"np.hstack((aa,bb))\n",[36,99140,99141],{"class":38,"line":66},[36,99142,99143],{"class":42},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[36,99145,99146],{"class":38,"line":72},[36,99147,99148],{"class":42},"#np.hstack([aa,bb])\n",[14,99150,98665],{},[14,99152,99153],{},[1941,99154],{"alt":31,"src":99155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,99157,99158],{},"等效于concatenate()函数中axis=1时的情况",[14,99160,99161],{},"②三维数组",[26,99163,99165],{"className":30811,"code":99164,"language":30813,"meta":31,"style":31},"#两个三行六列\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",[33,99166,99167,99171,99199,99227,99232,99237],{"__ignoreMap":31},[36,99168,99169],{"class":38,"line":39},[36,99170,98720],{"class":42},[36,99172,99173,99175,99177,99179,99181,99183,99185,99187,99189,99191,99193,99195,99197],{"class":38,"line":46},[36,99174,95953],{"class":98},[36,99176,176],{"class":163},[36,99178,93434],{"class":98},[36,99180,833],{"class":109},[36,99182,992],{"class":98},[36,99184,939],{"class":109},[36,99186,93439],{"class":98},[36,99188,694],{"class":109},[36,99190,992],{"class":98},[36,99192,689],{"class":109},[36,99194,992],{"class":98},[36,99196,958],{"class":109},[36,99198,627],{"class":98},[36,99200,99201,99203,99205,99207,99209,99211,99213,99215,99217,99219,99221,99223,99225],{"class":38,"line":52},[36,99202,98753],{"class":98},[36,99204,176],{"class":163},[36,99206,93434],{"class":98},[36,99208,951],{"class":109},[36,99210,992],{"class":98},[36,99212,98764],{"class":109},[36,99214,93439],{"class":98},[36,99216,694],{"class":109},[36,99218,992],{"class":98},[36,99220,689],{"class":109},[36,99222,992],{"class":98},[36,99224,958],{"class":109},[36,99226,627],{"class":98},[36,99228,99229],{"class":38,"line":66},[36,99230,99231],{"class":42},"#使用hstack\n",[36,99233,99234],{"class":38,"line":72},[36,99235,99236],{"class":98},"np.hstack((aaa,bbb)).shape\n",[36,99238,99239],{"class":38,"line":82},[36,99240,99241],{"class":42},"#输出：（2，6，6）\n",[559,99243,99245],{"id":99244},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,99247,99248],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,99250,99080],{},[26,99252,99254],{"className":30811,"code":99253,"language":30813,"meta":31,"style":31},"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",[33,99255,99256,99280,99304,99309,99314,99319],{"__ignoreMap":31},[36,99257,99258,99260,99262,99264,99266,99268,99270,99272,99274,99276,99278],{"class":38,"line":39},[36,99259,93738],{"class":98},[36,99261,176],{"class":163},[36,99263,93434],{"class":98},[36,99265,833],{"class":109},[36,99267,992],{"class":98},[36,99269,1137],{"class":109},[36,99271,93439],{"class":98},[36,99273,689],{"class":109},[36,99275,992],{"class":98},[36,99277,908],{"class":109},[36,99279,627],{"class":98},[36,99281,99282,99284,99286,99288,99290,99292,99294,99296,99298,99300,99302],{"class":38,"line":46},[36,99283,98619],{"class":98},[36,99285,176],{"class":163},[36,99287,93434],{"class":98},[36,99289,951],{"class":109},[36,99291,992],{"class":98},[36,99293,1256],{"class":109},[36,99295,93439],{"class":98},[36,99297,689],{"class":109},[36,99299,992],{"class":98},[36,99301,908],{"class":109},[36,99303,627],{"class":98},[36,99305,99306],{"class":38,"line":52},[36,99307,99308],{"class":42},"#vstack 垂直方向进行堆叠\n",[36,99310,99311],{"class":38,"line":66},[36,99312,99313],{"class":98},"np.vstack((aa,bb))\n",[36,99315,99316],{"class":38,"line":72},[36,99317,99318],{"class":42},"#与hstack传的参数类似，等价于：\n",[36,99320,99321],{"class":38,"line":82},[36,99322,99323],{"class":98},"np.vstack([aa,bb])\n",[14,99325,98665],{},[14,99327,99328],{},[1941,99329],{"alt":31,"src":99330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,99332,99161],{},[26,99334,99336],{"className":30811,"code":99335,"language":30813,"meta":31,"style":31},"#两个三行六列\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",[33,99337,99338,99342,99370,99398,99403,99408],{"__ignoreMap":31},[36,99339,99340],{"class":38,"line":39},[36,99341,98720],{"class":42},[36,99343,99344,99346,99348,99350,99352,99354,99356,99358,99360,99362,99364,99366,99368],{"class":38,"line":46},[36,99345,95953],{"class":98},[36,99347,176],{"class":163},[36,99349,93434],{"class":98},[36,99351,833],{"class":109},[36,99353,992],{"class":98},[36,99355,939],{"class":109},[36,99357,93439],{"class":98},[36,99359,694],{"class":109},[36,99361,992],{"class":98},[36,99363,689],{"class":109},[36,99365,992],{"class":98},[36,99367,958],{"class":109},[36,99369,627],{"class":98},[36,99371,99372,99374,99376,99378,99380,99382,99384,99386,99388,99390,99392,99394,99396],{"class":38,"line":52},[36,99373,98753],{"class":98},[36,99375,176],{"class":163},[36,99377,93434],{"class":98},[36,99379,951],{"class":109},[36,99381,992],{"class":98},[36,99383,98764],{"class":109},[36,99385,93439],{"class":98},[36,99387,694],{"class":109},[36,99389,992],{"class":98},[36,99391,689],{"class":109},[36,99393,992],{"class":98},[36,99395,958],{"class":109},[36,99397,627],{"class":98},[36,99399,99400],{"class":38,"line":66},[36,99401,99402],{"class":42},"#使用vstack\n",[36,99404,99405],{"class":38,"line":72},[36,99406,99407],{"class":98},"np.vstack((aaa,bbb)).shape\n",[36,99409,99410],{"class":38,"line":82},[36,99411,99412],{"class":42},"#输出：（4，3，6）\n",[559,99414,99416],{"id":99415},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,99418,99419],{},"该方法是三维数组特有的方法",[14,99421,99422],{},"也就是说",[14,99424,99425],{},"一维数组拼接方法用：concatenate()",[14,99427,99428],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,99430,99431],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,99433,99434],{},"四维数组及多维数组只能用concatenate进行拼接",[26,99436,99438],{"className":30811,"code":99437,"language":30813,"meta":31,"style":31},"#两个三行六列\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",[33,99439,99440,99444,99472,99500,99505,99510],{"__ignoreMap":31},[36,99441,99442],{"class":38,"line":39},[36,99443,98720],{"class":42},[36,99445,99446,99448,99450,99452,99454,99456,99458,99460,99462,99464,99466,99468,99470],{"class":38,"line":46},[36,99447,95953],{"class":98},[36,99449,176],{"class":163},[36,99451,93434],{"class":98},[36,99453,833],{"class":109},[36,99455,992],{"class":98},[36,99457,939],{"class":109},[36,99459,93439],{"class":98},[36,99461,694],{"class":109},[36,99463,992],{"class":98},[36,99465,689],{"class":109},[36,99467,992],{"class":98},[36,99469,958],{"class":109},[36,99471,627],{"class":98},[36,99473,99474,99476,99478,99480,99482,99484,99486,99488,99490,99492,99494,99496,99498],{"class":38,"line":52},[36,99475,98753],{"class":98},[36,99477,176],{"class":163},[36,99479,93434],{"class":98},[36,99481,951],{"class":109},[36,99483,992],{"class":98},[36,99485,98764],{"class":109},[36,99487,93439],{"class":98},[36,99489,694],{"class":109},[36,99491,992],{"class":98},[36,99493,689],{"class":109},[36,99495,992],{"class":98},[36,99497,958],{"class":109},[36,99499,627],{"class":98},[36,99501,99502],{"class":38,"line":66},[36,99503,99504],{"class":42},"#使用dstack\n",[36,99506,99507],{"class":38,"line":72},[36,99508,99509],{"class":98},"np.dstack((aaa,bbb)).shape\n",[36,99511,99512],{"class":38,"line":82},[36,99513,99514],{"class":42},"#结果：（2，3，12）\n",[537,99516,99517],{},"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":31,"searchDepth":46,"depth":46,"links":99519},[99520,99521,99522,99523],{"id":98459,"depth":46,"text":98460},{"id":99073,"depth":46,"text":99074},{"id":99244,"depth":46,"text":99245},{"id":99415,"depth":46,"text":99416},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98451,"description":542},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99530,"title":99531,"body":99532,"description":542,"extension":543,"meta":99807,"navigation":246,"path":99808,"seo":99809,"stem":99810,"__hash__":99811},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99533,"toc":99805},[99534,99537,99540,99634,99637,99640,99643,99646,99649,99652,99655,99658,99802],[10,99535,99531],{"id":99536},"_7数组转置",[14,99538,99539],{},"使用transpose()函数",[26,99541,99543],{"className":30811,"code":99542,"language":30813,"meta":31,"style":31},"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",[33,99544,99545,99555,99579,99584,99589,99594,99599,99607,99611,99615,99620,99625,99630],{"__ignoreMap":31},[36,99546,99547,99549,99551,99553],{"class":38,"line":39},[36,99548,30825],{"class":163},[36,99550,31813],{"class":98},[36,99552,31816],{"class":163},[36,99554,31819],{"class":98},[36,99556,99557,99559,99561,99563,99565,99567,99569,99571,99573,99575,99577],{"class":38,"line":46},[36,99558,20],{"class":98},[36,99560,176],{"class":163},[36,99562,32150],{"class":98},[36,99564,833],{"class":109},[36,99566,992],{"class":98},[36,99568,1137],{"class":109},[36,99570,93439],{"class":98},[36,99572,908],{"class":109},[36,99574,992],{"class":98},[36,99576,689],{"class":109},[36,99578,627],{"class":98},[36,99580,99581],{"class":38,"line":52},[36,99582,99583],{"class":42},"#二维数组转置\n",[36,99585,99586],{"class":38,"line":66},[36,99587,99588],{"class":42},"#调用transpose()函数\n",[36,99590,99591],{"class":38,"line":72},[36,99592,99593],{"class":98},"a.transpose()\n",[36,99595,99596],{"class":38,"line":82},[36,99597,99598],{"class":42},"#对于二维数组也可以采用.T来实现\n",[36,99600,99601,99604],{"class":38,"line":88},[36,99602,99603],{"class":98},"a.T",[36,99605,99606],{"class":42},"#与上述代码一样\n",[36,99608,99609],{"class":38,"line":113},[36,99610,93996],{"class":42},[36,99612,99613],{"class":38,"line":119},[36,99614,94360],{"class":59},[36,99616,99617],{"class":38,"line":131},[36,99618,99619],{"class":59},"array([[ 1,  4,  7, 10],\n",[36,99621,99622],{"class":38,"line":137},[36,99623,99624],{"class":59},"       [ 2,  5,  8, 11],\n",[36,99626,99627],{"class":38,"line":147},[36,99628,99629],{"class":59},"       [ 3,  6,  9, 12]])\n",[36,99631,99632],{"class":38,"line":153},[36,99633,94360],{"class":59},[14,99635,99636],{},"也可以使用np.transpose()的形式",[14,99638,99639],{},"#多维数组进行转置 np.transpose()",[14,99641,99642],{},"#对二维数组也可以使用np.transpose()进行转置",[14,99644,99645],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,99647,99648],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,99650,99651],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,99653,99654],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,99656,99657],{},"四维及以上的数组也是一样的道理",[26,99659,99661],{"className":30811,"code":99660,"language":30813,"meta":31,"style":31},"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",[33,99662,99663,99691,99696,99701,99706,99724,99729,99761,99766,99771,99776,99797],{"__ignoreMap":31},[36,99664,99665,99667,99669,99671,99673,99675,99677,99679,99681,99683,99685,99687,99689],{"class":38,"line":39},[36,99666,1433],{"class":98},[36,99668,176],{"class":163},[36,99670,93434],{"class":98},[36,99672,833],{"class":109},[36,99674,992],{"class":98},[36,99676,939],{"class":109},[36,99678,93439],{"class":98},[36,99680,689],{"class":109},[36,99682,992],{"class":98},[36,99684,958],{"class":109},[36,99686,992],{"class":98},[36,99688,694],{"class":109},[36,99690,627],{"class":98},[36,99692,99693],{"class":38,"line":46},[36,99694,99695],{"class":98},"x.shape\n",[36,99697,99698],{"class":38,"line":52},[36,99699,99700],{"class":42},"#结果：（3,6,2）\n",[36,99702,99703],{"class":38,"line":66},[36,99704,99705],{"class":42},"#使用np.transpose()进行转置 变为(2,6,3)\n",[36,99707,99708,99711,99713,99715,99717,99719,99721],{"class":38,"line":72},[36,99709,99710],{"class":98},"np.transpose(x,(",[36,99712,694],{"class":109},[36,99714,992],{"class":98},[36,99716,833],{"class":109},[36,99718,992],{"class":98},[36,99720,807],{"class":109},[36,99722,99723],{"class":98},")).shape\n",[36,99725,99726],{"class":38,"line":82},[36,99727,99728],{"class":42},"#结果：(2,6,3)\n",[36,99730,99731,99733,99735,99737,99739,99741,99743,99745,99747,99749,99751,99753,99755,99757,99759],{"class":38,"line":88},[36,99732,98938],{"class":98},[36,99734,176],{"class":163},[36,99736,93434],{"class":98},[36,99738,833],{"class":109},[36,99740,992],{"class":98},[36,99742,939],{"class":109},[36,99744,93439],{"class":98},[36,99746,689],{"class":109},[36,99748,992],{"class":98},[36,99750,694],{"class":109},[36,99752,992],{"class":98},[36,99754,833],{"class":109},[36,99756,992],{"class":98},[36,99758,958],{"class":109},[36,99760,627],{"class":98},[36,99762,99763],{"class":38,"line":113},[36,99764,99765],{"class":98},"aaaa.shape\n",[36,99767,99768],{"class":38,"line":119},[36,99769,99770],{"class":42},"#结果：（3，2，1，6）\n",[36,99772,99773],{"class":38,"line":131},[36,99774,99775],{"class":42},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[36,99777,99778,99781,99783,99785,99787,99789,99791,99793,99795],{"class":38,"line":137},[36,99779,99780],{"class":98},"np.transpose(aaaa,(",[36,99782,833],{"class":109},[36,99784,992],{"class":98},[36,99786,694],{"class":109},[36,99788,992],{"class":98},[36,99790,807],{"class":109},[36,99792,992],{"class":98},[36,99794,689],{"class":109},[36,99796,99723],{"class":98},[36,99798,99799],{"class":38,"line":147},[36,99800,99801],{"class":42},"#结果：(2,1,3,6)\n",[537,99803,99804],{},"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":31,"searchDepth":46,"depth":46,"links":99806},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99531,"description":542},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99813,"title":99814,"body":99815,"description":542,"extension":543,"meta":100549,"navigation":246,"path":100550,"seo":100551,"stem":100552,"__hash__":100553},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99816,"toc":100547},[99817,99820,99823,99826,99829,99832,99835,99838,99841,99950,99953,99956,100544],[10,99818,99814],{"id":99819},"_8数组分割",[14,99821,99822],{},"split分割",[14,99824,99825],{},"numpy.split(ary,indics_or_sections,axis)",[14,99827,99828],{},"解释：",[14,99830,99831],{},"ary:被分割的数组",[14,99833,99834],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,99836,99837],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,99839,99840],{},"①一维数组的分割",[26,99842,99844],{"className":30811,"code":99843,"language":30813,"meta":31,"style":31},"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",[33,99845,99846,99862,99867,99876,99880,99885,99893,99897,99902,99907,99920,99924,99929,99941,99945],{"__ignoreMap":31},[36,99847,99848,99850,99852,99854,99856,99858,99860],{"class":38,"line":39},[36,99849,20],{"class":98},[36,99851,176],{"class":163},[36,99853,93434],{"class":98},[36,99855,833],{"class":109},[36,99857,992],{"class":98},[36,99859,1034],{"class":109},[36,99861,627],{"class":98},[36,99863,99864],{"class":38,"line":46},[36,99865,99866],{"class":42},"#如果传入整数，必须能够平分，否则会报错\n",[36,99868,99869,99872,99874],{"class":38,"line":52},[36,99870,99871],{"class":98},"np.split(a,",[36,99873,694],{"class":109},[36,99875,627],{"class":98},[36,99877,99878],{"class":38,"line":66},[36,99879,93996],{"class":42},[36,99881,99882],{"class":38,"line":72},[36,99883,99884],{"class":42},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[36,99886,99887,99889,99891],{"class":38,"line":82},[36,99888,99871],{"class":98},[36,99890,908],{"class":109},[36,99892,627],{"class":98},[36,99894,99895],{"class":38,"line":88},[36,99896,93996],{"class":42},[36,99898,99899],{"class":38,"line":113},[36,99900,99901],{"class":42},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[36,99903,99904],{"class":38,"line":119},[36,99905,99906],{"class":42},"#传入数组\n",[36,99908,99909,99912,99914,99916,99918],{"class":38,"line":131},[36,99910,99911],{"class":98},"np.split(a,[",[36,99913,689],{"class":109},[36,99915,992],{"class":98},[36,99917,933],{"class":109},[36,99919,5108],{"class":98},[36,99921,99922],{"class":38,"line":137},[36,99923,93996],{"class":42},[36,99925,99926],{"class":38,"line":147},[36,99927,99928],{"class":42},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[36,99930,99931,99933,99935,99937,99939],{"class":38,"line":153},[36,99932,99911],{"class":98},[36,99934,933],{"class":109},[36,99936,992],{"class":98},[36,99938,983],{"class":109},[36,99940,5108],{"class":98},[36,99942,99943],{"class":38,"line":191},[36,99944,93996],{"class":42},[36,99946,99947],{"class":38,"line":197},[36,99948,99949],{"class":42},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,99951,99952],{},"②二维数组的分割",[14,99954,99955],{},"使用split()",[26,99957,99959],{"className":30811,"code":99958,"language":30813,"meta":31,"style":31},"#二维数组分割\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",[33,99960,99961,99966,99990,99995,100004,100008,100012,100017,100022,100027,100032,100037,100042,100047,100051,100064,100068,100072,100076,100080,100084,100089,100094,100099,100103,100108,100124,100128,100132,100137,100142,100147,100152,100157,100162,100167,100172,100177,100182,100187,100192,100197,100202,100207,100212,100217,100222,100226,100230,100250,100254,100258,100263,100268,100273,100278,100283,100288,100293,100298,100303,100308,100313,100318,100323,100328,100333,100338,100343,100348,100352,100357,100366,100370,100374,100378,100382,100386,100390,100394,100398,100402,100411,100415,100419,100423,100427,100431,100435,100439,100443,100447,100451,100455,100459,100463,100467,100471,100475,100479,100483,100487,100491,100495,100508,100512,100516,100520,100524,100528,100532,100536,100540],{"__ignoreMap":31},[36,99962,99963],{"class":38,"line":39},[36,99964,99965],{"class":42},"#二维数组分割\n",[36,99967,99968,99970,99972,99974,99976,99978,99980,99982,99984,99986,99988],{"class":38,"line":46},[36,99969,93738],{"class":98},[36,99971,176],{"class":163},[36,99973,93434],{"class":98},[36,99975,833],{"class":109},[36,99977,992],{"class":98},[36,99979,939],{"class":109},[36,99981,93439],{"class":98},[36,99983,958],{"class":109},[36,99985,992],{"class":98},[36,99987,958],{"class":109},[36,99989,627],{"class":98},[36,99991,99992],{"class":38,"line":52},[36,99993,99994],{"class":42},"#默认axis=0  传入整数平均分,按行来的\n",[36,99996,99997,100000,100002],{"class":38,"line":66},[36,99998,99999],{"class":98},"np.split(aa,",[36,100001,689],{"class":109},[36,100003,627],{"class":98},[36,100005,100006],{"class":38,"line":72},[36,100007,96196],{"class":42},[36,100009,100010],{"class":38,"line":82},[36,100011,94360],{"class":59},[36,100013,100014],{"class":38,"line":88},[36,100015,100016],{"class":59},"[array([[ 1,  2,  3,  4,  5,  6],\n",[36,100018,100019],{"class":38,"line":113},[36,100020,100021],{"class":59},"        [ 7,  8,  9, 10, 11, 12]]),\n",[36,100023,100024],{"class":38,"line":119},[36,100025,100026],{"class":59}," array([[13, 14, 15, 16, 17, 18],\n",[36,100028,100029],{"class":38,"line":131},[36,100030,100031],{"class":59},"        [19, 20, 21, 22, 23, 24]]),\n",[36,100033,100034],{"class":38,"line":137},[36,100035,100036],{"class":59}," array([[25, 26, 27, 28, 29, 30],\n",[36,100038,100039],{"class":38,"line":147},[36,100040,100041],{"class":59},"        [31, 32, 33, 34, 35, 36]])]\n",[36,100043,100044],{"class":38,"line":153},[36,100045,100046],{"class":59}," '''\n",[36,100048,100049],{"class":38,"line":191},[36,100050,99906],{"class":42},[36,100052,100053,100056,100058,100060,100062],{"class":38,"line":197},[36,100054,100055],{"class":98},"np.split(aa,[",[36,100057,694],{"class":109},[36,100059,992],{"class":98},[36,100061,933],{"class":109},[36,100063,5108],{"class":98},[36,100065,100066],{"class":38,"line":217},[36,100067,96196],{"class":42},[36,100069,100070],{"class":38,"line":223},[36,100071,94360],{"class":59},[36,100073,100074],{"class":38,"line":243},[36,100075,100016],{"class":59},[36,100077,100078],{"class":38,"line":250},[36,100079,100021],{"class":59},[36,100081,100082],{"class":38,"line":256},[36,100083,100026],{"class":59},[36,100085,100086],{"class":38,"line":273},[36,100087,100088],{"class":59},"        [19, 20, 21, 22, 23, 24],\n",[36,100090,100091],{"class":38,"line":278},[36,100092,100093],{"class":59},"        [25, 26, 27, 28, 29, 30]]),\n",[36,100095,100096],{"class":38,"line":284},[36,100097,100098],{"class":59}," array([[31, 32, 33, 34, 35, 36]])]\n",[36,100100,100101],{"class":38,"line":315},[36,100102,94360],{"class":59},[36,100104,100105],{"class":38,"line":320},[36,100106,100107],{"class":42},"#axis=1 按照列来分\n",[36,100109,100110,100112,100114,100116,100118,100120,100122],{"class":38,"line":326},[36,100111,99999],{"class":98},[36,100113,689],{"class":109},[36,100115,992],{"class":98},[36,100117,47947],{"class":5667},[36,100119,176],{"class":163},[36,100121,833],{"class":109},[36,100123,627],{"class":98},[36,100125,100126],{"class":38,"line":343},[36,100127,96196],{"class":42},[36,100129,100130],{"class":38,"line":348},[36,100131,94360],{"class":59},[36,100133,100134],{"class":38,"line":354},[36,100135,100136],{"class":59},"[array([[ 1,  2],\n",[36,100138,100139],{"class":38,"line":370},[36,100140,100141],{"class":59},"        [ 7,  8],\n",[36,100143,100144],{"class":38,"line":375},[36,100145,100146],{"class":59},"        [13, 14],\n",[36,100148,100149],{"class":38,"line":381},[36,100150,100151],{"class":59},"        [19, 20],\n",[36,100153,100154],{"class":38,"line":399},[36,100155,100156],{"class":59},"        [25, 26],\n",[36,100158,100159],{"class":38,"line":404},[36,100160,100161],{"class":59},"        [31, 32]]),\n",[36,100163,100164],{"class":38,"line":410},[36,100165,100166],{"class":59}," array([[ 3,  4],\n",[36,100168,100169],{"class":38,"line":423},[36,100170,100171],{"class":59},"        [ 9, 10],\n",[36,100173,100174],{"class":38,"line":436},[36,100175,100176],{"class":59},"        [15, 16],\n",[36,100178,100179],{"class":38,"line":441},[36,100180,100181],{"class":59},"        [21, 22],\n",[36,100183,100184],{"class":38,"line":447},[36,100185,100186],{"class":59},"        [27, 28],\n",[36,100188,100189],{"class":38,"line":465},[36,100190,100191],{"class":59},"        [33, 34]]),\n",[36,100193,100194],{"class":38,"line":470},[36,100195,100196],{"class":59}," array([[ 5,  6],\n",[36,100198,100199],{"class":38,"line":476},[36,100200,100201],{"class":59},"        [11, 12],\n",[36,100203,100204],{"class":38,"line":496},[36,100205,100206],{"class":59},"        [17, 18],\n",[36,100208,100209],{"class":38,"line":501},[36,100210,100211],{"class":59},"        [23, 24],\n",[36,100213,100214],{"class":38,"line":507},[36,100215,100216],{"class":59},"        [29, 30],\n",[36,100218,100219],{"class":38,"line":517},[36,100220,100221],{"class":59},"        [35, 36]])]\n",[36,100223,100224],{"class":38,"line":522},[36,100225,100046],{"class":59},[36,100227,100228],{"class":38,"line":528},[36,100229,99906],{"class":42},[36,100231,100232,100234,100236,100238,100240,100242,100244,100246,100248],{"class":38,"line":10203},[36,100233,100055],{"class":98},[36,100235,833],{"class":109},[36,100237,992],{"class":98},[36,100239,694],{"class":109},[36,100241,42042],{"class":98},[36,100243,47947],{"class":5667},[36,100245,176],{"class":163},[36,100247,833],{"class":109},[36,100249,627],{"class":98},[36,100251,100252],{"class":38,"line":10227},[36,100253,93996],{"class":42},[36,100255,100256],{"class":38,"line":10232},[36,100257,94360],{"class":59},[36,100259,100260],{"class":38,"line":10237},[36,100261,100262],{"class":59},"[array([[ 1],\n",[36,100264,100265],{"class":38,"line":10242},[36,100266,100267],{"class":59},"        [ 7],\n",[36,100269,100270],{"class":38,"line":10251},[36,100271,100272],{"class":59},"        [13],\n",[36,100274,100275],{"class":38,"line":10256},[36,100276,100277],{"class":59},"        [19],\n",[36,100279,100280],{"class":38,"line":10262},[36,100281,100282],{"class":59},"        [25],\n",[36,100284,100285],{"class":38,"line":10283},[36,100286,100287],{"class":59},"        [31]]),\n",[36,100289,100290],{"class":38,"line":10289},[36,100291,100292],{"class":59}," array([[ 2],\n",[36,100294,100295],{"class":38,"line":10303},[36,100296,100297],{"class":59},"        [ 8],\n",[36,100299,100300],{"class":38,"line":10309},[36,100301,100302],{"class":59},"        [14],\n",[36,100304,100305],{"class":38,"line":10336},[36,100306,100307],{"class":59},"        [20],\n",[36,100309,100310],{"class":38,"line":10345},[36,100311,100312],{"class":59},"        [26],\n",[36,100314,100315],{"class":38,"line":10351},[36,100316,100317],{"class":59},"        [32]]),\n",[36,100319,100320],{"class":38,"line":10359},[36,100321,100322],{"class":59}," array([[ 3,  4,  5,  6],\n",[36,100324,100325],{"class":38,"line":10364},[36,100326,100327],{"class":59},"        [ 9, 10, 11, 12],\n",[36,100329,100330],{"class":38,"line":17043},[36,100331,100332],{"class":59},"        [15, 16, 17, 18],\n",[36,100334,100335],{"class":38,"line":17049},[36,100336,100337],{"class":59},"        [21, 22, 23, 24],\n",[36,100339,100340],{"class":38,"line":17072},[36,100341,100342],{"class":59},"        [27, 28, 29, 30],\n",[36,100344,100345],{"class":38,"line":17078},[36,100346,100347],{"class":59},"        [33, 34, 35, 36]])]\n",[36,100349,100350],{"class":38,"line":17101},[36,100351,94360],{"class":59},[36,100353,100354],{"class":38,"line":17115},[36,100355,100356],{"class":42},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[36,100358,100359,100362,100364],{"class":38,"line":17135},[36,100360,100361],{"class":98},"np.vsplit(aa,",[36,100363,689],{"class":109},[36,100365,627],{"class":98},[36,100367,100368],{"class":38,"line":17141},[36,100369,93996],{"class":42},[36,100371,100372],{"class":38,"line":17152},[36,100373,94360],{"class":59},[36,100375,100376],{"class":38,"line":17175},[36,100377,100016],{"class":59},[36,100379,100380],{"class":38,"line":17197},[36,100381,100021],{"class":59},[36,100383,100384],{"class":38,"line":17202},[36,100385,100026],{"class":59},[36,100387,100388],{"class":38,"line":17208},[36,100389,100031],{"class":59},[36,100391,100392],{"class":38,"line":17222},[36,100393,100036],{"class":59},[36,100395,100396],{"class":38,"line":17235},[36,100397,100041],{"class":59},[36,100399,100400],{"class":38,"line":17240},[36,100401,94360],{"class":59},[36,100403,100404,100407,100409],{"class":38,"line":17254},[36,100405,100406],{"class":98},"np.hsplit(aa,",[36,100408,689],{"class":109},[36,100410,627],{"class":98},[36,100412,100413],{"class":38,"line":17259},[36,100414,93996],{"class":42},[36,100416,100417],{"class":38,"line":17265},[36,100418,94360],{"class":59},[36,100420,100421],{"class":38,"line":17270},[36,100422,100136],{"class":59},[36,100424,100425],{"class":38,"line":17284},[36,100426,100141],{"class":59},[36,100428,100429],{"class":38,"line":17289},[36,100430,100146],{"class":59},[36,100432,100433],{"class":38,"line":17294},[36,100434,100151],{"class":59},[36,100436,100437],{"class":38,"line":17308},[36,100438,100156],{"class":59},[36,100440,100441],{"class":38,"line":17320},[36,100442,100161],{"class":59},[36,100444,100445],{"class":38,"line":17325},[36,100446,100166],{"class":59},[36,100448,100449],{"class":38,"line":17338},[36,100450,100171],{"class":59},[36,100452,100453],{"class":38,"line":17343},[36,100454,100176],{"class":59},[36,100456,100457],{"class":38,"line":17348},[36,100458,100181],{"class":59},[36,100460,100461],{"class":38,"line":17353},[36,100462,100186],{"class":59},[36,100464,100465],{"class":38,"line":17366},[36,100466,100191],{"class":59},[36,100468,100469],{"class":38,"line":17371},[36,100470,100196],{"class":59},[36,100472,100473],{"class":38,"line":33066},[36,100474,100201],{"class":59},[36,100476,100477],{"class":38,"line":33072},[36,100478,100206],{"class":59},[36,100480,100481],{"class":38,"line":33078},[36,100482,100211],{"class":59},[36,100484,100485],{"class":38,"line":33084},[36,100486,100216],{"class":59},[36,100488,100489],{"class":38,"line":33090},[36,100490,100221],{"class":59},[36,100492,100493],{"class":38,"line":33101},[36,100494,94360],{"class":59},[36,100496,100497,100500,100502,100504,100506],{"class":38,"line":33107},[36,100498,100499],{"class":98},"np.vsplit(aa,[",[36,100501,694],{"class":109},[36,100503,992],{"class":98},[36,100505,933],{"class":109},[36,100507,5108],{"class":98},[36,100509,100510],{"class":38,"line":33127},[36,100511,93996],{"class":42},[36,100513,100514],{"class":38,"line":33133},[36,100515,94360],{"class":59},[36,100517,100518],{"class":38,"line":33144},[36,100519,100016],{"class":59},[36,100521,100522],{"class":38,"line":33150},[36,100523,100021],{"class":59},[36,100525,100526],{"class":38,"line":33156},[36,100527,100026],{"class":59},[36,100529,100530],{"class":38,"line":33162},[36,100531,100088],{"class":59},[36,100533,100534],{"class":38,"line":33168},[36,100535,100093],{"class":59},[36,100537,100538],{"class":38,"line":33174},[36,100539,100098],{"class":59},[36,100541,100542],{"class":38,"line":33180},[36,100543,100046],{"class":59},[537,100545,100546],{},"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":31,"searchDepth":46,"depth":46,"links":100548},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99814,"description":542},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100555,"title":100556,"body":100557,"description":542,"extension":543,"meta":101051,"navigation":246,"path":101052,"seo":101053,"stem":101054,"__hash__":101055},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100558,"toc":101042},[100559,100562,100565,100590,100594,100653,100705,100709,100711,100747,100801,100803,100841,100912,100916,100921,100925,100928,100961,100964,100968,100971,100974,100977,100980,100985,100989,100992,100995,100998,101001,101006,101010,101015,101018,101039],[10,100560,100556],{"id":100561},"_9数学函数",[14,100563,100564],{},"补充回顾：python的列表推导式",[26,100566,100568],{"className":30811,"code":100567,"language":30813,"meta":31,"style":31},"[1\u002Fi for i in a]\n",[33,100569,100570],{"__ignoreMap":31},[36,100571,100572,100574,100576,100578,100581,100583,100585,100587],{"class":38,"line":39},[36,100573,1503],{"class":98},[36,100575,833],{"class":109},[36,100577,1198],{"class":163},[36,100579,100580],{"class":98},"i ",[36,100582,3476],{"class":163},[36,100584,9879],{"class":98},[36,100586,26480],{"class":163},[36,100588,100589],{"class":98}," a]\n",[559,100591,100593],{"id":100592},"_91-求倒数","9.1 求倒数",[26,100595,100597],{"className":30811,"code":100596,"language":30813,"meta":31,"style":31},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[33,100598,100599,100604,100632,100644],{"__ignoreMap":31},[36,100600,100601],{"class":38,"line":39},[36,100602,100603],{"class":42},"#数组求倒数\n",[36,100605,100606,100608,100610,100612,100614,100616,100618,100620,100622,100624,100626,100628,100630],{"class":38,"line":46},[36,100607,20],{"class":98},[36,100609,176],{"class":163},[36,100611,1503],{"class":98},[36,100613,833],{"class":109},[36,100615,992],{"class":98},[36,100617,694],{"class":109},[36,100619,992],{"class":98},[36,100621,689],{"class":109},[36,100623,992],{"class":98},[36,100625,908],{"class":109},[36,100627,992],{"class":98},[36,100629,933],{"class":109},[36,100631,33679],{"class":98},[36,100633,100634,100636,100638,100641],{"class":38,"line":52},[36,100635,878],{"class":98},[36,100637,176],{"class":163},[36,100639,100640],{"class":98},"np.array(a)",[36,100642,100643],{"class":42},"#将列表转换为数组\n",[36,100645,100646,100648,100650],{"class":38,"line":66},[36,100647,833],{"class":109},[36,100649,1198],{"class":163},[36,100651,100652],{"class":98},"b\n",[26,100654,100656],{"className":30811,"code":100655,"language":30813,"meta":31,"style":31},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[33,100657,100658,100686,100695,100700],{"__ignoreMap":31},[36,100659,100660,100662,100664,100666,100668,100670,100672,100674,100676,100678,100680,100682,100684],{"class":38,"line":39},[36,100661,20],{"class":98},[36,100663,176],{"class":163},[36,100665,1503],{"class":98},[36,100667,833],{"class":109},[36,100669,992],{"class":98},[36,100671,694],{"class":109},[36,100673,992],{"class":98},[36,100675,689],{"class":109},[36,100677,992],{"class":98},[36,100679,908],{"class":109},[36,100681,992],{"class":98},[36,100683,933],{"class":109},[36,100685,33679],{"class":98},[36,100687,100688,100690,100692],{"class":38,"line":46},[36,100689,878],{"class":98},[36,100691,176],{"class":163},[36,100693,100694],{"class":98},"np.array(a)\n",[36,100696,100697],{"class":38,"line":52},[36,100698,100699],{"class":42},"#调用numpy中的函数reciprocal()\n",[36,100701,100702],{"class":38,"line":66},[36,100703,100704],{"class":98},"np.reciprocal(b)\n",[559,100706,100708],{"id":100707},"_92-求平方","9.2 求平方",[14,100710,94962],{},[26,100712,100714],{"className":30811,"code":100713,"language":30813,"meta":31,"style":31},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[33,100715,100716,100721,100726,100742],{"__ignoreMap":31},[36,100717,100718],{"class":38,"line":39},[36,100719,100720],{"class":42},"#square()，求平方\n",[36,100722,100723],{"class":38,"line":46},[36,100724,100725],{"class":42},"#一维数组\n",[36,100727,100728,100730,100732,100734,100736,100738,100740],{"class":38,"line":52},[36,100729,20],{"class":98},[36,100731,176],{"class":163},[36,100733,93434],{"class":98},[36,100735,833],{"class":109},[36,100737,992],{"class":98},[36,100739,1060],{"class":109},[36,100741,627],{"class":98},[36,100743,100744],{"class":38,"line":66},[36,100745,100746],{"class":98},"np.square(a)\n",[26,100748,100750],{"className":30811,"code":100749,"language":30813,"meta":31,"style":31},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[33,100751,100752,100757,100762,100783],{"__ignoreMap":31},[36,100753,100754],{"class":38,"line":39},[36,100755,100756],{"class":42},"#或者通过循环遍历的形式来计算\n",[36,100758,100759],{"class":38,"line":46},[36,100760,100761],{"class":42},"#这是一个列表\n",[36,100763,100764,100767,100769,100771,100773,100775,100777,100780],{"class":38,"line":52},[36,100765,100766],{"class":98},"[i",[36,100768,1069],{"class":163},[36,100770,100580],{"class":98},[36,100772,3476],{"class":163},[36,100774,9879],{"class":98},[36,100776,26480],{"class":163},[36,100778,100779],{"class":98}," a]",[36,100781,100782],{"class":42},"#这个求完之后在数列当中\n",[36,100784,100785,100788,100790,100792,100794,100796,100798],{"class":38,"line":66},[36,100786,100787],{"class":98},"np.array([i",[36,100789,1069],{"class":163},[36,100791,100580],{"class":98},[36,100793,3476],{"class":163},[36,100795,9879],{"class":98},[36,100797,26480],{"class":163},[36,100799,100800],{"class":98}," a])\n",[14,100802,93723],{},[26,100804,100806],{"className":30811,"code":100805,"language":30813,"meta":31,"style":31},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[33,100807,100808,100812,100836],{"__ignoreMap":31},[36,100809,100810],{"class":38,"line":39},[36,100811,93733],{"class":42},[36,100813,100814,100816,100818,100820,100822,100824,100826,100828,100830,100832,100834],{"class":38,"line":46},[36,100815,93738],{"class":98},[36,100817,176],{"class":163},[36,100819,93434],{"class":98},[36,100821,833],{"class":109},[36,100823,992],{"class":98},[36,100825,1137],{"class":109},[36,100827,93439],{"class":98},[36,100829,908],{"class":109},[36,100831,992],{"class":98},[36,100833,689],{"class":109},[36,100835,627],{"class":98},[36,100837,100838],{"class":38,"line":52},[36,100839,100840],{"class":98},"np.square(aa)\n",[26,100842,100844],{"className":30811,"code":100843,"language":30813,"meta":31,"style":31},"#传统的方式\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",[33,100845,100846,100851,100860,100876,100892,100907],{"__ignoreMap":31},[36,100847,100848],{"class":38,"line":39},[36,100849,100850],{"class":42},"#传统的方式\n",[36,100852,100853,100855,100857],{"class":38,"line":46},[36,100854,98619],{"class":98},[36,100856,176],{"class":163},[36,100858,100859],{"class":98},"np.empty_like(aa)\n",[36,100861,100862,100864,100866,100868,100870,100872,100874],{"class":38,"line":52},[36,100863,3476],{"class":163},[36,100865,9879],{"class":98},[36,100867,26480],{"class":163},[36,100869,32876],{"class":109},[36,100871,621],{"class":98},[36,100873,908],{"class":109},[36,100875,31219],{"class":98},[36,100877,100878,100880,100882,100884,100886,100888,100890],{"class":38,"line":66},[36,100879,3652],{"class":163},[36,100881,9941],{"class":98},[36,100883,26480],{"class":163},[36,100885,32876],{"class":109},[36,100887,621],{"class":98},[36,100889,689],{"class":109},[36,100891,31219],{"class":98},[36,100893,100894,100897,100899,100902,100904],{"class":38,"line":72},[36,100895,100896],{"class":98},"        bb[i,j]",[36,100898,176],{"class":163},[36,100900,100901],{"class":98},"aa[i,j]",[36,100903,1069],{"class":163},[36,100905,100906],{"class":98},"aa[i,j]\n",[36,100908,100909],{"class":38,"line":82},[36,100910,100911],{"class":98},"bb\n",[559,100913,100915],{"id":100914},"_93-求各元素的符号","9.3 求各元素的符号",[14,100917,100918],{},[1941,100919],{"alt":31,"src":100920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[559,100922,100924],{"id":100923},"_94-modf函数","9.4 modf函数",[14,100926,100927],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[26,100929,100931],{"className":30811,"code":100930,"language":30813,"meta":31,"style":31},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[33,100932,100933,100956],{"__ignoreMap":31},[36,100934,100935,100937,100939,100941,100943,100945,100947,100949,100951,100954],{"class":38,"line":39},[36,100936,20],{"class":98},[36,100938,176],{"class":163},[36,100940,93434],{"class":98},[36,100942,1146],{"class":163},[36,100944,1060],{"class":109},[36,100946,992],{"class":98},[36,100948,1060],{"class":109},[36,100950,992],{"class":98},[36,100952,100953],{"class":109},"0.3",[36,100955,627],{"class":98},[36,100957,100958],{"class":38,"line":46},[36,100959,100960],{"class":98},"np.modf(a)\n",[14,100962,100963],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[559,100965,100967],{"id":100966},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,100969,100970],{},"np.cell()",[14,100972,100973],{},"np.floor()",[14,100975,100976],{},"np.rint()",[14,100978,100979],{},"对各元素分别向上取整、向下取整、四舍五入",[14,100981,100982],{},[1941,100983],{"alt":31,"src":100984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[559,100986,100988],{"id":100987},"_96-around函数","9.6 around()函数",[14,100990,100991],{},"around()函数也可以实现对数的小数位数进行操作",[14,100993,100994],{},"其中的参数：",[14,100996,100997],{},"1.要传的数组",[14,100999,101000],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,101002,101003],{},[1941,101004],{"alt":31,"src":101005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[559,101007,101009],{"id":101008},"_97-三角函数","9.7 三角函数",[14,101011,101012],{},[1941,101013],{"alt":31,"src":101014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,101016,101017],{},"引入图像模块非常重要",[26,101019,101021],{"className":30811,"code":101020,"language":30813,"meta":31,"style":31},"from matplotlib import pyplot as plt\n",[33,101022,101023],{"__ignoreMap":31},[36,101024,101025,101027,101030,101032,101035,101037],{"class":38,"line":39},[36,101026,31170],{"class":163},[36,101028,101029],{"class":98}," matplotlib ",[36,101031,30825],{"class":163},[36,101033,101034],{"class":98}," pyplot ",[36,101036,31816],{"class":163},[36,101038,31870],{"class":98},[537,101040,101041],{},"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":31,"searchDepth":46,"depth":46,"links":101043},[101044,101045,101046,101047,101048,101049,101050],{"id":100592,"depth":46,"text":100593},{"id":100707,"depth":46,"text":100708},{"id":100914,"depth":46,"text":100915},{"id":100923,"depth":46,"text":100924},{"id":100966,"depth":46,"text":100967},{"id":100987,"depth":46,"text":100988},{"id":101008,"depth":46,"text":101009},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100556,"description":542},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":101057,"title":101058,"body":101059,"description":542,"extension":543,"meta":101063,"navigation":246,"path":101064,"seo":101065,"stem":101066,"__hash__":101067},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":101060,"toc":101061},[],{"title":31,"searchDepth":46,"depth":46,"links":101062},[],{"category":50853},"\u002Fwiki\u002F2025-08-14-numpy",{"title":101058,"description":542},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":101069,"title":101070,"body":101071,"description":31,"extension":543,"meta":103078,"navigation":246,"path":103079,"seo":103080,"stem":103081,"__hash__":103082},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":101072,"toc":103054},[101073,101076,101080,101083,101086,101092,101095,101118,101121,101155,101158,101199,101203,101206,101299,101302,101346,101349,101366,101369,101383,101386,101389,101433,101436,101473,101477,101480,101486,101491,101511,101515,101518,101584,101587,101605,101609,101612,101641,101651,101657,101661,101664,101670,101681,101685,101688,101718,101721,102001,102004,102007,102018,102021,102024,102046,102053,102056,102074,102077,102080,102094,102102,102105,102131,102137,102140,102143,102153,102165,102185,102194,102214,102224,102248,102261,102275,102280,102321,102338,102363,102375,102395,102401,102446,102465,102482,102495,102511,102518,102530,102539,102574,102595,102620,102633,102657,102672,102697,102700,102721,102730,102733,102744,102748,102751,102757,102769,102776,102780,102783,102795,102798,102812,102815,102825,102835,102838,102878,102881,102885,102891,102894,102908,102912,102915,102948,102952,102955,102978,102986,102989,102995,103001,103004,103007,103035,103039,103042,103048,103051],[10,101074,101070],{"id":101075},"_1环境安装与第一个-mujoco-程序",[559,101077,101079],{"id":101078},"_1目标说明","1.目标说明",[14,101081,101082],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,101084,101085],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[26,101087,101090],{"className":101088,"code":101089,"language":5638,"meta":31},[5636],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[33,101091,101089],{"__ignoreMap":31},[14,101093,101094],{},"需要掌握:",[571,101096,101097,101100,101103,101108,101113],{},[574,101098,101099],{},"Fedora 44 下 MuJoCo 的系统依赖",[574,101101,101102],{},"Python 虚拟环境创建",[574,101104,101105],{},[33,101106,101107],{},"mujoco.MjModel",[574,101109,101110],{},[33,101111,101112],{},"mujoco.MjData",[574,101114,101115],{},[33,101116,101117],{},"mujoco.mj_step(model, data)",[14,101119,101120],{},"MuJoCo 中最重要的两个对象:",[753,101122,101123,101133],{},[756,101124,101125],{},[759,101126,101127,101130],{},[762,101128,101129],{"align":24175},"对象",[762,101131,101132],{"align":24175},"含义",[800,101134,101135,101145],{},[759,101136,101137,101142],{},[805,101138,101139],{"align":24175},[33,101140,101141],{},"MjModel",[805,101143,101144],{"align":24175},"模型结构，来自 XML，基本不随时间变化",[759,101146,101147,101152],{},[805,101148,101149],{"align":24175},[33,101150,101151],{},"MjData",[805,101153,101154],{"align":24175},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,101156,101157],{},"可以先用一个类比理解：",[753,101159,101160,101170],{},[756,101161,101162],{},[759,101163,101164,101167],{},[762,101165,101166],{"align":24175},"类比",[762,101168,101169],{"align":24175},"MuJoCo 对象",[800,101171,101172,101181,101190],{},[759,101173,101174,101177],{},[805,101175,101176],{"align":24175},"游戏地图和角色配置",[805,101178,101179],{"align":24175},[33,101180,101141],{},[759,101182,101183,101186],{},[805,101184,101185],{"align":24175},"游戏运行到当前帧的状态",[805,101187,101188],{"align":24175},[33,101189,101151],{},[759,101191,101192,101195],{},[805,101193,101194],{"align":24175},"前进一帧",[805,101196,101197],{"align":24175},[33,101198,101117],{},[559,101200,101202],{"id":101201},"_2环境与依赖安装","2.环境与依赖安装",[14,101204,101205],{},"Fedora 44 系统依赖:",[26,101207,101209],{"className":24261,"code":101208,"language":24263,"meta":31,"style":31},"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",[33,101210,101211,101223,101236,101249,101259,101269,101288],{"__ignoreMap":31},[36,101212,101213,101215,101217,101219,101221],{"class":38,"line":39},[36,101214,56],{"class":55},[36,101216,26749],{"class":59},[36,101218,160],{"class":59},[36,101220,26834],{"class":109},[36,101222,25115],{"class":109},[36,101224,101225,101228,101231,101234],{"class":38,"line":46},[36,101226,101227],{"class":59},"  python3",[36,101229,101230],{"class":59}," python3-pip",[36,101232,101233],{"class":59}," python3-virtualenv",[36,101235,25115],{"class":109},[36,101237,101238,101241,101244,101247],{"class":38,"line":52},[36,101239,101240],{"class":59},"  mesa-libGL",[36,101242,101243],{"class":59}," mesa-libGLU",[36,101245,101246],{"class":59}," mesa-dri-drivers",[36,101248,25115],{"class":109},[36,101250,101251,101254,101257],{"class":38,"line":66},[36,101252,101253],{"class":59},"  libglvnd-glx",[36,101255,101256],{"class":59}," libglvnd-opengl",[36,101258,25115],{"class":109},[36,101260,101261,101264,101267],{"class":38,"line":72},[36,101262,101263],{"class":59},"  glfw",[36,101265,101266],{"class":59}," glfw-devel",[36,101268,25115],{"class":109},[36,101270,101271,101274,101277,101280,101283,101286],{"class":38,"line":82},[36,101272,101273],{"class":59},"  libX11",[36,101275,101276],{"class":59}," libXcursor",[36,101278,101279],{"class":59}," libXi",[36,101281,101282],{"class":59}," libXinerama",[36,101284,101285],{"class":59}," libXrandr",[36,101287,25115],{"class":109},[36,101289,101290,101293,101296],{"class":38,"line":88},[36,101291,101292],{"class":59},"  gcc",[36,101294,101295],{"class":59}," gcc-c++",[36,101297,101298],{"class":59}," make\n",[14,101300,101301],{},"创建 Python 环境:",[26,101303,101305],{"className":24261,"code":101304,"language":24263,"meta":31,"style":31},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[33,101306,101307,101321,101329],{"__ignoreMap":31},[36,101308,101309,101312,101315,101318],{"class":38,"line":39},[36,101310,101311],{"class":55},"python3",[36,101313,101314],{"class":109}," -m",[36,101316,101317],{"class":59}," venv",[36,101319,101320],{"class":59}," .venv\n",[36,101322,101323,101326],{"class":38,"line":46},[36,101324,101325],{"class":109},"source",[36,101327,101328],{"class":59}," .venv\u002Fbin\u002Factivate\n",[36,101330,101331,101333,101335,101338,101340,101343],{"class":38,"line":52},[36,101332,30813],{"class":55},[36,101334,101314],{"class":109},[36,101336,101337],{"class":59}," pip",[36,101339,160],{"class":59},[36,101341,101342],{"class":109}," --upgrade",[36,101344,101345],{"class":59}," pip\n",[14,101347,101348],{},"pip 安装:",[26,101350,101352],{"className":24261,"code":101351,"language":24263,"meta":31,"style":31},"pip install \"mujoco>=2.3\" numpy\n",[33,101353,101354],{"__ignoreMap":31},[36,101355,101356,101358,101360,101363],{"class":38,"line":39},[36,101357,24270],{"class":55},[36,101359,160],{"class":59},[36,101361,101362],{"class":59}," \"mujoco>=2.3\"",[36,101364,101365],{"class":59}," numpy\n",[14,101367,101368],{},"安装完成后，先做最小检查：",[26,101370,101372],{"className":24261,"code":101371,"language":24263,"meta":31,"style":31},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[33,101373,101374],{"__ignoreMap":31},[36,101375,101376,101378,101380],{"class":38,"line":39},[36,101377,30813],{"class":55},[36,101379,30791],{"class":109},[36,101381,101382],{"class":59}," \"import mujoco; print(mujoco.__version__)\"\n",[14,101384,101385],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,101387,101388],{},"conda 安装:",[26,101390,101392],{"className":24261,"code":101391,"language":24263,"meta":31,"style":31},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[33,101393,101394,101413,101423],{"__ignoreMap":31},[36,101395,101396,101398,101400,101402,101405,101408,101411],{"class":38,"line":39},[36,101397,30763],{"class":55},[36,101399,29609],{"class":59},[36,101401,25552],{"class":109},[36,101403,101404],{"class":59}," mujoco-study",[36,101406,101407],{"class":59}," python=",[36,101409,101410],{"class":109},"3.10",[36,101412,110],{"class":109},[36,101414,101415,101417,101420],{"class":38,"line":46},[36,101416,30763],{"class":55},[36,101418,101419],{"class":59}," activate",[36,101421,101422],{"class":59}," mujoco-study\n",[36,101424,101425,101427,101429,101431],{"class":38,"line":52},[36,101426,24270],{"class":55},[36,101428,160],{"class":59},[36,101430,101362],{"class":59},[36,101432,101365],{"class":59},[14,101434,101435],{},"版本冲突说明:",[571,101437,101438,101444,101454,101463],{},[574,101439,101440,101441,28819],{},"不要安装 ",[33,101442,101443],{},"mujoco-py",[574,101445,101446,101447,101449,101450,101453],{},"如果旧项目里同时安装了 ",[33,101448,101443],{}," 和 ",[33,101451,101452],{},"mujoco","，建议新建干净虚拟环境。",[574,101455,101456,101459,101460,28819],{},[33,101457,101458],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[33,101461,101462],{},"~\u002F.mujoco\u002Fmujoco210",[574,101464,101465,101466,82971,101469,101472],{},"离屏渲染可能涉及 OpenGL 后端，",[33,101467,101468],{},"MUJOCO_GL=egl",[33,101470,101471],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[559,101474,101476],{"id":101475},"_3核心概念解释","3.核心概念解释",[14,101478,101479],{},"MuJoCo 的基本执行流程:",[26,101481,101484],{"className":101482,"code":101483,"language":5638,"meta":31},[5636],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[33,101485,101483],{"__ignoreMap":31},[14,101487,101488,101490],{},[33,101489,101141],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,101492,101493,101495,101496,828,101499,828,101502,828,101505,828,101508,28819],{},[33,101494,101151],{}," 存放仿真运行时状态，例如 ",[33,101497,101498],{},"data.time",[33,101500,101501],{},"data.qpos",[33,101503,101504],{},"data.qvel",[33,101506,101507],{},"data.ctrl",[33,101509,101510],{},"data.xpos",[588,101512,101514],{"id":101513},"xml-是什么","XML 是什么",[14,101516,101517],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[26,101519,101521],{"className":53499,"code":101520,"language":53501,"meta":31,"style":31},"\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",[33,101522,101523,101545,101576],{"__ignoreMap":31},[36,101524,101525,101527,101529,101531,101533,101535,101538,101540,101543],{"class":38,"line":39},[36,101526,179],{"class":98},[36,101528,52232],{"class":51733},[36,101530,15359],{"class":55},[36,101532,176],{"class":98},[36,101534,53923],{"class":59},[36,101536,101537],{"class":55}," pos",[36,101539,176],{"class":98},[36,101541,101542],{"class":59},"\"0 0 1\"",[36,101544,188],{"class":98},[36,101546,101547,101549,101552,101554,101556,101559,101561,101563,101565,101568,101570,101573],{"class":38,"line":46},[36,101548,52576],{"class":98},[36,101550,101551],{"class":51733},"geom",[36,101553,15359],{"class":55},[36,101555,176],{"class":98},[36,101557,101558],{"class":59},"\"box_geom\"",[36,101560,54256],{"class":55},[36,101562,176],{"class":98},[36,101564,53923],{"class":59},[36,101566,101567],{"class":55}," size",[36,101569,176],{"class":98},[36,101571,101572],{"class":59},"\"0.1 0.1 0.1\"",[36,101574,101575],{"class":98},"\u002F>\n",[36,101577,101578,101580,101582],{"class":38,"line":52},[36,101579,52217],{"class":98},[36,101581,52232],{"class":51733},[36,101583,188],{"class":98},[14,101585,101586],{},"这段意思是：",[571,101588,101589,101595,101602],{},[574,101590,101591,101592,101594],{},"创建一个叫 ",[33,101593,54146],{}," 的刚体。",[574,101596,101597,101598,101601],{},"它初始放在 ",[33,101599,101600],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[574,101603,101604],{},"它里面有一个盒子形状的几何体。",[588,101606,101608],{"id":101607},"timestep-是什么","timestep 是什么",[14,101610,101611],{},"XML 里的：",[26,101613,101615],{"className":53499,"code":101614,"language":53501,"meta":31,"style":31},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[33,101616,101617],{"__ignoreMap":31},[36,101618,101619,101621,101623,101626,101628,101631,101634,101636,101639],{"class":38,"line":39},[36,101620,179],{"class":98},[36,101622,69598],{"class":51733},[36,101624,101625],{"class":55}," timestep",[36,101627,176],{"class":98},[36,101629,101630],{"class":59},"\"0.01\"",[36,101632,101633],{"class":55}," gravity",[36,101635,176],{"class":98},[36,101637,101638],{"class":59},"\"0 0 -9.81\"",[36,101640,101575],{"class":98},[14,101642,101643,101644,101647,101648,101650],{},"表示每调用一次 ",[33,101645,101646],{},"mj_step","，仿真时间前进 ",[33,101649,39419],{}," 秒。循环 100 次，大约就是 1 秒：",[26,101652,101655],{"className":101653,"code":101654,"language":5638,"meta":31},[5636],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[33,101656,101654],{"__ignoreMap":31},[588,101658,101660],{"id":101659},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,101662,101663],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[26,101665,101668],{"className":101666,"code":101667,"language":5638,"meta":31},[5636],"x y z qw qx qy qz\n",[33,101669,101667],{"__ignoreMap":31},[14,101671,101672,101673,101676,101677,101680],{},"表示一个自由刚体的位置和姿态。其中 ",[33,101674,101675],{},"x y z"," 是位置，",[33,101678,101679],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[559,101682,101684],{"id":101683},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,101686,101687],{},"新建文件:",[26,101689,101691],{"className":24261,"code":101690,"language":24263,"meta":31,"style":31},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[33,101692,101693,101703,101710],{"__ignoreMap":31},[36,101694,101695,101698,101700],{"class":38,"line":39},[36,101696,101697],{"class":55},"mkdir",[36,101699,29649],{"class":109},[36,101701,101702],{"class":59}," mujoco_tutorial\n",[36,101704,101705,101708],{"class":38,"line":46},[36,101706,101707],{"class":109},"cd",[36,101709,101702],{"class":59},[36,101711,101712,101715],{"class":38,"line":52},[36,101713,101714],{"class":55},"touch",[36,101716,101717],{"class":59}," ch1_first_sim.py\n",[14,101719,101720],{},"写入:",[26,101722,101724],{"className":30811,"code":101723,"language":30813,"meta":31,"style":31},"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",[33,101725,101726,101733,101737,101741,101751,101756,101761,101765,101770,101775,101779,101784,101789,101794,101799,101804,101809,101813,101817,101821,101834,101848,101858,101862,101874,101886,101898,101910,101922,101926,101943,101948,101952,101963,101974,101978,101982,101996],{"__ignoreMap":31},[36,101727,101728,101730],{"class":38,"line":39},[36,101729,30825],{"class":163},[36,101731,101732],{"class":98}," mujoco\n",[36,101734,101735],{"class":38,"line":46},[36,101736,247],{"emptyLinePlaceholder":246},[36,101738,101739],{"class":38,"line":52},[36,101740,247],{"emptyLinePlaceholder":246},[36,101742,101743,101746,101748],{"class":38,"line":66},[36,101744,101745],{"class":109},"XML",[36,101747,14003],{"class":163},[36,101749,101750],{"class":59}," \"\"\"\n",[36,101752,101753],{"class":38,"line":72},[36,101754,101755],{"class":59},"\u003Cmujoco model=\"first_sim\">\n",[36,101757,101758],{"class":38,"line":82},[36,101759,101760],{"class":59},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[36,101762,101763],{"class":38,"line":88},[36,101764,247],{"emptyLinePlaceholder":246},[36,101766,101767],{"class":38,"line":113},[36,101768,101769],{"class":59},"  \u003Cworldbody>\n",[36,101771,101772],{"class":38,"line":119},[36,101773,101774],{"class":59},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[36,101776,101777],{"class":38,"line":131},[36,101778,247],{"emptyLinePlaceholder":246},[36,101780,101781],{"class":38,"line":137},[36,101782,101783],{"class":59},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[36,101785,101786],{"class":38,"line":147},[36,101787,101788],{"class":59},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[36,101790,101791],{"class":38,"line":153},[36,101792,101793],{"class":59},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[36,101795,101796],{"class":38,"line":191},[36,101797,101798],{"class":59},"    \u003C\u002Fbody>\n",[36,101800,101801],{"class":38,"line":197},[36,101802,101803],{"class":59},"  \u003C\u002Fworldbody>\n",[36,101805,101806],{"class":38,"line":217},[36,101807,101808],{"class":59},"\u003C\u002Fmujoco>\n",[36,101810,101811],{"class":38,"line":223},[36,101812,96130],{"class":59},[36,101814,101815],{"class":38,"line":243},[36,101816,247],{"emptyLinePlaceholder":246},[36,101818,101819],{"class":38,"line":250},[36,101820,247],{"emptyLinePlaceholder":246},[36,101822,101823,101825,101827,101830,101832],{"class":38,"line":256},[36,101824,32380],{"class":163},[36,101826,2432],{"class":55},[36,101828,101829],{"class":98},"() -> ",[36,101831,96118],{"class":109},[36,101833,4190],{"class":98},[36,101835,101836,101839,101841,101844,101846],{"class":38,"line":273},[36,101837,101838],{"class":98},"    model ",[36,101840,176],{"class":163},[36,101842,101843],{"class":98}," mujoco.MjModel.from_xml_string(",[36,101845,101745],{"class":109},[36,101847,627],{"class":98},[36,101849,101850,101853,101855],{"class":38,"line":278},[36,101851,101852],{"class":98},"    data ",[36,101854,176],{"class":163},[36,101856,101857],{"class":98}," mujoco.MjData(model)\n",[36,101859,101860],{"class":38,"line":284},[36,101861,247],{"emptyLinePlaceholder":246},[36,101863,101864,101866,101868,101871],{"class":38,"line":315},[36,101865,31732],{"class":109},[36,101867,621],{"class":98},[36,101869,101870],{"class":59},"\"nq:\"",[36,101872,101873],{"class":98},", model.nq)\n",[36,101875,101876,101878,101880,101883],{"class":38,"line":320},[36,101877,31732],{"class":109},[36,101879,621],{"class":98},[36,101881,101882],{"class":59},"\"nv:\"",[36,101884,101885],{"class":98},", model.nv)\n",[36,101887,101888,101890,101892,101895],{"class":38,"line":326},[36,101889,31732],{"class":109},[36,101891,621],{"class":98},[36,101893,101894],{"class":59},"\"nu:\"",[36,101896,101897],{"class":98},", model.nu)\n",[36,101899,101900,101902,101904,101907],{"class":38,"line":343},[36,101901,31732],{"class":109},[36,101903,621],{"class":98},[36,101905,101906],{"class":59},"\"initial time:\"",[36,101908,101909],{"class":98},", data.time)\n",[36,101911,101912,101914,101916,101919],{"class":38,"line":348},[36,101913,31732],{"class":109},[36,101915,621],{"class":98},[36,101917,101918],{"class":59},"\"initial qpos:\"",[36,101920,101921],{"class":98},", data.qpos.copy())\n",[36,101923,101924],{"class":38,"line":354},[36,101925,247],{"emptyLinePlaceholder":246},[36,101927,101928,101930,101933,101935,101937,101939,101941],{"class":38,"line":370},[36,101929,3652],{"class":163},[36,101931,101932],{"class":98}," _ ",[36,101934,26480],{"class":163},[36,101936,32876],{"class":109},[36,101938,621],{"class":98},[36,101940,926],{"class":109},[36,101942,31219],{"class":98},[36,101944,101945],{"class":38,"line":375},[36,101946,101947],{"class":98},"        mujoco.mj_step(model, data)\n",[36,101949,101950],{"class":38,"line":381},[36,101951,247],{"emptyLinePlaceholder":246},[36,101953,101954,101956,101958,101961],{"class":38,"line":399},[36,101955,31732],{"class":109},[36,101957,621],{"class":98},[36,101959,101960],{"class":59},"\"final time:\"",[36,101962,101909],{"class":98},[36,101964,101965,101967,101969,101972],{"class":38,"line":404},[36,101966,31732],{"class":109},[36,101968,621],{"class":98},[36,101970,101971],{"class":59},"\"final qpos:\"",[36,101973,101921],{"class":98},[36,101975,101976],{"class":38,"line":410},[36,101977,247],{"emptyLinePlaceholder":246},[36,101979,101980],{"class":38,"line":423},[36,101981,247],{"emptyLinePlaceholder":246},[36,101983,101984,101986,101988,101991,101994],{"class":38,"line":436},[36,101985,2010],{"class":163},[36,101987,31653],{"class":109},[36,101989,101990],{"class":163}," ==",[36,101992,101993],{"class":59}," \"__main__\"",[36,101995,4190],{"class":98},[36,101997,101998],{"class":38,"line":441},[36,101999,102000],{"class":98},"    main()\n",[588,102002,102003],{"id":102003},"代码逐段解释",[14,102005,102006],{},"导入库：",[26,102008,102010],{"className":30811,"code":102009,"language":30813,"meta":31,"style":31},"import mujoco\n",[33,102011,102012],{"__ignoreMap":31},[36,102013,102014,102016],{"class":38,"line":39},[36,102015,30825],{"class":163},[36,102017,101732],{"class":98},[14,102019,102020],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,102022,102023],{},"定义 XML：",[26,102025,102027],{"className":30811,"code":102026,"language":30813,"meta":31,"style":31},"XML = \"\"\"\n...\n\"\"\"\n",[33,102028,102029,102037,102042],{"__ignoreMap":31},[36,102030,102031,102033,102035],{"class":38,"line":39},[36,102032,101745],{"class":109},[36,102034,14003],{"class":163},[36,102036,101750],{"class":59},[36,102038,102039],{"class":38,"line":46},[36,102040,102041],{"class":59},"...\n",[36,102043,102044],{"class":38,"line":52},[36,102045,96130],{"class":59},[14,102047,102048,102049,102052],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[33,102050,102051],{},"freejoint"," 的方块。",[14,102054,102055],{},"编译模型：",[26,102057,102059],{"className":30811,"code":102058,"language":30813,"meta":31,"style":31},"model = mujoco.MjModel.from_xml_string(XML)\n",[33,102060,102061],{"__ignoreMap":31},[36,102062,102063,102066,102068,102070,102072],{"class":38,"line":39},[36,102064,102065],{"class":98},"model ",[36,102067,176],{"class":163},[36,102069,101843],{"class":98},[36,102071,101745],{"class":109},[36,102073,627],{"class":98},[14,102075,102076],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,102078,102079],{},"创建数据：",[26,102081,102083],{"className":30811,"code":102082,"language":30813,"meta":31,"style":31},"data = mujoco.MjData(model)\n",[33,102084,102085],{"__ignoreMap":31},[36,102086,102087,102090,102092],{"class":38,"line":39},[36,102088,102089],{"class":98},"data ",[36,102091,176],{"class":163},[36,102093,101857],{"class":98},[14,102095,102096,102098,102099,102101],{},[33,102097,33834],{}," 会保存仿真当前状态。刚创建时，时间是 ",[33,102100,807],{},"，方块还在初始位置。",[14,102103,102104],{},"推进仿真：",[26,102106,102108],{"className":30811,"code":102107,"language":30813,"meta":31,"style":31},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[33,102109,102110,102126],{"__ignoreMap":31},[36,102111,102112,102114,102116,102118,102120,102122,102124],{"class":38,"line":39},[36,102113,3476],{"class":163},[36,102115,101932],{"class":98},[36,102117,26480],{"class":163},[36,102119,32876],{"class":109},[36,102121,621],{"class":98},[36,102123,926],{"class":109},[36,102125,31219],{"class":98},[36,102127,102128],{"class":38,"line":46},[36,102129,102130],{"class":98},"    mujoco.mj_step(model, data)\n",[14,102132,102133,102134,102136],{},"每次 ",[33,102135,101646],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[588,102138,102139],{"id":102139},"代码逐行细讲",[14,102141,102142],{},"下面把完整代码按新手视角拆开讲。",[26,102144,102145],{"className":30811,"code":102009,"language":30813,"meta":31,"style":31},[33,102146,102147],{"__ignoreMap":31},[36,102148,102149,102151],{"class":38,"line":39},[36,102150,30825],{"class":163},[36,102152,101732],{"class":98},[14,102154,102155,102157,102158,828,102160,828,102162,28819],{},[33,102156,30825],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[33,102159,101107],{},[33,102161,101112],{},[33,102163,102164],{},"mujoco.mj_step",[26,102166,102167],{"className":30811,"code":102026,"language":30813,"meta":31,"style":31},[33,102168,102169,102177,102181],{"__ignoreMap":31},[36,102170,102171,102173,102175],{"class":38,"line":39},[36,102172,101745],{"class":109},[36,102174,14003],{"class":163},[36,102176,101750],{"class":59},[36,102178,102179],{"class":38,"line":46},[36,102180,102041],{"class":59},[36,102182,102183],{"class":38,"line":52},[36,102184,96130],{"class":59},[14,102186,102187,102189,102190,102193],{},[33,102188,101745],{}," 是一个变量名。右边的三引号 ",[33,102191,102192],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[26,102195,102196],{"className":53499,"code":101755,"language":53501,"meta":31,"style":31},[33,102197,102198],{"__ignoreMap":31},[36,102199,102200,102202,102204,102207,102209,102212],{"class":38,"line":39},[36,102201,179],{"class":98},[36,102203,101452],{"class":51733},[36,102205,102206],{"class":55}," model",[36,102208,176],{"class":98},[36,102210,102211],{"class":59},"\"first_sim\"",[36,102213,188],{"class":98},[14,102215,102216,102217,102220,102221,28819],{},"这是 XML 的根标签。",[33,102218,102219],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[33,102222,102223],{},"first_sim",[26,102225,102226],{"className":53499,"code":101614,"language":53501,"meta":31,"style":31},[33,102227,102228],{"__ignoreMap":31},[36,102229,102230,102232,102234,102236,102238,102240,102242,102244,102246],{"class":38,"line":39},[36,102231,179],{"class":98},[36,102233,69598],{"class":51733},[36,102235,101625],{"class":55},[36,102237,176],{"class":98},[36,102239,101630],{"class":59},[36,102241,101633],{"class":55},[36,102243,176],{"class":98},[36,102245,101638],{"class":59},[36,102247,101575],{"class":98},[14,102249,102250,102252,102253,102256,102257,102260],{},[33,102251,69598],{}," 用来设置仿真参数。",[33,102254,102255],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[33,102258,102259],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[26,102262,102264],{"className":53499,"code":102263,"language":53501,"meta":31,"style":31},"\u003Cworldbody>\n",[33,102265,102266],{"__ignoreMap":31},[36,102267,102268,102270,102273],{"class":38,"line":39},[36,102269,179],{"class":98},[36,102271,102272],{"class":51733},"worldbody",[36,102274,188],{"class":98},[14,102276,102277,102279],{},[33,102278,102272],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[26,102281,102283],{"className":53499,"code":102282,"language":53501,"meta":31,"style":31},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[33,102284,102285],{"__ignoreMap":31},[36,102286,102287,102289,102291,102293,102295,102298,102300,102302,102305,102307,102309,102312,102314,102316,102319],{"class":38,"line":39},[36,102288,179],{"class":98},[36,102290,101551],{"class":51733},[36,102292,15359],{"class":55},[36,102294,176],{"class":98},[36,102296,102297],{"class":59},"\"floor\"",[36,102299,54256],{"class":55},[36,102301,176],{"class":98},[36,102303,102304],{"class":59},"\"plane\"",[36,102306,101567],{"class":55},[36,102308,176],{"class":98},[36,102310,102311],{"class":59},"\"2 2 0.1\"",[36,102313,79199],{"class":55},[36,102315,176],{"class":98},[36,102317,102318],{"class":59},"\"0.8 0.8 0.8 1\"",[36,102320,101575],{"class":98},[14,102322,102323,102324,102326,102327,102330,102331,102334,102335,102337],{},"这行创建地面。",[33,102325,101551],{}," 是几何体。",[33,102328,102329],{},"name=\"floor\""," 是名字。",[33,102332,102333],{},"type=\"plane\""," 表示平面。",[33,102336,55542],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[26,102339,102341],{"className":53499,"code":102340,"language":53501,"meta":31,"style":31},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[33,102342,102343],{"__ignoreMap":31},[36,102344,102345,102347,102349,102351,102353,102355,102357,102359,102361],{"class":38,"line":39},[36,102346,179],{"class":98},[36,102348,52232],{"class":51733},[36,102350,15359],{"class":55},[36,102352,176],{"class":98},[36,102354,53923],{"class":59},[36,102356,101537],{"class":55},[36,102358,176],{"class":98},[36,102360,101542],{"class":59},[36,102362,188],{"class":98},[14,102364,102365,102366,28819,102368,102371,102372,102374],{},"这行创建一个刚体，名字叫 ",[33,102367,54146],{},[33,102369,102370],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[33,102373,101600],{},"，也就是离地面 1 米高。",[26,102376,102378],{"className":53499,"code":102377,"language":53501,"meta":31,"style":31},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[33,102379,102380],{"__ignoreMap":31},[36,102381,102382,102384,102386,102388,102390,102393],{"class":38,"line":39},[36,102383,179],{"class":98},[36,102385,102051],{"class":51733},[36,102387,15359],{"class":55},[36,102389,176],{"class":98},[36,102391,102392],{"class":59},"\"box_free\"",[36,102394,101575],{"class":98},[14,102396,102397,102398,102400],{},"这行很重要。",[33,102399,102051],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[26,102402,102404],{"className":53499,"code":102403,"language":53501,"meta":31,"style":31},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[33,102405,102406],{"__ignoreMap":31},[36,102407,102408,102410,102412,102414,102416,102418,102420,102422,102424,102426,102428,102430,102433,102435,102437,102439,102441,102444],{"class":38,"line":39},[36,102409,179],{"class":98},[36,102411,101551],{"class":51733},[36,102413,15359],{"class":55},[36,102415,176],{"class":98},[36,102417,101558],{"class":59},[36,102419,54256],{"class":55},[36,102421,176],{"class":98},[36,102423,53923],{"class":59},[36,102425,101567],{"class":55},[36,102427,176],{"class":98},[36,102429,101572],{"class":59},[36,102431,102432],{"class":55}," mass",[36,102434,176],{"class":98},[36,102436,4129],{"class":59},[36,102438,79199],{"class":55},[36,102440,176],{"class":98},[36,102442,102443],{"class":59},"\"1 0 0 1\"",[36,102445,101575],{"class":98},[14,102447,102448,102449,102452,102453,102456,102457,102460,102461,102464],{},"这行给 box body 添加一个盒子形状。",[33,102450,102451],{},"type=\"box\""," 表示形状是盒子。",[33,102454,102455],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[33,102458,102459],{},"mass=\"1\""," 表示质量是 1。",[33,102462,102463],{},"rgba=\"1 0 0 1\""," 表示红色。",[26,102466,102468],{"className":30811,"code":102467,"language":30813,"meta":31,"style":31},"def main() -> None:\n",[33,102469,102470],{"__ignoreMap":31},[36,102471,102472,102474,102476,102478,102480],{"class":38,"line":39},[36,102473,32380],{"class":163},[36,102475,2432],{"class":55},[36,102477,101829],{"class":98},[36,102479,96118],{"class":109},[36,102481,4190],{"class":98},[14,102483,102484,102486,102487,102490,102491,102494],{},[33,102485,32380],{}," 用来定义函数。这里定义了一个叫 ",[33,102488,102489],{},"main"," 的函数。",[33,102492,102493],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[26,102496,102497],{"className":30811,"code":102058,"language":30813,"meta":31,"style":31},[33,102498,102499],{"__ignoreMap":31},[36,102500,102501,102503,102505,102507,102509],{"class":38,"line":39},[36,102502,102065],{"class":98},[36,102504,176],{"class":163},[36,102506,101843],{"class":98},[36,102508,101745],{"class":109},[36,102510,627],{"class":98},[14,102512,102513,102514,102517],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[33,102515,102516],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[26,102519,102520],{"className":30811,"code":102082,"language":30813,"meta":31,"style":31},[33,102521,102522],{"__ignoreMap":31},[36,102523,102524,102526,102528],{"class":38,"line":39},[36,102525,102089],{"class":98},[36,102527,176],{"class":163},[36,102529,101857],{"class":98},[14,102531,102532,102533,102535,102536,102538],{},"这行创建仿真数据。",[33,102534,33834],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[33,102537,33834],{}," 都会变化。",[26,102540,102542],{"className":30811,"code":102541,"language":30813,"meta":31,"style":31},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[33,102543,102544,102554,102564],{"__ignoreMap":31},[36,102545,102546,102548,102550,102552],{"class":38,"line":39},[36,102547,30848],{"class":109},[36,102549,621],{"class":98},[36,102551,101870],{"class":59},[36,102553,101873],{"class":98},[36,102555,102556,102558,102560,102562],{"class":38,"line":46},[36,102557,30848],{"class":109},[36,102559,621],{"class":98},[36,102561,101882],{"class":59},[36,102563,101885],{"class":98},[36,102565,102566,102568,102570,102572],{"class":38,"line":52},[36,102567,30848],{"class":109},[36,102569,621],{"class":98},[36,102571,101894],{"class":59},[36,102573,101897],{"class":98},[14,102575,102576,102578,102579,102582,102583,102586,102587,102590,102591,102594],{},[33,102577,30848],{}," 用来输出信息。",[33,102580,102581],{},"model.nq"," 是位置变量数量，",[33,102584,102585],{},"model.nv"," 是速度变量数量，",[33,102588,102589],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[33,102592,102593],{},"nu"," 是 0。",[26,102596,102598],{"className":30811,"code":102597,"language":30813,"meta":31,"style":31},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[33,102599,102600,102610],{"__ignoreMap":31},[36,102601,102602,102604,102606,102608],{"class":38,"line":39},[36,102603,30848],{"class":109},[36,102605,621],{"class":98},[36,102607,101906],{"class":59},[36,102609,101909],{"class":98},[36,102611,102612,102614,102616,102618],{"class":38,"line":46},[36,102613,30848],{"class":109},[36,102615,621],{"class":98},[36,102617,101918],{"class":59},[36,102619,101921],{"class":98},[14,102621,102622,102623,102625,102626,102628,102629,102632],{},"这里打印初始时间和初始位置。",[33,102624,101498],{}," 一开始是 0。",[33,102627,101501],{}," 是位置数组。",[33,102630,102631],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[26,102634,102635],{"className":30811,"code":102107,"language":30813,"meta":31,"style":31},[33,102636,102637,102653],{"__ignoreMap":31},[36,102638,102639,102641,102643,102645,102647,102649,102651],{"class":38,"line":39},[36,102640,3476],{"class":163},[36,102642,101932],{"class":98},[36,102644,26480],{"class":163},[36,102646,32876],{"class":109},[36,102648,621],{"class":98},[36,102650,926],{"class":109},[36,102652,31219],{"class":98},[36,102654,102655],{"class":38,"line":46},[36,102656,102130],{"class":98},[14,102658,102659,102661,102662,102665,102666,102668,102669,102671],{},[33,102660,3476],{}," 是循环。",[33,102663,102664],{},"range(100)"," 表示循环 100 次。",[33,102667,1603],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[33,102670,101646],{},"，仿真就前进一步。",[26,102673,102675],{"className":30811,"code":102674,"language":30813,"meta":31,"style":31},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[33,102676,102677,102687],{"__ignoreMap":31},[36,102678,102679,102681,102683,102685],{"class":38,"line":39},[36,102680,30848],{"class":109},[36,102682,621],{"class":98},[36,102684,101960],{"class":59},[36,102686,101909],{"class":98},[36,102688,102689,102691,102693,102695],{"class":38,"line":46},[36,102690,30848],{"class":109},[36,102692,621],{"class":98},[36,102694,101971],{"class":59},[36,102696,101921],{"class":98},[14,102698,102699],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[26,102701,102703],{"className":30811,"code":102702,"language":30813,"meta":31,"style":31},"if __name__ == \"__main__\":\n    main()\n",[33,102704,102705,102717],{"__ignoreMap":31},[36,102706,102707,102709,102711,102713,102715],{"class":38,"line":39},[36,102708,2010],{"class":163},[36,102710,31653],{"class":109},[36,102712,101990],{"class":163},[36,102714,101993],{"class":59},[36,102716,4190],{"class":98},[36,102718,102719],{"class":38,"line":46},[36,102720,102000],{"class":98},[14,102722,102723,102724,102727,102728,28819],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[33,102725,102726],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[33,102729,102726],{},[14,102731,102732],{},"运行:",[26,102734,102736],{"className":24261,"code":102735,"language":24263,"meta":31,"style":31},"python ch1_first_sim.py\n",[33,102737,102738],{"__ignoreMap":31},[36,102739,102740,102742],{"class":38,"line":39},[36,102741,30813],{"class":55},[36,102743,101717],{"class":59},[559,102745,102747],{"id":102746},"_5运行结果说明","5.运行结果说明",[14,102749,102750],{},"你应该看到类似输出:",[26,102752,102755],{"className":102753,"code":102754,"language":5638,"meta":31},[5636],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[33,102756,102754],{"__ignoreMap":31},[14,102758,102759,102761,102762,102765,102766,28819],{},[33,102760,102051],{}," 有 7 个位置变量: ",[33,102763,102764],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[33,102767,102768],{},"vx vy vz wx wy wz",[14,102770,102771,102772,102775],{},"你还会看到 ",[33,102773,102774],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[559,102777,102779],{"id":102778},"_6验证步骤","6.验证步骤",[14,102781,102782],{},"确认版本:",[26,102784,102785],{"className":24261,"code":101371,"language":24263,"meta":31,"style":31},[33,102786,102787],{"__ignoreMap":31},[36,102788,102789,102791,102793],{"class":38,"line":39},[36,102790,30813],{"class":55},[36,102792,30791],{"class":109},[36,102794,101382],{"class":59},[14,102796,102797],{},"确认导入的是官方 bindings:",[26,102799,102801],{"className":24261,"code":102800,"language":24263,"meta":31,"style":31},"python -c \"import mujoco; print(mujoco)\"\n",[33,102802,102803],{"__ignoreMap":31},[36,102804,102805,102807,102809],{"class":38,"line":39},[36,102806,30813],{"class":55},[36,102808,30791],{"class":109},[36,102810,102811],{"class":59}," \"import mujoco; print(mujoco)\"\n",[14,102813,102814],{},"运行程序:",[26,102816,102817],{"className":24261,"code":102735,"language":24263,"meta":31,"style":31},[33,102818,102819],{"__ignoreMap":31},[36,102820,102821,102823],{"class":38,"line":39},[36,102822,30813],{"class":55},[36,102824,101717],{"class":59},[14,102826,102827,102828,102831,102832,28819],{},"检查 ",[33,102829,102830],{},"final time"," 是否约等于 ",[33,102833,102834],{},"1.0",[14,102836,102837],{},"再做几个小实验：",[571,102839,102840,102850,102858,102871],{},[574,102841,102842,102843,102845,102846,102849],{},"把 ",[33,102844,102370],{}," 改成 ",[33,102847,102848],{},"pos=\"0 0 2\"","，观察初始高度变化。",[574,102851,102842,102852,102845,102854,102857],{},[33,102853,102259],{},[33,102855,102856],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[574,102859,102842,102860,102845,102862,102865,102866,102868,102869,28819],{},[33,102861,102255],{},[33,102863,102864],{},"timestep=\"0.005\"","，观察 100 步后的 ",[33,102867,102830],{}," 是否变成约 ",[33,102870,35762],{},[574,102872,102873,102874,102877],{},"删除 ",[33,102875,102876],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,102879,102880],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[559,102882,102884],{"id":102883},"_7常见错误与解决方案","7.常见错误与解决方案",[588,102886,102888],{"id":102887},"modulenotfounderror-no-module-named-mujoco",[33,102889,102890],{},"ModuleNotFoundError: No module named 'mujoco'",[14,102892,102893],{},"解决:",[26,102895,102897],{"className":24261,"code":102896,"language":24263,"meta":31,"style":31},"pip install \"mujoco>=2.3\"\n",[33,102898,102899],{"__ignoreMap":31},[36,102900,102901,102903,102905],{"class":38,"line":39},[36,102902,24270],{"class":55},[36,102904,160],{"class":59},[36,102906,102907],{"class":59}," \"mujoco>=2.3\"\n",[588,102909,102911],{"id":102910},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,102913,102914],{},"先安装系统依赖:",[26,102916,102918],{"className":24261,"code":102917,"language":24263,"meta":31,"style":31},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[33,102919,102920],{"__ignoreMap":31},[36,102921,102922,102924,102926,102928,102930,102933,102935,102938,102940,102943,102945],{"class":38,"line":39},[36,102923,56],{"class":55},[36,102925,26749],{"class":59},[36,102927,160],{"class":59},[36,102929,26834],{"class":109},[36,102931,102932],{"class":59}," mesa-libGL",[36,102934,101246],{"class":59},[36,102936,102937],{"class":59}," glfw",[36,102939,101266],{"class":59},[36,102941,102942],{"class":59}," libX11",[36,102944,101279],{"class":59},[36,102946,102947],{"class":59}," libXrandr\n",[588,102949,102951],{"id":102950},"xml-解析失败","XML 解析失败",[14,102953,102954],{},"检查:",[571,102956,102957,102960,102963,102969],{},[574,102958,102959],{},"标签是否闭合",[574,102961,102962],{},"属性是否带引号",[574,102964,102965,102966],{},"根节点是否是 ",[33,102967,102968],{},"\u003Cmujoco>",[574,102970,102971,102973,102974,102977],{},[33,102972,52232],{}," 是否放在 ",[33,102975,102976],{},"\u003Cworldbody>"," 内部",[588,102979,102981,102983,102984],{"id":102980},"final-time-不是严格等于-10",[33,102982,102830],{}," 不是严格等于 ",[33,102985,102834],{},[14,102987,102988],{},"这通常不是错误。浮点数计算可能得到：",[26,102990,102993],{"className":102991,"code":102992,"language":5638,"meta":31},[5636],"1.0000000000000007\n",[33,102994,102992],{"__ignoreMap":31},[14,102996,102997,102998,103000],{},"只要接近 ",[33,102999,102834],{}," 就正常。",[588,103002,103003],{"id":103003},"方块没有掉下来",[14,103005,103006],{},"检查：",[571,103008,103009,103015,103021,103026],{},[574,103010,103011,103012],{},"方块 body 里是否有 ",[33,103013,103014],{},"\u003Cfreejoint\u002F>",[574,103016,103017,103018],{},"重力是否是 ",[33,103019,103020],{},"0 0 -9.81",[574,103022,103023,103024],{},"是否真的调用了 ",[33,103025,101117],{},[574,103027,103028,103029,103031,103032],{},"你看的是否是 ",[33,103030,102774],{},"，不是 ",[33,103033,103034],{},"initial qpos",[559,103036,103038],{"id":103037},"_8本章小结","8.本章小结",[14,103040,103041],{},"本章你已经完成了 MuJoCo 的最小闭环：",[26,103043,103046],{"className":103044,"code":103045,"language":5638,"meta":31},[5636],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[33,103047,103045],{"__ignoreMap":31},[14,103049,103050],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[537,103052,103053],{},"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":31,"searchDepth":46,"depth":46,"links":103055},[103056,103057,103058,103063,103067,103068,103069,103077],{"id":101078,"depth":46,"text":101079},{"id":101201,"depth":46,"text":101202},{"id":101475,"depth":46,"text":101476,"children":103059},[103060,103061,103062],{"id":101513,"depth":52,"text":101514},{"id":101607,"depth":52,"text":101608},{"id":101659,"depth":52,"text":101660},{"id":101683,"depth":46,"text":101684,"children":103064},[103065,103066],{"id":102003,"depth":52,"text":102003},{"id":102139,"depth":52,"text":102139},{"id":102746,"depth":46,"text":102747},{"id":102778,"depth":46,"text":102779},{"id":102883,"depth":46,"text":102884,"children":103070},[103071,103072,103073,103074,103076],{"id":102887,"depth":52,"text":102890},{"id":102910,"depth":52,"text":102911},{"id":102950,"depth":52,"text":102951},{"id":102980,"depth":52,"text":103075},"final time 不是严格等于 1.0",{"id":103003,"depth":52,"text":103003},{"id":103037,"depth":46,"text":103038},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":101070,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":103084,"title":103085,"body":103086,"description":31,"extension":543,"meta":104742,"navigation":246,"path":104743,"seo":104744,"stem":104745,"__hash__":104746},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":103087,"toc":104718},[103088,103091,103093,103096,103099,103116,103211,103214,103220,103222,103224,103248,103251,103265,103268,103309,103311,103324,103326,103329,103377,103389,103392,103395,103401,103414,103481,103484,103503,103506,103509,103515,103517,103526,103529,103533,103542,103624,103633,103637,103643,103657,103667,103669,103999,104002,104014,104016,104027,104029,104032,104050,104053,104056,104074,104085,104088,104103,104113,104115,104136,104153,104173,104179,104219,104235,104251,104257,104260,104284,104300,104305,104335,104352,104377,104380,104395,104404,104419,104428,104443,104450,104452,104462,104475,104482,104485,104524,104531,104533,104585,104587,104593,104596,104603,104610,104613,104615,104633,104636,104639,104673,104685,104687,104690,104712,104715],[10,103089,103085],{"id":103090},"_2xml-与-mjcf-物理建模基础",[559,103092,101079],{"id":101078},[14,103094,103095],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,103097,103098],{},"本章结束后，你应该能看懂一个简单模型里：",[571,103100,103101,103104,103107,103110,103113],{},[574,103102,103103],{},"地面在哪里。",[574,103105,103106],{},"物体初始位置在哪里。",[574,103108,103109],{},"几何体是什么形状。",[574,103111,103112],{},"哪些 body 可以自由运动。",[574,103114,103115],{},"如何用名字在 Python 里找到 XML 中的对象。",[753,103117,103118,103128],{},[756,103119,103120],{},[759,103121,103122,103125],{},[762,103123,103124],{"align":24175},"标签",[762,103126,103127],{"align":24175},"作用",[800,103129,103130,103139,103149,103158,103168,103178,103191,103201],{},[759,103131,103132,103136],{},[805,103133,103134],{"align":24175},[33,103135,102968],{},[805,103137,103138],{"align":24175},"根节点",[759,103140,103141,103146],{},[805,103142,103143],{"align":24175},[33,103144,103145],{},"\u003Coption>",[805,103147,103148],{"align":24175},"仿真参数",[759,103150,103151,103155],{},[805,103152,103153],{"align":24175},[33,103154,102976],{},[805,103156,103157],{"align":24175},"世界中的物体",[759,103159,103160,103165],{},[805,103161,103162],{"align":24175},[33,103163,103164],{},"\u003Cbody>",[805,103166,103167],{"align":24175},"刚体",[759,103169,103170,103175],{},[805,103171,103172],{"align":24175},[33,103173,103174],{},"\u003Cgeom>",[805,103176,103177],{"align":24175},"几何体、碰撞体、可视体",[759,103179,103180,103188],{},[805,103181,103182,25415,103185],{"align":24175},[33,103183,103184],{},"\u003Cjoint>",[33,103186,103187],{},"\u003Cfreejoint>",[805,103189,103190],{"align":24175},"关节",[759,103192,103193,103198],{},[805,103194,103195],{"align":24175},[33,103196,103197],{},"\u003Csite>",[805,103199,103200],{"align":24175},"标记点",[759,103202,103203,103208],{},[805,103204,103205],{"align":24175},[33,103206,103207],{},"\u003Cactuator>",[805,103209,103210],{"align":24175},"控制器",[14,103212,103213],{},"初学时可以先记住：",[26,103215,103218],{"className":103216,"code":103217,"language":5638,"meta":31},[5636],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[33,103219,103217],{"__ignoreMap":31},[559,103221,101202],{"id":101201},[14,103223,101205],{},[26,103225,103227],{"className":24261,"code":103226,"language":24263,"meta":31,"style":31},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[33,103228,103229],{"__ignoreMap":31},[36,103230,103231,103233,103235,103237,103239,103241,103243,103245],{"class":38,"line":39},[36,103232,56],{"class":55},[36,103234,26749],{"class":59},[36,103236,160],{"class":59},[36,103238,26834],{"class":109},[36,103240,102932],{"class":59},[36,103242,101246],{"class":59},[36,103244,102937],{"class":59},[36,103246,103247],{"class":59}," glfw-devel\n",[14,103249,103250],{},"pip:",[26,103252,103253],{"className":24261,"code":101351,"language":24263,"meta":31,"style":31},[33,103254,103255],{"__ignoreMap":31},[36,103256,103257,103259,103261,103263],{"class":38,"line":39},[36,103258,24270],{"class":55},[36,103260,160],{"class":59},[36,103262,101362],{"class":59},[36,103264,101365],{"class":59},[14,103266,103267],{},"conda:",[26,103269,103271],{"className":24261,"code":103270,"language":24263,"meta":31,"style":31},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[33,103272,103273,103290,103299],{"__ignoreMap":31},[36,103274,103275,103277,103279,103281,103284,103286,103288],{"class":38,"line":39},[36,103276,30763],{"class":55},[36,103278,29609],{"class":59},[36,103280,25552],{"class":109},[36,103282,103283],{"class":59}," mujoco-xml",[36,103285,101407],{"class":59},[36,103287,101410],{"class":109},[36,103289,110],{"class":109},[36,103291,103292,103294,103296],{"class":38,"line":46},[36,103293,30763],{"class":55},[36,103295,101419],{"class":59},[36,103297,103298],{"class":59}," mujoco-xml\n",[36,103300,103301,103303,103305,103307],{"class":38,"line":52},[36,103302,24270],{"class":55},[36,103304,160],{"class":59},[36,103306,101362],{"class":59},[36,103308,101365],{"class":59},[14,103310,101435],{},[571,103312,103313,103316,103321],{},[574,103314,103315],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[574,103317,103318,103319,28819],{},"本章使用基础标签，适用于 ",[33,103320,101458],{},[574,103322,103323],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[559,103325,101476],{"id":101475},[14,103327,103328],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[26,103330,103332],{"className":53499,"code":103331,"language":53501,"meta":31,"style":31},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[33,103333,103334,103348,103356,103361,103369],{"__ignoreMap":31},[36,103335,103336,103338,103340,103342,103344,103346],{"class":38,"line":39},[36,103337,179],{"class":98},[36,103339,101452],{"class":51733},[36,103341,102206],{"class":55},[36,103343,176],{"class":98},[36,103345,63111],{"class":59},[36,103347,188],{"class":98},[36,103349,103350,103352,103354],{"class":38,"line":46},[36,103351,52576],{"class":98},[36,103353,102272],{"class":51733},[36,103355,188],{"class":98},[36,103357,103358],{"class":38,"line":52},[36,103359,103360],{"class":98},"    ...\n",[36,103362,103363,103365,103367],{"class":38,"line":66},[36,103364,52849],{"class":98},[36,103366,102272],{"class":51733},[36,103368,188],{"class":98},[36,103370,103371,103373,103375],{"class":38,"line":72},[36,103372,52217],{"class":98},[36,103374,101452],{"class":51733},[36,103376,188],{"class":98},[14,103378,103379,103381,103382,103384,103385,103388],{},[33,103380,52232],{}," 表示刚体。",[33,103383,101551],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[33,103386,103387],{},"joint"," 表示刚体相对父刚体如何运动。",[588,103390,103391],{"id":103391},"层级结构非常重要",[14,103393,103394],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[26,103396,103399],{"className":103397,"code":103398,"language":5638,"meta":31},[5636],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[33,103400,103398],{"__ignoreMap":31},[14,103402,103403,101449,103406,103409,103410,103413],{},[33,103404,103405],{},"red_box_geom",[33,103407,103408],{},"box_center"," 都属于 ",[33,103411,103412],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[26,103415,103417],{"className":53499,"code":103416,"language":53501,"meta":31,"style":31},"\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",[33,103418,103419,103439,103453,103473],{"__ignoreMap":31},[36,103420,103421,103423,103425,103427,103429,103431,103433,103435,103437],{"class":38,"line":39},[36,103422,179],{"class":98},[36,103424,52232],{"class":51733},[36,103426,15359],{"class":55},[36,103428,176],{"class":98},[36,103430,53923],{"class":59},[36,103432,101537],{"class":55},[36,103434,176],{"class":98},[36,103436,101542],{"class":59},[36,103438,188],{"class":98},[36,103440,103441,103443,103445,103447,103449,103451],{"class":38,"line":46},[36,103442,52576],{"class":98},[36,103444,102051],{"class":51733},[36,103446,15359],{"class":55},[36,103448,176],{"class":98},[36,103450,102392],{"class":59},[36,103452,101575],{"class":98},[36,103454,103455,103457,103459,103461,103463,103465,103467,103469,103471],{"class":38,"line":52},[36,103456,52576],{"class":98},[36,103458,101551],{"class":51733},[36,103460,54256],{"class":55},[36,103462,176],{"class":98},[36,103464,53923],{"class":59},[36,103466,101567],{"class":55},[36,103468,176],{"class":98},[36,103470,101572],{"class":59},[36,103472,101575],{"class":98},[36,103474,103475,103477,103479],{"class":38,"line":66},[36,103476,52217],{"class":98},[36,103478,52232],{"class":51733},[36,103480,188],{"class":98},[14,103482,103483],{},"含义:",[571,103485,103486,103492,103497,103500],{},[574,103487,103488,103489,103491],{},"创建名为 ",[33,103490,54146],{}," 的刚体",[574,103493,103494,103495],{},"初始位置在世界坐标 ",[33,103496,101600],{},[574,103498,103499],{},"它有一个自由关节",[574,103501,103502],{},"它有一个盒子几何体",[588,103504,103505],{"id":103505},"坐标怎么理解",[14,103507,103508],{},"MuJoCo 默认使用三维坐标：",[26,103510,103513],{"className":103511,"code":103512,"language":5638,"meta":31},[5636],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[33,103514,103512],{"__ignoreMap":31},[14,103516,15072],{},[26,103518,103520],{"className":53499,"code":103519,"language":53501,"meta":31,"style":31},"pos=\"0 0 1\"\n",[33,103521,103522],{"__ignoreMap":31},[36,103523,103524],{"class":38,"line":39},[36,103525,103519],{"class":98},[14,103527,103528],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[588,103530,103532],{"id":103531},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,103534,103535,103536,82962,103539,103541],{},"不同 ",[33,103537,103538],{},"type",[33,103540,31929],{}," 含义不同：",[753,103543,103544,103559],{},[756,103545,103546],{},[759,103547,103548,103552,103557],{},[762,103549,103550],{"align":24175},[33,103551,103538],{},[762,103553,103554,103556],{"align":24175},[33,103555,31929],{}," 示例",[762,103558,101132],{"align":24175},[800,103560,103561,103575,103590,103609],{},[759,103562,103563,103567,103572],{},[805,103564,103565],{"align":24175},[33,103566,54146],{},[805,103568,103569],{"align":24175},[33,103570,103571],{},"size=\"0.1 0.2 0.3\"",[805,103573,103574],{"align":24175},"x\u002Fy\u002Fz 半边长，不是完整长度",[759,103576,103577,103582,103587],{},[805,103578,103579],{"align":24175},[33,103580,103581],{},"sphere",[805,103583,103584],{"align":24175},[33,103585,103586],{},"size=\"0.1\"",[805,103588,103589],{"align":24175},"球半径",[759,103591,103592,103597,103602],{},[805,103593,103594],{"align":24175},[33,103595,103596],{},"capsule",[805,103598,103599],{"align":24175},[33,103600,103601],{},"size=\"0.03\"",[805,103603,103604,103605,103608],{"align":24175},"胶囊半径，长度常用 ",[33,103606,103607],{},"fromto"," 指定",[759,103610,103611,103616,103621],{},[805,103612,103613],{"align":24175},[33,103614,103615],{},"plane",[805,103617,103618],{"align":24175},[33,103619,103620],{},"size=\"3 3 0.1\"",[805,103622,103623],{"align":24175},"可视平面大小，通常当地面",[14,103625,103626,103627,103629,103630,103632],{},"最容易踩坑的是 box：",[33,103628,102455],{}," 表示边长大约是 ",[33,103631,32470],{},"，因为 MuJoCo 用的是半边长。",[588,103634,103636],{"id":103635},"site-是什么","site 是什么",[14,103638,103639,103642],{},[33,103640,103641],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[571,103644,103645,103648,103651,103654],{},[574,103646,103647],{},"标记机械臂末端。",[574,103649,103650],{},"标记目标位置。",[574,103652,103653],{},"放传感器或相机参考点。",[574,103655,103656],{},"在 Python 中读取某个关键点的世界坐标。",[14,103658,103659,103660,101449,103663,103666],{},"在后面的 Reacher 任务中，",[33,103661,103662],{},"tip",[33,103664,103665],{},"target"," 就会用 site 表示。",[559,103668,101684],{"id":101683},[26,103670,103672],{"className":30811,"code":103671,"language":30813,"meta":31,"style":31},"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",[33,103673,103674,103680,103690,103694,103698,103706,103711,103715,103719,103723,103728,103732,103737,103742,103747,103752,103756,103760,103764,103768,103772,103776,103788,103800,103808,103812,103827,103842,103846,103859,103874,103887,103900,103904,103920,103924,103928,103939,103951,103963,103975,103979,103983,103995],{"__ignoreMap":31},[36,103675,103676,103678],{"class":38,"line":39},[36,103677,30825],{"class":163},[36,103679,101732],{"class":98},[36,103681,103682,103684,103686,103688],{"class":38,"line":46},[36,103683,30825],{"class":163},[36,103685,31813],{"class":98},[36,103687,31816],{"class":163},[36,103689,31819],{"class":98},[36,103691,103692],{"class":38,"line":52},[36,103693,247],{"emptyLinePlaceholder":246},[36,103695,103696],{"class":38,"line":66},[36,103697,247],{"emptyLinePlaceholder":246},[36,103699,103700,103702,103704],{"class":38,"line":72},[36,103701,101745],{"class":109},[36,103703,14003],{"class":163},[36,103705,101750],{"class":59},[36,103707,103708],{"class":38,"line":82},[36,103709,103710],{"class":59},"\u003Cmujoco model=\"xml_basic\">\n",[36,103712,103713],{"class":38,"line":88},[36,103714,101760],{"class":59},[36,103716,103717],{"class":38,"line":113},[36,103718,247],{"emptyLinePlaceholder":246},[36,103720,103721],{"class":38,"line":119},[36,103722,101769],{"class":59},[36,103724,103725],{"class":38,"line":131},[36,103726,103727],{"class":59},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[36,103729,103730],{"class":38,"line":137},[36,103731,247],{"emptyLinePlaceholder":246},[36,103733,103734],{"class":38,"line":147},[36,103735,103736],{"class":59},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[36,103738,103739],{"class":38,"line":153},[36,103740,103741],{"class":59},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[36,103743,103744],{"class":38,"line":191},[36,103745,103746],{"class":59},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[36,103748,103749],{"class":38,"line":197},[36,103750,103751],{"class":59},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[36,103753,103754],{"class":38,"line":217},[36,103755,101798],{"class":59},[36,103757,103758],{"class":38,"line":223},[36,103759,101803],{"class":59},[36,103761,103762],{"class":38,"line":243},[36,103763,101808],{"class":59},[36,103765,103766],{"class":38,"line":250},[36,103767,96130],{"class":59},[36,103769,103770],{"class":38,"line":256},[36,103771,247],{"emptyLinePlaceholder":246},[36,103773,103774],{"class":38,"line":273},[36,103775,247],{"emptyLinePlaceholder":246},[36,103777,103778,103780,103782,103784,103786],{"class":38,"line":278},[36,103779,32380],{"class":163},[36,103781,2432],{"class":55},[36,103783,101829],{"class":98},[36,103785,96118],{"class":109},[36,103787,4190],{"class":98},[36,103789,103790,103792,103794,103796,103798],{"class":38,"line":284},[36,103791,101838],{"class":98},[36,103793,176],{"class":163},[36,103795,101843],{"class":98},[36,103797,101745],{"class":109},[36,103799,627],{"class":98},[36,103801,103802,103804,103806],{"class":38,"line":315},[36,103803,101852],{"class":98},[36,103805,176],{"class":163},[36,103807,101857],{"class":98},[36,103809,103810],{"class":38,"line":320},[36,103811,247],{"emptyLinePlaceholder":246},[36,103813,103814,103817,103819,103822,103825],{"class":38,"line":326},[36,103815,103816],{"class":98},"    box_body_id ",[36,103818,176],{"class":163},[36,103820,103821],{"class":98}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[36,103823,103824],{"class":59},"\"red_box\"",[36,103826,627],{"class":98},[36,103828,103829,103832,103834,103837,103840],{"class":38,"line":343},[36,103830,103831],{"class":98},"    site_id ",[36,103833,176],{"class":163},[36,103835,103836],{"class":98}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[36,103838,103839],{"class":59},"\"box_center\"",[36,103841,627],{"class":98},[36,103843,103844],{"class":38,"line":348},[36,103845,247],{"emptyLinePlaceholder":246},[36,103847,103848,103850,103853,103855,103857],{"class":38,"line":354},[36,103849,3552],{"class":163},[36,103851,103852],{"class":98}," box_body_id ",[36,103854,179],{"class":163},[36,103856,4544],{"class":109},[36,103858,4190],{"class":98},[36,103860,103861,103864,103867,103869,103872],{"class":38,"line":370},[36,103862,103863],{"class":163},"        raise",[36,103865,103866],{"class":109}," RuntimeError",[36,103868,621],{"class":98},[36,103870,103871],{"class":59},"\"body red_box not found\"",[36,103873,627],{"class":98},[36,103875,103876,103878,103881,103883,103885],{"class":38,"line":375},[36,103877,3552],{"class":163},[36,103879,103880],{"class":98}," site_id ",[36,103882,179],{"class":163},[36,103884,4544],{"class":109},[36,103886,4190],{"class":98},[36,103888,103889,103891,103893,103895,103898],{"class":38,"line":381},[36,103890,103863],{"class":163},[36,103892,103866],{"class":109},[36,103894,621],{"class":98},[36,103896,103897],{"class":59},"\"site box_center not found\"",[36,103899,627],{"class":98},[36,103901,103902],{"class":38,"line":399},[36,103903,247],{"emptyLinePlaceholder":246},[36,103905,103906,103908,103910,103912,103914,103916,103918],{"class":38,"line":404},[36,103907,3652],{"class":163},[36,103909,101932],{"class":98},[36,103911,26480],{"class":163},[36,103913,32876],{"class":109},[36,103915,621],{"class":98},[36,103917,2190],{"class":109},[36,103919,31219],{"class":98},[36,103921,103922],{"class":38,"line":410},[36,103923,101947],{"class":98},[36,103925,103926],{"class":38,"line":423},[36,103927,247],{"emptyLinePlaceholder":246},[36,103929,103930,103932,103934,103937],{"class":38,"line":436},[36,103931,31732],{"class":109},[36,103933,621],{"class":98},[36,103935,103936],{"class":59},"\"simulation time:\"",[36,103938,101909],{"class":98},[36,103940,103941,103943,103945,103948],{"class":38,"line":441},[36,103942,31732],{"class":109},[36,103944,621],{"class":98},[36,103946,103947],{"class":59},"\"box body position:\"",[36,103949,103950],{"class":98},", data.xpos[box_body_id].copy())\n",[36,103952,103953,103955,103957,103960],{"class":38,"line":447},[36,103954,31732],{"class":109},[36,103956,621],{"class":98},[36,103958,103959],{"class":59},"\"site position:\"",[36,103961,103962],{"class":98},", data.site_xpos[site_id].copy())\n",[36,103964,103965,103967,103969,103972],{"class":38,"line":465},[36,103966,31732],{"class":109},[36,103968,621],{"class":98},[36,103970,103971],{"class":59},"\"box qpos:\"",[36,103973,103974],{"class":98},", np.array(data.qpos))\n",[36,103976,103977],{"class":38,"line":470},[36,103978,247],{"emptyLinePlaceholder":246},[36,103980,103981],{"class":38,"line":476},[36,103982,247],{"emptyLinePlaceholder":246},[36,103984,103985,103987,103989,103991,103993],{"class":38,"line":496},[36,103986,2010],{"class":163},[36,103988,31653],{"class":109},[36,103990,101990],{"class":163},[36,103992,101993],{"class":59},[36,103994,4190],{"class":98},[36,103996,103997],{"class":38,"line":501},[36,103998,102000],{"class":98},[14,104000,104001],{},"保存为：",[26,104003,104005],{"className":24261,"code":104004,"language":24263,"meta":31,"style":31},"touch ch2_xml_basic.py\n",[33,104006,104007],{"__ignoreMap":31},[36,104008,104009,104011],{"class":38,"line":39},[36,104010,101714],{"class":55},[36,104012,104013],{"class":59}," ch2_xml_basic.py\n",[14,104015,102732],{},[26,104017,104019],{"className":24261,"code":104018,"language":24263,"meta":31,"style":31},"python ch2_xml_basic.py\n",[33,104020,104021],{"__ignoreMap":31},[36,104022,104023,104025],{"class":38,"line":39},[36,104024,30813],{"class":55},[36,104026,104013],{"class":59},[588,104028,102003],{"id":102003},[14,104030,104031],{},"用名字查找 body：",[26,104033,104035],{"className":30811,"code":104034,"language":30813,"meta":31,"style":31},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[33,104036,104037],{"__ignoreMap":31},[36,104038,104039,104042,104044,104046,104048],{"class":38,"line":39},[36,104040,104041],{"class":98},"box_body_id ",[36,104043,176],{"class":163},[36,104045,103821],{"class":98},[36,104047,103824],{"class":59},[36,104049,627],{"class":98},[14,104051,104052],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,104054,104055],{},"用名字查找 site：",[26,104057,104059],{"className":30811,"code":104058,"language":30813,"meta":31,"style":31},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[33,104060,104061],{"__ignoreMap":31},[36,104062,104063,104066,104068,104070,104072],{"class":38,"line":39},[36,104064,104065],{"class":98},"site_id ",[36,104067,176],{"class":163},[36,104069,103836],{"class":98},[36,104071,103839],{"class":59},[36,104073,627],{"class":98},[14,104075,104076,104077,104080,104081,104084],{},"注意第二个参数是对象类型。查 body 就用 ",[33,104078,104079],{},"mjOBJ_BODY","，查 site 就用 ",[33,104082,104083],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,104086,104087],{},"读取世界坐标：",[26,104089,104091],{"className":30811,"code":104090,"language":30813,"meta":31,"style":31},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[33,104092,104093,104098],{"__ignoreMap":31},[36,104094,104095],{"class":38,"line":39},[36,104096,104097],{"class":98},"data.xpos[box_body_id]\n",[36,104099,104100],{"class":38,"line":46},[36,104101,104102],{"class":98},"data.site_xpos[site_id]\n",[14,104104,104105,104108,104109,104112],{},[33,104106,104107],{},"xpos"," 是 body 的世界坐标，",[33,104110,104111],{},"site_xpos"," 是 site 的世界坐标。",[588,104114,102139],{"id":102139},[26,104116,104118],{"className":30811,"code":104117,"language":30813,"meta":31,"style":31},"import mujoco\nimport numpy as np\n",[33,104119,104120,104126],{"__ignoreMap":31},[36,104121,104122,104124],{"class":38,"line":39},[36,104123,30825],{"class":163},[36,104125,101732],{"class":98},[36,104127,104128,104130,104132,104134],{"class":38,"line":46},[36,104129,30825],{"class":163},[36,104131,31813],{"class":98},[36,104133,31816],{"class":163},[36,104135,31819],{"class":98},[14,104137,104138,104139,104142,104143,104146,104147,828,104150,28819],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[33,104140,104141],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[33,104144,104145],{},"as np"," 是习惯写法，后面就可以写 ",[33,104148,104149],{},"np.array(...)",[33,104151,104152],{},"np.round(...)",[26,104154,104155],{"className":30811,"code":102026,"language":30813,"meta":31,"style":31},[33,104156,104157,104165,104169],{"__ignoreMap":31},[36,104158,104159,104161,104163],{"class":38,"line":39},[36,104160,101745],{"class":109},[36,104162,14003],{"class":163},[36,104164,101750],{"class":59},[36,104166,104167],{"class":38,"line":46},[36,104168,102041],{"class":59},[36,104170,104171],{"class":38,"line":52},[36,104172,96130],{"class":59},[14,104174,104175,104176,28819],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[33,104177,104178],{},"mujoco.MjModel.from_xml_string(XML)",[26,104180,104182],{"className":53499,"code":104181,"language":53501,"meta":31,"style":31},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[33,104183,104184],{"__ignoreMap":31},[36,104185,104186,104188,104190,104192,104194,104196,104198,104200,104203,104205,104207,104210,104212,104214,104217],{"class":38,"line":39},[36,104187,179],{"class":98},[36,104189,103641],{"class":51733},[36,104191,15359],{"class":55},[36,104193,176],{"class":98},[36,104195,103839],{"class":59},[36,104197,101537],{"class":55},[36,104199,176],{"class":98},[36,104201,104202],{"class":59},"\"0 0 0\"",[36,104204,101567],{"class":55},[36,104206,176],{"class":98},[36,104208,104209],{"class":59},"\"0.03\"",[36,104211,79199],{"class":55},[36,104213,176],{"class":98},[36,104215,104216],{"class":59},"\"0 1 0 1\"",[36,104218,101575],{"class":98},[14,104220,104221,104223,104224,104227,104228,104230,104231,104234],{},[33,104222,103641],{}," 是标记点。",[33,104225,104226],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[33,104229,103601],{}," 表示显示出来的小球大小。",[33,104232,104233],{},"rgba=\"0 1 0 1\""," 表示绿色。",[26,104236,104237],{"className":30811,"code":104034,"language":30813,"meta":31,"style":31},[33,104238,104239],{"__ignoreMap":31},[36,104240,104241,104243,104245,104247,104249],{"class":38,"line":39},[36,104242,104041],{"class":98},[36,104244,176],{"class":163},[36,104246,103821],{"class":98},[36,104248,103824],{"class":59},[36,104250,627],{"class":98},[14,104252,104253,104254,104256],{},"这行的作用是：根据名字 ",[33,104255,103824],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,104258,104259],{},"拆开看：",[571,104261,104262,104268,104273,104279],{},[574,104263,104264,104267],{},[33,104265,104266],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[574,104269,104270,104272],{},[33,104271,102516],{}," 是被查询的模型。",[574,104274,104275,104278],{},[33,104276,104277],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[574,104280,104281,104283],{},[33,104282,103824],{}," 是 XML 里写的名字。",[26,104285,104286],{"className":30811,"code":104058,"language":30813,"meta":31,"style":31},[33,104287,104288],{"__ignoreMap":31},[36,104289,104290,104292,104294,104296,104298],{"class":38,"line":39},[36,104291,104065],{"class":98},[36,104293,176],{"class":163},[36,104295,103836],{"class":98},[36,104297,103839],{"class":59},[36,104299,627],{"class":98},[14,104301,104302,104303,28819],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[33,104304,103839],{},[26,104306,104308],{"className":30811,"code":104307,"language":30813,"meta":31,"style":31},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[33,104309,104310,104322],{"__ignoreMap":31},[36,104311,104312,104314,104316,104318,104320],{"class":38,"line":39},[36,104313,2010],{"class":163},[36,104315,103852],{"class":98},[36,104317,179],{"class":163},[36,104319,4544],{"class":109},[36,104321,4190],{"class":98},[36,104323,104324,104327,104329,104331,104333],{"class":38,"line":46},[36,104325,104326],{"class":163},"    raise",[36,104328,103866],{"class":109},[36,104330,621],{"class":98},[36,104332,103871],{"class":59},[36,104334,627],{"class":98},[14,104336,104337,104339,104340,104343,104344,104347,104348,104351],{},[33,104338,2010],{}," 是条件判断。",[33,104341,104342],{},"mj_name2id"," 找不到对象时会返回 ",[33,104345,104346],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[33,104349,104350],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[26,104353,104355],{"className":30811,"code":104354,"language":30813,"meta":31,"style":31},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[33,104356,104357,104373],{"__ignoreMap":31},[36,104358,104359,104361,104363,104365,104367,104369,104371],{"class":38,"line":39},[36,104360,3476],{"class":163},[36,104362,101932],{"class":98},[36,104364,26480],{"class":163},[36,104366,32876],{"class":109},[36,104368,621],{"class":98},[36,104370,2190],{"class":109},[36,104372,31219],{"class":98},[36,104374,104375],{"class":38,"line":46},[36,104376,102130],{"class":98},[14,104378,104379],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[26,104381,104383],{"className":30811,"code":104382,"language":30813,"meta":31,"style":31},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[33,104384,104385],{"__ignoreMap":31},[36,104386,104387,104389,104391,104393],{"class":38,"line":39},[36,104388,30848],{"class":109},[36,104390,621],{"class":98},[36,104392,103947],{"class":59},[36,104394,103950],{"class":98},[14,104396,104397,104399,104400,104403],{},[33,104398,101510],{}," 保存所有 body 的世界坐标。",[33,104401,104402],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[26,104405,104407],{"className":30811,"code":104406,"language":30813,"meta":31,"style":31},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[33,104408,104409],{"__ignoreMap":31},[36,104410,104411,104413,104415,104417],{"class":38,"line":39},[36,104412,30848],{"class":109},[36,104414,621],{"class":98},[36,104416,103959],{"class":59},[36,104418,103962],{"class":98},[14,104420,104421,104424,104425,104427],{},[33,104422,104423],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[33,104426,103408],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[26,104429,104431],{"className":30811,"code":104430,"language":30813,"meta":31,"style":31},"print(\"box qpos:\", np.array(data.qpos))\n",[33,104432,104433],{"__ignoreMap":31},[36,104434,104435,104437,104439,104441],{"class":38,"line":39},[36,104436,30848],{"class":109},[36,104438,621],{"class":98},[36,104440,103971],{"class":59},[36,104442,103974],{"class":98},[14,104444,104445,104446,104449],{},"这里打印广义位置数组。",[33,104447,104448],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[559,104451,102747],{"id":102746},[14,104453,104454,104455,104458,104459,28819],{},"程序会输出 ",[33,104456,104457],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[33,104460,104461],{},"qpos",[14,104463,104464,104466,104467,104470,104471,104474],{},[33,104465,104402],{}," 是 body 的世界坐标位置。",[33,104468,104469],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[33,104472,104473],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,104476,82654,104477,82962,104479,104481],{},[33,104478,103408],{},[33,104480,104226],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,104483,104484],{},"如果你把 site 改成：",[26,104486,104488],{"className":53499,"code":104487,"language":53501,"meta":31,"style":31},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[33,104489,104490],{"__ignoreMap":31},[36,104491,104492,104494,104496,104498,104500,104503,104505,104507,104510,104512,104514,104516,104518,104520,104522],{"class":38,"line":39},[36,104493,179],{"class":98},[36,104495,103641],{"class":51733},[36,104497,15359],{"class":55},[36,104499,176],{"class":98},[36,104501,104502],{"class":59},"\"box_top\"",[36,104504,101537],{"class":55},[36,104506,176],{"class":98},[36,104508,104509],{"class":59},"\"0 0 0.15\"",[36,104511,101567],{"class":55},[36,104513,176],{"class":98},[36,104515,104209],{"class":59},[36,104517,79199],{"class":55},[36,104519,176],{"class":98},[36,104521,104216],{"class":59},[36,104523,101575],{"class":98},[14,104525,104526,104527,104530],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[33,104528,104529],{},"site position"," 就会比 body position 的 z 坐标更高。",[559,104532,102779],{"id":102778},[571,104534,104535,104544,104547,104554,104560,104571],{},[574,104536,102842,104537,104539,104540,102845,104542,28819],{},[33,104538,103412],{}," 的初始高度从 ",[33,104541,833],{},[33,104543,694],{},[574,104545,104546],{},"重新运行程序。",[574,104548,104549,104550,104553],{},"观察 ",[33,104551,104552],{},"box qpos"," 和最终位置是否变化。",[574,104555,104556,104557,104559],{},"故意把 ",[33,104558,103641],{}," 名称改错，确认程序能报错。",[574,104561,102842,104562,104564,104565,102845,104567,104570],{},[33,104563,101551],{}," 的颜色 ",[33,104566,102463],{},[33,104568,104569],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[574,104572,102842,104573,82962,104575,102845,104578,104581,104582,104584],{},[33,104574,103408],{},[33,104576,104577],{},"pos",[33,104579,104580],{},"0 0 0.2","，观察 ",[33,104583,104529],{}," 如何变化。",[559,104586,102884],{"id":102883},[588,104588,104590],{"id":104589},"xml-error-schema-violation",[33,104591,104592],{},"XML Error: Schema violation",[14,104594,104595],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[588,104597,104599,81722,104601],{"id":104598},"mj_name2id-返回-1",[33,104600,104342],{},[33,104602,104346],{},[14,104604,104605,104606,104609],{},"说明名字没有找到。检查 XML 中 ",[33,104607,104608],{},"name=\"...\"","，并确认对象类型正确。",[588,104611,104612],{"id":104612},"物体不下落",[14,104614,102954],{},[571,104616,104617,104622,104627],{},[574,104618,104619,104620],{},"body 是否有 ",[33,104621,102051],{},[574,104623,104624,104625],{},"gravity 是否为 ",[33,104626,103020],{},[574,104628,104629,104630,104632],{},"body 是否被固定在 ",[33,104631,102272],{}," 中",[588,104634,104635],{"id":104635},"坐标看起来不符合预期",[14,104637,104638],{},"先区分两种坐标：",[753,104640,104641,104650],{},[756,104642,104643],{},[759,104644,104645,104648],{},[762,104646,104647],{"align":24175},"坐标",[762,104649,101132],{"align":24175},[800,104651,104652,104662],{},[759,104653,104654,104659],{},[805,104655,104656,104657],{"align":24175},"XML 里的 ",[33,104658,104577],{},[805,104660,104661],{"align":24175},"相对父 body 的局部坐标",[759,104663,104664,104670],{},[805,104665,104666,25415,104668],{"align":24175},[33,104667,101510],{},[33,104669,104423],{},[805,104671,104672],{"align":24175},"仿真更新后的世界坐标",[14,104674,104675,104676,104678,104679,82971,104682,104684],{},"如果你修改了 ",[33,104677,101501],{},"，但还没调用 ",[33,104680,104681],{},"mj_forward",[33,104683,101646],{},"，世界坐标可能还没有更新。",[559,104686,103038],{"id":103037},[14,104688,104689],{},"MJCF 建模先掌握四件事：",[571,104691,104692,104697,104702,104707],{},[574,104693,104694,104696],{},[33,104695,52232],{}," 表示刚体层级。",[574,104698,104699,104701],{},[33,104700,101551],{}," 表示形状、碰撞和质量。",[574,104703,104704,104706],{},[33,104705,103387],{}," 决定 body 能不能动、怎么动。",[574,104708,104709,104711],{},[33,104710,103641],{}," 用来标记关键点，方便 Python 读取位置。",[14,104713,104714],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[537,104716,104717],{},"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":31,"searchDepth":46,"depth":46,"links":104719},[104720,104721,104722,104728,104732,104733,104734,104741],{"id":101078,"depth":46,"text":101079},{"id":101201,"depth":46,"text":101202},{"id":101475,"depth":46,"text":101476,"children":104723},[104724,104725,104726,104727],{"id":103391,"depth":52,"text":103391},{"id":103505,"depth":52,"text":103505},{"id":103531,"depth":52,"text":103532},{"id":103635,"depth":52,"text":103636},{"id":101683,"depth":46,"text":101684,"children":104729},[104730,104731],{"id":102003,"depth":52,"text":102003},{"id":102139,"depth":52,"text":102139},{"id":102746,"depth":46,"text":102747},{"id":102778,"depth":46,"text":102779},{"id":102883,"depth":46,"text":102884,"children":104735},[104736,104737,104739,104740],{"id":104589,"depth":52,"text":104592},{"id":104598,"depth":52,"text":104738},"mj_name2id 返回 -1",{"id":104612,"depth":52,"text":104612},{"id":104635,"depth":52,"text":104635},{"id":103037,"depth":46,"text":103038},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":103085,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104748,"title":104749,"body":104750,"description":31,"extension":543,"meta":106245,"navigation":246,"path":106246,"seo":106247,"stem":106248,"__hash__":106249},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104751,"toc":106217},[104752,104755,104757,104760,104763,104801,104804,104810,104813,104815,104817,104844,104846,104860,104862,104903,104905,104929,104931,104934,104943,104952,104955,104964,104972,104981,104984,104994,104997,105049,105056,105062,105070,105118,105121,105140,105143,105151,105155,105164,105197,105199,105547,105549,105561,105563,105574,105576,105579,105600,105606,105609,105634,105644,105647,105655,105658,105661,105682,105693,105695,105715,105718,105739,105748,105767,105773,105798,105801,105815,105822,105846,105849,105857,105866,105882,105894,105902,105911,105913,105916,105940,105945,105948,105970,105972,106011,106013,106020,106022,106030,106033,106036,106048,106089,106096,106107,106114,106117,106166,106169,106172,106178,106180,106185,106211,106214],[10,104753,104749],{"id":104754},"_3python-控制接口读取状态与推进仿真",[559,104756,101079],{"id":101078},[14,104758,104759],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,104761,104762],{},"你将学习:",[571,104764,104765,104770,104775,104779,104784,104795],{},[574,104766,104767],{},[33,104768,104769],{},"MjModel.from_xml_string",[574,104771,104772],{},[33,104773,104774],{},"MjData(model)",[574,104776,104777],{},[33,104778,101646],{},[574,104780,104781],{},[33,104782,104783],{},"mj_resetData",[574,104785,104786,104787,828,104789,828,104792],{},"读取 ",[33,104788,104461],{},[33,104790,104791],{},"qvel",[33,104793,104794],{},"ctrl",[574,104796,104797,104798],{},"使用 ",[33,104799,104800],{},"model.opt.timestep",[14,104802,104803],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[26,104805,104808],{"className":104806,"code":104807,"language":5638,"meta":31},[5636],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[33,104809,104807],{"__ignoreMap":31},[14,104811,104812],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[559,104814,101202],{"id":101201},[14,104816,101205],{},[26,104818,104820],{"className":24261,"code":104819,"language":24263,"meta":31,"style":31},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[33,104821,104822],{"__ignoreMap":31},[36,104823,104824,104826,104828,104830,104832,104835,104837,104839,104841],{"class":38,"line":39},[36,104825,56],{"class":55},[36,104827,26749],{"class":59},[36,104829,160],{"class":59},[36,104831,26834],{"class":109},[36,104833,104834],{"class":59}," python3",[36,104836,101230],{"class":59},[36,104838,102932],{"class":59},[36,104840,101246],{"class":59},[36,104842,104843],{"class":59}," glfw\n",[14,104845,103250],{},[26,104847,104848],{"className":24261,"code":101351,"language":24263,"meta":31,"style":31},[33,104849,104850],{"__ignoreMap":31},[36,104851,104852,104854,104856,104858],{"class":38,"line":39},[36,104853,24270],{"class":55},[36,104855,160],{"class":59},[36,104857,101362],{"class":59},[36,104859,101365],{"class":59},[14,104861,103267],{},[26,104863,104865],{"className":24261,"code":104864,"language":24263,"meta":31,"style":31},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[33,104866,104867,104884,104893],{"__ignoreMap":31},[36,104868,104869,104871,104873,104875,104878,104880,104882],{"class":38,"line":39},[36,104870,30763],{"class":55},[36,104872,29609],{"class":59},[36,104874,25552],{"class":109},[36,104876,104877],{"class":59}," mujoco-python-api",[36,104879,101407],{"class":59},[36,104881,101410],{"class":109},[36,104883,110],{"class":109},[36,104885,104886,104888,104890],{"class":38,"line":46},[36,104887,30763],{"class":55},[36,104889,101419],{"class":59},[36,104891,104892],{"class":59}," mujoco-python-api\n",[36,104894,104895,104897,104899,104901],{"class":38,"line":52},[36,104896,24270],{"class":55},[36,104898,160],{"class":59},[36,104900,101362],{"class":59},[36,104902,101365],{"class":59},[14,104904,101435],{},[571,104906,104907,104914,104923],{},[574,104908,104909,101449,104911,104913],{},[33,104910,101107],{},[33,104912,101112],{}," 是官方 Python bindings 的类名。",[574,104915,104916,104917,104920,104921,28819],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[33,104918,104919],{},"mjModel"," 在 Python 中是 ",[33,104922,101141],{},[574,104924,104925,104926,28819],{},"不要使用 ",[33,104927,104928],{},"sim = mujoco_py.MjSim(...)",[559,104930,101476],{"id":101475},[14,104932,104933],{},"仿真推进核心代码:",[26,104935,104937],{"className":30811,"code":104936,"language":30813,"meta":31,"style":31},"mujoco.mj_step(model, data)\n",[33,104938,104939],{"__ignoreMap":31},[36,104940,104941],{"class":38,"line":39},[36,104942,104936],{"class":98},[14,104944,104945,104946,828,104948,828,104950,28819],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[33,104947,101501],{},[33,104949,101504],{},[33,104951,101498],{},[14,104953,104954],{},"重置仿真:",[26,104956,104958],{"className":30811,"code":104957,"language":30813,"meta":31,"style":31},"mujoco.mj_resetData(model, data)\n",[33,104959,104960],{"__ignoreMap":31},[36,104961,104962],{"class":38,"line":39},[36,104963,104957],{"class":98},[14,104965,104966,104967,82971,104969,104971],{},"如果手动修改了 ",[33,104968,101501],{},[33,104970,101504],{},"，通常应调用:",[26,104973,104975],{"className":30811,"code":104974,"language":30813,"meta":31,"style":31},"mujoco.mj_forward(model, data)\n",[33,104976,104977],{"__ignoreMap":31},[36,104978,104979],{"class":38,"line":39},[36,104980,104974],{"class":98},[14,104982,104983],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[588,104985,104987,828,104989,828,104991,104993],{"id":104986},"qposqvelctrl-是什么",[33,104988,104461],{},[33,104990,104791],{},[33,104992,104794],{}," 是什么",[14,104995,104996],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[753,104998,104999,105011],{},[756,105000,105001],{},[759,105002,105003,105006,105008],{},[762,105004,105005],{"align":24175},"字段",[762,105007,101132],{"align":24175},[762,105009,105010],{"align":24175},"谁来修改",[800,105012,105013,105025,105037],{},[759,105014,105015,105019,105022],{},[805,105016,105017],{"align":24175},[33,105018,101501],{},[805,105020,105021],{"align":24175},"广义位置，例如小车位置、关节角、自由物体位置姿态",[805,105023,105024],{"align":24175},"MuJoCo 更新，也可以手动设置初始状态",[759,105026,105027,105031,105034],{},[805,105028,105029],{"align":24175},[33,105030,101504],{},[805,105032,105033],{"align":24175},"广义速度，例如小车速度、关节角速度",[805,105035,105036],{"align":24175},"MuJoCo 更新，也可以手动清零",[759,105038,105039,105043,105046],{},[805,105040,105041],{"align":24175},[33,105042,101507],{},[805,105044,105045],{"align":24175},"actuator 的控制输入",[805,105047,105048],{"align":24175},"主要由你的控制代码写入",[14,105050,9466,105051,101449,105053,105055],{},[33,105052,104461],{},[33,105054,104791],{}," 不一定同维。自由刚体就是典型例子：",[26,105057,105060],{"className":105058,"code":105059,"language":5638,"meta":31},[5636],"freejoint: qpos 7 维，qvel 6 维\n",[33,105061,105059],{"__ignoreMap":31},[588,105063,105065,101449,105067,105069],{"id":105064},"mj_step-和-mj_forward-的区别",[33,105066,101646],{},[33,105068,104681],{}," 的区别",[753,105071,105072,105085],{},[756,105073,105074],{},[759,105075,105076,105079,105082],{},[762,105077,105078],{"align":24175},"函数",[762,105080,105081],{"align":24175},"是否推进时间",[762,105083,105084],{"align":24175},"什么时候用",[800,105086,105087,105100],{},[759,105088,105089,105094,105097],{},[805,105090,105091],{"align":24175},[33,105092,105093],{},"mj_step(model, data)",[805,105095,105096],{"align":24175},"是",[805,105098,105099],{"align":24175},"正常仿真循环，每调用一次前进一步",[759,105101,105102,105107,105110],{},[805,105103,105104],{"align":24175},[33,105105,105106],{},"mj_forward(model, data)",[805,105108,105109],{"align":24175},"否",[805,105111,105112,105113,828,105115,105117],{"align":24175},"手动改了 ",[33,105114,104461],{},[33,105116,104791],{}," 后，刷新派生量",[14,105119,105120],{},"例如你写：",[26,105122,105124],{"className":30811,"code":105123,"language":30813,"meta":31,"style":31},"data.qpos[2] = 2.0\n",[33,105125,105126],{"__ignoreMap":31},[36,105127,105128,105131,105133,105135,105137],{"class":38,"line":39},[36,105129,105130],{"class":98},"data.qpos[",[36,105132,694],{"class":109},[36,105134,4894],{"class":98},[36,105136,176],{"class":163},[36,105138,105139],{"class":109}," 2.0\n",[14,105141,105142],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[26,105144,105145],{"className":30811,"code":104974,"language":30813,"meta":31,"style":31},[33,105146,105147],{"__ignoreMap":31},[36,105148,105149],{"class":38,"line":39},[36,105150,104974],{"class":98},[588,105152,105154],{"id":105153},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,105156,105157,105160,105161,105163],{},[33,105158,105159],{},"mujoco.mj_resetData(model, data)"," 会把 ",[33,105162,33834],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[26,105165,105167],{"className":30811,"code":105166,"language":30813,"meta":31,"style":31},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[33,105168,105169,105173,105183,105193],{"__ignoreMap":31},[36,105170,105171],{"class":38,"line":39},[36,105172,104957],{"class":98},[36,105174,105175,105178,105180],{"class":38,"line":46},[36,105176,105177],{"class":98},"data.qpos[:] ",[36,105179,176],{"class":163},[36,105181,105182],{"class":98}," random_qpos\n",[36,105184,105185,105188,105190],{"class":38,"line":52},[36,105186,105187],{"class":98},"data.qvel[:] ",[36,105189,176],{"class":163},[36,105191,105192],{"class":109}," 0.0\n",[36,105194,105195],{"class":38,"line":66},[36,105196,104974],{"class":98},[559,105198,101684],{"id":101683},[26,105200,105202],{"className":30811,"code":105201,"language":30813,"meta":31,"style":31},"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",[33,105203,105204,105210,105220,105224,105228,105236,105241,105245,105249,105253,105258,105262,105267,105272,105277,105281,105285,105289,105293,105297,105301,105320,105327,105339,105350,105366,105382,105386,105390,105402,105414,105422,105426,105437,105441,105457,105461,105465,105474,105478,105483,105492,105496,105509,105514,105523,105527,105531,105543],{"__ignoreMap":31},[36,105205,105206,105208],{"class":38,"line":39},[36,105207,30825],{"class":163},[36,105209,101732],{"class":98},[36,105211,105212,105214,105216,105218],{"class":38,"line":46},[36,105213,30825],{"class":163},[36,105215,31813],{"class":98},[36,105217,31816],{"class":163},[36,105219,31819],{"class":98},[36,105221,105222],{"class":38,"line":52},[36,105223,247],{"emptyLinePlaceholder":246},[36,105225,105226],{"class":38,"line":66},[36,105227,247],{"emptyLinePlaceholder":246},[36,105229,105230,105232,105234],{"class":38,"line":72},[36,105231,101745],{"class":109},[36,105233,14003],{"class":163},[36,105235,101750],{"class":59},[36,105237,105238],{"class":38,"line":82},[36,105239,105240],{"class":59},"\u003Cmujoco model=\"state_api\">\n",[36,105242,105243],{"class":38,"line":88},[36,105244,101760],{"class":59},[36,105246,105247],{"class":38,"line":113},[36,105248,247],{"emptyLinePlaceholder":246},[36,105250,105251],{"class":38,"line":119},[36,105252,101769],{"class":59},[36,105254,105255],{"class":38,"line":131},[36,105256,105257],{"class":59},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[36,105259,105260],{"class":38,"line":137},[36,105261,247],{"emptyLinePlaceholder":246},[36,105263,105264],{"class":38,"line":147},[36,105265,105266],{"class":59},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[36,105268,105269],{"class":38,"line":153},[36,105270,105271],{"class":59},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[36,105273,105274],{"class":38,"line":191},[36,105275,105276],{"class":59},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[36,105278,105279],{"class":38,"line":197},[36,105280,101798],{"class":59},[36,105282,105283],{"class":38,"line":217},[36,105284,101803],{"class":59},[36,105286,105287],{"class":38,"line":223},[36,105288,101808],{"class":59},[36,105290,105291],{"class":38,"line":243},[36,105292,96130],{"class":59},[36,105294,105295],{"class":38,"line":250},[36,105296,247],{"emptyLinePlaceholder":246},[36,105298,105299],{"class":38,"line":256},[36,105300,247],{"emptyLinePlaceholder":246},[36,105302,105303,105305,105308,105311,105313,105316,105318],{"class":38,"line":273},[36,105304,32380],{"class":163},[36,105306,105307],{"class":55}," print_state",[36,105309,105310],{"class":98},"(prefix: ",[36,105312,1781],{"class":109},[36,105314,105315],{"class":98},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[36,105317,96118],{"class":109},[36,105319,4190],{"class":98},[36,105321,105322,105324],{"class":38,"line":278},[36,105323,31732],{"class":109},[36,105325,105326],{"class":98},"(prefix)\n",[36,105328,105329,105331,105333,105336],{"class":38,"line":284},[36,105330,31732],{"class":109},[36,105332,621],{"class":98},[36,105334,105335],{"class":59},"\"  timestep:\"",[36,105337,105338],{"class":98},", model.opt.timestep)\n",[36,105340,105341,105343,105345,105348],{"class":38,"line":315},[36,105342,31732],{"class":109},[36,105344,621],{"class":98},[36,105346,105347],{"class":59},"\"  time:\"",[36,105349,101909],{"class":98},[36,105351,105352,105354,105356,105359,105362,105364],{"class":38,"line":320},[36,105353,31732],{"class":109},[36,105355,621],{"class":98},[36,105357,105358],{"class":59},"\"  qpos:\"",[36,105360,105361],{"class":98},", np.round(data.qpos.copy(), ",[36,105363,908],{"class":109},[36,105365,30930],{"class":98},[36,105367,105368,105370,105372,105375,105378,105380],{"class":38,"line":326},[36,105369,31732],{"class":109},[36,105371,621],{"class":98},[36,105373,105374],{"class":59},"\"  qvel:\"",[36,105376,105377],{"class":98},", np.round(data.qvel.copy(), ",[36,105379,908],{"class":109},[36,105381,30930],{"class":98},[36,105383,105384],{"class":38,"line":343},[36,105385,247],{"emptyLinePlaceholder":246},[36,105387,105388],{"class":38,"line":348},[36,105389,247],{"emptyLinePlaceholder":246},[36,105391,105392,105394,105396,105398,105400],{"class":38,"line":354},[36,105393,32380],{"class":163},[36,105395,2432],{"class":55},[36,105397,101829],{"class":98},[36,105399,96118],{"class":109},[36,105401,4190],{"class":98},[36,105403,105404,105406,105408,105410,105412],{"class":38,"line":370},[36,105405,101838],{"class":98},[36,105407,176],{"class":163},[36,105409,101843],{"class":98},[36,105411,101745],{"class":109},[36,105413,627],{"class":98},[36,105415,105416,105418,105420],{"class":38,"line":375},[36,105417,101852],{"class":98},[36,105419,176],{"class":163},[36,105421,101857],{"class":98},[36,105423,105424],{"class":38,"line":381},[36,105425,247],{"emptyLinePlaceholder":246},[36,105427,105428,105431,105434],{"class":38,"line":399},[36,105429,105430],{"class":98},"    print_state(",[36,105432,105433],{"class":59},"\"initial\"",[36,105435,105436],{"class":98},", model, data)\n",[36,105438,105439],{"class":38,"line":404},[36,105440,247],{"emptyLinePlaceholder":246},[36,105442,105443,105445,105447,105449,105451,105453,105455],{"class":38,"line":410},[36,105444,3652],{"class":163},[36,105446,101932],{"class":98},[36,105448,26480],{"class":163},[36,105450,32876],{"class":109},[36,105452,621],{"class":98},[36,105454,1270],{"class":109},[36,105456,31219],{"class":98},[36,105458,105459],{"class":38,"line":423},[36,105460,101947],{"class":98},[36,105462,105463],{"class":38,"line":436},[36,105464,247],{"emptyLinePlaceholder":246},[36,105466,105467,105469,105472],{"class":38,"line":441},[36,105468,105430],{"class":98},[36,105470,105471],{"class":59},"\"after 50 steps\"",[36,105473,105436],{"class":98},[36,105475,105476],{"class":38,"line":447},[36,105477,247],{"emptyLinePlaceholder":246},[36,105479,105480],{"class":38,"line":465},[36,105481,105482],{"class":98},"    mujoco.mj_resetData(model, data)\n",[36,105484,105485,105487,105490],{"class":38,"line":470},[36,105486,105430],{"class":98},[36,105488,105489],{"class":59},"\"after reset\"",[36,105491,105436],{"class":98},[36,105493,105494],{"class":38,"line":476},[36,105495,247],{"emptyLinePlaceholder":246},[36,105497,105498,105501,105503,105505,105507],{"class":38,"line":496},[36,105499,105500],{"class":98},"    data.qpos[",[36,105502,694],{"class":109},[36,105504,4894],{"class":98},[36,105506,176],{"class":163},[36,105508,105139],{"class":109},[36,105510,105511],{"class":38,"line":501},[36,105512,105513],{"class":98},"    mujoco.mj_forward(model, data)\n",[36,105515,105516,105518,105521],{"class":38,"line":507},[36,105517,105430],{"class":98},[36,105519,105520],{"class":59},"\"after manual qpos edit\"",[36,105522,105436],{"class":98},[36,105524,105525],{"class":38,"line":517},[36,105526,247],{"emptyLinePlaceholder":246},[36,105528,105529],{"class":38,"line":522},[36,105530,247],{"emptyLinePlaceholder":246},[36,105532,105533,105535,105537,105539,105541],{"class":38,"line":528},[36,105534,2010],{"class":163},[36,105536,31653],{"class":109},[36,105538,101990],{"class":163},[36,105540,101993],{"class":59},[36,105542,4190],{"class":98},[36,105544,105545],{"class":38,"line":10203},[36,105546,102000],{"class":98},[14,105548,104001],{},[26,105550,105552],{"className":24261,"code":105551,"language":24263,"meta":31,"style":31},"touch ch3_python_state.py\n",[33,105553,105554],{"__ignoreMap":31},[36,105555,105556,105558],{"class":38,"line":39},[36,105557,101714],{"class":55},[36,105559,105560],{"class":59}," ch3_python_state.py\n",[14,105562,102732],{},[26,105564,105566],{"className":24261,"code":105565,"language":24263,"meta":31,"style":31},"python ch3_python_state.py\n",[33,105567,105568],{"__ignoreMap":31},[36,105569,105570,105572],{"class":38,"line":39},[36,105571,30813],{"class":55},[36,105573,105560],{"class":59},[588,105575,102003],{"id":102003},[14,105577,105578],{},"打印状态的函数：",[26,105580,105582],{"className":30811,"code":105581,"language":30813,"meta":31,"style":31},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[33,105583,105584],{"__ignoreMap":31},[36,105585,105586,105588,105590,105592,105594,105596,105598],{"class":38,"line":39},[36,105587,32380],{"class":163},[36,105589,105307],{"class":55},[36,105591,105310],{"class":98},[36,105593,1781],{"class":109},[36,105595,105315],{"class":98},[36,105597,96118],{"class":109},[36,105599,4190],{"class":98},[14,105601,105602,105603,105605],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[33,105604,33834],{}," 里发生了什么。",[14,105607,105608],{},"推进 50 步：",[26,105610,105612],{"className":30811,"code":105611,"language":30813,"meta":31,"style":31},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[33,105613,105614,105630],{"__ignoreMap":31},[36,105615,105616,105618,105620,105622,105624,105626,105628],{"class":38,"line":39},[36,105617,3476],{"class":163},[36,105619,101932],{"class":98},[36,105621,26480],{"class":163},[36,105623,32876],{"class":109},[36,105625,621],{"class":98},[36,105627,1270],{"class":109},[36,105629,31219],{"class":98},[36,105631,105632],{"class":38,"line":46},[36,105633,102130],{"class":98},[14,105635,105636,105637,105640,105641,105643],{},"由于 ",[33,105638,105639],{},"timestep=0.01","，所以 50 步后时间约为 ",[33,105642,35762],{}," 秒。",[14,105645,105646],{},"重置：",[26,105648,105649],{"className":30811,"code":104957,"language":30813,"meta":31,"style":31},[33,105650,105651],{"__ignoreMap":31},[36,105652,105653],{"class":38,"line":39},[36,105654,104957],{"class":98},[14,105656,105657],{},"这会把时间、位置、速度恢复到初始状态。",[14,105659,105660],{},"手动改高度：",[26,105662,105664],{"className":30811,"code":105663,"language":30813,"meta":31,"style":31},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[33,105665,105666,105678],{"__ignoreMap":31},[36,105667,105668,105670,105672,105674,105676],{"class":38,"line":39},[36,105669,105130],{"class":98},[36,105671,694],{"class":109},[36,105673,4894],{"class":98},[36,105675,176],{"class":163},[36,105677,105139],{"class":109},[36,105679,105680],{"class":38,"line":46},[36,105681,104974],{"class":98},[14,105683,105684,105685,105688,105689,105692],{},"这个例子里 ",[33,105686,105687],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[33,105690,105691],{},"2.0"," 表示把小球放到更高的位置。",[588,105694,102139],{"id":102139},[26,105696,105697],{"className":30811,"code":105581,"language":30813,"meta":31,"style":31},[33,105698,105699],{"__ignoreMap":31},[36,105700,105701,105703,105705,105707,105709,105711,105713],{"class":38,"line":39},[36,105702,32380],{"class":163},[36,105704,105307],{"class":55},[36,105706,105310],{"class":98},[36,105708,1781],{"class":109},[36,105710,105315],{"class":98},[36,105712,96118],{"class":109},[36,105714,4190],{"class":98},[14,105716,105717],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[571,105719,105720,105729,105734],{},[574,105721,105722,105725,105726,105728],{},[33,105723,105724],{},"prefix","：一段文字，比如 ",[33,105727,105433],{},"，用来说明现在打印的是哪个阶段。",[574,105730,105731,105733],{},[33,105732,102516],{},"：MuJoCo 模型。",[574,105735,105736,105738],{},[33,105737,33834],{},"：MuJoCo 当前状态。",[14,105740,105741,828,105744,105747],{},[33,105742,105743],{},"prefix: str",[33,105745,105746],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[26,105749,105751],{"className":30811,"code":105750,"language":30813,"meta":31,"style":31},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[33,105752,105753],{"__ignoreMap":31},[36,105754,105755,105757,105759,105761,105763,105765],{"class":38,"line":39},[36,105756,30848],{"class":109},[36,105758,621],{"class":98},[36,105760,105358],{"class":59},[36,105762,105361],{"class":98},[36,105764,908],{"class":109},[36,105766,30930],{"class":98},[14,105768,105769,105772],{},[33,105770,105771],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[26,105774,105776],{"className":30811,"code":105775,"language":30813,"meta":31,"style":31},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[33,105777,105778,105790],{"__ignoreMap":31},[36,105779,105780,105782,105784,105786,105788],{"class":38,"line":39},[36,105781,102065],{"class":98},[36,105783,176],{"class":163},[36,105785,101843],{"class":98},[36,105787,101745],{"class":109},[36,105789,627],{"class":98},[36,105791,105792,105794,105796],{"class":38,"line":46},[36,105793,102089],{"class":98},[36,105795,176],{"class":163},[36,105797,101857],{"class":98},[14,105799,105800],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[26,105802,105804],{"className":30811,"code":105803,"language":30813,"meta":31,"style":31},"print_state(\"initial\", model, data)\n",[33,105805,105806],{"__ignoreMap":31},[36,105807,105808,105811,105813],{"class":38,"line":39},[36,105809,105810],{"class":98},"print_state(",[36,105812,105433],{"class":59},[36,105814,105436],{"class":98},[14,105816,105817,105818,105821],{},"调用刚才定义的 ",[33,105819,105820],{},"print_state"," 函数，打印初始状态。",[26,105823,105824],{"className":30811,"code":105611,"language":30813,"meta":31,"style":31},[33,105825,105826,105842],{"__ignoreMap":31},[36,105827,105828,105830,105832,105834,105836,105838,105840],{"class":38,"line":39},[36,105829,3476],{"class":163},[36,105831,101932],{"class":98},[36,105833,26480],{"class":163},[36,105835,32876],{"class":109},[36,105837,621],{"class":98},[36,105839,1270],{"class":109},[36,105841,31219],{"class":98},[36,105843,105844],{"class":38,"line":46},[36,105845,102130],{"class":98},[14,105847,105848],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[26,105850,105851],{"className":30811,"code":104957,"language":30813,"meta":31,"style":31},[33,105852,105853],{"__ignoreMap":31},[36,105854,105855],{"class":38,"line":39},[36,105856,104957],{"class":98},[14,105858,105859,105860,105862,105863,105865],{},"重置 ",[33,105861,33834],{},"。注意它不会重新创建 ",[33,105864,102516],{},"，因为模型结构没有变，只是状态回到初始值。",[26,105867,105868],{"className":30811,"code":105123,"language":30813,"meta":31,"style":31},[33,105869,105870],{"__ignoreMap":31},[36,105871,105872,105874,105876,105878,105880],{"class":38,"line":39},[36,105873,105130],{"class":98},[36,105875,694],{"class":109},[36,105877,4894],{"class":98},[36,105879,176],{"class":163},[36,105881,105139],{"class":109},[14,105883,105884,105885,828,105888,828,105891,105893],{},"这行是“手动改状态”。在 freejoint 中，",[33,105886,105887],{},"qpos[0]",[33,105889,105890],{},"qpos[1]",[33,105892,105687],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[26,105895,105896],{"className":30811,"code":104974,"language":30813,"meta":31,"style":31},[33,105897,105898],{"__ignoreMap":31},[36,105899,105900],{"class":38,"line":39},[36,105901,104974],{"class":98},[14,105903,105904,105905,105907,105908,105910],{},"手动改完 ",[33,105906,104461],{}," 后，调用 ",[33,105909,104681],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[559,105912,102747],{"id":102746},[14,105914,105915],{},"你会看到:",[571,105917,105918,105923,105928,105931],{},[574,105919,105920,105921],{},"初始时间为 ",[33,105922,807],{},[574,105924,105925,105926],{},"50 步后时间约为 ",[33,105927,35762],{},[574,105929,105930],{},"reset 后状态恢复",[574,105932,105933,105934,105937,105938],{},"手动修改 ",[33,105935,105936],{},"data.qpos[2]"," 后，小球高度变为 ",[33,105939,105691],{},[14,105941,105942,105944],{},[33,105943,105687],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,105946,105947],{},"输出里可以重点看三件事：",[571,105949,105950,105958,105963],{},[574,105951,105952,105954,105955,105957],{},[33,105953,2846],{}," 是否随着 ",[33,105956,101646],{}," 增加。",[574,105959,105960,105962],{},[33,105961,104461],{}," 的 z 坐标是否因为下落而变化。",[574,105964,105965,105967,105968,28819],{},[33,105966,104783],{}," 后时间是否回到 ",[33,105969,807],{},[559,105971,102779],{"id":102778},[571,105973,105974,105980,105986,105992,105995,106004],{},[574,105975,105976,105977,28819],{},"修改 timestep 为 ",[33,105978,105979],{},"0.005",[574,105981,105982,105983,28819],{},"重新运行，检查 50 步后时间是否约为 ",[33,105984,105985],{},"0.25",[574,105987,105988,105989,28819],{},"修改重力为 ",[33,105990,105991],{},"0 0 -1.0",[574,105993,105994],{},"观察小球下降速度是否变慢。",[574,105996,102842,105997,102845,106000,106003],{},[33,105998,105999],{},"data.qpos[2] = 2.0",[33,106001,106002],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[574,106005,106006,106007,106010],{},"注释掉 ",[33,106008,106009],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[559,106012,102884],{"id":102883},[588,106014,106016,106017,106019],{"id":106015},"修改-dataqpos-后位置没有更新","修改 ",[33,106018,101501],{}," 后位置没有更新",[14,106021,102893],{},[26,106023,106024],{"className":30811,"code":104974,"language":30813,"meta":31,"style":31},[33,106025,106026],{"__ignoreMap":31},[36,106027,106028],{"class":38,"line":39},[36,106029,104974],{"class":98},[588,106031,106032],{"id":106032},"数组维度看不懂",[14,106034,106035],{},"打印模型维度:",[26,106037,106039],{"className":30811,"code":106038,"language":30813,"meta":31,"style":31},"print(model.nq, model.nv, model.nu)\n",[33,106040,106041],{"__ignoreMap":31},[36,106042,106043,106045],{"class":38,"line":39},[36,106044,30848],{"class":109},[36,106046,106047],{"class":98},"(model.nq, model.nv, model.nu)\n",[753,106049,106050,106058],{},[756,106051,106052],{},[759,106053,106054,106056],{},[762,106055,105005],{"align":24175},[762,106057,101132],{"align":24175},[800,106059,106060,106070,106080],{},[759,106061,106062,106067],{},[805,106063,106064],{"align":24175},[33,106065,106066],{},"nq",[805,106068,106069],{"align":24175},"位置变量数量",[759,106071,106072,106077],{},[805,106073,106074],{"align":24175},[33,106075,106076],{},"nv",[805,106078,106079],{"align":24175},"速度变量数量",[759,106081,106082,106086],{},[805,106083,106084],{"align":24175},[33,106085,102593],{},[805,106087,106088],{"align":24175},"控制输入数量",[588,106090,106092,106093,106095],{"id":106091},"误以为-qpos-一定等于关节数","误以为 ",[33,106094,104461],{}," 一定等于关节数",[14,106097,106098,106099,82962,106101,106103,106104,106106],{},"不是。例如 ",[33,106100,102051],{},[33,106102,104461],{}," 是 7 维，但 ",[33,106105,104791],{}," 是 6 维。",[588,106108,106110,106111,106113],{"id":106109},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[33,106112,104461],{}," 的第几位",[14,106115,106116],{},"初学时可以先打印：",[26,106118,106120],{"className":30811,"code":106119,"language":30813,"meta":31,"style":31},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[33,106121,106122,106132,106142,106154],{"__ignoreMap":31},[36,106123,106124,106126,106128,106130],{"class":38,"line":39},[36,106125,30848],{"class":109},[36,106127,621],{"class":98},[36,106129,101870],{"class":59},[36,106131,101873],{"class":98},[36,106133,106134,106136,106138,106140],{"class":38,"line":46},[36,106135,30848],{"class":109},[36,106137,621],{"class":98},[36,106139,101882],{"class":59},[36,106141,101885],{"class":98},[36,106143,106144,106146,106148,106151],{"class":38,"line":52},[36,106145,30848],{"class":109},[36,106147,621],{"class":98},[36,106149,106150],{"class":59},"\"qpos:\"",[36,106152,106153],{"class":98},", data.qpos)\n",[36,106155,106156,106158,106160,106163],{"class":38,"line":66},[36,106157,30848],{"class":109},[36,106159,621],{"class":98},[36,106161,106162],{"class":59},"\"qvel:\"",[36,106164,106165],{"class":98},", data.qvel)\n",[14,106167,106168],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[588,106170,106171],{"id":106171},"仿真结果每次都一样",[14,106173,106174,106175,106177],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[33,106176,104461],{},"、目标点或控制输入。",[559,106179,103038],{"id":103037},[14,106181,106182,106183,25055],{},"Python 控制 MuJoCo 的核心就是读写 ",[33,106184,33834],{},[571,106186,106187,106195,106200,106205],{},[574,106188,106189,106190,101449,106192,106194],{},"用 ",[33,106191,101501],{},[33,106193,101504],{}," 读取状态。",[574,106196,106189,106197,106199],{},[33,106198,101507],{}," 写入控制。",[574,106201,106189,106202,106204],{},[33,106203,101646],{}," 推进时间。",[574,106206,106207,106208,106210],{},"手动改状态后用 ",[33,106209,104681],{}," 刷新派生量。",[14,106212,106213],{},"理解这一章后，就可以进入关节和 actuator 控制。",[537,106215,106216],{},"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":31,"searchDepth":46,"depth":46,"links":106218},[106219,106220,106221,106228,106232,106233,106234,106244],{"id":101078,"depth":46,"text":101079},{"id":101201,"depth":46,"text":101202},{"id":101475,"depth":46,"text":101476,"children":106222},[106223,106225,106227],{"id":104986,"depth":52,"text":106224},"qpos、qvel、ctrl 是什么",{"id":105064,"depth":52,"text":106226},"mj_step 和 mj_forward 的区别",{"id":105153,"depth":52,"text":105154},{"id":101683,"depth":46,"text":101684,"children":106229},[106230,106231],{"id":102003,"depth":52,"text":102003},{"id":102139,"depth":52,"text":102139},{"id":102746,"depth":46,"text":102747},{"id":102778,"depth":46,"text":102779},{"id":102883,"depth":46,"text":102884,"children":106235},[106236,106238,106239,106241,106243],{"id":106015,"depth":52,"text":106237},"修改 data.qpos 后位置没有更新",{"id":106032,"depth":52,"text":106032},{"id":106091,"depth":52,"text":106240},"误以为 qpos 一定等于关节数",{"id":106109,"depth":52,"text":106242},"不知道某个元素在 qpos 的第几位",{"id":106171,"depth":52,"text":106171},{"id":103037,"depth":46,"text":103038},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104749,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106251,"title":106252,"body":106253,"description":31,"extension":543,"meta":107943,"navigation":246,"path":107944,"seo":107945,"stem":107946,"__hash__":107947},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106254,"toc":107919},[106255,106258,106260,106263,106265,106290,106293,106312,106315,106317,106319,106343,106345,106359,106361,106402,106404,106428,106430,106433,106467,106469,106482,106485,106553,106562,106566,106569,106603,106609,106612,106616,106655,106658,106678,106682,106725,106727,106756,106759,106765,106768,106770,107164,107166,107178,107180,107191,107193,107196,107225,107233,107236,107271,107274,107276,107284,107287,107289,107300,107310,107330,107333,107369,107381,107429,107448,107490,107503,107531,107536,107557,107567,107585,107588,107622,107625,107645,107648,107667,107673,107675,107678,107684,107690,107700,107703,107709,107718,107720,107766,107768,107774,107780,107783,107786,107806,107809,107815,107821,107823,107846,107849,107852,107861,107864,107902,107904,107907,107913,107916],[10,106256,106252],{"id":106257},"_4关节actuator-与力控制",[559,106259,101079],{"id":101078},[14,106261,106262],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,106264,104762],{},[571,106266,106267,106273,106278,106282,106287],{},[574,106268,106269,106272],{},[33,106270,106271],{},"hinge"," 关节",[574,106274,106275],{},[33,106276,106277],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[574,106279,106280],{},[33,106281,101507],{},[574,106283,106284],{},[33,106285,106286],{},"ctrlrange",[574,106288,106289],{},"读取关节角和角速度",[14,106291,106292],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[26,106294,106296],{"className":30811,"code":106295,"language":30813,"meta":31,"style":31},"data.ctrl[0] = ...\n",[33,106297,106298],{"__ignoreMap":31},[36,106299,106300,106303,106305,106307,106309],{"class":38,"line":39},[36,106301,106302],{"class":98},"data.ctrl[",[36,106304,807],{"class":109},[36,106306,4894],{"class":98},[36,106308,176],{"class":163},[36,106310,106311],{"class":109}," ...\n",[14,106313,106314],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[559,106316,101202],{"id":101201},[14,106318,101205],{},[26,106320,106321],{"className":24261,"code":104819,"language":24263,"meta":31,"style":31},[33,106322,106323],{"__ignoreMap":31},[36,106324,106325,106327,106329,106331,106333,106335,106337,106339,106341],{"class":38,"line":39},[36,106326,56],{"class":55},[36,106328,26749],{"class":59},[36,106330,160],{"class":59},[36,106332,26834],{"class":109},[36,106334,104834],{"class":59},[36,106336,101230],{"class":59},[36,106338,102932],{"class":59},[36,106340,101246],{"class":59},[36,106342,104843],{"class":59},[14,106344,103250],{},[26,106346,106347],{"className":24261,"code":101351,"language":24263,"meta":31,"style":31},[33,106348,106349],{"__ignoreMap":31},[36,106350,106351,106353,106355,106357],{"class":38,"line":39},[36,106352,24270],{"class":55},[36,106354,160],{"class":59},[36,106356,101362],{"class":59},[36,106358,101365],{"class":59},[14,106360,103267],{},[26,106362,106364],{"className":24261,"code":106363,"language":24263,"meta":31,"style":31},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[33,106365,106366,106383,106392],{"__ignoreMap":31},[36,106367,106368,106370,106372,106374,106377,106379,106381],{"class":38,"line":39},[36,106369,30763],{"class":55},[36,106371,29609],{"class":59},[36,106373,25552],{"class":109},[36,106375,106376],{"class":59}," mujoco-control",[36,106378,101407],{"class":59},[36,106380,101410],{"class":109},[36,106382,110],{"class":109},[36,106384,106385,106387,106389],{"class":38,"line":46},[36,106386,30763],{"class":55},[36,106388,101419],{"class":59},[36,106390,106391],{"class":59}," mujoco-control\n",[36,106393,106394,106396,106398,106400],{"class":38,"line":52},[36,106395,24270],{"class":55},[36,106397,160],{"class":59},[36,106399,101362],{"class":59},[36,106401,101365],{"class":59},[14,106403,101435],{},[571,106405,106406,106412,106419,106425],{},[574,106407,106408,106411],{},[33,106409,106410],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[574,106413,106414,106416,106417,28819],{},[33,106415,101507],{}," 长度等于 ",[33,106418,102589],{},[574,106420,82654,106421,106424],{},[33,106422,106423],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[574,106426,106427],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[559,106429,101476],{"id":101475},[14,106431,106432],{},"关节决定 body 如何运动:",[26,106434,106436],{"className":53499,"code":106435,"language":53501,"meta":31,"style":31},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[33,106437,106438],{"__ignoreMap":31},[36,106439,106440,106442,106444,106446,106448,106451,106453,106455,106457,106460,106462,106465],{"class":38,"line":39},[36,106441,179],{"class":98},[36,106443,103387],{"class":51733},[36,106445,15359],{"class":55},[36,106447,176],{"class":98},[36,106449,106450],{"class":59},"\"hinge\"",[36,106452,54256],{"class":55},[36,106454,176],{"class":98},[36,106456,106450],{"class":59},[36,106458,106459],{"class":55}," axis",[36,106461,176],{"class":98},[36,106463,106464],{"class":59},"\"0 1 0\"",[36,106466,101575],{"class":98},[14,106468,103483],{},[571,106470,106471,106476,106479],{},[574,106472,106473,106474],{},"名字是 ",[33,106475,106271],{},[574,106477,106478],{},"类型是旋转关节",[574,106480,106481],{},"绕 y 轴旋转",[14,106483,106484],{},"actuator 决定如何施加控制:",[26,106486,106488],{"className":53499,"code":106487,"language":53501,"meta":31,"style":31},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[33,106489,106490,106499,106545],{"__ignoreMap":31},[36,106491,106492,106494,106497],{"class":38,"line":39},[36,106493,179],{"class":98},[36,106495,106496],{"class":51733},"actuator",[36,106498,188],{"class":98},[36,106500,106501,106503,106506,106508,106510,106513,106516,106518,106520,106523,106525,106527,106530,106532,106535,106538,106540,106543],{"class":38,"line":46},[36,106502,52576],{"class":98},[36,106504,106505],{"class":51733},"motor",[36,106507,15359],{"class":55},[36,106509,176],{"class":98},[36,106511,106512],{"class":59},"\"hinge_motor\"",[36,106514,106515],{"class":55}," joint",[36,106517,176],{"class":98},[36,106519,106450],{"class":59},[36,106521,106522],{"class":55}," gear",[36,106524,176],{"class":98},[36,106526,4129],{"class":59},[36,106528,106529],{"class":55}," ctrlrange",[36,106531,176],{"class":98},[36,106533,106534],{"class":59},"\"-2 2\"",[36,106536,106537],{"class":55}," ctrllimited",[36,106539,176],{"class":98},[36,106541,106542],{"class":59},"\"true\"",[36,106544,101575],{"class":98},[36,106546,106547,106549,106551],{"class":38,"line":52},[36,106548,52217],{"class":98},[36,106550,106496],{"class":51733},[36,106552,188],{"class":98},[14,106554,106555,106558,106559,28819],{},[33,106556,106557],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[33,106560,106561],{},"[-2, 2]",[588,106563,106565],{"id":106564},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,106567,106568],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[753,106570,106571,106581],{},[756,106572,106573],{},[759,106574,106575,106577,106579],{},[762,106576,26190],{"align":24175},[762,106578,103127],{"align":24175},[762,106580,101166],{"align":24175},[800,106582,106583,106593],{},[759,106584,106585,106587,106590],{},[805,106586,103387],{"align":24175},[805,106588,106589],{"align":24175},"定义能怎么动",[805,106591,106592],{"align":24175},"门轴允许门旋转",[759,106594,106595,106597,106600],{},[805,106596,106496],{"align":24175},[805,106598,106599],{"align":24175},"定义怎么施力或控制",[805,106601,106602],{"align":24175},"人推门、马达带动门",[14,106604,106605,106606,106608],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[33,106607,101507],{}," 主动控制它。",[14,106610,106611],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[588,106613,106615],{"id":106614},"hinge-joint","hinge joint",[26,106617,106619],{"className":53499,"code":106618,"language":53501,"meta":31,"style":31},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[33,106620,106621],{"__ignoreMap":31},[36,106622,106623,106625,106627,106629,106631,106633,106635,106637,106639,106641,106643,106645,106648,106650,106653],{"class":38,"line":39},[36,106624,179],{"class":98},[36,106626,103387],{"class":51733},[36,106628,15359],{"class":55},[36,106630,176],{"class":98},[36,106632,106450],{"class":59},[36,106634,54256],{"class":55},[36,106636,176],{"class":98},[36,106638,106450],{"class":59},[36,106640,106459],{"class":55},[36,106642,176],{"class":98},[36,106644,106464],{"class":59},[36,106646,106647],{"class":55}," damping",[36,106649,176],{"class":98},[36,106651,106652],{"class":59},"\"0.1\"",[36,106654,101575],{"class":98},[14,106656,106657],{},"含义：",[571,106659,106660,106666,106672],{},[574,106661,106662,106665],{},[33,106663,106664],{},"type=\"hinge\"","：只能绕一个轴旋转。",[574,106667,106668,106671],{},[33,106669,106670],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[574,106673,106674,106677],{},[33,106675,106676],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[588,106679,106681],{"id":106680},"motor-actuator","motor actuator",[26,106683,106685],{"className":53499,"code":106684,"language":53501,"meta":31,"style":31},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[33,106686,106687],{"__ignoreMap":31},[36,106688,106689,106691,106693,106695,106697,106699,106701,106703,106705,106707,106709,106711,106713,106715,106717,106719,106721,106723],{"class":38,"line":39},[36,106690,179],{"class":98},[36,106692,106505],{"class":51733},[36,106694,15359],{"class":55},[36,106696,176],{"class":98},[36,106698,106512],{"class":59},[36,106700,106515],{"class":55},[36,106702,176],{"class":98},[36,106704,106450],{"class":59},[36,106706,106522],{"class":55},[36,106708,176],{"class":98},[36,106710,4129],{"class":59},[36,106712,106529],{"class":55},[36,106714,176],{"class":98},[36,106716,106534],{"class":59},[36,106718,106537],{"class":55},[36,106720,176],{"class":98},[36,106722,106542],{"class":59},[36,106724,101575],{"class":98},[14,106726,106657],{},[571,106728,106729,106738,106744,106750],{},[574,106730,106731,106734,106735,106737],{},[33,106732,106733],{},"joint=\"hinge\"","：这个电机作用在名为 ",[33,106736,106271],{}," 的关节上。",[574,106739,106740,106743],{},[33,106741,106742],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[574,106745,106746,106749],{},[33,106747,106748],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[574,106751,106752,106755],{},[33,106753,106754],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,106757,106758],{},"简单理解：",[26,106760,106763],{"className":106761,"code":106762,"language":5638,"meta":31},[5636],"实际施加效果 ≈ data.ctrl[0] * gear\n",[33,106764,106762],{"__ignoreMap":31},[14,106766,106767],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[559,106769,101684],{"id":101683},[26,106771,106773],{"className":30811,"code":106772,"language":30813,"meta":31,"style":31},"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",[33,106774,106775,106782,106786,106792,106802,106806,106810,106818,106823,106828,106832,106836,106841,106846,106850,106855,106860,106865,106870,106874,106878,106882,106887,106892,106897,106901,106905,106909,106913,106925,106937,106945,106949,106959,106969,106979,106983,106996,107009,107013,107030,107044,107079,107083,107087,107098,107113,107128,107140,107144,107148,107160],{"__ignoreMap":31},[36,106776,106777,106779],{"class":38,"line":39},[36,106778,30825],{"class":163},[36,106780,106781],{"class":98}," math\n",[36,106783,106784],{"class":38,"line":46},[36,106785,247],{"emptyLinePlaceholder":246},[36,106787,106788,106790],{"class":38,"line":52},[36,106789,30825],{"class":163},[36,106791,101732],{"class":98},[36,106793,106794,106796,106798,106800],{"class":38,"line":66},[36,106795,30825],{"class":163},[36,106797,31813],{"class":98},[36,106799,31816],{"class":163},[36,106801,31819],{"class":98},[36,106803,106804],{"class":38,"line":72},[36,106805,247],{"emptyLinePlaceholder":246},[36,106807,106808],{"class":38,"line":82},[36,106809,247],{"emptyLinePlaceholder":246},[36,106811,106812,106814,106816],{"class":38,"line":88},[36,106813,101745],{"class":109},[36,106815,14003],{"class":163},[36,106817,101750],{"class":59},[36,106819,106820],{"class":38,"line":113},[36,106821,106822],{"class":59},"\u003Cmujoco model=\"one_link_motor\">\n",[36,106824,106825],{"class":38,"line":119},[36,106826,106827],{"class":59},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[36,106829,106830],{"class":38,"line":131},[36,106831,247],{"emptyLinePlaceholder":246},[36,106833,106834],{"class":38,"line":137},[36,106835,101769],{"class":59},[36,106837,106838],{"class":38,"line":147},[36,106839,106840],{"class":59},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[36,106842,106843],{"class":38,"line":153},[36,106844,106845],{"class":59},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[36,106847,106848],{"class":38,"line":191},[36,106849,247],{"emptyLinePlaceholder":246},[36,106851,106852],{"class":38,"line":197},[36,106853,106854],{"class":59},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[36,106856,106857],{"class":38,"line":217},[36,106858,106859],{"class":59},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[36,106861,106862],{"class":38,"line":223},[36,106863,106864],{"class":59},"        \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",[36,106866,106867],{"class":38,"line":243},[36,106868,106869],{"class":59},"      \u003C\u002Fbody>\n",[36,106871,106872],{"class":38,"line":250},[36,106873,101798],{"class":59},[36,106875,106876],{"class":38,"line":256},[36,106877,101803],{"class":59},[36,106879,106880],{"class":38,"line":273},[36,106881,247],{"emptyLinePlaceholder":246},[36,106883,106884],{"class":38,"line":278},[36,106885,106886],{"class":59},"  \u003Cactuator>\n",[36,106888,106889],{"class":38,"line":284},[36,106890,106891],{"class":59},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[36,106893,106894],{"class":38,"line":315},[36,106895,106896],{"class":59},"  \u003C\u002Factuator>\n",[36,106898,106899],{"class":38,"line":320},[36,106900,101808],{"class":59},[36,106902,106903],{"class":38,"line":326},[36,106904,96130],{"class":59},[36,106906,106907],{"class":38,"line":343},[36,106908,247],{"emptyLinePlaceholder":246},[36,106910,106911],{"class":38,"line":348},[36,106912,247],{"emptyLinePlaceholder":246},[36,106914,106915,106917,106919,106921,106923],{"class":38,"line":354},[36,106916,32380],{"class":163},[36,106918,2432],{"class":55},[36,106920,101829],{"class":98},[36,106922,96118],{"class":109},[36,106924,4190],{"class":98},[36,106926,106927,106929,106931,106933,106935],{"class":38,"line":370},[36,106928,101838],{"class":98},[36,106930,176],{"class":163},[36,106932,101843],{"class":98},[36,106934,101745],{"class":109},[36,106936,627],{"class":98},[36,106938,106939,106941,106943],{"class":38,"line":375},[36,106940,101852],{"class":98},[36,106942,176],{"class":163},[36,106944,101857],{"class":98},[36,106946,106947],{"class":38,"line":381},[36,106948,247],{"emptyLinePlaceholder":246},[36,106950,106951,106953,106955,106957],{"class":38,"line":399},[36,106952,31732],{"class":109},[36,106954,621],{"class":98},[36,106956,101870],{"class":59},[36,106958,101873],{"class":98},[36,106960,106961,106963,106965,106967],{"class":38,"line":404},[36,106962,31732],{"class":109},[36,106964,621],{"class":98},[36,106966,101882],{"class":59},[36,106968,101885],{"class":98},[36,106970,106971,106973,106975,106977],{"class":38,"line":410},[36,106972,31732],{"class":109},[36,106974,621],{"class":98},[36,106976,101894],{"class":59},[36,106978,101897],{"class":98},[36,106980,106981],{"class":38,"line":423},[36,106982,247],{"emptyLinePlaceholder":246},[36,106984,106985,106987,106990,106992,106994],{"class":38,"line":436},[36,106986,3552],{"class":163},[36,106988,106989],{"class":98}," model.nu ",[36,106991,21387],{"class":163},[36,106993,25555],{"class":109},[36,106995,4190],{"class":98},[36,106997,106998,107000,107002,107004,107007],{"class":38,"line":441},[36,106999,103863],{"class":163},[36,107001,103866],{"class":109},[36,107003,621],{"class":98},[36,107005,107006],{"class":59},"\"expected exactly one actuator\"",[36,107008,627],{"class":98},[36,107010,107011],{"class":38,"line":447},[36,107012,247],{"emptyLinePlaceholder":246},[36,107014,107015,107017,107019,107021,107023,107025,107028],{"class":38,"line":465},[36,107016,3652],{"class":163},[36,107018,32049],{"class":98},[36,107020,26480],{"class":163},[36,107022,32876],{"class":109},[36,107024,621],{"class":98},[36,107026,107027],{"class":109},"2000",[36,107029,31219],{"class":98},[36,107031,107032,107035,107037,107039,107041],{"class":38,"line":470},[36,107033,107034],{"class":98},"        t ",[36,107036,176],{"class":163},[36,107038,32049],{"class":98},[36,107040,1069],{"class":163},[36,107042,107043],{"class":98}," model.opt.timestep\n",[36,107045,107046,107049,107051,107053,107055,107058,107060,107063,107065,107067,107070,107072,107074,107076],{"class":38,"line":476},[36,107047,107048],{"class":98},"        data.ctrl[",[36,107050,807],{"class":109},[36,107052,4894],{"class":98},[36,107054,176],{"class":163},[36,107056,107057],{"class":109}," 1.5",[36,107059,6969],{"class":163},[36,107061,107062],{"class":98}," math.sin(",[36,107064,105691],{"class":109},[36,107066,6969],{"class":163},[36,107068,107069],{"class":98}," math.pi ",[36,107071,1069],{"class":163},[36,107073,62299],{"class":109},[36,107075,6969],{"class":163},[36,107077,107078],{"class":98}," t)\n",[36,107080,107081],{"class":38,"line":496},[36,107082,101947],{"class":98},[36,107084,107085],{"class":38,"line":501},[36,107086,247],{"emptyLinePlaceholder":246},[36,107088,107089,107091,107093,107096],{"class":38,"line":507},[36,107090,31732],{"class":109},[36,107092,621],{"class":98},[36,107094,107095],{"class":59},"\"time:\"",[36,107097,101909],{"class":98},[36,107099,107100,107102,107104,107107,107109,107111],{"class":38,"line":517},[36,107101,31732],{"class":109},[36,107103,621],{"class":98},[36,107105,107106],{"class":59},"\"joint qpos:\"",[36,107108,105361],{"class":98},[36,107110,908],{"class":109},[36,107112,30930],{"class":98},[36,107114,107115,107117,107119,107122,107124,107126],{"class":38,"line":522},[36,107116,31732],{"class":109},[36,107118,621],{"class":98},[36,107120,107121],{"class":59},"\"joint qvel:\"",[36,107123,105377],{"class":98},[36,107125,908],{"class":109},[36,107127,30930],{"class":98},[36,107129,107130,107132,107134,107137],{"class":38,"line":528},[36,107131,31732],{"class":109},[36,107133,621],{"class":98},[36,107135,107136],{"class":59},"\"last ctrl:\"",[36,107138,107139],{"class":98},", data.ctrl.copy())\n",[36,107141,107142],{"class":38,"line":10203},[36,107143,247],{"emptyLinePlaceholder":246},[36,107145,107146],{"class":38,"line":10227},[36,107147,247],{"emptyLinePlaceholder":246},[36,107149,107150,107152,107154,107156,107158],{"class":38,"line":10232},[36,107151,2010],{"class":163},[36,107153,31653],{"class":109},[36,107155,101990],{"class":163},[36,107157,101993],{"class":59},[36,107159,4190],{"class":98},[36,107161,107162],{"class":38,"line":10237},[36,107163,102000],{"class":98},[14,107165,104001],{},[26,107167,107169],{"className":24261,"code":107168,"language":24263,"meta":31,"style":31},"touch ch4_joint_motor.py\n",[33,107170,107171],{"__ignoreMap":31},[36,107172,107173,107175],{"class":38,"line":39},[36,107174,101714],{"class":55},[36,107176,107177],{"class":59}," ch4_joint_motor.py\n",[14,107179,102732],{},[26,107181,107183],{"className":24261,"code":107182,"language":24263,"meta":31,"style":31},"python ch4_joint_motor.py\n",[33,107184,107185],{"__ignoreMap":31},[36,107186,107187,107189],{"class":38,"line":39},[36,107188,30813],{"class":55},[36,107190,107177],{"class":59},[588,107192,102003],{"id":102003},[14,107194,107195],{},"检查 actuator 数量：",[26,107197,107199],{"className":30811,"code":107198,"language":30813,"meta":31,"style":31},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[33,107200,107201,107213],{"__ignoreMap":31},[36,107202,107203,107205,107207,107209,107211],{"class":38,"line":39},[36,107204,2010],{"class":163},[36,107206,106989],{"class":98},[36,107208,21387],{"class":163},[36,107210,25555],{"class":109},[36,107212,4190],{"class":98},[36,107214,107215,107217,107219,107221,107223],{"class":38,"line":46},[36,107216,104326],{"class":163},[36,107218,103866],{"class":109},[36,107220,621],{"class":98},[36,107222,107006],{"class":59},[36,107224,627],{"class":98},[14,107226,107227,107229,107230,107232],{},[33,107228,102589],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[33,107231,101507],{}," 长度应该是 1。",[14,107234,107235],{},"产生正弦控制信号：",[26,107237,107239],{"className":30811,"code":107238,"language":30813,"meta":31,"style":31},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[33,107240,107241],{"__ignoreMap":31},[36,107242,107243,107245,107247,107249,107251,107253,107255,107257,107259,107261,107263,107265,107267,107269],{"class":38,"line":39},[36,107244,106302],{"class":98},[36,107246,807],{"class":109},[36,107248,4894],{"class":98},[36,107250,176],{"class":163},[36,107252,107057],{"class":109},[36,107254,6969],{"class":163},[36,107256,107062],{"class":98},[36,107258,105691],{"class":109},[36,107260,6969],{"class":163},[36,107262,107069],{"class":98},[36,107264,1069],{"class":163},[36,107266,62299],{"class":109},[36,107268,6969],{"class":163},[36,107270,107078],{"class":98},[14,107272,107273],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,107275,102104],{},[26,107277,107278],{"className":30811,"code":104936,"language":30813,"meta":31,"style":31},[33,107279,107280],{"__ignoreMap":31},[36,107281,107282],{"class":38,"line":39},[36,107283,104936],{"class":98},[14,107285,107286],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[588,107288,102139],{"id":102139},[26,107290,107292],{"className":30811,"code":107291,"language":30813,"meta":31,"style":31},"import math\n",[33,107293,107294],{"__ignoreMap":31},[36,107295,107296,107298],{"class":38,"line":39},[36,107297,30825],{"class":163},[36,107299,106781],{"class":98},[14,107301,107302,107303,101449,107306,107309],{},"导入 Python 标准库里的数学模块。后面要用 ",[33,107304,107305],{},"math.sin",[33,107307,107308],{},"math.pi"," 生成周期变化的控制信号。",[26,107311,107312],{"className":30811,"code":104117,"language":30813,"meta":31,"style":31},[33,107313,107314,107320],{"__ignoreMap":31},[36,107315,107316,107318],{"class":38,"line":39},[36,107317,30825],{"class":163},[36,107319,101732],{"class":98},[36,107321,107322,107324,107326,107328],{"class":38,"line":46},[36,107323,30825],{"class":163},[36,107325,31813],{"class":98},[36,107327,31816],{"class":163},[36,107329,31819],{"class":98},[14,107331,107332],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[26,107334,107335],{"className":53499,"code":106618,"language":53501,"meta":31,"style":31},[33,107336,107337],{"__ignoreMap":31},[36,107338,107339,107341,107343,107345,107347,107349,107351,107353,107355,107357,107359,107361,107363,107365,107367],{"class":38,"line":39},[36,107340,179],{"class":98},[36,107342,103387],{"class":51733},[36,107344,15359],{"class":55},[36,107346,176],{"class":98},[36,107348,106450],{"class":59},[36,107350,54256],{"class":55},[36,107352,176],{"class":98},[36,107354,106450],{"class":59},[36,107356,106459],{"class":55},[36,107358,176],{"class":98},[36,107360,106464],{"class":59},[36,107362,106647],{"class":55},[36,107364,176],{"class":98},[36,107366,106652],{"class":59},[36,107368,101575],{"class":98},[14,107370,107371,107372,107374,107375,107377,107378,107380],{},"这行定义关节。",[33,107373,106271],{}," 表示旋转关节。",[33,107376,106670],{}," 表示绕 y 轴旋转。",[33,107379,106676],{}," 表示有一点阻尼，运动不会完全无损耗。",[26,107382,107384],{"className":53499,"code":107383,"language":53501,"meta":31,"style":31},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[33,107385,107386],{"__ignoreMap":31},[36,107387,107388,107390,107392,107394,107396,107399,107401,107403,107406,107409,107411,107414,107416,107418,107420,107422,107424,107427],{"class":38,"line":39},[36,107389,179],{"class":98},[36,107391,101551],{"class":51733},[36,107393,15359],{"class":55},[36,107395,176],{"class":98},[36,107397,107398],{"class":59},"\"link_geom\"",[36,107400,54256],{"class":55},[36,107402,176],{"class":98},[36,107404,107405],{"class":59},"\"capsule\"",[36,107407,107408],{"class":55}," fromto",[36,107410,176],{"class":98},[36,107412,107413],{"class":59},"\"0 0 0 0 0 0.5\"",[36,107415,101567],{"class":55},[36,107417,176],{"class":98},[36,107419,104209],{"class":59},[36,107421,102432],{"class":55},[36,107423,176],{"class":98},[36,107425,107426],{"class":59},"\"0.5\"",[36,107428,101575],{"class":98},[14,107430,107431,107432,107434,107435,107437,107438,107441,107442,28819,107445,107447],{},"这行定义摆杆的形状。",[33,107433,103596],{}," 是胶囊体，适合表示杆子。",[33,107436,103607],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[33,107439,107440],{},"(0,0,0)"," 延伸到 ",[33,107443,107444],{},"(0,0,0.5)",[33,107446,103601],{}," 是半径。",[26,107449,107450],{"className":53499,"code":106684,"language":53501,"meta":31,"style":31},[33,107451,107452],{"__ignoreMap":31},[36,107453,107454,107456,107458,107460,107462,107464,107466,107468,107470,107472,107474,107476,107478,107480,107482,107484,107486,107488],{"class":38,"line":39},[36,107455,179],{"class":98},[36,107457,106505],{"class":51733},[36,107459,15359],{"class":55},[36,107461,176],{"class":98},[36,107463,106512],{"class":59},[36,107465,106515],{"class":55},[36,107467,176],{"class":98},[36,107469,106450],{"class":59},[36,107471,106522],{"class":55},[36,107473,176],{"class":98},[36,107475,4129],{"class":59},[36,107477,106529],{"class":55},[36,107479,176],{"class":98},[36,107481,106534],{"class":59},[36,107483,106537],{"class":55},[36,107485,176],{"class":98},[36,107487,106542],{"class":59},[36,107489,101575],{"class":98},[14,107491,107492,107493,107495,107496,107499,107500,107502],{},"这行定义电机。它作用在 ",[33,107494,106271],{}," 关节上。",[33,107497,107498],{},"gear"," 可以理解成放大倍数。",[33,107501,106286],{}," 限制控制输入范围。",[26,107504,107505],{"className":30811,"code":107198,"language":30813,"meta":31,"style":31},[33,107506,107507,107519],{"__ignoreMap":31},[36,107508,107509,107511,107513,107515,107517],{"class":38,"line":39},[36,107510,2010],{"class":163},[36,107512,106989],{"class":98},[36,107514,21387],{"class":163},[36,107516,25555],{"class":109},[36,107518,4190],{"class":98},[36,107520,107521,107523,107525,107527,107529],{"class":38,"line":46},[36,107522,104326],{"class":163},[36,107524,103866],{"class":109},[36,107526,621],{"class":98},[36,107528,107006],{"class":59},[36,107530,627],{"class":98},[14,107532,107533,107535],{},[33,107534,102589],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[26,107537,107539],{"className":30811,"code":107538,"language":30813,"meta":31,"style":31},"for step in range(2000):\n",[33,107540,107541],{"__ignoreMap":31},[36,107542,107543,107545,107547,107549,107551,107553,107555],{"class":38,"line":39},[36,107544,3476],{"class":163},[36,107546,32049],{"class":98},[36,107548,26480],{"class":163},[36,107550,32876],{"class":109},[36,107552,621],{"class":98},[36,107554,107027],{"class":109},[36,107556,31219],{"class":98},[14,107558,107559,107560,107562,107563,107566],{},"循环 2000 步。这里没有用 ",[33,107561,1603],{},"，而是用 ",[33,107564,107565],{},"step","，因为后面要用当前步数计算时间。",[26,107568,107570],{"className":30811,"code":107569,"language":30813,"meta":31,"style":31},"t = step * model.opt.timestep\n",[33,107571,107572],{"__ignoreMap":31},[36,107573,107574,107577,107579,107581,107583],{"class":38,"line":39},[36,107575,107576],{"class":98},"t ",[36,107578,176],{"class":163},[36,107580,32049],{"class":98},[36,107582,1069],{"class":163},[36,107584,107043],{"class":98},[14,107586,107587],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[26,107589,107590],{"className":30811,"code":107238,"language":30813,"meta":31,"style":31},[33,107591,107592],{"__ignoreMap":31},[36,107593,107594,107596,107598,107600,107602,107604,107606,107608,107610,107612,107614,107616,107618,107620],{"class":38,"line":39},[36,107595,106302],{"class":98},[36,107597,807],{"class":109},[36,107599,4894],{"class":98},[36,107601,176],{"class":163},[36,107603,107057],{"class":109},[36,107605,6969],{"class":163},[36,107607,107062],{"class":98},[36,107609,105691],{"class":109},[36,107611,6969],{"class":163},[36,107613,107069],{"class":98},[36,107615,1069],{"class":163},[36,107617,62299],{"class":109},[36,107619,6969],{"class":163},[36,107621,107078],{"class":98},[14,107623,107624],{},"这行给电机输入一个正弦波。拆开看：",[571,107626,107627,107633,107639],{},[574,107628,107629,107632],{},[33,107630,107631],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[574,107634,107635,107638],{},[33,107636,107637],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[574,107640,107641,107644],{},[33,107642,107643],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,107646,107647],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[26,107649,107651],{"className":30811,"code":107650,"language":30813,"meta":31,"style":31},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[33,107652,107653],{"__ignoreMap":31},[36,107654,107655,107657,107659,107661,107663,107665],{"class":38,"line":39},[36,107656,30848],{"class":109},[36,107658,621],{"class":98},[36,107660,107106],{"class":59},[36,107662,105361],{"class":98},[36,107664,908],{"class":109},[36,107666,30930],{"class":98},[14,107668,107669,107670,107672],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[33,107671,101501],{}," 只有一个数。",[559,107674,102747],{"id":102746},[14,107676,107677],{},"输出类似:",[26,107679,107682],{"className":107680,"code":107681,"language":5638,"meta":31},[5636],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[33,107683,107681],{"__ignoreMap":31},[14,107685,107686,107687,107689],{},"这里 ",[33,107688,106557],{}," 是电机输入。",[14,107691,107692,107695,107696,107699],{},[33,107693,107694],{},"joint qpos"," 是关节角度，单位通常是弧度。",[33,107697,107698],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,107701,107702],{},"角度单位提示：",[26,107704,107707],{"className":107705,"code":107706,"language":5638,"meta":31},[5636],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[33,107708,107706],{"__ignoreMap":31},[14,107710,107711,107712,107714,107715,107717],{},"如果你看到 ",[33,107713,104461],{}," 是 ",[33,107716,35762],{},"，大约就是 28.6 度。",[559,107719,102779],{"id":102778},[571,107721,107722,107729,107732,107739,107742,107750,107758],{},[574,107723,102842,107724,102845,107726,28819],{},[33,107725,106742],{},[33,107727,107728],{},"gear=\"5\"",[574,107730,107731],{},"重新运行，观察关节运动是否更剧烈。",[574,107733,102842,107734,102845,107736,28819],{},[33,107735,106286],{},[33,107737,107738],{},"-0.2 0.2",[574,107740,107741],{},"重新运行，观察控制能力是否变弱。",[574,107743,107744,107745,107747,107748,28819],{},"去掉 actuator，确认 ",[33,107746,102589],{}," 变成 ",[33,107749,807],{},[574,107751,102842,107752,102845,107754,107757],{},[33,107753,106676],{},[33,107755,107756],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[574,107759,102842,107760,102845,107762,107765],{},[33,107761,106670],{},[33,107763,107764],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[559,107767,102884],{"id":102883},[588,107769,107771],{"id":107770},"indexerror-index-0-is-out-of-bounds",[33,107772,107773],{},"IndexError: index 0 is out of bounds",[14,107775,107776,107777,107779],{},"原因是 ",[33,107778,106423],{},"，没有 actuator。",[588,107781,107782],{"id":107782},"关节几乎不动",[14,107784,107785],{},"可能原因:",[571,107787,107788,107793,107797,107803],{},[574,107789,107790,107792],{},[33,107791,107498],{}," 太小",[574,107794,107795,107792],{},[33,107796,106286],{},[574,107798,107799,107802],{},[33,107800,107801],{},"damping"," 太大",[574,107804,107805],{},"重力方向导致运动不明显",[588,107807,107808],{"id":107808},"模型编译失败",[14,107810,107811,107812,107814],{},"检查 actuator 引用的 ",[33,107813,106733],{}," 是否存在，joint 名称是否拼写一致。",[588,107816,107818,107820],{"id":107817},"datactrl0-写了但没有效果",[33,107819,106557],{}," 写了但没有效果",[14,107822,103006],{},[571,107824,107825,107830,107833,107838,107843],{},[574,107826,107827,107829],{},[33,107828,102589],{}," 是否大于 0。",[574,107831,107832],{},"motor 是否引用了正确 joint。",[574,107834,107835,107837],{},[33,107836,107498],{}," 是否太小。",[574,107839,107840,107842],{},[33,107841,106286],{}," 是否把输入限制得太小。",[574,107844,107845],{},"body 是否真的有可动 joint。",[588,107847,107848],{"id":107848},"控制输入超过范围会怎样",[14,107850,107851],{},"如果设置了：",[26,107853,107855],{"className":53499,"code":107854,"language":53501,"meta":31,"style":31},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[33,107856,107857],{"__ignoreMap":31},[36,107858,107859],{"class":38,"line":39},[36,107860,107854],{"class":98},[14,107862,107863],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[26,107865,107867],{"className":30811,"code":107866,"language":30813,"meta":31,"style":31},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[33,107868,107869,107889],{"__ignoreMap":31},[36,107870,107871,107874,107876,107879,107881,107883,107885,107887],{"class":38,"line":39},[36,107872,107873],{"class":98},"action ",[36,107875,176],{"class":163},[36,107877,107878],{"class":98}," np.clip(action, ",[36,107880,1146],{"class":163},[36,107882,105691],{"class":109},[36,107884,12874],{"class":98},[36,107886,105691],{"class":109},[36,107888,627],{"class":98},[36,107890,107891,107893,107895,107897,107899],{"class":38,"line":46},[36,107892,106302],{"class":98},[36,107894,807],{"class":109},[36,107896,4894],{"class":98},[36,107898,176],{"class":163},[36,107900,107901],{"class":98}," action\n",[559,107903,103038],{"id":103037},[14,107905,107906],{},"这一章建立了控制任务的基本形式：",[26,107908,107911],{"className":107909,"code":107910,"language":5638,"meta":31},[5636],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[33,107912,107910],{"__ignoreMap":31},[14,107914,107915],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[537,107917,107918],{},"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":31,"searchDepth":46,"depth":46,"links":107920},[107921,107922,107923,107928,107932,107933,107934,107942],{"id":101078,"depth":46,"text":101079},{"id":101201,"depth":46,"text":101202},{"id":101475,"depth":46,"text":101476,"children":107924},[107925,107926,107927],{"id":106564,"depth":52,"text":106565},{"id":106614,"depth":52,"text":106615},{"id":106680,"depth":52,"text":106681},{"id":101683,"depth":46,"text":101684,"children":107929},[107930,107931],{"id":102003,"depth":52,"text":102003},{"id":102139,"depth":52,"text":102139},{"id":102746,"depth":46,"text":102747},{"id":102778,"depth":46,"text":102779},{"id":102883,"depth":46,"text":102884,"children":107935},[107936,107937,107938,107939,107941],{"id":107770,"depth":52,"text":107773},{"id":107782,"depth":52,"text":107782},{"id":107808,"depth":52,"text":107808},{"id":107817,"depth":52,"text":107940},"data.ctrl[0] 写了但没有效果",{"id":107848,"depth":52,"text":107848},{"id":103037,"depth":46,"text":103038},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106252,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107949,"title":107950,"body":107951,"description":31,"extension":543,"meta":109860,"navigation":246,"path":109861,"seo":109862,"stem":109863,"__hash__":109864},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107952,"toc":109836},[107953,107956,107958,107961,107969,107972,107989,107992,108017,108020,108066,108068,108070,108125,108127,108146,108148,108191,108194,108211,108214,108230,108240,108247,108249,108252,108255,108289,108292,108340,108344,108347,108361,108370,108374,108377,108402,108405,108409,108422,108425,108431,108434,108449,108451,108454,108714,108716,108728,108731,109043,109045,109057,109059,109062,109077,109082,109085,109107,109110,109113,109147,109150,109154,109165,109168,109185,109188,109202,109209,109229,109236,109250,109253,109265,109280,109300,109303,109325,109328,109332,109347,109358,109373,109376,109406,109422,109451,109459,109483,109486,109504,109514,109526,109533,109542,109548,109557,109560,109562,109571,109574,109589,109591,109594,109605,109608,109619,109622,109640,109642,109659,109662,109690,109692,109696,109699,109729,109735,109738,109742,109750,109753,109755,109776,109779,109782,109798,109801,109817,109819,109822,109833],[10,107954,107950],{"id":107955},"_5viewer-可视化与-renderer-离屏渲染",[559,107957,101079],{"id":101078},[14,107959,107960],{},"本章掌握两类可视化方式:",[571,107962,107963,107966],{},[574,107964,107965],{},"交互式 viewer: 适合人工观察仿真",[574,107967,107968],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,107970,107971],{},"使用官方接口:",[26,107973,107975],{"className":30811,"code":107974,"language":30813,"meta":31,"style":31},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[33,107976,107977,107984],{"__ignoreMap":31},[36,107978,107979,107981],{"class":38,"line":39},[36,107980,30825],{"class":163},[36,107982,107983],{"class":98}," mujoco.viewer\n",[36,107985,107986],{"class":38,"line":46},[36,107987,107988],{"class":98},"mujoco.viewer.launch_passive(model, data)\n",[14,107990,107991],{},"以及:",[26,107993,107995],{"className":30811,"code":107994,"language":30813,"meta":31,"style":31},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[33,107996,107997,108007],{"__ignoreMap":31},[36,107998,107999,108002,108004],{"class":38,"line":39},[36,108000,108001],{"class":98},"renderer ",[36,108003,176],{"class":163},[36,108005,108006],{"class":98}," mujoco.Renderer(model)\n",[36,108008,108009,108012,108014],{"class":38,"line":46},[36,108010,108011],{"class":98},"image ",[36,108013,176],{"class":163},[36,108015,108016],{"class":98}," renderer.render()\n",[14,108018,108019],{},"新手建议先理解二者区别：",[753,108021,108022,108038],{},[756,108023,108024],{},[759,108025,108026,108029,108032,108035],{},[762,108027,108028],{"align":24175},"工具",[762,108030,108031],{"align":24175},"用途",[762,108033,108034],{"align":24175},"是否打开窗口",[762,108036,108037],{"align":24175},"常见场景",[800,108039,108040,108053],{},[759,108041,108042,108045,108048,108050],{},[805,108043,108044],{"align":24175},"Viewer",[805,108046,108047],{"align":24175},"人眼实时观察仿真",[805,108049,105096],{"align":24175},[805,108051,108052],{"align":24175},"调试模型、看控制效果",[759,108054,108055,108058,108061,108063],{},[805,108056,108057],{"align":24175},"Renderer",[805,108059,108060],{"align":24175},"生成图像数组",[805,108062,105109],{"align":24175},[805,108064,108065],{"align":24175},"保存图片、训练视觉策略、服务器批量采集",[559,108067,101202],{"id":101201},[14,108069,101205],{},[26,108071,108073],{"className":24261,"code":108072,"language":24263,"meta":31,"style":31},"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",[33,108074,108075,108087,108097,108105,108113],{"__ignoreMap":31},[36,108076,108077,108079,108081,108083,108085],{"class":38,"line":39},[36,108078,56],{"class":55},[36,108080,26749],{"class":59},[36,108082,160],{"class":59},[36,108084,26834],{"class":109},[36,108086,25115],{"class":109},[36,108088,108089,108091,108093,108095],{"class":38,"line":46},[36,108090,101240],{"class":59},[36,108092,101243],{"class":59},[36,108094,101246],{"class":59},[36,108096,25115],{"class":109},[36,108098,108099,108101,108103],{"class":38,"line":52},[36,108100,101253],{"class":59},[36,108102,101256],{"class":59},[36,108104,25115],{"class":109},[36,108106,108107,108109,108111],{"class":38,"line":66},[36,108108,101263],{"class":59},[36,108110,101266],{"class":59},[36,108112,25115],{"class":109},[36,108114,108115,108117,108119,108121,108123],{"class":38,"line":72},[36,108116,101273],{"class":59},[36,108118,101276],{"class":59},[36,108120,101279],{"class":59},[36,108122,101282],{"class":59},[36,108124,102947],{"class":59},[14,108126,103250],{},[26,108128,108130],{"className":24261,"code":108129,"language":24263,"meta":31,"style":31},"pip install \"mujoco>=2.3\" numpy pillow\n",[33,108131,108132],{"__ignoreMap":31},[36,108133,108134,108136,108138,108140,108143],{"class":38,"line":39},[36,108135,24270],{"class":55},[36,108137,160],{"class":59},[36,108139,101362],{"class":59},[36,108141,108142],{"class":59}," numpy",[36,108144,108145],{"class":59}," pillow\n",[14,108147,103267],{},[26,108149,108151],{"className":24261,"code":108150,"language":24263,"meta":31,"style":31},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[33,108152,108153,108170,108179],{"__ignoreMap":31},[36,108154,108155,108157,108159,108161,108164,108166,108168],{"class":38,"line":39},[36,108156,30763],{"class":55},[36,108158,29609],{"class":59},[36,108160,25552],{"class":109},[36,108162,108163],{"class":59}," mujoco-render",[36,108165,101407],{"class":59},[36,108167,101410],{"class":109},[36,108169,110],{"class":109},[36,108171,108172,108174,108176],{"class":38,"line":46},[36,108173,30763],{"class":55},[36,108175,101419],{"class":59},[36,108177,108178],{"class":59}," mujoco-render\n",[36,108180,108181,108183,108185,108187,108189],{"class":38,"line":52},[36,108182,24270],{"class":55},[36,108184,160],{"class":59},[36,108186,101362],{"class":59},[36,108188,108142],{"class":59},[36,108190,108145],{"class":59},[14,108192,108193],{},"离屏渲染后端:",[26,108195,108197],{"className":24261,"code":108196,"language":24263,"meta":31,"style":31},"export MUJOCO_GL=egl\n",[33,108198,108199],{"__ignoreMap":31},[36,108200,108201,108203,108206,108208],{"class":38,"line":39},[36,108202,25479],{"class":163},[36,108204,108205],{"class":98}," MUJOCO_GL",[36,108207,176],{"class":163},[36,108209,108210],{"class":98},"egl\n",[14,108212,108213],{},"或:",[26,108215,108217],{"className":24261,"code":108216,"language":24263,"meta":31,"style":31},"export MUJOCO_GL=osmesa\n",[33,108218,108219],{"__ignoreMap":31},[36,108220,108221,108223,108225,108227],{"class":38,"line":39},[36,108222,25479],{"class":163},[36,108224,108205],{"class":98},[36,108226,176],{"class":163},[36,108228,108229],{"class":98},"osmesa\n",[14,108231,108232,108233,108236,108237,28819],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[33,108234,108235],{},"egl"," 失败，再尝试 ",[33,108238,108239],{},"osmesa",[14,108241,108242,108243,108246],{},"如果你在本机桌面环境运行，通常先不要设置 ",[33,108244,108245],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[559,108248,101476],{"id":101475},[14,108250,108251],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,108253,108254],{},"典型 viewer 流程:",[26,108256,108258],{"className":30811,"code":108257,"language":30813,"meta":31,"style":31},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[33,108259,108260,108273,108280,108284],{"__ignoreMap":31},[36,108261,108262,108265,108268,108270],{"class":38,"line":39},[36,108263,108264],{"class":163},"with",[36,108266,108267],{"class":98}," mujoco.viewer.launch_passive(model, data) ",[36,108269,31816],{"class":163},[36,108271,108272],{"class":98}," viewer:\n",[36,108274,108275,108277],{"class":38,"line":46},[36,108276,2710],{"class":163},[36,108278,108279],{"class":98}," viewer.is_running():\n",[36,108281,108282],{"class":38,"line":52},[36,108283,101947],{"class":98},[36,108285,108286],{"class":38,"line":66},[36,108287,108288],{"class":98},"        viewer.sync()\n",[14,108290,108291],{},"典型 renderer 流程:",[26,108293,108295],{"className":30811,"code":108294,"language":30813,"meta":31,"style":31},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[33,108296,108297,108323,108327,108332],{"__ignoreMap":31},[36,108298,108299,108301,108303,108306,108308,108310,108312,108314,108316,108318,108321],{"class":38,"line":39},[36,108300,108001],{"class":98},[36,108302,176],{"class":163},[36,108304,108305],{"class":98}," mujoco.Renderer(model, ",[36,108307,25418],{"class":5667},[36,108309,176],{"class":163},[36,108311,42775],{"class":109},[36,108313,12874],{"class":98},[36,108315,25414],{"class":5667},[36,108317,176],{"class":163},[36,108319,108320],{"class":109},"640",[36,108322,627],{"class":98},[36,108324,108325],{"class":38,"line":46},[36,108326,104936],{"class":98},[36,108328,108329],{"class":38,"line":52},[36,108330,108331],{"class":98},"renderer.update_scene(data)\n",[36,108333,108334,108336,108338],{"class":38,"line":66},[36,108335,108011],{"class":98},[36,108337,176],{"class":163},[36,108339,108016],{"class":98},[588,108341,108343],{"id":108342},"viewer-的同步逻辑","viewer 的同步逻辑",[14,108345,108346],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[26,108348,108350],{"className":30811,"code":108349,"language":30813,"meta":31,"style":31},"mujoco.mj_step(model, data)\nviewer.sync()\n",[33,108351,108352,108356],{"__ignoreMap":31},[36,108353,108354],{"class":38,"line":39},[36,108355,104936],{"class":98},[36,108357,108358],{"class":38,"line":46},[36,108359,108360],{"class":98},"viewer.sync()\n",[14,108362,108363,108365,108366,108369],{},[33,108364,101646],{}," 负责算物理，",[33,108367,108368],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[588,108371,108373],{"id":108372},"为什么要-sleep","为什么要 sleep",[14,108375,108376],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[26,108378,108380],{"className":30811,"code":108379,"language":30813,"meta":31,"style":31},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[33,108381,108382],{"__ignoreMap":31},[36,108383,108384,108387,108389,108392,108394,108397,108399],{"class":38,"line":39},[36,108385,108386],{"class":98},"sleep_time ",[36,108388,176],{"class":163},[36,108390,108391],{"class":98}," model.opt.timestep ",[36,108393,1146],{"class":163},[36,108395,108396],{"class":98}," (time.time() ",[36,108398,1146],{"class":163},[36,108400,108401],{"class":98}," step_start)\n",[14,108403,108404],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[588,108406,108408],{"id":108407},"renderer-输出是什么","renderer 输出是什么",[26,108410,108412],{"className":30811,"code":108411,"language":30813,"meta":31,"style":31},"image = renderer.render()\n",[33,108413,108414],{"__ignoreMap":31},[36,108415,108416,108418,108420],{"class":38,"line":39},[36,108417,108011],{"class":98},[36,108419,176],{"class":163},[36,108421,108016],{"class":98},[14,108423,108424],{},"得到的是 NumPy 数组，形状通常是：",[26,108426,108429],{"className":108427,"code":108428,"language":5638,"meta":31},[5636],"(height, width, 3)\n",[33,108430,108428],{"__ignoreMap":31},[14,108432,108433],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[26,108435,108437],{"className":30811,"code":108436,"language":30813,"meta":31,"style":31},"Image.fromarray(image).save(\"render_output.png\")\n",[33,108438,108439],{"__ignoreMap":31},[36,108440,108441,108444,108447],{"class":38,"line":39},[36,108442,108443],{"class":98},"Image.fromarray(image).save(",[36,108445,108446],{"class":59},"\"render_output.png\"",[36,108448,627],{"class":98},[559,108450,101684],{"id":101683},[14,108452,108453],{},"交互式 Viewer:",[26,108455,108457],{"className":30811,"code":108456,"language":30813,"meta":31,"style":31},"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",[33,108458,108459,108465,108469,108475,108481,108485,108489,108497,108502,108506,108510,108514,108519,108524,108528,108532,108536,108541,108545,108549,108553,108557,108561,108565,108577,108589,108597,108601,108611,108631,108641,108646,108651,108655,108672,108685,108690,108694,108698,108710],{"__ignoreMap":31},[36,108460,108461,108463],{"class":38,"line":39},[36,108462,30825],{"class":163},[36,108464,32262],{"class":98},[36,108466,108467],{"class":38,"line":46},[36,108468,247],{"emptyLinePlaceholder":246},[36,108470,108471,108473],{"class":38,"line":52},[36,108472,30825],{"class":163},[36,108474,101732],{"class":98},[36,108476,108477,108479],{"class":38,"line":66},[36,108478,30825],{"class":163},[36,108480,107983],{"class":98},[36,108482,108483],{"class":38,"line":72},[36,108484,247],{"emptyLinePlaceholder":246},[36,108486,108487],{"class":38,"line":82},[36,108488,247],{"emptyLinePlaceholder":246},[36,108490,108491,108493,108495],{"class":38,"line":88},[36,108492,101745],{"class":109},[36,108494,14003],{"class":163},[36,108496,101750],{"class":59},[36,108498,108499],{"class":38,"line":113},[36,108500,108501],{"class":59},"\u003Cmujoco model=\"viewer_demo\">\n",[36,108503,108504],{"class":38,"line":119},[36,108505,101760],{"class":59},[36,108507,108508],{"class":38,"line":131},[36,108509,247],{"emptyLinePlaceholder":246},[36,108511,108512],{"class":38,"line":137},[36,108513,101769],{"class":59},[36,108515,108516],{"class":38,"line":147},[36,108517,108518],{"class":59},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[36,108520,108521],{"class":38,"line":153},[36,108522,108523],{"class":59},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[36,108525,108526],{"class":38,"line":191},[36,108527,247],{"emptyLinePlaceholder":246},[36,108529,108530],{"class":38,"line":197},[36,108531,101783],{"class":59},[36,108533,108534],{"class":38,"line":217},[36,108535,101788],{"class":59},[36,108537,108538],{"class":38,"line":223},[36,108539,108540],{"class":59},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[36,108542,108543],{"class":38,"line":243},[36,108544,101798],{"class":59},[36,108546,108547],{"class":38,"line":250},[36,108548,101803],{"class":59},[36,108550,108551],{"class":38,"line":256},[36,108552,101808],{"class":59},[36,108554,108555],{"class":38,"line":273},[36,108556,96130],{"class":59},[36,108558,108559],{"class":38,"line":278},[36,108560,247],{"emptyLinePlaceholder":246},[36,108562,108563],{"class":38,"line":284},[36,108564,247],{"emptyLinePlaceholder":246},[36,108566,108567,108569,108571,108573,108575],{"class":38,"line":315},[36,108568,32380],{"class":163},[36,108570,2432],{"class":55},[36,108572,101829],{"class":98},[36,108574,96118],{"class":109},[36,108576,4190],{"class":98},[36,108578,108579,108581,108583,108585,108587],{"class":38,"line":320},[36,108580,101838],{"class":98},[36,108582,176],{"class":163},[36,108584,101843],{"class":98},[36,108586,101745],{"class":109},[36,108588,627],{"class":98},[36,108590,108591,108593,108595],{"class":38,"line":326},[36,108592,101852],{"class":98},[36,108594,176],{"class":163},[36,108596,101857],{"class":98},[36,108598,108599],{"class":38,"line":343},[36,108600,247],{"emptyLinePlaceholder":246},[36,108602,108603,108605,108607,108609],{"class":38,"line":348},[36,108604,34611],{"class":163},[36,108606,108267],{"class":98},[36,108608,31816],{"class":163},[36,108610,108272],{"class":98},[36,108612,108613,108616,108619,108621,108624,108626,108629],{"class":38,"line":354},[36,108614,108615],{"class":163},"        while",[36,108617,108618],{"class":98}," viewer.is_running() ",[36,108620,30895],{"class":163},[36,108622,108623],{"class":98}," data.time ",[36,108625,179],{"class":163},[36,108627,108628],{"class":109}," 5.0",[36,108630,4190],{"class":98},[36,108632,108633,108636,108638],{"class":38,"line":370},[36,108634,108635],{"class":98},"            step_start ",[36,108637,176],{"class":163},[36,108639,108640],{"class":98}," time.time()\n",[36,108642,108643],{"class":38,"line":375},[36,108644,108645],{"class":98},"            mujoco.mj_step(model, data)\n",[36,108647,108648],{"class":38,"line":381},[36,108649,108650],{"class":98},"            viewer.sync()\n",[36,108652,108653],{"class":38,"line":399},[36,108654,247],{"emptyLinePlaceholder":246},[36,108656,108657,108660,108662,108664,108666,108668,108670],{"class":38,"line":404},[36,108658,108659],{"class":98},"            sleep_time ",[36,108661,176],{"class":163},[36,108663,108391],{"class":98},[36,108665,1146],{"class":163},[36,108667,108396],{"class":98},[36,108669,1146],{"class":163},[36,108671,108401],{"class":98},[36,108673,108674,108676,108679,108681,108683],{"class":38,"line":410},[36,108675,5093],{"class":163},[36,108677,108678],{"class":98}," sleep_time ",[36,108680,173],{"class":163},[36,108682,4544],{"class":109},[36,108684,4190],{"class":98},[36,108686,108687],{"class":38,"line":423},[36,108688,108689],{"class":98},"                time.sleep(sleep_time)\n",[36,108691,108692],{"class":38,"line":436},[36,108693,247],{"emptyLinePlaceholder":246},[36,108695,108696],{"class":38,"line":441},[36,108697,247],{"emptyLinePlaceholder":246},[36,108699,108700,108702,108704,108706,108708],{"class":38,"line":447},[36,108701,2010],{"class":163},[36,108703,31653],{"class":109},[36,108705,101990],{"class":163},[36,108707,101993],{"class":59},[36,108709,4190],{"class":98},[36,108711,108712],{"class":38,"line":465},[36,108713,102000],{"class":98},[14,108715,104001],{},[26,108717,108719],{"className":24261,"code":108718,"language":24263,"meta":31,"style":31},"touch ch5_viewer.py\n",[33,108720,108721],{"__ignoreMap":31},[36,108722,108723,108725],{"class":38,"line":39},[36,108724,101714],{"class":55},[36,108726,108727],{"class":59}," ch5_viewer.py\n",[14,108729,108730],{},"离屏 Renderer 保存图片:",[26,108732,108734],{"className":30811,"code":108733,"language":30813,"meta":31,"style":31},"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",[33,108735,108736,108748,108752,108758,108768,108772,108776,108784,108789,108793,108797,108801,108805,108810,108814,108818,108822,108826,108830,108834,108838,108842,108846,108850,108854,108866,108878,108886,108911,108915,108931,108935,108939,108954,108963,108967,108981,108986,108991,108995,109007,109019,109023,109027,109039],{"__ignoreMap":31},[36,108737,108738,108740,108743,108745],{"class":38,"line":39},[36,108739,31170],{"class":163},[36,108741,108742],{"class":98}," pathlib ",[36,108744,30825],{"class":163},[36,108746,108747],{"class":98}," Path\n",[36,108749,108750],{"class":38,"line":46},[36,108751,247],{"emptyLinePlaceholder":246},[36,108753,108754,108756],{"class":38,"line":52},[36,108755,30825],{"class":163},[36,108757,101732],{"class":98},[36,108759,108760,108762,108764,108766],{"class":38,"line":66},[36,108761,31170],{"class":163},[36,108763,47696],{"class":109},[36,108765,47699],{"class":163},[36,108767,47702],{"class":98},[36,108769,108770],{"class":38,"line":72},[36,108771,247],{"emptyLinePlaceholder":246},[36,108773,108774],{"class":38,"line":82},[36,108775,247],{"emptyLinePlaceholder":246},[36,108777,108778,108780,108782],{"class":38,"line":88},[36,108779,101745],{"class":109},[36,108781,14003],{"class":163},[36,108783,101750],{"class":59},[36,108785,108786],{"class":38,"line":113},[36,108787,108788],{"class":59},"\u003Cmujoco model=\"renderer_demo\">\n",[36,108790,108791],{"class":38,"line":119},[36,108792,101760],{"class":59},[36,108794,108795],{"class":38,"line":131},[36,108796,247],{"emptyLinePlaceholder":246},[36,108798,108799],{"class":38,"line":137},[36,108800,101769],{"class":59},[36,108802,108803],{"class":38,"line":147},[36,108804,108518],{"class":59},[36,108806,108807],{"class":38,"line":153},[36,108808,108809],{"class":59},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[36,108811,108812],{"class":38,"line":191},[36,108813,108523],{"class":59},[36,108815,108816],{"class":38,"line":197},[36,108817,247],{"emptyLinePlaceholder":246},[36,108819,108820],{"class":38,"line":217},[36,108821,101783],{"class":59},[36,108823,108824],{"class":38,"line":223},[36,108825,101788],{"class":59},[36,108827,108828],{"class":38,"line":243},[36,108829,108540],{"class":59},[36,108831,108832],{"class":38,"line":250},[36,108833,101798],{"class":59},[36,108835,108836],{"class":38,"line":256},[36,108837,101803],{"class":59},[36,108839,108840],{"class":38,"line":273},[36,108841,101808],{"class":59},[36,108843,108844],{"class":38,"line":278},[36,108845,96130],{"class":59},[36,108847,108848],{"class":38,"line":284},[36,108849,247],{"emptyLinePlaceholder":246},[36,108851,108852],{"class":38,"line":315},[36,108853,247],{"emptyLinePlaceholder":246},[36,108855,108856,108858,108860,108862,108864],{"class":38,"line":320},[36,108857,32380],{"class":163},[36,108859,2432],{"class":55},[36,108861,101829],{"class":98},[36,108863,96118],{"class":109},[36,108865,4190],{"class":98},[36,108867,108868,108870,108872,108874,108876],{"class":38,"line":326},[36,108869,101838],{"class":98},[36,108871,176],{"class":163},[36,108873,101843],{"class":98},[36,108875,101745],{"class":109},[36,108877,627],{"class":98},[36,108879,108880,108882,108884],{"class":38,"line":343},[36,108881,101852],{"class":98},[36,108883,176],{"class":163},[36,108885,101857],{"class":98},[36,108887,108888,108891,108893,108895,108897,108899,108901,108903,108905,108907,108909],{"class":38,"line":348},[36,108889,108890],{"class":98},"    renderer ",[36,108892,176],{"class":163},[36,108894,108305],{"class":98},[36,108896,25418],{"class":5667},[36,108898,176],{"class":163},[36,108900,42775],{"class":109},[36,108902,12874],{"class":98},[36,108904,25414],{"class":5667},[36,108906,176],{"class":163},[36,108908,108320],{"class":109},[36,108910,627],{"class":98},[36,108912,108913],{"class":38,"line":354},[36,108914,247],{"emptyLinePlaceholder":246},[36,108916,108917,108919,108921,108923,108925,108927,108929],{"class":38,"line":370},[36,108918,3652],{"class":163},[36,108920,101932],{"class":98},[36,108922,26480],{"class":163},[36,108924,32876],{"class":109},[36,108926,621],{"class":98},[36,108928,926],{"class":109},[36,108930,31219],{"class":98},[36,108932,108933],{"class":38,"line":375},[36,108934,101947],{"class":98},[36,108936,108937],{"class":38,"line":381},[36,108938,247],{"emptyLinePlaceholder":246},[36,108940,108941,108944,108947,108949,108952],{"class":38,"line":399},[36,108942,108943],{"class":98},"    renderer.update_scene(data, ",[36,108945,108946],{"class":5667},"camera",[36,108948,176],{"class":163},[36,108950,108951],{"class":59},"\"fixed_camera\"",[36,108953,627],{"class":98},[36,108955,108956,108959,108961],{"class":38,"line":404},[36,108957,108958],{"class":98},"    image ",[36,108960,176],{"class":163},[36,108962,108016],{"class":98},[36,108964,108965],{"class":38,"line":410},[36,108966,247],{"emptyLinePlaceholder":246},[36,108968,108969,108972,108974,108977,108979],{"class":38,"line":423},[36,108970,108971],{"class":98},"    output_path ",[36,108973,176],{"class":163},[36,108975,108976],{"class":98}," Path(",[36,108978,108446],{"class":59},[36,108980,627],{"class":98},[36,108982,108983],{"class":38,"line":436},[36,108984,108985],{"class":98},"    Image.fromarray(image).save(output_path)\n",[36,108987,108988],{"class":38,"line":441},[36,108989,108990],{"class":98},"    renderer.close()\n",[36,108992,108993],{"class":38,"line":447},[36,108994,247],{"emptyLinePlaceholder":246},[36,108996,108997,108999,109001,109004],{"class":38,"line":465},[36,108998,31732],{"class":109},[36,109000,621],{"class":98},[36,109002,109003],{"class":59},"\"saved:\"",[36,109005,109006],{"class":98},", output_path.resolve())\n",[36,109008,109009,109011,109013,109016],{"class":38,"line":470},[36,109010,31732],{"class":109},[36,109012,621],{"class":98},[36,109014,109015],{"class":59},"\"image shape:\"",[36,109017,109018],{"class":98},", image.shape)\n",[36,109020,109021],{"class":38,"line":476},[36,109022,247],{"emptyLinePlaceholder":246},[36,109024,109025],{"class":38,"line":496},[36,109026,247],{"emptyLinePlaceholder":246},[36,109028,109029,109031,109033,109035,109037],{"class":38,"line":501},[36,109030,2010],{"class":163},[36,109032,31653],{"class":109},[36,109034,101990],{"class":163},[36,109036,101993],{"class":59},[36,109038,4190],{"class":98},[36,109040,109041],{"class":38,"line":507},[36,109042,102000],{"class":98},[14,109044,104001],{},[26,109046,109048],{"className":24261,"code":109047,"language":24263,"meta":31,"style":31},"touch ch5_renderer.py\n",[33,109049,109050],{"__ignoreMap":31},[36,109051,109052,109054],{"class":38,"line":39},[36,109053,101714],{"class":55},[36,109055,109056],{"class":59}," ch5_renderer.py\n",[588,109058,102003],{"id":102003},[14,109060,109061],{},"viewer 上下文：",[26,109063,109065],{"className":30811,"code":109064,"language":30813,"meta":31,"style":31},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[33,109066,109067],{"__ignoreMap":31},[36,109068,109069,109071,109073,109075],{"class":38,"line":39},[36,109070,108264],{"class":163},[36,109072,108267],{"class":98},[36,109074,31816],{"class":163},[36,109076,108272],{"class":98},[14,109078,109079,109081],{},[33,109080,108264],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,109083,109084],{},"窗口循环：",[26,109086,109088],{"className":30811,"code":109087,"language":30813,"meta":31,"style":31},"while viewer.is_running() and data.time \u003C 5.0:\n",[33,109089,109090],{"__ignoreMap":31},[36,109091,109092,109095,109097,109099,109101,109103,109105],{"class":38,"line":39},[36,109093,109094],{"class":163},"while",[36,109096,108618],{"class":98},[36,109098,30895],{"class":163},[36,109100,108623],{"class":98},[36,109102,179],{"class":163},[36,109104,108628],{"class":109},[36,109106,4190],{"class":98},[14,109108,109109],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,109111,109112],{},"固定相机：",[26,109114,109116],{"className":53499,"code":109115,"language":53501,"meta":31,"style":31},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[33,109117,109118],{"__ignoreMap":31},[36,109119,109120,109122,109124,109126,109128,109130,109132,109134,109137,109140,109142,109145],{"class":38,"line":39},[36,109121,179],{"class":98},[36,109123,108946],{"class":51733},[36,109125,15359],{"class":55},[36,109127,176],{"class":98},[36,109129,108951],{"class":59},[36,109131,101537],{"class":55},[36,109133,176],{"class":98},[36,109135,109136],{"class":59},"\"1.5 -2.0 1.2\"",[36,109138,109139],{"class":55}," xyaxes",[36,109141,176],{"class":98},[36,109143,109144],{"class":59},"\"1 0.75 0 0 0 1\"",[36,109146,101575],{"class":98},[14,109148,109149],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[588,109151,109153],{"id":109152},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[26,109155,109157],{"className":30811,"code":109156,"language":30813,"meta":31,"style":31},"import time\n",[33,109158,109159],{"__ignoreMap":31},[36,109160,109161,109163],{"class":38,"line":39},[36,109162,30825],{"class":163},[36,109164,32262],{"class":98},[14,109166,109167],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[26,109169,109171],{"className":30811,"code":109170,"language":30813,"meta":31,"style":31},"import mujoco\nimport mujoco.viewer\n",[33,109172,109173,109179],{"__ignoreMap":31},[36,109174,109175,109177],{"class":38,"line":39},[36,109176,30825],{"class":163},[36,109178,101732],{"class":98},[36,109180,109181,109183],{"class":38,"line":46},[36,109182,30825],{"class":163},[36,109184,107983],{"class":98},[14,109186,109187],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[26,109189,109190],{"className":30811,"code":109064,"language":30813,"meta":31,"style":31},[33,109191,109192],{"__ignoreMap":31},[36,109193,109194,109196,109198,109200],{"class":38,"line":39},[36,109195,108264],{"class":163},[36,109197,108267],{"class":98},[36,109199,31816],{"class":163},[36,109201,108272],{"class":98},[14,109203,109204,109205,109208],{},"打开一个 viewer 窗口。",[33,109206,109207],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[26,109210,109211],{"className":30811,"code":109087,"language":30813,"meta":31,"style":31},[33,109212,109213],{"__ignoreMap":31},[36,109214,109215,109217,109219,109221,109223,109225,109227],{"class":38,"line":39},[36,109216,109094],{"class":163},[36,109218,108618],{"class":98},[36,109220,30895],{"class":163},[36,109222,108623],{"class":98},[36,109224,179],{"class":163},[36,109226,108628],{"class":109},[36,109228,4190],{"class":98},[14,109230,109231,109232,109235],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[33,109233,109234],{},"viewer.is_running()"," 会变成 false，循环结束。",[26,109237,109239],{"className":30811,"code":109238,"language":30813,"meta":31,"style":31},"step_start = time.time()\n",[33,109240,109241],{"__ignoreMap":31},[36,109242,109243,109246,109248],{"class":38,"line":39},[36,109244,109245],{"class":98},"step_start ",[36,109247,176],{"class":163},[36,109249,108640],{"class":98},[14,109251,109252],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[26,109254,109255],{"className":30811,"code":108349,"language":30813,"meta":31,"style":31},[33,109256,109257,109261],{"__ignoreMap":31},[36,109258,109259],{"class":38,"line":39},[36,109260,104936],{"class":98},[36,109262,109263],{"class":38,"line":46},[36,109264,108360],{"class":98},[14,109266,109267,109269,109270,109272,109273,109275,109276,109279],{},[33,109268,101646],{}," 推进物理仿真。",[33,109271,108368],{}," 把最新的 ",[33,109274,33834],{}," 同步到窗口里显示。没有 ",[33,109277,109278],{},"sync()","，窗口可能看不到最新状态。",[26,109281,109282],{"className":30811,"code":108379,"language":30813,"meta":31,"style":31},[33,109283,109284],{"__ignoreMap":31},[36,109285,109286,109288,109290,109292,109294,109296,109298],{"class":38,"line":39},[36,109287,108386],{"class":98},[36,109289,176],{"class":163},[36,109291,108391],{"class":98},[36,109293,1146],{"class":163},[36,109295,108396],{"class":98},[36,109297,1146],{"class":163},[36,109299,108401],{"class":98},[14,109301,109302],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[26,109304,109306],{"className":30811,"code":109305,"language":30813,"meta":31,"style":31},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[33,109307,109308,109320],{"__ignoreMap":31},[36,109309,109310,109312,109314,109316,109318],{"class":38,"line":39},[36,109311,2010],{"class":163},[36,109313,108678],{"class":98},[36,109315,173],{"class":163},[36,109317,4544],{"class":109},[36,109319,4190],{"class":98},[36,109321,109322],{"class":38,"line":46},[36,109323,109324],{"class":98},"    time.sleep(sleep_time)\n",[14,109326,109327],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[588,109329,109331],{"id":109330},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[26,109333,109335],{"className":30811,"code":109334,"language":30813,"meta":31,"style":31},"from pathlib import Path\n",[33,109336,109337],{"__ignoreMap":31},[36,109338,109339,109341,109343,109345],{"class":38,"line":39},[36,109340,31170],{"class":163},[36,109342,108742],{"class":98},[36,109344,30825],{"class":163},[36,109346,108747],{"class":98},[14,109348,109349,109350,109353,109354,109357],{},"导入 ",[33,109351,109352],{},"Path","，用来处理文件路径。相比直接写字符串，",[33,109355,109356],{},"Path(\"render_output.png\")"," 更清晰。",[26,109359,109361],{"className":30811,"code":109360,"language":30813,"meta":31,"style":31},"from PIL import Image\n",[33,109362,109363],{"__ignoreMap":31},[36,109364,109365,109367,109369,109371],{"class":38,"line":39},[36,109366,31170],{"class":163},[36,109368,47696],{"class":109},[36,109370,47699],{"class":163},[36,109372,47702],{"class":98},[14,109374,109375],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[26,109377,109378],{"className":53499,"code":109115,"language":53501,"meta":31,"style":31},[33,109379,109380],{"__ignoreMap":31},[36,109381,109382,109384,109386,109388,109390,109392,109394,109396,109398,109400,109402,109404],{"class":38,"line":39},[36,109383,179],{"class":98},[36,109385,108946],{"class":51733},[36,109387,15359],{"class":55},[36,109389,176],{"class":98},[36,109391,108951],{"class":59},[36,109393,101537],{"class":55},[36,109395,176],{"class":98},[36,109397,109136],{"class":59},[36,109399,109139],{"class":55},[36,109401,176],{"class":98},[36,109403,109144],{"class":59},[36,109405,101575],{"class":98},[14,109407,109408,109409,109411,109412,109414,109415,109418,109419,109421],{},"定义一个相机。",[33,109410,80242],{}," 是相机名字。",[33,109413,104577],{}," 是相机在世界里的位置。",[33,109416,109417],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[33,109420,104577],{}," 来调视角。",[26,109423,109425],{"className":30811,"code":109424,"language":30813,"meta":31,"style":31},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[33,109426,109427],{"__ignoreMap":31},[36,109428,109429,109431,109433,109435,109437,109439,109441,109443,109445,109447,109449],{"class":38,"line":39},[36,109430,108001],{"class":98},[36,109432,176],{"class":163},[36,109434,108305],{"class":98},[36,109436,25418],{"class":5667},[36,109438,176],{"class":163},[36,109440,42775],{"class":109},[36,109442,12874],{"class":98},[36,109444,25414],{"class":5667},[36,109446,176],{"class":163},[36,109448,108320],{"class":109},[36,109450,627],{"class":98},[14,109452,109453,109454,101449,109456,109458],{},"创建离屏渲染器。",[33,109455,25418],{},[33,109457,25414],{}," 决定输出图片大小。",[26,109460,109461],{"className":30811,"code":102107,"language":30813,"meta":31,"style":31},[33,109462,109463,109479],{"__ignoreMap":31},[36,109464,109465,109467,109469,109471,109473,109475,109477],{"class":38,"line":39},[36,109466,3476],{"class":163},[36,109468,101932],{"class":98},[36,109470,26480],{"class":163},[36,109472,32876],{"class":109},[36,109474,621],{"class":98},[36,109476,926],{"class":109},[36,109478,31219],{"class":98},[36,109480,109481],{"class":38,"line":46},[36,109482,102130],{"class":98},[14,109484,109485],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[26,109487,109489],{"className":30811,"code":109488,"language":30813,"meta":31,"style":31},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[33,109490,109491],{"__ignoreMap":31},[36,109492,109493,109496,109498,109500,109502],{"class":38,"line":39},[36,109494,109495],{"class":98},"renderer.update_scene(data, ",[36,109497,108946],{"class":5667},[36,109499,176],{"class":163},[36,109501,108951],{"class":59},[36,109503,627],{"class":98},[14,109505,109506,109507,109509,109510,109513],{},"告诉 renderer：用当前 ",[33,109508,33834],{}," 的状态更新画面，并使用名为 ",[33,109511,109512],{},"fixed_camera"," 的相机视角。",[26,109515,109516],{"className":30811,"code":108411,"language":30813,"meta":31,"style":31},[33,109517,109518],{"__ignoreMap":31},[36,109519,109520,109522,109524],{"class":38,"line":39},[36,109521,108011],{"class":98},[36,109523,176],{"class":163},[36,109525,108016],{"class":98},[14,109527,109528,109529,109532],{},"真正渲染出图像。",[33,109530,109531],{},"image"," 是一个 NumPy 数组，不是文件。",[26,109534,109536],{"className":30811,"code":109535,"language":30813,"meta":31,"style":31},"Image.fromarray(image).save(output_path)\n",[33,109537,109538],{"__ignoreMap":31},[36,109539,109540],{"class":38,"line":39},[36,109541,109535],{"class":98},[14,109543,109544,109545,28819],{},"把数组转换成图片，并保存到 ",[33,109546,109547],{},"render_output.png",[26,109549,109551],{"className":30811,"code":109550,"language":30813,"meta":31,"style":31},"renderer.close()\n",[33,109552,109553],{"__ignoreMap":31},[36,109554,109555],{"class":38,"line":39},[36,109556,109550],{"class":98},[14,109558,109559],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[559,109561,102747],{"id":102746},[14,109563,109564,109565,109567,109568,28819],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[33,109566,109547],{},"，并输出图像数组形状，例如 ",[33,109569,109570],{},"(480, 640, 3)",[14,109572,109573],{},"如果图片里看不到方块，先检查：",[571,109575,109576,109579,109582],{},[574,109577,109578],{},"方块是否掉到相机视野外。",[574,109580,109581],{},"camera 位置是否合理。",[574,109583,109584,109585,109588],{},"是否在 ",[33,109586,109587],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[559,109590,102779],{"id":102778},[14,109592,109593],{},"运行 viewer:",[26,109595,109597],{"className":24261,"code":109596,"language":24263,"meta":31,"style":31},"python ch5_viewer.py\n",[33,109598,109599],{"__ignoreMap":31},[36,109600,109601,109603],{"class":38,"line":39},[36,109602,30813],{"class":55},[36,109604,108727],{"class":59},[14,109606,109607],{},"运行 renderer:",[26,109609,109611],{"className":24261,"code":109610,"language":24263,"meta":31,"style":31},"python ch5_renderer.py\n",[33,109612,109613],{"__ignoreMap":31},[36,109614,109615,109617],{"class":38,"line":39},[36,109616,30813],{"class":55},[36,109618,109056],{"class":59},[14,109620,109621],{},"如果在服务器上运行:",[26,109623,109625],{"className":24261,"code":109624,"language":24263,"meta":31,"style":31},"MUJOCO_GL=egl python ch5_renderer.py\n",[33,109626,109627],{"__ignoreMap":31},[36,109628,109629,109631,109633,109635,109638],{"class":38,"line":39},[36,109630,108245],{"class":98},[36,109632,176],{"class":163},[36,109634,108235],{"class":59},[36,109636,109637],{"class":55}," python",[36,109639,109056],{"class":59},[14,109641,108213],{},[26,109643,109645],{"className":24261,"code":109644,"language":24263,"meta":31,"style":31},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[33,109646,109647],{"__ignoreMap":31},[36,109648,109649,109651,109653,109655,109657],{"class":38,"line":39},[36,109650,108245],{"class":98},[36,109652,176],{"class":163},[36,109654,108239],{"class":59},[36,109656,109637],{"class":55},[36,109658,109056],{"class":59},[14,109660,109661],{},"再做几个练习：",[571,109663,109664,109671,109674,109680],{},[574,109665,109666,109667,109670],{},"把 renderer 分辨率改成 ",[33,109668,109669],{},"height=240, width=320","，观察输出 shape。",[574,109672,109673],{},"把方块颜色改成蓝色，重新保存图片。",[574,109675,109676,109677,109679],{},"把相机 ",[33,109678,104577],{}," 改远一点，观察画面中物体是否变小。",[574,109681,109682,109683,102845,109686,109689],{},"把 viewer 示例中的 ",[33,109684,109685],{},"data.time \u003C 5.0",[33,109687,109688],{},"data.time \u003C 20.0","，观察更长时间。",[559,109691,102884],{"id":102883},[588,109693,109695],{"id":109694},"viewer-窗口打不开","viewer 窗口打不开",[14,109697,109698],{},"安装:",[26,109700,109702],{"className":24261,"code":109701,"language":24263,"meta":31,"style":31},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[33,109703,109704],{"__ignoreMap":31},[36,109705,109706,109708,109710,109712,109714,109716,109718,109720,109722,109724,109726],{"class":38,"line":39},[36,109707,56],{"class":55},[36,109709,26749],{"class":59},[36,109711,160],{"class":59},[36,109713,26834],{"class":109},[36,109715,102937],{"class":59},[36,109717,101266],{"class":59},[36,109719,102942],{"class":59},[36,109721,101279],{"class":59},[36,109723,101285],{"class":59},[36,109725,101276],{"class":59},[36,109727,109728],{"class":59}," libXinerama\n",[588,109730,109732],{"id":109731},"glfwerror",[33,109733,109734],{},"GLFWError",[14,109736,109737],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[588,109739,109741],{"id":109740},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,109743,109744,109745,82971,109747,109749],{},"尝试 ",[33,109746,101468],{},[33,109748,101471],{},"。可能存在版本差异。",[588,109751,109752],{"id":109752},"保存图片是黑的",[14,109754,103006],{},[571,109756,109757,109760,109763,109773],{},[574,109758,109759],{},"XML 里是否有 light。",[574,109761,109762],{},"相机是否对着模型。",[574,109764,109765,109766,109769,109770,28819],{},"是否先 ",[33,109767,109768],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[33,109771,109772],{},"renderer.render()",[574,109774,109775],{},"物体是否已经掉出视野。",[588,109777,109778],{"id":109778},"远程服务器没有显示器",[14,109780,109781],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[26,109783,109784],{"className":24261,"code":109624,"language":24263,"meta":31,"style":31},[33,109785,109786],{"__ignoreMap":31},[36,109787,109788,109790,109792,109794,109796],{"class":38,"line":39},[36,109789,108245],{"class":98},[36,109791,176],{"class":163},[36,109793,108235],{"class":59},[36,109795,109637],{"class":55},[36,109797,109056],{"class":59},[14,109799,109800],{},"如果 EGL 不可用，再尝试：",[26,109802,109803],{"className":24261,"code":109644,"language":24263,"meta":31,"style":31},[33,109804,109805],{"__ignoreMap":31},[36,109806,109807,109809,109811,109813,109815],{"class":38,"line":39},[36,109808,108245],{"class":98},[36,109810,176],{"class":163},[36,109812,108239],{"class":59},[36,109814,109637],{"class":55},[36,109816,109056],{"class":59},[559,109818,103038],{"id":103037},[14,109820,109821],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[571,109823,109824,109827,109830],{},[574,109825,109826],{},"先用 viewer 看模型和控制是否正常。",[574,109828,109829],{},"再用 renderer 保存图片或构造视觉观测。",[574,109831,109832],{},"最后把状态、动作、图像、奖励组织成训练数据。",[537,109834,109835],{},"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":31,"searchDepth":46,"depth":46,"links":109837},[109838,109839,109840,109845,109850,109851,109852,109859],{"id":101078,"depth":46,"text":101079},{"id":101201,"depth":46,"text":101202},{"id":101475,"depth":46,"text":101476,"children":109841},[109842,109843,109844],{"id":108342,"depth":52,"text":108343},{"id":108372,"depth":52,"text":108373},{"id":108407,"depth":52,"text":108408},{"id":101683,"depth":46,"text":101684,"children":109846},[109847,109848,109849],{"id":102003,"depth":52,"text":102003},{"id":109152,"depth":52,"text":109153},{"id":109330,"depth":52,"text":109331},{"id":102746,"depth":46,"text":102747},{"id":102778,"depth":46,"text":102779},{"id":102883,"depth":46,"text":102884,"children":109853},[109854,109855,109856,109857,109858],{"id":109694,"depth":52,"text":109695},{"id":109731,"depth":52,"text":109734},{"id":109740,"depth":52,"text":109741},{"id":109752,"depth":52,"text":109752},{"id":109778,"depth":52,"text":109778},{"id":103037,"depth":46,"text":103038},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107950,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109866,"title":109867,"body":109868,"description":31,"extension":543,"meta":111779,"navigation":246,"path":111780,"seo":111781,"stem":111782,"__hash__":111783},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109869,"toc":111755},[109870,109873,109875,109878,109880,109899,109902,109908,109911,109913,109915,109939,109941,109955,109957,109998,110000,110011,110013,110016,110022,110025,110059,110062,110094,110097,110129,110133,110136,110176,110179,110185,110188,110194,110198,110201,110207,110210,110214,110217,110257,110259,110272,110275,110277,110859,110861,110873,110876,110887,110889,110892,110911,110923,110926,110947,110950,110953,110996,110999,111002,111022,111029,111031,111049,111064,111067,111073,111076,111082,111099,111106,111137,111148,111182,111193,111210,111219,111227,111232,111246,111249,111270,111276,111290,111295,111325,111335,111360,111368,111391,111394,111410,111413,111421,111427,111449,111462,111483,111492,111531,111542,111544,111547,111553,111556,111559,111565,111568,111588,111591,111593,111632,111634,111637,111645,111648,111651,111678,111681,111691,111697,111700,111706,111708,111714,111718,111721,111723,111726,111750,111753],[10,109871,109867],{"id":109872},"_6控制任务cartpole",[559,109874,101079],{"id":101078},[14,109876,109877],{},"本章搭建一个最小 Cartpole 控制任务。",[14,109879,104762],{},[571,109881,109882,109885,109887,109890,109893,109896],{},[574,109883,109884],{},"slide joint",[574,109886,106615],{},[574,109888,109889],{},"cart force actuator",[574,109891,109892],{},"状态观测",[574,109894,109895],{},"简单控制循环",[574,109897,109898],{},"reward 设计雏形",[14,109900,109901],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[26,109903,109906],{"className":109904,"code":109905,"language":5638,"meta":31},[5636],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[33,109907,109905],{"__ignoreMap":31},[14,109909,109910],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[559,109912,101202],{"id":101201},[14,109914,101205],{},[26,109916,109917],{"className":24261,"code":104819,"language":24263,"meta":31,"style":31},[33,109918,109919],{"__ignoreMap":31},[36,109920,109921,109923,109925,109927,109929,109931,109933,109935,109937],{"class":38,"line":39},[36,109922,56],{"class":55},[36,109924,26749],{"class":59},[36,109926,160],{"class":59},[36,109928,26834],{"class":109},[36,109930,104834],{"class":59},[36,109932,101230],{"class":59},[36,109934,102932],{"class":59},[36,109936,101246],{"class":59},[36,109938,104843],{"class":59},[14,109940,103250],{},[26,109942,109943],{"className":24261,"code":101351,"language":24263,"meta":31,"style":31},[33,109944,109945],{"__ignoreMap":31},[36,109946,109947,109949,109951,109953],{"class":38,"line":39},[36,109948,24270],{"class":55},[36,109950,160],{"class":59},[36,109952,101362],{"class":59},[36,109954,101365],{"class":59},[14,109956,103267],{},[26,109958,109960],{"className":24261,"code":109959,"language":24263,"meta":31,"style":31},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[33,109961,109962,109979,109988],{"__ignoreMap":31},[36,109963,109964,109966,109968,109970,109973,109975,109977],{"class":38,"line":39},[36,109965,30763],{"class":55},[36,109967,29609],{"class":59},[36,109969,25552],{"class":109},[36,109971,109972],{"class":59}," mujoco-cartpole",[36,109974,101407],{"class":59},[36,109976,101410],{"class":109},[36,109978,110],{"class":109},[36,109980,109981,109983,109985],{"class":38,"line":46},[36,109982,30763],{"class":55},[36,109984,101419],{"class":59},[36,109986,109987],{"class":59}," mujoco-cartpole\n",[36,109989,109990,109992,109994,109996],{"class":38,"line":52},[36,109991,24270],{"class":55},[36,109993,160],{"class":59},[36,109995,101362],{"class":59},[36,109997,101365],{"class":59},[14,109999,101435],{},[571,110001,110002,110005,110008],{},[574,110003,110004],{},"本章不依赖 Gymnasium。",[574,110006,110007],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[574,110009,110010],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[559,110012,101476],{"id":101475},[14,110014,110015],{},"Cartpole 的模型结构:",[26,110017,110020],{"className":110018,"code":110019,"language":5638,"meta":31},[5636],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[33,110021,110019],{"__ignoreMap":31},[14,110023,110024],{},"小车通过 slide joint 左右移动:",[26,110026,110028],{"className":53499,"code":110027,"language":53501,"meta":31,"style":31},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[33,110029,110030],{"__ignoreMap":31},[36,110031,110032,110034,110036,110038,110040,110043,110045,110047,110050,110052,110054,110057],{"class":38,"line":39},[36,110033,179],{"class":98},[36,110035,103387],{"class":51733},[36,110037,15359],{"class":55},[36,110039,176],{"class":98},[36,110041,110042],{"class":59},"\"cart_x\"",[36,110044,54256],{"class":55},[36,110046,176],{"class":98},[36,110048,110049],{"class":59},"\"slide\"",[36,110051,106459],{"class":55},[36,110053,176],{"class":98},[36,110055,110056],{"class":59},"\"1 0 0\"",[36,110058,101575],{"class":98},[14,110060,110061],{},"杆子通过 hinge joint 旋转:",[26,110063,110065],{"className":53499,"code":110064,"language":53501,"meta":31,"style":31},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[33,110066,110067],{"__ignoreMap":31},[36,110068,110069,110071,110073,110075,110077,110080,110082,110084,110086,110088,110090,110092],{"class":38,"line":39},[36,110070,179],{"class":98},[36,110072,103387],{"class":51733},[36,110074,15359],{"class":55},[36,110076,176],{"class":98},[36,110078,110079],{"class":59},"\"pole_hinge\"",[36,110081,54256],{"class":55},[36,110083,176],{"class":98},[36,110085,106450],{"class":59},[36,110087,106459],{"class":55},[36,110089,176],{"class":98},[36,110091,106464],{"class":59},[36,110093,101575],{"class":98},[14,110095,110096],{},"控制力作用在小车 slide joint 上:",[26,110098,110100],{"className":53499,"code":110099,"language":53501,"meta":31,"style":31},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[33,110101,110102],{"__ignoreMap":31},[36,110103,110104,110106,110108,110110,110112,110115,110117,110119,110121,110123,110125,110127],{"class":38,"line":39},[36,110105,179],{"class":98},[36,110107,106505],{"class":51733},[36,110109,15359],{"class":55},[36,110111,176],{"class":98},[36,110113,110114],{"class":59},"\"cart_motor\"",[36,110116,106515],{"class":55},[36,110118,176],{"class":98},[36,110120,110042],{"class":59},[36,110122,106522],{"class":55},[36,110124,176],{"class":98},[36,110126,54748],{"class":59},[36,110128,101575],{"class":98},[588,110130,110132],{"id":110131},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,110134,110135],{},"这个简化模型有两个关节：",[753,110137,110138,110149],{},[756,110139,110140],{},[759,110141,110142,110144,110146],{},[762,110143,103190],{"align":24175},[762,110145,24176],{"align":24175},[762,110147,110148],{"align":24175},"对应状态",[800,110150,110151,110164],{},[759,110152,110153,110158,110161],{},[805,110154,110155],{"align":24175},[33,110156,110157],{},"cart_x",[805,110159,110160],{"align":24175},"slide",[805,110162,110163],{"align":24175},"小车 x 位置",[759,110165,110166,110171,110173],{},[805,110167,110168],{"align":24175},[33,110169,110170],{},"pole_hinge",[805,110172,106271],{"align":24175},[805,110174,110175],{"align":24175},"杆子角度",[14,110177,110178],{},"所以：",[26,110180,110183],{"className":110181,"code":110182,"language":5638,"meta":31},[5636],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[33,110184,110182],{"__ignoreMap":31},[14,110186,110187],{},"把它们拼起来就是观测：",[26,110189,110192],{"className":110190,"code":110191,"language":5638,"meta":31},[5636],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[33,110193,110191],{"__ignoreMap":31},[588,110195,110197],{"id":110196},"action-是什么","action 是什么",[14,110199,110200],{},"本章只有一个 actuator：",[26,110202,110205],{"className":110203,"code":110204,"language":5638,"meta":31},[5636],"data.ctrl[0] = action\n",[33,110206,110204],{"__ignoreMap":31},[14,110208,110209],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[588,110211,110213],{"id":110212},"reward-是什么","reward 是什么",[14,110215,110216],{},"奖励函数：",[26,110218,110220],{"className":30811,"code":110219,"language":30813,"meta":31,"style":31},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[33,110221,110222],{"__ignoreMap":31},[36,110223,110224,110226,110229,110231,110233,110235,110238,110240,110243,110245,110247,110249,110252,110254],{"class":38,"line":39},[36,110225,17485],{"class":163},[36,110227,110228],{"class":109}," float",[36,110230,621],{"class":98},[36,110232,102834],{"class":109},[36,110234,52703],{"class":163},[36,110236,110237],{"class":109}," 0.1",[36,110239,6969],{"class":163},[36,110241,110242],{"class":98}," cart_x ",[36,110244,1069],{"class":163},[36,110246,110242],{"class":98},[36,110248,1146],{"class":163},[36,110250,110251],{"class":98}," pole_angle ",[36,110253,1069],{"class":163},[36,110255,110256],{"class":98}," pole_angle)\n",[14,110258,106657],{},[571,110260,110261,110266,110269],{},[574,110262,110263,110264,28819],{},"基础奖励是 ",[33,110265,102834],{},[574,110267,110268],{},"小车离中心越远，扣分越多。",[574,110270,110271],{},"杆子角度越大，扣分越多。",[14,110273,110274],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[559,110276,101684],{"id":101683},[26,110278,110280],{"className":30811,"code":110279,"language":30813,"meta":31,"style":31},"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",[33,110281,110282,110288,110298,110302,110306,110314,110319,110323,110327,110331,110336,110340,110345,110350,110355,110359,110364,110369,110374,110378,110382,110386,110390,110394,110399,110403,110407,110411,110415,110419,110429,110436,110440,110444,110458,110472,110485,110515,110519,110523,110535,110547,110555,110559,110572,110576,110580,110589,110593,110609,110619,110632,110645,110649,110672,110690,110694,110706,110710,110714,110724,110734,110738,110754,110795,110799,110819,110835,110839,110843,110855],{"__ignoreMap":31},[36,110283,110284,110286],{"class":38,"line":39},[36,110285,30825],{"class":163},[36,110287,101732],{"class":98},[36,110289,110290,110292,110294,110296],{"class":38,"line":46},[36,110291,30825],{"class":163},[36,110293,31813],{"class":98},[36,110295,31816],{"class":163},[36,110297,31819],{"class":98},[36,110299,110300],{"class":38,"line":52},[36,110301,247],{"emptyLinePlaceholder":246},[36,110303,110304],{"class":38,"line":66},[36,110305,247],{"emptyLinePlaceholder":246},[36,110307,110308,110310,110312],{"class":38,"line":72},[36,110309,101745],{"class":109},[36,110311,14003],{"class":163},[36,110313,101750],{"class":59},[36,110315,110316],{"class":38,"line":82},[36,110317,110318],{"class":59},"\u003Cmujoco model=\"cartpole\">\n",[36,110320,110321],{"class":38,"line":88},[36,110322,101760],{"class":59},[36,110324,110325],{"class":38,"line":113},[36,110326,247],{"emptyLinePlaceholder":246},[36,110328,110329],{"class":38,"line":119},[36,110330,101769],{"class":59},[36,110332,110333],{"class":38,"line":131},[36,110334,110335],{"class":59},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[36,110337,110338],{"class":38,"line":137},[36,110339,247],{"emptyLinePlaceholder":246},[36,110341,110342],{"class":38,"line":147},[36,110343,110344],{"class":59},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[36,110346,110347],{"class":38,"line":153},[36,110348,110349],{"class":59},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[36,110351,110352],{"class":38,"line":191},[36,110353,110354],{"class":59},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[36,110356,110357],{"class":38,"line":197},[36,110358,247],{"emptyLinePlaceholder":246},[36,110360,110361],{"class":38,"line":217},[36,110362,110363],{"class":59},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[36,110365,110366],{"class":38,"line":223},[36,110367,110368],{"class":59},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[36,110370,110371],{"class":38,"line":243},[36,110372,110373],{"class":59},"        \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",[36,110375,110376],{"class":38,"line":250},[36,110377,106869],{"class":59},[36,110379,110380],{"class":38,"line":256},[36,110381,101798],{"class":59},[36,110383,110384],{"class":38,"line":273},[36,110385,101803],{"class":59},[36,110387,110388],{"class":38,"line":278},[36,110389,247],{"emptyLinePlaceholder":246},[36,110391,110392],{"class":38,"line":284},[36,110393,106886],{"class":59},[36,110395,110396],{"class":38,"line":315},[36,110397,110398],{"class":59},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[36,110400,110401],{"class":38,"line":320},[36,110402,106896],{"class":59},[36,110404,110405],{"class":38,"line":326},[36,110406,101808],{"class":59},[36,110408,110409],{"class":38,"line":343},[36,110410,96130],{"class":59},[36,110412,110413],{"class":38,"line":348},[36,110414,247],{"emptyLinePlaceholder":246},[36,110416,110417],{"class":38,"line":354},[36,110418,247],{"emptyLinePlaceholder":246},[36,110420,110421,110423,110426],{"class":38,"line":370},[36,110422,32380],{"class":163},[36,110424,110425],{"class":55}," get_observation",[36,110427,110428],{"class":98},"(data: mujoco.MjData) -> np.ndarray:\n",[36,110430,110431,110433],{"class":38,"line":375},[36,110432,4541],{"class":163},[36,110434,110435],{"class":98}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[36,110437,110438],{"class":38,"line":381},[36,110439,247],{"emptyLinePlaceholder":246},[36,110441,110442],{"class":38,"line":399},[36,110443,247],{"emptyLinePlaceholder":246},[36,110445,110446,110448,110451,110454,110456],{"class":38,"line":404},[36,110447,32380],{"class":163},[36,110449,110450],{"class":55}," compute_reward",[36,110452,110453],{"class":98},"(obs: np.ndarray) -> ",[36,110455,660],{"class":109},[36,110457,4190],{"class":98},[36,110459,110460,110463,110465,110468,110470],{"class":38,"line":410},[36,110461,110462],{"class":98},"    cart_x ",[36,110464,176],{"class":163},[36,110466,110467],{"class":98}," obs[",[36,110469,807],{"class":109},[36,110471,33679],{"class":98},[36,110473,110474,110477,110479,110481,110483],{"class":38,"line":423},[36,110475,110476],{"class":98},"    pole_angle ",[36,110478,176],{"class":163},[36,110480,110467],{"class":98},[36,110482,833],{"class":109},[36,110484,33679],{"class":98},[36,110486,110487,110489,110491,110493,110495,110497,110499,110501,110503,110505,110507,110509,110511,110513],{"class":38,"line":436},[36,110488,4541],{"class":163},[36,110490,110228],{"class":109},[36,110492,621],{"class":98},[36,110494,102834],{"class":109},[36,110496,52703],{"class":163},[36,110498,110237],{"class":109},[36,110500,6969],{"class":163},[36,110502,110242],{"class":98},[36,110504,1069],{"class":163},[36,110506,110242],{"class":98},[36,110508,1146],{"class":163},[36,110510,110251],{"class":98},[36,110512,1069],{"class":163},[36,110514,110256],{"class":98},[36,110516,110517],{"class":38,"line":441},[36,110518,247],{"emptyLinePlaceholder":246},[36,110520,110521],{"class":38,"line":447},[36,110522,247],{"emptyLinePlaceholder":246},[36,110524,110525,110527,110529,110531,110533],{"class":38,"line":465},[36,110526,32380],{"class":163},[36,110528,2432],{"class":55},[36,110530,101829],{"class":98},[36,110532,96118],{"class":109},[36,110534,4190],{"class":98},[36,110536,110537,110539,110541,110543,110545],{"class":38,"line":470},[36,110538,101838],{"class":98},[36,110540,176],{"class":163},[36,110542,101843],{"class":98},[36,110544,101745],{"class":109},[36,110546,627],{"class":98},[36,110548,110549,110551,110553],{"class":38,"line":476},[36,110550,101852],{"class":98},[36,110552,176],{"class":163},[36,110554,101857],{"class":98},[36,110556,110557],{"class":38,"line":496},[36,110558,247],{"emptyLinePlaceholder":246},[36,110560,110561,110563,110565,110567,110569],{"class":38,"line":501},[36,110562,105500],{"class":98},[36,110564,833],{"class":109},[36,110566,4894],{"class":98},[36,110568,176],{"class":163},[36,110570,110571],{"class":109}," 0.1\n",[36,110573,110574],{"class":38,"line":507},[36,110575,105513],{"class":98},[36,110577,110578],{"class":38,"line":517},[36,110579,247],{"emptyLinePlaceholder":246},[36,110581,110582,110585,110587],{"class":38,"line":522},[36,110583,110584],{"class":98},"    total_reward ",[36,110586,176],{"class":163},[36,110588,105192],{"class":109},[36,110590,110591],{"class":38,"line":528},[36,110592,247],{"emptyLinePlaceholder":246},[36,110594,110595,110597,110599,110601,110603,110605,110607],{"class":38,"line":10203},[36,110596,3652],{"class":163},[36,110598,32049],{"class":98},[36,110600,26480],{"class":163},[36,110602,32876],{"class":109},[36,110604,621],{"class":98},[36,110606,6861],{"class":109},[36,110608,31219],{"class":98},[36,110610,110611,110614,110616],{"class":38,"line":10227},[36,110612,110613],{"class":98},"        obs ",[36,110615,176],{"class":163},[36,110617,110618],{"class":98}," get_observation(data)\n",[36,110620,110621,110624,110626,110628,110630],{"class":38,"line":10232},[36,110622,110623],{"class":98},"        pole_angle ",[36,110625,176],{"class":163},[36,110627,110467],{"class":98},[36,110629,833],{"class":109},[36,110631,33679],{"class":98},[36,110633,110634,110637,110639,110641,110643],{"class":38,"line":10237},[36,110635,110636],{"class":98},"        pole_angular_velocity ",[36,110638,176],{"class":163},[36,110640,110467],{"class":98},[36,110642,689],{"class":109},[36,110644,33679],{"class":98},[36,110646,110647],{"class":38,"line":10242},[36,110648,247],{"emptyLinePlaceholder":246},[36,110650,110651,110654,110656,110659,110661,110663,110665,110667,110669],{"class":38,"line":10251},[36,110652,110653],{"class":98},"        action ",[36,110655,176],{"class":163},[36,110657,110658],{"class":109}," 2.0",[36,110660,6969],{"class":163},[36,110662,110251],{"class":98},[36,110664,1095],{"class":163},[36,110666,62299],{"class":109},[36,110668,6969],{"class":163},[36,110670,110671],{"class":98}," pole_angular_velocity\n",[36,110673,110674,110676,110678,110680,110682,110684,110686,110688],{"class":38,"line":10256},[36,110675,110653],{"class":98},[36,110677,176],{"class":163},[36,110679,107878],{"class":98},[36,110681,1146],{"class":163},[36,110683,102834],{"class":109},[36,110685,12874],{"class":98},[36,110687,102834],{"class":109},[36,110689,627],{"class":98},[36,110691,110692],{"class":38,"line":10262},[36,110693,247],{"emptyLinePlaceholder":246},[36,110695,110696,110698,110700,110702,110704],{"class":38,"line":10283},[36,110697,107048],{"class":98},[36,110699,807],{"class":109},[36,110701,4894],{"class":98},[36,110703,176],{"class":163},[36,110705,107901],{"class":98},[36,110707,110708],{"class":38,"line":10289},[36,110709,101947],{"class":98},[36,110711,110712],{"class":38,"line":10303},[36,110713,247],{"emptyLinePlaceholder":246},[36,110715,110716,110719,110721],{"class":38,"line":10309},[36,110717,110718],{"class":98},"        reward ",[36,110720,176],{"class":163},[36,110722,110723],{"class":98}," compute_reward(get_observation(data))\n",[36,110725,110726,110729,110731],{"class":38,"line":10336},[36,110727,110728],{"class":98},"        total_reward ",[36,110730,9918],{"class":163},[36,110732,110733],{"class":98}," reward\n",[36,110735,110736],{"class":38,"line":10345},[36,110737,247],{"emptyLinePlaceholder":246},[36,110739,110740,110742,110744,110746,110748,110750,110752],{"class":38,"line":10351},[36,110741,2955],{"class":163},[36,110743,32049],{"class":98},[36,110745,942],{"class":163},[36,110747,6205],{"class":109},[36,110749,101990],{"class":163},[36,110751,4544],{"class":109},[36,110753,4190],{"class":98},[36,110755,110756,110758,110760,110763,110766,110769,110772,110774,110777,110780,110782,110784,110786,110788,110791,110793],{"class":38,"line":10359},[36,110757,35083],{"class":109},[36,110759,621],{"class":98},[36,110761,110762],{"class":59},"\"step:\"",[36,110764,110765],{"class":98},", step, ",[36,110767,110768],{"class":59},"\"obs:\"",[36,110770,110771],{"class":98},", np.round(obs, ",[36,110773,689],{"class":109},[36,110775,110776],{"class":98},"), ",[36,110778,110779],{"class":59},"\"action:\"",[36,110781,12874],{"class":98},[36,110783,32451],{"class":109},[36,110785,621],{"class":98},[36,110787,660],{"class":109},[36,110789,110790],{"class":98},"(action), ",[36,110792,689],{"class":109},[36,110794,30930],{"class":98},[36,110796,110797],{"class":38,"line":10364},[36,110798,247],{"emptyLinePlaceholder":246},[36,110800,110801,110803,110805,110808,110810,110812,110815,110817],{"class":38,"line":17043},[36,110802,31732],{"class":109},[36,110804,621],{"class":98},[36,110806,110807],{"class":59},"\"total_reward:\"",[36,110809,12874],{"class":98},[36,110811,32451],{"class":109},[36,110813,110814],{"class":98},"(total_reward, ",[36,110816,689],{"class":109},[36,110818,30930],{"class":98},[36,110820,110821,110823,110825,110828,110831,110833],{"class":38,"line":17049},[36,110822,31732],{"class":109},[36,110824,621],{"class":98},[36,110826,110827],{"class":59},"\"final obs:\"",[36,110829,110830],{"class":98},", np.round(get_observation(data), ",[36,110832,689],{"class":109},[36,110834,30930],{"class":98},[36,110836,110837],{"class":38,"line":17072},[36,110838,247],{"emptyLinePlaceholder":246},[36,110840,110841],{"class":38,"line":17078},[36,110842,247],{"emptyLinePlaceholder":246},[36,110844,110845,110847,110849,110851,110853],{"class":38,"line":17101},[36,110846,2010],{"class":163},[36,110848,31653],{"class":109},[36,110850,101990],{"class":163},[36,110852,101993],{"class":59},[36,110854,4190],{"class":98},[36,110856,110857],{"class":38,"line":17115},[36,110858,102000],{"class":98},[14,110860,104001],{},[26,110862,110864],{"className":24261,"code":110863,"language":24263,"meta":31,"style":31},"touch ch6_cartpole.py\n",[33,110865,110866],{"__ignoreMap":31},[36,110867,110868,110870],{"class":38,"line":39},[36,110869,101714],{"class":55},[36,110871,110872],{"class":59}," ch6_cartpole.py\n",[14,110874,110875],{},"运行：",[26,110877,110879],{"className":24261,"code":110878,"language":24263,"meta":31,"style":31},"python ch6_cartpole.py\n",[33,110880,110881],{"__ignoreMap":31},[36,110882,110883,110885],{"class":38,"line":39},[36,110884,30813],{"class":55},[36,110886,110872],{"class":59},[588,110888,102003],{"id":102003},[14,110890,110891],{},"构造观测：",[26,110893,110895],{"className":30811,"code":110894,"language":30813,"meta":31,"style":31},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[33,110896,110897,110905],{"__ignoreMap":31},[36,110898,110899,110901,110903],{"class":38,"line":39},[36,110900,32380],{"class":163},[36,110902,110425],{"class":55},[36,110904,110428],{"class":98},[36,110906,110907,110909],{"class":38,"line":46},[36,110908,4541],{"class":163},[36,110910,110435],{"class":98},[14,110912,110913,110916,110917,110919,110920,110922],{},[33,110914,110915],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[33,110918,104461],{}," 2 维，",[33,110921,104791],{}," 2 维，所以 obs 是 4 维。",[14,110924,110925],{},"设置初始角度：",[26,110927,110929],{"className":30811,"code":110928,"language":30813,"meta":31,"style":31},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[33,110930,110931,110943],{"__ignoreMap":31},[36,110932,110933,110935,110937,110939,110941],{"class":38,"line":39},[36,110934,105130],{"class":98},[36,110936,833],{"class":109},[36,110938,4894],{"class":98},[36,110940,176],{"class":163},[36,110942,110571],{"class":109},[36,110944,110945],{"class":38,"line":46},[36,110946,104974],{"class":98},[14,110948,110949],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,110951,110952],{},"简单反馈控制：",[26,110954,110956],{"className":30811,"code":110955,"language":30813,"meta":31,"style":31},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[33,110957,110958,110978],{"__ignoreMap":31},[36,110959,110960,110962,110964,110966,110968,110970,110972,110974,110976],{"class":38,"line":39},[36,110961,107873],{"class":98},[36,110963,176],{"class":163},[36,110965,110658],{"class":109},[36,110967,6969],{"class":163},[36,110969,110251],{"class":98},[36,110971,1095],{"class":163},[36,110973,62299],{"class":109},[36,110975,6969],{"class":163},[36,110977,110671],{"class":98},[36,110979,110980,110982,110984,110986,110988,110990,110992,110994],{"class":38,"line":46},[36,110981,107873],{"class":98},[36,110983,176],{"class":163},[36,110985,107878],{"class":98},[36,110987,1146],{"class":163},[36,110989,102834],{"class":109},[36,110991,12874],{"class":98},[36,110993,102834],{"class":109},[36,110995,627],{"class":98},[14,110997,110998],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,111000,111001],{},"限制动作：",[26,111003,111005],{"className":30811,"code":111004,"language":30813,"meta":31,"style":31},"np.clip(action, -1.0, 1.0)\n",[33,111006,111007],{"__ignoreMap":31},[36,111008,111009,111012,111014,111016,111018,111020],{"class":38,"line":39},[36,111010,111011],{"class":98},"np.clip(action, ",[36,111013,1146],{"class":163},[36,111015,102834],{"class":109},[36,111017,12874],{"class":98},[36,111019,102834],{"class":109},[36,111021,627],{"class":98},[14,111023,111024,111025,111028],{},"因为 XML 里 ",[33,111026,111027],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[588,111030,102139],{"id":102139},[26,111032,111033],{"className":30811,"code":110894,"language":30813,"meta":31,"style":31},[33,111034,111035,111043],{"__ignoreMap":31},[36,111036,111037,111039,111041],{"class":38,"line":39},[36,111038,32380],{"class":163},[36,111040,110425],{"class":55},[36,111042,110428],{"class":98},[36,111044,111045,111047],{"class":38,"line":46},[36,111046,4541],{"class":163},[36,111048,110435],{"class":98},[14,111050,111051,111052,111055,111056,111059,111060,111063],{},"这段定义了一个函数，用来获取当前观测。",[33,111053,111054],{},"data.qpos.copy()"," 是位置数组副本，",[33,111057,111058],{},"data.qvel.copy()"," 是速度数组副本。",[33,111061,111062],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,111065,111066],{},"在本章模型里：",[26,111068,111071],{"className":111069,"code":111070,"language":5638,"meta":31},[5636],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[33,111072,111070],{"__ignoreMap":31},[14,111074,111075],{},"所以返回的 obs 是：",[26,111077,111080],{"className":111078,"code":111079,"language":5638,"meta":31},[5636],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[33,111081,111079],{"__ignoreMap":31},[26,111083,111085],{"className":30811,"code":111084,"language":30813,"meta":31,"style":31},"def compute_reward(obs: np.ndarray) -> float:\n",[33,111086,111087],{"__ignoreMap":31},[36,111088,111089,111091,111093,111095,111097],{"class":38,"line":39},[36,111090,32380],{"class":163},[36,111092,110450],{"class":55},[36,111094,110453],{"class":98},[36,111096,660],{"class":109},[36,111098,4190],{"class":98},[14,111100,111101,111102,111105],{},"这行定义奖励函数。输入是观测 ",[33,111103,111104],{},"obs","，输出是一个浮点数奖励。",[26,111107,111109],{"className":30811,"code":111108,"language":30813,"meta":31,"style":31},"cart_x = obs[0]\npole_angle = obs[1]\n",[33,111110,111111,111124],{"__ignoreMap":31},[36,111112,111113,111116,111118,111120,111122],{"class":38,"line":39},[36,111114,111115],{"class":98},"cart_x ",[36,111117,176],{"class":163},[36,111119,110467],{"class":98},[36,111121,807],{"class":109},[36,111123,33679],{"class":98},[36,111125,111126,111129,111131,111133,111135],{"class":38,"line":46},[36,111127,111128],{"class":98},"pole_angle ",[36,111130,176],{"class":163},[36,111132,110467],{"class":98},[36,111134,833],{"class":109},[36,111136,33679],{"class":98},[14,111138,111139,111140,111143,111144,111147],{},"数组索引从 0 开始。",[33,111141,111142],{},"obs[0]"," 是第一个元素，也就是小车位置。",[33,111145,111146],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[26,111149,111150],{"className":30811,"code":110219,"language":30813,"meta":31,"style":31},[33,111151,111152],{"__ignoreMap":31},[36,111153,111154,111156,111158,111160,111162,111164,111166,111168,111170,111172,111174,111176,111178,111180],{"class":38,"line":39},[36,111155,17485],{"class":163},[36,111157,110228],{"class":109},[36,111159,621],{"class":98},[36,111161,102834],{"class":109},[36,111163,52703],{"class":163},[36,111165,110237],{"class":109},[36,111167,6969],{"class":163},[36,111169,110242],{"class":98},[36,111171,1069],{"class":163},[36,111173,110242],{"class":98},[36,111175,1146],{"class":163},[36,111177,110251],{"class":98},[36,111179,1069],{"class":163},[36,111181,110256],{"class":98},[14,111183,111184,111185,111188,111189,111192],{},"这行计算奖励。",[33,111186,111187],{},"cart_x * cart_x"," 是小车位置的平方，",[33,111190,111191],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[26,111194,111196],{"className":30811,"code":111195,"language":30813,"meta":31,"style":31},"data.qpos[1] = 0.1\n",[33,111197,111198],{"__ignoreMap":31},[36,111199,111200,111202,111204,111206,111208],{"class":38,"line":39},[36,111201,105130],{"class":98},[36,111203,833],{"class":109},[36,111205,4894],{"class":98},[36,111207,176],{"class":163},[36,111209,110571],{"class":109},[14,111211,111212,111213,111215,111216,111218],{},"手动设置杆子的初始角度。因为 ",[33,111214,105887],{}," 是小车位置，",[33,111217,105890],{}," 是杆子角度，所以这里改的是杆子。",[26,111220,111221],{"className":30811,"code":104974,"language":30813,"meta":31,"style":31},[33,111222,111223],{"__ignoreMap":31},[36,111224,111225],{"class":38,"line":39},[36,111226,104974],{"class":98},[14,111228,105933,111229,111231],{},[33,111230,104461],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[26,111233,111235],{"className":30811,"code":111234,"language":30813,"meta":31,"style":31},"total_reward = 0.0\n",[33,111236,111237],{"__ignoreMap":31},[36,111238,111239,111242,111244],{"class":38,"line":39},[36,111240,111241],{"class":98},"total_reward ",[36,111243,176],{"class":163},[36,111245,105192],{"class":109},[14,111247,111248],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[26,111250,111252],{"className":30811,"code":111251,"language":30813,"meta":31,"style":31},"for step in range(1000):\n",[33,111253,111254],{"__ignoreMap":31},[36,111255,111256,111258,111260,111262,111264,111266,111268],{"class":38,"line":39},[36,111257,3476],{"class":163},[36,111259,32049],{"class":98},[36,111261,26480],{"class":163},[36,111263,32876],{"class":109},[36,111265,621],{"class":98},[36,111267,6861],{"class":109},[36,111269,31219],{"class":98},[14,111271,111272,111273,111275],{},"循环 1000 步。",[33,111274,107565],{}," 是当前步数，从 0 到 999。",[26,111277,111279],{"className":30811,"code":111278,"language":30813,"meta":31,"style":31},"obs = get_observation(data)\n",[33,111280,111281],{"__ignoreMap":31},[36,111282,111283,111286,111288],{"class":38,"line":39},[36,111284,111285],{"class":98},"obs ",[36,111287,176],{"class":163},[36,111289,110618],{"class":98},[14,111291,111292,111293,28819],{},"读取当前状态，保存到 ",[33,111294,111104],{},[26,111296,111298],{"className":30811,"code":111297,"language":30813,"meta":31,"style":31},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[33,111299,111300,111312],{"__ignoreMap":31},[36,111301,111302,111304,111306,111308,111310],{"class":38,"line":39},[36,111303,111128],{"class":98},[36,111305,176],{"class":163},[36,111307,110467],{"class":98},[36,111309,833],{"class":109},[36,111311,33679],{"class":98},[36,111313,111314,111317,111319,111321,111323],{"class":38,"line":46},[36,111315,111316],{"class":98},"pole_angular_velocity ",[36,111318,176],{"class":163},[36,111320,110467],{"class":98},[36,111322,689],{"class":109},[36,111324,33679],{"class":98},[14,111326,111327,111328,111331,111332,28819],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[33,111329,111330],{},"obs[3]","？因为 obs 的顺序是 ",[33,111333,111334],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[26,111336,111338],{"className":30811,"code":111337,"language":30813,"meta":31,"style":31},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[33,111339,111340],{"__ignoreMap":31},[36,111341,111342,111344,111346,111348,111350,111352,111354,111356,111358],{"class":38,"line":39},[36,111343,107873],{"class":98},[36,111345,176],{"class":163},[36,111347,110658],{"class":109},[36,111349,6969],{"class":163},[36,111351,110251],{"class":98},[36,111353,1095],{"class":163},[36,111355,62299],{"class":109},[36,111357,6969],{"class":163},[36,111359,110671],{"class":98},[14,111361,111362,111363,101449,111365,111367],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[33,111364,105691],{},[33,111366,35762],{}," 是人为设置的系数，不是固定公式。",[26,111369,111371],{"className":30811,"code":111370,"language":30813,"meta":31,"style":31},"action = np.clip(action, -1.0, 1.0)\n",[33,111372,111373],{"__ignoreMap":31},[36,111374,111375,111377,111379,111381,111383,111385,111387,111389],{"class":38,"line":39},[36,111376,107873],{"class":98},[36,111378,176],{"class":163},[36,111380,107878],{"class":98},[36,111382,1146],{"class":163},[36,111384,102834],{"class":109},[36,111386,12874],{"class":98},[36,111388,102834],{"class":109},[36,111390,627],{"class":98},[14,111392,111393],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[26,111395,111396],{"className":30811,"code":110204,"language":30813,"meta":31,"style":31},[33,111397,111398],{"__ignoreMap":31},[36,111399,111400,111402,111404,111406,111408],{"class":38,"line":39},[36,111401,106302],{"class":98},[36,111403,807],{"class":109},[36,111405,4894],{"class":98},[36,111407,176],{"class":163},[36,111409,107901],{"class":98},[14,111411,111412],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[26,111414,111415],{"className":30811,"code":104936,"language":30813,"meta":31,"style":31},[33,111416,111417],{"__ignoreMap":31},[36,111418,111419],{"class":38,"line":39},[36,111420,104936],{"class":98},[14,111422,111423,111424,111426],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[33,111425,106557],{}," 计算小车和杆子的下一刻状态。",[26,111428,111430],{"className":30811,"code":111429,"language":30813,"meta":31,"style":31},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[33,111431,111432,111441],{"__ignoreMap":31},[36,111433,111434,111437,111439],{"class":38,"line":39},[36,111435,111436],{"class":98},"reward ",[36,111438,176],{"class":163},[36,111440,110723],{"class":98},[36,111442,111443,111445,111447],{"class":38,"line":46},[36,111444,111241],{"class":98},[36,111446,9918],{"class":163},[36,111448,110733],{"class":98},[14,111450,111451,111452,111454,111455,111458,111459,28819],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[33,111453,9918],{}," 是简写，",[33,111456,111457],{},"total_reward += reward"," 等价于 ",[33,111460,111461],{},"total_reward = total_reward + reward",[26,111463,111465],{"className":30811,"code":111464,"language":30813,"meta":31,"style":31},"if step % 100 == 0:\n",[33,111466,111467],{"__ignoreMap":31},[36,111468,111469,111471,111473,111475,111477,111479,111481],{"class":38,"line":39},[36,111470,2010],{"class":163},[36,111472,32049],{"class":98},[36,111474,942],{"class":163},[36,111476,6205],{"class":109},[36,111478,101990],{"class":163},[36,111480,4544],{"class":109},[36,111482,4190],{"class":98},[14,111484,111485,111487,111488,111491],{},[33,111486,942],{}," 是取余数。",[33,111489,111490],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[26,111493,111495],{"className":30811,"code":111494,"language":30813,"meta":31,"style":31},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[33,111496,111497],{"__ignoreMap":31},[36,111498,111499,111501,111503,111505,111507,111509,111511,111513,111515,111517,111519,111521,111523,111525,111527,111529],{"class":38,"line":39},[36,111500,30848],{"class":109},[36,111502,621],{"class":98},[36,111504,110762],{"class":59},[36,111506,110765],{"class":98},[36,111508,110768],{"class":59},[36,111510,110771],{"class":98},[36,111512,689],{"class":109},[36,111514,110776],{"class":98},[36,111516,110779],{"class":59},[36,111518,12874],{"class":98},[36,111520,32451],{"class":109},[36,111522,621],{"class":98},[36,111524,660],{"class":109},[36,111526,110790],{"class":98},[36,111528,689],{"class":109},[36,111530,30930],{"class":98},[14,111532,111533,111534,111537,111538,111541],{},"打印当前步数、观测和动作。",[33,111535,111536],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[33,111539,111540],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[559,111543,102747],{"id":102746},[14,111545,111546],{},"观测向量:",[26,111548,111551],{"className":111549,"code":111550,"language":5638,"meta":31},[5636],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[33,111552,111550],{"__ignoreMap":31},[14,111554,111555],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,111557,111558],{},"每隔 100 步会打印一次：",[26,111560,111563],{"className":111561,"code":111562,"language":5638,"meta":31},[5636],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[33,111564,111562],{"__ignoreMap":31},[14,111566,111567],{},"重点观察：",[571,111569,111570,111576,111581],{},[574,111571,111572,111575],{},[33,111573,111574],{},"pole_angle"," 是否越来越大。",[574,111577,111578,111580],{},[33,111579,110157],{}," 是否跑得太远。",[574,111582,111583,111584,82971,111586,28819],{},"action 是否经常被 clip 到 ",[33,111585,104346],{},[33,111587,833],{},[14,111589,111590],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[559,111592,102779],{"id":102778},[571,111594,111595,111601,111604,111610,111620,111626,111629],{},[574,111596,111597,111598,28819],{},"把初始角度改为 ",[33,111599,111600],{},"data.qpos[1] = 0.3",[574,111602,111603],{},"重新运行，观察控制是否变差。",[574,111605,111606,111607,111609],{},"把 actuator ",[33,111608,107498],{}," 改小。",[574,111611,111612,111613,111616,111617,28819],{},"打印 ",[33,111614,111615],{},"model.nq, model.nv, model.nu","，应为 ",[33,111618,111619],{},"2 2 1",[574,111621,111622,111623,111625],{},"把 reward 里的 ",[33,111624,111191],{}," 系数改大，观察总奖励变化。",[574,111627,111628],{},"把控制器改成反号，观察杆子是否更容易倒。",[574,111630,111631],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[559,111633,102884],{"id":102883},[588,111635,111636],{"id":111636},"杆子方向和预期不一致",[14,111638,102827,111639,111641,111642,111644],{},[33,111640,106670],{}," 和 capsule 的 ",[33,111643,103607],{},"，必要时用 viewer 可视化确认。",[588,111646,111647],{"id":111647},"控制器越控越倒",[14,111649,111650],{},"说明反馈符号可能反了，尝试:",[26,111652,111654],{"className":30811,"code":111653,"language":30813,"meta":31,"style":31},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[33,111655,111656],{"__ignoreMap":31},[36,111657,111658,111660,111662,111664,111666,111668,111670,111672,111674,111676],{"class":38,"line":39},[36,111659,107873],{"class":98},[36,111661,176],{"class":163},[36,111663,52703],{"class":163},[36,111665,105691],{"class":109},[36,111667,6969],{"class":163},[36,111669,110251],{"class":98},[36,111671,1146],{"class":163},[36,111673,62299],{"class":109},[36,111675,6969],{"class":163},[36,111677,110671],{"class":98},[588,111679,111680],{"id":111680},"小车飞走",[14,111682,111683,111684,111686,111687,111690],{},"降低 ",[33,111685,107498],{}," 或缩小 ",[33,111688,111689],{},"action"," 的 clip 范围。",[588,111692,111694,111696],{"id":111693},"obs3-为什么是杆子角速度",[33,111695,111330],{}," 为什么是杆子角速度",[14,111698,111699],{},"因为这个模型里：",[26,111701,111704],{"className":111702,"code":111703,"language":5638,"meta":31},[5636],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[33,111705,111703],{"__ignoreMap":31},[14,111707,110178],{},[26,111709,111712],{"className":111710,"code":111711,"language":5638,"meta":31},[5636],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[33,111713,111711],{"__ignoreMap":31},[588,111715,111717],{"id":111716},"reward-变成负数是否错误","reward 变成负数是否错误",[14,111719,111720],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[559,111722,103038],{"id":103037},[14,111724,111725],{},"一个控制任务通常包含：",[571,111727,111728,111731,111739,111744,111747],{},[574,111729,111730],{},"模型：Cartpole 的 body、joint、actuator。",[574,111732,111733,111734,828,111736,111738],{},"观测：从 ",[33,111735,104461],{},[33,111737,104791],{}," 里取状态。",[574,111740,111741,111742,28819],{},"动作：写入 ",[33,111743,101507],{},[574,111745,111746],{},"奖励：根据任务目标打分。",[574,111748,111749],{},"循环：obs -> action -> step -> reward。",[14,111751,111752],{},"这就是后面 Gymnasium 环境的基本骨架。",[537,111754,104717],{},{"title":31,"searchDepth":46,"depth":46,"links":111756},[111757,111758,111759,111764,111768,111769,111770,111778],{"id":101078,"depth":46,"text":101079},{"id":101201,"depth":46,"text":101202},{"id":101475,"depth":46,"text":101476,"children":111760},[111761,111762,111763],{"id":110131,"depth":52,"text":110132},{"id":110196,"depth":52,"text":110197},{"id":110212,"depth":52,"text":110213},{"id":101683,"depth":46,"text":101684,"children":111765},[111766,111767],{"id":102003,"depth":52,"text":102003},{"id":102139,"depth":52,"text":102139},{"id":102746,"depth":46,"text":102747},{"id":102778,"depth":46,"text":102779},{"id":102883,"depth":46,"text":102884,"children":111771},[111772,111773,111774,111775,111777],{"id":111636,"depth":52,"text":111636},{"id":111647,"depth":52,"text":111647},{"id":111680,"depth":52,"text":111680},{"id":111693,"depth":52,"text":111776},"obs[3] 为什么是杆子角速度",{"id":111716,"depth":52,"text":111717},{"id":103037,"depth":46,"text":103038},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109867,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111785,"title":111786,"body":111787,"description":31,"extension":543,"meta":113801,"navigation":246,"path":113802,"seo":113803,"stem":113804,"__hash__":113805},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111788,"toc":113777},[111789,111792,111794,111797,111799,111816,111819,111822,111828,111831,111833,111835,111859,111861,111875,111877,111918,111920,111938,111940,111943,111949,111952,111980,111984,111990,112015,112018,112049,112056,112059,112062,112068,112071,112077,112080,112086,112090,112093,112118,112121,112123,112883,112885,112897,112899,112910,112912,112915,112932,112935,112937,112948,112951,112953,112999,113002,113015,113018,113100,113103,113105,113121,113131,113144,113147,113186,113196,113207,113217,113230,113233,113262,113265,113275,113278,113284,113301,113312,113314,113320,113337,113348,113369,113372,113384,113387,113408,113411,113419,113427,113444,113447,113516,113523,113531,113534,113547,113554,113556,113559,113565,113568,113571,113577,113583,113585,113625,113627,113633,113642,113645,113647,113667,113670,113673,113679,113683,113685,113712,113715,113718,113745,113751,113754,113757,113759,113762,113765,113771,113774],[10,111790,111786],{"id":111791},"_7控制任务reacher-机械臂到达目标",[559,111793,101079],{"id":101078},[14,111795,111796],{},"本章搭建一个二维两关节 reacher 任务。",[14,111798,104762],{},[571,111800,111801,111804,111807,111810,111813],{},[574,111802,111803],{},"两个 hinge joint",[574,111805,111806],{},"两个 motor actuator",[574,111808,111809],{},"site 作为末端点和目标点",[574,111811,111812],{},"根据末端和目标距离设计 reward",[574,111814,111815],{},"构造机械臂任务的基本形式",[14,111817,111818],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,111820,111821],{},"Reacher 任务可以理解为：",[26,111823,111826],{"className":111824,"code":111825,"language":5638,"meta":31},[5636],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[33,111827,111825],{"__ignoreMap":31},[14,111829,111830],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[559,111832,101202],{"id":101201},[14,111834,101205],{},[26,111836,111837],{"className":24261,"code":104819,"language":24263,"meta":31,"style":31},[33,111838,111839],{"__ignoreMap":31},[36,111840,111841,111843,111845,111847,111849,111851,111853,111855,111857],{"class":38,"line":39},[36,111842,56],{"class":55},[36,111844,26749],{"class":59},[36,111846,160],{"class":59},[36,111848,26834],{"class":109},[36,111850,104834],{"class":59},[36,111852,101230],{"class":59},[36,111854,102932],{"class":59},[36,111856,101246],{"class":59},[36,111858,104843],{"class":59},[14,111860,103250],{},[26,111862,111863],{"className":24261,"code":101351,"language":24263,"meta":31,"style":31},[33,111864,111865],{"__ignoreMap":31},[36,111866,111867,111869,111871,111873],{"class":38,"line":39},[36,111868,24270],{"class":55},[36,111870,160],{"class":59},[36,111872,101362],{"class":59},[36,111874,101365],{"class":59},[14,111876,103267],{},[26,111878,111880],{"className":24261,"code":111879,"language":24263,"meta":31,"style":31},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[33,111881,111882,111899,111908],{"__ignoreMap":31},[36,111883,111884,111886,111888,111890,111893,111895,111897],{"class":38,"line":39},[36,111885,30763],{"class":55},[36,111887,29609],{"class":59},[36,111889,25552],{"class":109},[36,111891,111892],{"class":59}," mujoco-reacher",[36,111894,101407],{"class":59},[36,111896,101410],{"class":109},[36,111898,110],{"class":109},[36,111900,111901,111903,111905],{"class":38,"line":46},[36,111902,30763],{"class":55},[36,111904,101419],{"class":59},[36,111906,111907],{"class":59}," mujoco-reacher\n",[36,111909,111910,111912,111914,111916],{"class":38,"line":52},[36,111911,24270],{"class":55},[36,111913,160],{"class":59},[36,111915,101362],{"class":59},[36,111917,101365],{"class":59},[14,111919,101435],{},[571,111921,111922,111925,111928],{},[574,111923,111924],{},"本章使用低维状态，不使用图像输入。",[574,111926,111927],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[574,111929,111930,111931,828,111933,828,111935,111937],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[33,111932,104461],{},[33,111934,104791],{},[33,111936,104111],{}," 的方法一致。",[559,111939,101476],{"id":101475},[14,111941,111942],{},"Reacher 任务核心:",[26,111944,111947],{"className":111945,"code":111946,"language":5638,"meta":31},[5636],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[33,111948,111946],{"__ignoreMap":31},[14,111950,111951],{},"读取 site 世界坐标:",[26,111953,111955],{"className":30811,"code":111954,"language":30813,"meta":31,"style":31},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[33,111956,111957,111970],{"__ignoreMap":31},[36,111958,111959,111961,111963,111965,111968],{"class":38,"line":39},[36,111960,104065],{"class":98},[36,111962,176],{"class":163},[36,111964,103836],{"class":98},[36,111966,111967],{"class":59},"\"tip\"",[36,111969,627],{"class":98},[36,111971,111972,111975,111977],{"class":38,"line":46},[36,111973,111974],{"class":98},"tip_pos ",[36,111976,176],{"class":163},[36,111978,111979],{"class":98}," data.site_xpos[site_id]\n",[588,111981,111983],{"id":111982},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,111985,111986,111987,111989],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[33,111988,104461],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[26,111991,111993],{"className":30811,"code":111992,"language":30813,"meta":31,"style":31},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[33,111994,111995,112005],{"__ignoreMap":31},[36,111996,111997,112000,112002],{"class":38,"line":39},[36,111998,111999],{"class":98},"tip ",[36,112001,176],{"class":163},[36,112003,112004],{"class":98}," data.site_xpos[tip_site_id]\n",[36,112006,112007,112010,112012],{"class":38,"line":46},[36,112008,112009],{"class":98},"target ",[36,112011,176],{"class":163},[36,112013,112014],{"class":98}," data.site_xpos[target_site_id]\n",[14,112016,112017],{},"这样 reward 就很容易写：",[26,112019,112021],{"className":30811,"code":112020,"language":30813,"meta":31,"style":31},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[33,112022,112023,112038],{"__ignoreMap":31},[36,112024,112025,112028,112030,112033,112035],{"class":38,"line":39},[36,112026,112027],{"class":98},"dist ",[36,112029,176],{"class":163},[36,112031,112032],{"class":98}," np.linalg.norm(tip ",[36,112034,1146],{"class":163},[36,112036,112037],{"class":98}," target)\n",[36,112039,112040,112042,112044,112046],{"class":38,"line":46},[36,112041,111436],{"class":98},[36,112043,176],{"class":163},[36,112045,52703],{"class":163},[36,112047,112048],{"class":98},"dist\n",[14,112050,112051,112052,112055],{},"距离越小，",[33,112053,112054],{},"-dist"," 越接近 0，奖励越高。",[588,112057,112058],{"id":112058},"两关节机械臂的状态",[14,112060,112061],{},"这个模型有两个 hinge joint：",[26,112063,112066],{"className":112064,"code":112065,"language":5638,"meta":31},[5636],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[33,112067,112065],{"__ignoreMap":31},[14,112069,112070],{},"再加上末端和目标位置：",[26,112072,112075],{"className":112073,"code":112074,"language":5638,"meta":31},[5636],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[33,112076,112074],{"__ignoreMap":31},[14,112078,112079],{},"总维度：",[26,112081,112084],{"className":112082,"code":112083,"language":5638,"meta":31},[5636],"2 + 2 + 3 + 3 = 10\n",[33,112085,112083],{"__ignoreMap":31},[588,112087,112089],{"id":112088},"为什么-gravity-是-0","为什么 gravity 是 0",[14,112091,112092],{},"本章把重力设为：",[26,112094,112096],{"className":53499,"code":112095,"language":53501,"meta":31,"style":31},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[33,112097,112098],{"__ignoreMap":31},[36,112099,112100,112102,112104,112106,112108,112110,112112,112114,112116],{"class":38,"line":39},[36,112101,179],{"class":98},[36,112103,69598],{"class":51733},[36,112105,101625],{"class":55},[36,112107,176],{"class":98},[36,112109,101630],{"class":59},[36,112111,101633],{"class":55},[36,112113,176],{"class":98},[36,112115,104202],{"class":59},[36,112117,101575],{"class":98},[14,112119,112120],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[559,112122,101684],{"id":101683},[26,112124,112126],{"className":30811,"code":112125,"language":30813,"meta":31,"style":31},"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",[33,112127,112128,112134,112144,112148,112152,112160,112165,112170,112174,112178,112183,112188,112192,112197,112202,112207,112211,112216,112221,112226,112231,112235,112239,112243,112247,112251,112256,112261,112265,112269,112273,112277,112281,112296,112305,112317,112340,112347,112351,112355,112365,112379,112393,112400,112404,112408,112422,112434,112446,112459,112474,112491,112495,112499,112511,112523,112531,112539,112543,112559,112564,112577,112590,112605,112609,112644,112676,112680,112684,112693,112697,112713,112723,112734,112750,112766,112782,112798,112802,112820,112840,112859,112863,112867,112879],{"__ignoreMap":31},[36,112129,112130,112132],{"class":38,"line":39},[36,112131,30825],{"class":163},[36,112133,101732],{"class":98},[36,112135,112136,112138,112140,112142],{"class":38,"line":46},[36,112137,30825],{"class":163},[36,112139,31813],{"class":98},[36,112141,31816],{"class":163},[36,112143,31819],{"class":98},[36,112145,112146],{"class":38,"line":52},[36,112147,247],{"emptyLinePlaceholder":246},[36,112149,112150],{"class":38,"line":66},[36,112151,247],{"emptyLinePlaceholder":246},[36,112153,112154,112156,112158],{"class":38,"line":72},[36,112155,101745],{"class":109},[36,112157,14003],{"class":163},[36,112159,101750],{"class":59},[36,112161,112162],{"class":38,"line":82},[36,112163,112164],{"class":59},"\u003Cmujoco model=\"two_link_reacher\">\n",[36,112166,112167],{"class":38,"line":88},[36,112168,112169],{"class":59},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[36,112171,112172],{"class":38,"line":113},[36,112173,247],{"emptyLinePlaceholder":246},[36,112175,112176],{"class":38,"line":119},[36,112177,101769],{"class":59},[36,112179,112180],{"class":38,"line":131},[36,112181,112182],{"class":59},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[36,112184,112185],{"class":38,"line":137},[36,112186,112187],{"class":59},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[36,112189,112190],{"class":38,"line":147},[36,112191,247],{"emptyLinePlaceholder":246},[36,112193,112194],{"class":38,"line":153},[36,112195,112196],{"class":59},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[36,112198,112199],{"class":38,"line":191},[36,112200,112201],{"class":59},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[36,112203,112204],{"class":38,"line":197},[36,112205,112206],{"class":59},"      \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",[36,112208,112209],{"class":38,"line":217},[36,112210,247],{"emptyLinePlaceholder":246},[36,112212,112213],{"class":38,"line":223},[36,112214,112215],{"class":59},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[36,112217,112218],{"class":38,"line":243},[36,112219,112220],{"class":59},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[36,112222,112223],{"class":38,"line":250},[36,112224,112225],{"class":59},"        \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",[36,112227,112228],{"class":38,"line":256},[36,112229,112230],{"class":59},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[36,112232,112233],{"class":38,"line":273},[36,112234,106869],{"class":59},[36,112236,112237],{"class":38,"line":278},[36,112238,101798],{"class":59},[36,112240,112241],{"class":38,"line":284},[36,112242,101803],{"class":59},[36,112244,112245],{"class":38,"line":315},[36,112246,247],{"emptyLinePlaceholder":246},[36,112248,112249],{"class":38,"line":320},[36,112250,106886],{"class":59},[36,112252,112253],{"class":38,"line":326},[36,112254,112255],{"class":59},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[36,112257,112258],{"class":38,"line":343},[36,112259,112260],{"class":59},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[36,112262,112263],{"class":38,"line":348},[36,112264,106896],{"class":59},[36,112266,112267],{"class":38,"line":354},[36,112268,101808],{"class":59},[36,112270,112271],{"class":38,"line":370},[36,112272,96130],{"class":59},[36,112274,112275],{"class":38,"line":375},[36,112276,247],{"emptyLinePlaceholder":246},[36,112278,112279],{"class":38,"line":381},[36,112280,247],{"emptyLinePlaceholder":246},[36,112282,112283,112285,112288,112291,112293],{"class":38,"line":399},[36,112284,32380],{"class":163},[36,112286,112287],{"class":55}," site_position",[36,112289,112290],{"class":98},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[36,112292,1781],{"class":109},[36,112294,112295],{"class":98},") -> np.ndarray:\n",[36,112297,112298,112300,112302],{"class":38,"line":404},[36,112299,103831],{"class":98},[36,112301,176],{"class":163},[36,112303,112304],{"class":98}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[36,112306,112307,112309,112311,112313,112315],{"class":38,"line":410},[36,112308,3552],{"class":163},[36,112310,103880],{"class":98},[36,112312,179],{"class":163},[36,112314,4544],{"class":109},[36,112316,4190],{"class":98},[36,112318,112319,112321,112323,112325,112327,112330,112332,112334,112336,112338],{"class":38,"line":423},[36,112320,103863],{"class":163},[36,112322,103866],{"class":109},[36,112324,621],{"class":98},[36,112326,671],{"class":163},[36,112328,112329],{"class":59},"\"site not found: ",[36,112331,1509],{"class":109},[36,112333,80242],{"class":98},[36,112335,1558],{"class":109},[36,112337,866],{"class":59},[36,112339,627],{"class":98},[36,112341,112342,112344],{"class":38,"line":436},[36,112343,4541],{"class":163},[36,112345,112346],{"class":98}," data.site_xpos[site_id].copy()\n",[36,112348,112349],{"class":38,"line":441},[36,112350,247],{"emptyLinePlaceholder":246},[36,112352,112353],{"class":38,"line":447},[36,112354,247],{"emptyLinePlaceholder":246},[36,112356,112357,112359,112362],{"class":38,"line":465},[36,112358,32380],{"class":163},[36,112360,112361],{"class":55}," get_obs",[36,112363,112364],{"class":98},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[36,112366,112367,112370,112372,112375,112377],{"class":38,"line":470},[36,112368,112369],{"class":98},"    tip ",[36,112371,176],{"class":163},[36,112373,112374],{"class":98}," site_position(model, data, ",[36,112376,111967],{"class":59},[36,112378,627],{"class":98},[36,112380,112381,112384,112386,112388,112391],{"class":38,"line":476},[36,112382,112383],{"class":98},"    target ",[36,112385,176],{"class":163},[36,112387,112374],{"class":98},[36,112389,112390],{"class":59},"\"target\"",[36,112392,627],{"class":98},[36,112394,112395,112397],{"class":38,"line":496},[36,112396,4541],{"class":163},[36,112398,112399],{"class":98}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[36,112401,112402],{"class":38,"line":501},[36,112403,247],{"emptyLinePlaceholder":246},[36,112405,112406],{"class":38,"line":507},[36,112407,247],{"emptyLinePlaceholder":246},[36,112409,112410,112412,112415,112418,112420],{"class":38,"line":517},[36,112411,32380],{"class":163},[36,112413,112414],{"class":55}," reward",[36,112416,112417],{"class":98},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[36,112419,660],{"class":109},[36,112421,4190],{"class":98},[36,112423,112424,112426,112428,112430,112432],{"class":38,"line":522},[36,112425,112369],{"class":98},[36,112427,176],{"class":163},[36,112429,112374],{"class":98},[36,112431,111967],{"class":59},[36,112433,627],{"class":98},[36,112435,112436,112438,112440,112442,112444],{"class":38,"line":528},[36,112437,112383],{"class":98},[36,112439,176],{"class":163},[36,112441,112374],{"class":98},[36,112443,112390],{"class":59},[36,112445,627],{"class":98},[36,112447,112448,112451,112453,112455,112457],{"class":38,"line":10203},[36,112449,112450],{"class":98},"    dist ",[36,112452,176],{"class":163},[36,112454,112032],{"class":98},[36,112456,1146],{"class":163},[36,112458,112037],{"class":98},[36,112460,112461,112464,112466,112469,112471],{"class":38,"line":10227},[36,112462,112463],{"class":98},"    control_cost ",[36,112465,176],{"class":163},[36,112467,112468],{"class":109}," 0.01",[36,112470,6969],{"class":163},[36,112472,112473],{"class":98}," np.sum(np.square(data.ctrl))\n",[36,112475,112476,112478,112480,112482,112484,112486,112488],{"class":38,"line":10232},[36,112477,4541],{"class":163},[36,112479,110228],{"class":109},[36,112481,621],{"class":98},[36,112483,1146],{"class":163},[36,112485,112027],{"class":98},[36,112487,1146],{"class":163},[36,112489,112490],{"class":98}," control_cost)\n",[36,112492,112493],{"class":38,"line":10237},[36,112494,247],{"emptyLinePlaceholder":246},[36,112496,112497],{"class":38,"line":10242},[36,112498,247],{"emptyLinePlaceholder":246},[36,112500,112501,112503,112505,112507,112509],{"class":38,"line":10251},[36,112502,32380],{"class":163},[36,112504,2432],{"class":55},[36,112506,101829],{"class":98},[36,112508,96118],{"class":109},[36,112510,4190],{"class":98},[36,112512,112513,112515,112517,112519,112521],{"class":38,"line":10256},[36,112514,101838],{"class":98},[36,112516,176],{"class":163},[36,112518,101843],{"class":98},[36,112520,101745],{"class":109},[36,112522,627],{"class":98},[36,112524,112525,112527,112529],{"class":38,"line":10262},[36,112526,101852],{"class":98},[36,112528,176],{"class":163},[36,112530,101857],{"class":98},[36,112532,112533,112535,112537],{"class":38,"line":10283},[36,112534,110584],{"class":98},[36,112536,176],{"class":163},[36,112538,105192],{"class":109},[36,112540,112541],{"class":38,"line":10289},[36,112542,247],{"emptyLinePlaceholder":246},[36,112544,112545,112547,112549,112551,112553,112555,112557],{"class":38,"line":10303},[36,112546,3652],{"class":163},[36,112548,32049],{"class":98},[36,112550,26480],{"class":163},[36,112552,32876],{"class":109},[36,112554,621],{"class":98},[36,112556,65506],{"class":109},[36,112558,31219],{"class":98},[36,112560,112561],{"class":38,"line":10309},[36,112562,112563],{"class":98},"        mujoco.mj_forward(model, data)\n",[36,112565,112566,112569,112571,112573,112575],{"class":38,"line":10336},[36,112567,112568],{"class":98},"        tip ",[36,112570,176],{"class":163},[36,112572,112374],{"class":98},[36,112574,111967],{"class":59},[36,112576,627],{"class":98},[36,112578,112579,112582,112584,112586,112588],{"class":38,"line":10345},[36,112580,112581],{"class":98},"        target ",[36,112583,176],{"class":163},[36,112585,112374],{"class":98},[36,112587,112390],{"class":59},[36,112589,627],{"class":98},[36,112591,112592,112595,112597,112600,112602],{"class":38,"line":10351},[36,112593,112594],{"class":98},"        error ",[36,112596,176],{"class":163},[36,112598,112599],{"class":98}," target ",[36,112601,1146],{"class":163},[36,112603,112604],{"class":98}," tip\n",[36,112606,112607],{"class":38,"line":10359},[36,112608,247],{"emptyLinePlaceholder":246},[36,112610,112611,112613,112615,112617,112619,112622,112624,112626,112629,112631,112634,112636,112638,112640,112642],{"class":38,"line":10364},[36,112612,107048],{"class":98},[36,112614,807],{"class":109},[36,112616,4894],{"class":98},[36,112618,176],{"class":163},[36,112620,112621],{"class":98}," np.clip(",[36,112623,105691],{"class":109},[36,112625,6969],{"class":163},[36,112627,112628],{"class":98}," error[",[36,112630,694],{"class":109},[36,112632,112633],{"class":98},"], ",[36,112635,1146],{"class":163},[36,112637,102834],{"class":109},[36,112639,12874],{"class":98},[36,112641,102834],{"class":109},[36,112643,627],{"class":98},[36,112645,112646,112648,112650,112652,112654,112656,112658,112660,112662,112664,112666,112668,112670,112672,112674],{"class":38,"line":17043},[36,112647,107048],{"class":98},[36,112649,833],{"class":109},[36,112651,4894],{"class":98},[36,112653,176],{"class":163},[36,112655,112621],{"class":98},[36,112657,105691],{"class":109},[36,112659,6969],{"class":163},[36,112661,112628],{"class":98},[36,112663,807],{"class":109},[36,112665,112633],{"class":98},[36,112667,1146],{"class":163},[36,112669,102834],{"class":109},[36,112671,12874],{"class":98},[36,112673,102834],{"class":109},[36,112675,627],{"class":98},[36,112677,112678],{"class":38,"line":17049},[36,112679,247],{"emptyLinePlaceholder":246},[36,112681,112682],{"class":38,"line":17072},[36,112683,101947],{"class":98},[36,112685,112686,112688,112690],{"class":38,"line":17078},[36,112687,110728],{"class":98},[36,112689,9918],{"class":163},[36,112691,112692],{"class":98}," reward(model, data)\n",[36,112694,112695],{"class":38,"line":17101},[36,112696,247],{"emptyLinePlaceholder":246},[36,112698,112699,112701,112703,112705,112707,112709,112711],{"class":38,"line":17115},[36,112700,2955],{"class":163},[36,112702,32049],{"class":98},[36,112704,942],{"class":163},[36,112706,6205],{"class":109},[36,112708,101990],{"class":163},[36,112710,4544],{"class":109},[36,112712,4190],{"class":98},[36,112714,112715,112718,112720],{"class":38,"line":17135},[36,112716,112717],{"class":98},"            obs ",[36,112719,176],{"class":163},[36,112721,112722],{"class":98}," get_obs(model, data)\n",[36,112724,112725,112727,112729,112731],{"class":38,"line":17141},[36,112726,35083],{"class":109},[36,112728,621],{"class":98},[36,112730,110762],{"class":59},[36,112732,112733],{"class":98},", step)\n",[36,112735,112736,112738,112740,112743,112746,112748],{"class":38,"line":17152},[36,112737,35083],{"class":109},[36,112739,621],{"class":98},[36,112741,112742],{"class":59},"\"  tip:\"",[36,112744,112745],{"class":98},", np.round(tip, ",[36,112747,689],{"class":109},[36,112749,30930],{"class":98},[36,112751,112752,112754,112756,112759,112762,112764],{"class":38,"line":17175},[36,112753,35083],{"class":109},[36,112755,621],{"class":98},[36,112757,112758],{"class":59},"\"  target:\"",[36,112760,112761],{"class":98},", np.round(target, ",[36,112763,689],{"class":109},[36,112765,30930],{"class":98},[36,112767,112768,112770,112772,112775,112778,112780],{"class":38,"line":17197},[36,112769,35083],{"class":109},[36,112771,621],{"class":98},[36,112773,112774],{"class":59},"\"  ctrl:\"",[36,112776,112777],{"class":98},", np.round(data.ctrl.copy(), ",[36,112779,689],{"class":109},[36,112781,30930],{"class":98},[36,112783,112784,112786,112788,112791,112794,112796],{"class":38,"line":17202},[36,112785,35083],{"class":109},[36,112787,621],{"class":98},[36,112789,112790],{"class":59},"\"  obs_dim:\"",[36,112792,112793],{"class":98},", obs.shape[",[36,112795,807],{"class":109},[36,112797,5108],{"class":98},[36,112799,112800],{"class":38,"line":17208},[36,112801,247],{"emptyLinePlaceholder":246},[36,112803,112804,112806,112808,112810,112812,112814,112816,112818],{"class":38,"line":17222},[36,112805,31732],{"class":109},[36,112807,621],{"class":98},[36,112809,110807],{"class":59},[36,112811,12874],{"class":98},[36,112813,32451],{"class":109},[36,112815,110814],{"class":98},[36,112817,689],{"class":109},[36,112819,30930],{"class":98},[36,112821,112822,112824,112826,112829,112832,112834,112836,112838],{"class":38,"line":17235},[36,112823,31732],{"class":109},[36,112825,621],{"class":98},[36,112827,112828],{"class":59},"\"final tip:\"",[36,112830,112831],{"class":98},", np.round(site_position(model, data, ",[36,112833,111967],{"class":59},[36,112835,110776],{"class":98},[36,112837,689],{"class":109},[36,112839,30930],{"class":98},[36,112841,112842,112844,112846,112849,112851,112853,112855,112857],{"class":38,"line":17240},[36,112843,31732],{"class":109},[36,112845,621],{"class":98},[36,112847,112848],{"class":59},"\"target:\"",[36,112850,112831],{"class":98},[36,112852,112390],{"class":59},[36,112854,110776],{"class":98},[36,112856,689],{"class":109},[36,112858,30930],{"class":98},[36,112860,112861],{"class":38,"line":17254},[36,112862,247],{"emptyLinePlaceholder":246},[36,112864,112865],{"class":38,"line":17259},[36,112866,247],{"emptyLinePlaceholder":246},[36,112868,112869,112871,112873,112875,112877],{"class":38,"line":17265},[36,112870,2010],{"class":163},[36,112872,31653],{"class":109},[36,112874,101990],{"class":163},[36,112876,101993],{"class":59},[36,112878,4190],{"class":98},[36,112880,112881],{"class":38,"line":17270},[36,112882,102000],{"class":98},[14,112884,104001],{},[26,112886,112888],{"className":24261,"code":112887,"language":24263,"meta":31,"style":31},"touch ch7_reacher.py\n",[33,112889,112890],{"__ignoreMap":31},[36,112891,112892,112894],{"class":38,"line":39},[36,112893,101714],{"class":55},[36,112895,112896],{"class":59}," ch7_reacher.py\n",[14,112898,110875],{},[26,112900,112902],{"className":24261,"code":112901,"language":24263,"meta":31,"style":31},"python ch7_reacher.py\n",[33,112903,112904],{"__ignoreMap":31},[36,112905,112906,112908],{"class":38,"line":39},[36,112907,30813],{"class":55},[36,112909,112896],{"class":59},[588,112911,102003],{"id":102003},[14,112913,112914],{},"读取 site 坐标：",[26,112916,112918],{"className":30811,"code":112917,"language":30813,"meta":31,"style":31},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[33,112919,112920],{"__ignoreMap":31},[36,112921,112922,112924,112926,112928,112930],{"class":38,"line":39},[36,112923,32380],{"class":163},[36,112925,112287],{"class":55},[36,112927,112290],{"class":98},[36,112929,1781],{"class":109},[36,112931,112295],{"class":98},[14,112933,112934],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,112936,110891],{},[26,112938,112940],{"className":30811,"code":112939,"language":30813,"meta":31,"style":31},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[33,112941,112942],{"__ignoreMap":31},[36,112943,112944,112946],{"class":38,"line":39},[36,112945,17485],{"class":163},[36,112947,112399],{"class":98},[14,112949,112950],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,112952,110216],{},[26,112954,112956],{"className":30811,"code":112955,"language":30813,"meta":31,"style":31},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[33,112957,112958,112970,112983],{"__ignoreMap":31},[36,112959,112960,112962,112964,112966,112968],{"class":38,"line":39},[36,112961,112027],{"class":98},[36,112963,176],{"class":163},[36,112965,112032],{"class":98},[36,112967,1146],{"class":163},[36,112969,112037],{"class":98},[36,112971,112972,112975,112977,112979,112981],{"class":38,"line":46},[36,112973,112974],{"class":98},"control_cost ",[36,112976,176],{"class":163},[36,112978,112468],{"class":109},[36,112980,6969],{"class":163},[36,112982,112473],{"class":98},[36,112984,112985,112987,112989,112991,112993,112995,112997],{"class":38,"line":52},[36,112986,17485],{"class":163},[36,112988,110228],{"class":109},[36,112990,621],{"class":98},[36,112992,1146],{"class":163},[36,112994,112027],{"class":98},[36,112996,1146],{"class":163},[36,112998,112490],{"class":98},[14,113000,113001],{},"奖励由两部分组成：",[571,113003,113004,113009],{},[574,113005,113006,113008],{},[33,113007,112054],{},"：末端离目标越远，奖励越低。",[574,113010,113011,113014],{},[33,113012,113013],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,113016,113017],{},"简单控制器：",[26,113019,113021],{"className":30811,"code":113020,"language":30813,"meta":31,"style":31},"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",[33,113022,113023,113036,113068],{"__ignoreMap":31},[36,113024,113025,113028,113030,113032,113034],{"class":38,"line":39},[36,113026,113027],{"class":98},"error ",[36,113029,176],{"class":163},[36,113031,112599],{"class":98},[36,113033,1146],{"class":163},[36,113035,112604],{"class":98},[36,113037,113038,113040,113042,113044,113046,113048,113050,113052,113054,113056,113058,113060,113062,113064,113066],{"class":38,"line":46},[36,113039,106302],{"class":98},[36,113041,807],{"class":109},[36,113043,4894],{"class":98},[36,113045,176],{"class":163},[36,113047,112621],{"class":98},[36,113049,105691],{"class":109},[36,113051,6969],{"class":163},[36,113053,112628],{"class":98},[36,113055,694],{"class":109},[36,113057,112633],{"class":98},[36,113059,1146],{"class":163},[36,113061,102834],{"class":109},[36,113063,12874],{"class":98},[36,113065,102834],{"class":109},[36,113067,627],{"class":98},[36,113069,113070,113072,113074,113076,113078,113080,113082,113084,113086,113088,113090,113092,113094,113096,113098],{"class":38,"line":52},[36,113071,106302],{"class":98},[36,113073,833],{"class":109},[36,113075,4894],{"class":98},[36,113077,176],{"class":163},[36,113079,112621],{"class":98},[36,113081,105691],{"class":109},[36,113083,6969],{"class":163},[36,113085,112628],{"class":98},[36,113087,807],{"class":109},[36,113089,112633],{"class":98},[36,113091,1146],{"class":163},[36,113093,102834],{"class":109},[36,113095,12874],{"class":98},[36,113097,102834],{"class":109},[36,113099,627],{"class":98},[14,113101,113102],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[588,113104,102139],{"id":102139},[26,113106,113107],{"className":30811,"code":112917,"language":30813,"meta":31,"style":31},[33,113108,113109],{"__ignoreMap":31},[36,113110,113111,113113,113115,113117,113119],{"class":38,"line":39},[36,113112,32380],{"class":163},[36,113114,112287],{"class":55},[36,113116,112290],{"class":98},[36,113118,1781],{"class":109},[36,113120,112295],{"class":98},[14,113122,113123,113124,113126,113127,82971,113129,28819],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[33,113125,80242],{}," 是 site 的名字，比如 ",[33,113128,111967],{},[33,113130,112390],{},[26,113132,113134],{"className":30811,"code":113133,"language":30813,"meta":31,"style":31},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[33,113135,113136],{"__ignoreMap":31},[36,113137,113138,113140,113142],{"class":38,"line":39},[36,113139,104065],{"class":98},[36,113141,176],{"class":163},[36,113143,112304],{"class":98},[14,113145,113146],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[26,113148,113150],{"className":30811,"code":113149,"language":30813,"meta":31,"style":31},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[33,113151,113152,113164],{"__ignoreMap":31},[36,113153,113154,113156,113158,113160,113162],{"class":38,"line":39},[36,113155,2010],{"class":163},[36,113157,103880],{"class":98},[36,113159,179],{"class":163},[36,113161,4544],{"class":109},[36,113163,4190],{"class":98},[36,113165,113166,113168,113170,113172,113174,113176,113178,113180,113182,113184],{"class":38,"line":46},[36,113167,104326],{"class":163},[36,113169,103866],{"class":109},[36,113171,621],{"class":98},[36,113173,671],{"class":163},[36,113175,112329],{"class":59},[36,113177,1509],{"class":109},[36,113179,80242],{"class":98},[36,113181,1558],{"class":109},[36,113183,866],{"class":59},[36,113185,627],{"class":98},[14,113187,113188,113189,113192,113193,113195],{},"如果 site 没找到，就主动报错。",[33,113190,113191],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[33,113194,80242],{}," 的值放进字符串里。",[26,113197,113199],{"className":30811,"code":113198,"language":30813,"meta":31,"style":31},"return data.site_xpos[site_id].copy()\n",[33,113200,113201],{"__ignoreMap":31},[36,113202,113203,113205],{"class":38,"line":39},[36,113204,17485],{"class":163},[36,113206,112346],{"class":98},[14,113208,113209,113210,113212,113213,113216],{},"返回这个 site 的世界坐标。",[33,113211,104111],{}," 里的每一行都是一个 site 的 ",[33,113214,113215],{},"(x, y, z)"," 坐标。",[26,113218,113220],{"className":30811,"code":113219,"language":30813,"meta":31,"style":31},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[33,113221,113222],{"__ignoreMap":31},[36,113223,113224,113226,113228],{"class":38,"line":39},[36,113225,32380],{"class":163},[36,113227,112361],{"class":55},[36,113229,112364],{"class":98},[14,113231,113232],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[26,113234,113236],{"className":30811,"code":113235,"language":30813,"meta":31,"style":31},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[33,113237,113238,113250],{"__ignoreMap":31},[36,113239,113240,113242,113244,113246,113248],{"class":38,"line":39},[36,113241,111999],{"class":98},[36,113243,176],{"class":163},[36,113245,112374],{"class":98},[36,113247,111967],{"class":59},[36,113249,627],{"class":98},[36,113251,113252,113254,113256,113258,113260],{"class":38,"line":46},[36,113253,112009],{"class":98},[36,113255,176],{"class":163},[36,113257,112374],{"class":98},[36,113259,112390],{"class":59},[36,113261,627],{"class":98},[14,113263,113264],{},"分别读取末端点和目标点的世界坐标。",[26,113266,113267],{"className":30811,"code":112939,"language":30813,"meta":31,"style":31},[33,113268,113269],{"__ignoreMap":31},[36,113270,113271,113273],{"class":38,"line":39},[36,113272,17485],{"class":163},[36,113274,112399],{"class":98},[14,113276,113277],{},"把四部分拼成一个观测数组：",[26,113279,113282],{"className":113280,"code":113281,"language":5638,"meta":31},[5636],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[33,113283,113281],{"__ignoreMap":31},[26,113285,113287],{"className":30811,"code":113286,"language":30813,"meta":31,"style":31},"dist = np.linalg.norm(tip - target)\n",[33,113288,113289],{"__ignoreMap":31},[36,113290,113291,113293,113295,113297,113299],{"class":38,"line":39},[36,113292,112027],{"class":98},[36,113294,176],{"class":163},[36,113296,112032],{"class":98},[36,113298,1146],{"class":163},[36,113300,112037],{"class":98},[14,113302,113303,113304,113307,113308,113311],{},"计算 tip 到 target 的距离。",[33,113305,113306],{},"tip - target"," 得到一个三维向量，",[33,113309,113310],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,113313,15072],{},[26,113315,113318],{"className":113316,"code":113317,"language":5638,"meta":31},[5636],"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",[33,113319,113317],{"__ignoreMap":31},[26,113321,113323],{"className":30811,"code":113322,"language":30813,"meta":31,"style":31},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[33,113324,113325],{"__ignoreMap":31},[36,113326,113327,113329,113331,113333,113335],{"class":38,"line":39},[36,113328,112974],{"class":98},[36,113330,176],{"class":163},[36,113332,112468],{"class":109},[36,113334,6969],{"class":163},[36,113336,112473],{"class":98},[14,113338,113339,113340,113343,113344,113347],{},"计算动作惩罚。",[33,113341,113342],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[33,113345,113346],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[26,113349,113351],{"className":30811,"code":113350,"language":30813,"meta":31,"style":31},"return float(-dist - control_cost)\n",[33,113352,113353],{"__ignoreMap":31},[36,113354,113355,113357,113359,113361,113363,113365,113367],{"class":38,"line":39},[36,113356,17485],{"class":163},[36,113358,110228],{"class":109},[36,113360,621],{"class":98},[36,113362,1146],{"class":163},[36,113364,112027],{"class":98},[36,113366,1146],{"class":163},[36,113368,112490],{"class":98},[14,113370,113371],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[26,113373,113374],{"className":30811,"code":111234,"language":30813,"meta":31,"style":31},[33,113375,113376],{"__ignoreMap":31},[36,113377,113378,113380,113382],{"class":38,"line":39},[36,113379,111241],{"class":98},[36,113381,176],{"class":163},[36,113383,105192],{"class":109},[14,113385,113386],{},"累计奖励变量，记录整个运行过程的总分。",[26,113388,113390],{"className":30811,"code":113389,"language":30813,"meta":31,"style":31},"for step in range(500):\n",[33,113391,113392],{"__ignoreMap":31},[36,113393,113394,113396,113398,113400,113402,113404,113406],{"class":38,"line":39},[36,113395,3476],{"class":163},[36,113397,32049],{"class":98},[36,113399,26480],{"class":163},[36,113401,32876],{"class":109},[36,113403,621],{"class":98},[36,113405,65506],{"class":109},[36,113407,31219],{"class":98},[14,113409,113410],{},"运行 500 个控制步。",[26,113412,113413],{"className":30811,"code":104974,"language":30813,"meta":31,"style":31},[33,113414,113415],{"__ignoreMap":31},[36,113416,113417],{"class":38,"line":39},[36,113418,104974],{"class":98},[14,113420,113421,113422,101449,113424,113426],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[33,113423,103662],{},[33,113425,103665],{}," 是当前状态下的坐标。",[26,113428,113430],{"className":30811,"code":113429,"language":30813,"meta":31,"style":31},"error = target - tip\n",[33,113431,113432],{"__ignoreMap":31},[36,113433,113434,113436,113438,113440,113442],{"class":38,"line":39},[36,113435,113027],{"class":98},[36,113437,176],{"class":163},[36,113439,112599],{"class":98},[36,113441,1146],{"class":163},[36,113443,112604],{"class":98},[14,113445,113446],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[26,113448,113450],{"className":30811,"code":113449,"language":30813,"meta":31,"style":31},"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",[33,113451,113452,113484],{"__ignoreMap":31},[36,113453,113454,113456,113458,113460,113462,113464,113466,113468,113470,113472,113474,113476,113478,113480,113482],{"class":38,"line":39},[36,113455,106302],{"class":98},[36,113457,807],{"class":109},[36,113459,4894],{"class":98},[36,113461,176],{"class":163},[36,113463,112621],{"class":98},[36,113465,105691],{"class":109},[36,113467,6969],{"class":163},[36,113469,112628],{"class":98},[36,113471,694],{"class":109},[36,113473,112633],{"class":98},[36,113475,1146],{"class":163},[36,113477,102834],{"class":109},[36,113479,12874],{"class":98},[36,113481,102834],{"class":109},[36,113483,627],{"class":98},[36,113485,113486,113488,113490,113492,113494,113496,113498,113500,113502,113504,113506,113508,113510,113512,113514],{"class":38,"line":46},[36,113487,106302],{"class":98},[36,113489,833],{"class":109},[36,113491,4894],{"class":98},[36,113493,176],{"class":163},[36,113495,112621],{"class":98},[36,113497,105691],{"class":109},[36,113499,6969],{"class":163},[36,113501,112628],{"class":98},[36,113503,807],{"class":109},[36,113505,112633],{"class":98},[36,113507,1146],{"class":163},[36,113509,102834],{"class":109},[36,113511,12874],{"class":98},[36,113513,102834],{"class":109},[36,113515,627],{"class":98},[14,113517,113518,113519,113522],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[33,113520,113521],{},"error -> ctrl -> step"," 的流程。",[26,113524,113525],{"className":30811,"code":104936,"language":30813,"meta":31,"style":31},[33,113526,113527],{"__ignoreMap":31},[36,113528,113529],{"class":38,"line":39},[36,113530,104936],{"class":98},[14,113532,113533],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[26,113535,113537],{"className":30811,"code":113536,"language":30813,"meta":31,"style":31},"obs = get_obs(model, data)\n",[33,113538,113539],{"__ignoreMap":31},[36,113540,113541,113543,113545],{"class":38,"line":39},[36,113542,111285],{"class":98},[36,113544,176],{"class":163},[36,113546,112722],{"class":98},[14,113548,113549,113550,113553],{},"读取最新观测。后面打印 ",[33,113551,113552],{},"obs.shape[0]","，用来确认观测维度是 10。",[559,113555,102747],{"id":102746},[14,113557,113558],{},"观测维度为:",[26,113560,113563],{"className":113561,"code":113562,"language":5638,"meta":31},[5636],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[33,113564,113562],{"__ignoreMap":31},[14,113566,113567],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,113569,113570],{},"程序每 100 步打印：",[26,113572,113575],{"className":113573,"code":113574,"language":5638,"meta":31},[5636],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[33,113576,113574],{"__ignoreMap":31},[14,113578,113579,113580,113582],{},"如果控制有效，你应该看到最终 ",[33,113581,103662],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[559,113584,102779],{"id":102778},[571,113586,113587,113590,113593,113599,113605,113612,113622],{},[574,113588,113589],{},"修改目标点位置。",[574,113591,113592],{},"重新运行，观察最终 tip 是否变化。",[574,113594,113595,113596,113598],{},"把 gravity 改成 ",[33,113597,103020],{},"，观察控制是否变差。",[574,113600,111612,113601,111616,113603,28819],{},[33,113602,102589],{},[33,113604,694],{},[574,113606,102842,113607,102845,113609,113611],{},[33,113608,111027],{},[33,113610,107738],{},"，观察机械臂是否更难移动。",[574,113613,102842,113614,82962,113616,102845,113618,113621],{},[33,113615,103665],{},[33,113617,104577],{},[33,113619,113620],{},"0.2 0 0.6","，观察 reward 和 final tip。",[574,113623,113624],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[559,113626,102884],{"id":102883},[588,113628,113630],{"id":113629},"site-not-found",[33,113631,113632],{},"site not found",[14,113634,113635,113636,101449,113639,28819],{},"检查 XML 中是否有 ",[33,113637,113638],{},"site name=\"tip\"",[33,113640,113641],{},"site name=\"target\"",[588,113643,113644],{"id":113644},"机械臂完全不动",[14,113646,102954],{},[571,113648,113649,113654,113657,113662],{},[574,113650,113651,113653],{},[33,113652,102589],{}," 是否为 2",[574,113655,113656],{},"actuator 是否引用正确 joint",[574,113658,113659,113661],{},[33,113660,101507],{}," 是否被赋值",[574,113663,113664,113665],{},"是否执行了 ",[33,113666,101117],{},[588,113668,113669],{"id":113669},"控制效果不好",[14,113671,113672],{},"正常。本章重点不是控制器最优，而是任务结构:",[26,113674,113677],{"className":113675,"code":113676,"language":5638,"meta":31},[5636],"obs → action → mj_step → reward → next_obs\n",[33,113678,113676],{"__ignoreMap":31},[588,113680,113682],{"id":113681},"tip-坐标不变化","tip 坐标不变化",[14,113684,103006],{},[571,113686,113687,113692,113700,113709],{},[574,113688,113689,113690,28819],{},"是否每步调用了 ",[33,113691,101117],{},[574,113693,113694,113695,101449,113697,28819],{},"是否写入了 ",[33,113696,106557],{},[33,113698,113699],{},"data.ctrl[1]",[574,113701,113702,113703,828,113706,28819],{},"actuator 是否正确引用 ",[33,113704,113705],{},"joint1",[33,113707,113708],{},"joint2",[574,113710,113711],{},"控制输入是否太小。",[588,113713,113714],{"id":113714},"目标点不会动",[14,113716,113717],{},"本章的 target 是固定 site：",[26,113719,113721],{"className":53499,"code":113720,"language":53501,"meta":31,"style":31},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[33,113722,113723],{"__ignoreMap":31},[36,113724,113725,113727,113729,113731,113733,113735,113737,113739,113742],{"class":38,"line":39},[36,113726,179],{"class":98},[36,113728,103641],{"class":51733},[36,113730,15359],{"class":55},[36,113732,176],{"class":98},[36,113734,112390],{"class":59},[36,113736,101537],{"class":55},[36,113738,176],{"class":98},[36,113740,113741],{"class":59},"\"0.5 0 0.4\"",[36,113743,113744],{"class":98}," ...\u002F>\n",[14,113746,113747,113748,113750],{},"它直接挂在 ",[33,113749,102272],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[588,113752,113753],{"id":113753},"机械臂不像真实机械臂",[14,113755,113756],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[559,113758,103038],{"id":103037},[14,113760,113761],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,113763,113764],{},"核心公式：",[26,113766,113769],{"className":113767,"code":113768,"language":5638,"meta":31},[5636],"distance = ||tip - target||\nreward = -distance - action_cost\n",[33,113770,113768],{"__ignoreMap":31},[14,113772,113773],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[537,113775,113776],{},"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":31,"searchDepth":46,"depth":46,"links":113778},[113779,113780,113781,113786,113790,113791,113792,113800],{"id":101078,"depth":46,"text":101079},{"id":101201,"depth":46,"text":101202},{"id":101475,"depth":46,"text":101476,"children":113782},[113783,113784,113785],{"id":111982,"depth":52,"text":111983},{"id":112058,"depth":52,"text":112058},{"id":112088,"depth":52,"text":112089},{"id":101683,"depth":46,"text":101684,"children":113787},[113788,113789],{"id":102003,"depth":52,"text":102003},{"id":102139,"depth":52,"text":102139},{"id":102746,"depth":46,"text":102747},{"id":102778,"depth":46,"text":102779},{"id":102883,"depth":46,"text":102884,"children":113793},[113794,113795,113796,113797,113798,113799],{"id":113629,"depth":52,"text":113632},{"id":113644,"depth":52,"text":113644},{"id":113669,"depth":52,"text":113669},{"id":113681,"depth":52,"text":113682},{"id":113714,"depth":52,"text":113714},{"id":113753,"depth":52,"text":113753},{"id":103037,"depth":46,"text":103038},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111786,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113807,"title":113808,"body":113809,"description":31,"extension":543,"meta":117271,"navigation":246,"path":117272,"seo":117273,"stem":117274,"__hash__":117275},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113810,"toc":117242},[113811,113814,113816,113819,113822,113847,113850,113856,113859,113865,113867,113869,113893,113895,113913,113915,113958,113960,113987,113989,113992,114044,114047,114053,114062,114065,114103,114106,114145,114148,114156,114163,114166,114172,114174,114228,114235,114280,114283,114287,114303,114313,114315,115576,115578,115590,115592,115603,115605,115608,115629,115632,115635,115668,115674,115677,115710,115713,115716,115757,115762,115776,115779,115792,115797,115820,115822,115837,115847,115862,115869,115889,115904,115922,115925,115942,115950,115966,115972,116004,116017,116049,116059,116094,116108,116154,116168,116210,116221,116234,116240,116273,116276,116303,116313,116353,116363,116380,116387,116405,116408,116449,116462,116477,116480,116503,116506,116518,116521,116540,116545,116566,116569,116584,116587,116621,116633,116648,116651,116676,116679,116698,116701,116733,116736,116760,116766,116796,116803,116816,116819,116821,116823,116829,116832,116835,116847,116850,116852,116906,116908,116912,116918,116927,116930,116937,116939,116962,116965,116969,116971,116989,116995,116997,117030,117033,117039,117043,117046,117066,117071,117075,117082,117102,117107,117111,117114,117134,117137,117223,117227,117230,117236,117239],[10,113812,113808],{"id":113813},"_8gymnasium-风格强化学习接口基础",[559,113815,101079],{"id":101078},[14,113817,113818],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,113820,113821],{},"你将实现:",[26,113823,113825],{"className":30811,"code":113824,"language":30813,"meta":31,"style":31},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[33,113826,113827,113837],{"__ignoreMap":31},[36,113828,113829,113832,113834],{"class":38,"line":39},[36,113830,113831],{"class":98},"obs, info ",[36,113833,176],{"class":163},[36,113835,113836],{"class":98}," env.reset()\n",[36,113838,113839,113842,113844],{"class":38,"line":46},[36,113840,113841],{"class":98},"obs, reward, terminated, truncated, info ",[36,113843,176],{"class":163},[36,113845,113846],{"class":98}," env.step(action)\n",[14,113848,113849],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,113851,113852,113853,113855],{},"前面章节的代码都是“脚本式”的：在 ",[33,113854,102726],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,113857,113858],{},"可以先记住 Gymnasium 环境的核心交互：",[26,113860,113863],{"className":113861,"code":113862,"language":5638,"meta":31},[5636],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[33,113864,113862],{"__ignoreMap":31},[559,113866,101202],{"id":101201},[14,113868,101205],{},[26,113870,113871],{"className":24261,"code":104819,"language":24263,"meta":31,"style":31},[33,113872,113873],{"__ignoreMap":31},[36,113874,113875,113877,113879,113881,113883,113885,113887,113889,113891],{"class":38,"line":39},[36,113876,56],{"class":55},[36,113878,26749],{"class":59},[36,113880,160],{"class":59},[36,113882,26834],{"class":109},[36,113884,104834],{"class":59},[36,113886,101230],{"class":59},[36,113888,102932],{"class":59},[36,113890,101246],{"class":59},[36,113892,104843],{"class":59},[14,113894,103250],{},[26,113896,113898],{"className":24261,"code":113897,"language":24263,"meta":31,"style":31},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[33,113899,113900],{"__ignoreMap":31},[36,113901,113902,113904,113906,113908,113910],{"class":38,"line":39},[36,113903,24270],{"class":55},[36,113905,160],{"class":59},[36,113907,101362],{"class":59},[36,113909,108142],{"class":59},[36,113911,113912],{"class":59}," gymnasium\n",[14,113914,103267],{},[26,113916,113918],{"className":24261,"code":113917,"language":24263,"meta":31,"style":31},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[33,113919,113920,113937,113946],{"__ignoreMap":31},[36,113921,113922,113924,113926,113928,113931,113933,113935],{"class":38,"line":39},[36,113923,30763],{"class":55},[36,113925,29609],{"class":59},[36,113927,25552],{"class":109},[36,113929,113930],{"class":59}," mujoco-gym-api",[36,113932,101407],{"class":59},[36,113934,101410],{"class":109},[36,113936,110],{"class":109},[36,113938,113939,113941,113943],{"class":38,"line":46},[36,113940,30763],{"class":55},[36,113942,101419],{"class":59},[36,113944,113945],{"class":59}," mujoco-gym-api\n",[36,113947,113948,113950,113952,113954,113956],{"class":38,"line":52},[36,113949,24270],{"class":55},[36,113951,160],{"class":59},[36,113953,101362],{"class":59},[36,113955,108142],{"class":59},[36,113957,113912],{"class":59},[14,113959,101435],{},[571,113961,113962,113972,113975,113981],{},[574,113963,113964,113965,113968,113969,28819],{},"本章使用 ",[33,113966,113967],{},"gymnasium","，不是旧版 ",[33,113970,113971],{},"gym",[574,113973,113974],{},"Gymnasium API 与旧 Gym API 有差异。",[574,113976,113977,113978,28819],{},"旧 Gym 常见返回值是 4 个: ",[33,113979,113980],{},"obs, reward, done, info",[574,113982,113983,113984,28819],{},"Gymnasium 返回值是 5 个: ",[33,113985,113986],{},"obs, reward, terminated, truncated, info",[559,113988,101476],{"id":101475},[14,113990,113991],{},"强化学习环境接口包含:",[753,113993,113994,114003],{},[756,113995,113996],{},[759,113997,113998,114001],{},[762,113999,114000],{"align":24175},"方法",[762,114002,103127],{"align":24175},[800,114004,114005,114015,114025,114035],{},[759,114006,114007,114012],{},[805,114008,114009],{"align":24175},[33,114010,114011],{},"reset()",[805,114013,114014],{"align":24175},"重置环境",[759,114016,114017,114022],{},[805,114018,114019],{"align":24175},[33,114020,114021],{},"step(action)",[805,114023,114024],{"align":24175},"执行动作",[759,114026,114027,114032],{},[805,114028,114029],{"align":24175},[33,114030,114031],{},"observation_space",[805,114033,114034],{"align":24175},"观测空间",[759,114036,114037,114042],{},[805,114038,114039],{"align":24175},[33,114040,114041],{},"action_space",[805,114043,24093],{"align":24175},[14,114045,114046],{},"一个最小环境需要完成:",[26,114048,114051],{"className":114049,"code":114050,"language":5638,"meta":31},[5636],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[33,114052,114050],{"__ignoreMap":31},[588,114054,114056,101449,114059,105069],{"id":114055},"terminated-和-truncated-的区别",[33,114057,114058],{},"terminated",[33,114060,114061],{},"truncated",[14,114063,114064],{},"Gymnasium 把“结束”拆成两个概念：",[753,114066,114067,114077],{},[756,114068,114069],{},[759,114070,114071,114073,114075],{},[762,114072,105005],{"align":24175},[762,114074,101132],{"align":24175},[762,114076,21626],{"align":24175},[800,114078,114079,114091],{},[759,114080,114081,114085,114088],{},[805,114082,114083],{"align":24175},[33,114084,114058],{},[805,114086,114087],{"align":24175},"任务自然结束",[805,114089,114090],{"align":24175},"机械臂到达目标、机器人摔倒",[759,114092,114093,114097,114100],{},[805,114094,114095],{"align":24175},[33,114096,114061],{},[805,114098,114099],{"align":24175},"因外部限制截断",[805,114101,114102],{"align":24175},"达到最大步数、时间限制",[14,114104,114105],{},"本章中：",[26,114107,114109],{"className":30811,"code":114108,"language":30813,"meta":31,"style":31},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[33,114110,114111,114126],{"__ignoreMap":31},[36,114112,114113,114116,114118,114121,114123],{"class":38,"line":39},[36,114114,114115],{"class":98},"terminated ",[36,114117,176],{"class":163},[36,114119,114120],{"class":98}," dist ",[36,114122,179],{"class":163},[36,114124,114125],{"class":109}," 0.05\n",[36,114127,114128,114131,114133,114135,114138,114140,114142],{"class":38,"line":46},[36,114129,114130],{"class":98},"truncated ",[36,114132,176],{"class":163},[36,114134,39306],{"class":109},[36,114136,114137],{"class":98},".steps ",[36,114139,2178],{"class":163},[36,114141,39306],{"class":109},[36,114143,114144],{"class":98},".max_steps\n",[14,114146,114147],{},"也就是：",[571,114149,114150,114153],{},[574,114151,114152],{},"末端距离目标小于 0.05，任务成功结束。",[574,114154,114155],{},"步数超过上限，episode 被截断。",[588,114157,114159,101449,114161],{"id":114158},"observation_space-和-action_space",[33,114160,114031],{},[33,114162,114041],{},[14,114164,114165],{},"这两个对象告诉算法：",[26,114167,114170],{"className":114168,"code":114169,"language":5638,"meta":31},[5636],"观测长什么样\n动作允许多大\n",[33,114171,114169],{"__ignoreMap":31},[14,114173,15072],{},[26,114175,114177],{"className":30811,"code":114176,"language":30813,"meta":31,"style":31},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[33,114178,114179],{"__ignoreMap":31},[36,114180,114181,114183,114186,114188,114191,114194,114197,114199,114201,114204,114206,114208,114210,114212,114214,114216,114218,114221,114223,114225],{"class":38,"line":39},[36,114182,31256],{"class":109},[36,114184,114185],{"class":98},".action_space ",[36,114187,176],{"class":163},[36,114189,114190],{"class":98}," spaces.Box(",[36,114192,114193],{"class":5667},"low",[36,114195,114196],{"class":163},"=-",[36,114198,102834],{"class":109},[36,114200,12874],{"class":98},[36,114202,114203],{"class":5667},"high",[36,114205,176],{"class":163},[36,114207,102834],{"class":109},[36,114209,12874],{"class":98},[36,114211,96395],{"class":5667},[36,114213,176],{"class":163},[36,114215,621],{"class":98},[36,114217,694],{"class":109},[36,114219,114220],{"class":98},",), ",[36,114222,93932],{"class":5667},[36,114224,176],{"class":163},[36,114226,114227],{"class":98},"np.float32)\n",[14,114229,114230,114231,114234],{},"表示动作是 2 维数组，每个值都在 ",[33,114232,114233],{},"[-1, 1]"," 范围内。",[26,114236,114238],{"className":30811,"code":114237,"language":30813,"meta":31,"style":31},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[33,114239,114240],{"__ignoreMap":31},[36,114241,114242,114244,114247,114249,114251,114253,114255,114258,114260,114262,114264,114266,114268,114270,114272,114274,114276,114278],{"class":38,"line":39},[36,114243,31256],{"class":109},[36,114245,114246],{"class":98},".observation_space ",[36,114248,176],{"class":163},[36,114250,114190],{"class":98},[36,114252,114193],{"class":5667},[36,114254,114196],{"class":163},[36,114256,114257],{"class":98},"np.inf, ",[36,114259,114203],{"class":5667},[36,114261,176],{"class":163},[36,114263,114257],{"class":98},[36,114265,96395],{"class":5667},[36,114267,176],{"class":163},[36,114269,621],{"class":98},[36,114271,1060],{"class":109},[36,114273,114220],{"class":98},[36,114275,93932],{"class":5667},[36,114277,176],{"class":163},[36,114279,114227],{"class":98},[14,114281,114282],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[588,114284,114286],{"id":114285},"frame_skip-是什么","frame_skip 是什么",[26,114288,114290],{"className":30811,"code":114289,"language":30813,"meta":31,"style":31},"self.frame_skip = 5\n",[33,114291,114292],{"__ignoreMap":31},[36,114293,114294,114296,114299,114301],{"class":38,"line":39},[36,114295,31256],{"class":109},[36,114297,114298],{"class":98},".frame_skip ",[36,114300,176],{"class":163},[36,114302,54859],{"class":109},[14,114304,114305,114306,114309,114310,114312],{},"表示外部调用一次 ",[33,114307,114308],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[33,114311,101646],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[559,114314,101684],{"id":101683},[26,114316,114318],{"className":30811,"code":114317,"language":30813,"meta":31,"style":31},"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",[33,114319,114320,114332,114338,114348,114359,114363,114367,114375,114380,114384,114388,114392,114396,114400,114404,114408,114413,114417,114421,114425,114430,114434,114438,114442,114446,114450,114454,114458,114462,114466,114470,114474,114478,114482,114500,114515,114519,114532,114542,114557,114574,114578,114599,114618,114643,114657,114661,114671,114683,114693,114697,114739,114777,114781,114791,114807,114822,114841,114848,114852,114865,114880,114895,114908,114927,114943,114947,114988,115003,115018,115022,115061,115072,115085,115089,115099,115108,115112,115122,115137,115155,115159,115170,115187,115200,115204,115214,115218,115229,115240,115244,115258,115272,115288,115292,115305,115322,115337,115344,115348,115352,115364,115374,115392,115404,115416,115420,115428,115444,115453,115462,115470,115512,115525,115530,115534,115552,115556,115560,115572],{"__ignoreMap":31},[36,114321,114322,114324,114327,114329],{"class":38,"line":39},[36,114323,30825],{"class":163},[36,114325,114326],{"class":98}," gymnasium ",[36,114328,31816],{"class":163},[36,114330,114331],{"class":98}," gym\n",[36,114333,114334,114336],{"class":38,"line":46},[36,114335,30825],{"class":163},[36,114337,101732],{"class":98},[36,114339,114340,114342,114344,114346],{"class":38,"line":52},[36,114341,30825],{"class":163},[36,114343,31813],{"class":98},[36,114345,31816],{"class":163},[36,114347,31819],{"class":98},[36,114349,114350,114352,114354,114356],{"class":38,"line":66},[36,114351,31170],{"class":163},[36,114353,114326],{"class":98},[36,114355,30825],{"class":163},[36,114357,114358],{"class":98}," spaces\n",[36,114360,114361],{"class":38,"line":72},[36,114362,247],{"emptyLinePlaceholder":246},[36,114364,114365],{"class":38,"line":82},[36,114366,247],{"emptyLinePlaceholder":246},[36,114368,114369,114371,114373],{"class":38,"line":88},[36,114370,101745],{"class":109},[36,114372,14003],{"class":163},[36,114374,101750],{"class":59},[36,114376,114377],{"class":38,"line":113},[36,114378,114379],{"class":59},"\u003Cmujoco model=\"gym_reacher\">\n",[36,114381,114382],{"class":38,"line":119},[36,114383,112169],{"class":59},[36,114385,114386],{"class":38,"line":131},[36,114387,247],{"emptyLinePlaceholder":246},[36,114389,114390],{"class":38,"line":137},[36,114391,101769],{"class":59},[36,114393,114394],{"class":38,"line":147},[36,114395,112187],{"class":59},[36,114397,114398],{"class":38,"line":153},[36,114399,247],{"emptyLinePlaceholder":246},[36,114401,114402],{"class":38,"line":191},[36,114403,112196],{"class":59},[36,114405,114406],{"class":38,"line":197},[36,114407,112201],{"class":59},[36,114409,114410],{"class":38,"line":217},[36,114411,114412],{"class":59},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[36,114414,114415],{"class":38,"line":223},[36,114416,247],{"emptyLinePlaceholder":246},[36,114418,114419],{"class":38,"line":243},[36,114420,112215],{"class":59},[36,114422,114423],{"class":38,"line":250},[36,114424,112220],{"class":59},[36,114426,114427],{"class":38,"line":256},[36,114428,114429],{"class":59},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[36,114431,114432],{"class":38,"line":273},[36,114433,112230],{"class":59},[36,114435,114436],{"class":38,"line":278},[36,114437,106869],{"class":59},[36,114439,114440],{"class":38,"line":284},[36,114441,101798],{"class":59},[36,114443,114444],{"class":38,"line":315},[36,114445,101803],{"class":59},[36,114447,114448],{"class":38,"line":320},[36,114449,247],{"emptyLinePlaceholder":246},[36,114451,114452],{"class":38,"line":326},[36,114453,106886],{"class":59},[36,114455,114456],{"class":38,"line":343},[36,114457,112255],{"class":59},[36,114459,114460],{"class":38,"line":348},[36,114461,112260],{"class":59},[36,114463,114464],{"class":38,"line":354},[36,114465,106896],{"class":59},[36,114467,114468],{"class":38,"line":370},[36,114469,101808],{"class":59},[36,114471,114472],{"class":38,"line":375},[36,114473,96130],{"class":59},[36,114475,114476],{"class":38,"line":381},[36,114477,247],{"emptyLinePlaceholder":246},[36,114479,114480],{"class":38,"line":399},[36,114481,247],{"emptyLinePlaceholder":246},[36,114483,114484,114486,114489,114491,114493,114495,114498],{"class":38,"line":404},[36,114485,15133],{"class":163},[36,114487,114488],{"class":55}," ReacherEnv",[36,114490,621],{"class":98},[36,114492,113971],{"class":55},[36,114494,1172],{"class":98},[36,114496,114497],{"class":55},"Env",[36,114499,31219],{"class":98},[36,114501,114502,114505,114507,114509,114512],{"class":38,"line":410},[36,114503,114504],{"class":98},"    metadata ",[36,114506,176],{"class":163},[36,114508,4899],{"class":98},[36,114510,114511],{"class":59},"\"render_modes\"",[36,114513,114514],{"class":98},": []}\n",[36,114516,114517],{"class":38,"line":423},[36,114518,247],{"emptyLinePlaceholder":246},[36,114520,114521,114523,114525,114528,114530],{"class":38,"line":436},[36,114522,31234],{"class":163},[36,114524,31237],{"class":109},[36,114526,114527],{"class":98},"(self) -> ",[36,114529,96118],{"class":109},[36,114531,4190],{"class":98},[36,114533,114534,114536,114538,114540],{"class":38,"line":441},[36,114535,31250],{"class":109},[36,114537,17700],{"class":98},[36,114539,31262],{"class":109},[36,114541,2435],{"class":98},[36,114543,114544,114546,114549,114551,114553,114555],{"class":38,"line":447},[36,114545,31278],{"class":109},[36,114547,114548],{"class":98},".model ",[36,114550,176],{"class":163},[36,114552,101843],{"class":98},[36,114554,101745],{"class":109},[36,114556,627],{"class":98},[36,114558,114559,114561,114564,114566,114569,114571],{"class":38,"line":465},[36,114560,31278],{"class":109},[36,114562,114563],{"class":98},".data ",[36,114565,176],{"class":163},[36,114567,114568],{"class":98}," mujoco.MjData(",[36,114570,31256],{"class":109},[36,114572,114573],{"class":98},".model)\n",[36,114575,114576],{"class":38,"line":470},[36,114577,247],{"emptyLinePlaceholder":246},[36,114579,114580,114582,114585,114587,114590,114592,114595,114597],{"class":38,"line":476},[36,114581,31278],{"class":109},[36,114583,114584],{"class":98},".tip_site_id ",[36,114586,176],{"class":163},[36,114588,114589],{"class":98}," mujoco.mj_name2id(",[36,114591,31256],{"class":109},[36,114593,114594],{"class":98},".model, mujoco.mjtObj.mjOBJ_SITE, ",[36,114596,111967],{"class":59},[36,114598,627],{"class":98},[36,114600,114601,114603,114606,114608,114610,114612,114614,114616],{"class":38,"line":496},[36,114602,31278],{"class":109},[36,114604,114605],{"class":98},".target_site_id ",[36,114607,176],{"class":163},[36,114609,114589],{"class":98},[36,114611,31256],{"class":109},[36,114613,114594],{"class":98},[36,114615,112390],{"class":59},[36,114617,627],{"class":98},[36,114619,114620,114622,114624,114626,114628,114630,114633,114635,114637,114639,114641],{"class":38,"line":501},[36,114621,2955],{"class":163},[36,114623,39306],{"class":109},[36,114625,114584],{"class":98},[36,114627,179],{"class":163},[36,114629,4544],{"class":109},[36,114631,114632],{"class":163}," or",[36,114634,39306],{"class":109},[36,114636,114605],{"class":98},[36,114638,179],{"class":163},[36,114640,4544],{"class":109},[36,114642,4190],{"class":98},[36,114644,114645,114648,114650,114652,114655],{"class":38,"line":507},[36,114646,114647],{"class":163},"            raise",[36,114649,103866],{"class":109},[36,114651,621],{"class":98},[36,114653,114654],{"class":59},"\"required sites not found\"",[36,114656,627],{"class":98},[36,114658,114659],{"class":38,"line":517},[36,114660,247],{"emptyLinePlaceholder":246},[36,114662,114663,114665,114667,114669],{"class":38,"line":522},[36,114664,31278],{"class":109},[36,114666,114298],{"class":98},[36,114668,176],{"class":163},[36,114670,54859],{"class":109},[36,114672,114673,114675,114678,114680],{"class":38,"line":528},[36,114674,31278],{"class":109},[36,114676,114677],{"class":98},".max_steps ",[36,114679,176],{"class":163},[36,114681,114682],{"class":109}," 200\n",[36,114684,114685,114687,114689,114691],{"class":38,"line":10203},[36,114686,31278],{"class":109},[36,114688,114137],{"class":98},[36,114690,176],{"class":163},[36,114692,47766],{"class":109},[36,114694,114695],{"class":38,"line":10227},[36,114696,247],{"emptyLinePlaceholder":246},[36,114698,114699,114701,114703,114705,114707,114709,114711,114713,114715,114717,114719,114721,114723,114725,114727,114729,114731,114733,114735,114737],{"class":38,"line":10232},[36,114700,31278],{"class":109},[36,114702,114185],{"class":98},[36,114704,176],{"class":163},[36,114706,114190],{"class":98},[36,114708,114193],{"class":5667},[36,114710,114196],{"class":163},[36,114712,102834],{"class":109},[36,114714,12874],{"class":98},[36,114716,114203],{"class":5667},[36,114718,176],{"class":163},[36,114720,102834],{"class":109},[36,114722,12874],{"class":98},[36,114724,96395],{"class":5667},[36,114726,176],{"class":163},[36,114728,621],{"class":98},[36,114730,694],{"class":109},[36,114732,114220],{"class":98},[36,114734,93932],{"class":5667},[36,114736,176],{"class":163},[36,114738,114227],{"class":98},[36,114740,114741,114743,114745,114747,114749,114751,114753,114755,114757,114759,114761,114763,114765,114767,114769,114771,114773,114775],{"class":38,"line":10237},[36,114742,31278],{"class":109},[36,114744,114246],{"class":98},[36,114746,176],{"class":163},[36,114748,114190],{"class":98},[36,114750,114193],{"class":5667},[36,114752,114196],{"class":163},[36,114754,114257],{"class":98},[36,114756,114203],{"class":5667},[36,114758,176],{"class":163},[36,114760,114257],{"class":98},[36,114762,96395],{"class":5667},[36,114764,176],{"class":163},[36,114766,621],{"class":98},[36,114768,1060],{"class":109},[36,114770,114220],{"class":98},[36,114772,93932],{"class":5667},[36,114774,176],{"class":163},[36,114776,114227],{"class":98},[36,114778,114779],{"class":38,"line":10242},[36,114780,247],{"emptyLinePlaceholder":246},[36,114782,114783,114785,114788],{"class":38,"line":10251},[36,114784,31234],{"class":163},[36,114786,114787],{"class":55}," _get_obs",[36,114789,114790],{"class":98},"(self) -> np.ndarray:\n",[36,114792,114793,114795,114797,114799,114802,114804],{"class":38,"line":10256},[36,114794,112568],{"class":98},[36,114796,176],{"class":163},[36,114798,39306],{"class":109},[36,114800,114801],{"class":98},".data.site_xpos[",[36,114803,31256],{"class":109},[36,114805,114806],{"class":98},".tip_site_id].copy()\n",[36,114808,114809,114811,114813,114815,114817,114819],{"class":38,"line":10262},[36,114810,112581],{"class":98},[36,114812,176],{"class":163},[36,114814,39306],{"class":109},[36,114816,114801],{"class":98},[36,114818,31256],{"class":109},[36,114820,114821],{"class":98},".target_site_id].copy()\n",[36,114823,114824,114826,114828,114831,114833,114836,114838],{"class":38,"line":10283},[36,114825,110613],{"class":98},[36,114827,176],{"class":163},[36,114829,114830],{"class":98}," np.concatenate([",[36,114832,31256],{"class":109},[36,114834,114835],{"class":98},".data.qpos.copy(), ",[36,114837,31256],{"class":109},[36,114839,114840],{"class":98},".data.qvel.copy(), tip, target])\n",[36,114842,114843,114845],{"class":38,"line":10289},[36,114844,15191],{"class":163},[36,114846,114847],{"class":98}," obs.astype(np.float32)\n",[36,114849,114850],{"class":38,"line":10303},[36,114851,247],{"emptyLinePlaceholder":246},[36,114853,114854,114856,114859,114861,114863],{"class":38,"line":10309},[36,114855,31234],{"class":163},[36,114857,114858],{"class":55}," _get_reward",[36,114860,114527],{"class":98},[36,114862,660],{"class":109},[36,114864,4190],{"class":98},[36,114866,114867,114869,114871,114873,114875,114877],{"class":38,"line":10336},[36,114868,112568],{"class":98},[36,114870,176],{"class":163},[36,114872,39306],{"class":109},[36,114874,114801],{"class":98},[36,114876,31256],{"class":109},[36,114878,114879],{"class":98},".tip_site_id]\n",[36,114881,114882,114884,114886,114888,114890,114892],{"class":38,"line":10345},[36,114883,112581],{"class":98},[36,114885,176],{"class":163},[36,114887,39306],{"class":109},[36,114889,114801],{"class":98},[36,114891,31256],{"class":109},[36,114893,114894],{"class":98},".target_site_id]\n",[36,114896,114897,114900,114902,114904,114906],{"class":38,"line":10351},[36,114898,114899],{"class":98},"        dist ",[36,114901,176],{"class":163},[36,114903,112032],{"class":98},[36,114905,1146],{"class":163},[36,114907,112037],{"class":98},[36,114909,114910,114913,114915,114917,114919,114922,114924],{"class":38,"line":10359},[36,114911,114912],{"class":98},"        control_cost ",[36,114914,176],{"class":163},[36,114916,112468],{"class":109},[36,114918,6969],{"class":163},[36,114920,114921],{"class":98}," np.sum(np.square(",[36,114923,31256],{"class":109},[36,114925,114926],{"class":98},".data.ctrl))\n",[36,114928,114929,114931,114933,114935,114937,114939,114941],{"class":38,"line":10364},[36,114930,15191],{"class":163},[36,114932,110228],{"class":109},[36,114934,621],{"class":98},[36,114936,1146],{"class":163},[36,114938,112027],{"class":98},[36,114940,1146],{"class":163},[36,114942,112490],{"class":98},[36,114944,114945],{"class":38,"line":17043},[36,114946,247],{"emptyLinePlaceholder":246},[36,114948,114949,114951,114954,114957,114959,114962,114964,114966,114968,114970,114972,114975,114978,114980,114982,114984,114986],{"class":38,"line":17049},[36,114950,31234],{"class":163},[36,114952,114953],{"class":55}," reset",[36,114955,114956],{"class":98},"(self, ",[36,114958,1069],{"class":163},[36,114960,114961],{"class":98},", seed: ",[36,114963,624],{"class":109},[36,114965,25546],{"class":163},[36,114967,39366],{"class":109},[36,114969,14003],{"class":163},[36,114971,39366],{"class":109},[36,114973,114974],{"class":98},", options: ",[36,114976,114977],{"class":109},"dict",[36,114979,25546],{"class":163},[36,114981,39366],{"class":109},[36,114983,14003],{"class":163},[36,114985,39366],{"class":109},[36,114987,31219],{"class":98},[36,114989,114990,114992,114995,114998,115000],{"class":38,"line":17072},[36,114991,31250],{"class":109},[36,114993,114994],{"class":98},"().reset(",[36,114996,114997],{"class":5667},"seed",[36,114999,176],{"class":163},[36,115001,115002],{"class":98},"seed)\n",[36,115004,115005,115008,115010,115013,115015],{"class":38,"line":17078},[36,115006,115007],{"class":98},"        mujoco.mj_resetData(",[36,115009,31256],{"class":109},[36,115011,115012],{"class":98},".model, ",[36,115014,31256],{"class":109},[36,115016,115017],{"class":98},".data)\n",[36,115019,115020],{"class":38,"line":17101},[36,115021,247],{"emptyLinePlaceholder":246},[36,115023,115024,115026,115029,115031,115033,115036,115038,115040,115042,115044,115046,115048,115050,115052,115054,115056,115058],{"class":38,"line":17115},[36,115025,31278],{"class":109},[36,115027,115028],{"class":98},".data.qpos[:] ",[36,115030,176],{"class":163},[36,115032,39306],{"class":109},[36,115034,115035],{"class":98},".np_random.uniform(",[36,115037,114193],{"class":5667},[36,115039,114196],{"class":163},[36,115041,86642],{"class":109},[36,115043,12874],{"class":98},[36,115045,114203],{"class":5667},[36,115047,176],{"class":163},[36,115049,86642],{"class":109},[36,115051,12874],{"class":98},[36,115053,31929],{"class":5667},[36,115055,176],{"class":163},[36,115057,31256],{"class":109},[36,115059,115060],{"class":98},".model.nq)\n",[36,115062,115063,115065,115068,115070],{"class":38,"line":17135},[36,115064,31278],{"class":109},[36,115066,115067],{"class":98},".data.qvel[:] ",[36,115069,176],{"class":163},[36,115071,105192],{"class":109},[36,115073,115074,115077,115079,115081,115083],{"class":38,"line":17141},[36,115075,115076],{"class":98},"        mujoco.mj_forward(",[36,115078,31256],{"class":109},[36,115080,115012],{"class":98},[36,115082,31256],{"class":109},[36,115084,115017],{"class":98},[36,115086,115087],{"class":38,"line":17152},[36,115088,247],{"emptyLinePlaceholder":246},[36,115090,115091,115093,115095,115097],{"class":38,"line":17175},[36,115092,31278],{"class":109},[36,115094,114137],{"class":98},[36,115096,176],{"class":163},[36,115098,47766],{"class":109},[36,115100,115101,115103,115105],{"class":38,"line":17197},[36,115102,15191],{"class":163},[36,115104,39306],{"class":109},[36,115106,115107],{"class":98},"._get_obs(), {}\n",[36,115109,115110],{"class":38,"line":17202},[36,115111,247],{"emptyLinePlaceholder":246},[36,115113,115114,115116,115119],{"class":38,"line":17208},[36,115115,31234],{"class":163},[36,115117,115118],{"class":55}," step",[36,115120,115121],{"class":98},"(self, action):\n",[36,115123,115124,115126,115128,115131,115133,115135],{"class":38,"line":17222},[36,115125,110653],{"class":98},[36,115127,176],{"class":163},[36,115129,115130],{"class":98}," np.asarray(action, ",[36,115132,93932],{"class":5667},[36,115134,176],{"class":163},[36,115136,114227],{"class":98},[36,115138,115139,115141,115143,115145,115147,115150,115152],{"class":38,"line":17235},[36,115140,110653],{"class":98},[36,115142,176],{"class":163},[36,115144,107878],{"class":98},[36,115146,31256],{"class":109},[36,115148,115149],{"class":98},".action_space.low, ",[36,115151,31256],{"class":109},[36,115153,115154],{"class":98},".action_space.high)\n",[36,115156,115157],{"class":38,"line":17240},[36,115158,247],{"emptyLinePlaceholder":246},[36,115160,115161,115163,115166,115168],{"class":38,"line":17254},[36,115162,31278],{"class":109},[36,115164,115165],{"class":98},".data.ctrl[:] ",[36,115167,176],{"class":163},[36,115169,107901],{"class":98},[36,115171,115172,115174,115176,115178,115180,115182,115184],{"class":38,"line":17259},[36,115173,3854],{"class":163},[36,115175,101932],{"class":98},[36,115177,26480],{"class":163},[36,115179,32876],{"class":109},[36,115181,621],{"class":98},[36,115183,31256],{"class":109},[36,115185,115186],{"class":98},".frame_skip):\n",[36,115188,115189,115192,115194,115196,115198],{"class":38,"line":17265},[36,115190,115191],{"class":98},"            mujoco.mj_step(",[36,115193,31256],{"class":109},[36,115195,115012],{"class":98},[36,115197,31256],{"class":109},[36,115199,115017],{"class":98},[36,115201,115202],{"class":38,"line":17270},[36,115203,247],{"emptyLinePlaceholder":246},[36,115205,115206,115208,115210,115212],{"class":38,"line":17284},[36,115207,31278],{"class":109},[36,115209,114137],{"class":98},[36,115211,9918],{"class":163},[36,115213,56131],{"class":109},[36,115215,115216],{"class":38,"line":17289},[36,115217,247],{"emptyLinePlaceholder":246},[36,115219,115220,115222,115224,115226],{"class":38,"line":17294},[36,115221,110613],{"class":98},[36,115223,176],{"class":163},[36,115225,39306],{"class":109},[36,115227,115228],{"class":98},"._get_obs()\n",[36,115230,115231,115233,115235,115237],{"class":38,"line":17308},[36,115232,110718],{"class":98},[36,115234,176],{"class":163},[36,115236,39306],{"class":109},[36,115238,115239],{"class":98},"._get_reward()\n",[36,115241,115242],{"class":38,"line":17320},[36,115243,247],{"emptyLinePlaceholder":246},[36,115245,115246,115248,115250,115252,115254,115256],{"class":38,"line":17325},[36,115247,112568],{"class":98},[36,115249,176],{"class":163},[36,115251,39306],{"class":109},[36,115253,114801],{"class":98},[36,115255,31256],{"class":109},[36,115257,114879],{"class":98},[36,115259,115260,115262,115264,115266,115268,115270],{"class":38,"line":17338},[36,115261,112581],{"class":98},[36,115263,176],{"class":163},[36,115265,39306],{"class":109},[36,115267,114801],{"class":98},[36,115269,31256],{"class":109},[36,115271,114894],{"class":98},[36,115273,115274,115276,115278,115280,115283,115285],{"class":38,"line":17343},[36,115275,114899],{"class":98},[36,115277,176],{"class":163},[36,115279,110228],{"class":109},[36,115281,115282],{"class":98},"(np.linalg.norm(tip ",[36,115284,1146],{"class":163},[36,115286,115287],{"class":98}," target))\n",[36,115289,115290],{"class":38,"line":17348},[36,115291,247],{"emptyLinePlaceholder":246},[36,115293,115294,115297,115299,115301,115303],{"class":38,"line":17353},[36,115295,115296],{"class":98},"        terminated ",[36,115298,176],{"class":163},[36,115300,114120],{"class":98},[36,115302,179],{"class":163},[36,115304,114125],{"class":109},[36,115306,115307,115310,115312,115314,115316,115318,115320],{"class":38,"line":17366},[36,115308,115309],{"class":98},"        truncated ",[36,115311,176],{"class":163},[36,115313,39306],{"class":109},[36,115315,114137],{"class":98},[36,115317,2178],{"class":163},[36,115319,39306],{"class":109},[36,115321,114144],{"class":98},[36,115323,115324,115327,115329,115331,115334],{"class":38,"line":17371},[36,115325,115326],{"class":98},"        info ",[36,115328,176],{"class":163},[36,115330,4899],{"class":98},[36,115332,115333],{"class":59},"\"distance\"",[36,115335,115336],{"class":98},": dist}\n",[36,115338,115339,115341],{"class":38,"line":33066},[36,115340,15191],{"class":163},[36,115342,115343],{"class":98}," obs, reward, terminated, truncated, info\n",[36,115345,115346],{"class":38,"line":33072},[36,115347,247],{"emptyLinePlaceholder":246},[36,115349,115350],{"class":38,"line":33078},[36,115351,247],{"emptyLinePlaceholder":246},[36,115353,115354,115356,115358,115360,115362],{"class":38,"line":33084},[36,115355,32380],{"class":163},[36,115357,2432],{"class":55},[36,115359,101829],{"class":98},[36,115361,96118],{"class":109},[36,115363,4190],{"class":98},[36,115365,115366,115369,115371],{"class":38,"line":33090},[36,115367,115368],{"class":98},"    env ",[36,115370,176],{"class":163},[36,115372,115373],{"class":98}," ReacherEnv()\n",[36,115375,115376,115379,115381,115384,115386,115388,115390],{"class":38,"line":33101},[36,115377,115378],{"class":98},"    obs, info ",[36,115380,176],{"class":163},[36,115382,115383],{"class":98}," env.reset(",[36,115385,114997],{"class":5667},[36,115387,176],{"class":163},[36,115389,807],{"class":109},[36,115391,627],{"class":98},[36,115393,115394,115396,115398,115401],{"class":38,"line":33107},[36,115395,31732],{"class":109},[36,115397,621],{"class":98},[36,115399,115400],{"class":59},"\"initial obs shape:\"",[36,115402,115403],{"class":98},", obs.shape)\n",[36,115405,115406,115408,115410,115413],{"class":38,"line":33127},[36,115407,31732],{"class":109},[36,115409,621],{"class":98},[36,115411,115412],{"class":59},"\"initial info:\"",[36,115414,115415],{"class":98},", info)\n",[36,115417,115418],{"class":38,"line":33133},[36,115419,247],{"emptyLinePlaceholder":246},[36,115421,115422,115424,115426],{"class":38,"line":33144},[36,115423,110584],{"class":98},[36,115425,176],{"class":163},[36,115427,105192],{"class":109},[36,115429,115430,115432,115434,115436,115438,115440,115442],{"class":38,"line":33150},[36,115431,3652],{"class":163},[36,115433,32049],{"class":98},[36,115435,26480],{"class":163},[36,115437,32876],{"class":109},[36,115439,621],{"class":98},[36,115441,1313],{"class":109},[36,115443,31219],{"class":98},[36,115445,115446,115448,115450],{"class":38,"line":33156},[36,115447,110653],{"class":98},[36,115449,176],{"class":163},[36,115451,115452],{"class":98}," env.action_space.sample()\n",[36,115454,115455,115458,115460],{"class":38,"line":33162},[36,115456,115457],{"class":98},"        obs, reward, terminated, truncated, info ",[36,115459,176],{"class":163},[36,115461,113846],{"class":98},[36,115463,115464,115466,115468],{"class":38,"line":33168},[36,115465,110728],{"class":98},[36,115467,9918],{"class":163},[36,115469,110733],{"class":98},[36,115471,115472,115474,115476,115478,115480,115483,115485,115487,115490,115492,115494,115497,115499,115501,115504,115506,115508,115510],{"class":38,"line":33174},[36,115473,32884],{"class":109},[36,115475,621],{"class":98},[36,115477,110762],{"class":59},[36,115479,110765],{"class":98},[36,115481,115482],{"class":59},"\"reward:\"",[36,115484,12874],{"class":98},[36,115486,32451],{"class":109},[36,115488,115489],{"class":98},"(reward, ",[36,115491,689],{"class":109},[36,115493,110776],{"class":98},[36,115495,115496],{"class":59},"\"distance:\"",[36,115498,12874],{"class":98},[36,115500,32451],{"class":109},[36,115502,115503],{"class":98},"(info[",[36,115505,115333],{"class":59},[36,115507,112633],{"class":98},[36,115509,689],{"class":109},[36,115511,30930],{"class":98},[36,115513,115514,115516,115519,115522],{"class":38,"line":33180},[36,115515,2955],{"class":163},[36,115517,115518],{"class":98}," terminated ",[36,115520,115521],{"class":163},"or",[36,115523,115524],{"class":98}," truncated:\n",[36,115526,115527],{"class":38,"line":33186},[36,115528,115529],{"class":163},"            break\n",[36,115531,115532],{"class":38,"line":33206},[36,115533,247],{"emptyLinePlaceholder":246},[36,115535,115536,115538,115540,115542,115544,115546,115548,115550],{"class":38,"line":33212},[36,115537,31732],{"class":109},[36,115539,621],{"class":98},[36,115541,110807],{"class":59},[36,115543,12874],{"class":98},[36,115545,32451],{"class":109},[36,115547,110814],{"class":98},[36,115549,689],{"class":109},[36,115551,30930],{"class":98},[36,115553,115554],{"class":38,"line":33228},[36,115555,247],{"emptyLinePlaceholder":246},[36,115557,115558],{"class":38,"line":33234},[36,115559,247],{"emptyLinePlaceholder":246},[36,115561,115562,115564,115566,115568,115570],{"class":38,"line":33248},[36,115563,2010],{"class":163},[36,115565,31653],{"class":109},[36,115567,101990],{"class":163},[36,115569,101993],{"class":59},[36,115571,4190],{"class":98},[36,115573,115574],{"class":38,"line":33254},[36,115575,102000],{"class":98},[14,115577,104001],{},[26,115579,115581],{"className":24261,"code":115580,"language":24263,"meta":31,"style":31},"touch ch8_gym_env.py\n",[33,115582,115583],{"__ignoreMap":31},[36,115584,115585,115587],{"class":38,"line":39},[36,115586,101714],{"class":55},[36,115588,115589],{"class":59}," ch8_gym_env.py\n",[14,115591,110875],{},[26,115593,115595],{"className":24261,"code":115594,"language":24263,"meta":31,"style":31},"python ch8_gym_env.py\n",[33,115596,115597],{"__ignoreMap":31},[36,115598,115599,115601],{"class":38,"line":39},[36,115600,30813],{"class":55},[36,115602,115589],{"class":59},[588,115604,102003],{"id":102003},[14,115606,115607],{},"继承 Gymnasium 环境：",[26,115609,115611],{"className":30811,"code":115610,"language":30813,"meta":31,"style":31},"class ReacherEnv(gym.Env):\n",[33,115612,115613],{"__ignoreMap":31},[36,115614,115615,115617,115619,115621,115623,115625,115627],{"class":38,"line":39},[36,115616,15133],{"class":163},[36,115618,114488],{"class":55},[36,115620,621],{"class":98},[36,115622,113971],{"class":55},[36,115624,1172],{"class":98},[36,115626,114497],{"class":55},[36,115628,31219],{"class":98},[14,115630,115631],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,115633,115634],{},"初始化模型：",[26,115636,115638],{"className":30811,"code":115637,"language":30813,"meta":31,"style":31},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[33,115639,115640,115654],{"__ignoreMap":31},[36,115641,115642,115644,115646,115648,115650,115652],{"class":38,"line":39},[36,115643,31256],{"class":109},[36,115645,114548],{"class":98},[36,115647,176],{"class":163},[36,115649,101843],{"class":98},[36,115651,101745],{"class":109},[36,115653,627],{"class":98},[36,115655,115656,115658,115660,115662,115664,115666],{"class":38,"line":46},[36,115657,31256],{"class":109},[36,115659,114563],{"class":98},[36,115661,176],{"class":163},[36,115663,114568],{"class":98},[36,115665,31256],{"class":109},[36,115667,114573],{"class":98},[14,115669,115670,115671,115673],{},"这和前面章节一样，只是现在放到了类的 ",[33,115672,31262],{}," 里。",[14,115675,115676],{},"缓存 site ID：",[26,115678,115680],{"className":30811,"code":115679,"language":30813,"meta":31,"style":31},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[33,115681,115682,115696],{"__ignoreMap":31},[36,115683,115684,115686,115688,115690,115692,115694],{"class":38,"line":39},[36,115685,31256],{"class":109},[36,115687,114584],{"class":98},[36,115689,176],{"class":163},[36,115691,114589],{"class":98},[36,115693,89986],{"class":109},[36,115695,627],{"class":98},[36,115697,115698,115700,115702,115704,115706,115708],{"class":38,"line":46},[36,115699,31256],{"class":109},[36,115701,114605],{"class":98},[36,115703,176],{"class":163},[36,115705,114589],{"class":98},[36,115707,89986],{"class":109},[36,115709,627],{"class":98},[14,115711,115712],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,115714,115715],{},"reset：",[26,115717,115719],{"className":30811,"code":115718,"language":30813,"meta":31,"style":31},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[33,115720,115721],{"__ignoreMap":31},[36,115722,115723,115725,115727,115729,115731,115733,115735,115737,115739,115741,115743,115745,115747,115749,115751,115753,115755],{"class":38,"line":39},[36,115724,32380],{"class":163},[36,115726,114953],{"class":55},[36,115728,114956],{"class":98},[36,115730,1069],{"class":163},[36,115732,114961],{"class":98},[36,115734,624],{"class":109},[36,115736,25546],{"class":163},[36,115738,39366],{"class":109},[36,115740,14003],{"class":163},[36,115742,39366],{"class":109},[36,115744,114974],{"class":98},[36,115746,114977],{"class":109},[36,115748,25546],{"class":163},[36,115750,39366],{"class":109},[36,115752,14003],{"class":163},[36,115754,39366],{"class":109},[36,115756,31219],{"class":98},[14,115758,115759,115761],{},[33,115760,70488],{}," 做四件事：",[571,115763,115764,115767,115770,115773],{},[574,115765,115766],{},"设置随机种子。",[574,115768,115769],{},"重置 MuJoCo data。",[574,115771,115772],{},"随机初始化关节角。",[574,115774,115775],{},"返回初始观测和 info。",[14,115777,115778],{},"step：",[26,115780,115782],{"className":30811,"code":115781,"language":30813,"meta":31,"style":31},"def step(self, action):\n",[33,115783,115784],{"__ignoreMap":31},[36,115785,115786,115788,115790],{"class":38,"line":39},[36,115787,32380],{"class":163},[36,115789,115118],{"class":55},[36,115791,115121],{"class":98},[14,115793,115794,115796],{},[33,115795,107565],{}," 做六件事：",[571,115798,115799,115802,115808,115811,115814,115817],{},[574,115800,115801],{},"检查并裁剪 action。",[574,115803,115804,115805,28819],{},"写入 ",[33,115806,115807],{},"self.data.ctrl",[574,115809,115810],{},"连续推进若干个 MuJoCo 物理步。",[574,115812,115813],{},"计算新观测。",[574,115815,115816],{},"计算奖励和结束条件。",[574,115818,115819],{},"返回 Gymnasium 标准五元组。",[588,115821,102139],{"id":102139},[26,115823,115825],{"className":30811,"code":115824,"language":30813,"meta":31,"style":31},"import gymnasium as gym\n",[33,115826,115827],{"__ignoreMap":31},[36,115828,115829,115831,115833,115835],{"class":38,"line":39},[36,115830,30825],{"class":163},[36,115832,114326],{"class":98},[36,115834,31816],{"class":163},[36,115836,114331],{"class":98},[14,115838,115839,115840,115842,115843,115846],{},"导入 Gymnasium，并起别名 ",[33,115841,113971],{},"。后面写 ",[33,115844,115845],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[26,115848,115850],{"className":30811,"code":115849,"language":30813,"meta":31,"style":31},"from gymnasium import spaces\n",[33,115851,115852],{"__ignoreMap":31},[36,115853,115854,115856,115858,115860],{"class":38,"line":39},[36,115855,31170],{"class":163},[36,115857,114326],{"class":98},[36,115859,30825],{"class":163},[36,115861,114358],{"class":98},[14,115863,115864,115865,115868],{},"导入空间定义工具。",[33,115866,115867],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[26,115870,115871],{"className":30811,"code":115610,"language":30813,"meta":31,"style":31},[33,115872,115873],{"__ignoreMap":31},[36,115874,115875,115877,115879,115881,115883,115885,115887],{"class":38,"line":39},[36,115876,15133],{"class":163},[36,115878,114488],{"class":55},[36,115880,621],{"class":98},[36,115882,113971],{"class":55},[36,115884,1172],{"class":98},[36,115886,114497],{"class":55},[36,115888,31219],{"class":98},[14,115890,115891,115892,115895,115896,115898,115899,101449,115901,115903],{},"定义一个类，名字叫 ",[33,115893,115894],{},"ReacherEnv","。括号里的 ",[33,115897,115845],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[33,115900,70488],{},[33,115902,107565],{}," 这两个核心方法。",[26,115905,115907],{"className":30811,"code":115906,"language":30813,"meta":31,"style":31},"metadata = {\"render_modes\": []}\n",[33,115908,115909],{"__ignoreMap":31},[36,115910,115911,115914,115916,115918,115920],{"class":38,"line":39},[36,115912,115913],{"class":98},"metadata ",[36,115915,176],{"class":163},[36,115917,4899],{"class":98},[36,115919,114511],{"class":59},[36,115921,114514],{"class":98},[14,115923,115924],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[26,115926,115928],{"className":30811,"code":115927,"language":30813,"meta":31,"style":31},"def __init__(self) -> None:\n",[33,115929,115930],{"__ignoreMap":31},[36,115931,115932,115934,115936,115938,115940],{"class":38,"line":39},[36,115933,32380],{"class":163},[36,115935,31237],{"class":109},[36,115937,114527],{"class":98},[36,115939,96118],{"class":109},[36,115941,4190],{"class":98},[14,115943,115944,115946,115947,28819],{},[33,115945,31262],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[33,115948,115949],{},"env = ReacherEnv()",[26,115951,115953],{"className":30811,"code":115952,"language":30813,"meta":31,"style":31},"super().__init__()\n",[33,115954,115955],{"__ignoreMap":31},[36,115956,115957,115960,115962,115964],{"class":38,"line":39},[36,115958,115959],{"class":109},"super",[36,115961,17700],{"class":98},[36,115963,31262],{"class":109},[36,115965,2435],{"class":98},[14,115967,115968,115969,115971],{},"调用父类 ",[33,115970,115845],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[26,115973,115974],{"className":30811,"code":115637,"language":30813,"meta":31,"style":31},[33,115975,115976,115990],{"__ignoreMap":31},[36,115977,115978,115980,115982,115984,115986,115988],{"class":38,"line":39},[36,115979,31256],{"class":109},[36,115981,114548],{"class":98},[36,115983,176],{"class":163},[36,115985,101843],{"class":98},[36,115987,101745],{"class":109},[36,115989,627],{"class":98},[36,115991,115992,115994,115996,115998,116000,116002],{"class":38,"line":46},[36,115993,31256],{"class":109},[36,115995,114563],{"class":98},[36,115997,176],{"class":163},[36,115999,114568],{"class":98},[36,116001,31256],{"class":109},[36,116003,114573],{"class":98},[14,116005,116006,116007,116009,116010,101449,116013,116016],{},"把 MuJoCo 模型和状态保存到 ",[33,116008,31256],{}," 上。",[33,116011,116012],{},"self.model",[33,116014,116015],{},"self.data"," 表示这个环境对象自己的模型和状态。",[26,116018,116019],{"className":30811,"code":115679,"language":30813,"meta":31,"style":31},[33,116020,116021,116035],{"__ignoreMap":31},[36,116022,116023,116025,116027,116029,116031,116033],{"class":38,"line":39},[36,116024,31256],{"class":109},[36,116026,114584],{"class":98},[36,116028,176],{"class":163},[36,116030,114589],{"class":98},[36,116032,89986],{"class":109},[36,116034,627],{"class":98},[36,116036,116037,116039,116041,116043,116045,116047],{"class":38,"line":46},[36,116038,31256],{"class":109},[36,116040,114605],{"class":98},[36,116042,176],{"class":163},[36,116044,114589],{"class":98},[36,116046,89986],{"class":109},[36,116048,627],{"class":98},[14,116050,116051,116052,101449,116055,116058],{},"提前查好 tip 和 target 的 site ID。这样 ",[33,116053,116054],{},"_get_obs",[33,116056,116057],{},"_get_reward"," 里就不用每次按名字查找。",[26,116060,116062],{"className":30811,"code":116061,"language":30813,"meta":31,"style":31},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[33,116063,116064,116074,116084],{"__ignoreMap":31},[36,116065,116066,116068,116070,116072],{"class":38,"line":39},[36,116067,31256],{"class":109},[36,116069,114298],{"class":98},[36,116071,176],{"class":163},[36,116073,54859],{"class":109},[36,116075,116076,116078,116080,116082],{"class":38,"line":46},[36,116077,31256],{"class":109},[36,116079,114677],{"class":98},[36,116081,176],{"class":163},[36,116083,114682],{"class":109},[36,116085,116086,116088,116090,116092],{"class":38,"line":52},[36,116087,31256],{"class":109},[36,116089,114137],{"class":98},[36,116091,176],{"class":163},[36,116093,47766],{"class":109},[14,116095,116096,116099,116100,116103,116104,116107],{},[33,116097,116098],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[33,116101,116102],{},"max_steps"," 是一个 episode 最多运行多少步。",[33,116105,116106],{},"steps"," 记录当前 episode 已经走了多少步。",[26,116109,116110],{"className":30811,"code":114176,"language":30813,"meta":31,"style":31},[33,116111,116112],{"__ignoreMap":31},[36,116113,116114,116116,116118,116120,116122,116124,116126,116128,116130,116132,116134,116136,116138,116140,116142,116144,116146,116148,116150,116152],{"class":38,"line":39},[36,116115,31256],{"class":109},[36,116117,114185],{"class":98},[36,116119,176],{"class":163},[36,116121,114190],{"class":98},[36,116123,114193],{"class":5667},[36,116125,114196],{"class":163},[36,116127,102834],{"class":109},[36,116129,12874],{"class":98},[36,116131,114203],{"class":5667},[36,116133,176],{"class":163},[36,116135,102834],{"class":109},[36,116137,12874],{"class":98},[36,116139,96395],{"class":5667},[36,116141,176],{"class":163},[36,116143,621],{"class":98},[36,116145,694],{"class":109},[36,116147,114220],{"class":98},[36,116149,93932],{"class":5667},[36,116151,176],{"class":163},[36,116153,114227],{"class":98},[14,116155,116156,116157,116160,116161,101449,116164,116167],{},"定义动作空间。",[33,116158,116159],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[33,116162,116163],{},"low=-1.0",[33,116165,116166],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[26,116169,116170],{"className":30811,"code":114237,"language":30813,"meta":31,"style":31},[33,116171,116172],{"__ignoreMap":31},[36,116173,116174,116176,116178,116180,116182,116184,116186,116188,116190,116192,116194,116196,116198,116200,116202,116204,116206,116208],{"class":38,"line":39},[36,116175,31256],{"class":109},[36,116177,114246],{"class":98},[36,116179,176],{"class":163},[36,116181,114190],{"class":98},[36,116183,114193],{"class":5667},[36,116185,114196],{"class":163},[36,116187,114257],{"class":98},[36,116189,114203],{"class":5667},[36,116191,176],{"class":163},[36,116193,114257],{"class":98},[36,116195,96395],{"class":5667},[36,116197,176],{"class":163},[36,116199,621],{"class":98},[36,116201,1060],{"class":109},[36,116203,114220],{"class":98},[36,116205,93932],{"class":5667},[36,116207,176],{"class":163},[36,116209,114227],{"class":98},[14,116211,116212,116213,116216,116217,116220],{},"定义观测空间。",[33,116214,116215],{},"shape=(10,)"," 表示观测是 10 个数。",[33,116218,116219],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[26,116222,116224],{"className":30811,"code":116223,"language":30813,"meta":31,"style":31},"def _get_obs(self) -> np.ndarray:\n",[33,116225,116226],{"__ignoreMap":31},[36,116227,116228,116230,116232],{"class":38,"line":39},[36,116229,32380],{"class":163},[36,116231,114787],{"class":55},[36,116233,114790],{"class":98},[14,116235,116236,116237,116239],{},"定义内部函数，用来生成观测。函数名前面的 ",[33,116238,1603],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[26,116241,116243],{"className":30811,"code":116242,"language":30813,"meta":31,"style":31},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[33,116244,116245,116259],{"__ignoreMap":31},[36,116246,116247,116249,116251,116253,116255,116257],{"class":38,"line":39},[36,116248,111999],{"class":98},[36,116250,176],{"class":163},[36,116252,39306],{"class":109},[36,116254,114801],{"class":98},[36,116256,31256],{"class":109},[36,116258,114806],{"class":98},[36,116260,116261,116263,116265,116267,116269,116271],{"class":38,"line":46},[36,116262,112009],{"class":98},[36,116264,176],{"class":163},[36,116266,39306],{"class":109},[36,116268,114801],{"class":98},[36,116270,31256],{"class":109},[36,116272,114821],{"class":98},[14,116274,116275],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[26,116277,116279],{"className":30811,"code":116278,"language":30813,"meta":31,"style":31},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[33,116280,116281,116297],{"__ignoreMap":31},[36,116282,116283,116285,116287,116289,116291,116293,116295],{"class":38,"line":39},[36,116284,111285],{"class":98},[36,116286,176],{"class":163},[36,116288,114830],{"class":98},[36,116290,31256],{"class":109},[36,116292,114835],{"class":98},[36,116294,31256],{"class":109},[36,116296,114840],{"class":98},[36,116298,116299,116301],{"class":38,"line":46},[36,116300,17485],{"class":163},[36,116302,114847],{"class":98},[14,116304,116305,116306,116309,116310,116312],{},"拼接观测，并转换成 ",[33,116307,116308],{},"float32","。很多强化学习库默认使用 ",[33,116311,116308],{},"，所以这里主动转换。",[26,116314,116315],{"className":30811,"code":115718,"language":30813,"meta":31,"style":31},[33,116316,116317],{"__ignoreMap":31},[36,116318,116319,116321,116323,116325,116327,116329,116331,116333,116335,116337,116339,116341,116343,116345,116347,116349,116351],{"class":38,"line":39},[36,116320,32380],{"class":163},[36,116322,114953],{"class":55},[36,116324,114956],{"class":98},[36,116326,1069],{"class":163},[36,116328,114961],{"class":98},[36,116330,624],{"class":109},[36,116332,25546],{"class":163},[36,116334,39366],{"class":109},[36,116336,14003],{"class":163},[36,116338,39366],{"class":109},[36,116340,114974],{"class":98},[36,116342,114977],{"class":109},[36,116344,25546],{"class":163},[36,116346,39366],{"class":109},[36,116348,14003],{"class":163},[36,116350,39366],{"class":109},[36,116352,31219],{"class":98},[14,116354,116355,116356,116358,116359,116362],{},"定义 reset。",[33,116357,114997],{}," 用来控制随机数，保证实验可以复现。",[33,116360,116361],{},"options"," 用来接收额外配置，本章暂时不用。",[26,116364,116366],{"className":30811,"code":116365,"language":30813,"meta":31,"style":31},"super().reset(seed=seed)\n",[33,116367,116368],{"__ignoreMap":31},[36,116369,116370,116372,116374,116376,116378],{"class":38,"line":39},[36,116371,115959],{"class":109},[36,116373,114994],{"class":98},[36,116375,114997],{"class":5667},[36,116377,176],{"class":163},[36,116379,115002],{"class":98},[14,116381,116382,116383,116386],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[33,116384,116385],{},"self.np_random"," 生成可复现的随机数。",[26,116388,116390],{"className":30811,"code":116389,"language":30813,"meta":31,"style":31},"mujoco.mj_resetData(self.model, self.data)\n",[33,116391,116392],{"__ignoreMap":31},[36,116393,116394,116397,116399,116401,116403],{"class":38,"line":39},[36,116395,116396],{"class":98},"mujoco.mj_resetData(",[36,116398,31256],{"class":109},[36,116400,115012],{"class":98},[36,116402,31256],{"class":109},[36,116404,115017],{"class":98},[14,116406,116407],{},"把 MuJoCo 状态重置到默认状态。",[26,116409,116411],{"className":30811,"code":116410,"language":30813,"meta":31,"style":31},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[33,116412,116413],{"__ignoreMap":31},[36,116414,116415,116417,116419,116421,116423,116425,116427,116429,116431,116433,116435,116437,116439,116441,116443,116445,116447],{"class":38,"line":39},[36,116416,31256],{"class":109},[36,116418,115028],{"class":98},[36,116420,176],{"class":163},[36,116422,39306],{"class":109},[36,116424,115035],{"class":98},[36,116426,114193],{"class":5667},[36,116428,114196],{"class":163},[36,116430,86642],{"class":109},[36,116432,12874],{"class":98},[36,116434,114203],{"class":5667},[36,116436,176],{"class":163},[36,116438,86642],{"class":109},[36,116440,12874],{"class":98},[36,116442,31929],{"class":5667},[36,116444,176],{"class":163},[36,116446,31256],{"class":109},[36,116448,115060],{"class":98},[14,116450,115772,116451,116454,116455,116458,116459,116461],{},[33,116452,116453],{},"[:]"," 表示修改整个数组。",[33,116456,116457],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[33,116460,102581],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[26,116463,116465],{"className":30811,"code":116464,"language":30813,"meta":31,"style":31},"self.data.qvel[:] = 0.0\n",[33,116466,116467],{"__ignoreMap":31},[36,116468,116469,116471,116473,116475],{"class":38,"line":39},[36,116470,31256],{"class":109},[36,116472,115067],{"class":98},[36,116474,176],{"class":163},[36,116476,105192],{"class":109},[14,116478,116479],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[26,116481,116483],{"className":30811,"code":116482,"language":30813,"meta":31,"style":31},"self.steps = 0\nreturn self._get_obs(), {}\n",[33,116484,116485,116495],{"__ignoreMap":31},[36,116486,116487,116489,116491,116493],{"class":38,"line":39},[36,116488,31256],{"class":109},[36,116490,114137],{"class":98},[36,116492,176],{"class":163},[36,116494,47766],{"class":109},[36,116496,116497,116499,116501],{"class":38,"line":46},[36,116498,17485],{"class":163},[36,116500,39306],{"class":109},[36,116502,115107],{"class":98},[14,116504,116505],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[26,116507,116508],{"className":30811,"code":115781,"language":30813,"meta":31,"style":31},[33,116509,116510],{"__ignoreMap":31},[36,116511,116512,116514,116516],{"class":38,"line":39},[36,116513,32380],{"class":163},[36,116515,115118],{"class":55},[36,116517,115121],{"class":98},[14,116519,116520],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[26,116522,116524],{"className":30811,"code":116523,"language":30813,"meta":31,"style":31},"action = np.asarray(action, dtype=np.float32)\n",[33,116525,116526],{"__ignoreMap":31},[36,116527,116528,116530,116532,116534,116536,116538],{"class":38,"line":39},[36,116529,107873],{"class":98},[36,116531,176],{"class":163},[36,116533,115130],{"class":98},[36,116535,93932],{"class":5667},[36,116537,176],{"class":163},[36,116539,114227],{"class":98},[14,116541,116542,116543,28819],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[33,116544,116308],{},[26,116546,116548],{"className":30811,"code":116547,"language":30813,"meta":31,"style":31},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[33,116549,116550],{"__ignoreMap":31},[36,116551,116552,116554,116556,116558,116560,116562,116564],{"class":38,"line":39},[36,116553,107873],{"class":98},[36,116555,176],{"class":163},[36,116557,107878],{"class":98},[36,116559,31256],{"class":109},[36,116561,115149],{"class":98},[36,116563,31256],{"class":109},[36,116565,115154],{"class":98},[14,116567,116568],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[26,116570,116572],{"className":30811,"code":116571,"language":30813,"meta":31,"style":31},"self.data.ctrl[:] = action\n",[33,116573,116574],{"__ignoreMap":31},[36,116575,116576,116578,116580,116582],{"class":38,"line":39},[36,116577,31256],{"class":109},[36,116579,115165],{"class":98},[36,116581,176],{"class":163},[36,116583,107901],{"class":98},[14,116585,116586],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[26,116588,116590],{"className":30811,"code":116589,"language":30813,"meta":31,"style":31},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[33,116591,116592,116608],{"__ignoreMap":31},[36,116593,116594,116596,116598,116600,116602,116604,116606],{"class":38,"line":39},[36,116595,3476],{"class":163},[36,116597,101932],{"class":98},[36,116599,26480],{"class":163},[36,116601,32876],{"class":109},[36,116603,621],{"class":98},[36,116605,31256],{"class":109},[36,116607,115186],{"class":98},[36,116609,116610,116613,116615,116617,116619],{"class":38,"line":46},[36,116611,116612],{"class":98},"    mujoco.mj_step(",[36,116614,31256],{"class":109},[36,116616,115012],{"class":98},[36,116618,31256],{"class":109},[36,116620,115017],{"class":98},[14,116622,116623,116624,116627,116628,116630,116631,28819],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[33,116625,116626],{},"frame_skip=5","，所以外部调用一次 ",[33,116629,114308],{},"，内部实际执行 5 次 ",[33,116632,101646],{},[26,116634,116636],{"className":30811,"code":116635,"language":30813,"meta":31,"style":31},"self.steps += 1\n",[33,116637,116638],{"__ignoreMap":31},[36,116639,116640,116642,116644,116646],{"class":38,"line":39},[36,116641,31256],{"class":109},[36,116643,114137],{"class":98},[36,116645,9918],{"class":163},[36,116647,56131],{"class":109},[14,116649,116650],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[26,116652,116654],{"className":30811,"code":116653,"language":30813,"meta":31,"style":31},"obs = self._get_obs()\nreward = self._get_reward()\n",[33,116655,116656,116666],{"__ignoreMap":31},[36,116657,116658,116660,116662,116664],{"class":38,"line":39},[36,116659,111285],{"class":98},[36,116661,176],{"class":163},[36,116663,39306],{"class":109},[36,116665,115228],{"class":98},[36,116667,116668,116670,116672,116674],{"class":38,"line":46},[36,116669,111436],{"class":98},[36,116671,176],{"class":163},[36,116673,39306],{"class":109},[36,116675,115239],{"class":98},[14,116677,116678],{},"计算新的观测和奖励。",[26,116680,116682],{"className":30811,"code":116681,"language":30813,"meta":31,"style":31},"dist = float(np.linalg.norm(tip - target))\n",[33,116683,116684],{"__ignoreMap":31},[36,116685,116686,116688,116690,116692,116694,116696],{"class":38,"line":39},[36,116687,112027],{"class":98},[36,116689,176],{"class":163},[36,116691,110228],{"class":109},[36,116693,115282],{"class":98},[36,116695,1146],{"class":163},[36,116697,115287],{"class":98},[14,116699,116700],{},"计算末端到目标的距离，并转换成 Python float。",[26,116702,116703],{"className":30811,"code":114108,"language":30813,"meta":31,"style":31},[33,116704,116705,116717],{"__ignoreMap":31},[36,116706,116707,116709,116711,116713,116715],{"class":38,"line":39},[36,116708,114115],{"class":98},[36,116710,176],{"class":163},[36,116712,114120],{"class":98},[36,116714,179],{"class":163},[36,116716,114125],{"class":109},[36,116718,116719,116721,116723,116725,116727,116729,116731],{"class":38,"line":46},[36,116720,114130],{"class":98},[36,116722,176],{"class":163},[36,116724,39306],{"class":109},[36,116726,114137],{"class":98},[36,116728,2178],{"class":163},[36,116730,39306],{"class":109},[36,116732,114144],{"class":98},[14,116734,116735],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[26,116737,116739],{"className":30811,"code":116738,"language":30813,"meta":31,"style":31},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[33,116740,116741,116754],{"__ignoreMap":31},[36,116742,116743,116746,116748,116750,116752],{"class":38,"line":39},[36,116744,116745],{"class":98},"info ",[36,116747,176],{"class":163},[36,116749,4899],{"class":98},[36,116751,115333],{"class":59},[36,116753,115336],{"class":98},[36,116755,116756,116758],{"class":38,"line":46},[36,116757,17485],{"class":163},[36,116759,115343],{"class":98},[14,116761,116762,116765],{},[33,116763,116764],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[26,116767,116769],{"className":30811,"code":116768,"language":30813,"meta":31,"style":31},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[33,116770,116771,116780],{"__ignoreMap":31},[36,116772,116773,116776,116778],{"class":38,"line":39},[36,116774,116775],{"class":98},"env ",[36,116777,176],{"class":163},[36,116779,115373],{"class":98},[36,116781,116782,116784,116786,116788,116790,116792,116794],{"class":38,"line":46},[36,116783,113831],{"class":98},[36,116785,176],{"class":163},[36,116787,115383],{"class":98},[36,116789,114997],{"class":5667},[36,116791,176],{"class":163},[36,116793,807],{"class":109},[36,116795,627],{"class":98},[14,116797,116798,116799,116802],{},"创建环境并重置。",[33,116800,116801],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[26,116804,116806],{"className":30811,"code":116805,"language":30813,"meta":31,"style":31},"action = env.action_space.sample()\n",[33,116807,116808],{"__ignoreMap":31},[36,116809,116810,116812,116814],{"class":38,"line":39},[36,116811,107873],{"class":98},[36,116813,176],{"class":163},[36,116815,115452],{"class":98},[14,116817,116818],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[559,116820,102747],{"id":102746},[14,116822,105915],{},[26,116824,116827],{"className":116825,"code":116826,"language":5638,"meta":31},[5636],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[33,116828,116826],{"__ignoreMap":31},[14,116830,116831],{},"这个环境已经具备强化学习环境的基本结构。",[14,116833,116834],{},"主函数里使用随机动作：",[26,116836,116837],{"className":30811,"code":116805,"language":30813,"meta":31,"style":31},[33,116838,116839],{"__ignoreMap":31},[36,116840,116841,116843,116845],{"class":38,"line":39},[36,116842,107873],{"class":98},[36,116844,176],{"class":163},[36,116846,115452],{"class":98},[14,116848,116849],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[559,116851,102779],{"id":102778},[571,116853,116854,116857,116863,116872,116881,116890,116896],{},[574,116855,116856],{},"运行程序。",[574,116858,116859,116860,28819],{},"确认 ",[33,116861,116862],{},"obs.shape == (10,)",[574,116864,111612,116865,116868,116869,28819],{},[33,116866,116867],{},"env.action_space","，应类似 ",[33,116870,116871],{},"Box(-1.0, 1.0, (2,), float32)",[574,116873,106016,116874,116877,116878,28819],{},[33,116875,116876],{},"self.max_steps = 10","，确认环境会更快 ",[33,116879,116880],{},"truncated=True",[574,116882,102842,116883,102845,116886,116889],{},[33,116884,116885],{},"terminated = dist \u003C 0.05",[33,116887,116888],{},"dist \u003C 0.2","，观察是否更容易结束。",[574,116891,102842,116892,116895],{},[33,116893,116894],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[574,116897,116898,116899,116901,116902,116905],{},"在 ",[33,116900,116764],{}," 里加入 ",[33,116903,116904],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[559,116907,102884],{"id":102883},[588,116909,116911],{"id":116910},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,116913,116914,116915,116917],{},"Gymnasium 的 ",[33,116916,107565],{}," 返回 5 个值:",[26,116919,116921],{"className":30811,"code":116920,"language":30813,"meta":31,"style":31},"obs, reward, terminated, truncated, info\n",[33,116922,116923],{"__ignoreMap":31},[36,116924,116925],{"class":38,"line":39},[36,116926,116920],{"class":98},[14,116928,116929],{},"不是旧 Gym 的 4 个值。",[588,116931,116933,116936],{"id":116932},"datactrl-action-维度错误",[33,116934,116935],{},"data.ctrl[:] = action"," 维度错误",[14,116938,102954],{},[26,116940,116942],{"className":30811,"code":116941,"language":30813,"meta":31,"style":31},"print(self.model.nu)\nprint(action.shape)\n",[33,116943,116944,116955],{"__ignoreMap":31},[36,116945,116946,116948,116950,116952],{"class":38,"line":39},[36,116947,30848],{"class":109},[36,116949,621],{"class":98},[36,116951,31256],{"class":109},[36,116953,116954],{"class":98},".model.nu)\n",[36,116956,116957,116959],{"class":38,"line":46},[36,116958,30848],{"class":109},[36,116960,116961],{"class":98},"(action.shape)\n",[14,116963,116964],{},"两者必须匹配。",[588,116966,116968],{"id":116967},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,116970,102893],{},[26,116972,116974],{"className":30811,"code":116973,"language":30813,"meta":31,"style":31},"mujoco.mj_forward(self.model, self.data)\n",[33,116975,116976],{"__ignoreMap":31},[36,116977,116978,116981,116983,116985,116987],{"class":38,"line":39},[36,116979,116980],{"class":98},"mujoco.mj_forward(",[36,116982,31256],{"class":109},[36,116984,115012],{"class":98},[36,116986,31256],{"class":109},[36,116988,115017],{"class":98},[588,116990,116992,116994],{"id":116991},"observation_space-维度和-obs-不一致",[33,116993,114031],{}," 维度和 obs 不一致",[14,116996,103006],{},[26,116998,117000],{"className":30811,"code":116999,"language":30813,"meta":31,"style":31},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[33,117001,117002,117012,117019],{"__ignoreMap":31},[36,117003,117004,117006,117008,117010],{"class":38,"line":39},[36,117005,111285],{"class":98},[36,117007,176],{"class":163},[36,117009,39306],{"class":109},[36,117011,115228],{"class":98},[36,117013,117014,117016],{"class":38,"line":46},[36,117015,30848],{"class":109},[36,117017,117018],{"class":98},"(obs.shape)\n",[36,117020,117021,117023,117025,117027],{"class":38,"line":52},[36,117022,30848],{"class":109},[36,117024,621],{"class":98},[36,117026,31256],{"class":109},[36,117028,117029],{"class":98},".observation_space.shape)\n",[14,117031,117032],{},"两者必须一致。本章观测是：",[26,117034,117037],{"className":117035,"code":117036,"language":5638,"meta":31},[5636],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[33,117038,117036],{"__ignoreMap":31},[588,117040,117042],{"id":117041},"action-超过范围","action 超过范围",[14,117044,117045],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[26,117047,117048],{"className":30811,"code":116547,"language":30813,"meta":31,"style":31},[33,117049,117050],{"__ignoreMap":31},[36,117051,117052,117054,117056,117058,117060,117062,117064],{"class":38,"line":39},[36,117053,107873],{"class":98},[36,117055,176],{"class":163},[36,117057,107878],{"class":98},[36,117059,31256],{"class":109},[36,117061,115149],{"class":98},[36,117063,31256],{"class":109},[36,117065,115154],{"class":98},[14,117067,117068,117069,28819],{},"这能避免无效动作直接写入 ",[33,117070,101507],{},[588,117072,117074],{"id":117073},"忘记返回-info","忘记返回 info",[14,117076,116914,117077,101449,117079,117081],{},[33,117078,70488],{},[33,117080,107565],{}," 都会返回 info：",[26,117083,117084],{"className":30811,"code":113824,"language":30813,"meta":31,"style":31},[33,117085,117086,117094],{"__ignoreMap":31},[36,117087,117088,117090,117092],{"class":38,"line":39},[36,117089,113831],{"class":98},[36,117091,176],{"class":163},[36,117093,113836],{"class":98},[36,117095,117096,117098,117100],{"class":38,"line":46},[36,117097,113841],{"class":98},[36,117099,176],{"class":163},[36,117101,113846],{"class":98},[14,117103,117104,117105,28819],{},"即使暂时没有额外信息，也返回 ",[33,117106,32892],{},[559,117108,117110],{"id":117109},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,117112,117113],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[571,117115,117116,117119,117122,117125,117128,117131],{},[574,117117,117118],{},"更稳定的 reward。",[574,117120,117121],{},"合理的 episode 长度。",[574,117123,117124],{},"可重复的随机目标采样。",[574,117126,117127],{},"render 接口。",[574,117129,117130],{},"环境注册代码。",[574,117132,117133],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,117135,117136],{},"如果只是自己写训练循环，最小形式是：",[26,117138,117140],{"className":30811,"code":117139,"language":30813,"meta":31,"style":31},"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",[33,117141,117142,117150,117166,117170,117186,117195,117204,117214],{"__ignoreMap":31},[36,117143,117144,117146,117148],{"class":38,"line":39},[36,117145,116775],{"class":98},[36,117147,176],{"class":163},[36,117149,115373],{"class":98},[36,117151,117152,117154,117156,117158,117160,117162,117164],{"class":38,"line":46},[36,117153,113831],{"class":98},[36,117155,176],{"class":163},[36,117157,115383],{"class":98},[36,117159,114997],{"class":5667},[36,117161,176],{"class":163},[36,117163,807],{"class":109},[36,117165,627],{"class":98},[36,117167,117168],{"class":38,"line":52},[36,117169,247],{"emptyLinePlaceholder":246},[36,117171,117172,117174,117176,117178,117180,117182,117184],{"class":38,"line":66},[36,117173,3476],{"class":163},[36,117175,101932],{"class":98},[36,117177,26480],{"class":163},[36,117179,32876],{"class":109},[36,117181,621],{"class":98},[36,117183,6861],{"class":109},[36,117185,31219],{"class":98},[36,117187,117188,117191,117193],{"class":38,"line":72},[36,117189,117190],{"class":98},"    action ",[36,117192,176],{"class":163},[36,117194,115452],{"class":98},[36,117196,117197,117200,117202],{"class":38,"line":82},[36,117198,117199],{"class":98},"    obs, reward, terminated, truncated, info ",[36,117201,176],{"class":163},[36,117203,113846],{"class":98},[36,117205,117206,117208,117210,117212],{"class":38,"line":88},[36,117207,3552],{"class":163},[36,117209,115518],{"class":98},[36,117211,115521],{"class":163},[36,117213,115524],{"class":98},[36,117215,117216,117219,117221],{"class":38,"line":113},[36,117217,117218],{"class":98},"        obs, info ",[36,117220,176],{"class":163},[36,117222,113836],{"class":98},[559,117224,117226],{"id":117225},"_9本章小结","9.本章小结",[14,117228,117229],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[26,117231,117234],{"className":117232,"code":117233,"language":5638,"meta":31},[5636],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[33,117235,117233],{"__ignoreMap":31},[14,117237,117238],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[537,117240,117241],{},"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":31,"searchDepth":46,"depth":46,"links":117243},[117244,117245,117246,117253,117257,117258,117259,117269,117270],{"id":101078,"depth":46,"text":101079},{"id":101201,"depth":46,"text":101202},{"id":101475,"depth":46,"text":101476,"children":117247},[117248,117250,117252],{"id":114055,"depth":52,"text":117249},"terminated 和 truncated 的区别",{"id":114158,"depth":52,"text":117251},"observation_space 和 action_space",{"id":114285,"depth":52,"text":114286},{"id":101683,"depth":46,"text":101684,"children":117254},[117255,117256],{"id":102003,"depth":52,"text":102003},{"id":102139,"depth":52,"text":102139},{"id":102746,"depth":46,"text":102747},{"id":102778,"depth":46,"text":102779},{"id":102883,"depth":46,"text":102884,"children":117260},[117261,117262,117264,117265,117267,117268],{"id":116910,"depth":52,"text":116911},{"id":116932,"depth":52,"text":117263},"data.ctrl[:] = action 维度错误",{"id":116967,"depth":52,"text":116968},{"id":116991,"depth":52,"text":117266},"observation_space 维度和 obs 不一致",{"id":117041,"depth":52,"text":117042},{"id":117073,"depth":52,"text":117074},{"id":117109,"depth":46,"text":117110},{"id":117225,"depth":46,"text":117226},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113808,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117277,"title":117278,"body":117279,"description":117702,"extension":543,"meta":117703,"navigation":246,"path":117704,"seo":117705,"stem":117706,"__hash__":117707},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117280,"toc":117692},[117281,117285,117288,117291,117311,117317,117323,117333,117336,117339,117359,117362,117366,117369,117375,117378,117392,117395,117398,117472,117475,117481,117484,117507,117510,117560,117563,117569,117572,117575,117578,117597,117600,117606,117609,117612,117615,117635,117638,117641,117644,117689],[10,117282,117284],{"id":117283},"mujoco-学习","MuJoCo 学习",[14,117286,117287],{},"初版",[14,117289,117290],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[571,117292,117293,117296,117299,117308],{},[574,117294,117295],{},"MuJoCo 模型文件在描述什么。",[574,117297,117298],{},"Python 代码怎样读取和推进仿真。",[574,117300,117301,828,117303,828,117305,117307],{},[33,117302,104461],{},[33,117304,104791],{},[33,117306,104794],{}," 这些数组为什么重要。",[574,117309,117310],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,117312,117313,117314,117316],{},"默认环境为 Fedora 44、Python >= 3.10、",[33,117315,101458],{}," 官方 Python bindings。",[14,117318,117319,117320,117322],{},"注意：本文禁止使用 ",[33,117321,101443],{},"。所有示例均使用：",[26,117324,117325],{"className":30811,"code":102009,"language":30813,"meta":31,"style":31},[33,117326,117327],{"__ignoreMap":31},[36,117328,117329,117331],{"class":38,"line":39},[36,117330,30825],{"class":163},[36,117332,101732],{"class":98},[559,117334,117335],{"id":117335},"适合谁阅读",[14,117337,117338],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[571,117340,117341,117344,117347,117350],{},[574,117342,117343],{},"没学过 MuJoCo，只会一点 Python。",[574,117345,117346],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[574,117348,117349],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[574,117351,117352,117353,117355,117356,117358],{},"以前接触过 ",[33,117354,101443],{},"，现在想迁移到官方 ",[33,117357,101452],{}," Python bindings。",[14,117360,117361],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[559,117363,117365],{"id":117364},"mujoco-到底是什么","MuJoCo 到底是什么",[14,117367,117368],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[26,117370,117373],{"className":117371,"code":117372,"language":5638,"meta":31},[5636],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[33,117374,117372],{"__ignoreMap":31},[14,117376,117377],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[571,117379,117380,117383,117386,117389],{},[574,117381,117382],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[574,117384,117385],{},"快速测试控制算法，不必一开始就上真实机器人。",[574,117387,117388],{},"生成强化学习环境。",[574,117390,117391],{},"采集状态、动作、图像、奖励等训练数据。",[559,117393,117394],{"id":117394},"学习前的心智模型",[14,117396,117397],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[753,117399,117400,117412],{},[756,117401,117402],{},[759,117403,117404,117407,117410],{},[762,117405,117406],{"align":24175},"部分",[762,117408,117409],{"align":24175},"负责什么",[762,117411,21626],{"align":24175},[800,117413,117414,117425,117437,117449,117461],{},[759,117415,117416,117419,117422],{},[805,117417,117418],{"align":24175},"MJCF XML",[805,117420,117421],{"align":24175},"定义世界和机器人结构",[805,117423,117424],{"align":24175},"地面、盒子、关节、电机、摄像头",[759,117426,117427,117431,117434],{},[805,117428,117429],{"align":24175},[33,117430,101141],{},[805,117432,117433],{"align":24175},"编译后的静态模型",[805,117435,117436],{"align":24175},"有几个关节、有几个电机、时间步长是多少",[759,117438,117439,117443,117446],{},[805,117440,117441],{"align":24175},[33,117442,101151],{},[805,117444,117445],{"align":24175},"运行中的动态状态",[805,117447,117448],{"align":24175},"当前时间、位置、速度、电机输入",[759,117450,117451,117455,117458],{},[805,117452,117453],{"align":24175},[33,117454,101646],{},[805,117456,117457],{"align":24175},"推进一步物理仿真",[805,117459,117460],{"align":24175},"根据重力、力、碰撞更新状态",[759,117462,117463,117466,117469],{},[805,117464,117465],{"align":24175},"Viewer \u002F Renderer",[805,117467,117468],{"align":24175},"把仿真显示出来",[805,117470,117471],{"align":24175},"打开窗口或保存图片",[14,117473,117474],{},"一句话总结：",[26,117476,117479],{"className":117477,"code":117478,"language":5638,"meta":31},[5636],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[33,117480,117478],{"__ignoreMap":31},[14,117482,117483],{},"参考来源：",[1618,117485,117486,117493,117500],{},[574,117487,117488,117489],{},"MuJoCo Python 官方文档：",[20,117490,117491],{"href":117491,"rel":117492},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24],[574,117494,117495,117496],{},"MuJoCo XML Reference：",[20,117497,117498],{"href":117498,"rel":117499},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24],[574,117501,117502,117503],{},"MuJoCo Overview：",[20,117504,117505],{"href":117505,"rel":117506},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24],[559,117508,117509],{"id":117509},"章节目录",[571,117511,117512,117518,117524,117530,117536,117542,117548,117554],{},[574,117513,117514],{},[20,117515,117517],{"href":117516},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[574,117519,117520],{},[20,117521,117523],{"href":117522},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[574,117525,117526],{},[20,117527,117529],{"href":117528},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[574,117531,117532],{},[20,117533,117535],{"href":117534},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[574,117537,117538],{},[20,117539,117541],{"href":117540},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[574,117543,117544],{},[20,117545,117547],{"href":117546},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[574,117549,117550],{},[20,117551,117553],{"href":117552},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[574,117555,117556],{},[20,117557,117559],{"href":117558},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[559,117561,117562],{"id":117562},"推荐学习路线",[26,117564,117567],{"className":117565,"code":117566,"language":5638,"meta":31},[5636],"环境安装\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",[33,117568,117566],{"__ignoreMap":31},[14,117570,117571],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[559,117573,117574],{"id":117574},"建议的目录结构",[14,117576,117577],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[26,117579,117581],{"className":24261,"code":117580,"language":24263,"meta":31,"style":31},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[33,117582,117583,117591],{"__ignoreMap":31},[36,117584,117585,117587,117589],{"class":38,"line":39},[36,117586,101697],{"class":55},[36,117588,29649],{"class":109},[36,117590,101702],{"class":59},[36,117592,117593,117595],{"class":38,"line":46},[36,117594,101707],{"class":109},[36,117596,101702],{"class":59},[14,117598,117599],{},"每一章的代码都单独保存：",[26,117601,117604],{"className":117602,"code":117603,"language":5638,"meta":31},[5636],"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",[33,117605,117603],{"__ignoreMap":31},[14,117607,117608],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[559,117610,117611],{"id":117611},"学习方法",[14,117613,117614],{},"每章建议按这个顺序操作：",[571,117616,117617,117620,117623,117626,117629,117632],{},[574,117618,117619],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[574,117621,117622],{},"复制最小可运行代码，保存成指定文件。",[574,117624,117625],{},"运行代码，确认没有报错。",[574,117627,117628],{},"对照“运行结果说明”理解输出。",[574,117630,117631],{},"做“验证步骤”，主动改一两个参数。",[574,117633,117634],{},"遇到报错先看“常见错误与解决方案”。",[14,117636,117637],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[559,117639,117640],{"id":117640},"全局排错顺序",[14,117642,117643],{},"遇到问题时，按下面顺序查：",[571,117645,117646,117652,117658,117663,117666,117669,117676,117686],{},[574,117647,117648,117649],{},"Python 环境是否激活：",[33,117650,117651],{},"which python",[574,117653,117654,117655],{},"MuJoCo 是否能导入：",[33,117656,117657],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[574,117659,117660,117661],{},"是否误装了 ",[33,117662,101443],{},[574,117664,117665],{},"XML 标签是否闭合、属性是否拼写正确",[574,117667,117668],{},"actuator 引用的 joint 名字是否存在",[574,117670,117671,117673,117674],{},[33,117672,101507],{}," 的长度是否等于 ",[33,117675,102589],{},[574,117677,106016,117678,82971,117680,117682,117683],{},[33,117679,104461],{},[33,117681,104791],{}," 后是否调用了 ",[33,117684,117685],{},"mujoco.mj_forward",[574,117687,117688],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[537,117690,117691],{},"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":31,"searchDepth":46,"depth":46,"links":117693},[117694,117695,117696,117697,117698,117699,117700,117701],{"id":117335,"depth":46,"text":117335},{"id":117364,"depth":46,"text":117365},{"id":117394,"depth":46,"text":117394},{"id":117509,"depth":46,"text":117509},{"id":117562,"depth":46,"text":117562},{"id":117574,"depth":46,"text":117574},{"id":117611,"depth":46,"text":117611},{"id":117640,"depth":46,"text":117640},"仿真搭建。",{"category":23817},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117278,"description":117702},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":4,"title":5,"body":117709,"description":542,"extension":543,"meta":118112,"navigation":246,"path":545,"seo":118113,"stem":547,"__hash__":548},{"type":7,"value":117710,"toc":118110},[117711,117713,117715,117720,118108],[10,117712,5],{"id":12},[14,117714,16],{},[14,117716,117717],{},[20,117718,22],{"href":22,"rel":117719},[24],[26,117721,117722],{"className":28,"code":29,"language":30,"meta":31,"style":31},[33,117723,117724,117728,117732,117740,117744,117752,117756,117774,117778,117786,117790,117798,117802,117828,117832,117850,117854,117872,117876,117880,117896,117900,117904,117930,117934,117938,117954,117958,117962,117976,117980,117984,118000,118004,118008,118018,118028,118032,118036,118052,118056,118060,118076,118080,118084,118092,118096,118100],{"__ignoreMap":31},[36,117725,117726],{"class":38,"line":39},[36,117727,43],{"class":42},[36,117729,117730],{"class":38,"line":46},[36,117731,49],{"class":42},[36,117733,117734,117736,117738],{"class":38,"line":52},[36,117735,56],{"class":55},[36,117737,60],{"class":59},[36,117739,63],{"class":59},[36,117741,117742],{"class":38,"line":66},[36,117743,69],{"class":42},[36,117745,117746,117748,117750],{"class":38,"line":72},[36,117747,56],{"class":55},[36,117749,60],{"class":59},[36,117751,79],{"class":59},[36,117753,117754],{"class":38,"line":82},[36,117755,85],{"class":42},[36,117757,117758,117760,117762,117764,117766,117768,117770,117772],{"class":38,"line":88},[36,117759,56],{"class":55},[36,117761,60],{"class":59},[36,117763,95],{"class":59},[36,117765,99],{"class":98},[36,117767,56],{"class":55},[36,117769,60],{"class":59},[36,117771,106],{"class":59},[36,117773,110],{"class":109},[36,117775,117776],{"class":38,"line":113},[36,117777,116],{"class":42},[36,117779,117780,117782,117784],{"class":38,"line":119},[36,117781,122],{"class":55},[36,117783,125],{"class":59},[36,117785,128],{"class":109},[36,117787,117788],{"class":38,"line":131},[36,117789,134],{"class":42},[36,117791,117792,117794,117796],{"class":38,"line":137},[36,117793,56],{"class":55},[36,117795,60],{"class":59},[36,117797,144],{"class":59},[36,117799,117800],{"class":38,"line":147},[36,117801,150],{"class":42},[36,117803,117804,117806,117808,117810,117812,117814,117816,117818,117820,117822,117824,117826],{"class":38,"line":153},[36,117805,56],{"class":55},[36,117807,60],{"class":59},[36,117809,160],{"class":59},[36,117811,164],{"class":163},[36,117813,167],{"class":59},[36,117815,170],{"class":98},[36,117817,173],{"class":163},[36,117819,176],{"class":59},[36,117821,179],{"class":163},[36,117823,182],{"class":59},[36,117825,185],{"class":98},[36,117827,188],{"class":163},[36,117829,117830],{"class":38,"line":191},[36,117831,194],{"class":42},[36,117833,117834,117836,117838,117840,117842,117844,117846,117848],{"class":38,"line":197},[36,117835,56],{"class":55},[36,117837,60],{"class":59},[36,117839,160],{"class":59},[36,117841,164],{"class":163},[36,117843,167],{"class":59},[36,117845,170],{"class":98},[36,117847,173],{"class":163},[36,117849,214],{"class":109},[36,117851,117852],{"class":38,"line":217},[36,117853,220],{"class":42},[36,117855,117856,117858,117860,117862,117864,117866,117868,117870],{"class":38,"line":223},[36,117857,56],{"class":55},[36,117859,60],{"class":59},[36,117861,160],{"class":59},[36,117863,164],{"class":163},[36,117865,167],{"class":59},[36,117867,170],{"class":98},[36,117869,173],{"class":163},[36,117871,240],{"class":109},[36,117873,117874],{"class":38,"line":243},[36,117875,247],{"emptyLinePlaceholder":246},[36,117877,117878],{"class":38,"line":250},[36,117879,253],{"class":42},[36,117881,117882,117884,117886,117888,117890,117892,117894],{"class":38,"line":256},[36,117883,56],{"class":55},[36,117885,60],{"class":59},[36,117887,160],{"class":59},[36,117889,164],{"class":163},[36,117891,167],{"class":59},[36,117893,170],{"class":98},[36,117895,188],{"class":163},[36,117897,117898],{"class":38,"line":273},[36,117899,247],{"emptyLinePlaceholder":246},[36,117901,117902],{"class":38,"line":278},[36,117903,281],{"class":42},[36,117905,117906,117908,117910,117912,117914,117916,117918,117920,117922,117924,117926,117928],{"class":38,"line":284},[36,117907,56],{"class":55},[36,117909,60],{"class":59},[36,117911,160],{"class":59},[36,117913,164],{"class":163},[36,117915,295],{"class":59},[36,117917,298],{"class":163},[36,117919,164],{"class":163},[36,117921,295],{"class":59},[36,117923,305],{"class":163},[36,117925,164],{"class":163},[36,117927,295],{"class":59},[36,117929,312],{"class":163},[36,117931,117932],{"class":38,"line":315},[36,117933,247],{"emptyLinePlaceholder":246},[36,117935,117936],{"class":38,"line":320},[36,117937,323],{"class":42},[36,117939,117940,117942,117944,117946,117948,117950,117952],{"class":38,"line":326},[36,117941,56],{"class":55},[36,117943,60],{"class":59},[36,117945,95],{"class":59},[36,117947,164],{"class":163},[36,117949,167],{"class":59},[36,117951,170],{"class":98},[36,117953,188],{"class":163},[36,117955,117956],{"class":38,"line":343},[36,117957,247],{"emptyLinePlaceholder":246},[36,117959,117960],{"class":38,"line":348},[36,117961,351],{"class":42},[36,117963,117964,117966,117968,117970,117972,117974],{"class":38,"line":354},[36,117965,122],{"class":55},[36,117967,359],{"class":59},[36,117969,164],{"class":163},[36,117971,167],{"class":59},[36,117973,170],{"class":98},[36,117975,188],{"class":163},[36,117977,117978],{"class":38,"line":370},[36,117979,247],{"emptyLinePlaceholder":246},[36,117981,117982],{"class":38,"line":375},[36,117983,378],{"class":42},[36,117985,117986,117988,117990,117992,117994,117996,117998],{"class":38,"line":381},[36,117987,56],{"class":55},[36,117989,60],{"class":59},[36,117991,388],{"class":59},[36,117993,164],{"class":163},[36,117995,167],{"class":59},[36,117997,170],{"class":98},[36,117999,188],{"class":163},[36,118001,118002],{"class":38,"line":399},[36,118003,247],{"emptyLinePlaceholder":246},[36,118005,118006],{"class":38,"line":404},[36,118007,407],{"class":42},[36,118009,118010,118012,118014,118016],{"class":38,"line":410},[36,118011,56],{"class":55},[36,118013,60],{"class":59},[36,118015,417],{"class":59},[36,118017,420],{"class":42},[36,118019,118020,118022,118024,118026],{"class":38,"line":423},[36,118021,56],{"class":55},[36,118023,60],{"class":59},[36,118025,430],{"class":59},[36,118027,433],{"class":42},[36,118029,118030],{"class":38,"line":436},[36,118031,247],{"emptyLinePlaceholder":246},[36,118033,118034],{"class":38,"line":441},[36,118035,444],{"class":42},[36,118037,118038,118040,118042,118044,118046,118048,118050],{"class":38,"line":447},[36,118039,56],{"class":55},[36,118041,60],{"class":59},[36,118043,454],{"class":59},[36,118045,164],{"class":163},[36,118047,167],{"class":59},[36,118049,170],{"class":98},[36,118051,188],{"class":163},[36,118053,118054],{"class":38,"line":465},[36,118055,247],{"emptyLinePlaceholder":246},[36,118057,118058],{"class":38,"line":470},[36,118059,473],{"class":42},[36,118061,118062,118064,118066,118068,118070,118072,118074],{"class":38,"line":476},[36,118063,56],{"class":55},[36,118065,60],{"class":59},[36,118067,483],{"class":59},[36,118069,164],{"class":163},[36,118071,488],{"class":59},[36,118073,491],{"class":98},[36,118075,188],{"class":163},[36,118077,118078],{"class":38,"line":496},[36,118079,247],{"emptyLinePlaceholder":246},[36,118081,118082],{"class":38,"line":501},[36,118083,504],{"class":42},[36,118085,118086,118088,118090],{"class":38,"line":507},[36,118087,122],{"class":55},[36,118089,125],{"class":59},[36,118091,514],{"class":109},[36,118093,118094],{"class":38,"line":517},[36,118095,247],{"emptyLinePlaceholder":246},[36,118097,118098],{"class":38,"line":522},[36,118099,525],{"class":42},[36,118101,118102,118104,118106],{"class":38,"line":528},[36,118103,122],{"class":55},[36,118105,125],{"class":59},[36,118107,535],{"class":109},[537,118109,539],{},{"title":31,"searchDepth":46,"depth":46,"links":118111},[],{},{"title":5,"description":542},{"id":118115,"title":118116,"body":118117,"description":542,"extension":543,"meta":118858,"navigation":246,"path":118859,"seo":118860,"stem":118861,"__hash__":118862},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118118,"toc":118845},[118119,118122,118126,118129,118135,118139,118143,118149,118154,118159,118164,118169,118174,118177,118180,118183,118186,118190,118193,118198,118201,118206,118209,118214,118221,118224,118227,118230,118233,118236,118247,118251,118255,118260,118265,118269,118274,118278,118283,118287,118291,118296,118299,118344,118349,118353,118357,118362,118368,118373,118383,118388,118398,118403,118408,118435,118439,118442,118447,118450,118475,118479,118484,118487,118492,118497,118517,118522,118525,118540,118544,118597,118600,118605,118609,118612,118627,118630,118633,118638,118642,118646,118649,118653,118657,118660,118665,118670,118674,118681,118689,118692,118699,118704,118709,118712,118717,118724,118729,118736,118740,118742,118747,118751,118754,118757,118762,118765,118770,118773,118778,118783,118788,118792,118797,118801,118842],[10,118120,118116],{"id":118121},"_2-linux装机教程",[559,118123,118125],{"id":118124},"_21-实体机","2.1 实体机",[14,118127,118128],{},"使用清华源：（Ubuntu24.04）",[14,118130,118131],{},[20,118132,118133],{"href":118133,"rel":118134},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24],[559,118136,118138],{"id":118137},"_22-普通虚拟机","2.2 普通虚拟机",[588,118140,118142],{"id":118141},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,118144,118145],{},[20,118146,118147],{"href":118147,"rel":118148},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24],[14,118150,118151],{},[1941,118152],{"alt":31,"src":118153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,118155,118156],{},[1941,118157],{"alt":31,"src":118158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,118160,118161],{},[1941,118162],{"alt":31,"src":118163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,118165,118166],{},[1941,118167],{"alt":31,"src":118168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,118170,118171],{},[1941,118172],{"alt":31,"src":118173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,118175,118176],{},"内存4G（4096MB）；",[14,118178,118179],{},"CPU给4个核；",[14,118181,118182],{},"硬盘动态分配60G；",[14,118184,118185],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[588,118187,118189],{"id":118188},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,118191,118192],{},"按照1.1的步骤下载Ubuntu",[14,118194,118195],{},[1941,118196],{"alt":31,"src":118197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,118199,118200],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,118202,118203],{},[1941,118204],{"alt":31,"src":118205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,118207,118208],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,118210,118211],{},[1941,118212],{"alt":31,"src":118213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,118215,118216,118217,118220],{},"选择“正常安装”(找不到都用Alt+F7)， ",[765,118218,118219],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,118222,118223],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,118225,118226],{},"将改动写入磁盘吗 继续",[14,118228,118229],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,118231,118232],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,118234,118235],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,118237,118238,118239,118242,118243,118246],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[765,118240,118241],{},"除了"," 选不发送系统信息与不升级之外， ",[765,118244,118245],{},"其它"," 都跳过或前进）",[588,118248,118250],{"id":118249},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22437,118252,118254],{"id":118253},"_2231-全屏","2.2.3.1 全屏",[14,118256,118257],{},[1941,118258],{"alt":31,"src":118259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,118261,118262],{},[1941,118263],{"alt":31,"src":118264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22437,118266,118268],{"id":118267},"_2232-文件交换","2.2.3.2 文件交换",[14,118270,118271],{},[1941,118272],{"alt":31,"src":118273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22437,118275,118277],{"id":118276},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,118279,118280],{},[1941,118281],{"alt":31,"src":118282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[559,118284,118286],{"id":118285},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[588,118288,118290],{"id":118289},"_231-简介与优缺点","2.3.1 简介与优缺点",[571,118292,118293],{},[574,118294,118295],{},"什么情况下推荐？",[14,118297,118298],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[571,118300,118301],{"start":46},[574,118302,118303,118304],{},"优缺点：",[571,118305,118306,118336],{},[574,118307,118308,118309],{},"优点：",[571,118310,118311,118314,118321,118324,118327,118330,118333],{},[574,118312,118313],{},"WSL2是最好的Linux发行版;(bushi)",[574,118315,118316,118317,118320],{},"性能损耗极低。且比在Windows上跑深度性能 ",[765,118318,118319],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[574,118322,118323],{},"非常方便调用USB设备，可以USB直通;",[574,118325,118326],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[574,118328,118329],{},"非常方便Win与WSL2互相传文件等协同操作;",[574,118331,118332],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[574,118334,118335],{},"非常方便使用Windows的VScode远程开发;",[574,118337,118338,118339],{},"缺点：",[571,118340,118341],{},[574,118342,118343],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,118345,118346],{},[1941,118347],{"alt":31,"src":118348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[588,118350,118352],{"id":118351},"_232-安装教程","2.3.2 安装教程",[22437,118354,118356],{"id":118355},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[571,118358,118359],{},[574,118360,118361],{},"方法一(图形界面)",[14,118363,118364,118365,25055],{},"用Win+R输入",[33,118366,118367],{},"appwiz.cpl",[14,118369,118370],{},[1941,118371],{"alt":31,"src":118372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,118374,118375,118376,118379,118380,26907],{},"点击OK进入 ",[765,118377,118378],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[765,118381,118382],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,118384,118385],{},[1941,118386],{"alt":31,"src":118387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,118389,118390,118391,101449,118394,118397],{},"选择 ",[765,118392,118393],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[765,118395,118396],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,118399,118400],{},[1941,118401],{"alt":31,"src":118402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[571,118404,118405],{"start":46},[574,118406,118407],{},"方法二(命令行)",[26,118409,118413],{"className":118410,"code":118411,"language":118412,"meta":31,"style":31},"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",[33,118414,118415,118420,118425,118430],{"__ignoreMap":31},[36,118416,118417],{"class":38,"line":39},[36,118418,118419],{},"# 开启 Linux 子系统\n",[36,118421,118422],{"class":38,"line":46},[36,118423,118424],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[36,118426,118427],{"class":38,"line":52},[36,118428,118429],{},"# 开启虚拟机平台\n",[36,118431,118432],{"class":38,"line":66},[36,118433,118434],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22437,118436,118438],{"id":118437},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,118440,118441],{},"用管理员权限打开powershell",[14,118443,118444],{},[1941,118445],{"alt":31,"src":118446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,118448,118449],{},"升级WSL并设置默认版本为WSL2",[26,118451,118453],{"className":118410,"code":118452,"language":118412,"meta":31,"style":31},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[33,118454,118455,118460,118465,118470],{"__ignoreMap":31},[36,118456,118457],{"class":38,"line":39},[36,118458,118459],{},"# 更新 wsl\n",[36,118461,118462],{"class":38,"line":46},[36,118463,118464],{},"wsl --update\n",[36,118466,118467],{"class":38,"line":52},[36,118468,118469],{},"# 将 wsl 版本设置为 wsl2\n",[36,118471,118472],{"class":38,"line":66},[36,118473,118474],{},"wsl --set-default-version 2\n",[22437,118476,118478],{"id":118477},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[571,118480,118481],{},[574,118482,118483],{},"方式一(商店下载)",[14,118485,118486],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,118488,118489],{},[1941,118490],{"alt":31,"src":118491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[571,118493,118494],{"start":46},[574,118495,118496],{},"方式二(命令行安装)",[26,118498,118500],{"className":118410,"code":118499,"language":118412,"meta":31,"style":31},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[33,118501,118502,118507,118512],{"__ignoreMap":31},[36,118503,118504],{"class":38,"line":39},[36,118505,118506],{},"# 列出可安装的 Linux 版本\n",[36,118508,118509],{"class":38,"line":46},[36,118510,118511],{},"#（需要科学手段）\n",[36,118513,118514],{"class":38,"line":52},[36,118515,118516],{},"wsl --list --online\n",[14,118518,118519],{},[1941,118520],{"alt":31,"src":118521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,118523,118524],{},"选择对应发行版并安装",[26,118526,118528],{"className":118410,"code":118527,"language":118412,"meta":31,"style":31},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[33,118529,118530,118535],{"__ignoreMap":31},[36,118531,118532],{"class":38,"line":39},[36,118533,118534],{},"# Ubuntu安装完毕后需要重启系统\n",[36,118536,118537],{"class":38,"line":46},[36,118538,118539],{},"wsl --install -d Ubuntu-24.04\n",[22437,118541,118543],{"id":118542},"_2324-查看系统状态","2.3.2.4 查看系统状态",[26,118545,118547],{"className":118410,"code":118546,"language":118412,"meta":31,"style":31},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[33,118548,118549,118554,118559,118564,118569,118573,118577,118582,118587,118592],{"__ignoreMap":31},[36,118550,118551],{"class":38,"line":39},[36,118552,118553],{},"# 查看 wsl\n",[36,118555,118556],{"class":38,"line":46},[36,118557,118558],{},"wsl -l\n",[36,118560,118561],{"class":38,"line":52},[36,118562,118563],{},"# 查看 wsl 运行版本或模式\n",[36,118565,118566],{"class":38,"line":66},[36,118567,118568],{},"wsl -l -v\n",[36,118570,118571],{"class":38,"line":72},[36,118572,247],{"emptyLinePlaceholder":246},[36,118574,118575],{"class":38,"line":82},[36,118576,247],{"emptyLinePlaceholder":246},[36,118578,118579],{"class":38,"line":88},[36,118580,118581],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[36,118583,118584],{"class":38,"line":113},[36,118585,118586],{},"wsl --set-version \u003Cdistro> 2\n",[36,118588,118589],{"class":38,"line":119},[36,118590,118591],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[36,118593,118594],{"class":38,"line":131},[36,118595,118596],{},"wsl --unregister \u003Cdistro>\n",[14,118598,118599],{},"输出Version为2即正常",[14,118601,118602],{},[1941,118603],{"alt":31,"src":118604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22437,118606,118608],{"id":118607},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,118610,118611],{},"直接在Powershell里输入wsl命令进入子系统",[26,118613,118615],{"className":118410,"code":118614,"language":118412,"meta":31,"style":31},"# 进入子系统\nwsl\n",[33,118616,118617,118622],{"__ignoreMap":31},[36,118618,118619],{"class":38,"line":39},[36,118620,118621],{},"# 进入子系统\n",[36,118623,118624],{"class":38,"line":46},[36,118625,118626],{},"wsl\n",[14,118628,118629],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,118631,118632],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,118634,118635],{},[1941,118636],{"alt":31,"src":118637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[588,118639,118641],{"id":118640},"_233-配置各种环境","2.3.3 配置各种环境",[22437,118643,118645],{"id":118644},"_2331-换源","2.3.3.1 换源",[14,118647,118648],{},"(同实体机LINUX，往下找教程)",[22437,118650,118652],{"id":118651},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23349,118654,118656],{"id":118655},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,118658,118659],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,118661,118662],{},[1941,118663],{"alt":31,"src":118664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,118666,118667],{},[1941,118668],{"alt":31,"src":118669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23349,118671,118673],{"id":118672},"_23322-cuda","2.3.3.2.2 CUDA",[14,118675,118676,118677],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[20,118678,118679],{"href":118679,"rel":118680},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24],[14,118682,118683,118686],{},[1941,118684],{"alt":31,"src":118685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1941,118687],{"alt":31,"src":118688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,118690,118691],{},"在下方的网站，选择合适的版本。",[14,118693,118694,118695],{},"WSL2 专属 CUDA 指南：",[20,118696,118697],{"href":118697,"rel":118698},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24],[14,118700,118701],{},[765,118702,118703],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,118705,118706],{},[1941,118707],{"alt":31,"src":118708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,118710,118711],{},"挨行敲一遍",[14,118713,118714],{},[1941,118715],{"alt":31,"src":118716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,118718,118719,118720,118723],{},"敲完后，输入",[33,118721,118722],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,118725,118726],{},[1941,118727],{"alt":31,"src":118728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,118730,118731,118732,118735],{},"（请详看下方教程的",[765,118733,118734],{},"安装CUDA的配置环境来看","如何配置环境）",[23349,118737,118739],{"id":118738},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,118741,118648],{},[14,118743,118744],{},[1941,118745],{"alt":31,"src":118746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22437,118748,118750],{"id":118749},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,118752,118753],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,118755,118756],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,118758,118759],{},[1941,118760],{"alt":31,"src":118761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,118763,118764],{},"连接WSL2",[14,118766,118767],{},[1941,118768],{"alt":31,"src":118769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,118771,118772],{},"远程开发成功。",[14,118774,118775],{},[1941,118776],{"alt":31,"src":118777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,118779,118780],{},[1941,118781],{"alt":31,"src":118782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,118784,118785],{},[1941,118786],{"alt":31,"src":118787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22437,118789,118791],{"id":118790},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,118793,118794],{},[1941,118795],{"alt":31,"src":118796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22437,118798,118800],{"id":118799},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[26,118802,118804],{"className":28,"code":118803,"language":30,"meta":31,"style":31},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[33,118805,118806,118814,118822,118833,118837],{"__ignoreMap":31},[36,118807,118808,118810,118812],{"class":38,"line":39},[36,118809,56],{"class":55},[36,118811,60],{"class":59},[36,118813,63],{"class":59},[36,118815,118816,118818,118820],{"class":38,"line":46},[36,118817,56],{"class":55},[36,118819,60],{"class":59},[36,118821,79],{"class":59},[36,118823,118824,118826,118828,118830],{"class":38,"line":52},[36,118825,56],{"class":55},[36,118827,60],{"class":59},[36,118829,160],{"class":59},[36,118831,118832],{"class":59}," mesa-utils\n",[36,118834,118835],{"class":38,"line":66},[36,118836,247],{"emptyLinePlaceholder":246},[36,118838,118839],{"class":38,"line":72},[36,118840,118841],{"class":42},"#然后重启wsl2即可\n",[537,118843,118844],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":31,"searchDepth":46,"depth":46,"links":118846},[118847,118848,118853],{"id":118124,"depth":46,"text":118125},{"id":118137,"depth":46,"text":118138,"children":118849},[118850,118851,118852],{"id":118141,"depth":52,"text":118142},{"id":118188,"depth":52,"text":118189},{"id":118249,"depth":52,"text":118250},{"id":118285,"depth":46,"text":118286,"children":118854},[118855,118856,118857],{"id":118289,"depth":52,"text":118290},{"id":118351,"depth":52,"text":118352},{"id":118640,"depth":52,"text":118641},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118116,"description":542},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118864,"title":118865,"body":118866,"description":542,"extension":543,"meta":121802,"navigation":246,"path":121803,"seo":121804,"stem":121805,"__hash__":121806},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118867,"toc":121774},[118868,118871,118875,118881,118885,118891,118895,119083,119086,119091,119095,119099,119102,119105,119111,119116,119119,119122,119127,119160,119165,119169,119246,119249,119254,119258,119261,119300,119303,119312,119330,119335,119342,119459,119464,119467,119494,119499,119503,119512,119562,119569,119573,119576,119590,119597,119631,119636,119640,119663,119666,119671,119675,119678,119681,119684,119726,119730,119733,119736,119777,119781,119785,119788,119793,119798,119801,119824,119827,119835,119840,119843,119848,119853,119856,119861,119865,119870,119893,119898,119960,119968,119973,119978,119981,119986,119989,119994,119999,120017,120022,120028,120033,120047,120051,120054,120057,120060,120103,120106,120111,120212,120215,120220,120224,120228,120265,120269,120273,120277,120323,120327,120372,120376,120383,120391,120446,120449,120526,120529,120552,120556,120559,120564,120569,120577,120580,120585,120590,120595,120598,120603,120612,120615,120620,120623,120694,120699,120702,120707,120710,120715,120718,120723,120726,120731,120736,120739,120814,120817,120830,120835,120838,120852,120855,120884,120889,120918,120921,120926,120930,120935,120944,120947,120952,120955,120960,120963,120966,120971,120974,120979,120984,120987,120992,120995,121120,121125,121155,121158,121163,121168,121185,121188,121231,121234,121261,121266,121279,121422,121426,121431,121445,121448,121499,121502,121532,121535,121551,121556,121570,121573,121640,121645,121654,121659,121662,121674,121679,121686,121710,121713,121718,121721,121740,121745,121752,121764,121771],[10,118869,118865],{"id":118870},"_3-安装必备配置",[559,118872,118874],{"id":118873},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[26,118876,118879],{"className":118877,"code":118878,"language":5638},[5636],"  打开下方网站（注意，该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",[33,118880,118878],{"__ignoreMap":31},[588,118882,118884],{"id":118883},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[26,118886,118889],{"className":118887,"code":118888,"language":5638},[5636],"  输入以下命令\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",[33,118890,118888],{"__ignoreMap":31},[588,118892,118894],{"id":118893},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[26,118896,118900],{"className":118897,"code":118898,"language":118899,"meta":31,"style":31},"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",[33,118901,118902,118910,118921,118933,118947,118951,118961,118966,118970,118974,118979,118983,118995,118999,119004,119008,119019,119023,119039,119043,119054,119058,119063,119067,119075],{"__ignoreMap":31},[36,118903,118904,118906,118908],{"class":38,"line":39},[36,118905,56],{"class":55},[36,118907,60],{"class":59},[36,118909,63],{"class":59},[36,118911,118912,118914,118916,118918],{"class":38,"line":46},[36,118913,56],{"class":55},[36,118915,60],{"class":59},[36,118917,160],{"class":59},[36,118919,118920],{"class":59}," vim\n",[36,118922,118923,118925,118928,118930],{"class":38,"line":52},[36,118924,56],{"class":55},[36,118926,118927],{"class":59}," rm",[36,118929,25762],{"class":109},[36,118931,118932],{"class":59}," \u002Fetc\u002Fapt\u002Fsources.list\n",[36,118934,118935,118937,118939,118941,118944],{"class":38,"line":66},[36,118936,56],{"class":55},[36,118938,118927],{"class":59},[36,118940,25762],{"class":109},[36,118942,118943],{"class":59}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[36,118945,118946],{"class":109},"**\n",[36,118948,118949],{"class":38,"line":72},[36,118950,247],{"emptyLinePlaceholder":246},[36,118952,118953,118955,118958],{"class":38,"line":82},[36,118954,56],{"class":55},[36,118956,118957],{"class":59}," vim",[36,118959,118960],{"class":59}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[36,118962,118963],{"class":38,"line":88},[36,118964,118965],{"class":59},"```\n",[36,118967,118968],{"class":38,"line":113},[36,118969,247],{"emptyLinePlaceholder":246},[36,118971,118972],{"class":38,"line":119},[36,118973,247],{"emptyLinePlaceholder":246},[36,118975,118976],{"class":38,"line":131},[36,118977,118978],{"class":55},"选择好Ubuntu版本后，复制下方的内容。\n",[36,118980,118981],{"class":38,"line":137},[36,118982,247],{"emptyLinePlaceholder":246},[36,118984,118985,118987,118990,118993],{"class":38,"line":147},[36,118986,842],{"class":163},[36,118988,118989],{"class":59},"[](",[36,118991,118992],{"class":55},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[36,118994,627],{"class":59},[36,118996,118997],{"class":38,"line":153},[36,118998,247],{"emptyLinePlaceholder":246},[36,119000,119001],{"class":38,"line":191},[36,119002,119003],{"class":55},"粘贴进去\n",[36,119005,119006],{"class":38,"line":197},[36,119007,247],{"emptyLinePlaceholder":246},[36,119009,119010,119012,119014,119017],{"class":38,"line":217},[36,119011,842],{"class":163},[36,119013,118989],{"class":59},[36,119015,119016],{"class":55},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[36,119018,627],{"class":59},[36,119020,119021],{"class":38,"line":223},[36,119022,247],{"emptyLinePlaceholder":246},[36,119024,119025,119028,119031,119034,119036],{"class":38,"line":243},[36,119026,119027],{"class":55},"按一下ESC，然后英文冒号，输入",[36,119029,119030],{"class":59}," `",[36,119032,119033],{"class":55},":wq!",[36,119035,1583],{"class":59},[36,119037,119038],{"class":55},"然后回车\n",[36,119040,119041],{"class":38,"line":250},[36,119042,247],{"emptyLinePlaceholder":246},[36,119044,119045,119047,119049,119052],{"class":38,"line":256},[36,119046,842],{"class":163},[36,119048,118989],{"class":59},[36,119050,119051],{"class":55},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[36,119053,627],{"class":59},[36,119055,119056],{"class":38,"line":273},[36,119057,247],{"emptyLinePlaceholder":246},[36,119059,119060],{"class":38,"line":278},[36,119061,119062],{"class":55},"输入以下命令\n",[36,119064,119065],{"class":38,"line":284},[36,119066,247],{"emptyLinePlaceholder":246},[36,119068,119069,119072],{"class":38,"line":315},[36,119070,119071],{"class":59},"```",[36,119073,119074],{"class":55},"Bash\n",[36,119076,119077,119079,119081],{"class":38,"line":320},[36,119078,56],{"class":55},[36,119080,60],{"class":59},[36,119082,63],{"class":59},[14,119084,119085],{},"这里被替换成对应学校则成功",[14,119087,119088],{},[1941,119089],{"alt":31,"src":119090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[559,119092,119094],{"id":119093},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[588,119096,119098],{"id":119097},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,119100,119101],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,119103,119104],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,119106,119107],{},[20,119108,119109],{"href":119109,"rel":119110},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24],[14,119112,119113],{},[1941,119114],{"alt":31,"src":119115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,119117,119118],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,119120,119121],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,119123,119124],{},[1941,119125],{"alt":31,"src":119126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[26,119128,119130],{"className":28,"code":119129,"language":30,"meta":31,"style":31},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[33,119131,119132,119137,119144,119149],{"__ignoreMap":31},[36,119133,119134],{"class":38,"line":39},[36,119135,119136],{"class":42},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[36,119138,119139,119141],{"class":38,"line":46},[36,119140,101707],{"class":109},[36,119142,119143],{"class":59}," ~\u002FDownloads\n",[36,119145,119146],{"class":38,"line":52},[36,119147,119148],{"class":42},"#下方chrome安装包名不一定是这个，根据名字来看\n",[36,119150,119151,119153,119155,119157],{"class":38,"line":66},[36,119152,56],{"class":55},[36,119154,60],{"class":59},[36,119156,160],{"class":59},[36,119158,119159],{"class":59}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,119161,119162],{},[1941,119163],{"alt":31,"src":119164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[588,119166,119168],{"id":119167},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[26,119170,119172],{"className":28,"code":119171,"language":30,"meta":31,"style":31},"# 老版\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",[33,119173,119174,119179,119187,119198,119203,119207,119212,119222,119230,119241],{"__ignoreMap":31},[36,119175,119176],{"class":38,"line":39},[36,119177,119178],{"class":42},"# 老版\n",[36,119180,119181,119183,119185],{"class":38,"line":46},[36,119182,56],{"class":55},[36,119184,60],{"class":59},[36,119186,63],{"class":59},[36,119188,119189,119191,119193,119195],{"class":38,"line":52},[36,119190,56],{"class":55},[36,119192,60],{"class":59},[36,119194,160],{"class":59},[36,119196,119197],{"class":59}," neofetch\n",[36,119199,119200],{"class":38,"line":66},[36,119201,119202],{"class":55},"neofetch\n",[36,119204,119205],{"class":38,"line":72},[36,119206,247],{"emptyLinePlaceholder":246},[36,119208,119209],{"class":38,"line":82},[36,119210,119211],{"class":42},"# 新版\n",[36,119213,119214,119216,119219],{"class":38,"line":88},[36,119215,56],{"class":55},[36,119217,119218],{"class":59}," add-apt-repository",[36,119220,119221],{"class":59}," ppa:zhangsongcui3371\u002Ffastfetch\n",[36,119223,119224,119226,119228],{"class":38,"line":113},[36,119225,56],{"class":55},[36,119227,60],{"class":59},[36,119229,63],{"class":59},[36,119231,119232,119234,119236,119238],{"class":38,"line":119},[36,119233,56],{"class":55},[36,119235,60],{"class":59},[36,119237,160],{"class":59},[36,119239,119240],{"class":59}," fastfetch\n",[36,119242,119243],{"class":38,"line":131},[36,119244,119245],{"class":55},"fastfetch\n",[14,119247,119248],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,119250,119251],{},[1941,119252],{"alt":31,"src":119253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[588,119255,119257],{"id":119256},"_323-移除snap应用","3.2.3 移除snap应用",[14,119259,119260],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[26,119262,119264],{"className":28,"code":119263,"language":30,"meta":31,"style":31},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[33,119265,119266,119278,119289],{"__ignoreMap":31},[36,119267,119268,119270,119272,119275],{"class":38,"line":39},[36,119269,56],{"class":55},[36,119271,26947],{"class":59},[36,119273,119274],{"class":59}," disable",[36,119276,119277],{"class":59}," snapd.service\n",[36,119279,119280,119282,119284,119286],{"class":38,"line":46},[36,119281,56],{"class":55},[36,119283,26947],{"class":59},[36,119285,119274],{"class":59},[36,119287,119288],{"class":59}," snapd.socket\n",[36,119290,119291,119293,119295,119297],{"class":38,"line":52},[36,119292,56],{"class":55},[36,119294,26947],{"class":59},[36,119296,119274],{"class":59},[36,119298,119299],{"class":59}," snapd.seeded.service\n",[14,119301,119302],{},"然后查看snap应用列表",[14,119304,119305,119306,119311],{},"根据你安装的选择不同（最小安装或普通安装），有",[20,119307,119310],{"href":119308,"rel":119309},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[26,119313,119315],{"className":28,"code":119314,"language":30,"meta":31,"style":31},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[33,119316,119317,119322],{"__ignoreMap":31},[36,119318,119319],{"class":38,"line":39},[36,119320,119321],{"class":42},"# 查询当前系统上snap安装了哪些app\n",[36,119323,119324,119327],{"class":38,"line":46},[36,119325,119326],{"class":55},"snap",[36,119328,119329],{"class":59}," list\n",[14,119331,119332],{},[1941,119333],{"alt":31,"src":119334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,119336,119337,119338,119341],{},"卸载掉图中所有应用，按照 ",[765,119339,119340],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[26,119343,119345],{"className":28,"code":119344,"language":30,"meta":31,"style":31},"#移除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",[33,119346,119347,119352,119364,119369,119380,119385,119396,119401,119412,119417,119421,119426,119437,119448],{"__ignoreMap":31},[36,119348,119349],{"class":38,"line":39},[36,119350,119351],{"class":42},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[36,119353,119354,119356,119359,119361],{"class":38,"line":46},[36,119355,56],{"class":55},[36,119357,119358],{"class":59}," snap",[36,119360,388],{"class":59},[36,119362,119363],{"class":59}," snap-store\n",[36,119365,119366],{"class":38,"line":52},[36,119367,119368],{"class":42},"#移除firefox浏览器\n",[36,119370,119371,119373,119375,119377],{"class":38,"line":66},[36,119372,56],{"class":55},[36,119374,119358],{"class":59},[36,119376,388],{"class":59},[36,119378,119379],{"class":59}," firefox\n",[36,119381,119382],{"class":38,"line":72},[36,119383,119384],{"class":42},"#移除gnome-42-2204\n",[36,119386,119387,119389,119391,119393],{"class":38,"line":82},[36,119388,56],{"class":55},[36,119390,119358],{"class":59},[36,119392,388],{"class":59},[36,119394,119395],{"class":59}," gnome-42-2204\n",[36,119397,119398],{"class":38,"line":88},[36,119399,119400],{"class":42},"#移除gtk-common-themes\n",[36,119402,119403,119405,119407,119409],{"class":38,"line":113},[36,119404,56],{"class":55},[36,119406,119358],{"class":59},[36,119408,388],{"class":59},[36,119410,119411],{"class":59}," gtk-common-themes\n",[36,119413,119414],{"class":38,"line":119},[36,119415,119416],{"class":42},"#移除其它...\n",[36,119418,119419],{"class":38,"line":131},[36,119420,3125],{"class":98},[36,119422,119423],{"class":38,"line":137},[36,119424,119425],{"class":42},"#移除core22,bare以及snapd\n",[36,119427,119428,119430,119432,119434],{"class":38,"line":147},[36,119429,56],{"class":55},[36,119431,119358],{"class":59},[36,119433,388],{"class":59},[36,119435,119436],{"class":59}," core22\n",[36,119438,119439,119441,119443,119445],{"class":38,"line":153},[36,119440,56],{"class":55},[36,119442,119358],{"class":59},[36,119444,388],{"class":59},[36,119446,119447],{"class":59}," bare\n",[36,119449,119450,119452,119454,119456],{"class":38,"line":191},[36,119451,56],{"class":55},[36,119453,119358],{"class":59},[36,119455,388],{"class":59},[36,119457,119458],{"class":59}," snapd\n",[14,119460,119461],{},[1941,119462],{"alt":31,"src":119463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,119465,119466],{},"输入以下命令查看是否还有snap包",[26,119468,119470],{"className":28,"code":119469,"language":30,"meta":31,"style":31},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[33,119471,119472,119478,119482,119486,119490],{"__ignoreMap":31},[36,119473,119474,119476],{"class":38,"line":39},[36,119475,119326],{"class":55},[36,119477,119329],{"class":59},[36,119479,119480],{"class":38,"line":46},[36,119481,119178],{"class":42},[36,119483,119484],{"class":38,"line":52},[36,119485,119202],{"class":55},[36,119487,119488],{"class":38,"line":66},[36,119489,119211],{"class":42},[36,119491,119492],{"class":38,"line":72},[36,119493,119245],{"class":55},[14,119495,119496],{},[1941,119497],{"alt":31,"src":119498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[588,119500,119502],{"id":119501},"_324-移除snap","3.2.4 移除snap",[14,119504,119505,119506,119511],{},"在删除掉",[20,119507,119510],{"href":119508,"rel":119509},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[26,119513,119515],{"className":28,"code":119514,"language":30,"meta":31,"style":31}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[33,119516,119517,119522,119535,119540,119551],{"__ignoreMap":31},[36,119518,119519],{"class":38,"line":39},[36,119520,119521],{"class":42}," #使用apt移除掉snap\n",[36,119523,119524,119526,119528,119530,119533],{"class":38,"line":46},[36,119525,56],{"class":55},[36,119527,60],{"class":59},[36,119529,417],{"class":59},[36,119531,119532],{"class":109}," --purge",[36,119534,119458],{"class":59},[36,119536,119537],{"class":38,"line":52},[36,119538,119539],{"class":42},"#移除snapd的一些目录\n",[36,119541,119542,119544,119546,119548],{"class":38,"line":66},[36,119543,56],{"class":55},[36,119545,118927],{"class":59},[36,119547,25762],{"class":109},[36,119549,119550],{"class":59}," \u002Fvar\u002Fcache\u002Fsnapd\n",[36,119552,119553,119555,119557,119559],{"class":38,"line":72},[36,119554,56],{"class":55},[36,119556,118927],{"class":59},[36,119558,25762],{"class":109},[36,119560,119561],{"class":59}," ~\u002Fsnap\n",[14,119563,119564,119565,119568],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[33,119566,119567],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[588,119570,119572],{"id":119571},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,119574,119575],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[26,119577,119579],{"className":28,"code":119578,"language":30,"meta":31,"style":31},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[33,119580,119581],{"__ignoreMap":31},[36,119582,119583,119585,119587],{"class":38,"line":39},[36,119584,56],{"class":55},[36,119586,118957],{"class":59},[36,119588,119589],{"class":59}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,119591,119592,119593,119596],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[33,119594,119595],{},":wq"," 回车",[26,119598,119600],{"className":28,"code":119599,"language":30,"meta":31,"style":31},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[33,119601,119602,119609,119623],{"__ignoreMap":31},[36,119603,119604,119607],{"class":38,"line":39},[36,119605,119606],{"class":55},"Package:",[36,119608,119458],{"class":59},[36,119610,119611,119614,119617,119620],{"class":38,"line":46},[36,119612,119613],{"class":55},"Pin:",[36,119615,119616],{"class":59}," release",[36,119618,119619],{"class":59}," a=",[36,119621,119622],{"class":109},"*\n",[36,119624,119625,119628],{"class":38,"line":52},[36,119626,119627],{"class":55},"Pin-Priority:",[36,119629,119630],{"class":109}," -10\n",[14,119632,119633],{},[1941,119634],{"alt":31,"src":119635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[588,119637,119639],{"id":119638},"_326-测试是否成功","3.2.6 测试是否成功",[26,119641,119643],{"className":28,"code":119642,"language":30,"meta":31,"style":31},"sudo apt update\nsudo apt install firefox\n",[33,119644,119645,119653],{"__ignoreMap":31},[36,119646,119647,119649,119651],{"class":38,"line":39},[36,119648,56],{"class":55},[36,119650,60],{"class":59},[36,119652,63],{"class":59},[36,119654,119655,119657,119659,119661],{"class":38,"line":46},[36,119656,56],{"class":55},[36,119658,60],{"class":59},[36,119660,160],{"class":59},[36,119662,119379],{"class":59},[14,119664,119665],{},"这里提示snapd无法被安装，就证明成功了",[14,119667,119668],{},[1941,119669],{"alt":31,"src":119670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[588,119672,119674],{"id":119673},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,119676,119677],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,119679,119680],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,119682,119683],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[26,119685,119687],{"className":28,"code":119686,"language":30,"meta":31,"style":31},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[33,119688,119689,119694,119703,119708,119716],{"__ignoreMap":31},[36,119690,119691],{"class":38,"line":39},[36,119692,119693],{"class":42},"# 添加Mozilla提供的源\n",[36,119695,119696,119698,119700],{"class":38,"line":46},[36,119697,56],{"class":55},[36,119699,119218],{"class":59},[36,119701,119702],{"class":59}," ppa:mozillateam\u002Fppa\n",[36,119704,119705],{"class":38,"line":52},[36,119706,119707],{"class":42},"# 安装Firefox\n",[36,119709,119710,119712,119714],{"class":38,"line":66},[36,119711,56],{"class":55},[36,119713,60],{"class":59},[36,119715,63],{"class":59},[36,119717,119718,119720,119722,119724],{"class":38,"line":72},[36,119719,56],{"class":55},[36,119721,60],{"class":59},[36,119723,160],{"class":59},[36,119725,119379],{"class":59},[588,119727,119729],{"id":119728},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,119731,119732],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,119734,119735],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[26,119737,119739],{"className":28,"code":119738,"language":30,"meta":31,"style":31},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[33,119740,119741,119746,119756,119764,119768],{"__ignoreMap":31},[36,119742,119743],{"class":38,"line":39},[36,119744,119745],{"class":42},"#删掉禁止安装snap的配置文件\n",[36,119747,119748,119750,119752,119754],{"class":38,"line":46},[36,119749,56],{"class":55},[36,119751,118927],{"class":59},[36,119753,25762],{"class":109},[36,119755,119589],{"class":59},[36,119757,119758,119760,119762],{"class":38,"line":52},[36,119759,56],{"class":55},[36,119761,60],{"class":59},[36,119763,63],{"class":59},[36,119765,119766],{"class":38,"line":66},[36,119767,247],{"emptyLinePlaceholder":246},[36,119769,119770,119772,119774],{"class":38,"line":72},[36,119771,56],{"class":55},[36,119773,60],{"class":59},[36,119775,119776],{"class":59}," dist-update\n",[559,119778,119780],{"id":119779},"_33-中文输入法","3.3 中文输入法",[588,119782,119784],{"id":119783},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,119786,119787],{},"官网下载搜狗输入法",[14,119789,119790],{},[1941,119791],{"alt":31,"src":119792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,119794,119795],{},[1941,119796],{"alt":31,"src":119797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,119799,119800],{},"打开终端输入如下",[26,119802,119804],{"className":28,"code":119803,"language":30,"meta":31,"style":31},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[33,119805,119806,119813],{"__ignoreMap":31},[36,119807,119808,119810],{"class":38,"line":39},[36,119809,101707],{"class":109},[36,119811,119812],{"class":59}," ~\u002FDownloads\u002F\n",[36,119814,119815,119817,119819,119821],{"class":38,"line":46},[36,119816,56],{"class":55},[36,119818,60],{"class":59},[36,119820,160],{"class":59},[36,119822,119823],{"class":59}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,119825,119826],{},"打开Fcitx",[14,119828,119829,119832],{},[1941,119830],{"alt":31,"src":119831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1941,119833],{"alt":31,"src":119834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,119836,119837],{},[1941,119838],{"alt":31,"src":119839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,119841,119842],{},"添加搜狗输入法",[14,119844,119845],{},[1941,119846],{"alt":31,"src":119847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,119849,119850],{},[1941,119851],{"alt":31,"src":119852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,119854,119855],{},"将搜狗输入法设置为唯一输入法",[14,119857,119858],{},[1941,119859],{"alt":31,"src":119860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[588,119862,119864],{"id":119863},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[571,119866,119867],{},[574,119868,119869],{},"卸载旧输入法",[26,119871,119873],{"className":118897,"code":119872,"language":118899,"meta":31,"style":31},"sudo apt purge fcitx* ibus*\n",[33,119874,119875],{"__ignoreMap":31},[36,119876,119877,119879,119881,119883,119886,119888,119891],{"class":38,"line":39},[36,119878,56],{"class":55},[36,119880,60],{"class":59},[36,119882,454],{"class":59},[36,119884,119885],{"class":59}," fcitx",[36,119887,1069],{"class":109},[36,119889,119890],{"class":59}," ibus",[36,119892,119622],{"class":109},[571,119894,119895],{"start":46},[574,119896,119897],{},"安装Fcitx5",[26,119899,119901],{"className":28,"code":119900,"language":30,"meta":31,"style":31},"# 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",[33,119902,119903,119908,119922,119926,119931,119940,119948],{"__ignoreMap":31},[36,119904,119905],{"class":38,"line":39},[36,119906,119907],{"class":42},"# Ubuntu22.04及以上、Debian12及以上\n",[36,119909,119910,119912,119914,119916,119919],{"class":38,"line":46},[36,119911,56],{"class":55},[36,119913,60],{"class":59},[36,119915,160],{"class":59},[36,119917,119918],{"class":59}," fcitx5",[36,119920,119921],{"class":59}," fcitx5-chinese-addons\n",[36,119923,119924],{"class":38,"line":52},[36,119925,247],{"emptyLinePlaceholder":246},[36,119927,119928],{"class":38,"line":66},[36,119929,119930],{"class":42},"# Ubuntu20.04\n",[36,119932,119933,119935,119937],{"class":38,"line":72},[36,119934,56],{"class":55},[36,119936,119218],{"class":59},[36,119938,119939],{"class":59}," ppa:zhsj\u002Ffcitx5\n",[36,119941,119942,119944,119946],{"class":38,"line":82},[36,119943,56],{"class":55},[36,119945,60],{"class":59},[36,119947,63],{"class":59},[36,119949,119950,119952,119954,119956,119958],{"class":38,"line":88},[36,119951,56],{"class":55},[36,119953,60],{"class":59},[36,119955,160],{"class":59},[36,119957,119918],{"class":59},[36,119959,119921],{"class":59},[571,119961,119962,119965],{"start":52},[574,119963,119964],{},"Reboot System",[574,119966,119967],{},"启动Fcitx5",[14,119969,119970],{},[1941,119971],{"alt":31,"src":119972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[571,119974,119975],{"start":72},[574,119976,119977],{},"修改一些设置",[14,119979,119980],{},"将Pinyin和Keyboard - English US加入到左边。",[14,119982,119983],{},[1941,119984],{"alt":31,"src":119985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,119987,119988],{},"添加快捷键以便于更好切换中英文",[14,119990,119991],{},[1941,119992],{"alt":31,"src":119993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[571,119995,119996],{"start":82},[574,119997,119998],{},"重启",[26,120000,120002],{"className":118897,"code":120001,"language":118899,"meta":31,"style":31},"sudo shutdown -r now\n",[33,120003,120004],{"__ignoreMap":31},[36,120005,120006,120008,120011,120014],{"class":38,"line":39},[36,120007,56],{"class":55},[36,120009,120010],{"class":59}," shutdown",[36,120012,120013],{"class":109}," -r",[36,120015,120016],{"class":59}," now\n",[571,120018,120019],{"start":88},[574,120020,120021],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,120023,120024],{},[20,120025,120026],{"href":120026,"rel":120027},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24],[571,120029,120030],{"start":113},[574,120031,120032],{},"再重启",[26,120034,120035],{"className":118897,"code":120001,"language":118899,"meta":31,"style":31},[33,120036,120037],{"__ignoreMap":31},[36,120038,120039,120041,120043,120045],{"class":38,"line":39},[36,120040,56],{"class":55},[36,120042,120010],{"class":59},[36,120044,120013],{"class":109},[36,120046,120016],{"class":59},[559,120048,120050],{"id":120049},"_34-pip3源替换","3.4 pip3源替换",[14,120052,120053],{},"非Debian系发行版需要做。",[14,120055,120056],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,120058,120059],{},"使用dnf的系统也可能不用做。",[26,120061,120063],{"className":28,"code":120062,"language":30,"meta":31,"style":31},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[33,120064,120065,120070,120077,120082,120087],{"__ignoreMap":31},[36,120066,120067],{"class":38,"line":39},[36,120068,120069],{"class":42},"# 检查是否已安装 pip\n",[36,120071,120072,120075],{"class":38,"line":46},[36,120073,120074],{"class":55},"pip3",[36,120076,26727],{"class":109},[36,120078,120079],{"class":38,"line":52},[36,120080,120081],{"class":42},"# 如果未安装，先安装 pip3（见下方）\n",[36,120083,120084],{"class":38,"line":66},[36,120085,120086],{"class":42},"# 配置 pip 使用清华源\n",[36,120088,120089,120091,120094,120097,120100],{"class":38,"line":72},[36,120090,120074],{"class":55},[36,120092,120093],{"class":59}," config",[36,120095,120096],{"class":59}," set",[36,120098,120099],{"class":59}," global.index-url",[36,120101,120102],{"class":59}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,120104,120105],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,120107,120108],{},[1941,120109],{"alt":31,"src":120110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[26,120112,120114],{"className":28,"code":120113,"language":30,"meta":31,"style":31},"#安装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",[33,120115,120116,120121,120129,120140,120144,120149,120168,120172,120177,120189,120193,120198],{"__ignoreMap":31},[36,120117,120118],{"class":38,"line":39},[36,120119,120120],{"class":42},"#安装pip3\n",[36,120122,120123,120125,120127],{"class":38,"line":46},[36,120124,56],{"class":55},[36,120126,60],{"class":59},[36,120128,63],{"class":59},[36,120130,120131,120133,120135,120137],{"class":38,"line":52},[36,120132,56],{"class":55},[36,120134,26513],{"class":59},[36,120136,160],{"class":59},[36,120138,120139],{"class":59}," python3-pip\n",[36,120141,120142],{"class":38,"line":66},[36,120143,247],{"emptyLinePlaceholder":246},[36,120145,120146],{"class":38,"line":72},[36,120147,120148],{"class":42},"#更新pip3\n",[36,120150,120151,120153,120155,120157,120159,120161,120164,120166],{"class":38,"line":82},[36,120152,101311],{"class":55},[36,120154,101314],{"class":109},[36,120156,101337],{"class":59},[36,120158,160],{"class":59},[36,120160,26864],{"class":109},[36,120162,120163],{"class":59}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[36,120165,101342],{"class":109},[36,120167,101345],{"class":59},[36,120169,120170],{"class":38,"line":88},[36,120171,247],{"emptyLinePlaceholder":246},[36,120173,120174],{"class":38,"line":113},[36,120175,120176],{"class":42},"#设置pip源为清华源\n",[36,120178,120179,120181,120183,120185,120187],{"class":38,"line":119},[36,120180,120074],{"class":55},[36,120182,120093],{"class":59},[36,120184,120096],{"class":59},[36,120186,120099],{"class":59},[36,120188,120102],{"class":59},[36,120190,120191],{"class":38,"line":131},[36,120192,247],{"emptyLinePlaceholder":246},[36,120194,120195],{"class":38,"line":137},[36,120196,120197],{"class":42},"#测试\n",[36,120199,120200,120202,120204,120206,120208,120210],{"class":38,"line":147},[36,120201,101311],{"class":55},[36,120203,101314],{"class":109},[36,120205,101337],{"class":59},[36,120207,160],{"class":59},[36,120209,101342],{"class":109},[36,120211,101345],{"class":59},[14,120213,120214],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,120216,120217],{},[1941,120218],{"alt":31,"src":120219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[559,120221,120223],{"id":120222},"_35-显卡驱动安装","3.5 显卡驱动安装",[588,120225,120227],{"id":120226},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[26,120229,120231],{"className":118897,"code":120230,"language":118899,"meta":31,"style":31},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[33,120232,120233,120238,120253,120258],{"__ignoreMap":31},[36,120234,120235],{"class":38,"line":39},[36,120236,120237],{"class":42},"# 如果是使用apt安装的驱动\n",[36,120239,120240,120242,120244,120246,120248,120251],{"class":38,"line":46},[36,120241,56],{"class":55},[36,120243,26513],{"class":59},[36,120245,388],{"class":59},[36,120247,119532],{"class":109},[36,120249,120250],{"class":59}," nvidia",[36,120252,119622],{"class":109},[36,120254,120255],{"class":38,"line":52},[36,120256,120257],{"class":42},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[36,120259,120260,120262],{"class":38,"line":66},[36,120261,56],{"class":55},[36,120263,120264],{"class":59}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[588,120266,120268],{"id":120267},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22437,120270,120272],{"id":120271},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23349,120274,120276],{"id":120275},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[26,120278,120280],{"className":118897,"code":120279,"language":118899,"meta":31,"style":31},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[33,120281,120282,120287,120298,120303,120313,120318],{"__ignoreMap":31},[36,120283,120284],{"class":38,"line":39},[36,120285,120286],{"class":42},"# 安装英伟达驱动\n",[36,120288,120289,120291,120293,120295],{"class":38,"line":46},[36,120290,56],{"class":55},[36,120292,60],{"class":59},[36,120294,160],{"class":59},[36,120296,120297],{"class":59}," nvidia-driver-版本号\n",[36,120299,120300],{"class":38,"line":52},[36,120301,120302],{"class":42},"# 重启 \n",[36,120304,120305,120307,120309,120311],{"class":38,"line":66},[36,120306,56],{"class":55},[36,120308,120010],{"class":59},[36,120310,120013],{"class":109},[36,120312,120016],{"class":59},[36,120314,120315],{"class":38,"line":72},[36,120316,120317],{"class":42},"# 检查驱动是否安装成功\n",[36,120319,120320],{"class":38,"line":82},[36,120321,120322],{"class":55},"nvidia-smi\n",[23349,120324,120326],{"id":120325},"_35212-debian","3.5.2.1.2 Debian",[26,120328,120330],{"className":118897,"code":120329,"language":118899,"meta":31,"style":31},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[33,120331,120332,120336,120350,120354,120364,120368],{"__ignoreMap":31},[36,120333,120334],{"class":38,"line":39},[36,120335,120286],{"class":42},[36,120337,120338,120340,120342,120344,120347],{"class":38,"line":46},[36,120339,56],{"class":55},[36,120341,60],{"class":59},[36,120343,160],{"class":59},[36,120345,120346],{"class":59}," nvidia-driver",[36,120348,120349],{"class":59}," nvidia-settings\n",[36,120351,120352],{"class":38,"line":52},[36,120353,120302],{"class":42},[36,120355,120356,120358,120360,120362],{"class":38,"line":66},[36,120357,56],{"class":55},[36,120359,120010],{"class":59},[36,120361,120013],{"class":109},[36,120363,120016],{"class":59},[36,120365,120366],{"class":38,"line":72},[36,120367,120317],{"class":42},[36,120369,120370],{"class":38,"line":82},[36,120371,120322],{"class":55},[22437,120373,120375],{"id":120374},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,120377,120378,120379,120382],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[765,120380,120381],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,120384,120385,120386],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23992,120387,120388],{},[765,120389,120390],{},"（也可以不禁用桌面环境，直接进行下一步。）",[26,120392,120394],{"className":118897,"code":120393,"language":118899,"meta":31,"style":31},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[33,120395,120396,120401,120411,120416,120429,120434],{"__ignoreMap":31},[36,120397,120398],{"class":38,"line":39},[36,120399,120400],{"class":42},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[36,120402,120403,120405,120408],{"class":38,"line":46},[36,120404,56],{"class":55},[36,120406,120407],{"class":59}," telinit",[36,120409,120410],{"class":109}," 3\n",[36,120412,120413],{"class":38,"line":52},[36,120414,120415],{"class":42},"# ubuntu 使用下方命令\n",[36,120417,120418,120420,120423,120426],{"class":38,"line":66},[36,120419,56],{"class":55},[36,120421,120422],{"class":59}," service",[36,120424,120425],{"class":59}," lightdm",[36,120427,120428],{"class":59}," stop\n",[36,120430,120431],{"class":38,"line":72},[36,120432,120433],{"class":42},"# Fedora 使用下方命令\n",[36,120435,120436,120438,120440,120443],{"class":38,"line":82},[36,120437,56],{"class":55},[36,120439,26947],{"class":59},[36,120441,120442],{"class":59}," isolate",[36,120444,120445],{"class":59}," multi-user.target\n",[14,120447,120448],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[26,120450,120452],{"className":118897,"code":120451,"language":118899,"meta":31,"style":31},"# 编译环境+准备工作\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",[33,120453,120454,120459,120470,120475,120482,120487,120499,120504,120511,120516],{"__ignoreMap":31},[36,120455,120456],{"class":38,"line":39},[36,120457,120458],{"class":42},"# 编译环境+准备工作\n",[36,120460,120461,120463,120465,120467],{"class":38,"line":46},[36,120462,56],{"class":55},[36,120464,60],{"class":59},[36,120466,160],{"class":59},[36,120468,120469],{"class":59}," build-essential\n",[36,120471,120472],{"class":38,"line":52},[36,120473,120474],{"class":42},"# 进入到.run目录中\n",[36,120476,120477,120479],{"class":38,"line":66},[36,120478,101707],{"class":109},[36,120480,120481],{"class":59}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[36,120483,120484],{"class":38,"line":72},[36,120485,120486],{"class":42},"# 给驱动文件增加可执行权限：\n",[36,120488,120489,120491,120493,120496],{"class":38,"line":82},[36,120490,56],{"class":55},[36,120492,25016],{"class":59},[36,120494,120495],{"class":59}," a+x",[36,120497,120498],{"class":59}," NVIDIA-Linux-x86_64-550.107.02.run\n",[36,120500,120501],{"class":38,"line":88},[36,120502,120503],{"class":42},"# 然后执行安装：\n",[36,120505,120506,120508],{"class":38,"line":113},[36,120507,56],{"class":55},[36,120509,120510],{"class":59}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[36,120512,120513],{"class":38,"line":119},[36,120514,120515],{"class":42},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[36,120517,120518,120520,120523],{"class":38,"line":131},[36,120519,56],{"class":55},[36,120521,120522],{"class":59}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[36,120524,120525],{"class":109},"  --no-opengl-files\n",[14,120527,120528],{},"安装完毕重启即可",[26,120530,120532],{"className":118897,"code":120531,"language":118899,"meta":31,"style":31},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[33,120533,120534,120538,120544,120548],{"__ignoreMap":31},[36,120535,120536],{"class":38,"line":39},[36,120537,120302],{"class":42},[36,120539,120540,120542],{"class":38,"line":46},[36,120541,56],{"class":55},[36,120543,27081],{"class":59},[36,120545,120546],{"class":38,"line":52},[36,120547,120317],{"class":42},[36,120549,120550],{"class":38,"line":66},[36,120551,120322],{"class":55},[588,120553,120555],{"id":120554},"_353-安装cuda","3.5.3 安装CUDA",[14,120557,120558],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,120560,120561],{},[1941,120562],{"alt":31,"src":120563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[571,120565,120566],{},[574,120567,120568],{},"先查看显卡驱动所支持的最高CUDA版本",[26,120570,120571],{"className":118897,"code":120322,"language":118899,"meta":31,"style":31},[33,120572,120573],{"__ignoreMap":31},[36,120574,120575],{"class":38,"line":39},[36,120576,120322],{"class":55},[14,120578,120579],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,120581,120582],{},[1941,120583],{"alt":31,"src":120584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[571,120586,120587],{"start":46},[574,120588,120589],{},"下载CUDA并安装CUDA",[14,120591,118676,120592],{},[20,120593,118679],{"href":118679,"rel":120594},[24],[14,120596,120597],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,120599,120600],{},[1941,120601],{"alt":31,"src":120602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,120604,120605,120606,120611],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[20,120607,120610],{"href":120608,"rel":120609},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24],"Vinci机器人队单片机教程","）",[14,120613,120614],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,120616,120617],{},[1941,120618],{"alt":31,"src":120619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,120621,120622],{},"将最下方框框里的命令敲入终端",[26,120624,120626],{"className":118897,"code":120625,"language":118899,"meta":31,"style":31},"# 在当前文件夹下创建一个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",[33,120627,120628,120633,120642,120647,120654,120659,120667,120672,120683,120688],{"__ignoreMap":31},[36,120629,120630],{"class":38,"line":39},[36,120631,120632],{"class":42},"# 在当前文件夹下创建一个ttt的子文件夹\n",[36,120634,120635,120637,120639],{"class":38,"line":46},[36,120636,101697],{"class":55},[36,120638,29649],{"class":109},[36,120640,120641],{"class":59}," .\u002Fttt\n",[36,120643,120644],{"class":38,"line":52},[36,120645,120646],{"class":42},"# 进入ttt文件夹\n",[36,120648,120649,120651],{"class":38,"line":66},[36,120650,101707],{"class":109},[36,120652,120653],{"class":59}," ttt\n",[36,120655,120656],{"class":38,"line":72},[36,120657,120658],{"class":42},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[36,120660,120661,120664],{"class":38,"line":82},[36,120662,120663],{"class":55},"wget",[36,120665,120666],{"class":59}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[36,120668,120669],{"class":38,"line":88},[36,120670,120671],{"class":42},"# 给予权限\n",[36,120673,120674,120676,120678,120680],{"class":38,"line":113},[36,120675,56],{"class":55},[36,120677,25016],{"class":59},[36,120679,120495],{"class":59},[36,120681,120682],{"class":59}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[36,120684,120685],{"class":38,"line":119},[36,120686,120687],{"class":42},"# 运行脚本\n",[36,120689,120690,120692],{"class":38,"line":131},[36,120691,56],{"class":55},[36,120693,120682],{"class":59},[14,120695,120696],{},[1941,120697],{"alt":31,"src":120698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,120700,120701],{},"正在安装中：",[14,120703,120704],{},[1941,120705],{"alt":31,"src":120706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,120708,120709],{},"输入accept接受即可",[14,120711,120712],{},[1941,120713],{"alt":31,"src":120714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,120716,120717],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,120719,120720],{},[1941,120721],{"alt":31,"src":120722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,120724,120725],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,120727,120728],{},[1941,120729],{"alt":31,"src":120730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[571,120732,120733],{"start":52},[574,120734,120735],{},"配置环境",[14,120737,120738],{},"根据上方确认一下路径，比如我上面红色框起来的为",[26,120740,120742],{"className":118897,"code":120741,"language":118899,"meta":31,"style":31},"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",[33,120743,120744,120760,120775],{"__ignoreMap":31},[36,120745,120746,120749,120752,120755,120758],{"class":38,"line":39},[36,120747,120748],{"class":55},"Please",[36,120750,120751],{"class":59}," make",[36,120753,120754],{"class":59}," sure",[36,120756,120757],{"class":59}," that",[36,120759,3125],{"class":98},[36,120761,120762,120764,120767,120770,120773],{"class":38,"line":46},[36,120763,52703],{"class":55},[36,120765,120766],{"class":59},"   PATH",[36,120768,120769],{"class":59}," includes",[36,120771,120772],{"class":59}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[36,120774,3125],{"class":98},[36,120776,120777,120779,120782,120784,120787,120790,120792,120795,120798,120801,120804,120806,120809,120811],{"class":38,"line":52},[36,120778,52703],{"class":55},[36,120780,120781],{"class":59},"   LD_LIBRARY_PATH",[36,120783,120769],{"class":59},[36,120785,120786],{"class":59}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[36,120788,120789],{"class":59}," or,",[36,120791,5660],{"class":59},[36,120793,120794],{"class":59}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[36,120796,120797],{"class":59}," to",[36,120799,120800],{"class":59}," \u002Fetc\u002Fld.so.conf",[36,120802,120803],{"class":59}," and",[36,120805,27664],{"class":59},[36,120807,120808],{"class":59}," ldconfig",[36,120810,65036],{"class":59},[36,120812,120813],{"class":59}," root\n",[14,120815,120816],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[26,120818,120820],{"className":118897,"code":120819,"language":118899,"meta":31,"style":31},"which nvcc\n",[33,120821,120822],{"__ignoreMap":31},[36,120823,120824,120827],{"class":38,"line":39},[36,120825,120826],{"class":109},"which",[36,120828,120829],{"class":59}," nvcc\n",[14,120831,120832],{},[1941,120833],{"alt":31,"src":120834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,120836,120837],{},"所以我进行以下操作：",[26,120839,120841],{"className":118897,"code":120840,"language":118899,"meta":31,"style":31},"sudo vim ~\u002F.bashrc\n",[33,120842,120843],{"__ignoreMap":31},[36,120844,120845,120847,120849],{"class":38,"line":39},[36,120846,56],{"class":55},[36,120848,118957],{"class":59},[36,120850,120851],{"class":59}," ~\u002F.bashrc\n",[14,120853,120854],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[26,120856,120858],{"className":118897,"code":120857,"language":118899,"meta":31,"style":31},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[33,120859,120860,120872],{"__ignoreMap":31},[36,120861,120862,120864,120867,120869],{"class":38,"line":39},[36,120863,25479],{"class":163},[36,120865,120866],{"class":98}," PATH",[36,120868,176],{"class":163},[36,120870,120871],{"class":98},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[36,120873,120874,120876,120879,120881],{"class":38,"line":46},[36,120875,25479],{"class":163},[36,120877,120878],{"class":98}," LD_LIBRARY_PATH",[36,120880,176],{"class":163},[36,120882,120883],{"class":98},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,120885,120886],{},[1941,120887],{"alt":31,"src":120888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[26,120890,120892],{"className":118897,"code":120891,"language":118899,"meta":31,"style":31},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[33,120893,120894,120899,120905,120910],{"__ignoreMap":31},[36,120895,120896],{"class":38,"line":39},[36,120897,120898],{"class":42},"# 刷新当前终端的环境变量\n",[36,120900,120901,120903],{"class":38,"line":46},[36,120902,101325],{"class":109},[36,120904,120851],{"class":59},[36,120906,120907],{"class":38,"line":52},[36,120908,120909],{"class":42},"# 验证CUDA是否安装成功\n",[36,120911,120912,120915],{"class":38,"line":66},[36,120913,120914],{"class":55},"nvcc",[36,120916,120917],{"class":109}," -V\n",[14,120919,120920],{},"出现下图这种则安装成功。",[14,120922,120923],{},[1941,120924],{"alt":31,"src":120925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[588,120927,120929],{"id":120928},"_354-安装cudnn","3.5.4 安装cuDNN",[571,120931,120932],{},[574,120933,120934],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,120936,120937,120938,120943],{},"前往 NVIDIA cuDNN 下载页面：",[20,120939,120942],{"href":120940,"rel":120941},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,120945,120946],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,120948,120949],{},[1941,120950],{"alt":31,"src":120951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,120953,120954],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,120956,120957],{},[1941,120958],{"alt":31,"src":120959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,120961,120962],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,120964,120965],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,120967,120968],{},[765,120969,120970],{},"我这里选择所有Linux X86_64最通用的办法：",[14,120972,120973],{},"下载好的：",[14,120975,120976],{},[1941,120977],{"alt":31,"src":120978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[571,120980,120981],{"start":46},[574,120982,120983],{},"安装cuDNN",[14,120985,120986],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,120988,120989],{},[1941,120990],{"alt":31,"src":120991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,120993,120994],{},"解压文件，并复制到对应位置完成安装",[26,120996,120998],{"className":118897,"code":120997,"language":118899,"meta":31,"style":31},"# 解压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",[33,120999,121000,121005,121016,121021,121028,121033,121049,121063,121068,121079,121088,121092,121108],{"__ignoreMap":31},[36,121001,121002],{"class":38,"line":39},[36,121003,121004],{"class":42},"# 解压cuDNN文件\n",[36,121006,121007,121010,121013],{"class":38,"line":46},[36,121008,121009],{"class":55},"tar",[36,121011,121012],{"class":109}," -xvf",[36,121014,121015],{"class":59}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[36,121017,121018],{"class":38,"line":52},[36,121019,121020],{"class":42},"# cd进文件夹\n",[36,121022,121023,121025],{"class":38,"line":66},[36,121024,101707],{"class":109},[36,121026,121027],{"class":59}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[36,121029,121030],{"class":38,"line":72},[36,121031,121032],{"class":42},"# 复制cuDNN文件到CUDA目录\n",[36,121034,121035,121037,121039,121042,121044,121047],{"class":38,"line":82},[36,121036,56],{"class":55},[36,121038,28295],{"class":59},[36,121040,121041],{"class":59}," include\u002Fcudnn",[36,121043,1069],{"class":109},[36,121045,121046],{"class":59},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[36,121048,3125],{"class":98},[36,121050,121051,121053,121055,121058,121060],{"class":38,"line":88},[36,121052,56],{"class":55},[36,121054,28295],{"class":59},[36,121056,121057],{"class":59}," lib\u002Flibcudnn",[36,121059,1069],{"class":109},[36,121061,121062],{"class":59},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[36,121064,121065],{"class":38,"line":113},[36,121066,121067],{"class":42},"# 对比一下有没有缺文件\n",[36,121069,121070,121072,121075,121077],{"class":38,"line":119},[36,121071,27195],{"class":55},[36,121073,121074],{"class":59}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[36,121076,1069],{"class":109},[36,121078,3125],{"class":98},[36,121080,121081,121083,121086],{"class":38,"line":131},[36,121082,27195],{"class":55},[36,121084,121085],{"class":59}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[36,121087,119622],{"class":109},[36,121089,121090],{"class":38,"line":137},[36,121091,120671],{"class":42},[36,121093,121094,121096,121098,121101,121103,121105],{"class":38,"line":147},[36,121095,56],{"class":55},[36,121097,25016],{"class":59},[36,121099,121100],{"class":59}," a+r",[36,121102,121074],{"class":59},[36,121104,1069],{"class":109},[36,121106,121107],{"class":98},"   \n",[36,121109,121110,121112,121114,121116,121118],{"class":38,"line":153},[36,121111,56],{"class":55},[36,121113,25016],{"class":59},[36,121115,121100],{"class":59},[36,121117,121085],{"class":59},[36,121119,119622],{"class":109},[571,121121,121122],{"start":52},[574,121123,121124],{},"检查是否安装成功",[26,121126,121128],{"className":118897,"code":121127,"language":118899,"meta":31,"style":31},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[33,121129,121130,121135],{"__ignoreMap":31},[36,121131,121132],{"class":38,"line":39},[36,121133,121134],{"class":42},"# 检查cuDNN版本命令\n",[36,121136,121137,121140,121143,121145,121147,121150,121153],{"class":38,"line":46},[36,121138,121139],{"class":55},"cat",[36,121141,121142],{"class":59}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[36,121144,25546],{"class":163},[36,121146,30669],{"class":55},[36,121148,121149],{"class":59}," CUDNN_MAJOR",[36,121151,121152],{"class":109}," -A",[36,121154,48156],{"class":109},[14,121156,121157],{},"出现下图这样的就是安装成功了",[14,121159,121160],{},[1941,121161],{"alt":31,"src":121162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[571,121164,121165],{"start":66},[574,121166,121167],{},"软链接(一般不需要)",[26,121169,121171],{"className":118897,"code":121170,"language":118899,"meta":31,"style":31},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[33,121172,121173,121178],{"__ignoreMap":31},[36,121174,121175],{"class":38,"line":39},[36,121176,121177],{"class":42},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[36,121179,121180,121182],{"class":38,"line":46},[36,121181,56],{"class":55},[36,121183,121184],{"class":59}," ldconfig\n",[14,121186,121187],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[26,121189,121194],{"className":121190,"code":121191,"language":121192,"meta":121193,"style":31},"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",[33,121195,121196,121201,121206,121211,121216,121221,121226],{"__ignoreMap":31},[36,121197,121198],{"class":38,"line":39},[36,121199,121200],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[36,121202,121203],{"class":38,"line":46},[36,121204,121205],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[36,121207,121208],{"class":38,"line":52},[36,121209,121210],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[36,121212,121213],{"class":38,"line":66},[36,121214,121215],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[36,121217,121218],{"class":38,"line":72},[36,121219,121220],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[36,121222,121223],{"class":38,"line":82},[36,121224,121225],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[36,121227,121228],{"class":38,"line":88},[36,121229,121230],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,121232,121233],{},"运行下方的命令",[26,121235,121237],{"className":118897,"code":121236,"language":118899,"meta":31,"style":31},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[33,121238,121239,121244,121251,121256],{"__ignoreMap":31},[36,121240,121241],{"class":38,"line":39},[36,121242,121243],{"class":42},"# cd进入CUDA路径\n",[36,121245,121246,121248],{"class":38,"line":46},[36,121247,101707],{"class":109},[36,121249,121250],{"class":59}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[36,121252,121253],{"class":38,"line":52},[36,121254,121255],{"class":42}," # 查看本路径下的需要软链接的文件名\n",[36,121257,121258],{"class":38,"line":66},[36,121259,121260],{"class":55}," ls\n",[14,121262,121263],{},[1941,121264],{"alt":31,"src":121265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,121267,121268,121269,18849,121272,18849,121275,121278],{},"如上图，我需要将",[33,121270,121271],{},"libcudnn_xxx_xxxxx.so.8.9.7",[33,121273,121274],{},"libcudnn_xxx_xxxxx.so.8",[33,121276,121277],{},"libcudnn_xxx_xxxxx.so","软链接",[26,121280,121282],{"className":118897,"code":121281,"language":118899,"meta":31,"style":31},"# 创建符号链接。对于每个 .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",[33,121283,121284,121289,121305,121319,121333,121347,121361,121375,121389,121394,121400,121405],{"__ignoreMap":31},[36,121285,121286],{"class":38,"line":39},[36,121287,121288],{"class":42},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[36,121290,121291,121293,121296,121299,121302],{"class":38,"line":46},[36,121292,56],{"class":55},[36,121294,121295],{"class":59}," ln",[36,121297,121298],{"class":109}," -sf",[36,121300,121301],{"class":59}," libcudnn_cnn_train.so.8.9.7",[36,121303,121304],{"class":59}," libcudnn_cnn_train.so.8\n",[36,121306,121307,121309,121311,121313,121316],{"class":38,"line":52},[36,121308,56],{"class":55},[36,121310,121295],{"class":59},[36,121312,121298],{"class":109},[36,121314,121315],{"class":59}," libcudnn_adv_infer.so.8.9.7",[36,121317,121318],{"class":59}," libcudnn_adv_infer.so.8\n",[36,121320,121321,121323,121325,121327,121330],{"class":38,"line":66},[36,121322,56],{"class":55},[36,121324,121295],{"class":59},[36,121326,121298],{"class":109},[36,121328,121329],{"class":59}," libcudnn_adv_train.so.8.9.7",[36,121331,121332],{"class":59}," libcudnn_adv_train.so.8\n",[36,121334,121335,121337,121339,121341,121344],{"class":38,"line":72},[36,121336,56],{"class":55},[36,121338,121295],{"class":59},[36,121340,121298],{"class":109},[36,121342,121343],{"class":59}," libcudnn_cnn_infer.so.8.9.7",[36,121345,121346],{"class":59}," libcudnn_cnn_infer.so.8\n",[36,121348,121349,121351,121353,121355,121358],{"class":38,"line":82},[36,121350,56],{"class":55},[36,121352,121295],{"class":59},[36,121354,121298],{"class":109},[36,121356,121357],{"class":59}," libcudnn.so.8.9.7",[36,121359,121360],{"class":59}," libcudnn.so.8\n",[36,121362,121363,121365,121367,121369,121372],{"class":38,"line":88},[36,121364,56],{"class":55},[36,121366,121295],{"class":59},[36,121368,121298],{"class":109},[36,121370,121371],{"class":59}," libcudnn_ops_infer.so.8.9.7",[36,121373,121374],{"class":59}," libcudnn_ops_infer.so.8\n",[36,121376,121377,121379,121381,121383,121386],{"class":38,"line":113},[36,121378,56],{"class":55},[36,121380,121295],{"class":59},[36,121382,121298],{"class":109},[36,121384,121385],{"class":59}," libcudnn_ops_train.so.8.9.7",[36,121387,121388],{"class":59}," libcudnn_ops_train.so.8\n",[36,121390,121391],{"class":38,"line":119},[36,121392,121393],{"class":42},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[36,121395,121396,121398],{"class":38,"line":131},[36,121397,56],{"class":55},[36,121399,121184],{"class":59},[36,121401,121402],{"class":38,"line":137},[36,121403,121404],{"class":42},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[36,121406,121407,121409,121412,121415,121417,121420],{"class":38,"line":147},[36,121408,27195],{"class":55},[36,121410,121411],{"class":109}," -l",[36,121413,121414],{"class":59}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[36,121416,1069],{"class":109},[36,121418,121419],{"class":59},".so",[36,121421,119622],{"class":109},[588,121423,121425],{"id":121424},"_355-常见问题","3.5.5 常见问题",[571,121427,121428],{},[574,121429,121430],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[26,121432,121434],{"className":118897,"code":121433,"language":118899,"meta":31,"style":31},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[33,121435,121436],{"__ignoreMap":31},[36,121437,121438,121440,121442],{"class":38,"line":39},[36,121439,56],{"class":55},[36,121441,118957],{"class":59},[36,121443,121444],{"class":59}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,121446,121447],{},"blacklist-nouveau.conf文件内容如下：",[26,121449,121451],{"className":118897,"code":121450,"language":118899,"meta":31,"style":31},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[33,121452,121453,121461,121468,121480,121490],{"__ignoreMap":31},[36,121454,121455,121458],{"class":38,"line":39},[36,121456,121457],{"class":55},"blacklist",[36,121459,121460],{"class":59}," nouveau\n",[36,121462,121463,121465],{"class":38,"line":46},[36,121464,121457],{"class":55},[36,121466,121467],{"class":59}," lbm-nouveau\n",[36,121469,121470,121472,121475,121478],{"class":38,"line":52},[36,121471,116361],{"class":55},[36,121473,121474],{"class":59}," nouveau",[36,121476,121477],{"class":59}," modeset=",[36,121479,3536],{"class":109},[36,121481,121482,121485,121487],{"class":38,"line":66},[36,121483,121484],{"class":109},"alias",[36,121486,121474],{"class":59},[36,121488,121489],{"class":59}," off\n",[36,121491,121492,121494,121497],{"class":38,"line":72},[36,121493,121484],{"class":109},[36,121495,121496],{"class":59}," lbm-nouveau",[36,121498,121489],{"class":59},[14,121500,121501],{},"接着运行下方命令",[26,121503,121505],{"className":118897,"code":121504,"language":118899,"meta":31,"style":31},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[33,121506,121507,121517,121522],{"__ignoreMap":31},[36,121508,121509,121511,121514],{"class":38,"line":39},[36,121510,56],{"class":55},[36,121512,121513],{"class":59}," update-initramfs",[36,121515,121516],{"class":109}," -u\n",[36,121518,121519],{"class":38,"line":46},[36,121520,121521],{"class":55},"或者\n",[36,121523,121524,121526,121529],{"class":38,"line":52},[36,121525,56],{"class":55},[36,121527,121528],{"class":59}," dracut",[36,121530,121531],{"class":109}," --force\n",[14,121533,121534],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[26,121536,121538],{"className":118897,"code":121537,"language":118899,"meta":31,"style":31},"lsmod | grep nouveau\n",[33,121539,121540],{"__ignoreMap":31},[36,121541,121542,121545,121547,121549],{"class":38,"line":39},[36,121543,121544],{"class":55},"lsmod",[36,121546,25546],{"class":163},[36,121548,30669],{"class":55},[36,121550,121460],{"class":59},[571,121552,121553],{"start":46},[574,121554,121555],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[26,121557,121559],{"className":118897,"code":121558,"language":118899,"meta":31,"style":31},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[33,121560,121561],{"__ignoreMap":31},[36,121562,121563,121565,121567],{"class":38,"line":39},[36,121564,56],{"class":55},[36,121566,118957],{"class":59},[36,121568,121569],{"class":59}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,121571,121572],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[26,121574,121576],{"className":118897,"code":121575,"language":118899,"meta":31,"style":31},"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",[33,121577,121578,121586,121594,121602,121609,121617,121627,121635],{"__ignoreMap":31},[36,121579,121580,121583],{"class":38,"line":39},[36,121581,121582],{"class":55},"Section",[36,121584,121585],{"class":59}," \"OutputClass\"\n",[36,121587,121588,121591],{"class":38,"line":46},[36,121589,121590],{"class":55},"   Identifier",[36,121592,121593],{"class":59}," \"nvidia\"\n",[36,121595,121596,121599],{"class":38,"line":52},[36,121597,121598],{"class":55},"   MatchDriver",[36,121600,121601],{"class":59}," \"nvidia-drm\"\n",[36,121603,121604,121607],{"class":38,"line":66},[36,121605,121606],{"class":55},"   Driver",[36,121608,121593],{"class":59},[36,121610,121611,121614],{"class":38,"line":72},[36,121612,121613],{"class":55},"   Option",[36,121615,121616],{"class":59}," \"AllowEmptyInitialConfiguration\"\n",[36,121618,121619,121621,121624],{"class":38,"line":82},[36,121620,121613],{"class":55},[36,121622,121623],{"class":59}," \"PrimaryGPU\"",[36,121625,121626],{"class":59}," \"yes\"\n",[36,121628,121629,121632],{"class":38,"line":88},[36,121630,121631],{"class":55},"   ModulePath",[36,121633,121634],{"class":59}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[36,121636,121637],{"class":38,"line":113},[36,121638,121639],{"class":55},"EndSection\n",[571,121641,121642],{"start":52},[574,121643,121644],{},"安装N卡驱动提示错误",[26,121646,121648],{"className":121190,"code":121647,"language":121192,"meta":121193,"style":31},"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",[33,121649,121650],{"__ignoreMap":31},[36,121651,121652],{"class":38,"line":39},[36,121653,121647],{},[571,121655,121656],{},[574,121657,121658],{},"检查当前运行的内核版本：",[14,121660,121661],{},"运行以下命令以查看你当前正在使用的内核版本：",[26,121663,121665],{"className":28,"code":121664,"language":30,"meta":31,"style":31},"uname -r\n",[33,121666,121667],{"__ignoreMap":31},[36,121668,121669,121671],{"class":38,"line":39},[36,121670,70636],{"class":55},[36,121672,121673],{"class":109}," -r\n",[571,121675,121676],{"start":46},[574,121677,121678],{},"安装内核开发文件：",[14,121680,121681,121682,121685],{},"确保你已经安装了与当前内核版本相匹配的 ",[33,121683,121684],{},"kernel-devel"," 包。运行以下命令来安装：",[26,121687,121689],{"className":28,"code":121688,"language":30,"meta":31,"style":31},"sudo dnf install kernel-devel-$(uname -r)\n",[33,121690,121691],{"__ignoreMap":31},[36,121692,121693,121695,121697,121699,121702,121704,121706,121708],{"class":38,"line":39},[36,121694,56],{"class":55},[36,121696,26749],{"class":59},[36,121698,160],{"class":59},[36,121700,121701],{"class":59}," kernel-devel-",[36,121703,25536],{"class":98},[36,121705,70636],{"class":55},[36,121707,120013],{"class":109},[36,121709,627],{"class":98},[14,121711,121712],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[571,121714,121715],{"start":52},[574,121716,121717],{},"安装内核源代码（如果需要）：",[14,121719,121720],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[26,121722,121724],{"className":28,"code":121723,"language":30,"meta":31,"style":31},"sudo dnf install kernel-headers kernel-source\n",[33,121725,121726],{"__ignoreMap":31},[36,121727,121728,121730,121732,121734,121737],{"class":38,"line":39},[36,121729,56],{"class":55},[36,121731,26749],{"class":59},[36,121733,160],{"class":59},[36,121735,121736],{"class":59}," kernel-headers",[36,121738,121739],{"class":59}," kernel-source\n",[571,121741,121742],{"start":66},[574,121743,121744],{},"检查安装：",[14,121746,121747,121748,121751],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[33,121749,121750],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[26,121753,121755],{"className":28,"code":121754,"language":30,"meta":31,"style":31},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[33,121756,121757],{"__ignoreMap":31},[36,121758,121759,121761],{"class":38,"line":39},[36,121760,27195],{"class":55},[36,121762,121763],{"class":59}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,121765,121766,121767,121770],{},"如果仍然遇到问题，可以通过 ",[33,121768,121769],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[537,121772,121773],{},"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":31,"searchDepth":46,"depth":46,"links":121775},[121776,121780,121790,121794,121795],{"id":118873,"depth":46,"text":118874,"children":121777},[121778,121779],{"id":118883,"depth":52,"text":118884},{"id":118893,"depth":52,"text":118894},{"id":119093,"depth":46,"text":119094,"children":121781},[121782,121783,121784,121785,121786,121787,121788,121789],{"id":119097,"depth":52,"text":119098},{"id":119167,"depth":52,"text":119168},{"id":119256,"depth":52,"text":119257},{"id":119501,"depth":52,"text":119502},{"id":119571,"depth":52,"text":119572},{"id":119638,"depth":52,"text":119639},{"id":119673,"depth":52,"text":119674},{"id":119728,"depth":52,"text":119729},{"id":119779,"depth":46,"text":119780,"children":121791},[121792,121793],{"id":119783,"depth":52,"text":119784},{"id":119863,"depth":52,"text":119864},{"id":120049,"depth":46,"text":120050},{"id":120222,"depth":46,"text":120223,"children":121796},[121797,121798,121799,121800,121801],{"id":120226,"depth":52,"text":120227},{"id":120267,"depth":52,"text":120268},{"id":120554,"depth":52,"text":120555},{"id":120928,"depth":52,"text":120929},{"id":121424,"depth":52,"text":121425},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118865,"description":542},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121808,"title":121809,"body":121810,"description":542,"extension":543,"meta":122150,"navigation":246,"path":122151,"seo":122152,"stem":122153,"__hash__":122154},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121811,"toc":122148},[121812,121815,121820,121823,122069,122074,122077,122113,122116,122145],[10,121813,121809],{"id":121814},"_4-命令教程长期积累",[571,121816,121817],{},[574,121818,121819],{},"大多数命令",[14,121821,121822],{},"常用 Linux 命令速查：",[26,121824,121826],{"className":28,"code":121825,"language":30,"meta":31,"style":31},"# 文件与目录\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",[33,121827,121828,121833,121840,121847,121855,121862,121869,121877,121885,121892,121899,121907,121911,121916,121923,121931,121938,121942,121947,121954,121962,121970,121978,121986,121990,121995,122003,122010,122017,122025,122033,122037,122042,122051,122060],{"__ignoreMap":31},[36,121829,121830],{"class":38,"line":39},[36,121831,121832],{"class":42},"# 文件与目录\n",[36,121834,121835,121837],{"class":38,"line":46},[36,121836,27195],{"class":55},[36,121838,121839],{"class":42},"        # 列出目录内容\n",[36,121841,121842,121844],{"class":38,"line":52},[36,121843,101707],{"class":109},[36,121845,121846],{"class":42},"        # 切换目录\n",[36,121848,121849,121852],{"class":38,"line":66},[36,121850,121851],{"class":109},"pwd",[36,121853,121854],{"class":42},"       # 显示当前路径\n",[36,121856,121857,121859],{"class":38,"line":72},[36,121858,101697],{"class":55},[36,121860,121861],{"class":42},"     # 创建目录\n",[36,121863,121864,121866],{"class":38,"line":82},[36,121865,25759],{"class":55},[36,121867,121868],{"class":42},"        # 删除文件或目录\n",[36,121870,121871,121874],{"class":38,"line":88},[36,121872,121873],{"class":55},"cp",[36,121875,121876],{"class":42},"        # 复制文件或目录\n",[36,121878,121879,121882],{"class":38,"line":113},[36,121880,121881],{"class":55},"mv",[36,121883,121884],{"class":42},"        # 移动\u002F重命名文件或目录\n",[36,121886,121887,121889],{"class":38,"line":119},[36,121888,101714],{"class":55},[36,121890,121891],{"class":42},"     # 创建空文件\n",[36,121893,121894,121896],{"class":38,"line":131},[36,121895,121139],{"class":55},[36,121897,121898],{"class":42},"       # 查看文件内容\n",[36,121900,121901,121904],{"class":38,"line":137},[36,121902,121903],{"class":55},"head\u002Ftail",[36,121905,121906],{"class":42}," # 查看文件头部\u002F尾部\n",[36,121908,121909],{"class":38,"line":147},[36,121910,247],{"emptyLinePlaceholder":246},[36,121912,121913],{"class":38,"line":153},[36,121914,121915],{"class":42},"# 权限管理\n",[36,121917,121918,121920],{"class":38,"line":191},[36,121919,25048],{"class":55},[36,121921,121922],{"class":42},"     # 修改文件权限\n",[36,121924,121925,121928],{"class":38,"line":197},[36,121926,121927],{"class":55},"chown",[36,121929,121930],{"class":42},"     # 修改文件所有者\n",[36,121932,121933,121935],{"class":38,"line":217},[36,121934,56],{"class":55},[36,121936,121937],{"class":42},"      # 以管理员身份执行\n",[36,121939,121940],{"class":38,"line":223},[36,121941,247],{"emptyLinePlaceholder":246},[36,121943,121944],{"class":38,"line":243},[36,121945,121946],{"class":42},"# 系统信息\n",[36,121948,121949,121951],{"class":38,"line":250},[36,121950,70636],{"class":55},[36,121952,121953],{"class":42},"     # 系统信息\n",[36,121955,121956,121959],{"class":38,"line":256},[36,121957,121958],{"class":55},"df",[36,121960,121961],{"class":42},"        # 磁盘使用情况\n",[36,121963,121964,121967],{"class":38,"line":273},[36,121965,121966],{"class":55},"free",[36,121968,121969],{"class":42},"      # 内存使用情况\n",[36,121971,121972,121975],{"class":38,"line":278},[36,121973,121974],{"class":55},"top\u002Fhtop",[36,121976,121977],{"class":42},"  # 进程监控\n",[36,121979,121980,121983],{"class":38,"line":284},[36,121981,121982],{"class":55},"ps",[36,121984,121985],{"class":42},"        # 查看进程\n",[36,121987,121988],{"class":38,"line":315},[36,121989,247],{"emptyLinePlaceholder":246},[36,121991,121992],{"class":38,"line":320},[36,121993,121994],{"class":42},"# 网络\n",[36,121996,121997,122000],{"class":38,"line":326},[36,121998,121999],{"class":55},"ping",[36,122001,122002],{"class":42},"      # 测试网络连通性\n",[36,122004,122005,122007],{"class":38,"line":343},[36,122006,27283],{"class":55},[36,122008,122009],{"class":42},"      # 发送 HTTP 请求\n",[36,122011,122012,122014],{"class":38,"line":348},[36,122013,120663],{"class":55},[36,122015,122016],{"class":42},"      # 下载文件\n",[36,122018,122019,122022],{"class":38,"line":354},[36,122020,122021],{"class":55},"ssh",[36,122023,122024],{"class":42},"       # 远程登录\n",[36,122026,122027,122030],{"class":38,"line":370},[36,122028,122029],{"class":55},"scp",[36,122031,122032],{"class":42},"       # 远程文件传输\n",[36,122034,122035],{"class":38,"line":375},[36,122036,247],{"emptyLinePlaceholder":246},[36,122038,122039],{"class":38,"line":381},[36,122040,122041],{"class":42},"# 包管理（Debian\u002FUbuntu）\n",[36,122043,122044,122046,122048],{"class":38,"line":399},[36,122045,122],{"class":55},[36,122047,95],{"class":59},[36,122049,122050],{"class":42},"   # 更新软件源\n",[36,122052,122053,122055,122057],{"class":38,"line":404},[36,122054,122],{"class":55},[36,122056,160],{"class":59},[36,122058,122059],{"class":42},"  # 安装软件包\n",[36,122061,122062,122064,122066],{"class":38,"line":410},[36,122063,122],{"class":55},[36,122065,388],{"class":59},[36,122067,122068],{"class":42},"   # 卸载软件包\n",[571,122070,122071],{"start":46},[574,122072,122073],{},"KDE Dolphin 以root打开",[14,122075,122076],{},"kde5",[26,122078,122080],{"className":28,"code":122079,"language":30,"meta":31,"style":31},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[33,122081,122082],{"__ignoreMap":31},[36,122083,122084,122087,122090,122093,122095,122097,122100,122103,122105,122108,122110],{"class":38,"line":39},[36,122085,122086],{"class":55},"pkexec",[36,122088,122089],{"class":59}," env",[36,122091,122092],{"class":59}," DISPLAY=",[36,122094,28577],{"class":98},[36,122096,28635],{"class":59},[36,122098,122099],{"class":98},"$XAUTHORITY ",[36,122101,122102],{"class":59},"KDE_SESSION_VERSION=",[36,122104,933],{"class":109},[36,122106,122107],{"class":59}," KDE_FULL_SESSION=",[36,122109,1841],{"class":109},[36,122111,122112],{"class":59}," dolphin\n",[14,122114,122115],{},"kde6",[26,122117,122119],{"className":28,"code":122118,"language":30,"meta":31,"style":31},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[33,122120,122121],{"__ignoreMap":31},[36,122122,122123,122125,122127,122129,122131,122133,122135,122137,122139,122141,122143],{"class":38,"line":39},[36,122124,122086],{"class":55},[36,122126,122089],{"class":59},[36,122128,122092],{"class":59},[36,122130,28577],{"class":98},[36,122132,28635],{"class":59},[36,122134,122099],{"class":98},[36,122136,122102],{"class":59},[36,122138,958],{"class":109},[36,122140,122107],{"class":59},[36,122142,1841],{"class":109},[36,122144,122112],{"class":59},[537,122146,122147],{},"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":31,"searchDepth":46,"depth":46,"links":122149},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121809,"description":542},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122156,"title":122157,"body":122158,"description":542,"extension":543,"meta":122172,"navigation":246,"path":122173,"seo":122174,"stem":122175,"__hash__":122176},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122159,"toc":122170},[122160,122163],[10,122161,122157],{"id":122162},"_5-各种环境配置",[14,122164,122165],{},[20,122166,122169],{"href":122167,"rel":122168},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24],"电控组环境搭建大全",{"title":31,"searchDepth":46,"depth":46,"links":122171},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122157,"description":542},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122178,"title":122179,"body":122180,"description":542,"extension":543,"meta":122528,"navigation":246,"path":122529,"seo":122530,"stem":122531,"__hash__":122532},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122181,"toc":122520},[122182,122185,122189,122193,122197,122202,122209,122213,122506,122510,122517],[10,122183,122179],{"id":122184},"_6-拓展功能",[559,122186,122188],{"id":122187},"_61-wine","6.1 Wine",[559,122190,122192],{"id":122191},"_62-android","6.2 Android",[588,122194,122196],{"id":122195},"_621-i卡a卡","6.2.1 I卡、A卡",[571,122198,122199],{},[574,122200,122201],{},"Wayland-Waydroid(体验超级好)",[14,122203,122204,122205],{},"Waydroid 官网与安装指南：",[20,122206,122207],{"href":122207,"rel":122208},"https:\u002F\u002Fwaydro.id\u002F",[24],[588,122210,122212],{"id":122211},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[571,122214,122215],{},[574,122216,122217,122218,122220,122221,122225,122227,122230,122235,122432],{},"QEMU-KVM虚拟机 + BlissOS-X86",[54148,122219],{},"BlissOS 官网下载：",[20,122222,122223],{"href":122223,"rel":122224},"https:\u002F\u002Fblissos.org\u002F",[24],[54148,122226],{},[1941,122228],{"alt":31,"src":122229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[571,122231,122232],{"start":52},[574,122233,122234],{},"比较推荐的配置",[26,122236,122238],{"className":28,"code":122237,"language":30,"meta":31,"style":31},"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",[33,122239,122240,122247,122257,122267,122277,122289,122299,122306,122316,122325,122334,122344,122354,122363,122373,122383,122395,122405,122414,122424],{"__ignoreMap":31},[36,122241,122242,122245],{"class":38,"line":39},[36,122243,122244],{"class":55},"qemu-system-x86_64",[36,122246,25115],{"class":109},[36,122248,122249,122252,122255],{"class":38,"line":46},[36,122250,122251],{"class":109},"        -M",[36,122253,122254],{"class":59}," q35,vmport=off",[36,122256,25115],{"class":109},[36,122258,122259,122262,122265],{"class":38,"line":52},[36,122260,122261],{"class":109},"        -accel",[36,122263,122264],{"class":59}," kvm",[36,122266,25115],{"class":109},[36,122268,122269,122272,122275],{"class":38,"line":66},[36,122270,122271],{"class":109},"        -cpu",[36,122273,122274],{"class":59}," qemu64,+sse3,+sse4.2",[36,122276,25115],{"class":109},[36,122278,122279,122282,122285,122287],{"class":38,"line":72},[36,122280,122281],{"class":109},"        -smp",[36,122283,122284],{"class":59}," 8,cores=",[36,122286,908],{"class":109},[36,122288,25115],{"class":109},[36,122290,122291,122294,122297],{"class":38,"line":82},[36,122292,122293],{"class":109},"        -m",[36,122295,122296],{"class":59}," 6G",[36,122298,25115],{"class":109},[36,122300,122301,122304],{"class":38,"line":88},[36,122302,122303],{"class":109},"        -usb",[36,122305,25115],{"class":109},[36,122307,122308,122311,122314],{"class":38,"line":113},[36,122309,122310],{"class":109},"        -device",[36,122312,122313],{"class":59}," virtio-tablet",[36,122315,25115],{"class":109},[36,122317,122318,122320,122323],{"class":38,"line":119},[36,122319,122310],{"class":109},[36,122321,122322],{"class":59}," virtio-keyboard",[36,122324,25115],{"class":109},[36,122326,122327,122329,122332],{"class":38,"line":131},[36,122328,122310],{"class":109},[36,122330,122331],{"class":59}," usb-tablet",[36,122333,25115],{"class":109},[36,122335,122336,122339,122342],{"class":38,"line":137},[36,122337,122338],{"class":109},"        -bios",[36,122340,122341],{"class":59}," OVMF-pure-efi64.fd",[36,122343,25115],{"class":109},[36,122345,122346,122349,122352],{"class":38,"line":147},[36,122347,122348],{"class":109},"        -net",[36,122350,122351],{"class":59}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[36,122353,25115],{"class":109},[36,122355,122356,122358,122361],{"class":38,"line":153},[36,122357,122348],{"class":109},[36,122359,122360],{"class":59}," nic,model=virtio",[36,122362,25115],{"class":109},[36,122364,122365,122368,122371],{"class":38,"line":191},[36,122366,122367],{"class":109},"        -audio",[36,122369,122370],{"class":59}," sdl,model=hda",[36,122372,25115],{"class":109},[36,122374,122375,122378,122381],{"class":38,"line":197},[36,122376,122377],{"class":109},"        -display",[36,122379,122380],{"class":59}," sdl,gl=on,show-cursor=on",[36,122382,25115],{"class":109},[36,122384,122385,122387,122390,122393],{"class":38,"line":217},[36,122386,122310],{"class":109},[36,122388,122389],{"class":59}," virtio-vga-gl,xres=1920,yres=",[36,122391,122392],{"class":109},"1080",[36,122394,25115],{"class":109},[36,122396,122397,122400,122403],{"class":38,"line":223},[36,122398,122399],{"class":109},"        -drive",[36,122401,122402],{"class":59}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[36,122404,25115],{"class":109},[36,122406,122407,122409,122412],{"class":38,"line":243},[36,122408,122399],{"class":109},[36,122410,122411],{"class":59}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[36,122413,25115],{"class":109},[36,122415,122416,122419,122422],{"class":38,"line":250},[36,122417,122418],{"class":109},"        -monitor",[36,122420,122421],{"class":59}," stdio",[36,122423,25115],{"class":109},[36,122425,122426,122429],{"class":38,"line":256},[36,122427,122428],{"class":109},"        -serial",[36,122430,122431],{"class":59}," none\n",[571,122433,122434],{"start":72},[574,122435,122436,122437],{},"常用操作：",[571,122438,122439,122442,122498],{},[574,122440,122441],{},"全屏：Ctrl+Alt+F",[574,122443,122444,122445,122450],{},"adb调试",[571,122446,122447],{},[574,122448,122449],{},"使Linux与Android用ADB连接。",[26,122451,122453],{"className":28,"code":122452,"language":30,"meta":31,"style":31},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[33,122454,122455,122460,122471,122476,122488,122493],{"__ignoreMap":31},[36,122456,122457],{"class":38,"line":39},[36,122458,122459],{"class":42},"# 连接安卓\n",[36,122461,122462,122465,122468],{"class":38,"line":46},[36,122463,122464],{"class":55},"adb",[36,122466,122467],{"class":59}," connect",[36,122469,122470],{"class":109}," 127.0.0.1\n",[36,122472,122473],{"class":38,"line":52},[36,122474,122475],{"class":42},"# 打开shell\n",[36,122477,122478,122480,122482,122485],{"class":38,"line":66},[36,122479,122464],{"class":55},[36,122481,27317],{"class":109},[36,122483,122484],{"class":59}," 127.0.0.1:5555",[36,122486,122487],{"class":59}," shell\n",[36,122489,122490],{"class":38,"line":72},[36,122491,122492],{"class":42},"# 使用root权限\n",[36,122494,122495],{"class":38,"line":82},[36,122496,122497],{"class":55},"su\n",[574,122499,122500,122501],{},"中文输入法",[571,122502,122503],{},[574,122504,122505],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[559,122507,122509],{"id":122508},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,122511,122512,122513],{},"rEFInd 官网与文档：",[20,122514,122515],{"href":122515,"rel":122516},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24],[537,122518,122519],{},"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":31,"searchDepth":46,"depth":46,"links":122521},[122522,122523,122527],{"id":122187,"depth":46,"text":122188},{"id":122191,"depth":46,"text":122192,"children":122524},[122525,122526],{"id":122195,"depth":52,"text":122196},{"id":122211,"depth":52,"text":122212},{"id":122508,"depth":46,"text":122509},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122179,"description":542},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122534,"title":122535,"body":122536,"description":542,"extension":543,"meta":125835,"navigation":246,"path":125836,"seo":125837,"stem":125838,"__hash__":125839},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122537,"toc":125809},[122538,122541,122545,122548,122555,122805,122808,122880,122883,122887,122891,122896,122899,122902,122905,122910,122913,122916,122919,122924,122927,122932,122935,122938,122943,122946,122951,122954,122958,122962,122965,122970,122973,122987,122990,122993,123002,123005,123014,123017,123020,123029,123032,123041,123044,123047,123056,123059,123062,123077,123080,123083,123092,123097,123100,123103,123112,123115,123124,123127,123136,123139,123148,123153,123156,123164,123169,123172,123181,123184,123192,123197,123200,123209,123212,123215,123219,123222,123227,123230,123235,123249,123254,123259,123270,123275,123281,123286,123301,123306,123309,123314,123319,123324,123332,123337,123344,123349,123360,123365,123368,123372,123375,123378,123383,123386,123405,123410,123413,123422,123427,123430,123452,123455,123485,123488,123493,123496,123510,123515,123534,123537,123540,123545,123557,123562,123567,123570,123575,123578,123593,123596,123601,123606,123610,123615,123655,123658,123662,123668,123674,123679,123682,123689,123694,123701,123704,123707,123714,123728,123731,123791,123794,123808,123820,123823,123826,123829,123893,123896,123899,123902,123922,123925,123930,123937,123941,123944,123948,123953,123958,123962,123965,123968,124010,124015,124018,124040,124055,124057,124062,124074,124134,124136,124138,124192,124194,124196,124202,124207,124210,124215,124219,124222,124284,124289,124292,124294,124298,124310,124392,124394,124396,124450,124456,124458,124462,124467,124469,124474,124478,124498,124533,124537,124540,124543,124546,124553,124556,124568,124571,124586,124589,124608,124656,124659,124676,124679,124693,124698,124701,124710,124725,124737,124775,124780,124789,124794,124799,124825,124834,124838,124842,124847,124850,124854,124858,124863,124866,124871,124874,124879,124882,124887,124890,124894,124899,124902,124907,124910,124914,124919,124922,124927,124930,124935,124938,124942,124947,124950,124955,124958,124963,124966,124970,124975,124978,124983,124986,124991,124994,124999,125002,125007,125010,125015,125018,125022,125027,125030,125035,125042,125046,125051,125054,125059,125062,125066,125071,125074,125077,125080,125083,125086,125090,125093,125103,125108,125113,125135,125140,125145,125152,125156,125161,125164,125167,125172,125175,125178,125181,125184,125187,125190,125193,125196,125199,125202,125205,125208,125213,125218,125223,125228,125233,125238,125243,125246,125250,125253,125257,125262,125267,125272,125277,125281,125287,125295,125300,125303,125308,125323,125326,125331,125365,125380,125383,125438,125464,125476,125479,125488,125491,125506,125511,125514,125520,125525,125528,125533,125536,125541,125546,125553,125556,125571,125574,125609,125614,125622,125660,125663,125666,125671,125674,125679,125690,125724,125729,125732,125741,125746,125752,125755,125760,125769,125774,125777,125780,125785,125793,125796,125801,125806],[10,122539,122535],{"id":122540},"_7-其他操作",[559,122542,122544],{"id":122543},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,122546,122547],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,122549,122550,122551,122554],{},"进入工控机的硬盘目录，进入",[33,122552,122553],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[26,122556,122560],{"className":122557,"code":122558,"language":122559,"meta":31,"style":31},"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",[33,122561,122562,122570,122581,122588,122595,122607,122614,122626,122637,122648,122655,122662,122669,122681,122693,122700,122712,122724,122731,122743,122755,122767,122778,122785,122796],{"__ignoreMap":31},[36,122563,122564,122567],{"class":38,"line":39},[36,122565,122566],{"class":51733},"network",[36,122568,122569],{"class":98},": \n",[36,122571,122572,122575,122577,122579],{"class":38,"line":46},[36,122573,122574],{"class":51733},"  version",[36,122576,51869],{"class":98},[36,122578,694],{"class":109},[36,122580,3125],{"class":98},[36,122582,122583,122586],{"class":38,"line":52},[36,122584,122585],{"class":51733},"  wifis",[36,122587,122569],{"class":98},[36,122589,122590,122593],{"class":38,"line":66},[36,122591,122592],{"class":51733},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[36,122594,122569],{"class":98},[36,122596,122597,122600,122602,122605],{"class":38,"line":72},[36,122598,122599],{"class":51733},"      renderer",[36,122601,51869],{"class":98},[36,122603,122604],{"class":59},"NetworkManager",[36,122606,3125],{"class":98},[36,122608,122609,122612],{"class":38,"line":82},[36,122610,122611],{"class":51733},"      match",[36,122613,122569],{"class":98},[36,122615,122616,122619,122621,122624],{"class":38,"line":88},[36,122617,122618],{"class":51733},"        name",[36,122620,51869],{"class":98},[36,122622,122623],{"class":59},"\"wlan0\"",[36,122625,3125],{"class":98},[36,122627,122628,122631,122633,122635],{"class":38,"line":113},[36,122629,122630],{"class":51733},"      dhcp4",[36,122632,51869],{"class":98},[36,122634,1841],{"class":109},[36,122636,3125],{"class":98},[36,122638,122639,122642,122644,122646],{"class":38,"line":119},[36,122640,122641],{"class":51733},"      dhcp6",[36,122643,51869],{"class":98},[36,122645,1841],{"class":109},[36,122647,3125],{"class":98},[36,122649,122650,122653],{"class":38,"line":131},[36,122651,122652],{"class":51733},"      access-points",[36,122654,122569],{"class":98},[36,122656,122657,122660],{"class":38,"line":137},[36,122658,122659],{"class":59},"        \"EMIS_Vinci_Robocon_5G\"",[36,122661,122569],{"class":98},[36,122663,122664,122667],{"class":38,"line":147},[36,122665,122666],{"class":51733},"          auth",[36,122668,122569],{"class":98},[36,122670,122671,122674,122676,122679],{"class":38,"line":153},[36,122672,122673],{"class":51733},"            key-management",[36,122675,51869],{"class":98},[36,122677,122678],{"class":59},"\"psk\"",[36,122680,3125],{"class":98},[36,122682,122683,122686,122688,122691],{"class":38,"line":191},[36,122684,122685],{"class":51733},"            password",[36,122687,51869],{"class":98},[36,122689,122690],{"class":59},"\"vinci666\"",[36,122692,3125],{"class":98},[36,122694,122695,122698],{"class":38,"line":197},[36,122696,122697],{"class":51733},"          networkmanager",[36,122699,122569],{"class":98},[36,122701,122702,122705,122707,122710],{"class":38,"line":217},[36,122703,122704],{"class":51733},"            uuid",[36,122706,51869],{"class":98},[36,122708,122709],{"class":59},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[36,122711,3125],{"class":98},[36,122713,122714,122717,122719,122722],{"class":38,"line":223},[36,122715,122716],{"class":51733},"            name",[36,122718,51869],{"class":98},[36,122720,122721],{"class":59},"\"EMIS_Vinci_Robocon_5G\"",[36,122723,3125],{"class":98},[36,122725,122726,122729],{"class":38,"line":243},[36,122727,122728],{"class":51733},"            passthrough",[36,122730,122569],{"class":98},[36,122732,122733,122736,122738,122741],{"class":38,"line":250},[36,122734,122735],{"class":51733},"              wifi-security.auth-alg",[36,122737,51869],{"class":98},[36,122739,122740],{"class":59},"\"open\"",[36,122742,3125],{"class":98},[36,122744,122745,122748,122750,122753],{"class":38,"line":256},[36,122746,122747],{"class":51733},"              ipv6.addr-gen-mode",[36,122749,51869],{"class":98},[36,122751,122752],{"class":59},"\"default\"",[36,122754,3125],{"class":98},[36,122756,122757,122760,122762,122765],{"class":38,"line":273},[36,122758,122759],{"class":51733},"              ipv6.ip6-privacy",[36,122761,51869],{"class":98},[36,122763,122764],{"class":59},"\"-1\"",[36,122766,3125],{"class":98},[36,122768,122769,122772,122774,122776],{"class":38,"line":278},[36,122770,122771],{"class":51733},"              proxy._",[36,122773,51869],{"class":98},[36,122775,8103],{"class":59},[36,122777,3125],{"class":98},[36,122779,122780,122783],{"class":38,"line":284},[36,122781,122782],{"class":51733},"      networkmanager",[36,122784,122569],{"class":98},[36,122786,122787,122790,122792,122794],{"class":38,"line":315},[36,122788,122789],{"class":51733},"        uuid",[36,122791,51869],{"class":98},[36,122793,122709],{"class":59},[36,122795,3125],{"class":98},[36,122797,122798,122800,122802],{"class":38,"line":320},[36,122799,122618],{"class":51733},[36,122801,51869],{"class":98},[36,122803,122804],{"class":59},"\"EMIS_Vinci_Robocon_5G\"\n",[14,122806,122807],{},"将其改为新wifi的名和密码：",[26,122809,122811],{"className":122557,"code":122810,"language":122559,"meta":31,"style":31},"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",[33,122812,122813,122819,122828,122834,122841,122850,122858,122864,122870],{"__ignoreMap":31},[36,122814,122815,122817],{"class":38,"line":39},[36,122816,122566],{"class":51733},[36,122818,4190],{"class":98},[36,122820,122821,122823,122825],{"class":38,"line":46},[36,122822,122574],{"class":51733},[36,122824,51869],{"class":98},[36,122826,122827],{"class":109},"2\n",[36,122829,122830,122832],{"class":38,"line":52},[36,122831,122585],{"class":51733},[36,122833,4190],{"class":98},[36,122835,122836,122839],{"class":38,"line":66},[36,122837,122838],{"class":51733},"    wlan0",[36,122840,4190],{"class":98},[36,122842,122843,122845,122847],{"class":38,"line":72},[36,122844,122630],{"class":51733},[36,122846,51869],{"class":98},[36,122848,122849],{"class":109},"true\n",[36,122851,122852,122854,122856],{"class":38,"line":82},[36,122853,122641],{"class":51733},[36,122855,51869],{"class":98},[36,122857,122849],{"class":109},[36,122859,122860,122862],{"class":38,"line":88},[36,122861,122652],{"class":51733},[36,122863,4190],{"class":98},[36,122865,122866,122868],{"class":38,"line":113},[36,122867,122659],{"class":59},[36,122869,4190],{"class":98},[36,122871,122872,122875,122877],{"class":38,"line":119},[36,122873,122874],{"class":51733},"          password",[36,122876,51869],{"class":98},[36,122878,122879],{"class":59},"\"vinci666\"\n",[14,122881,122882],{},"工控机开机即可连上网。",[559,122884,122886],{"id":122885},"_72-ssh远程开发","7.2 SSH远程开发",[588,122888,122890],{"id":122889},"_721-环境准备","7.2.1 环境准备",[14,122892,122893],{},[765,122894,122895],{},"1.硬件准备",[14,122897,122898],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,122900,122901],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,122903,122904],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,122906,122907],{},[765,122908,122909],{},"2.设置固定IP",[14,122911,122912],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,122914,122915],{},"1.进入设置界面",[14,122917,122918],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,122920,122921],{},[1941,122922],{"alt":31,"src":122923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,122925,122926],{},"2.配置所连接的网络",[14,122928,122929],{},[1941,122930],{"alt":31,"src":122931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,122933,122934],{},"3.设置固定IP",[14,122936,122937],{},"查看当前IP地址。",[14,122939,122940],{},[1941,122941],{"alt":31,"src":122942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,122944,122945],{},"设置固定IP。",[14,122947,122948],{},[1941,122949],{"alt":31,"src":122950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,122952,122953],{},"至此，IP配置完毕。",[588,122955,122957],{"id":122956},"_722-环境搭建","7.2.2 环境搭建",[14,122959,122960],{},[765,122961,26190],{},[14,122963,122964],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,122966,122967],{},[765,122968,122969],{},"实现",[14,122971,122972],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[571,122974,122975,122978,122981,122984],{},[574,122976,122977],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[574,122979,122980],{},"远程主机启动SSH服务；",[574,122982,122983],{},"本地主机登陆远程主机；",[574,122985,122986],{},"实现数据传输。",[14,122988,122989],{},"1.安装SSH客户端与服务端",[14,122991,122992],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[26,122994,122996],{"className":121190,"code":122995,"language":121192,"meta":121193,"style":31}," sudo apt install openssh-server\n",[33,122997,122998],{"__ignoreMap":31},[36,122999,123000],{"class":38,"line":39},[36,123001,122995],{},[14,123003,123004],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[26,123006,123008],{"className":121190,"code":123007,"language":121192,"meta":121193,"style":31},"sudo apt install openssh-client\n",[33,123009,123010],{"__ignoreMap":31},[36,123011,123012],{"class":38,"line":39},[36,123013,123007],{},[14,123015,123016],{},"2.远程主机启动SSH服务",[14,123018,123019],{},"远程主机启动 ssh 服务命令如下：",[26,123021,123023],{"className":121190,"code":123022,"language":121192,"meta":121193,"style":31},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[33,123024,123025],{"__ignoreMap":31},[36,123026,123027],{"class":38,"line":39},[36,123028,123022],{},[14,123030,123031],{},"启动后可使用如下命令查看服务是否正常运行：",[26,123033,123035],{"className":121190,"code":123034,"language":121192,"meta":121193,"style":31},"ps -e | grep ssh\n",[33,123036,123037],{"__ignoreMap":31},[36,123038,123039],{"class":38,"line":39},[36,123040,123034],{},[14,123042,123043],{},"如果启动成功，会包含 sshd 程序。",[14,123045,123046],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[26,123048,123050],{"className":121190,"code":123049,"language":121192,"meta":121193,"style":31},"sudo systemctl enable ssh\n",[33,123051,123052],{"__ignoreMap":31},[36,123053,123054],{"class":38,"line":39},[36,123055,123049],{},[14,123057,123058],{},"3.本地远程登录",[14,123060,123061],{},"登录远程主机可以调用如下命令:",[26,123063,123065],{"className":28,"code":123064,"language":30,"meta":31,"style":31},"ssh -X 用户名@ip地址\n",[33,123066,123067],{"__ignoreMap":31},[36,123068,123069,123071,123074],{"class":38,"line":39},[36,123070,122021],{"class":55},[36,123072,123073],{"class":109}," -X",[36,123075,123076],{"class":59}," 用户名@ip地址\n",[14,123078,123079],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,123081,123082],{},"如果退出，可以调用exit命令：",[26,123084,123086],{"className":121190,"code":123085,"language":121192,"meta":121193,"style":31},"exit\n",[33,123087,123088],{"__ignoreMap":31},[36,123089,123090],{"class":38,"line":39},[36,123091,123085],{},[14,123093,123094],{},[765,123095,123096],{},"4.实现数据传输",[14,123098,123099],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,123101,123102],{},"上传文件指令格式如下：",[26,123104,123106],{"className":121190,"code":123105,"language":121192,"meta":121193,"style":31},"scp 本地文件路径 账号@ip:路径\n",[33,123107,123108],{"__ignoreMap":31},[36,123109,123110],{"class":38,"line":39},[36,123111,123105],{},[14,123113,123114],{},"上传文件夹指令格式如下：",[26,123116,123118],{"className":121190,"code":123117,"language":121192,"meta":121193,"style":31},"scp -r 本地文件夹路径 账号@ip:路径\n",[33,123119,123120],{"__ignoreMap":31},[36,123121,123122],{"class":38,"line":39},[36,123123,123117],{},[14,123125,123126],{},"下载文件指令格式如下：",[26,123128,123130],{"className":121190,"code":123129,"language":121192,"meta":121193,"style":31},"scp 账号@ip:路径 本地文件夹路径\n",[33,123131,123132],{"__ignoreMap":31},[36,123133,123134],{"class":38,"line":39},[36,123135,123129],{},[14,123137,123138],{},"下载文件夹指令格式如下：",[26,123140,123142],{"className":121190,"code":123141,"language":121192,"meta":121193,"style":31},"scp -r 账号@ip:路径 本地文件夹路径\n",[33,123143,123144],{"__ignoreMap":31},[36,123145,123146],{"class":38,"line":39},[36,123147,123141],{},[14,123149,123150],{},[765,123151,123152],{},"优化",[14,123154,123155],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[571,123157,123158,123161],{},[574,123159,123160],{},"本地生成密钥对；",[574,123162,123163],{},"将公钥上传至远程主机。",[14,123165,123166],{},[765,123167,123168],{},"1.生成密钥对",[14,123170,123171],{},"本地客户端生成公私钥：（一路回车默认即可）",[26,123173,123175],{"className":121190,"code":123174,"language":121192,"meta":121193,"style":31},"ssh-keygen\n",[33,123176,123177],{"__ignoreMap":31},[36,123178,123179],{"class":38,"line":39},[36,123180,123174],{},[14,123182,123183],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[571,123185,123186,123189],{},[574,123187,123188],{},"id_rsa （私钥）；",[574,123190,123191],{},"id_rsa.pub (公钥)。",[14,123193,123194],{},[765,123195,123196],{},"2.公钥上传",[14,123198,123199],{},"上传指令如下：",[26,123201,123203],{"className":121190,"code":123202,"language":121192,"meta":121193,"style":31},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[33,123204,123205],{"__ignoreMap":31},[36,123206,123207],{"class":38,"line":39},[36,123208,123202],{},[14,123210,123211],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,123213,123214],{},"以后再远程登录就无需录入密码了。",[588,123216,123218],{"id":123217},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,123220,123221],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,123223,123224],{},[765,123225,123226],{},"1.准备工作",[14,123228,123229],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,123231,123232],{},[765,123233,123234],{},"2.为VScode安装远程开发插件",[14,123236,123237,123238,123241,123242,123245,123246,28819],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[33,123239,123240],{},"扩展：商店","的搜索栏输入",[33,123243,123244],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[33,123247,123248],{},"安装",[14,123250,123251],{},[1941,123252],{"alt":31,"src":123253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,123255,123256],{},[765,123257,123258],{},"3.配置远程连接",[14,123260,123261,123262,123265,123266,123269],{},"步骤1：使用快捷键",[33,123263,123264],{},"ctrl + shift + p","打开命令输入窗口，并输入",[33,123267,123268],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,123271,123272],{},[1941,123273],{"alt":31,"src":123274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,123276,123277,123278,28819],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[33,123279,123280],{},"Add New SSH Host",[14,123282,123283],{},[1941,123284],{"alt":31,"src":123285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,123287,123288,123289,123292,123293,123296,123297,123300],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[33,123290,123291],{},"ssh +X ubuntu@192.168.43.164","，其中，",[33,123294,123295],{},"ubuntu","需要替换为你的登录用户名，",[33,123298,123299],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,123302,123303],{},[1941,123304],{"alt":31,"src":123305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,123307,123308],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,123310,123311],{},[1941,123312],{"alt":31,"src":123313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,123315,123316],{},[1941,123317],{"alt":31,"src":123318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,123320,123321],{},[765,123322,123323],{},"4.使用",[14,123325,123326,123327,123265,123329,123331],{},"步骤1：继续使用快捷键",[33,123328,123264],{},[33,123330,123268],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,123333,123334],{},[1941,123335],{"alt":31,"src":123336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,123338,123339,123340,123343],{},"或者，也可以点击侧边栏的",[33,123341,123342],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,123345,123346],{},[1941,123347],{"alt":31,"src":123348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,123350,123351,123352,123355,123356,123359],{},"步骤2：选择菜单栏的",[33,123353,123354],{},"文件","下的",[33,123357,123358],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,123361,123362],{},[1941,123363],{"alt":31,"src":123364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,123366,123367],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[559,123369,123371],{"id":123370},"_73-远程桌面","7.3 远程桌面",[14,123373,123374],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,123376,123377],{},"我们选择使用VNC来看。",[571,123379,123380],{},[574,123381,123382],{},"安装VNC服务器：",[14,123384,123385],{},"这里以TigerVNC为例进行安装：",[26,123387,123389],{"className":28,"code":123388,"language":30,"meta":31,"style":31},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[33,123390,123391],{"__ignoreMap":31},[36,123392,123393,123395,123397,123399,123402],{"class":38,"line":39},[36,123394,56],{"class":55},[36,123396,60],{"class":59},[36,123398,160],{"class":59},[36,123400,123401],{"class":59}," tigervnc-standalone-server",[36,123403,123404],{"class":59}," tigervnc-common\n",[571,123406,123407],{"start":46},[574,123408,123409],{},"设置VNC密码：",[14,123411,123412],{},"为VNC用户设置密码，运行以下命令：",[26,123414,123416],{"className":28,"code":123415,"language":30,"meta":31,"style":31},"vncpasswd\n",[33,123417,123418],{"__ignoreMap":31},[36,123419,123420],{"class":38,"line":39},[36,123421,123415],{"class":55},[571,123423,123424],{"start":52},[574,123425,123426],{},"配置VNC启动脚本:",[14,123428,123429],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[26,123431,123433],{"className":28,"code":123432,"language":30,"meta":31,"style":31},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[33,123434,123435,123444],{"__ignoreMap":31},[36,123436,123437,123439,123441],{"class":38,"line":39},[36,123438,101697],{"class":55},[36,123440,29649],{"class":109},[36,123442,123443],{"class":59}," ~\u002F.vnc\n",[36,123445,123446,123449],{"class":38,"line":46},[36,123447,123448],{"class":55},"nano",[36,123450,123451],{"class":59}," ~\u002F.vnc\u002Fxstartup\n",[14,123453,123454],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[26,123456,123458],{"className":28,"code":123457,"language":30,"meta":31,"style":31},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[33,123459,123460,123465,123473,123480],{"__ignoreMap":31},[36,123461,123462],{"class":38,"line":39},[36,123463,123464],{"class":42},"#!\u002Fbin\u002Fsh\n",[36,123466,123467,123470],{"class":38,"line":46},[36,123468,123469],{"class":109},"unset",[36,123471,123472],{"class":59}," SESSION_MANAGER\n",[36,123474,123475,123477],{"class":38,"line":52},[36,123476,123469],{"class":109},[36,123478,123479],{"class":59}," DBUS_SESSION_BUS_ADDRESS\n",[36,123481,123482],{"class":38,"line":66},[36,123483,123484],{"class":55},"gnome-session\n",[14,123486,123487],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[571,123489,123490],{"start":66},[574,123491,123492],{},"给予执行权限：",[14,123494,123495],{},"为xstartup文件设置执行权限：",[26,123497,123499],{"className":28,"code":123498,"language":30,"meta":31,"style":31},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[33,123500,123501],{"__ignoreMap":31},[36,123502,123503,123505,123508],{"class":38,"line":39},[36,123504,25048],{"class":55},[36,123506,123507],{"class":59}," +x",[36,123509,123451],{"class":59},[571,123511,123512],{"start":72},[574,123513,123514],{},"启动VNC服务器：",[26,123516,123518],{"className":28,"code":123517,"language":30,"meta":31,"style":31},"vncserver -geometry 1920x1080 -localhost=0\n",[33,123519,123520],{"__ignoreMap":31},[36,123521,123522,123525,123528,123531],{"class":38,"line":39},[36,123523,123524],{"class":55},"vncserver",[36,123526,123527],{"class":109}," -geometry",[36,123529,123530],{"class":59}," 1920x1080",[36,123532,123533],{"class":109}," -localhost=0\n",[14,123535,123536],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,123538,123539],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[571,123541,123542],{"start":82},[574,123543,123544],{},"查看已开启的VNC服务器：",[26,123546,123548],{"className":28,"code":123547,"language":30,"meta":31,"style":31},"vncserver -list\n",[33,123549,123550],{"__ignoreMap":31},[36,123551,123552,123554],{"class":38,"line":39},[36,123553,123524],{"class":55},[36,123555,123556],{"class":109}," -list\n",[14,123558,123559],{},[1941,123560],{"alt":31,"src":123561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[571,123563,123564],{"start":88},[574,123565,123566],{},"连接到VNC服务器：",[14,123568,123569],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[571,123571,123572],{"start":113},[574,123573,123574],{},"停止VNC服务器：",[14,123576,123577],{},"如果需要停止VNC服务器，可以使用以下命令：",[26,123579,123581],{"className":28,"code":123580,"language":30,"meta":31,"style":31},"vncserver -kill :1\n",[33,123582,123583],{"__ignoreMap":31},[36,123584,123585,123587,123590],{"class":38,"line":39},[36,123586,123524],{"class":55},[36,123588,123589],{"class":109}," -kill",[36,123591,123592],{"class":59}," :1\n",[14,123594,123595],{},"将:1替换为你实际使用的显示编号。",[14,123597,123598],{},[1941,123599],{"alt":31,"src":123600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,123602,123603],{},[1941,123604],{"alt":31,"src":123605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[559,123607,123609],{"id":123608},"_74-usb端口设置","7.4 USB端口设置",[14,123611,123612],{},[765,123613,123614],{},"首先先配置好权限",[26,123616,123618],{"className":28,"code":123617,"language":30,"meta":31,"style":31},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[33,123619,123620,123625,123638,123645,123650],{"__ignoreMap":31},[36,123621,123622],{"class":38,"line":39},[36,123623,123624],{"class":42},"# 将用户权限提高\n",[36,123626,123627,123629,123631,123633,123636],{"class":38,"line":46},[36,123628,56],{"class":55},[36,123630,27008],{"class":59},[36,123632,27011],{"class":109},[36,123634,123635],{"class":59}," dialout",[36,123637,27016],{"class":98},[36,123639,123640,123642],{"class":38,"line":52},[36,123641,27035],{"class":55},[36,123643,123644],{"class":59}," dialout\n",[36,123646,123647],{"class":38,"line":66},[36,123648,123649],{"class":42},"# 查看下面命令是否输出dialout（若输出才正常）\n",[36,123651,123652],{"class":38,"line":72},[36,123653,123654],{"class":55},"groups\n",[14,123656,123657],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[588,123659,123661],{"id":123660},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,123663,123664,123667],{},[765,123665,123666],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,123669,123670,123673],{},[765,123671,123672],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,123675,123676],{},[765,123677,123678],{},"流程如下：",[14,123680,123681],{},"（1）.查找设备idVendor和idProduct",[14,123683,123684,123685,123688],{},"接入两个USB设备，在终端调用指令",[33,123686,123687],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,123690,123691],{},[1941,123692],{"alt":31,"src":123693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,123695,123696,123697,123700],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[33,123698,123699],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,123702,123703],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,123705,123706],{},"（2）.编写映射规则",[14,123708,123709,123710,123713],{},"在",[33,123711,123712],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[26,123715,123717],{"className":28,"code":123716,"language":30,"meta":31,"style":31},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[33,123718,123719],{"__ignoreMap":31},[36,123720,123721,123723,123725],{"class":38,"line":39},[36,123722,56],{"class":55},[36,123724,118957],{"class":59},[36,123726,123727],{"class":59}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,123729,123730],{},"输入如下内容：",[26,123732,123734],{"className":28,"code":123733,"language":30,"meta":31,"style":31},"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",[33,123735,123736,123766],{"__ignoreMap":31},[36,123737,123738,123741,123743,123746,123749,123752,123755,123757,123760,123763],{"class":38,"line":39},[36,123739,123740],{"class":98},"KERNEL",[36,123742,176],{"class":163},[36,123744,123745],{"class":59},"=\"ttyUSB*\",",[36,123747,123748],{"class":55}," ATTRS",[36,123750,123751],{"class":59},"{idVendor}==",[36,123753,123754],{"class":55},"\"10c4\"",[36,123756,992],{"class":55},[36,123758,123759],{"class":59}," ATTRS{idProduct}==\"ea60\",",[36,123761,123762],{"class":59}," MODE:=\"0777\",",[36,123764,123765],{"class":59}," SYMLINK+=\"mylidar\"\n",[36,123767,123768,123770,123772,123774,123776,123778,123781,123783,123786,123788],{"class":38,"line":46},[36,123769,123740],{"class":98},[36,123771,176],{"class":163},[36,123773,123745],{"class":59},[36,123775,123748],{"class":55},[36,123777,123751],{"class":59},[36,123779,123780],{"class":55},"\"1a86\"",[36,123782,992],{"class":55},[36,123784,123785],{"class":59}," ATTRS{idProduct}==\"7523\",",[36,123787,123762],{"class":59},[36,123789,123790],{"class":59}," SYMLINK+=\"mycar\"\n",[14,123792,123793],{},"代码解释：",[1618,123795,123796,123799,123802,123805],{},[574,123797,123798],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[574,123800,123801],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[574,123803,123804],{},"SYMLINK是符号连接，即绑定的别名；",[574,123806,123807],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,123809,123810,123811,123814,123817],{},"***小提示：***",[23992,123812,123813],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[33,123815,123816],{},"\u002Fetc\u002Fudev\u002Frule.d",[23992,123818,123819],{},"目录即可。",[14,123821,123822],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,123824,123825],{},"（3）.使规则生效",[14,123827,123828],{},"在终端下输入如下指令：",[26,123830,123832],{"className":28,"code":123831,"language":30,"meta":31,"style":31},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[33,123833,123834,123839,123851,123862,123866,123871,123884],{"__ignoreMap":31},[36,123835,123836],{"class":38,"line":39},[36,123837,123838],{"class":42},"# Ubuntu用下方命令\n",[36,123840,123841,123843,123845,123848],{"class":38,"line":46},[36,123842,56],{"class":55},[36,123844,120422],{"class":59},[36,123846,123847],{"class":59}," udev",[36,123849,123850],{"class":59}," reload\n",[36,123852,123853,123855,123857,123859],{"class":38,"line":52},[36,123854,56],{"class":55},[36,123856,120422],{"class":59},[36,123858,123847],{"class":59},[36,123860,123861],{"class":59}," restart\n",[36,123863,123864],{"class":38,"line":66},[36,123865,247],{"emptyLinePlaceholder":246},[36,123867,123868],{"class":38,"line":72},[36,123869,123870],{"class":42},"#Fedora用下方命令\n",[36,123872,123873,123875,123878,123881],{"class":38,"line":82},[36,123874,56],{"class":55},[36,123876,123877],{"class":59}," udevadm",[36,123879,123880],{"class":59}," control",[36,123882,123883],{"class":109}," --reload\n",[36,123885,123886,123888,123890],{"class":38,"line":88},[36,123887,56],{"class":55},[36,123889,123877],{"class":59},[36,123891,123892],{"class":59}," trigger\n",[14,123894,123895],{},"再重新插拔设备即可。",[14,123897,123898],{},"（4）.测试",[14,123900,123901],{},"终端下输入如下指令",[26,123903,123905],{"className":28,"code":123904,"language":30,"meta":31,"style":31},"ll \u002Fdev | grep ttyUSB\n",[33,123906,123907],{"__ignoreMap":31},[36,123908,123909,123912,123915,123917,123919],{"class":38,"line":39},[36,123910,123911],{"class":55},"ll",[36,123913,123914],{"class":59}," \u002Fdev",[36,123916,25546],{"class":163},[36,123918,30669],{"class":55},[36,123920,123921],{"class":59}," ttyUSB\n",[14,123923,123924],{},"运行结果如下：",[14,123926,123927],{},[1941,123928],{"alt":31,"src":123929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,123931,123932,123933,123936],{},"也可以多次插拔USB设备，会发现设备端口",[33,123934,123935],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,123938,123939],{},[765,123940,118338],{},[14,123942,123943],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[588,123945,123947],{"id":123946},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,123949,123950,123952],{},[765,123951,123666],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,123954,123955,123957],{},[765,123956,123672],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,123959,123960],{},[765,123961,123678],{},[14,123963,123964],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,123966,123967],{},"调用如下指令查看第一台雷达的USB信息：",[26,123969,123971],{"className":28,"code":123970,"language":30,"meta":31,"style":31},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[33,123972,123973,123993],{"__ignoreMap":31},[36,123974,123975,123978,123980,123983,123986,123988,123990],{"class":38,"line":39},[36,123976,123977],{"class":55},"udevadm",[36,123979,70253],{"class":59},[36,123981,123982],{"class":109}," --attribute-walk",[36,123984,123985],{"class":109}," --name=\u002Fdev\u002FttyUSB0",[36,123987,25546],{"class":163},[36,123989,30669],{"class":55},[36,123991,123992],{"class":59}," KERNELS\n",[36,123994,123995,123997,123999,124001,124004,124006,124008],{"class":38,"line":46},[36,123996,123977],{"class":55},[36,123998,70253],{"class":59},[36,124000,123982],{"class":109},[36,124002,124003],{"class":109}," --name=\u002Fdev\u002FttyACM0",[36,124005,25546],{"class":163},[36,124007,30669],{"class":55},[36,124009,123992],{"class":59},[14,124011,124012],{},[1941,124013],{"alt":31,"src":124014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,124016,124017],{},"调用如下指令查看第二台雷达的USB信息：",[26,124019,124021],{"className":28,"code":124020,"language":30,"meta":31,"style":31},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[33,124022,124023],{"__ignoreMap":31},[36,124024,124025,124027,124029,124031,124034,124036,124038],{"class":38,"line":39},[36,124026,123977],{"class":55},[36,124028,70253],{"class":59},[36,124030,123982],{"class":109},[36,124032,124033],{"class":109}," --name=\u002Fdev\u002FttyUSB1",[36,124035,25546],{"class":163},[36,124037,30669],{"class":55},[36,124039,123992],{"class":59},[14,124041,124042,124043,124046,124047,124050,124051,124054],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[33,124044,124045],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[33,124048,124049],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[765,124052,124053],{},"唯一性标识","”。",[14,124056,123706],{},[14,124058,123709,124059,124061],{},[33,124060,123712],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[26,124063,124064],{"className":28,"code":123716,"language":30,"meta":31,"style":31},[33,124065,124066],{"__ignoreMap":31},[36,124067,124068,124070,124072],{"class":38,"line":39},[36,124069,56],{"class":55},[36,124071,118957],{"class":59},[36,124073,123727],{"class":59},[26,124075,124077],{"className":28,"code":124076,"language":30,"meta":31,"style":31},"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",[33,124078,124079,124108],{"__ignoreMap":31},[36,124080,124081,124083,124085,124087,124090,124092,124095,124098,124100,124103,124105],{"class":38,"line":39},[36,124082,123740],{"class":98},[36,124084,176],{"class":163},[36,124086,123745],{"class":59},[36,124088,124089],{"class":98}," KERNELS",[36,124091,176],{"class":163},[36,124093,124094],{"class":59},"=\"1-1.3:1.0\",",[36,124096,124097],{"class":55}," MODE:",[36,124099,176],{"class":59},[36,124101,124102],{"class":55},"\"0777\"",[36,124104,992],{"class":55},[36,124106,124107],{"class":59}," SYMLINK+=\"rplidar_front\"\n",[36,124109,124110,124112,124114,124116,124118,124120,124123,124125,124127,124129,124131],{"class":38,"line":46},[36,124111,123740],{"class":98},[36,124113,176],{"class":163},[36,124115,123745],{"class":59},[36,124117,124089],{"class":98},[36,124119,176],{"class":163},[36,124121,124122],{"class":59},"=\"1-1.4:1.0\",",[36,124124,124097],{"class":55},[36,124126,176],{"class":59},[36,124128,124102],{"class":55},[36,124130,992],{"class":55},[36,124132,124133],{"class":59}," SYMLINK+=\"rplidar_back\"\n",[14,124135,123825],{},[14,124137,123828],{},[26,124139,124140],{"className":28,"code":123831,"language":30,"meta":31,"style":31},[33,124141,124142,124146,124156,124166,124170,124174,124184],{"__ignoreMap":31},[36,124143,124144],{"class":38,"line":39},[36,124145,123838],{"class":42},[36,124147,124148,124150,124152,124154],{"class":38,"line":46},[36,124149,56],{"class":55},[36,124151,120422],{"class":59},[36,124153,123847],{"class":59},[36,124155,123850],{"class":59},[36,124157,124158,124160,124162,124164],{"class":38,"line":52},[36,124159,56],{"class":55},[36,124161,120422],{"class":59},[36,124163,123847],{"class":59},[36,124165,123861],{"class":59},[36,124167,124168],{"class":38,"line":66},[36,124169,247],{"emptyLinePlaceholder":246},[36,124171,124172],{"class":38,"line":72},[36,124173,123870],{"class":42},[36,124175,124176,124178,124180,124182],{"class":38,"line":82},[36,124177,56],{"class":55},[36,124179,123877],{"class":59},[36,124181,123880],{"class":59},[36,124183,123883],{"class":109},[36,124185,124186,124188,124190],{"class":38,"line":88},[36,124187,56],{"class":55},[36,124189,123877],{"class":59},[36,124191,123892],{"class":59},[14,124193,123895],{},[14,124195,123898],{},[14,124197,123901,124198,124201],{},[33,124199,124200],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,124203,124204],{},[1941,124205],{"alt":31,"src":124206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,124208,124209],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,124211,124212,124214],{},[765,124213,118338],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[588,124216,124218],{"id":124217},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,124220,124221],{},"（1）.查看所连接的主机USB接口的信息",[26,124223,124225],{"className":28,"code":124224,"language":30,"meta":31,"style":31},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[33,124226,124227,124257],{"__ignoreMap":31},[36,124228,124229,124231,124233,124236,124238,124240,124242,124244,124247,124250,124252,124255],{"class":38,"line":39},[36,124230,123977],{"class":55},[36,124232,70253],{"class":59},[36,124234,124235],{"class":109}," -a",[36,124237,29649],{"class":109},[36,124239,28856],{"class":98},[36,124241,123977],{"class":55},[36,124243,70253],{"class":59},[36,124245,124246],{"class":109}," -q",[36,124248,124249],{"class":59}," path",[36,124251,25552],{"class":109},[36,124253,124254],{"class":59}," \u002Fdev\u002FttyACM0",[36,124256,627],{"class":98},[36,124258,124259,124261,124263,124265,124267,124269,124271,124273,124275,124277,124279,124282],{"class":38,"line":46},[36,124260,123977],{"class":55},[36,124262,70253],{"class":59},[36,124264,124235],{"class":109},[36,124266,29649],{"class":109},[36,124268,28856],{"class":98},[36,124270,123977],{"class":55},[36,124272,70253],{"class":59},[36,124274,124246],{"class":109},[36,124276,124249],{"class":59},[36,124278,25552],{"class":109},[36,124280,124281],{"class":59}," \u002Fdev\u002FttyUSB0",[36,124283,627],{"class":98},[14,124285,124286],{},[1941,124287],{"alt":31,"src":124288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,124290,124291],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,124293,123706],{},[14,124295,123709,124296,124061],{},[33,124297,123712],{},[26,124299,124300],{"className":28,"code":123716,"language":30,"meta":31,"style":31},[33,124301,124302],{"__ignoreMap":31},[36,124303,124304,124306,124308],{"class":38,"line":39},[36,124305,56],{"class":55},[36,124307,118957],{"class":59},[36,124309,123727],{"class":59},[26,124311,124313],{"className":28,"code":124312,"language":30,"meta":31,"style":31},"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",[33,124314,124315,124343,124369],{"__ignoreMap":31},[36,124316,124317,124319,124321,124324,124326,124328,124330,124332,124335,124338,124340],{"class":38,"line":39},[36,124318,123740],{"class":98},[36,124320,176],{"class":163},[36,124322,124323],{"class":59},"=\"ttyACM*\",",[36,124325,123748],{"class":55},[36,124327,123751],{"class":59},[36,124329,123780],{"class":55},[36,124331,992],{"class":55},[36,124333,124334],{"class":59}," ATTRS{idProduct}==\"55d4\",",[36,124336,124337],{"class":59}," ATTRS{serial}==\"0001\",",[36,124339,123762],{"class":59},[36,124341,124342],{"class":59}," SYMLINK+=\"ttyACM_MCU\"\n",[36,124344,124345,124347,124349,124351,124353,124355,124357,124359,124361,124364,124366],{"class":38,"line":46},[36,124346,123740],{"class":98},[36,124348,176],{"class":163},[36,124350,124323],{"class":59},[36,124352,123748],{"class":55},[36,124354,123751],{"class":59},[36,124356,123780],{"class":55},[36,124358,992],{"class":55},[36,124360,124334],{"class":59},[36,124362,124363],{"class":59}," ATTRS{serial}==\"0002\",",[36,124365,123762],{"class":59},[36,124367,124368],{"class":59}," SYMLINK+=\"ttyACM_Lidar\"\n",[36,124370,124371,124373,124375,124377,124379,124381,124383,124385,124387,124389],{"class":38,"line":52},[36,124372,123740],{"class":98},[36,124374,176],{"class":163},[36,124376,123745],{"class":59},[36,124378,123748],{"class":55},[36,124380,123751],{"class":59},[36,124382,123780],{"class":55},[36,124384,992],{"class":55},[36,124386,123785],{"class":59},[36,124388,123762],{"class":59},[36,124390,124391],{"class":59}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,124393,123825],{},[14,124395,123828],{},[26,124397,124398],{"className":28,"code":123831,"language":30,"meta":31,"style":31},[33,124399,124400,124404,124414,124424,124428,124432,124442],{"__ignoreMap":31},[36,124401,124402],{"class":38,"line":39},[36,124403,123838],{"class":42},[36,124405,124406,124408,124410,124412],{"class":38,"line":46},[36,124407,56],{"class":55},[36,124409,120422],{"class":59},[36,124411,123847],{"class":59},[36,124413,123850],{"class":59},[36,124415,124416,124418,124420,124422],{"class":38,"line":52},[36,124417,56],{"class":55},[36,124419,120422],{"class":59},[36,124421,123847],{"class":59},[36,124423,123861],{"class":59},[36,124425,124426],{"class":38,"line":66},[36,124427,247],{"emptyLinePlaceholder":246},[36,124429,124430],{"class":38,"line":72},[36,124431,123870],{"class":42},[36,124433,124434,124436,124438,124440],{"class":38,"line":82},[36,124435,56],{"class":55},[36,124437,123877],{"class":59},[36,124439,123880],{"class":59},[36,124441,123883],{"class":109},[36,124443,124444,124446,124448],{"class":38,"line":88},[36,124445,56],{"class":55},[36,124447,123877],{"class":59},[36,124449,123892],{"class":59},[14,124451,124452,124453],{},"再重新插拔设备即可，或者 ",[765,124454,124455],{},"直接重启系统。",[14,124457,123898],{},[14,124459,123901,124460,124201],{},[33,124461,124200],{},[14,124463,124464],{},[1941,124465],{"alt":31,"src":124466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,124468,124209],{},[14,124470,124471,124473],{},[765,124472,118338],{}," 一些设备可能没有串口号等。",[588,124475,124477],{"id":124476},"_744-其他注意事项","7.4.4 其他注意事项",[14,124479,124480,124481,124483,124484,124487,124488,18849,124491,124494,124495,124497],{},"并非所有的USB设备端口号都是",[33,124482,123935],{},"的格式，比如Arduino的端口号可能是",[33,124485,124486],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[33,124489,124490],{},"videon",[33,124492,124493],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[33,124496,124490],{},"端口，绑定时需要关联的也是该接口。",[14,124499,124500,124501,124504,124505,124508,124509,124511,124512,124515,124516,124519,124520,124523,124524,124523,124527,124523,124530,28819],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[33,124502,124503],{},"KERNEL==\"ttyUSB*\"","修改为",[33,124506,124507],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[33,124510,124503],{},"修改为类似于",[33,124513,124514],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[33,124517,124518],{},"video[0,2,4,6]","表示可以绑定的端口为",[33,124521,124522],{},"video0","或",[33,124525,124526],{},"video2",[33,124528,124529],{},"video4",[33,124531,124532],{},"video6",[559,124534,124536],{"id":124535},"_75-挂载内网网页","7.5 挂载内网网页",[14,124538,124539],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,124541,124542],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,124544,124545],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,124547,124548,124549],{},"Termux 下载地址（F-Droid）：",[20,124550,124551],{"href":124551,"rel":124552},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24],[14,124554,124555],{},"首先打开app后，先更新软件缓存：",[26,124557,124559],{"className":28,"code":124558,"language":30,"meta":31,"style":31},"pkg update\n",[33,124560,124561],{"__ignoreMap":31},[36,124562,124563,124566],{"class":38,"line":39},[36,124564,124565],{"class":55},"pkg",[36,124567,63],{"class":59},[14,124569,124570],{},"然后换源",[26,124572,124574],{"className":28,"code":124573,"language":30,"meta":31,"style":31},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[33,124575,124576],{"__ignoreMap":31},[36,124577,124578,124580,124583],{"class":38,"line":39},[36,124579,123448],{"class":55},[36,124581,124582],{"class":98}," $PREFIX",[36,124584,124585],{"class":59},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,124587,124588],{},"将该文件内容替换为下面：",[26,124590,124592],{"className":28,"code":124591,"language":30,"meta":31,"style":31},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[33,124593,124594],{"__ignoreMap":31},[36,124595,124596,124599,124602,124605],{"class":38,"line":39},[36,124597,124598],{"class":55},"deb",[36,124600,124601],{"class":59}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[36,124603,124604],{"class":59}," stable",[36,124606,124607],{"class":59}," main\n",[1618,124609,124610,124637],{},[574,124611,124612,124613,124615,124616],{},"如果你使用的是",[33,124614,123448],{},"编辑器：",[1618,124617,124618,124625,124631],{},[574,124619,124620,124621,124624],{},"按 ",[33,124622,124623],{},"Ctrl+O"," 保存文件。",[574,124626,124620,124627,124630],{},[33,124628,124629],{},"Enter"," 确认文件名。",[574,124632,124620,124633,124636],{},[33,124634,124635],{},"Ctrl+X"," 退出编辑器。",[574,124638,124612,124639,124615,124642],{},[33,124640,124641],{},"vim",[1618,124643,124644,124650],{},[574,124645,124620,124646,124649],{},[33,124647,124648],{},"Esc"," 退出编辑模式。",[574,124651,124652,124653,124655],{},"输入 ",[33,124654,119595],{}," 保存并退出。",[14,124657,124658],{},"接下来重新更新软件源：",[26,124660,124662],{"className":28,"code":124661,"language":30,"meta":31,"style":31},"pkg update && pkg upgrade\n",[33,124663,124664],{"__ignoreMap":31},[36,124665,124666,124668,124670,124672,124674],{"class":38,"line":39},[36,124667,124565],{"class":55},[36,124669,95],{"class":59},[36,124671,99],{"class":98},[36,124673,124565],{"class":55},[36,124675,79],{"class":59},[14,124677,124678],{},"安装python：",[26,124680,124682],{"className":28,"code":124681,"language":30,"meta":31,"style":31},"pkg install python\n",[33,124683,124684],{"__ignoreMap":31},[36,124685,124686,124688,124690],{"class":38,"line":39},[36,124687,124565],{"class":55},[36,124689,160],{"class":59},[36,124691,124692],{"class":59}," python\n",[14,124694,124695,26907],{},[765,124696,124697],{},"通过Termux访问设备存储",[14,124699,124700],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[26,124702,124704],{"className":28,"code":124703,"language":30,"meta":31,"style":31},"termux-setup-storage\n",[33,124705,124706],{"__ignoreMap":31},[36,124707,124708],{"class":38,"line":39},[36,124709,124703],{"class":55},[571,124711,124712],{},[574,124713,124714,26907,124717],{},[765,124715,124716],{},"进入HTML文件所在的目录",[571,124718,124719],{},[574,124720,124721,124722,124724],{},"使用",[33,124723,101707],{},"命令进入HTML文件所在的目录：",[26,124726,124728],{"className":28,"code":124727,"language":30,"meta":31,"style":31},"cd ~\u002Fyour_html_folder\n",[33,124729,124730],{"__ignoreMap":31},[36,124731,124732,124734],{"class":38,"line":39},[36,124733,101707],{"class":109},[36,124735,124736],{"class":59}," ~\u002Fyour_html_folder\n",[571,124738,124739],{"start":46},[574,124740,124741,26907,124744,124749,124766],{},[765,124742,124743],{},"启动Python HTTP服务器",[571,124745,124746],{},[574,124747,124748],{},"运行以下命令启动一个简单的HTTP服务器：",[26,124750,124752],{"className":28,"code":124751,"language":30,"meta":31,"style":31},"python -m http.server 8000\n",[33,124753,124754],{"__ignoreMap":31},[36,124755,124756,124758,124760,124763],{"class":38,"line":39},[36,124757,30813],{"class":55},[36,124759,101314],{"class":109},[36,124761,124762],{"class":59}," http.server",[36,124764,124765],{"class":109}," 8000\n",[571,124767,124768],{"start":52},[574,124769,124770,124771,124774],{},"这会在端口",[33,124772,124773],{},"8000","上启动一个Web服务器。",[1618,124776,124777],{},[574,124778,124779],{},"启动服务器后，Termux会显示日志信息，例如：",[26,124781,124783],{"className":121190,"code":124782,"language":121192,"meta":121193,"style":31},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[33,124784,124785],{"__ignoreMap":31},[36,124786,124787],{"class":38,"line":39},[36,124788,124782],{},[1618,124790,124791],{},[574,124792,124793],{},"这表示服务器已成功启动。",[14,124795,124796],{},[765,124797,124798],{},"在浏览器中访问HTML文件",[571,124800,124801],{},[574,124802,124803,26907,124806,124811],{},[765,124804,124805],{},"在同一设备上访问",[571,124807,124808],{},[574,124809,124810],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[26,124812,124815],{"className":124813,"code":124814,"language":72096,"meta":31,"style":31},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[33,124816,124817],{"__ignoreMap":31},[36,124818,124819,124822],{"class":38,"line":39},[36,124820,124821],{"class":98},"http:",[36,124823,124824],{"class":42},"\u002F\u002Flocalhost:8000\n",[1618,124826,124827],{},[574,124828,124829,124830,124833],{},"如果HTML文件中有",[33,124831,124832],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[559,124835,124837],{"id":124836},"_76-linux重点知识","7.6 Linux重点知识",[588,124839,124841],{"id":124840},"_761-关于点的说明","7.6.1 关于点的说明",[14,124843,124844],{},[1941,124845],{"alt":31,"src":124846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,124848,124849],{},"一点本目录，两点上目录",[588,124851,124853],{"id":124852},"_762-目录","7.6.2 目录",[22437,124855,124857],{"id":124856},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,124859,124860],{},[765,124861,124862],{},"\u002Fboot:",[14,124864,124865],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,124867,124868],{},[765,124869,124870],{},"\u002Fetc:",[14,124872,124873],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,124875,124876],{},[765,124877,124878],{},"\u002Flib：",[14,124880,124881],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,124883,124884],{},[765,124885,124886],{},"\u002Fsys:",[14,124888,124889],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22437,124891,124893],{"id":124892},"_7622-指令集合","7.6.2.2 指令集合",[14,124895,124896],{},[765,124897,124898],{},"\u002Fbin:",[14,124900,124901],{},"为二进制文件的缩写，存放最经常使用的命令",[14,124903,124904],{},[765,124905,124906],{},"\u002Fsbin:",[14,124908,124909],{},"只有系统管理员才能使用的程序和指令",[22437,124911,124913],{"id":124912},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,124915,124916],{},[765,124917,124918],{},"\u002Fdev:",[14,124920,124921],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,124923,124924],{},[765,124925,124926],{},"\u002Fmedia:",[14,124928,124929],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,124931,124932],{},[765,124933,124934],{},"\u002Fmnt:",[14,124936,124937],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22437,124939,124941],{"id":124940},"_7624-临时文件","7.6.2.4 临时文件",[14,124943,124944],{},[765,124945,124946],{},"\u002Frun:",[14,124948,124949],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,124951,124952],{},[765,124953,124954],{},"\u002Flost+found:",[14,124956,124957],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,124959,124960],{},[765,124961,124962],{},"\u002Ftmp:",[14,124964,124965],{},"这个目录是用来存放一些临时文件的",[22437,124967,124969],{"id":124968},"_7625-账户","7.6.2.5 账户",[14,124971,124972],{},[765,124973,124974],{},"\u002Froot：",[14,124976,124977],{},"系统管理员的用户主目录",[14,124979,124980,26907],{},[765,124981,124982],{},"\u002Fhome",[14,124984,124985],{},"用户的主目录，以用户的账号命名的",[14,124987,124988,26907],{},[765,124989,124990],{},"\u002Fusr",[14,124992,124993],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,124995,124996],{},[765,124997,124998],{},"\u002Fusr\u002Fbin：",[14,125000,125001],{},"系统用户使用的应用程序与指令",[14,125003,125004],{},[765,125005,125006],{},"\u002Fusr\u002Fsbin：",[14,125008,125009],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,125011,125012],{},[765,125013,125014],{},"\u002Fusr\u002Fsrc：",[14,125016,125017],{},"内核源代码默认的放置目录",[22437,125019,125021],{"id":125020},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,125023,125024],{},[765,125025,125026],{},"\u002Fvar：",[14,125028,125029],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,125031,125032],{},[765,125033,125034],{},"\u002Fproc:",[14,125036,125037,125038,125041],{},"管理 ",[765,125039,125040],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22437,125043,125045],{"id":125044},"_7627-扩展用的","7.6.2.7 扩展用的",[14,125047,125048],{},[765,125049,125050],{},"\u002Fopt:",[14,125052,125053],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,125055,125056],{},[765,125057,125058],{},"\u002Fsrv:",[14,125060,125061],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[588,125063,125065],{"id":125064},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,125067,125068],{},[1941,125069],{"alt":31,"src":125070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,125072,125073],{},"windows-->linux:",[14,125075,125076],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,125078,125079],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,125081,125082],{},"linux传输文件到windows",[14,125084,125085],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[588,125087,125089],{"id":125088},"_764-易忘知识","7.6.4 易忘知识",[14,125091,125092],{},"操作系统内核查看",[26,125094,125095],{"className":28,"code":121664,"language":30,"meta":31,"style":31},[33,125096,125097],{"__ignoreMap":31},[36,125098,125099,125101],{"class":38,"line":39},[36,125100,70636],{"class":55},[36,125102,121673],{"class":109},[14,125104,125105],{},[1941,125106],{"alt":31,"src":125107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,125109,125110],{},[1941,125111],{"alt":31,"src":125112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[26,125114,125116],{"className":28,"code":125115,"language":30,"meta":31,"style":31},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[33,125117,125118,125130],{"__ignoreMap":31},[36,125119,125120,125122,125125,125128],{"class":38,"line":39},[36,125121,121881],{"class":55},[36,125123,125124],{"class":59}," mvtest",[36,125126,125127],{"class":59}," mvtest2",[36,125129,3125],{"class":98},[36,125131,125132],{"class":38,"line":46},[36,125133,125134],{"class":55},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,125136,125137],{},[1941,125138],{"alt":31,"src":125139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,125141,125142],{},[1941,125143],{"alt":31,"src":125144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,125146,125147,125148,125151],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[33,125149,125150],{},"du -a"," 可以快速查看磁盘使用细节。",[588,125153,125155],{"id":125154},"_765-vim","7.6.5 Vim",[14,125157,125158],{},[1941,125159],{"alt":31,"src":125160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,125162,125163],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,125165,125166],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,125168,125169],{},[765,125170,125171],{},"1.命令模式：",[14,125173,125174],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,125176,125177],{},"x 删除当前光标所在处的字符",[14,125179,125180],{},"：切换到底线命令模式，以在最底一行输入命令",[14,125182,125183],{},"a 进行插入模式，在光标下一个位置输入文本",[14,125185,125186],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,125188,125189],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,125191,125192],{},"dd 剪切当前行",[14,125194,125195],{},"yy 复制当前行",[14,125197,125198],{},"p 粘贴剪贴板内容到光标下方",[14,125200,125201],{},"P 粘贴剪贴板内容到光标上方",[14,125203,125204],{},"u 撤销上一次操作",[14,125206,125207],{},"ctrl+r 重做上一次操作",[14,125209,125210,125212],{},[1408,125211],{}," 保存文件",[14,125214,125215,125217],{},[1259,125216],{}," 退出Vim编辑器",[14,125219,125220,125222],{},[1259,125221],{},"! 强制退出Vim编辑器，不保存修改",[14,125224,125225],{},[765,125226,125227],{},"2.输入模式：",[14,125229,125230],{},[1941,125231],{"alt":31,"src":125232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,125234,125235],{},[765,125236,125237],{},"3.底线命令模式：",[14,125239,125240],{},[1941,125241],{"alt":31,"src":125242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,125244,125245],{},"按下esc可以退出底线命令模式",[588,125247,125249],{"id":125248},"_766-apt","7.6.6 apt",[14,125251,125252],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[588,125254,125256],{"id":125255},"_767-home与root的区别","7.6.7 home与root的区别",[14,125258,125259],{},[1941,125260],{"alt":31,"src":125261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,125263,125264],{},[1941,125265],{"alt":31,"src":125266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,125268,125269],{},[1941,125270],{"alt":31,"src":125271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,125273,125274],{},[1941,125275],{"alt":31,"src":125276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[588,125278,125280],{"id":125279},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,125282,125283],{},[20,125284,125285],{"href":125285,"rel":125286},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24],[571,125288,125289,125292],{},[574,125290,125291],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[574,125293,125294],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,125296,125297],{},[1941,125298],{"alt":31,"src":125299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,125301,125302],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,125304,125305],{},[1941,125306],{"alt":31,"src":125307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[26,125309,125311],{"className":121190,"code":125310,"language":121192,"meta":121193,"style":31},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[33,125312,125313,125318],{"__ignoreMap":31},[36,125314,125315],{"class":38,"line":39},[36,125316,125317],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[36,125319,125320],{"class":38,"line":46},[36,125321,125322],{},".\u002Fpycharm.sh\n",[14,125324,125325],{},"3️⃣创建.desktop文件",[14,125327,125328],{},[765,125329,125330],{},"原理：",[1618,125332,125333,125343],{},[574,125334,125335,125336,125342],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[765,125337,125338,125341],{},[33,125339,125340],{},".desktop"," 文件"," 来识别应用。",[574,125344,125345,125347,125348],{},[33,125346,125340],{}," 文件相当于一个“应用注册表”，告诉系统：",[1618,125349,125350,125353,125356,125359,125362],{},[574,125351,125352],{},"应用名字（Name）",[574,125354,125355],{},"图标（Icon）",[574,125357,125358],{},"执行命令（Exec）",[574,125360,125361],{},"分类（Categories）",[574,125363,125364],{},"是否需要终端（Terminal）",[26,125366,125368],{"className":121190,"code":125367,"language":121192,"meta":121193,"style":31},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[33,125369,125370,125375],{"__ignoreMap":31},[36,125371,125372],{"class":38,"line":39},[36,125373,125374],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[36,125376,125377],{"class":38,"line":46},[36,125378,125379],{},"nano pycharm.desktop\n",[14,125381,125382],{},"nano是一个命令行下的编辑器，也可以使用vim",[26,125384,125386],{"className":121190,"code":125385,"language":121192,"meta":121193,"style":31},"[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",[33,125387,125388,125393,125398,125403,125408,125413,125418,125423,125428,125433],{"__ignoreMap":31},[36,125389,125390],{"class":38,"line":39},[36,125391,125392],{},"[Desktop Entry]\n",[36,125394,125395],{"class":38,"line":46},[36,125396,125397],{},"Version=1.0\n",[36,125399,125400],{"class":38,"line":52},[36,125401,125402],{},"Type=Application\n",[36,125404,125405],{"class":38,"line":66},[36,125406,125407],{},"Name=PyCharm\n",[36,125409,125410],{"class":38,"line":72},[36,125411,125412],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[36,125414,125415],{"class":38,"line":82},[36,125416,125417],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[36,125419,125420],{"class":38,"line":88},[36,125421,125422],{},"Comment=JetBrains PyCharm IDE\n",[36,125424,125425],{"class":38,"line":113},[36,125426,125427],{},"Categories=Development;IDE;\n",[36,125429,125430],{"class":38,"line":119},[36,125431,125432],{},"Terminal=false\n",[36,125434,125435],{"class":38,"line":131},[36,125436,125437],{},"StartupWMClass=jetbrains-pycharm\n",[1618,125439,125440,125446,125452,125458],{},[574,125441,125442,125445],{},[33,125443,125444],{},"Exec"," → 点击图标时执行的命令",[574,125447,125448,125451],{},[33,125449,125450],{},"Icon"," → 显示在菜单和桌面上的图标",[574,125453,125454,125457],{},[33,125455,125456],{},"Terminal=false"," → 不打开终端",[574,125459,125460,125463],{},[33,125461,125462],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125465,125466,125467],"blockquote",{},[14,125468,125469,125470,125472,125473],{},"可以理解成 ",[33,125471,125340],{}," 文件是 Linux 的 ",[765,125474,125475],{},"快捷方式配置文件",[14,125477,125478],{},"4️⃣设置可执行权限",[26,125480,125482],{"className":121190,"code":125481,"language":121192,"meta":121193,"style":31},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[33,125483,125484],{"__ignoreMap":31},[36,125485,125486],{"class":38,"line":39},[36,125487,125481],{},[14,125489,125490],{},"5️⃣桌面图标启动的话如下：",[26,125492,125494],{"className":121190,"code":125493,"language":121192,"meta":121193,"style":31},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[33,125495,125496,125501],{"__ignoreMap":31},[36,125497,125498],{"class":38,"line":39},[36,125499,125500],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[36,125502,125503],{"class":38,"line":46},[36,125504,125505],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[571,125507,125508],{"start":52},[574,125509,125510],{},"下载Appimage文件实现软件的安装",[14,125512,125513],{},"1️⃣先下载appimage",[14,125515,125516],{},[20,125517,125518],{"href":125518,"rel":125519},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24],[14,125521,125522],{},[1941,125523],{"alt":31,"src":125524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,125526,125527],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,125529,125530],{},[1941,125531],{"alt":31,"src":125532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,125534,125535],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,125537,125538],{},[1941,125539],{"alt":31,"src":125540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,125542,125543],{},[1941,125544],{"alt":31,"src":125545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,125547,125548,125549,125552],{},"3️⃣给他们放在",[33,125550,125551],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,125554,125555],{},"4️⃣给软件执行权限",[26,125557,125559],{"className":121190,"code":125558,"language":121192,"meta":121193,"style":31},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[33,125560,125561,125566],{"__ignoreMap":31},[36,125562,125563],{"class":38,"line":39},[36,125564,125565],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[36,125567,125568],{"class":38,"line":46},[36,125569,125570],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,125572,125573],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[26,125575,125577],{"className":28,"code":125576,"language":30,"meta":31,"style":31},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[33,125578,125579,125586,125593,125599],{"__ignoreMap":31},[36,125580,125581,125583],{"class":38,"line":39},[36,125582,101707],{"class":109},[36,125584,125585],{"class":59}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[36,125587,125588,125590],{"class":38,"line":46},[36,125589,101714],{"class":55},[36,125591,125592],{"class":59}," .\u002Fqqmusic.desktop\n",[36,125594,125595,125597],{"class":38,"line":52},[36,125596,124641],{"class":55},[36,125598,125592],{"class":59},[36,125600,125601,125603,125605,125607],{"class":38,"line":66},[36,125602,56],{"class":55},[36,125604,25016],{"class":59},[36,125606,123507],{"class":59},[36,125608,125592],{"class":59},[14,125610,125611,125613],{},[33,125612,101714],{},"：一个 Linux 命令，主要功能是：",[1618,125615,125616,125619],{},[574,125617,125618],{},"如果文件不存在，就创建一个新的空文件",[574,125620,125621],{},"如果文件已存在，就更新该文件的最后修改时间",[26,125623,125625],{"className":121190,"code":125624,"language":121192,"meta":121193,"style":31},"[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",[33,125626,125627,125631,125636,125641,125646,125650,125655],{"__ignoreMap":31},[36,125628,125629],{"class":38,"line":39},[36,125630,125392],{},[36,125632,125633],{"class":38,"line":46},[36,125634,125635],{},"Name=QQ音乐\n",[36,125637,125638],{"class":38,"line":52},[36,125639,125640],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[36,125642,125643],{"class":38,"line":66},[36,125644,125645],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[36,125647,125648],{"class":38,"line":72},[36,125649,125402],{},[36,125651,125652],{"class":38,"line":82},[36,125653,125654],{},"Categories=Audio;Music;Player;\n",[36,125656,125657],{"class":38,"line":88},[36,125658,125659],{},"Comment=QQ Music Client for Linux\n",[14,125661,125662],{},"将文件复制进去",[14,125664,125665],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,125667,125668],{},[1941,125669],{"alt":31,"src":125670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,125672,125673],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,125675,125676],{},[1941,125677],{"alt":31,"src":125678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,125680,125681,125682,125685,125686,125689],{},"如果你用的不是KDE，那么也可以直接修改",[33,125683,125684],{},"qqmuic.desktop","：在exec的末尾加上",[33,125687,125688],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[26,125691,125693],{"className":121190,"code":125692,"language":121192,"meta":121193,"style":31},"[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",[33,125694,125695,125699,125703,125708,125712,125716,125720],{"__ignoreMap":31},[36,125696,125697],{"class":38,"line":39},[36,125698,125392],{},[36,125700,125701],{"class":38,"line":46},[36,125702,125635],{},[36,125704,125705],{"class":38,"line":52},[36,125706,125707],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[36,125709,125710],{"class":38,"line":66},[36,125711,125645],{},[36,125713,125714],{"class":38,"line":72},[36,125715,125402],{},[36,125717,125718],{"class":38,"line":82},[36,125719,125654],{},[36,125721,125722],{"class":38,"line":88},[36,125723,125659],{},[14,125725,125726],{},[1941,125727],{"alt":31,"src":125728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,125730,125731],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[26,125733,125735],{"className":121190,"code":125734,"language":121192,"meta":121193,"style":31},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[33,125736,125737],{"__ignoreMap":31},[36,125738,125739],{"class":38,"line":39},[36,125740,125734],{},[571,125742,125743],{"start":66},[574,125744,125745],{},"去Flathub上安装软件",[14,125747,125748],{},[20,125749,125750],{"href":125750,"rel":125751},"https:\u002F\u002Fflathub.org\u002F",[24],[14,125753,125754],{},"1️⃣去上面的官网搜索软件+下载软件",[14,125756,125757],{},[1941,125758],{"alt":31,"src":125759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[26,125761,125763],{"className":121190,"code":125762,"language":121192,"meta":121193,"style":31},"flatpak install flathub com.obsproject.Studio\n",[33,125764,125765],{"__ignoreMap":31},[36,125766,125767],{"class":38,"line":39},[36,125768,125762],{},[14,125770,125771],{},[1941,125772],{"alt":31,"src":125773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,125775,125776],{},"2️⃣运行软件",[14,125778,125779],{},"a.官方方式：",[14,125781,125782],{},[1941,125783],{"alt":31,"src":125784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[26,125786,125787],{"className":121190,"code":125762,"language":121192,"meta":121193,"style":31},[33,125788,125789],{"__ignoreMap":31},[36,125790,125791],{"class":38,"line":39},[36,125792,125762],{},[14,125794,125795],{},"b.当普通软件运行：",[14,125797,125798],{},[1941,125799],{"alt":31,"src":125800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,125802,125803],{},[1941,125804],{"alt":31,"src":125805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[537,125807,125808],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":31,"searchDepth":46,"depth":46,"links":125810},[125811,125812,125817,125818,125824,125825],{"id":122543,"depth":46,"text":122544},{"id":122885,"depth":46,"text":122886,"children":125813},[125814,125815,125816],{"id":122889,"depth":52,"text":122890},{"id":122956,"depth":52,"text":122957},{"id":123217,"depth":52,"text":123218},{"id":123370,"depth":46,"text":123371},{"id":123608,"depth":46,"text":123609,"children":125819},[125820,125821,125822,125823],{"id":123660,"depth":52,"text":123661},{"id":123946,"depth":52,"text":123947},{"id":124217,"depth":52,"text":124218},{"id":124476,"depth":52,"text":124477},{"id":124535,"depth":46,"text":124536},{"id":124836,"depth":46,"text":124837,"children":125826},[125827,125828,125829,125830,125831,125832,125833,125834],{"id":124840,"depth":52,"text":124841},{"id":124852,"depth":52,"text":124853},{"id":125064,"depth":52,"text":125065},{"id":125088,"depth":52,"text":125089},{"id":125154,"depth":52,"text":125155},{"id":125248,"depth":52,"text":125249},{"id":125255,"depth":52,"text":125256},{"id":125279,"depth":52,"text":125280},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122535,"description":542},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125841,"title":125842,"body":125843,"description":542,"extension":543,"meta":125847,"navigation":246,"path":125848,"seo":125849,"stem":125850,"__hash__":125851},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125844,"toc":125845},[],{"title":31,"searchDepth":46,"depth":46,"links":125846},[],{"category":30696},"\u002Fwiki\u002F2025-01-27-linux",{"title":125842,"description":542},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125853,"title":125854,"body":125855,"description":125859,"extension":543,"meta":126250,"navigation":246,"path":126251,"seo":126252,"stem":126253,"__hash__":126254},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125856,"toc":126248},[125857,125860,125864,125881,125884,125937,125941,125943,125983,125992,125996,125999,126240,126245],[14,125858,125859],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125861,125863],{"id":125862},"_1ubuntu环境配置","1.Ubuntu环境配置",[571,125865,125866,125869,125872,125875,125878],{},[574,125867,125868],{},"ubuntu环境换源",[574,125870,125871],{},"安装cuda",[574,125873,125874],{},"安装miniconda",[574,125876,125877],{},"安装pytorch",[574,125879,125880],{},"安装genesis",[14,125882,125883],{},"参考链接：",[26,125885,125887],{"className":24261,"code":125886,"language":24263,"meta":31,"style":31},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[33,125888,125889],{"__ignoreMap":31},[36,125890,125891,125894,125897,125900,125902,125905,125908,125910,125913,125916,125918,125921,125924,125926,125929,125932,125934],{"class":38,"line":39},[36,125892,125893],{"class":55},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[36,125895,125896],{"class":59},"=blogdetail",[36,125898,125899],{"class":98},"&sharetype",[36,125901,176],{"class":163},[36,125903,125904],{"class":59},"blogdetail",[36,125906,125907],{"class":98},"&sharerId",[36,125909,176],{"class":163},[36,125911,125912],{"class":59},"144728092",[36,125914,125915],{"class":98},"&sharerefer",[36,125917,176],{"class":163},[36,125919,125920],{"class":59},"PC",[36,125922,125923],{"class":98},"&sharesource",[36,125925,176],{"class":163},[36,125927,125928],{"class":59},"qq_69379513",[36,125930,125931],{"class":98},"&sharefrom",[36,125933,176],{"class":163},[36,125935,125936],{"class":59},"from_link\n",[10,125938,125940],{"id":125939},"_2genesis-报错issue","2.Genesis 报错issue",[14,125942,125883],{},[26,125944,125945],{"className":24261,"code":125886,"language":24263,"meta":31,"style":31},[33,125946,125947],{"__ignoreMap":31},[36,125948,125949,125951,125953,125955,125957,125959,125961,125963,125965,125967,125969,125971,125973,125975,125977,125979,125981],{"class":38,"line":39},[36,125950,125893],{"class":55},[36,125952,125896],{"class":59},[36,125954,125899],{"class":98},[36,125956,176],{"class":163},[36,125958,125904],{"class":59},[36,125960,125907],{"class":98},[36,125962,176],{"class":163},[36,125964,125912],{"class":59},[36,125966,125915],{"class":98},[36,125968,176],{"class":163},[36,125970,125920],{"class":59},[36,125972,125923],{"class":98},[36,125974,176],{"class":163},[36,125976,125928],{"class":59},[36,125978,125931],{"class":98},[36,125980,176],{"class":163},[36,125982,125936],{"class":59},[26,125984,125986],{"className":24261,"code":125985,"language":24263,"meta":31,"style":31},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[33,125987,125988],{"__ignoreMap":31},[36,125989,125990],{"class":38,"line":39},[36,125991,125985],{"class":55},[10,125993,125995],{"id":125994},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,125997,125998],{},"hello_robot.py",[26,126000,126002],{"className":30811,"code":126001,"language":30813,"meta":31,"style":31},"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",[33,126003,126004,126010,126025,126029,126041,126053,126057,126070,126074,126093,126103,126113,126127,126131,126135,126140,126144,126154,126161,126175,126182,126192,126197,126201,126219,126224,126228,126235],{"__ignoreMap":31},[36,126005,126006,126008],{"class":38,"line":39},[36,126007,30825],{"class":163},[36,126009,45738],{"class":98},[36,126011,126012,126015,126018,126020,126022],{"class":38,"line":46},[36,126013,126014],{"class":98},"os.environ[",[36,126016,126017],{"class":59},"'PYOPENGL_PLATFORM'",[36,126019,4894],{"class":98},[36,126021,176],{"class":163},[36,126023,126024],{"class":59}," 'glx'\n",[36,126026,126027],{"class":38,"line":52},[36,126028,247],{"emptyLinePlaceholder":246},[36,126030,126031,126033,126036,126038],{"class":38,"line":66},[36,126032,30825],{"class":163},[36,126034,126035],{"class":98}," genesis ",[36,126037,31816],{"class":163},[36,126039,126040],{"class":98}," gs\n",[36,126042,126043,126045,126048,126050],{"class":38,"line":72},[36,126044,31170],{"class":163},[36,126046,126047],{"class":98}," pynput ",[36,126049,30825],{"class":163},[36,126051,126052],{"class":98}," keyboard\n",[36,126054,126055],{"class":38,"line":82},[36,126056,247],{"emptyLinePlaceholder":246},[36,126058,126059,126062,126065,126067],{"class":38,"line":88},[36,126060,126061],{"class":98},"gs.init(",[36,126063,126064],{"class":5667},"backend",[36,126066,176],{"class":163},[36,126068,126069],{"class":98},"gs.gpu)\n",[36,126071,126072],{"class":38,"line":113},[36,126073,247],{"emptyLinePlaceholder":246},[36,126075,126076,126079,126081,126084,126087,126089,126091],{"class":38,"line":119},[36,126077,126078],{"class":98},"scene ",[36,126080,176],{"class":163},[36,126082,126083],{"class":98}," gs.Scene(",[36,126085,126086],{"class":5667},"show_viewer",[36,126088,176],{"class":163},[36,126090,31909],{"class":109},[36,126092,627],{"class":98},[36,126094,126095,126098,126100],{"class":38,"line":131},[36,126096,126097],{"class":98},"plane ",[36,126099,176],{"class":163},[36,126101,126102],{"class":98}," scene.add_entity(gs.morphs.Plane())\n",[36,126104,126105,126108,126110],{"class":38,"line":137},[36,126106,126107],{"class":98},"franka ",[36,126109,176],{"class":163},[36,126111,126112],{"class":98}," scene.add_entity(\n",[36,126114,126115,126118,126120,126122,126125],{"class":38,"line":147},[36,126116,126117],{"class":98},"    gs.morphs.MJCF(",[36,126119,45787],{"class":5667},[36,126121,176],{"class":163},[36,126123,126124],{"class":59},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[36,126126,38480],{"class":98},[36,126128,126129],{"class":38,"line":153},[36,126130,627],{"class":98},[36,126132,126133],{"class":38,"line":191},[36,126134,247],{"emptyLinePlaceholder":246},[36,126136,126137],{"class":38,"line":197},[36,126138,126139],{"class":98},"scene.build()\n",[36,126141,126142],{"class":38,"line":217},[36,126143,247],{"emptyLinePlaceholder":246},[36,126145,126146,126148,126151],{"class":38,"line":223},[36,126147,32380],{"class":163},[36,126149,126150],{"class":55}," on_press",[36,126152,126153],{"class":98},"(key):\n",[36,126155,126156,126159],{"class":38,"line":243},[36,126157,126158],{"class":163},"    try",[36,126160,4190],{"class":98},[36,126162,126163,126165,126168,126170,126173],{"class":38,"line":250},[36,126164,2955],{"class":163},[36,126166,126167],{"class":98}," key.char ",[36,126169,3400],{"class":163},[36,126171,126172],{"class":59}," 'q'",[36,126174,4190],{"class":98},[36,126176,126177,126179],{"class":38,"line":256},[36,126178,16171],{"class":163},[36,126180,126181],{"class":109}," False\n",[36,126183,126184,126187,126190],{"class":38,"line":273},[36,126185,126186],{"class":163},"    except",[36,126188,126189],{"class":109}," AttributeError",[36,126191,4190],{"class":98},[36,126193,126194],{"class":38,"line":278},[36,126195,126196],{"class":163},"        pass\n",[36,126198,126199],{"class":38,"line":284},[36,126200,247],{"emptyLinePlaceholder":246},[36,126202,126203,126206,126208,126211,126214,126216],{"class":38,"line":315},[36,126204,126205],{"class":98},"listener ",[36,126207,176],{"class":163},[36,126209,126210],{"class":98}," keyboard.Listener(",[36,126212,126213],{"class":5667},"on_press",[36,126215,176],{"class":163},[36,126217,126218],{"class":98},"on_press)\n",[36,126220,126221],{"class":38,"line":320},[36,126222,126223],{"class":98},"listener.start()\n",[36,126225,126226],{"class":38,"line":326},[36,126227,247],{"emptyLinePlaceholder":246},[36,126229,126230,126232],{"class":38,"line":343},[36,126231,109094],{"class":163},[36,126233,126234],{"class":98}," listener.running:\n",[36,126236,126237],{"class":38,"line":348},[36,126238,126239],{"class":98},"    scene.step()\n",[14,126241,126242],{},[1941,126243],{"alt":31,"src":126244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[537,126246,126247],{},"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":31,"searchDepth":46,"depth":46,"links":126249},[],{"category":23817},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125854,"description":125859},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126256,"title":126257,"body":126258,"description":542,"extension":543,"meta":126273,"navigation":246,"path":126274,"seo":126275,"stem":126276,"__hash__":126277},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126259,"toc":126270},[126260,126263,126267],[10,126261,126257],{"id":126262},"_1-基础知识",[559,126264,126266],{"id":126265},"_11-js的组成","1.1 js的组成",[14,126268,126269],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":31,"searchDepth":46,"depth":46,"links":126271},[126272],{"id":126265,"depth":46,"text":126266},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126257,"description":542},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126279,"title":126280,"body":126281,"description":542,"extension":543,"meta":126420,"navigation":246,"path":126421,"seo":126422,"stem":126423,"__hash__":126424},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126282,"toc":126408},[126283,126286,126290,126293,126297,126307,126311,126314,126317,126320,126324,126331,126337,126341,126347,126358,126362,126365,126369,126372,126376,126379,126383,126386,126390,126393,126396,126399,126402,126405],[10,126284,126280],{"id":126285},"_2-vscode必备内容",[559,126287,126289],{"id":126288},"_21-标签分类","2.1 标签分类",[14,126291,126292],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[559,126294,126296],{"id":126295},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,126298,126299,126300,126302,126303,126306],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[33,126301,842],{}," 然后按 ",[33,126304,126305],{},"Tab","，快速自动生成基本结构。",[559,126308,126310],{"id":126309},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,126312,126313],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,126315,126316],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,126318,126319],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[559,126321,126323],{"id":126322},"_24-视图缩放","2.4 视图缩放",[14,126325,126326,126327,126330],{},"缩放视图 ",[33,126328,126329],{},"ctrl+"," 可实现代码增大。",[14,126332,126333,126336],{},[33,126334,126335],{},"ctrl-"," 可实现代码减小。",[559,126338,126340],{"id":126339},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,126342,126343,126344,28819],{},"VSCode 新建文件快捷键为 ",[33,126345,126346],{},"ctrl+N",[14,126348,126349,126350,126353,126354,126357],{},"保存快捷键为 ",[33,126351,126352],{},"ctrl+S","，将文本保存为 ",[33,126355,126356],{},".html"," 文件。",[559,126359,126361],{"id":126360},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,126363,126364],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[559,126366,126368],{"id":126367},"_27-vscode-icons","2.7 vscode-icons",[14,126370,126371],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[559,126373,126375],{"id":126374},"_28-easy-less","2.8 Easy LESS",[14,126377,126378],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[559,126380,126382],{"id":126381},"_29-会了吧插件","2.9 会了吧插件",[14,126384,126385],{},"会了吧插件可以展示代码中英语单词的意思。",[559,126387,126389],{"id":126388},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,126391,126392],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,126394,126395],{},"②选定多个相同的单词:ctrl+D",[14,126397,126398],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,126400,126401],{},"④全局替换某些单词:ctrl+h",[14,126403,126404],{},"⑤快速定位到某一行:ctrl+g",[14,126406,126407],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":31,"searchDepth":46,"depth":46,"links":126409},[126410,126411,126412,126413,126414,126415,126416,126417,126418,126419],{"id":126288,"depth":46,"text":126289},{"id":126295,"depth":46,"text":126296},{"id":126309,"depth":46,"text":126310},{"id":126322,"depth":46,"text":126323},{"id":126339,"depth":46,"text":126340},{"id":126360,"depth":46,"text":126361},{"id":126367,"depth":46,"text":126368},{"id":126374,"depth":46,"text":126375},{"id":126381,"depth":46,"text":126382},{"id":126388,"depth":46,"text":126389},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126280,"description":542},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126426,"title":126427,"body":126428,"description":542,"extension":543,"meta":126587,"navigation":246,"path":126588,"seo":126589,"stem":126590,"__hash__":126591},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126429,"toc":126579},[126430,126433,126437,126447,126453,126459,126463,126472,126476,126481,126484,126487,126491,126494,126504,126513,126522,126531,126541,126548,126553,126558,126571],[10,126431,126427],{"id":126432},"_3-html文本与容器标签",[559,126434,126436],{"id":126435},"_31-标题标签","3.1 标题标签",[14,126438,126439,126442,126443,126446],{},[33,126440,126441],{},"\u003Ch1>","我是一级标签",[33,126444,126445],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,126448,126449,126442,126451],{},[33,126450,126441],{},[33,126452,126445],{},[14,126454,123709,126455,126458],{},[33,126456,126457],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[559,126460,126462],{"id":126461},"_32-段落标签","3.2 段落标签",[14,126464,126465,126468,126469],{},[33,126466,126467],{},"\u003Cp>","....",[33,126470,126471],{},"\u003C\u002Fp>",[559,126473,126475],{"id":126474},"_33-换行标签","3.3 换行标签",[14,126477,126478],{},[33,126479,126480],{},"\u003Cbr \u002F>",[14,126482,126483],{},"具有强制换行的作用",[14,126485,126486],{},"单标签",[559,126488,126490],{"id":126489},"_34-文本格式化标签","3.4 文本格式化标签",[14,126492,126493],{},"提供粗体、斜体和下划线等效果",[14,126495,126496,126497,82971,126500,126503],{},"加粗：",[33,126498,126499],{},"\u003Cstrong>...\u003C\u002Fstrong>",[33,126501,126502],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,126505,126506,126507,82971,126510,126503],{},"斜体：",[33,126508,126509],{},"\u003Cem>...\u003C\u002Fem>",[33,126511,126512],{},"\u003Ci>...\u003C\u002Fi>",[14,126514,126515,126516,82971,126519,126503],{},"删除线：",[33,126517,126518],{},"\u003Cdel>...\u003C\u002Fdel>",[33,126520,126521],{},"\u003Cs>...\u003C\u002Fs>",[14,126523,126524,126525,82971,126528,126503],{},"下划线：",[33,126526,126527],{},"\u003Cins>...\u003C\u002Fins>",[33,126529,126530],{},"\u003Cu>...\u003C\u002Fu>",[559,126532,126534,126535,18849,126538,103124],{"id":126533},"_35-div和span标签","3.5 ",[33,126536,126537],{},"\u003Cdiv>",[33,126539,126540],{},"\u003Cspan>",[14,126542,126543,101449,126545,126547],{},[33,126544,126537],{},[33,126546,126540],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,126549,126550],{},[33,126551,126552],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,126554,126555],{},[33,126556,126557],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,126559,126560,126561,126563,126564,126566,126567,126570],{},"两者特点：①",[33,126562,126537],{}," 标签用来布局，但一行通常只放一个 ",[33,126565,126537],{},"。可以理解为一个大盒子，独占一行，在 ",[33,126568,126569],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,126572,77681,126573,126575,126576,126578],{},[33,126574,126540],{}," 标签也可用于布局，一行可以放多个 ",[33,126577,126540],{},"，可理解为小盒子。",{"title":31,"searchDepth":46,"depth":46,"links":126580},[126581,126582,126583,126584,126585],{"id":126435,"depth":46,"text":126436},{"id":126461,"depth":46,"text":126462},{"id":126474,"depth":46,"text":126475},{"id":126489,"depth":46,"text":126490},{"id":126533,"depth":46,"text":126586},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126427,"description":542},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126593,"title":126594,"body":126595,"description":542,"extension":543,"meta":126792,"navigation":246,"path":126793,"seo":126794,"stem":126795,"__hash__":126796},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126596,"toc":126784},[126597,126600,126604,126607,126613,126620,126626,126632,126635,126638,126641,126644,126647,126650,126653,126657,126660,126663,126666,126672,126678,126684,126691,126695,126701,126707,126710,126713,126719,126725,126731,126734,126737,126741,126744,126754,126760,126764,126773,126777,126780],[10,126598,126594],{"id":126599},"_4-html图像与链接",[559,126601,126603],{"id":126602},"_41-图像标签","4.1 图像标签",[14,126605,126606],{},"（1）标签",[14,126608,126609,126612],{},[33,126610,126611],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,126614,126615,126616,126619],{},"src是",[33,126617,126618],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,126621,126622,126623],{},"alt:文本，替换文本。图像不能显示的文字 ",[33,126624,126625],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,126627,126628,126629],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[33,126630,126631],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,126633,126634],{},"width:像素，设置图像的宽度",[14,126636,126637],{},"height:像素，设置图像的高度",[14,126639,126640],{},"border：像素，设置图像的边框粗细",[14,126642,126643],{},"（2）图像标签属性的注意点：",[14,126645,126646],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,126648,126649],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,126651,126652],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[559,126654,126656],{"id":126655},"_42-路径注意要点","4.2 路径注意要点：",[14,126658,126659],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,126661,126662],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,126664,126665],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,126667,126668,126669],{},"①同一级路径：图像文件位于HTML文件同一级，如",[33,126670,126671],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,126673,126674,126675],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[33,126676,126677],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,126679,126680,126681],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[33,126682,126683],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,126685,126686,126687,866],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[20,126688,126689],{"href":126689,"rel":126690},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24],[559,126692,126694],{"id":126693},"_43-超链接标签","4.3 超链接标签",[14,126696,126697,126700],{},[33,126698,126699],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,126702,126703,126704],{},"①语法格式：",[33,126705,126706],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,126708,126709],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,126711,126712],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,126714,126715,126716],{},"③链接分类：外部链接：",[33,126717,126718],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,126720,126721,126722],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[33,126723,126724],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,126726,126727,126728],{},"空链接：如果当时没有确定链接目标时，",[33,126729,126730],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,126732,126733],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,126735,126736],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[559,126738,126740],{"id":126739},"_44-锚点链接","4.4 锚点链接",[14,126742,126743],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,126745,126746,126747,126750,126751],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[33,126748,126749],{},"\u003Ca href=\"#two\">","第二级",[33,126752,126753],{},"\u003C\u002Fa>",[14,126755,126756,126757],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[33,126758,126759],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[559,126761,126763],{"id":126762},"_45-注释标签","4.5 注释标签",[14,126765,126766,126769,126770],{},[33,126767,126768],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[33,126771,126772],{},"ctrl+\u002F",[559,126774,126776],{"id":126775},"_46-特殊字符","4.6 特殊字符",[14,126778,126779],{},"可以实现添加多个空格",[1941,126781],{"style":126782,"src":126783},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":31,"searchDepth":46,"depth":46,"links":126785},[126786,126787,126788,126789,126790,126791],{"id":126602,"depth":46,"text":126603},{"id":126655,"depth":46,"text":126656},{"id":126693,"depth":46,"text":126694},{"id":126739,"depth":46,"text":126740},{"id":126762,"depth":46,"text":126763},{"id":126775,"depth":46,"text":126776},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126594,"description":542},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126798,"title":126799,"body":126800,"description":542,"extension":543,"meta":127093,"navigation":246,"path":127094,"seo":127095,"stem":127096,"__hash__":127097},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126801,"toc":127084},[126802,126805,126809,126812,126815,126818,126821,126824,126827,126830,126833,126836,126856,126862,126866,126869,126872,126875,126878,126881,126884,126888,126891,126894,126897,126900,126913,126918,126921,126924,126939,126942,126945,126948,126951,126954,126958,126961,126968,126971,126974,126977,126980,126983,126989,126992,126995,127001,127004,127007,127010,127016,127019,127022,127036,127043,127046,127049,127056,127065,127068,127071,127074,127078,127081],[10,126803,126799],{"id":126804},"_5-html表格列表与表单",[559,126806,126808],{"id":126807},"_51-表格标签","5.1 表格标签",[14,126810,126811],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,126813,126814],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,126816,126817],{},"②表格基本语法：",[1941,126819],{"style":126782,"src":126820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,126822,126823],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1941,126825],{"style":126782,"src":126826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,126828,126829],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1941,126831],{"style":126782,"src":126832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,126834,126835],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,126837,126838,126841,126842,126844,126845,126848,126849,126851,126852,126855],{},[33,126839,126840],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[33,126843,126840],{},"内部必须拥有",[33,126846,126847],{},"\u003Ctr>","标签，一般位于第一行，",[33,126850,126840],{},"比",[33,126853,126854],{},"\u003Cth>","范围广",[14,126857,126858,126861],{},[33,126859,126860],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[559,126863,126865],{"id":126864},"_52-合并单元格","5.2 合并单元格",[14,126867,126868],{},"（1）合并单元格方式：",[14,126870,126871],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,126873,126874],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,126876,126877],{},"（2）目标单元格：",[14,126879,126880],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,126882,126883],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[559,126885,126887],{"id":126886},"_53-列表标签","5.3 列表标签",[14,126889,126890],{},"（1）分类：无序列表、有序列表、自定义列表",[14,126892,126893],{},"①无序列表：",[1941,126895],{"style":126782,"src":126896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,126898,126899],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,126901,126902,126905,126906,126909,126910,126912],{},[33,126903,126904],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[33,126907,126908],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[33,126911,126904],{},"中输入其他标签或文字是不对的",[14,126914,126915,126917],{},[33,126916,126908],{},"之间相当于一个容器，可以容纳所有元素",[14,126919,126920],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,126922,126923],{},"在css中去除前边的小圆点采用如下代码:",[26,126925,126929],{"className":126926,"code":126927,"language":126928,"meta":31,"style":31},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[33,126930,126931],{"__ignoreMap":31},[36,126932,126933,126936],{"class":38,"line":39},[36,126934,126935],{"class":51733},"list-style",[36,126937,126938],{"class":98},": none;\n",[14,126940,126941],{},"②有序列表：",[1941,126943],{"style":126782,"src":126944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,126946,126947],{},"③自定义列表：",[1941,126949],{"style":126782,"src":126950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1941,126952],{"style":126782,"src":126953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[559,126955,126957],{"id":126956},"_54-表单标签","5.4 表单标签",[14,126959,126960],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,126962,126963,126964,126967],{},"（1）表单域：包含单元素的区域，",[33,126965,126966],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1941,126969],{"style":126782,"src":126970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,126972,126973],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,126975,126976],{},"表单元素提交必须有name属性",[14,126978,126979],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,126981,126982],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,126984,77658,126985,126988],{},[33,126986,126987],{},"\u003Cinput>","输入表单元素",[1941,126990],{"style":126782,"src":126991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1941,126993],{"style":126782,"src":126994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,126996,126997,126998],{},"单选按钮：",[33,126999,127000],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1941,127002],{"style":126782,"src":127003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,127005,127006],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1941,127008],{"style":126782,"src":127009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,127011,127012,127015],{},[765,127013,127014],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,127017,127018],{},"②select下拉表单元素：可以节约页面控件",[1941,127020],{"style":126782,"src":127021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,127023,127024,14234,127026,127029,127030,127032,127033,127035],{},[765,127025,650],{},[33,127027,127028],{},"\u003Cselect>","中至少包含一对",[33,127031,103145],{},"；在",[33,127034,103145],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,127037,127038,127039,127042],{},"③",[33,127040,127041],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1941,127044],{"style":126782,"src":127045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,127047,127048],{},"3行20列",[559,127050,127052,127053,103124],{"id":127051},"_55-lable标签","5.5 ",[33,127054,127055],{},"\u003Clable>",[14,127057,127058,127059,127061,127062,127064],{},"它不是表单标签，但常常与表单标签搭配使用，",[33,127060,127055],{},"标签用于绑定一个表单标签，当点击",[33,127063,127055],{},"标签内的文本",[14,127066,127067],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1941,127069],{"style":126782,"src":127070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1941,127072],{"style":126782,"src":127073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[559,127075,127077],{"id":127076},"_56-实例","5.6 实例",[1941,127079],{"style":126782,"src":127080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[537,127082,127083],{},"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":31,"searchDepth":46,"depth":46,"links":127085},[127086,127087,127088,127089,127090,127092],{"id":126807,"depth":46,"text":126808},{"id":126864,"depth":46,"text":126865},{"id":126886,"depth":46,"text":126887},{"id":126956,"depth":46,"text":126957},{"id":127051,"depth":46,"text":127091},"5.5 \u003Clable>标签",{"id":127076,"depth":46,"text":127077},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126799,"description":542},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":127099,"title":127100,"body":127101,"description":542,"extension":543,"meta":127650,"navigation":246,"path":127651,"seo":127652,"stem":127653,"__hash__":127654},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":127102,"toc":127625},[127103,127106,127110,127113,127116,127120,127123,127126,127129,127132,127135,127138,127141,127145,127148,127152,127155,127158,127161,127165,127168,127171,127174,127180,127183,127186,127189,127192,127195,127198,127201,127234,127238,127241,127244,127247,127251,127254,127257,127260,127263,127266,127270,127273,127276,127279,127283,127286,127290,127293,127297,127300,127305,127309,127312,127316,127319,127322,127325,127328,127355,127358,127362,127365,127368,127373,127376,127379,127383,127386,127391,127394,127397,127400,127404,127407,127410,127413,127417,127420,127423,127426,127430,127434,127437,127477,127480,127484,127491,127494,127498,127501,127547,127551,127554,127557,127560,127588,127592,127595,127622],[10,127104,127100],{"id":127105},"_6-css语法与文本样式",[559,127107,127109],{"id":127108},"_61-css语法规范","6.1 css语法规范",[14,127111,127112],{},"由两部分组成，选择器及一条或多条声明",[1941,127114],{"style":126782,"src":127115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,127117,127118],{},[765,127119,650],{},[14,127121,127122],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,127124,127125],{},"②属性与属性值以“键值对”的形式出现",[14,127127,127128],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,127130,127131],{},"④属性和属性值之间用英文“;”分开",[1941,127133],{"style":126782,"src":127134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1941,127136],{"style":126782,"src":127137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1941,127139],{"style":126782,"src":127140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[559,127142,127144],{"id":127143},"_62-css选择器","6.2 css选择器",[14,127146,127147],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[588,127149,127151],{"id":127150},"_621-标签选择器","6.2.1 标签选择器",[14,127153,127154],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,127156,127157],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1941,127159],{"style":126782,"src":127160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[588,127162,127164],{"id":127163},"_622-类选择器","6.2.2 类选择器",[14,127166,127167],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,127169,127170],{},"②样例",[1941,127172],{"style":126782,"src":127173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,127175,127176,127177,127179],{},"③ ",[765,127178,127014],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,127181,127182],{},"可以理解为给这个标签起了个名字，来表示；",[14,127184,127185],{},"长名称或词组可以使用横线来为选择器命名；",[14,127187,127188],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,127190,127191],{},"命名要有意义；",[1941,127193],{"style":126782,"src":127194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,127196,127197],{},"类选择器也可以指定特殊的元素p.center{}",[14,127199,127200],{},"p.center和.center都对",[26,127202,127204],{"className":126926,"code":127203,"language":126928,"meta":31,"style":31},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[33,127205,127206,127211,127220,127230],{"__ignoreMap":31},[36,127207,127208],{"class":38,"line":39},[36,127209,127210],{"class":42},"\u002F* 类选择器指定特殊元素 *\u002F\n",[36,127212,127213,127215,127218],{"class":38,"line":46},[36,127214,14],{"class":51733},[36,127216,127217],{"class":55},".center",[36,127219,16011],{"class":98},[36,127221,127222,127224,127226,127228],{"class":38,"line":52},[36,127223,70958],{"class":109},[36,127225,51869],{"class":98},[36,127227,52024],{"class":109},[36,127229,1772],{"class":98},[36,127231,127232],{"class":38,"line":66},[36,127233,2044],{"class":98},[588,127235,127237],{"id":127236},"_623-多类名使用","6.2.3 多类名使用",[14,127239,127240],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1941,127242],{"style":126782,"src":127243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,127245,127246],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[588,127248,127250],{"id":127249},"_624-id选择器","6.2.4 id选择器",[14,127252,127253],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,127255,127256],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1941,127258],{"style":126782,"src":127259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,127261,127262],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,127264,127265],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[588,127267,127269],{"id":127268},"_625-通配符选择器","6.2.5 通配符选择器",[14,127271,127272],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,127274,127275],{},"* {",[14,127277,127278],{},"color=\"red\"}",[588,127280,127282],{"id":127281},"_626-总结","6.2.6 总结",[1941,127284],{"style":126782,"src":127285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[559,127287,127289],{"id":127288},"_63-css字体属性","6.3 css字体属性",[14,127291,127292],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[588,127294,127296],{"id":127295},"_631-字体系列","6.3.1 字体系列",[14,127298,127299],{},"font-family: '宋体';",[14,127301,127302,127304],{},[765,127303,650],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[588,127306,127308],{"id":127307},"_632-字体大小","6.3.2 字体大小",[14,127310,127311],{},"font-size: 20px",[14,127313,127314,26907],{},[765,127315,127014],{},[14,127317,127318],{},"①px（像素）大小是网页的最常用单位",[14,127320,127321],{},"②谷歌浏览器默认为16px",[14,127323,127324],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,127326,127327],{},"④可以给body指定整个页面的大小：会自动引用",[26,127329,127331],{"className":126926,"code":127330,"language":126928,"meta":31,"style":31},"body {\n  font-size: 16px;\n}\n",[33,127332,127333,127339,127351],{"__ignoreMap":31},[36,127334,127335,127337],{"class":38,"line":39},[36,127336,52232],{"class":51733},[36,127338,16011],{"class":98},[36,127340,127341,127343,127345,127347,127349],{"class":38,"line":46},[36,127342,71058],{"class":109},[36,127344,51869],{"class":98},[36,127346,1215],{"class":109},[36,127348,51924],{"class":163},[36,127350,1772],{"class":98},[36,127352,127353],{"class":38,"line":52},[36,127354,2044],{"class":98},[14,127356,127357],{},"⑤标题标签比较特殊，需要单独指定大小",[588,127359,127361],{"id":127360},"_633-字体粗细","6.3.3 字体粗细",[14,127363,127364],{},"font-weight: bold;",[14,127366,127367],{},"font-weight: 100；",[14,127369,127370,127372],{},[765,127371,650],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,127374,127375],{},"font-weight= 400;",[14,127377,127378],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[588,127380,127382],{"id":127381},"_634-文字样式","6.3.4 文字样式",[14,127384,127385],{},"font-style: normal；",[14,127387,127388,26907],{},[765,127389,127390],{},"属性值",[14,127392,127393],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,127395,127396],{},"②italic：浏览器会显示斜体的字体样式",[1941,127398],{"style":126782,"src":127399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[588,127401,127403],{"id":127402},"_635-字体符合属性","6.3.5 字体符合属性",[1941,127405],{"style":126782,"src":127406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1941,127408],{"style":126782,"src":127409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,127411,127412],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,127414,127415,26907],{},[765,127416,127014],{},[14,127418,127419],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,127421,127422],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,127424,127425],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[559,127427,127429],{"id":127428},"_64-css-test文本属性","6.4 css test文本属性",[588,127431,127433],{"id":127432},"_641-文本颜色","6.4.1 文本颜色",[14,127435,127436],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[26,127438,127440],{"className":126926,"code":127439,"language":126928,"meta":31,"style":31},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[33,127441,127442,127447,127453,127463,127468,127473],{"__ignoreMap":31},[36,127443,127444],{"class":38,"line":39},[36,127445,127446],{"class":42},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[36,127448,127449,127451],{"class":38,"line":46},[36,127450,14],{"class":51733},[36,127452,16011],{"class":98},[36,127454,127455,127457,127459,127461],{"class":38,"line":52},[36,127456,71337],{"class":109},[36,127458,51869],{"class":98},[36,127460,57853],{"class":109},[36,127462,1772],{"class":98},[36,127464,127465],{"class":38,"line":66},[36,127466,127467],{"class":42},"  \u002F* color: #ff0000; *\u002F\n",[36,127469,127470],{"class":38,"line":72},[36,127471,127472],{"class":42},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[36,127474,127475],{"class":38,"line":82},[36,127476,2044],{"class":98},[1941,127478],{"style":126782,"src":127479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[588,127481,127483],{"id":127482},"_642-对齐文本","6.4.2 对齐文本",[14,127485,127486,127487,127490],{},"text-align属于用于设置元素内文本内容的 ",[765,127488,127489],{},"水平对齐"," 方式",[14,127492,127493],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[588,127495,127497],{"id":127496},"_643-装饰文本","6.4.3 装饰文本",[14,127499,127500],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[26,127502,127504],{"className":126926,"code":127503,"language":126928,"meta":31,"style":31},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[33,127505,127506,127512,127522,127526,127532,127543],{"__ignoreMap":31},[36,127507,127508,127510],{"class":38,"line":39},[36,127509,20],{"class":51733},[36,127511,16011],{"class":98},[36,127513,127514,127516,127518,127520],{"class":38,"line":46},[36,127515,70934],{"class":109},[36,127517,51869],{"class":98},[36,127519,55169],{"class":109},[36,127521,1772],{"class":98},[36,127523,127524],{"class":38,"line":52},[36,127525,2044],{"class":98},[36,127527,127528,127530],{"class":38,"line":66},[36,127529,14],{"class":51733},[36,127531,16011],{"class":98},[36,127533,127534,127536,127538,127541],{"class":38,"line":72},[36,127535,70934],{"class":109},[36,127537,51869],{"class":98},[36,127539,127540],{"class":109},"underline",[36,127542,1772],{"class":98},[36,127544,127545],{"class":38,"line":82},[36,127546,2044],{"class":98},[588,127548,127550],{"id":127549},"_644-文本缩进","6.4.4 文本缩进",[14,127552,127553],{},"实现文本的第一行首行缩进自己指定的距离",[14,127555,127556],{},"20px往右边走；-20px往左边走",[14,127558,127559],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[26,127561,127563],{"className":126926,"code":127562,"language":126928,"meta":31,"style":31},"p {\n  text-indent: 2em;\n}\n",[33,127564,127565,127571,127584],{"__ignoreMap":31},[36,127566,127567,127569],{"class":38,"line":39},[36,127568,14],{"class":51733},[36,127570,16011],{"class":98},[36,127572,127573,127576,127578,127580,127582],{"class":38,"line":46},[36,127574,127575],{"class":109},"  text-indent",[36,127577,51869],{"class":98},[36,127579,694],{"class":109},[36,127581,23992],{"class":163},[36,127583,1772],{"class":98},[36,127585,127586],{"class":38,"line":52},[36,127587,2044],{"class":98},[588,127589,127591],{"id":127590},"_645-行间距","6.4.5 行间距",[14,127593,127594],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[26,127596,127598],{"className":126926,"code":127597,"language":126928,"meta":31,"style":31},"p {\n  line-height: 1.6;\n}\n",[33,127599,127600,127606,127618],{"__ignoreMap":31},[36,127601,127602,127604],{"class":38,"line":39},[36,127603,14],{"class":51733},[36,127605,16011],{"class":98},[36,127607,127608,127611,127613,127616],{"class":38,"line":46},[36,127609,127610],{"class":109},"  line-height",[36,127612,51869],{"class":98},[36,127614,127615],{"class":109},"1.6",[36,127617,1772],{"class":98},[36,127619,127620],{"class":38,"line":52},[36,127621,2044],{"class":98},[537,127623,127624],{},"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":31,"searchDepth":46,"depth":46,"links":127626},[127627,127628,127636,127643],{"id":127108,"depth":46,"text":127109},{"id":127143,"depth":46,"text":127144,"children":127629},[127630,127631,127632,127633,127634,127635],{"id":127150,"depth":52,"text":127151},{"id":127163,"depth":52,"text":127164},{"id":127236,"depth":52,"text":127237},{"id":127249,"depth":52,"text":127250},{"id":127268,"depth":52,"text":127269},{"id":127281,"depth":52,"text":127282},{"id":127288,"depth":46,"text":127289,"children":127637},[127638,127639,127640,127641,127642],{"id":127295,"depth":52,"text":127296},{"id":127307,"depth":52,"text":127308},{"id":127360,"depth":52,"text":127361},{"id":127381,"depth":52,"text":127382},{"id":127402,"depth":52,"text":127403},{"id":127428,"depth":46,"text":127429,"children":127644},[127645,127646,127647,127648,127649],{"id":127432,"depth":52,"text":127433},{"id":127482,"depth":52,"text":127483},{"id":127496,"depth":52,"text":127497},{"id":127549,"depth":52,"text":127550},{"id":127590,"depth":52,"text":127591},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":127100,"description":542},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127656,"title":127657,"body":127658,"description":542,"extension":543,"meta":128307,"navigation":246,"path":128308,"seo":128309,"stem":128310,"__hash__":128311},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127659,"toc":128288},[127660,127663,127667,127671,127731,127735,127745,127748,127751,127755,127780,127784,127787,127790,127793,127796,127799,127803,127806,127809,127851,127854,127880,127886,127889,127893,127897,127903,127906,127909,127912,127915,127918,127921,127966,127970,127973,127976,127980,127984,128013,128016,128021,128024,128027,128030,128033,128037,128041,128044,128046,128049,128053,128056,128060,128063,128066,128069,128073,128077,128083,128093,128096,128099,128102,128105,128108,128231,128239,128247,128285],[10,127661,127657],{"id":127662},"_7-css引入方式与选择器进阶",[559,127664,127666],{"id":127665},"_71-css引入方式","7.1 css引入方式",[588,127668,127670],{"id":127669},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[26,127672,127676],{"className":127673,"code":127674,"language":127675,"meta":31,"style":31},"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",[33,127677,127678,127686,127693,127705,127718,127723],{"__ignoreMap":31},[36,127679,127680,127682,127684],{"class":38,"line":39},[36,127681,179],{"class":98},[36,127683,537],{"class":51733},[36,127685,188],{"class":98},[36,127687,127688,127691],{"class":38,"line":46},[36,127689,127690],{"class":51733},"  h1",[36,127692,16011],{"class":98},[36,127694,127695,127698,127700,127703],{"class":38,"line":52},[36,127696,127697],{"class":109},"    color",[36,127699,51869],{"class":98},[36,127701,127702],{"class":109},"blue",[36,127704,1772],{"class":98},[36,127706,127707,127710,127712,127714,127716],{"class":38,"line":66},[36,127708,127709],{"class":109},"    font-size",[36,127711,51869],{"class":98},[36,127713,1413],{"class":109},[36,127715,51924],{"class":163},[36,127717,1772],{"class":98},[36,127719,127720],{"class":38,"line":72},[36,127721,127722],{"class":98},"  }\n",[36,127724,127725,127727,127729],{"class":38,"line":82},[36,127726,52217],{"class":98},[36,127728,537],{"class":51733},[36,127730,188],{"class":98},[14,127732,127733,26907],{},[765,127734,127014],{},[14,127736,77658,127737,127740,127741,127744],{},[33,127738,127739],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[33,127742,127743],{},"\u003Chead>","标签中",[14,127746,127747],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,127749,127750],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[588,127752,127754],{"id":127753},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[26,127756,127758],{"className":127673,"code":127757,"language":127675,"meta":31,"style":31},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[33,127759,127760],{"__ignoreMap":31},[36,127761,127762,127764,127766,127768,127770,127773,127776,127778],{"class":38,"line":39},[36,127763,179],{"class":98},[36,127765,14],{"class":51733},[36,127767,63058],{"class":55},[36,127769,176],{"class":98},[36,127771,127772],{"class":59},"\"color: red; font-size: 16px;\"",[36,127774,127775],{"class":98},">这是一个段落\u003C\u002F",[36,127777,14],{"class":51733},[36,127779,188],{"class":98},[14,127781,127782,26907],{},[765,127783,127014],{},[14,127785,127786],{},"①style其实就是标签的属性",[14,127788,127789],{},"②在双引号中间，写法要符合css规范",[14,127791,127792],{},"③可以控制当前的标签设置样式",[14,127794,127795],{},"④书写繁琐，简单时才用",[14,127797,127798],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[588,127800,127802],{"id":127801},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,127804,127805],{},"使用最多，单独建一个css文件，然后html引用",[14,127807,127808],{},"①css文件部分： style.css",[26,127810,127812],{"className":126926,"code":127811,"language":126928,"meta":31,"style":31},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[33,127813,127814,127819,127825,127835,127847],{"__ignoreMap":31},[36,127815,127816],{"class":38,"line":39},[36,127817,127818],{"class":42},"\u002F* style.css *\u002F\n",[36,127820,127821,127823],{"class":38,"line":46},[36,127822,10],{"class":51733},[36,127824,16011],{"class":98},[36,127826,127827,127829,127831,127833],{"class":38,"line":52},[36,127828,71337],{"class":109},[36,127830,51869],{"class":98},[36,127832,127702],{"class":109},[36,127834,1772],{"class":98},[36,127836,127837,127839,127841,127843,127845],{"class":38,"line":66},[36,127838,71058],{"class":109},[36,127840,51869],{"class":98},[36,127842,1413],{"class":109},[36,127844,51924],{"class":163},[36,127846,1772],{"class":98},[36,127848,127849],{"class":38,"line":72},[36,127850,2044],{"class":98},[14,127852,127853],{},"②html部分",[26,127855,127857],{"className":127673,"code":127856,"language":127675,"meta":31,"style":31},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[33,127858,127859],{"__ignoreMap":31},[36,127860,127861,127863,127865,127867,127869,127871,127873,127875,127878],{"class":38,"line":39},[36,127862,179],{"class":98},[36,127864,69437],{"class":51733},[36,127866,69440],{"class":55},[36,127868,176],{"class":98},[36,127870,69445],{"class":59},[36,127872,61489],{"class":55},[36,127874,176],{"class":98},[36,127876,127877],{"class":59},"\"style.css\"",[36,127879,188],{"class":98},[14,127881,127882,127885],{},[33,127883,127884],{},"\u003Chr>","水平线标签（但是不常用！）",[14,127887,127888],{},"ctrl+0回到页面原来大小",[559,127890,127892],{"id":127891},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[588,127894,127896],{"id":127895},"_721-快速生成html","7.2.1 快速生成html",[14,127898,127899,127900],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[33,127901,127902],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,127904,127905],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,127907,127908],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,127910,127911],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,127913,127914],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,127916,127917],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,127919,127920],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[26,127922,127924],{"className":127673,"code":127923,"language":127675,"meta":31,"style":31},"\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",[33,127925,127926,127931,127936,127941,127946,127951,127956,127961],{"__ignoreMap":31},[36,127927,127928],{"class":38,"line":39},[36,127929,127930],{"class":42},"\u003C!-- Emmet 语法示例 -->\n",[36,127932,127933],{"class":38,"line":46},[36,127934,127935],{"class":42},"\u003C!-- div*3        → 生成3个div -->\n",[36,127937,127938],{"class":38,"line":52},[36,127939,127940],{"class":42},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[36,127942,127943],{"class":38,"line":66},[36,127944,127945],{"class":42},"\u003C!-- div+p        → 兄弟div和p -->\n",[36,127947,127948],{"class":38,"line":72},[36,127949,127950],{"class":42},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[36,127952,127953],{"class":38,"line":82},[36,127954,127955],{"class":42},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[36,127957,127958],{"class":38,"line":88},[36,127959,127960],{"class":42},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[36,127962,127963],{"class":38,"line":113},[36,127964,127965],{"class":42},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[588,127967,127969],{"id":127968},"_722-快速生成css","7.2.2 快速生成css",[14,127971,127972],{},"简写开头",[14,127974,127975],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[559,127977,127979],{"id":127978},"_73-css复合选择器","7.3 css复合选择器",[588,127981,127983],{"id":127982},"_731-后代选择器","7.3.1 后代选择器",[26,127985,127987],{"className":126926,"code":127986,"language":126928,"meta":31,"style":31},".parent .child {\n  color: blue;\n}\n",[33,127988,127989,127999,128009],{"__ignoreMap":31},[36,127990,127991,127994,127997],{"class":38,"line":39},[36,127992,127993],{"class":55},".parent",[36,127995,127996],{"class":55}," .child",[36,127998,16011],{"class":98},[36,128000,128001,128003,128005,128007],{"class":38,"line":46},[36,128002,71337],{"class":109},[36,128004,51869],{"class":98},[36,128006,127702],{"class":109},[36,128008,1772],{"class":98},[36,128010,128011],{"class":38,"line":52},[36,128012,2044],{"class":98},[14,128014,128015],{},"元素1 元素2 {样式声明}",[14,128017,128018],{},[765,128019,128020],{},"注意点:",[14,128022,128023],{},"①元素1和元素2中间用空格隔开",[14,128025,128026],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,128028,128029],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,128031,128032],{},"④元素1和元素2可以是任意基础选择器",[588,128034,128036],{"id":128035},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,128038,128039],{},[765,128040,128020],{},[14,128042,128043],{},"①元素1和元素2中间用大于号隔开",[14,128045,128026],{},[14,128047,128048],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[588,128050,128052],{"id":128051},"_733-并集选择器","7.3.3 并集选择器",[14,128054,128055],{},"元素1，元素2 {样式声明}",[14,128057,128058],{},[765,128059,128020],{},[14,128061,128062],{},"①元素1和元素2中间用逗号隔开",[14,128064,128065],{},"②逗号可以理解为和的意思",[14,128067,128068],{},"③并集选择器通常用于集体声明",[588,128070,128072],{"id":128071},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,128074,128075],{},[765,128076,128020],{},[14,128078,128079,128080,128082],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69437,128081],{},"－:visited－:hover－:active。",[14,128084,128085,128086,128089,128090,26177],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[128087,128088],"hover",{}," 、 ",[128091,128092],"first-child",{},[14,128094,128095],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,128097,128098],{},"link对没访问的进行设置",[14,128100,128101],{},"vistied对已访问的进行改变",[14,128103,128104],{},"hover鼠标经过就会变",[14,128106,128107],{},"active常按(点)就会变",[26,128109,128111],{"className":126926,"code":128110,"language":126928,"meta":31,"style":31},"\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",[33,128112,128113,128118,128127,128137,128147,128151,128160,128171,128175,128183,128193,128203,128207,128216,128227],{"__ignoreMap":31},[36,128114,128115],{"class":38,"line":39},[36,128116,128117],{"class":42},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[36,128119,128120,128122,128125],{"class":38,"line":46},[36,128121,20],{"class":51733},[36,128123,128124],{"class":55},":link",[36,128126,16011],{"class":98},[36,128128,128129,128131,128133,128135],{"class":38,"line":52},[36,128130,71337],{"class":109},[36,128132,51869],{"class":98},[36,128134,62801],{"class":109},[36,128136,1772],{"class":98},[36,128138,128139,128141,128143,128145],{"class":38,"line":66},[36,128140,70934],{"class":109},[36,128142,51869],{"class":98},[36,128144,55169],{"class":109},[36,128146,1772],{"class":98},[36,128148,128149],{"class":38,"line":72},[36,128150,2044],{"class":98},[36,128152,128153,128155,128158],{"class":38,"line":82},[36,128154,20],{"class":51733},[36,128156,128157],{"class":55},":visited",[36,128159,16011],{"class":98},[36,128161,128162,128164,128166,128169],{"class":38,"line":88},[36,128163,71337],{"class":109},[36,128165,51869],{"class":98},[36,128167,128168],{"class":109},"purple",[36,128170,1772],{"class":98},[36,128172,128173],{"class":38,"line":113},[36,128174,2044],{"class":98},[36,128176,128177,128179,128181],{"class":38,"line":119},[36,128178,20],{"class":51733},[36,128180,61372],{"class":55},[36,128182,16011],{"class":98},[36,128184,128185,128187,128189,128191],{"class":38,"line":131},[36,128186,71337],{"class":109},[36,128188,51869],{"class":98},[36,128190,55321],{"class":109},[36,128192,1772],{"class":98},[36,128194,128195,128197,128199,128201],{"class":38,"line":137},[36,128196,70934],{"class":109},[36,128198,51869],{"class":98},[36,128200,127540],{"class":109},[36,128202,1772],{"class":98},[36,128204,128205],{"class":38,"line":147},[36,128206,2044],{"class":98},[36,128208,128209,128211,128214],{"class":38,"line":153},[36,128210,20],{"class":51733},[36,128212,128213],{"class":55},":active",[36,128215,16011],{"class":98},[36,128217,128218,128220,128222,128225],{"class":38,"line":191},[36,128219,71337],{"class":109},[36,128221,51869],{"class":98},[36,128223,128224],{"class":109},"green",[36,128226,1772],{"class":98},[36,128228,128229],{"class":38,"line":197},[36,128230,2044],{"class":98},[588,128232,128234,128235,128238],{"id":128233},"_735-伪类选择器","7.3.5 ",[128236,128237],"focus",{},"伪类选择器",[14,128240,128241,128243,128244,128246],{},[128236,128242],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[33,128245,126987],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[26,128248,128250],{"className":126926,"code":128249,"language":126928,"meta":31,"style":31},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[33,128251,128252,128260,128271,128281],{"__ignoreMap":31},[36,128253,128254,128256,128258],{"class":38,"line":39},[36,128255,54253],{"class":51733},[36,128257,62332],{"class":55},[36,128259,16011],{"class":98},[36,128261,128262,128265,128267,128269],{"class":38,"line":46},[36,128263,128264],{"class":109},"  border-color",[36,128266,51869],{"class":98},[36,128268,55321],{"class":109},[36,128270,1772],{"class":98},[36,128272,128273,128275,128277,128279],{"class":38,"line":52},[36,128274,71230],{"class":109},[36,128276,51869],{"class":98},[36,128278,55169],{"class":109},[36,128280,1772],{"class":98},[36,128282,128283],{"class":38,"line":66},[36,128284,2044],{"class":98},[537,128286,128287],{},"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":31,"searchDepth":46,"depth":46,"links":128289},[128290,128295,128299],{"id":127665,"depth":46,"text":127666,"children":128291},[128292,128293,128294],{"id":127669,"depth":52,"text":127670},{"id":127753,"depth":52,"text":127754},{"id":127801,"depth":52,"text":127802},{"id":127891,"depth":46,"text":127892,"children":128296},[128297,128298],{"id":127895,"depth":52,"text":127896},{"id":127968,"depth":52,"text":127969},{"id":127978,"depth":46,"text":127979,"children":128300},[128301,128302,128303,128304,128305],{"id":127982,"depth":52,"text":127983},{"id":128035,"depth":52,"text":128036},{"id":128051,"depth":52,"text":128052},{"id":128071,"depth":52,"text":128072},{"id":128233,"depth":52,"text":128306},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127657,"description":542},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128313,"title":128314,"body":128315,"description":542,"extension":543,"meta":130238,"navigation":246,"path":130239,"seo":130240,"stem":130241,"__hash__":130242},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128316,"toc":130212},[128317,128320,128324,128333,128337,128363,128368,128371,128374,128377,128380,128384,128387,128397,128405,128409,128444,128449,128452,128455,128458,128461,128465,128468,128477,128481,128494,128499,128502,128505,128508,128512,128515,128519,128522,128577,128580,128611,128614,128668,128672,128675,128841,128964,128967,128970,128973,128976,128980,128983,128987,128990,128993,128997,129000,129031,129058,129086,129089,129093,129119,129162,129166,129260,129263,129290,129293,129296,129299,129302,129305,129308,129311,129314,129317,129321,129378,129405,129409,129457,129461,129502,129504,129507,129510,129513,129516,129520,129612,129615,129618,129621,129625,129748,129949,129953,129957,129960,129963,129966,129970,129973,129976,130001,130004,130007,130010,130013,130016,130020,130028,130090,130093,130151,130154,130157,130160,130163,130166,130169,130172,130209],[10,128318,128314],{"id":128319},"_8-css显示模式与背景特性",[559,128321,128323],{"id":128322},"_81-css元素显示模式","8.1 css元素显示模式",[14,128325,128326,128327,128329,128330,128332],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[33,128328,126537],{},"自己占一行，比如一行可以放多个",[33,128331,126540],{},"，HTML 元素一般分为块元素和行内元素两种类型",[588,128334,128336],{"id":128335},"_811-块元素","8.1.1 块元素",[14,128338,128339,128340,128342,128343,828,128346,828,128348,828,128350,828,128353,828,128356,128359,128360,128362],{},"常见的块元素有",[33,128341,126441],{},"~",[33,128344,128345],{},"\u003Ch6>",[33,128347,126467],{},[33,128349,126537],{},[33,128351,128352],{},"\u003Cul>",[33,128354,128355],{},"\u003Col>",[33,128357,128358],{},"\u003Cli>","等，其中 ",[33,128361,126537],{}," 标签是最典型的块元素",[14,128364,128365],{},[765,128366,128367],{},"块级元素的特点：",[14,128369,128370],{},"① 比较霸道，自己独占一行。",[14,128372,128373],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,128375,128376],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,128378,128379],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,128381,128382],{},[765,128383,650],{},[14,128385,128386],{},"①文字类的元素内不能使用块级元素",[14,128388,77681,128389,128391,128392,128394,128395],{},[33,128390,126467],{}," 标签主要用于存放文字，因此 ",[33,128393,126467],{}," 里面不能放块级元素，特别是不能放",[33,128396,126537],{},[14,128398,128399,128400,128342,128402,128404],{},"⑥同理， ",[33,128401,126441],{},[33,128403,128345],{},"等都是文字类块级标签，里面也不能放其他块级元素",[588,128406,128408],{"id":128407},"_812-行内元素","8.1.2 行内元素",[14,128410,128411,128412,828,128414,828,128417,828,128420,828,128423,828,128426,828,128429,828,128432,828,128435,828,128438,128440,128441,128443],{},"常见的行内元素有 ",[33,128413,126699],{},[33,128415,128416],{},"\u003Cstrong>",[33,128418,128419],{},"\u003Cb>",[33,128421,128422],{},"\u003Cem>",[33,128424,128425],{},"\u003Ci>",[33,128427,128428],{},"\u003Cdel>",[33,128430,128431],{},"\u003Cs>",[33,128433,128434],{},"\u003Cins>",[33,128436,128437],{},"\u003Cu>",[33,128439,126540],{}," 等，其中 ",[33,128442,126540],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,128445,128446],{},[765,128447,128448],{},"特点：",[14,128450,128451],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,128453,128454],{},"② 高、宽直接设置是无效的。",[14,128456,128457],{},"③ 默认宽度就是它本身内容的宽度。",[14,128459,128460],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,128462,128463],{},[765,128464,650],{},[14,128466,128467],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,128469,128470,128471,128473,128474,128476],{},"②特殊情况链接 ",[33,128472,126699],{}," 里面可以放块级元素，但是给 ",[33,128475,126699],{}," 转换一下块级模式最安全",[588,128478,128480],{"id":128479},"_813-行内块元素","8.1.3 行内块元素",[14,128482,128483,128484,828,128487,828,128490,128493],{},"在行内元素中有几个特殊的标签 —— ",[33,128485,128486],{},"\u003Cimg \u002F>",[33,128488,128489],{},"\u003Cinput \u002F>",[33,128491,128492],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,128495,128496],{},[765,128497,128498],{},"行内块元素的特点：",[14,128500,128501],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,128503,128504],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,128506,128507],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[588,128509,128511],{"id":128510},"_814-总结","8.1.4 总结",[1941,128513],{"style":126782,"src":128514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[588,128516,128518],{"id":128517},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,128520,128521],{},"①转换为块元素：display:block;",[26,128523,128525],{"className":126926,"code":128524,"language":126928,"meta":31,"style":31},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[33,128526,128527,128532,128538,128549,128561,128573],{"__ignoreMap":31},[36,128528,128529],{"class":38,"line":39},[36,128530,128531],{"class":42},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[36,128533,128534,128536],{"class":38,"line":46},[36,128535,20],{"class":51733},[36,128537,16011],{"class":98},[36,128539,128540,128543,128545,128547],{"class":38,"line":52},[36,128541,128542],{"class":109},"  display",[36,128544,51869],{"class":98},[36,128546,61301],{"class":109},[36,128548,1772],{"class":98},[36,128550,128551,128553,128555,128557,128559],{"class":38,"line":66},[36,128552,71000],{"class":109},[36,128554,51869],{"class":98},[36,128556,926],{"class":109},[36,128558,51924],{"class":163},[36,128560,1772],{"class":98},[36,128562,128563,128565,128567,128569,128571],{"class":38,"line":72},[36,128564,71220],{"class":109},[36,128566,51869],{"class":98},[36,128568,1015],{"class":109},[36,128570,51924],{"class":163},[36,128572,1772],{"class":98},[36,128574,128575],{"class":38,"line":82},[36,128576,2044],{"class":98},[14,128578,128579],{},"②转换为行内元素：display:inline;",[26,128581,128583],{"className":126926,"code":128582,"language":126928,"meta":31,"style":31},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[33,128584,128585,128590,128596,128607],{"__ignoreMap":31},[36,128586,128587],{"class":38,"line":39},[36,128588,128589],{"class":42},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[36,128591,128592,128594],{"class":38,"line":46},[36,128593,52043],{"class":51733},[36,128595,16011],{"class":98},[36,128597,128598,128600,128602,128605],{"class":38,"line":52},[36,128599,128542],{"class":109},[36,128601,51869],{"class":98},[36,128603,128604],{"class":109},"inline",[36,128606,1772],{"class":98},[36,128608,128609],{"class":38,"line":66},[36,128610,2044],{"class":98},[14,128612,128613],{},"③转换为行内块：display:inline-block;",[26,128615,128617],{"className":126926,"code":128616,"language":126928,"meta":31,"style":31},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[33,128618,128619,128624,128630,128640,128652,128664],{"__ignoreMap":31},[36,128620,128621],{"class":38,"line":39},[36,128622,128623],{"class":42},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[36,128625,128626,128628],{"class":38,"line":46},[36,128627,36],{"class":51733},[36,128629,16011],{"class":98},[36,128631,128632,128634,128636,128638],{"class":38,"line":52},[36,128633,128542],{"class":109},[36,128635,51869],{"class":98},[36,128637,72815],{"class":109},[36,128639,1772],{"class":98},[36,128641,128642,128644,128646,128648,128650],{"class":38,"line":66},[36,128643,71000],{"class":109},[36,128645,51869],{"class":98},[36,128647,1226],{"class":109},[36,128649,51924],{"class":163},[36,128651,1772],{"class":98},[36,128653,128654,128656,128658,128660,128662],{"class":38,"line":72},[36,128655,71220],{"class":109},[36,128657,51869],{"class":98},[36,128659,1563],{"class":109},[36,128661,51924],{"class":163},[36,128663,1772],{"class":98},[36,128665,128666],{"class":38,"line":82},[36,128667,2044],{"class":98},[588,128669,128671],{"id":128670},"_816-小米侧边栏","8.1.6 小米侧边栏",[1941,128673],{"style":126782,"src":128674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[26,128676,128678],{"className":127673,"code":128677,"language":127675,"meta":31,"style":31},"\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",[33,128679,128680,128685,128700,128719,128738,128757,128776,128795,128814,128833],{"__ignoreMap":31},[36,128681,128682],{"class":38,"line":39},[36,128683,128684],{"class":42},"\u003C!-- 小米侧边栏案例 -->\n",[36,128686,128687,128689,128691,128693,128695,128698],{"class":38,"line":46},[36,128688,179],{"class":98},[36,128690,52043],{"class":51733},[36,128692,53918],{"class":55},[36,128694,176],{"class":98},[36,128696,128697],{"class":59},"\"sidebar\"",[36,128699,188],{"class":98},[36,128701,128702,128704,128706,128708,128710,128712,128715,128717],{"class":38,"line":52},[36,128703,52576],{"class":98},[36,128705,20],{"class":51733},[36,128707,61489],{"class":55},[36,128709,176],{"class":98},[36,128711,61494],{"class":59},[36,128713,128714],{"class":98},">手机 电话卡\u003C\u002F",[36,128716,20],{"class":51733},[36,128718,188],{"class":98},[36,128720,128721,128723,128725,128727,128729,128731,128734,128736],{"class":38,"line":66},[36,128722,52576],{"class":98},[36,128724,20],{"class":51733},[36,128726,61489],{"class":55},[36,128728,176],{"class":98},[36,128730,61494],{"class":59},[36,128732,128733],{"class":98},">电视 盒子\u003C\u002F",[36,128735,20],{"class":51733},[36,128737,188],{"class":98},[36,128739,128740,128742,128744,128746,128748,128750,128753,128755],{"class":38,"line":72},[36,128741,52576],{"class":98},[36,128743,20],{"class":51733},[36,128745,61489],{"class":55},[36,128747,176],{"class":98},[36,128749,61494],{"class":59},[36,128751,128752],{"class":98},">笔记本 平板\u003C\u002F",[36,128754,20],{"class":51733},[36,128756,188],{"class":98},[36,128758,128759,128761,128763,128765,128767,128769,128772,128774],{"class":38,"line":82},[36,128760,52576],{"class":98},[36,128762,20],{"class":51733},[36,128764,61489],{"class":55},[36,128766,176],{"class":98},[36,128768,61494],{"class":59},[36,128770,128771],{"class":98},">出行 穿戴\u003C\u002F",[36,128773,20],{"class":51733},[36,128775,188],{"class":98},[36,128777,128778,128780,128782,128784,128786,128788,128791,128793],{"class":38,"line":88},[36,128779,52576],{"class":98},[36,128781,20],{"class":51733},[36,128783,61489],{"class":55},[36,128785,176],{"class":98},[36,128787,61494],{"class":59},[36,128789,128790],{"class":98},">智能 路由器\u003C\u002F",[36,128792,20],{"class":51733},[36,128794,188],{"class":98},[36,128796,128797,128799,128801,128803,128805,128807,128810,128812],{"class":38,"line":113},[36,128798,52576],{"class":98},[36,128800,20],{"class":51733},[36,128802,61489],{"class":55},[36,128804,176],{"class":98},[36,128806,61494],{"class":59},[36,128808,128809],{"class":98},">健康 儿童\u003C\u002F",[36,128811,20],{"class":51733},[36,128813,188],{"class":98},[36,128815,128816,128818,128820,128822,128824,128826,128829,128831],{"class":38,"line":119},[36,128817,52576],{"class":98},[36,128819,20],{"class":51733},[36,128821,61489],{"class":55},[36,128823,176],{"class":98},[36,128825,61494],{"class":59},[36,128827,128828],{"class":98},">耳机 音响\u003C\u002F",[36,128830,20],{"class":51733},[36,128832,188],{"class":98},[36,128834,128835,128837,128839],{"class":38,"line":131},[36,128836,52217],{"class":98},[36,128838,52043],{"class":51733},[36,128840,188],{"class":98},[26,128842,128844],{"className":126926,"code":128843,"language":126928,"meta":31,"style":31},".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",[33,128845,128846,128855,128865,128878,128890,128902,128914,128924,128935,128939,128949,128960],{"__ignoreMap":31},[36,128847,128848,128851,128853],{"class":38,"line":39},[36,128849,128850],{"class":55},".sidebar",[36,128852,1877],{"class":51733},[36,128854,16011],{"class":98},[36,128856,128857,128859,128861,128863],{"class":38,"line":46},[36,128858,128542],{"class":109},[36,128860,51869],{"class":98},[36,128862,61301],{"class":109},[36,128864,1772],{"class":98},[36,128866,128867,128869,128871,128874,128876],{"class":38,"line":52},[36,128868,71000],{"class":109},[36,128870,51869],{"class":98},[36,128872,128873],{"class":109},"234",[36,128875,51924],{"class":163},[36,128877,1772],{"class":98},[36,128879,128880,128882,128884,128886,128888],{"class":38,"line":66},[36,128881,71220],{"class":109},[36,128883,51869],{"class":98},[36,128885,1066],{"class":109},[36,128887,51924],{"class":163},[36,128889,1772],{"class":98},[36,128891,128892,128894,128896,128898,128900],{"class":38,"line":72},[36,128893,127610],{"class":109},[36,128895,51869],{"class":98},[36,128897,1066],{"class":109},[36,128899,51924],{"class":163},[36,128901,1772],{"class":98},[36,128903,128904,128906,128908,128910,128912],{"class":38,"line":82},[36,128905,71255],{"class":109},[36,128907,51869],{"class":98},[36,128909,1563],{"class":109},[36,128911,51924],{"class":163},[36,128913,1772],{"class":98},[36,128915,128916,128918,128920,128922],{"class":38,"line":88},[36,128917,71337],{"class":109},[36,128919,51869],{"class":98},[36,128921,61274],{"class":109},[36,128923,1772],{"class":98},[36,128925,128926,128928,128930,128933],{"class":38,"line":113},[36,128927,71310],{"class":109},[36,128929,51869],{"class":98},[36,128931,128932],{"class":109},"#55585a",[36,128934,1772],{"class":98},[36,128936,128937],{"class":38,"line":119},[36,128938,2044],{"class":98},[36,128940,128941,128943,128945,128947],{"class":38,"line":131},[36,128942,128850],{"class":55},[36,128944,1877],{"class":51733},[36,128946,61372],{"class":55},[36,128948,16011],{"class":98},[36,128950,128951,128953,128955,128958],{"class":38,"line":137},[36,128952,71310],{"class":109},[36,128954,51869],{"class":98},[36,128956,128957],{"class":109},"#ff6700",[36,128959,1772],{"class":98},[36,128961,128962],{"class":38,"line":147},[36,128963,2044],{"class":98},[1941,128965],{"style":126782,"src":128966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,128968,128969],{},"行高=盒子高度：实现文字的垂直居中",[14,128971,128972],{},"原理讲解：",[1941,128974],{"style":126782,"src":128975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[559,128977,128979],{"id":128978},"_82-css背景","8.2 css背景",[14,128981,128982],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[588,128984,128986],{"id":128985},"_821-背景颜色","8.2.1 背景颜色",[14,128988,128989],{},"background-color:颜色值;",[14,128991,128992],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[588,128994,128996],{"id":128995},"_822-背景图片","8.2.2 背景图片",[14,128998,128999],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[26,129001,129003],{"className":126926,"code":129002,"language":126928,"meta":31,"style":31},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[33,129004,129005,129011,129027],{"__ignoreMap":31},[36,129006,129007,129009],{"class":38,"line":39},[36,129008,52043],{"class":51733},[36,129010,16011],{"class":98},[36,129012,129013,129016,129018,129020,129022,129025],{"class":38,"line":46},[36,129014,129015],{"class":109},"  background-image",[36,129017,51869],{"class":98},[36,129019,62158],{"class":109},[36,129021,621],{"class":98},[36,129023,129024],{"class":5667},"images\u002Fbg.png",[36,129026,3170],{"class":98},[36,129028,129029],{"class":38,"line":52},[36,129030,2044],{"class":98},[753,129032,129033,129042],{},[756,129034,129035],{},[759,129036,129037,129040],{},[762,129038,129039],{"align":24175},"参数值",[762,129041,103127],{"align":24175},[800,129043,129044,129051],{},[759,129045,129046,129048],{},[805,129047,55169],{"align":24175},[805,129049,129050],{"align":24175},"无背景图（默认的）",[759,129052,129053,129055],{},[805,129054,62158],{"align":24175},[805,129056,129057],{"align":24175},"使用绝对或相对地址指定背景图像",[26,129059,129060],{"className":126926,"code":129002,"language":126928,"meta":31,"style":31},[33,129061,129062,129068,129082],{"__ignoreMap":31},[36,129063,129064,129066],{"class":38,"line":39},[36,129065,52043],{"class":51733},[36,129067,16011],{"class":98},[36,129069,129070,129072,129074,129076,129078,129080],{"class":38,"line":46},[36,129071,129015],{"class":109},[36,129073,51869],{"class":98},[36,129075,62158],{"class":109},[36,129077,621],{"class":98},[36,129079,129024],{"class":5667},[36,129081,3170],{"class":98},[36,129083,129084],{"class":38,"line":52},[36,129085,2044],{"class":98},[14,129087,129088],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[588,129090,129092],{"id":129091},"_823-背景平铺","8.2.3 背景平铺",[26,129094,129096],{"className":126926,"code":129095,"language":126928,"meta":31,"style":31},"div {\n  background-repeat: no-repeat;\n}\n",[33,129097,129098,129104,129115],{"__ignoreMap":31},[36,129099,129100,129102],{"class":38,"line":39},[36,129101,52043],{"class":51733},[36,129103,16011],{"class":98},[36,129105,129106,129109,129111,129113],{"class":38,"line":46},[36,129107,129108],{"class":109},"  background-repeat",[36,129110,51869],{"class":98},[36,129112,62168],{"class":109},[36,129114,1772],{"class":98},[36,129116,129117],{"class":38,"line":52},[36,129118,2044],{"class":98},[753,129120,129121,129129],{},[756,129122,129123],{},[759,129124,129125,129127],{},[762,129126,129039],{"align":24175},[762,129128,103127],{"align":24175},[800,129130,129131,129139,129146,129154],{},[759,129132,129133,129136],{},[805,129134,129135],{"align":24175},"repeat",[805,129137,129138],{"align":24175},"背景图像在纵向和横向上平铺（默认的）",[759,129140,129141,129143],{},[805,129142,62168],{"align":24175},[805,129144,129145],{"align":24175},"背景图像不平铺",[759,129147,129148,129151],{},[805,129149,129150],{"align":24175},"repeat-x",[805,129152,129153],{"align":24175},"背景图像在横向上平铺",[759,129155,129156,129159],{},[805,129157,129158],{"align":24175},"repeat-y",[805,129160,129161],{"align":24175},"背景图像在纵向平铺",[588,129163,129165],{"id":129164},"_824-背景图片位置","8.2.4 背景图片位置",[26,129167,129169],{"className":126926,"code":129168,"language":126928,"meta":31,"style":31},"\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",[33,129170,129171,129176,129182,129196,129200,129205,129211,129227,129231,129236,129242,129256],{"__ignoreMap":31},[36,129172,129173],{"class":38,"line":39},[36,129174,129175],{"class":42},"\u002F* 方位名词 *\u002F\n",[36,129177,129178,129180],{"class":38,"line":46},[36,129179,52043],{"class":51733},[36,129181,16011],{"class":98},[36,129183,129184,129187,129189,129191,129194],{"class":38,"line":52},[36,129185,129186],{"class":109},"  background-position",[36,129188,51869],{"class":98},[36,129190,52024],{"class":109},[36,129192,129193],{"class":109}," top",[36,129195,1772],{"class":98},[36,129197,129198],{"class":38,"line":66},[36,129199,2044],{"class":98},[36,129201,129202],{"class":38,"line":72},[36,129203,129204],{"class":42},"\u002F* 精确单位 *\u002F\n",[36,129206,129207,129209],{"class":38,"line":82},[36,129208,52043],{"class":51733},[36,129210,16011],{"class":98},[36,129212,129213,129215,129217,129219,129221,129223,129225],{"class":38,"line":88},[36,129214,129186],{"class":109},[36,129216,51869],{"class":98},[36,129218,1313],{"class":109},[36,129220,51924],{"class":163},[36,129222,57936],{"class":109},[36,129224,51924],{"class":163},[36,129226,1772],{"class":98},[36,129228,129229],{"class":38,"line":113},[36,129230,2044],{"class":98},[36,129232,129233],{"class":38,"line":119},[36,129234,129235],{"class":42},"\u002F* 混合单位 *\u002F\n",[36,129237,129238,129240],{"class":38,"line":131},[36,129239,52043],{"class":51733},[36,129241,16011],{"class":98},[36,129243,129244,129246,129248,129250,129252,129254],{"class":38,"line":137},[36,129245,129186],{"class":109},[36,129247,51869],{"class":98},[36,129249,1313],{"class":109},[36,129251,51924],{"class":163},[36,129253,17583],{"class":109},[36,129255,1772],{"class":98},[36,129257,129258],{"class":38,"line":147},[36,129259,2044],{"class":98},[14,129261,129262],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[753,129264,129265,129273],{},[756,129266,129267],{},[759,129268,129269,129271],{},[762,129270,129039],{"align":24175},[762,129272,26306],{"align":24175},[800,129274,129275,129282],{},[759,129276,129277,129279],{},[805,129278,52400],{"align":24175},[805,129280,129281],{"align":24175},"百分数|由浮点数和单位标识符组成的长度值",[759,129283,129284,129287],{},[805,129285,129286],{"align":24175},"position",[805,129288,129289],{"align":24175},"top|center|bottom|left|center|right 方位名词",[14,129291,129292],{},"其他说明：",[14,129294,129295],{},"①参数是方位名词",[14,129297,129298],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,129300,129301],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,129303,129304],{},"②参数是精确单位",[14,129306,129307],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,129309,129310],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,129312,129313],{},"③参数是混合单位",[14,129315,129316],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[588,129318,129320],{"id":129319},"_825-背景图片固定","8.2.5 背景图片固定",[26,129322,129324],{"className":126926,"code":129323,"language":126928,"meta":31,"style":31},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[33,129325,129326,129331,129337,129349,129353,129358,129364,129374],{"__ignoreMap":31},[36,129327,129328],{"class":38,"line":39},[36,129329,129330],{"class":42},"\u002F* 背景滚动（默认） *\u002F\n",[36,129332,129333,129335],{"class":38,"line":46},[36,129334,52043],{"class":51733},[36,129336,16011],{"class":98},[36,129338,129339,129342,129344,129347],{"class":38,"line":52},[36,129340,129341],{"class":109},"  background-attachment",[36,129343,51869],{"class":98},[36,129345,129346],{"class":109},"scroll",[36,129348,1772],{"class":98},[36,129350,129351],{"class":38,"line":66},[36,129352,2044],{"class":98},[36,129354,129355],{"class":38,"line":72},[36,129356,129357],{"class":42},"\u002F* 背景固定 *\u002F\n",[36,129359,129360,129362],{"class":38,"line":82},[36,129361,52043],{"class":51733},[36,129363,16011],{"class":98},[36,129365,129366,129368,129370,129372],{"class":38,"line":88},[36,129367,129341],{"class":109},[36,129369,51869],{"class":98},[36,129371,86665],{"class":109},[36,129373,1772],{"class":98},[36,129375,129376],{"class":38,"line":113},[36,129377,2044],{"class":98},[753,129379,129380,129389],{},[756,129381,129382],{},[759,129383,129384,129387],{},[762,129385,129386],{"align":24175},"参数",[762,129388,103127],{"align":24175},[800,129390,129391,129398],{},[759,129392,129393,129395],{},[805,129394,129346],{"align":24175},[805,129396,129397],{"align":24175},"背景图像是随对象内容滚动",[759,129399,129400,129402],{},[805,129401,86665],{"align":24175},[805,129403,129404],{"align":24175},"背景图像固定",[588,129406,129408],{"id":129407},"_826-背景样式合写","8.2.6 背景样式合写",[26,129410,129412],{"className":126926,"code":129411,"language":126928,"meta":31,"style":31},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[33,129413,129414,129419,129425,129453],{"__ignoreMap":31},[36,129415,129416],{"class":38,"line":39},[36,129417,129418],{"class":42},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[36,129420,129421,129423],{"class":38,"line":46},[36,129422,52043],{"class":51733},[36,129424,16011],{"class":98},[36,129426,129427,129429,129431,129433,129436,129438,129440,129442,129444,129447,129449,129451],{"class":38,"line":52},[36,129428,71043],{"class":109},[36,129430,51869],{"class":98},[36,129432,61274],{"class":109},[36,129434,129435],{"class":109}," url",[36,129437,621],{"class":98},[36,129439,129024],{"class":5667},[36,129441,14153],{"class":98},[36,129443,62168],{"class":109},[36,129445,129446],{"class":109}," fixed",[36,129448,17583],{"class":109},[36,129450,129193],{"class":109},[36,129452,1772],{"class":98},[36,129454,129455],{"class":38,"line":66},[36,129456,2044],{"class":98},[588,129458,129460],{"id":129459},"_827-背景色半透明","8.2.7 背景色半透明",[26,129462,129464],{"className":126926,"code":129463,"language":126928,"meta":31,"style":31},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[33,129465,129466,129472,129498],{"__ignoreMap":31},[36,129467,129468,129470],{"class":38,"line":39},[36,129469,52043],{"class":51733},[36,129471,16011],{"class":98},[36,129473,129474,129476,129478,129480,129482,129484,129486,129488,129490,129492,129494,129496],{"class":38,"line":46},[36,129475,71043],{"class":109},[36,129477,51869],{"class":98},[36,129479,55542],{"class":109},[36,129481,621],{"class":98},[36,129483,807],{"class":109},[36,129485,12874],{"class":98},[36,129487,807],{"class":109},[36,129489,12874],{"class":98},[36,129491,807],{"class":109},[36,129493,12874],{"class":98},[36,129495,100953],{"class":109},[36,129497,3170],{"class":98},[36,129499,129500],{"class":38,"line":52},[36,129501,2044],{"class":98},[14,129503,99828],{},[14,129505,129506],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,129508,129509],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,129511,129512],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,129514,129515],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[588,129517,129519],{"id":129518},"_828-总结","8.2.8 总结",[753,129521,129522,129533],{},[756,129523,129524],{},[759,129525,129526,129529,129531],{},[762,129527,129528],{"align":24175},"属性",[762,129530,103127],{"align":24175},[762,129532,768],{"align":24175},[800,129534,129535,129546,129557,129568,129579,129590,129601],{},[759,129536,129537,129540,129543],{},[805,129538,129539],{"align":24175},"background-color",[805,129541,129542],{"align":24175},"背景颜色",[805,129544,129545],{"align":24175},"预定义的颜色值\u002F十六进制\u002FRGB代码",[759,129547,129548,129551,129554],{},[805,129549,129550],{"align":24175},"background-image",[805,129552,129553],{"align":24175},"背景图片",[805,129555,129556],{"align":24175},"url(图片路径)",[759,129558,129559,129562,129565],{},[805,129560,129561],{"align":24175},"background-repeat",[805,129563,129564],{"align":24175},"是否平铺",[805,129566,129567],{"align":24175},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[759,129569,129570,129573,129576],{},[805,129571,129572],{"align":24175},"background-position",[805,129574,129575],{"align":24175},"背景位置",[805,129577,129578],{"align":24175},"length\u002Fposition 分别是x和y坐标",[759,129580,129581,129584,129587],{},[805,129582,129583],{"align":24175},"background-attachment",[805,129585,129586],{"align":24175},"背景附着",[805,129588,129589],{"align":24175},"scroll(背景滚动) \u002Ffixed (背景固定)",[759,129591,129592,129595,129598],{},[805,129593,129594],{"align":24175},"背景简写",[805,129596,129597],{"align":24175},"书写更简单",[805,129599,129600],{"align":24175},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[759,129602,129603,129606,129609],{},[805,129604,129605],{"align":24175},"背景半透明",[805,129607,129608],{"align":24175},"背景颜色半透明",[805,129610,129611],{"align":24175},"background: rgba(0,0,0.3); 后面必须是4个值",[14,129613,129614],{},"颜色渐变：",[1941,129616],{"style":126782,"src":129617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1941,129619],{"style":126782,"src":129620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[588,129622,129624],{"id":129623},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[26,129626,129628],{"className":127673,"code":129627,"language":127675,"meta":31,"style":31},"\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",[33,129629,129630,129645,129664,129683,129702,129721,129740],{"__ignoreMap":31},[36,129631,129632,129634,129636,129638,129640,129643],{"class":38,"line":39},[36,129633,179],{"class":98},[36,129635,52043],{"class":51733},[36,129637,53918],{"class":55},[36,129639,176],{"class":98},[36,129641,129642],{"class":59},"\"nav\"",[36,129644,188],{"class":98},[36,129646,129647,129649,129651,129653,129655,129657,129660,129662],{"class":38,"line":46},[36,129648,52576],{"class":98},[36,129650,20],{"class":51733},[36,129652,61489],{"class":55},[36,129654,176],{"class":98},[36,129656,61494],{"class":59},[36,129658,129659],{"class":98},">五彩导航1\u003C\u002F",[36,129661,20],{"class":51733},[36,129663,188],{"class":98},[36,129665,129666,129668,129670,129672,129674,129676,129679,129681],{"class":38,"line":52},[36,129667,52576],{"class":98},[36,129669,20],{"class":51733},[36,129671,61489],{"class":55},[36,129673,176],{"class":98},[36,129675,61494],{"class":59},[36,129677,129678],{"class":98},">五彩导航2\u003C\u002F",[36,129680,20],{"class":51733},[36,129682,188],{"class":98},[36,129684,129685,129687,129689,129691,129693,129695,129698,129700],{"class":38,"line":66},[36,129686,52576],{"class":98},[36,129688,20],{"class":51733},[36,129690,61489],{"class":55},[36,129692,176],{"class":98},[36,129694,61494],{"class":59},[36,129696,129697],{"class":98},">五彩导航3\u003C\u002F",[36,129699,20],{"class":51733},[36,129701,188],{"class":98},[36,129703,129704,129706,129708,129710,129712,129714,129717,129719],{"class":38,"line":72},[36,129705,52576],{"class":98},[36,129707,20],{"class":51733},[36,129709,61489],{"class":55},[36,129711,176],{"class":98},[36,129713,61494],{"class":59},[36,129715,129716],{"class":98},">五彩导航4\u003C\u002F",[36,129718,20],{"class":51733},[36,129720,188],{"class":98},[36,129722,129723,129725,129727,129729,129731,129733,129736,129738],{"class":38,"line":82},[36,129724,52576],{"class":98},[36,129726,20],{"class":51733},[36,129728,61489],{"class":55},[36,129730,176],{"class":98},[36,129732,61494],{"class":59},[36,129734,129735],{"class":98},">五彩导航5\u003C\u002F",[36,129737,20],{"class":51733},[36,129739,188],{"class":98},[36,129741,129742,129744,129746],{"class":38,"line":88},[36,129743,52217],{"class":98},[36,129745,52043],{"class":51733},[36,129747,188],{"class":98},[26,129749,129751],{"className":126926,"code":129750,"language":126928,"meta":31,"style":31},".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",[33,129752,129753,129762,129772,129784,129796,129806,129818,129828,129832,129857,129880,129903,129926],{"__ignoreMap":31},[36,129754,129755,129758,129760],{"class":38,"line":39},[36,129756,129757],{"class":55},".nav",[36,129759,1877],{"class":51733},[36,129761,16011],{"class":98},[36,129763,129764,129766,129768,129770],{"class":38,"line":46},[36,129765,128542],{"class":109},[36,129767,51869],{"class":98},[36,129769,72815],{"class":109},[36,129771,1772],{"class":98},[36,129773,129774,129776,129778,129780,129782],{"class":38,"line":52},[36,129775,71000],{"class":109},[36,129777,51869],{"class":98},[36,129779,1430],{"class":109},[36,129781,51924],{"class":163},[36,129783,1772],{"class":98},[36,129785,129786,129788,129790,129792,129794],{"class":38,"line":66},[36,129787,71220],{"class":109},[36,129789,51869],{"class":98},[36,129791,1469],{"class":109},[36,129793,51924],{"class":163},[36,129795,1772],{"class":98},[36,129797,129798,129800,129802,129804],{"class":38,"line":72},[36,129799,70958],{"class":109},[36,129801,51869],{"class":98},[36,129803,52024],{"class":109},[36,129805,1772],{"class":98},[36,129807,129808,129810,129812,129814,129816],{"class":38,"line":82},[36,129809,127610],{"class":109},[36,129811,51869],{"class":98},[36,129813,1469],{"class":109},[36,129815,51924],{"class":163},[36,129817,1772],{"class":98},[36,129819,129820,129822,129824,129826],{"class":38,"line":88},[36,129821,71337],{"class":109},[36,129823,51869],{"class":98},[36,129825,61274],{"class":109},[36,129827,1772],{"class":98},[36,129829,129830],{"class":38,"line":113},[36,129831,2044],{"class":98},[36,129833,129834,129836,129838,129841,129843,129845,129848,129850,129852,129854],{"class":38,"line":119},[36,129835,129757],{"class":55},[36,129837,1877],{"class":51733},[36,129839,129840],{"class":55},":nth-child",[36,129842,621],{"class":98},[36,129844,833],{"class":109},[36,129846,129847],{"class":98},") { ",[36,129849,129539],{"class":109},[36,129851,51869],{"class":98},[36,129853,128957],{"class":109},[36,129855,129856],{"class":98},"; }\n",[36,129858,129859,129861,129863,129865,129867,129869,129871,129873,129875,129878],{"class":38,"line":131},[36,129860,129757],{"class":55},[36,129862,1877],{"class":51733},[36,129864,129840],{"class":55},[36,129866,621],{"class":98},[36,129868,694],{"class":109},[36,129870,129847],{"class":98},[36,129872,129539],{"class":109},[36,129874,51869],{"class":98},[36,129876,129877],{"class":109},"#ff0000",[36,129879,129856],{"class":98},[36,129881,129882,129884,129886,129888,129890,129892,129894,129896,129898,129901],{"class":38,"line":137},[36,129883,129757],{"class":55},[36,129885,1877],{"class":51733},[36,129887,129840],{"class":55},[36,129889,621],{"class":98},[36,129891,689],{"class":109},[36,129893,129847],{"class":98},[36,129895,129539],{"class":109},[36,129897,51869],{"class":98},[36,129899,129900],{"class":109},"#00a4ff",[36,129902,129856],{"class":98},[36,129904,129905,129907,129909,129911,129913,129915,129917,129919,129921,129924],{"class":38,"line":147},[36,129906,129757],{"class":55},[36,129908,1877],{"class":51733},[36,129910,129840],{"class":55},[36,129912,621],{"class":98},[36,129914,908],{"class":109},[36,129916,129847],{"class":98},[36,129918,129539],{"class":109},[36,129920,51869],{"class":98},[36,129922,129923],{"class":109},"#ff00ff",[36,129925,129856],{"class":98},[36,129927,129928,129930,129932,129934,129936,129938,129940,129942,129944,129947],{"class":38,"line":153},[36,129929,129757],{"class":55},[36,129931,1877],{"class":51733},[36,129933,129840],{"class":55},[36,129935,621],{"class":98},[36,129937,933],{"class":109},[36,129939,129847],{"class":98},[36,129941,129539],{"class":109},[36,129943,51869],{"class":98},[36,129945,129946],{"class":109},"#00ff00",[36,129948,129856],{"class":98},[559,129950,129952],{"id":129951},"_83-css三大特性","8.3 css三大特性",[588,129954,129956],{"id":129955},"_831-层叠性","8.3.1 层叠性",[14,129958,129959],{},"为了解决样式冲突问题",[14,129961,129962],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,129964,129965],{},"   ②样式不冲突，不会层叠",[588,129967,129969],{"id":129968},"_832-继承性","8.3.2 继承性",[14,129971,129972],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,129974,129975],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[26,129977,129979],{"className":126926,"code":129978,"language":126928,"meta":31,"style":31},"p {\n  color: #333;\n}\n",[33,129980,129981,129987,129997],{"__ignoreMap":31},[36,129982,129983,129985],{"class":38,"line":39},[36,129984,14],{"class":51733},[36,129986,16011],{"class":98},[36,129988,129989,129991,129993,129995],{"class":38,"line":46},[36,129990,71337],{"class":109},[36,129992,51869],{"class":98},[36,129994,62801],{"class":109},[36,129996,1772],{"class":98},[36,129998,129999],{"class":38,"line":52},[36,130000,2044],{"class":98},[1941,130002],{"style":126782,"src":130003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,130005,130006],{},"解释：①行高可以跟单位也可以不跟单位",[14,130008,130009],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,130011,130012],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,130014,130015],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[588,130017,130019],{"id":130018},"_833-优先级","8.3.3 优先级",[571,130021,130022,130025],{},[574,130023,130024],{},"选择器相同，则执行层叠性",[574,130026,130027],{},"选择器不同，则根据选择器权重执行",[753,130029,130030,130040],{},[756,130031,130032],{},[759,130033,130034,130037],{},[762,130035,130036],{"align":24175},"选择器",[762,130038,130039],{"align":24175},"选择器权重",[800,130041,130042,130050,130058,130066,130074,130082],{},[759,130043,130044,130047],{},[805,130045,130046],{"align":24175},"继承 或者*",[805,130048,130049],{"align":24175},"0，0，0，0",[759,130051,130052,130055],{},[805,130053,130054],{"align":24175},"标签选择器",[805,130056,130057],{"align":24175},"0，0，0，1",[759,130059,130060,130063],{},[805,130061,130062],{"align":24175},"类选择器，伪类选择器",[805,130064,130065],{"align":24175},"0，0，1，0",[759,130067,130068,130071],{},[805,130069,130070],{"align":24175},"ID选择器",[805,130072,130073],{"align":24175},"0，1，0，0",[759,130075,130076,130079],{},[805,130077,130078],{"align":24175},"行内样式",[805,130080,130081],{"align":24175},"1，0，0，0",[759,130083,130084,130087],{},[805,130085,130086],{"align":24175},"！important",[805,130088,130089],{"align":24175},"无穷大",[14,130091,130092],{},"! important用法：",[26,130094,130096],{"className":126926,"code":130095,"language":126928,"meta":31,"style":31},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[33,130097,130098,130103,130109,130122,130126,130131,130137,130147],{"__ignoreMap":31},[36,130099,130100],{"class":38,"line":39},[36,130101,130102],{"class":42},"\u002F* !important 拥有最高优先级 *\u002F\n",[36,130104,130105,130107],{"class":38,"line":46},[36,130106,52043],{"class":51733},[36,130108,16011],{"class":98},[36,130110,130111,130113,130115,130117,130120],{"class":38,"line":52},[36,130112,71337],{"class":109},[36,130114,51869],{"class":98},[36,130116,52077],{"class":109},[36,130118,130119],{"class":163}," !important",[36,130121,1772],{"class":98},[36,130123,130124],{"class":38,"line":66},[36,130125,2044],{"class":98},[36,130127,130128],{"class":38,"line":72},[36,130129,130130],{"class":42},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[36,130132,130133,130135],{"class":38,"line":82},[36,130134,52043],{"class":51733},[36,130136,16011],{"class":98},[36,130138,130139,130141,130143,130145],{"class":38,"line":88},[36,130140,71337],{"class":109},[36,130142,51869],{"class":98},[36,130144,57853],{"class":109},[36,130146,1772],{"class":98},[36,130148,130149],{"class":38,"line":113},[36,130150,2044],{"class":98},[14,130152,130153],{},"优先级注意点：",[14,130155,130156],{},"①权重是有4组数字组成,但是不会有进位",[14,130158,130159],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,130161,130162],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,130164,130165],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,130167,130168],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,130170,130171],{},"⑥复合选择器",[753,130173,130174,130184],{},[756,130175,130176],{},[759,130177,130178,130181],{},[762,130179,130180],{"align":24175},"div ul li",[762,130182,130183],{"align":24175},"0,0,0,3",[800,130185,130186,130194,130202],{},[759,130187,130188,130191],{},[805,130189,130190],{"align":24175},".nav ul li",[805,130192,130193],{"align":24175},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[759,130195,130196,130199],{},[805,130197,130198],{"align":24175},"a:hover",[805,130200,130201],{"align":24175},"0,0,1,1",[759,130203,130204,130207],{},[805,130205,130206],{"align":24175},".nav a",[805,130208,130201],{"align":24175},[537,130210,130211],{},"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":31,"searchDepth":46,"depth":46,"links":130213},[130214,130222,130233],{"id":128322,"depth":46,"text":128323,"children":130215},[130216,130217,130218,130219,130220,130221],{"id":128335,"depth":52,"text":128336},{"id":128407,"depth":52,"text":128408},{"id":128479,"depth":52,"text":128480},{"id":128510,"depth":52,"text":128511},{"id":128517,"depth":52,"text":128518},{"id":128670,"depth":52,"text":128671},{"id":128978,"depth":46,"text":128979,"children":130223},[130224,130225,130226,130227,130228,130229,130230,130231,130232],{"id":128985,"depth":52,"text":128986},{"id":128995,"depth":52,"text":128996},{"id":129091,"depth":52,"text":129092},{"id":129164,"depth":52,"text":129165},{"id":129319,"depth":52,"text":129320},{"id":129407,"depth":52,"text":129408},{"id":129459,"depth":52,"text":129460},{"id":129518,"depth":52,"text":129519},{"id":129623,"depth":52,"text":129624},{"id":129951,"depth":46,"text":129952,"children":130234},[130235,130236,130237],{"id":129955,"depth":52,"text":129956},{"id":129968,"depth":52,"text":129969},{"id":130018,"depth":52,"text":130019},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128314,"description":542},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130244,"title":130245,"body":130246,"description":542,"extension":543,"meta":131836,"navigation":246,"path":131837,"seo":131838,"stem":131839,"__hash__":131840},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130247,"toc":131815},[130248,130251,130255,130258,130261,130264,130267,130270,130273,130276,130280,130288,130325,130361,130364,130378,130383,130417,130420,130513,130518,130521,130551,130554,130559,130567,130571,130578,130624,130668,130673,130676,130679,130682,130685,130688,130691,130693,130696,130700,130705,130749,130754,130757,130760,130797,130802,130805,130808,130811,130814,130846,130849,130852,130855,130887,130890,130893,130896,130900,130903,130935,130938,130942,130962,130965,130973,130976,130980,130985,130988,131020,131025,131028,131066,131070,131075,131078,131081,131112,131115,131132,131137,131189,131249,131254,131308,131346,131350,131354,131357,131361,131369,131372,131374,131385,131390,131438,131472,131475,131478,131481,131484,131528,131531,131534,131537,131540,131543,131546,131590,131593,131596,131599,131602,131605,131608,131614,131617,131661,131664,131667,131670,131673,131676,131720,131723,131725,131728,131732,131736,131774,131778,131781,131784,131788,131796,131800,131803,131806,131809,131812],[10,130249,130245],{"id":130250},"_9-css盒模型浮动与切图",[559,130252,130254],{"id":130253},"_91-盒子模型","9.1 盒子模型",[14,130256,130257],{},"利用盒子来设计网页",[14,130259,130260],{},"盒子包含：边框、外边距、内边距、实际内容",[14,130262,130263],{},"网页布局设置：",[14,130265,130266],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,130268,130269],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,130271,130272],{},"③往盒子里装内容",[1941,130274],{"style":126782,"src":130275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[588,130277,130279],{"id":130278},"_911-边框border","9.1.1 边框（border）",[571,130281,130282,130285],{},[574,130283,130284],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[574,130286,130287],{},"语法",[26,130289,130291],{"className":126926,"code":130290,"language":126928,"meta":31,"style":31},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[33,130292,130293,130298,130304,130321],{"__ignoreMap":31},[36,130294,130295],{"class":38,"line":39},[36,130296,130297],{"class":42},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[36,130299,130300,130302],{"class":38,"line":46},[36,130301,52043],{"class":51733},[36,130303,16011],{"class":98},[36,130305,130306,130308,130310,130312,130314,130316,130319],{"class":38,"line":52},[36,130307,71328],{"class":109},[36,130309,51869],{"class":98},[36,130311,833],{"class":109},[36,130313,51924],{"class":163},[36,130315,51953],{"class":109},[36,130317,130318],{"class":109}," #ccc",[36,130320,1772],{"class":98},[36,130322,130323],{"class":38,"line":66},[36,130324,2044],{"class":98},[753,130326,130327,130335],{},[756,130328,130329],{},[759,130330,130331,130333],{},[762,130332,129528],{"align":24175},[762,130334,103127],{"align":24175},[800,130336,130337,130345,130353],{},[759,130338,130339,130342],{},[805,130340,130341],{"align":24175},"border-width",[805,130343,130344],{"align":24175},"定义边框粗细，单位是px",[759,130346,130347,130350],{},[805,130348,130349],{"align":24175},"border-style",[805,130351,130352],{"align":24175},"边框的样式",[759,130354,130355,130358],{},[805,130356,130357],{"align":24175},"border-color",[805,130359,130360],{"align":24175},"边框的颜色",[14,130362,130363],{},"边框样式 border-style 可以设置如下值：",[1618,130365,130366,130369,130372,130375],{},[574,130367,130368],{},"none：没有边框即忽略所有边框的宽度（默认值）",[574,130370,130371],{},"solid：边框为单实线(最为常用的)",[574,130373,130374],{},"dashed：边框为虚线",[574,130376,130377],{},"dotted：边框为点线",[571,130379,130380],{"start":52},[574,130381,130382],{},"边框的合写分写",[26,130384,130385],{"className":126926,"code":130290,"language":126928,"meta":31,"style":31},[33,130386,130387,130391,130397,130413],{"__ignoreMap":31},[36,130388,130389],{"class":38,"line":39},[36,130390,130297],{"class":42},[36,130392,130393,130395],{"class":38,"line":46},[36,130394,52043],{"class":51733},[36,130396,16011],{"class":98},[36,130398,130399,130401,130403,130405,130407,130409,130411],{"class":38,"line":52},[36,130400,71328],{"class":109},[36,130402,51869],{"class":98},[36,130404,833],{"class":109},[36,130406,51924],{"class":163},[36,130408,51953],{"class":109},[36,130410,130318],{"class":109},[36,130412,1772],{"class":98},[36,130414,130415],{"class":38,"line":66},[36,130416,2044],{"class":98},[14,130418,130419],{},"边框分开写法：",[26,130421,130423],{"className":126926,"code":130422,"language":126928,"meta":31,"style":31},"\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",[33,130424,130425,130430,130436,130454,130472,130491,130509],{"__ignoreMap":31},[36,130426,130427],{"class":38,"line":39},[36,130428,130429],{"class":42},"\u002F* 边框分开写法 *\u002F\n",[36,130431,130432,130434],{"class":38,"line":46},[36,130433,52043],{"class":51733},[36,130435,16011],{"class":98},[36,130437,130438,130441,130443,130445,130447,130449,130452],{"class":38,"line":52},[36,130439,130440],{"class":109},"  border-top",[36,130442,51869],{"class":98},[36,130444,833],{"class":109},[36,130446,51924],{"class":163},[36,130448,51953],{"class":109},[36,130450,130451],{"class":109}," #000",[36,130453,1772],{"class":98},[36,130455,130456,130459,130461,130463,130465,130467,130470],{"class":38,"line":66},[36,130457,130458],{"class":109},"  border-right",[36,130460,51869],{"class":98},[36,130462,694],{"class":109},[36,130464,51924],{"class":163},[36,130466,62673],{"class":109},[36,130468,130469],{"class":109}," #333",[36,130471,1772],{"class":98},[36,130473,130474,130477,130479,130481,130483,130486,130489],{"class":38,"line":72},[36,130475,130476],{"class":109},"  border-bottom",[36,130478,51869],{"class":98},[36,130480,689],{"class":109},[36,130482,51924],{"class":163},[36,130484,130485],{"class":109}," dotted",[36,130487,130488],{"class":109}," #666",[36,130490,1772],{"class":98},[36,130492,130493,130496,130498,130500,130502,130504,130507],{"class":38,"line":82},[36,130494,130495],{"class":109},"  border-left",[36,130497,51869],{"class":98},[36,130499,833],{"class":109},[36,130501,51924],{"class":163},[36,130503,51953],{"class":109},[36,130505,130506],{"class":109}," #999",[36,130508,1772],{"class":98},[36,130510,130511],{"class":38,"line":88},[36,130512,2044],{"class":98},[571,130514,130515],{"start":66},[574,130516,130517],{},"表格的细线边框",[14,130519,130520],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[26,130522,130524],{"className":126926,"code":130523,"language":126928,"meta":31,"style":31},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[33,130525,130526,130531,130537,130547],{"__ignoreMap":31},[36,130527,130528],{"class":38,"line":39},[36,130529,130530],{"class":42},"\u002F* 表格细线边框合并 *\u002F\n",[36,130532,130533,130535],{"class":38,"line":46},[36,130534,753],{"class":51733},[36,130536,16011],{"class":98},[36,130538,130539,130541,130543,130545],{"class":38,"line":52},[36,130540,71010],{"class":109},[36,130542,51869],{"class":98},[36,130544,65467],{"class":109},[36,130546,1772],{"class":98},[36,130548,130549],{"class":38,"line":66},[36,130550,2044],{"class":98},[14,130552,130553],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[571,130555,130556],{"start":72},[574,130557,130558],{},"解决边框额外增加盒子的实际大小的方法：",[1618,130560,130561,130564],{},[574,130562,130563],{},"测量盒子大小的时候,不量边框",[574,130565,130566],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[588,130568,130570],{"id":130569},"_912-内边距","9.1.2 内边距",[571,130572,130573,130576],{},[574,130574,130575],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[574,130577,130287],{},[753,130579,130580,130590],{},[756,130581,130582],{},[759,130583,130584,130587],{},[762,130585,130586],{"align":24175},"值的个数",[762,130588,130589],{"align":24175},"表达意思",[800,130591,130592,130600,130608,130616],{},[759,130593,130594,130597],{},[805,130595,130596],{"align":24175},"padding: 5px;",[805,130598,130599],{"align":24175},"1个值，代表上下左右都有5个元素",[759,130601,130602,130605],{},[805,130603,130604],{"align":24175},"padding: 5px 10px;",[805,130606,130607],{"align":24175},"2个值，代表上下内边距为5像素，左右内边距为10像素",[759,130609,130610,130613],{},[805,130611,130612],{"align":24175},"padding: 5px 10px 20px;",[805,130614,130615],{"align":24175},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[759,130617,130618,130621],{},[805,130619,130620],{"align":24175},"padding: 5px 10px 20px 30px;",[805,130622,130623],{"align":24175},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[753,130625,130626,130634],{},[756,130627,130628],{},[759,130629,130630,130632],{},[762,130631,129528],{"align":24175},[762,130633,103127],{"align":24175},[800,130635,130636,130644,130652,130660],{},[759,130637,130638,130641],{},[805,130639,130640],{"align":24175},"padding-left",[805,130642,130643],{"align":24175},"左内边距",[759,130645,130646,130649],{},[805,130647,130648],{"align":24175},"padding-right",[805,130650,130651],{"align":24175},"右内边距",[759,130653,130654,130657],{},[805,130655,130656],{"align":24175},"padding-top",[805,130658,130659],{"align":24175},"上内边距",[759,130661,130662,130665],{},[805,130663,130664],{"align":24175},"padding-bottom",[805,130666,130667],{"align":24175},"下内边距",[571,130669,130670],{"start":52},[574,130671,130672],{},"内边距会影响盒子的实际大小",[14,130674,130675],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,130677,130678],{},"①内容和边框有了距离，添加了内边距",[14,130680,130681],{},"②padding影响了盒子实际大小",[14,130683,130684],{},"内边距对盒子大小的影响：",[14,130686,130687],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,130689,130690],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,130692,95652],{},[14,130694,130695],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[588,130697,130699],{"id":130698},"_913-外边距","9.1.3 外边距",[571,130701,130702],{},[574,130703,130704],{},"控制盒子与盒子之间的距离",[753,130706,130707,130715],{},[756,130708,130709],{},[759,130710,130711,130713],{},[762,130712,129528],{"align":24175},[762,130714,103127],{"align":24175},[800,130716,130717,130725,130733,130741],{},[759,130718,130719,130722],{},[805,130720,130721],{"align":24175},"margin-left",[805,130723,130724],{"align":24175},"左外边距",[759,130726,130727,130730],{},[805,130728,130729],{"align":24175},"margin-right",[805,130731,130732],{"align":24175},"右外边距",[759,130734,130735,130738],{},[805,130736,130737],{"align":24175},"margin-top",[805,130739,130740],{"align":24175},"上外边距",[759,130742,130743,130746],{},[805,130744,130745],{"align":24175},"margin-bottom",[805,130747,130748],{"align":24175},"下外边距",[571,130750,130751],{"start":46},[574,130752,130753],{},"外边距可以让块级盒子水平居中的两个条件：",[14,130755,130756],{},"①盒子必须指定了宽度（width）",[14,130758,130759],{},"②盒子左右的外边距都设置为 auto",[26,130761,130763],{"className":126926,"code":130762,"language":126928,"meta":31,"style":31},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[33,130764,130765,130770,130777,130793],{"__ignoreMap":31},[36,130766,130767],{"class":38,"line":39},[36,130768,130769],{"class":42},"\u002F* margin 复合写法（同上） *\u002F\n",[36,130771,130772,130775],{"class":38,"line":46},[36,130773,130774],{"class":55},".box",[36,130776,16011],{"class":98},[36,130778,130779,130781,130783,130785,130787,130790],{"class":38,"line":52},[36,130780,70902],{"class":109},[36,130782,51869],{"class":98},[36,130784,807],{"class":109},[36,130786,51988],{"class":109},[36,130788,130789],{"class":98},";  ",[36,130791,130792],{"class":42},"\u002F* 块级盒子水平居中 *\u002F\n",[36,130794,130795],{"class":38,"line":66},[36,130796,2044],{"class":98},[571,130798,130799],{"start":52},[574,130800,130801],{},"外边距塌陷问题",[14,130803,130804],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1941,130806],{"style":126782,"src":130807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,130809,130810],{},"解决方案：",[14,130812,130813],{},"①可以为父亲元素定义上边距",[26,130815,130816],{"className":126926,"code":130762,"language":126928,"meta":31,"style":31},[33,130817,130818,130822,130828,130842],{"__ignoreMap":31},[36,130819,130820],{"class":38,"line":39},[36,130821,130769],{"class":42},[36,130823,130824,130826],{"class":38,"line":46},[36,130825,130774],{"class":55},[36,130827,16011],{"class":98},[36,130829,130830,130832,130834,130836,130838,130840],{"class":38,"line":52},[36,130831,70902],{"class":109},[36,130833,51869],{"class":98},[36,130835,807],{"class":109},[36,130837,51988],{"class":109},[36,130839,130789],{"class":98},[36,130841,130792],{"class":42},[36,130843,130844],{"class":38,"line":66},[36,130845,2044],{"class":98},[14,130847,130848],{},"②可以为父亲元素定义上内边距",[14,130850,130851],{},"③可以为父亲元素添加overflow:hidden",[1941,130853],{"style":126782,"src":130854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[26,130856,130857],{"className":126926,"code":130762,"language":126928,"meta":31,"style":31},[33,130858,130859,130863,130869,130883],{"__ignoreMap":31},[36,130860,130861],{"class":38,"line":39},[36,130862,130769],{"class":42},[36,130864,130865,130867],{"class":38,"line":46},[36,130866,130774],{"class":55},[36,130868,16011],{"class":98},[36,130870,130871,130873,130875,130877,130879,130881],{"class":38,"line":52},[36,130872,70902],{"class":109},[36,130874,51869],{"class":98},[36,130876,807],{"class":109},[36,130878,51988],{"class":109},[36,130880,130789],{"class":98},[36,130882,130792],{"class":42},[36,130884,130885],{"class":38,"line":66},[36,130886,2044],{"class":98},[1941,130888],{"style":126782,"src":130889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,130891,130892],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,130894,130895],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[588,130897,130899],{"id":130898},"_914-清除内外边距","9.1.4 清除内外边距",[14,130901,130902],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[26,130904,130905],{"className":126926,"code":130762,"language":126928,"meta":31,"style":31},[33,130906,130907,130911,130917,130931],{"__ignoreMap":31},[36,130908,130909],{"class":38,"line":39},[36,130910,130769],{"class":42},[36,130912,130913,130915],{"class":38,"line":46},[36,130914,130774],{"class":55},[36,130916,16011],{"class":98},[36,130918,130919,130921,130923,130925,130927,130929],{"class":38,"line":52},[36,130920,70902],{"class":109},[36,130922,51869],{"class":98},[36,130924,807],{"class":109},[36,130926,51988],{"class":109},[36,130928,130789],{"class":98},[36,130930,130792],{"class":42},[36,130932,130933],{"class":38,"line":66},[36,130934,2044],{"class":98},[14,130936,130937],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[588,130939,130941],{"id":130940},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1618,130943,130944,130947,130950,130953,130956,130959],{},[574,130945,130946],{},"文件→打开 ：可以打开我们要测量的图片",[574,130948,130949],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[574,130951,130952],{},"右击标尺，把里面的单位改为像素",[574,130954,130955],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[574,130957,130958],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[574,130960,130961],{},"用选区拖动 可以测量大小",[1941,130963],{"style":126782,"src":130964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1618,130966,130967,130970],{},[574,130968,130969],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[574,130971,130972],{},"吸管取色工具",[1941,130974],{"style":126782,"src":130975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[588,130977,130979],{"id":130978},"_916-案例","9.1.6 案例",[571,130981,130982],{},[574,130983,130984],{},"小米商品",[1941,130986],{"style":126782,"src":130987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[26,130989,130990],{"className":126926,"code":130762,"language":126928,"meta":31,"style":31},[33,130991,130992,130996,131002,131016],{"__ignoreMap":31},[36,130993,130994],{"class":38,"line":39},[36,130995,130769],{"class":42},[36,130997,130998,131000],{"class":38,"line":46},[36,130999,130774],{"class":55},[36,131001,16011],{"class":98},[36,131003,131004,131006,131008,131010,131012,131014],{"class":38,"line":52},[36,131005,70902],{"class":109},[36,131007,51869],{"class":98},[36,131009,807],{"class":109},[36,131011,51988],{"class":109},[36,131013,130789],{"class":98},[36,131015,130792],{"class":42},[36,131017,131018],{"class":38,"line":66},[36,131019,2044],{"class":98},[571,131021,131022],{"start":46},[574,131023,131024],{},"快报模块",[1941,131026],{"style":126782,"src":131027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[26,131029,131031],{"className":127673,"code":131030,"language":127675,"meta":31,"style":31},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[33,131032,131033,131038,131053,131058],{"__ignoreMap":31},[36,131034,131035],{"class":38,"line":39},[36,131036,131037],{"class":42},"\u003C!-- HTML 代码示例 -->\n",[36,131039,131040,131042,131044,131046,131048,131051],{"class":38,"line":46},[36,131041,179],{"class":98},[36,131043,52043],{"class":51733},[36,131045,53918],{"class":55},[36,131047,176],{"class":98},[36,131049,131050],{"class":59},"\"example\"",[36,131052,188],{"class":98},[36,131054,131055],{"class":38,"line":52},[36,131056,131057],{"class":98},"  示例内容\n",[36,131059,131060,131062,131064],{"class":38,"line":66},[36,131061,52217],{"class":98},[36,131063,52043],{"class":51733},[36,131065,188],{"class":98},[588,131067,131069],{"id":131068},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[571,131071,131072],{},[574,131073,131074],{},"圆角边框",[14,131076,131077],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1941,131079],{"style":126782,"src":131080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[26,131082,131084],{"className":126926,"code":131083,"language":126928,"meta":31,"style":31},"div {\n  border: 1px solid #ccc;\n}\n",[33,131085,131086,131092,131108],{"__ignoreMap":31},[36,131087,131088,131090],{"class":38,"line":39},[36,131089,52043],{"class":51733},[36,131091,16011],{"class":98},[36,131093,131094,131096,131098,131100,131102,131104,131106],{"class":38,"line":46},[36,131095,71328],{"class":109},[36,131097,51869],{"class":98},[36,131099,833],{"class":109},[36,131101,51924],{"class":163},[36,131103,51953],{"class":109},[36,131105,130318],{"class":109},[36,131107,1772],{"class":98},[36,131109,131110],{"class":38,"line":52},[36,131111,2044],{"class":98},[14,131113,131114],{},"解释:",[1618,131116,131117,131120,131123,131126,131129],{},[574,131118,131119],{},"参数值可以为数值或百分比的形式",[574,131121,131122],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[574,131124,131125],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[574,131127,131128],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[574,131130,131131],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[571,131133,131134],{"start":46},[574,131135,131136],{},"盒子阴影",[26,131138,131140],{"className":126926,"code":131139,"language":126928,"meta":31,"style":31},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[33,131141,131142,131148,131185],{"__ignoreMap":31},[36,131143,131144,131146],{"class":38,"line":39},[36,131145,52043],{"class":51733},[36,131147,16011],{"class":98},[36,131149,131150,131153,131155,131157,131159,131161,131163,131165,131167,131169,131171,131173,131175,131177,131179,131181,131183],{"class":38,"line":46},[36,131151,131152],{"class":109},"  box-shadow",[36,131154,51869],{"class":98},[36,131156,807],{"class":109},[36,131158,15194],{"class":109},[36,131160,51924],{"class":163},[36,131162,2497],{"class":109},[36,131164,51924],{"class":163},[36,131166,79199],{"class":109},[36,131168,621],{"class":98},[36,131170,807],{"class":109},[36,131172,12874],{"class":98},[36,131174,807],{"class":109},[36,131176,12874],{"class":98},[36,131178,807],{"class":109},[36,131180,12874],{"class":98},[36,131182,86642],{"class":109},[36,131184,3170],{"class":98},[36,131186,131187],{"class":38,"line":52},[36,131188,2044],{"class":98},[753,131190,131191,131199],{},[756,131192,131193],{},[759,131194,131195,131197],{},[762,131196,768],{"align":24175},[762,131198,27923],{"align":24175},[800,131200,131201,131209,131217,131225,131233,131241],{},[759,131202,131203,131206],{},[805,131204,131205],{"align":24175},"h-shadow",[805,131207,131208],{"align":24175},"必需,水平阴影的位置,允许负值",[759,131210,131211,131214],{},[805,131212,131213],{"align":24175},"v-shadow",[805,131215,131216],{"align":24175},"必需,垂直阴影的位置,允许负值",[759,131218,131219,131222],{},[805,131220,131221],{"align":24175},"blur",[805,131223,131224],{"align":24175},"可选,模糊距离,就是影子的虚实",[759,131226,131227,131230],{},[805,131228,131229],{"align":24175},"spread",[805,131231,131232],{"align":24175},"可选,阴影尺寸",[759,131234,131235,131238],{},[805,131236,131237],{"align":24175},"color",[805,131239,131240],{"align":24175},"可选,阴影的颜色",[759,131242,131243,131246],{},[805,131244,131245],{"align":24175},"inset",[805,131247,131248],{"align":24175},"可选,将外部阴影(outset)改为内部阴影",[571,131250,131251],{"start":52},[574,131252,131253],{},"文字阴影",[26,131255,131257],{"className":126926,"code":131256,"language":126928,"meta":31,"style":31},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[33,131258,131259,131265,131304],{"__ignoreMap":31},[36,131260,131261,131263],{"class":38,"line":39},[36,131262,14],{"class":51733},[36,131264,16011],{"class":98},[36,131266,131267,131270,131272,131274,131276,131278,131280,131282,131284,131286,131288,131290,131292,131294,131296,131298,131300,131302],{"class":38,"line":46},[36,131268,131269],{"class":109},"  text-shadow",[36,131271,51869],{"class":98},[36,131273,833],{"class":109},[36,131275,51924],{"class":163},[36,131277,25555],{"class":109},[36,131279,51924],{"class":163},[36,131281,15194],{"class":109},[36,131283,51924],{"class":163},[36,131285,79199],{"class":109},[36,131287,621],{"class":98},[36,131289,807],{"class":109},[36,131291,12874],{"class":98},[36,131293,807],{"class":109},[36,131295,12874],{"class":98},[36,131297,807],{"class":109},[36,131299,12874],{"class":98},[36,131301,100953],{"class":109},[36,131303,3170],{"class":98},[36,131305,131306],{"class":38,"line":52},[36,131307,2044],{"class":98},[753,131309,131310,131318],{},[756,131311,131312],{},[759,131313,131314,131316],{},[762,131315,768],{"align":24175},[762,131317,27923],{"align":24175},[800,131319,131320,131326,131333,131340],{},[759,131321,131322,131324],{},[805,131323,131205],{"align":24175},[805,131325,131208],{"align":24175},[759,131327,131328,131330],{},[805,131329,131213],{"align":24175},[805,131331,131332],{"align":24175},"必需,垂直阴影位置,允许负值",[759,131334,131335,131337],{},[805,131336,131221],{"align":24175},[805,131338,131339],{"align":24175},"可选,模糊的距离",[759,131341,131342,131344],{},[805,131343,131237],{"align":24175},[805,131345,131240],{"align":24175},[559,131347,131349],{"id":131348},"_92-浮动","9.2 浮动",[588,131351,131353],{"id":131352},"_921-浮动介绍","9.2.1 浮动介绍",[14,131355,131356],{},"在16.2中详细介绍",[588,131358,131360],{"id":131359},"_922-清除浮动","9.2.2 清除浮动",[571,131362,131363,131366],{},[574,131364,131365],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[574,131367,131368],{},"清除浮动的本质",[14,131370,131371],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,131373,9466],{},[1618,131375,131376,131379,131382],{},[574,131377,131378],{},"如果父盒子本身有高度，则不需要清除浮动",[574,131380,131381],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[574,131383,131384],{},"父级有了高度，就不会影响下面的标准流了",[571,131386,131387],{"start":52},[574,131388,131389],{},"清除浮动样式",[26,131391,131393],{"className":126926,"code":131392,"language":126928,"meta":31,"style":31},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[33,131394,131395,131402,131413,131417,131424,131434],{"__ignoreMap":31},[36,131396,131397,131400],{"class":38,"line":39},[36,131398,131399],{"class":55},".left",[36,131401,16011],{"class":98},[36,131403,131404,131407,131409,131411],{"class":38,"line":46},[36,131405,131406],{"class":109},"  float",[36,131408,51869],{"class":98},[36,131410,24175],{"class":109},[36,131412,1772],{"class":98},[36,131414,131415],{"class":38,"line":52},[36,131416,2044],{"class":98},[36,131418,131419,131422],{"class":38,"line":66},[36,131420,131421],{"class":55},".right",[36,131423,16011],{"class":98},[36,131425,131426,131428,131430,131432],{"class":38,"line":72},[36,131427,131406],{"class":109},[36,131429,51869],{"class":98},[36,131431,72954],{"class":109},[36,131433,1772],{"class":98},[36,131435,131436],{"class":38,"line":82},[36,131437,2044],{"class":98},[753,131439,131440,131448],{},[756,131441,131442],{},[759,131443,131444,131446],{},[762,131445,127390],{"align":24175},[762,131447,27923],{"align":24175},[800,131449,131450,131457,131464],{},[759,131451,131452,131454],{},[805,131453,24175],{"align":24175},[805,131455,131456],{"align":24175},"不允许左侧有浮动元素（清除左侧浮动的影响）",[759,131458,131459,131461],{},[805,131460,72954],{"align":24175},[805,131462,131463],{"align":24175},"不允许右侧有浮动元素（清除右侧浮动的影响）",[759,131465,131466,131469],{},[805,131467,131468],{"align":24175},"both",[805,131470,131471],{"align":24175},"同时清除左右侧浮动的影响",[14,131473,131474],{},"法一",[14,131476,131477],{},"额外标签法也称为隔墙法",[14,131479,131480],{},"使用方式：",[14,131482,131483],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[26,131485,131486],{"className":126926,"code":131392,"language":126928,"meta":31,"style":31},[33,131487,131488,131494,131504,131508,131514,131524],{"__ignoreMap":31},[36,131489,131490,131492],{"class":38,"line":39},[36,131491,131399],{"class":55},[36,131493,16011],{"class":98},[36,131495,131496,131498,131500,131502],{"class":38,"line":46},[36,131497,131406],{"class":109},[36,131499,51869],{"class":98},[36,131501,24175],{"class":109},[36,131503,1772],{"class":98},[36,131505,131506],{"class":38,"line":52},[36,131507,2044],{"class":98},[36,131509,131510,131512],{"class":38,"line":66},[36,131511,131421],{"class":55},[36,131513,16011],{"class":98},[36,131515,131516,131518,131520,131522],{"class":38,"line":72},[36,131517,131406],{"class":109},[36,131519,51869],{"class":98},[36,131521,72954],{"class":109},[36,131523,1772],{"class":98},[36,131525,131526],{"class":38,"line":82},[36,131527,2044],{"class":98},[14,131529,131530],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,131532,131533],{},"优点： 通俗易懂，书写方便",[14,131535,131536],{},"缺点： 添加许多无意义的标签，结构化较差",[14,131538,131539],{},"注意： 要求这个新的空标签必须是块级元素。",[14,131541,131542],{},"法二",[14,131544,131545],{},"父级添加overflow属性",[26,131547,131548],{"className":126926,"code":131392,"language":126928,"meta":31,"style":31},[33,131549,131550,131556,131566,131570,131576,131586],{"__ignoreMap":31},[36,131551,131552,131554],{"class":38,"line":39},[36,131553,131399],{"class":55},[36,131555,16011],{"class":98},[36,131557,131558,131560,131562,131564],{"class":38,"line":46},[36,131559,131406],{"class":109},[36,131561,51869],{"class":98},[36,131563,24175],{"class":109},[36,131565,1772],{"class":98},[36,131567,131568],{"class":38,"line":52},[36,131569,2044],{"class":98},[36,131571,131572,131574],{"class":38,"line":66},[36,131573,131421],{"class":55},[36,131575,16011],{"class":98},[36,131577,131578,131580,131582,131584],{"class":38,"line":72},[36,131579,131406],{"class":109},[36,131581,51869],{"class":98},[36,131583,72954],{"class":109},[36,131585,1772],{"class":98},[36,131587,131588],{"class":38,"line":82},[36,131589,2044],{"class":98},[14,131591,131592],{},"overflow: hidden;",[14,131594,131595],{},"优点：代码简洁",[14,131597,131598],{},"缺点：无法显示溢出的部分",[14,131600,131601],{},"注意：是给父元素添加代码",[14,131603,131604],{},"法三",[14,131606,131607],{},"父级添加after伪元素",[14,131609,131610,131613],{},[131611,131612],"after",{}," 方式是额外标签法的升级版",[14,131615,131616],{},"使用的时候复制就可以",[26,131618,131619],{"className":126926,"code":131392,"language":126928,"meta":31,"style":31},[33,131620,131621,131627,131637,131641,131647,131657],{"__ignoreMap":31},[36,131622,131623,131625],{"class":38,"line":39},[36,131624,131399],{"class":55},[36,131626,16011],{"class":98},[36,131628,131629,131631,131633,131635],{"class":38,"line":46},[36,131630,131406],{"class":109},[36,131632,51869],{"class":98},[36,131634,24175],{"class":109},[36,131636,1772],{"class":98},[36,131638,131639],{"class":38,"line":52},[36,131640,2044],{"class":98},[36,131642,131643,131645],{"class":38,"line":66},[36,131644,131421],{"class":55},[36,131646,16011],{"class":98},[36,131648,131649,131651,131653,131655],{"class":38,"line":72},[36,131650,131406],{"class":109},[36,131652,51869],{"class":98},[36,131654,72954],{"class":109},[36,131656,1772],{"class":98},[36,131658,131659],{"class":38,"line":82},[36,131660,2044],{"class":98},[14,131662,131663],{},"优点：没有增加标签，结构更简单",[14,131665,131666],{},"缺点：照顾低版本浏览器",[14,131668,131669],{},"代表网站： 百度、淘宝网、网易等",[14,131671,131672],{},"法四",[14,131674,131675],{},"父级添加双伪元素",[26,131677,131678],{"className":126926,"code":131392,"language":126928,"meta":31,"style":31},[33,131679,131680,131686,131696,131700,131706,131716],{"__ignoreMap":31},[36,131681,131682,131684],{"class":38,"line":39},[36,131683,131399],{"class":55},[36,131685,16011],{"class":98},[36,131687,131688,131690,131692,131694],{"class":38,"line":46},[36,131689,131406],{"class":109},[36,131691,51869],{"class":98},[36,131693,24175],{"class":109},[36,131695,1772],{"class":98},[36,131697,131698],{"class":38,"line":52},[36,131699,2044],{"class":98},[36,131701,131702,131704],{"class":38,"line":66},[36,131703,131421],{"class":55},[36,131705,16011],{"class":98},[36,131707,131708,131710,131712,131714],{"class":38,"line":72},[36,131709,131406],{"class":109},[36,131711,51869],{"class":98},[36,131713,72954],{"class":109},[36,131715,1772],{"class":98},[36,131717,131718],{"class":38,"line":82},[36,131719,2044],{"class":98},[14,131721,131722],{},"优点：代码更简洁",[14,131724,131666],{},[14,131726,131727],{},"代表网站：小米、腾讯等",[559,131729,131731],{"id":131730},"_93-ps切图","9.3 PS切图",[588,131733,131735],{"id":131734},"_931-常见图片格式","9.3.1 常见图片格式",[753,131737,131738,131748],{},[756,131739,131740],{},[759,131741,131742,131745],{},[762,131743,131744],{"align":24175},"jpg图像格式",[762,131746,131747],{"align":24175},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[800,131749,131750,131758,131766],{},[759,131751,131752,131755],{},[805,131753,131754],{"align":24175},"gif图像格式",[805,131756,131757],{"align":24175},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[759,131759,131760,131763],{},[805,131761,131762],{"align":24175},"png图像格式",[805,131764,131765],{"align":24175},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[759,131767,131768,131771],{},[805,131769,131770],{"align":24175},"PSD图像格式",[805,131772,131773],{"align":24175},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[588,131775,131777],{"id":131776},"_932-图层切图","9.3.2 图层切图",[14,131779,131780],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,131782,131783],{},"按住shift选中两个图层->图层菜单->合并图层",[588,131785,131787],{"id":131786},"_933-切片切图","9.3.3 切片切图",[1618,131789,131790,131793],{},[574,131791,131792],{},"利用切片工具手动划出",[574,131794,131795],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[588,131797,131799],{"id":131798},"_934-切图步骤","9.3.4 切图步骤",[14,131801,131802],{},"用切片工具选中：",[1941,131804],{"style":126782,"src":131805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,131807,131808],{},"文件 -> 导出",[1941,131810],{"style":126782,"src":131811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[537,131813,131814],{},"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":31,"searchDepth":46,"depth":46,"links":131816},[131817,131826,131830],{"id":130253,"depth":46,"text":130254,"children":131818},[131819,131820,131821,131822,131823,131824,131825],{"id":130278,"depth":52,"text":130279},{"id":130569,"depth":52,"text":130570},{"id":130698,"depth":52,"text":130699},{"id":130898,"depth":52,"text":130899},{"id":130940,"depth":52,"text":130941},{"id":130978,"depth":52,"text":130979},{"id":131068,"depth":52,"text":131069},{"id":131348,"depth":46,"text":131349,"children":131827},[131828,131829],{"id":131352,"depth":52,"text":131353},{"id":131359,"depth":52,"text":131360},{"id":131730,"depth":46,"text":131731,"children":131831},[131832,131833,131834,131835],{"id":131734,"depth":52,"text":131735},{"id":131776,"depth":52,"text":131777},{"id":131786,"depth":52,"text":131787},{"id":131798,"depth":52,"text":131799},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130245,"description":542},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131842,"title":131843,"body":131844,"description":542,"extension":543,"meta":132485,"navigation":246,"path":132486,"seo":132487,"stem":132488,"__hash__":132489},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131845,"toc":132473},[131846,131849,131853,131879,131913,131917,131921,131924,131966,131973,131983,131991,131993,131996,131999,132002,132009,132023,132027,132030,132059,132063,132066,132080,132084,132087,132115,132119,132122,132148,132152,132157,132190,132195,132223,132227,132244,132290,132295,132339,132356,132463,132471],[10,131847,131843],{"id":131848},"_10-css规范与学成在线案例",[559,131850,131852],{"id":131851},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[571,131854,131855,131861,131867,131873],{},[574,131856,131857,131860],{},[765,131858,131859],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[574,131862,131863,131866],{},[765,131864,131865],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[574,131868,131869,131872],{},[765,131870,131871],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[574,131874,131875,131878],{},[765,131876,131877],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[26,131880,131881],{"className":126926,"code":130290,"language":126928,"meta":31,"style":31},[33,131882,131883,131887,131893,131909],{"__ignoreMap":31},[36,131884,131885],{"class":38,"line":39},[36,131886,130297],{"class":42},[36,131888,131889,131891],{"class":38,"line":46},[36,131890,52043],{"class":51733},[36,131892,16011],{"class":98},[36,131894,131895,131897,131899,131901,131903,131905,131907],{"class":38,"line":52},[36,131896,71328],{"class":109},[36,131898,51869],{"class":98},[36,131900,833],{"class":109},[36,131902,51924],{"class":163},[36,131904,51953],{"class":109},[36,131906,130318],{"class":109},[36,131908,1772],{"class":98},[36,131910,131911],{"class":38,"line":66},[36,131912,2044],{"class":98},[559,131914,131916],{"id":131915},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[588,131918,131920],{"id":131919},"_1021-header头部制作","10.2.1 header头部制作",[1941,131922],{"style":126782,"src":131923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1618,131925,131926,131933,131940,131946,131953,131960],{},[574,131927,131928,131929,131932],{},"1号是版心盒子 ",[765,131930,131931],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[574,131934,131935,131936,131939],{},"版心盒子 里面包含 2号盒子 ",[765,131937,131938],{},"logo"," 图标",[574,131941,131942,131943,131945],{},"版心盒子 里面包含 3号盒子 ",[765,131944,54145],{}," 导航栏",[574,131947,131948,131949,131952],{},"版心盒子 里面包含 4号盒子 ",[765,131950,131951],{},"search"," 搜索框",[574,131954,131955,131956,131959],{},"版心盒子 里面包含 5号盒子 ",[765,131957,131958],{},"user"," 个人信息",[574,131961,131962,131963],{},"注意，要求里面的 ",[765,131964,131965],{},"4个子盒子 必须都浮动",[571,131967,131968],{},[574,131969,131970],{},[765,131971,131972],{},"导航栏注意点:",[14,131974,131975,131976,131979,131980],{},"实际开发中， ",[765,131977,131978],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[765,131981,131982],{},"用 li 包含链接(li+a)的做法",[1618,131984,131985,131988],{},[574,131986,131987],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[574,131989,131990],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,131992,9466],{},[14,131994,131995],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,131997,131998],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,132000,132001],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[571,132003,132004],{"start":46},[574,132005,132006],{},[765,132007,132008],{},"4号盒子search的细节：",[1618,132010,132011,132014,132017],{},[574,132012,132013],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[574,132015,132016],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[574,132018,132019,132022],{},[33,132020,132021],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[588,132024,132026],{"id":132025},"_1022-banner制作","10.2.2 banner制作",[1941,132028],{"style":126782,"src":132029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1618,132031,132032,132039,132045,132052],{},[574,132033,132034,132035,132038],{},"1号盒子是通栏的大盒子 ",[765,132036,132037],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[574,132040,132041,132042,132044],{},"2号盒子是版心 ",[765,132043,1408],{}," ， 要水平居中对齐",[574,132046,132047,132048,132051],{},"3号盒子版心内，左对齐 ",[765,132049,132050],{},"subnav"," 侧导航栏",[574,132053,132054,132055,132058],{},"4号盒子版心内，右对齐 ",[765,132056,132057],{},"course"," 课程",[588,132060,132062],{"id":132061},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1941,132064],{"style":126782,"src":132065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1618,132067,132068,132071,132074,132077],{},[574,132069,132070],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[574,132072,132073],{},"1号盒子是标题 H3 左侧浮动",[574,132075,132076],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[574,132078,132079],{},"3号盒子 右浮动 mod 修改",[588,132081,132083],{"id":132082},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1941,132085],{"style":126782,"src":132086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1618,132088,132089,132095,132102,132109,132112],{},[574,132090,132091,132092,132094],{},"1号盒子为最大的盒子 ",[765,132093,54146],{}," 版心水平居中对齐",[574,132096,132097,132098,132101],{},"2号盒子为上面部分 ",[765,132099,132100],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[574,132103,132104,132105,132108],{},"3号盒子为底下部分 ",[765,132106,132107],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[574,132110,132111],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[574,132113,132114],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[588,132116,132118],{"id":132117},"_1025-底部模块制作","10.2.5 底部模块制作",[1941,132120],{"style":126782,"src":132121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1618,132123,132124,132131,132134,132141],{},[574,132125,132126,132127,132130],{},"1号盒子通栏大盒子 底部 ",[765,132128,132129],{},"footer"," 给高度 底色是白色",[574,132132,132133],{},"2号盒子版心水平居中",[574,132135,132136,132137,132140],{},"3号盒子版权 ",[765,132138,132139],{},"copyright"," 左对齐",[574,132142,132143,132144,132147],{},"4号盒子 链接组 ",[765,132145,132146],{},"links"," 右对齐",[588,132149,132151],{"id":132150},"_1026-代码模块","10.2.6 代码模块",[571,132153,132154],{},[574,132155,132156],{},"html部分",[26,132158,132160],{"className":127673,"code":132159,"language":127675,"meta":31,"style":31},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[33,132161,132162],{"__ignoreMap":31},[36,132163,132164,132166,132168,132170,132172,132175,132178,132180,132183,132186,132188],{"class":38,"line":39},[36,132165,179],{"class":98},[36,132167,20],{"class":51733},[36,132169,61489],{"class":55},[36,132171,176],{"class":98},[36,132173,132174],{"class":59},"\"https:\u002F\u002Fexample.com\"",[36,132176,132177],{"class":55}," target",[36,132179,176],{"class":98},[36,132181,132182],{"class":59},"\"_blank\"",[36,132184,132185],{"class":98},">链接文字\u003C\u002F",[36,132187,20],{"class":51733},[36,132189,188],{"class":98},[571,132191,132192],{"start":46},[574,132193,132194],{},"css部分",[26,132196,132197],{"className":127673,"code":132159,"language":127675,"meta":31,"style":31},[33,132198,132199],{"__ignoreMap":31},[36,132200,132201,132203,132205,132207,132209,132211,132213,132215,132217,132219,132221],{"class":38,"line":39},[36,132202,179],{"class":98},[36,132204,20],{"class":51733},[36,132206,61489],{"class":55},[36,132208,176],{"class":98},[36,132210,132174],{"class":59},[36,132212,132177],{"class":55},[36,132214,176],{"class":98},[36,132216,132182],{"class":59},[36,132218,132185],{"class":98},[36,132220,20],{"class":51733},[36,132222,188],{"class":98},[588,132224,132226],{"id":132225},"_1027-收获","10.2.7 收获",[571,132228,132229,132232,132235,132238,132241],{},[574,132230,132231],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[574,132233,132234],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[574,132236,132237],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[574,132239,132240],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[574,132242,132243],{},"遗忘代码",[26,132245,132247],{"className":126926,"code":132246,"language":126928,"meta":31,"style":31},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[33,132248,132249,132271,132276,132286],{"__ignoreMap":31},[36,132250,132251,132253,132255,132257,132259,132261,132263,132265,132267,132269],{"class":38,"line":39},[36,132252,52043],{"class":51733},[36,132254,12874],{"class":98},[36,132256,14],{"class":51733},[36,132258,12874],{"class":98},[36,132260,10],{"class":51733},[36,132262,12874],{"class":98},[36,132264,1618],{"class":51733},[36,132266,12874],{"class":98},[36,132268,574],{"class":51733},[36,132270,16011],{"class":98},[36,132272,132273],{"class":38,"line":46},[36,132274,132275],{"class":42},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[36,132277,132278,132280,132282,132284],{"class":38,"line":52},[36,132279,128542],{"class":109},[36,132281,51869],{"class":98},[36,132283,61301],{"class":109},[36,132285,1772],{"class":98},[36,132287,132288],{"class":38,"line":66},[36,132289,2044],{"class":98},[571,132291,132292],{"start":82},[574,132293,132294],{},"html引css的程序",[26,132296,132297],{"className":126926,"code":132246,"language":126928,"meta":31,"style":31},[33,132298,132299,132321,132325,132335],{"__ignoreMap":31},[36,132300,132301,132303,132305,132307,132309,132311,132313,132315,132317,132319],{"class":38,"line":39},[36,132302,52043],{"class":51733},[36,132304,12874],{"class":98},[36,132306,14],{"class":51733},[36,132308,12874],{"class":98},[36,132310,10],{"class":51733},[36,132312,12874],{"class":98},[36,132314,1618],{"class":51733},[36,132316,12874],{"class":98},[36,132318,574],{"class":51733},[36,132320,16011],{"class":98},[36,132322,132323],{"class":38,"line":46},[36,132324,132275],{"class":42},[36,132326,132327,132329,132331,132333],{"class":38,"line":52},[36,132328,128542],{"class":109},[36,132330,51869],{"class":98},[36,132332,61301],{"class":109},[36,132334,1772],{"class":98},[36,132336,132337],{"class":38,"line":66},[36,132338,2044],{"class":98},[571,132340,132341,132344,132347,132350,132353],{"start":88},[574,132342,132343],{},"浮动的盒子不会有外边距合并问题",[574,132345,132346],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[574,132348,132349],{},"ctrl+g快速定位行；shift+alt多个光标",[574,132351,132352],{},"学习上方各个模块的选择器起名方法，以后就这样用",[574,132354,132355],{},"在写选择器时尽量写全一些，例如",[26,132357,132359],{"className":126926,"code":132358,"language":126928,"meta":31,"style":31},"\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",[33,132360,132361,132366,132382,132387,132402,132407,132422,132427,132442,132447],{"__ignoreMap":31},[36,132362,132363],{"class":38,"line":39},[36,132364,132365],{"class":42},"\u002F* 静态定位（默认） *\u002F\n",[36,132367,132368,132371,132373,132375,132377,132380],{"class":38,"line":46},[36,132369,132370],{"class":55},".static",[36,132372,80239],{"class":98},[36,132374,129286],{"class":109},[36,132376,51869],{"class":98},[36,132378,132379],{"class":109},"static",[36,132381,129856],{"class":98},[36,132383,132384],{"class":38,"line":52},[36,132385,132386],{"class":42},"\u002F* 相对定位 *\u002F\n",[36,132388,132389,132392,132394,132396,132398,132400],{"class":38,"line":66},[36,132390,132391],{"class":55},".relative",[36,132393,80239],{"class":98},[36,132395,129286],{"class":109},[36,132397,51869],{"class":98},[36,132399,55196],{"class":109},[36,132401,129856],{"class":98},[36,132403,132404],{"class":38,"line":72},[36,132405,132406],{"class":42},"\u002F* 绝对定位 *\u002F\n",[36,132408,132409,132412,132414,132416,132418,132420],{"class":38,"line":82},[36,132410,132411],{"class":55},".absolute",[36,132413,80239],{"class":98},[36,132415,129286],{"class":109},[36,132417,51869],{"class":98},[36,132419,55263],{"class":109},[36,132421,129856],{"class":98},[36,132423,132424],{"class":38,"line":88},[36,132425,132426],{"class":42},"\u002F* 固定定位 *\u002F\n",[36,132428,132429,132432,132434,132436,132438,132440],{"class":38,"line":113},[36,132430,132431],{"class":55},".fixed",[36,132433,80239],{"class":98},[36,132435,129286],{"class":109},[36,132437,51869],{"class":98},[36,132439,86665],{"class":109},[36,132441,129856],{"class":98},[36,132443,132444],{"class":38,"line":119},[36,132445,132446],{"class":42},"\u002F* 粘性定位 *\u002F\n",[36,132448,132449,132452,132454,132456,132458,132461],{"class":38,"line":131},[36,132450,132451],{"class":55},".sticky",[36,132453,80239],{"class":98},[36,132455,129286],{"class":109},[36,132457,51869],{"class":98},[36,132459,132460],{"class":109},"sticky",[36,132462,129856],{"class":98},[571,132464,132465,132468],{"start":147},[574,132466,132467],{},"一定要用好注释",[574,132469,132470],{},"浮动的盒子不会有外边距合并的问题",[537,132472,131814],{},{"title":31,"searchDepth":46,"depth":46,"links":132474},[132475,132476],{"id":131851,"depth":46,"text":131852},{"id":131915,"depth":46,"text":131916,"children":132477},[132478,132479,132480,132481,132482,132483,132484],{"id":131919,"depth":52,"text":131920},{"id":132025,"depth":52,"text":132026},{"id":132061,"depth":52,"text":132062},{"id":132082,"depth":52,"text":132083},{"id":132117,"depth":52,"text":132118},{"id":132150,"depth":52,"text":132151},{"id":132225,"depth":52,"text":132226},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131843,"description":542},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132491,"title":132492,"body":132493,"description":542,"extension":543,"meta":133979,"navigation":246,"path":133980,"seo":133981,"stem":133982,"__hash__":133983},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132494,"toc":133971},[132495,132498,132502,132506,132517,132521,132538,132582,132615,132618,132635,132638,132641,132685,132689,132693,132696,132699,132703,132706,132717,132780,132821,132824,132839,132893,132901,132904,132915,132969,132995,132998,133011,133065,133097,133151,133174,133228,133231,133234,133241,133295,133316,133370,133373,133376,133461,133469,133526,133549,133553,133556,133574,133578,133597,133651,133689,133693,133696,133699,133721,133725,133733,133736,133741,133752,133755,133759,133773,133817,133820,133824,133827,133832,133858,133863,133940,133943,133947,133950,133953,133956,133959,133962,133965,133968],[10,132496,132492],{"id":132497},"_11-传统布局与定位体系",[559,132499,132501],{"id":132500},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[588,132503,132505],{"id":132504},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1618,132507,132508,132511,132514],{},[574,132509,132510],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[574,132512,132513],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[574,132515,132516],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[588,132518,132520],{"id":132519},"_1112-浮动","11.1.2 浮动",[1618,132522,132523,132526,132529,132532,132535],{},[574,132524,132525],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[574,132527,132528],{},"浮动可以改变元素标签默认的排列方式",[574,132530,132531],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[574,132533,132534],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[574,132536,132537],{},"在使用行内块转换时盒子之间是有空隙的",[26,132539,132540],{"className":126926,"code":131392,"language":126928,"meta":31,"style":31},[33,132541,132542,132548,132558,132562,132568,132578],{"__ignoreMap":31},[36,132543,132544,132546],{"class":38,"line":39},[36,132545,131399],{"class":55},[36,132547,16011],{"class":98},[36,132549,132550,132552,132554,132556],{"class":38,"line":46},[36,132551,131406],{"class":109},[36,132553,51869],{"class":98},[36,132555,24175],{"class":109},[36,132557,1772],{"class":98},[36,132559,132560],{"class":38,"line":52},[36,132561,2044],{"class":98},[36,132563,132564,132566],{"class":38,"line":66},[36,132565,131421],{"class":55},[36,132567,16011],{"class":98},[36,132569,132570,132572,132574,132576],{"class":38,"line":72},[36,132571,131406],{"class":109},[36,132573,51869],{"class":98},[36,132575,72954],{"class":109},[36,132577,1772],{"class":98},[36,132579,132580],{"class":38,"line":82},[36,132581,2044],{"class":98},[753,132583,132584,132592],{},[756,132585,132586],{},[759,132587,132588,132590],{},[762,132589,127390],{"align":24175},[762,132591,27923],{"align":24175},[800,132593,132594,132601,132608],{},[759,132595,132596,132598],{},[805,132597,55169],{"align":24175},[805,132599,132600],{"align":24175},"元素不浮动（默认值）",[759,132602,132603,132605],{},[805,132604,24175],{"align":24175},[805,132606,132607],{"align":24175},"元素向左浮动",[759,132609,132610,132612],{},[805,132611,72954],{"align":24175},[805,132613,132614],{"align":24175},"元素向右浮动",[14,132616,132617],{},"浮动重点：",[1618,132619,132620,132623,132626,132629,132632],{},[574,132621,132622],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[574,132624,132625],{},"浮动的元素会一行内显示并且元素顶部对齐",[574,132627,132628],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[574,132630,132631],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[574,132633,132634],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,132636,132637],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,132639,132640],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[26,132642,132643],{"className":126926,"code":131392,"language":126928,"meta":31,"style":31},[33,132644,132645,132651,132661,132665,132671,132681],{"__ignoreMap":31},[36,132646,132647,132649],{"class":38,"line":39},[36,132648,131399],{"class":55},[36,132650,16011],{"class":98},[36,132652,132653,132655,132657,132659],{"class":38,"line":46},[36,132654,131406],{"class":109},[36,132656,51869],{"class":98},[36,132658,24175],{"class":109},[36,132660,1772],{"class":98},[36,132662,132663],{"class":38,"line":52},[36,132664,2044],{"class":98},[36,132666,132667,132669],{"class":38,"line":66},[36,132668,131421],{"class":55},[36,132670,16011],{"class":98},[36,132672,132673,132675,132677,132679],{"class":38,"line":72},[36,132674,131406],{"class":109},[36,132676,51869],{"class":98},[36,132678,72954],{"class":109},[36,132680,1772],{"class":98},[36,132682,132683],{"class":38,"line":82},[36,132684,2044],{"class":98},[588,132686,132688],{"id":132687},"_1113-定位","11.1.3 定位",[22437,132690,132692],{"id":132691},"_11131-使用场景","11.1.3.1 使用场景",[14,132694,132695],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,132697,132698],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22437,132700,132702],{"id":132701},"_11132-定位组成","11.1.3.2 定位组成",[14,132704,132705],{},"定位 = 定位模式 + 边偏移",[571,132707,132708],{},[574,132709,132710,132713,132714],{},[765,132711,132712],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[765,132715,132716],{},"定位模式",[26,132718,132720],{"className":126926,"code":132719,"language":126928,"meta":31,"style":31},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[33,132721,132722,132728,132742,132759,132776],{"__ignoreMap":31},[36,132723,132724,132726],{"class":38,"line":39},[36,132725,130774],{"class":55},[36,132727,16011],{"class":98},[36,132729,132730,132733,132735,132737,132739],{"class":38,"line":46},[36,132731,132732],{"class":109},"  position",[36,132734,51869],{"class":98},[36,132736,55196],{"class":109},[36,132738,130789],{"class":98},[36,132740,132741],{"class":42},"\u002F* 定位模式 *\u002F\n",[36,132743,132744,132747,132749,132751,132753,132756],{"class":38,"line":52},[36,132745,132746],{"class":109},"  top",[36,132748,51869],{"class":98},[36,132750,1060],{"class":109},[36,132752,51924],{"class":163},[36,132754,132755],{"class":98},";           ",[36,132757,132758],{"class":42},"\u002F* 边偏移：上 *\u002F\n",[36,132760,132761,132764,132766,132768,132770,132773],{"class":38,"line":66},[36,132762,132763],{"class":109},"  left",[36,132765,51869],{"class":98},[36,132767,1313],{"class":109},[36,132769,51924],{"class":163},[36,132771,132772],{"class":98},";          ",[36,132774,132775],{"class":42},"\u002F* 边偏移：左 *\u002F\n",[36,132777,132778],{"class":38,"line":72},[36,132779,2044],{"class":98},[753,132781,132782,132791],{},[756,132783,132784],{},[759,132785,132786,132788],{},[762,132787,768],{"align":24175},[762,132789,132790],{"align":24175},"语义",[800,132792,132793,132800,132807,132814],{},[759,132794,132795,132797],{},[805,132796,132379],{"align":24175},[805,132798,132799],{"align":24175},"静态定位",[759,132801,132802,132804],{},[805,132803,55196],{"align":24175},[805,132805,132806],{"align":24175},"相对定位",[759,132808,132809,132811],{},[805,132810,55263],{"align":24175},[805,132812,132813],{"align":24175},"绝对定位",[759,132815,132816,132818],{},[805,132817,86665],{"align":24175},[805,132819,132820],{"align":24175},"固定定位",[14,132822,132823],{},"（1）静态定位：",[1618,132825,132826,132837],{},[574,132827,132828,132829,132832,132833,132836],{},"静态定位是元素的 ",[765,132830,132831],{},"默认定位方式"," ， ",[765,132834,132835],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[574,132838,5632],{},[26,132840,132841],{"className":126926,"code":132719,"language":126928,"meta":31,"style":31},[33,132842,132843,132849,132861,132875,132889],{"__ignoreMap":31},[36,132844,132845,132847],{"class":38,"line":39},[36,132846,130774],{"class":55},[36,132848,16011],{"class":98},[36,132850,132851,132853,132855,132857,132859],{"class":38,"line":46},[36,132852,132732],{"class":109},[36,132854,51869],{"class":98},[36,132856,55196],{"class":109},[36,132858,130789],{"class":98},[36,132860,132741],{"class":42},[36,132862,132863,132865,132867,132869,132871,132873],{"class":38,"line":52},[36,132864,132746],{"class":109},[36,132866,51869],{"class":98},[36,132868,1060],{"class":109},[36,132870,51924],{"class":163},[36,132872,132755],{"class":98},[36,132874,132758],{"class":42},[36,132876,132877,132879,132881,132883,132885,132887],{"class":38,"line":66},[36,132878,132763],{"class":109},[36,132880,51869],{"class":98},[36,132882,1313],{"class":109},[36,132884,51924],{"class":163},[36,132886,132772],{"class":98},[36,132888,132775],{"class":42},[36,132890,132891],{"class":38,"line":72},[36,132892,2044],{"class":98},[1618,132894,132895,132898],{},[574,132896,132897],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[574,132899,132900],{},"静态定位在布局时我们几乎不用的",[14,132902,132903],{},"（2）相对定位",[1618,132905,132906,132913],{},[574,132907,132908,132909,132912],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[765,132910,132911],{},"原来的位置"," 来说的（自恋型）",[574,132914,5632],{},[26,132916,132917],{"className":126926,"code":132719,"language":126928,"meta":31,"style":31},[33,132918,132919,132925,132937,132951,132965],{"__ignoreMap":31},[36,132920,132921,132923],{"class":38,"line":39},[36,132922,130774],{"class":55},[36,132924,16011],{"class":98},[36,132926,132927,132929,132931,132933,132935],{"class":38,"line":46},[36,132928,132732],{"class":109},[36,132930,51869],{"class":98},[36,132932,55196],{"class":109},[36,132934,130789],{"class":98},[36,132936,132741],{"class":42},[36,132938,132939,132941,132943,132945,132947,132949],{"class":38,"line":52},[36,132940,132746],{"class":109},[36,132942,51869],{"class":98},[36,132944,1060],{"class":109},[36,132946,51924],{"class":163},[36,132948,132755],{"class":98},[36,132950,132758],{"class":42},[36,132952,132953,132955,132957,132959,132961,132963],{"class":38,"line":66},[36,132954,132763],{"class":109},[36,132956,51869],{"class":98},[36,132958,1313],{"class":109},[36,132960,51924],{"class":163},[36,132962,132772],{"class":98},[36,132964,132775],{"class":42},[36,132966,132967],{"class":38,"line":72},[36,132968,2044],{"class":98},[1618,132970,132971],{},[574,132972,132973,132974,132976,132977,132979,132980,132983,132984,132987,132988,132990,132991,132994],{},"相对定位的特点：",[54148,132975],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[54148,132978],{},"  ② ",[765,132981,132982],{},"原来"," 在标准流的 ",[765,132985,132986],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[54148,132989],{},"  ③因此， ",[765,132992,132993],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,132996,132997],{},"（3）绝对定位",[1618,132999,133000,133009],{},[574,133001,133002,133004,133005,133008],{},[765,133003,132813],{}," 是元素在移动位置的时候，是相对于它 ",[765,133006,133007],{},"祖先元素"," 来说的（拼爹型）",[574,133010,5632],{},[26,133012,133013],{"className":126926,"code":132719,"language":126928,"meta":31,"style":31},[33,133014,133015,133021,133033,133047,133061],{"__ignoreMap":31},[36,133016,133017,133019],{"class":38,"line":39},[36,133018,130774],{"class":55},[36,133020,16011],{"class":98},[36,133022,133023,133025,133027,133029,133031],{"class":38,"line":46},[36,133024,132732],{"class":109},[36,133026,51869],{"class":98},[36,133028,55196],{"class":109},[36,133030,130789],{"class":98},[36,133032,132741],{"class":42},[36,133034,133035,133037,133039,133041,133043,133045],{"class":38,"line":52},[36,133036,132746],{"class":109},[36,133038,51869],{"class":98},[36,133040,1060],{"class":109},[36,133042,51924],{"class":163},[36,133044,132755],{"class":98},[36,133046,132758],{"class":42},[36,133048,133049,133051,133053,133055,133057,133059],{"class":38,"line":66},[36,133050,132763],{"class":109},[36,133052,51869],{"class":98},[36,133054,1313],{"class":109},[36,133056,51924],{"class":163},[36,133058,132772],{"class":98},[36,133060,132775],{"class":42},[36,133062,133063],{"class":38,"line":72},[36,133064,2044],{"class":98},[1618,133066,133067,133082,133091,133094],{},[574,133068,133069,133070,133072,133073,133075,133076,133078,133079,133081],{},"绝对定位的特点：",[54148,133071],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[54148,133074],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[54148,133077],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[54148,133080],{},"  (4)固定定位",[574,133083,133084,133086,133087,133090],{},[765,133085,132820],{}," 是元素 ",[765,133088,133089],{},"固定于浏览器可视区的位置"," 。（认死理型）",[574,133092,133093],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[574,133095,133096],{},"语法:",[26,133098,133099],{"className":126926,"code":132719,"language":126928,"meta":31,"style":31},[33,133100,133101,133107,133119,133133,133147],{"__ignoreMap":31},[36,133102,133103,133105],{"class":38,"line":39},[36,133104,130774],{"class":55},[36,133106,16011],{"class":98},[36,133108,133109,133111,133113,133115,133117],{"class":38,"line":46},[36,133110,132732],{"class":109},[36,133112,51869],{"class":98},[36,133114,55196],{"class":109},[36,133116,130789],{"class":98},[36,133118,132741],{"class":42},[36,133120,133121,133123,133125,133127,133129,133131],{"class":38,"line":52},[36,133122,132746],{"class":109},[36,133124,51869],{"class":98},[36,133126,1060],{"class":109},[36,133128,51924],{"class":163},[36,133130,132755],{"class":98},[36,133132,132758],{"class":42},[36,133134,133135,133137,133139,133141,133143,133145],{"class":38,"line":66},[36,133136,132763],{"class":109},[36,133138,51869],{"class":98},[36,133140,1313],{"class":109},[36,133142,51924],{"class":163},[36,133144,132772],{"class":98},[36,133146,132775],{"class":42},[36,133148,133149],{"class":38,"line":72},[36,133150,2044],{"class":98},[1618,133152,133153,133162],{},[574,133154,133155,133156,133158,133159,133161],{},"特点:",[54148,133157],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[54148,133160],{},"  ②固定定位不再占有原先的位置,完全脱标",[574,133163,133164,133165,133167,133168,133170,133171,133173],{},"固定在版心位置的方法:",[54148,133166],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[54148,133169],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[54148,133172],{},"  实例：",[26,133175,133176],{"className":126926,"code":132719,"language":126928,"meta":31,"style":31},[33,133177,133178,133184,133196,133210,133224],{"__ignoreMap":31},[36,133179,133180,133182],{"class":38,"line":39},[36,133181,130774],{"class":55},[36,133183,16011],{"class":98},[36,133185,133186,133188,133190,133192,133194],{"class":38,"line":46},[36,133187,132732],{"class":109},[36,133189,51869],{"class":98},[36,133191,55196],{"class":109},[36,133193,130789],{"class":98},[36,133195,132741],{"class":42},[36,133197,133198,133200,133202,133204,133206,133208],{"class":38,"line":52},[36,133199,132746],{"class":109},[36,133201,51869],{"class":98},[36,133203,1060],{"class":109},[36,133205,51924],{"class":163},[36,133207,132755],{"class":98},[36,133209,132758],{"class":42},[36,133211,133212,133214,133216,133218,133220,133222],{"class":38,"line":66},[36,133213,132763],{"class":109},[36,133215,51869],{"class":98},[36,133217,1313],{"class":109},[36,133219,51924],{"class":163},[36,133221,132772],{"class":98},[36,133223,132775],{"class":42},[36,133225,133226],{"class":38,"line":72},[36,133227,2044],{"class":98},[1941,133229],{"style":126782,"src":133230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,133232,133233],{},"(5)粘性定位",[1618,133235,133236,133239],{},[574,133237,133238],{},"粘性定位可以被认为是相对定位和固定定位的混合",[574,133240,5632],{},[26,133242,133243],{"className":126926,"code":132719,"language":126928,"meta":31,"style":31},[33,133244,133245,133251,133263,133277,133291],{"__ignoreMap":31},[36,133246,133247,133249],{"class":38,"line":39},[36,133248,130774],{"class":55},[36,133250,16011],{"class":98},[36,133252,133253,133255,133257,133259,133261],{"class":38,"line":46},[36,133254,132732],{"class":109},[36,133256,51869],{"class":98},[36,133258,55196],{"class":109},[36,133260,130789],{"class":98},[36,133262,132741],{"class":42},[36,133264,133265,133267,133269,133271,133273,133275],{"class":38,"line":52},[36,133266,132746],{"class":109},[36,133268,51869],{"class":98},[36,133270,1060],{"class":109},[36,133272,51924],{"class":163},[36,133274,132755],{"class":98},[36,133276,132758],{"class":42},[36,133278,133279,133281,133283,133285,133287,133289],{"class":38,"line":66},[36,133280,132763],{"class":109},[36,133282,51869],{"class":98},[36,133284,1313],{"class":109},[36,133286,51924],{"class":163},[36,133288,132772],{"class":98},[36,133290,132775],{"class":42},[36,133292,133293],{"class":38,"line":72},[36,133294,2044],{"class":98},[1618,133296,133297],{},[574,133298,133299,133300,133302,133303,133305,133306,133308,133309,133312,133313,133315],{},"粘性定位的特点：",[54148,133301],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[54148,133304],{},"  ②粘性定位占有原先的位置（相对定位特点）",[54148,133307],{},"  ③必须添加 top 、left、right、bottom ",[765,133310,133311],{},"其中一个"," 才有效",[54148,133314],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[26,133317,133318],{"className":126926,"code":132719,"language":126928,"meta":31,"style":31},[33,133319,133320,133326,133338,133352,133366],{"__ignoreMap":31},[36,133321,133322,133324],{"class":38,"line":39},[36,133323,130774],{"class":55},[36,133325,16011],{"class":98},[36,133327,133328,133330,133332,133334,133336],{"class":38,"line":46},[36,133329,132732],{"class":109},[36,133331,51869],{"class":98},[36,133333,55196],{"class":109},[36,133335,130789],{"class":98},[36,133337,132741],{"class":42},[36,133339,133340,133342,133344,133346,133348,133350],{"class":38,"line":52},[36,133341,132746],{"class":109},[36,133343,51869],{"class":98},[36,133345,1060],{"class":109},[36,133347,51924],{"class":163},[36,133349,132755],{"class":98},[36,133351,132758],{"class":42},[36,133353,133354,133356,133358,133360,133362,133364],{"class":38,"line":66},[36,133355,132763],{"class":109},[36,133357,51869],{"class":98},[36,133359,1313],{"class":109},[36,133361,51924],{"class":163},[36,133363,132772],{"class":98},[36,133365,132775],{"class":42},[36,133367,133368],{"class":38,"line":72},[36,133369,2044],{"class":98},[1941,133371],{"style":126782,"src":133372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,133374,133375],{},"(6)总结",[753,133377,133378,133393],{},[756,133379,133380],{},[759,133381,133382,133384,133387,133390],{},[762,133383,132716],{"align":24175},[762,133385,133386],{"align":24175},"是否脱标",[762,133388,133389],{"align":24175},"移动位置",[762,133391,133392],{"align":24175},"是否常用",[800,133394,133395,133408,133422,133436,133449],{},[759,133396,133397,133400,133402,133405],{},[805,133398,133399],{"align":24175},"Static 静态定位",[805,133401,105109],{"align":24175},[805,133403,133404],{"align":24175},"不能使用边偏移",[805,133406,133407],{"align":24175},"很少",[759,133409,133410,133413,133416,133419],{},[805,133411,133412],{"align":24175},"Relative 相对定位",[805,133414,133415],{"align":24175},"否(占有位置)",[805,133417,133418],{"align":24175},"相对于自身位置移动",[805,133420,133421],{"align":24175},"基本单独使用",[759,133423,133424,133427,133430,133433],{},[805,133425,133426],{"align":24175},"Absolute 绝对定位",[805,133428,133429],{"align":24175},"是(不占有位置)",[805,133431,133432],{"align":24175},"带有定位的父级",[805,133434,133435],{"align":24175},"要和定位父级元素搭配使用",[759,133437,133438,133441,133443,133446],{},[805,133439,133440],{"align":24175},"Fixed 固定定位",[805,133442,133429],{"align":24175},[805,133444,133445],{"align":24175},"浏览器可视区",[805,133447,133448],{"align":24175},"单独使用,不需要父级",[759,133450,133451,133454,133456,133458],{},[805,133452,133453],{"align":24175},"Sticky 粘性定位",[805,133455,133415],{"align":24175},[805,133457,133445],{"align":24175},[805,133459,133460],{"align":24175},"当前阶段少",[571,133462,133463],{"start":46},[574,133464,133465,133468],{},[765,133466,133467],{},"边偏移"," 则决定了该元素的最终位置",[753,133470,133471,133482],{},[756,133472,133473],{},[759,133474,133475,133478,133480],{},[762,133476,133477],{"align":24175},"边偏移属性",[762,133479,27926],{"align":24175},[762,133481,27923],{"align":24175},[800,133483,133484,133495,133506,133516],{},[759,133485,133486,133489,133492],{},[805,133487,133488],{"align":24175},"top",[805,133490,133491],{"align":24175},"top: 80px;",[805,133493,133494],{"align":24175},"顶端偏移量，定义元素相对于父元素上边线的距离",[759,133496,133497,133500,133503],{},[805,133498,133499],{"align":24175},"bottom",[805,133501,133502],{"align":24175},"bottom: 80px ;",[805,133504,133505],{"align":24175},"底部偏移量，定义元素相对于其父元素下边线的距离",[759,133507,133508,133510,133513],{},[805,133509,24175],{"align":24175},[805,133511,133512],{"align":24175},"left: 80px ;",[805,133514,133515],{"align":24175},"左侧偏移量，定义元素相对于其父元素左边线的距离",[759,133517,133518,133520,133523],{},[805,133519,72954],{"align":24175},[805,133521,133522],{"align":24175},"right: 80px ;",[805,133524,133525],{"align":24175},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1618,133527,133528],{},[574,133529,9466,133530,133532,133533,133535,133536,133538,133539,133542,133543,133545,133546,133548],{},[54148,133531],{},"  ① ",[765,133534,133467],{}," 需要和 ",[765,133537,132716],{}," 联合使用， ",[765,133540,133541],{},"单独使用无效"," ；",[54148,133544],{},"  ②top和bottom不要同时使用",[54148,133547],{},"  ③left和right不要同时使用",[22437,133550,133552],{"id":133551},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,133554,133555],{},"子级是绝对定位的话，父级要用相对定位",[1618,133557,133558,133561,133564,133567],{},[574,133559,133560],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[574,133562,133563],{},"父盒子需要加定位限制子盒子在父盒子内显示",[574,133565,133566],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[574,133568,133569,133570,133573],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[765,133571,133572],{},"子绝父绝"," 也会遇到",[22437,133575,133577],{"id":133576},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1618,133579,133580,133595],{},[574,133581,133582,133583,133586,133587,133590,133591,133594],{},"在使用 ",[765,133584,133585],{},"定位"," 布局时，可能会 ",[765,133588,133589],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[765,133592,133593],{},"z-index"," 来控制盒子的前后次序 (z轴)",[574,133596,5632],{},[26,133598,133599],{"className":126926,"code":132719,"language":126928,"meta":31,"style":31},[33,133600,133601,133607,133619,133633,133647],{"__ignoreMap":31},[36,133602,133603,133605],{"class":38,"line":39},[36,133604,130774],{"class":55},[36,133606,16011],{"class":98},[36,133608,133609,133611,133613,133615,133617],{"class":38,"line":46},[36,133610,132732],{"class":109},[36,133612,51869],{"class":98},[36,133614,55196],{"class":109},[36,133616,130789],{"class":98},[36,133618,132741],{"class":42},[36,133620,133621,133623,133625,133627,133629,133631],{"class":38,"line":52},[36,133622,132746],{"class":109},[36,133624,51869],{"class":98},[36,133626,1060],{"class":109},[36,133628,51924],{"class":163},[36,133630,132755],{"class":98},[36,133632,132758],{"class":42},[36,133634,133635,133637,133639,133641,133643,133645],{"class":38,"line":66},[36,133636,132763],{"class":109},[36,133638,51869],{"class":98},[36,133640,1313],{"class":109},[36,133642,51924],{"class":163},[36,133644,132772],{"class":98},[36,133646,132775],{"class":42},[36,133648,133649],{"class":38,"line":72},[36,133650,2044],{"class":98},[1618,133652,133653],{},[574,133654,133655,133656,133532,133658,133660,133661,128089,133664,82971,133667,133669,133670,133672,133673,133676,133677,133542,133680,133682,133683,133686,133688],{},"z-index的特性",[54148,133657],{},[765,133659,127390],{}," ： ",[765,133662,133663],{},"正整数",[765,133665,133666],{},"负整数",[765,133668,807],{}," ，默认值是 0，数值越大，盒子越靠上；",[54148,133671],{},"  ②如果 ",[765,133674,133675],{},"属性值相同"," ，则按照书写顺序， ",[765,133678,133679],{},"后来居上",[54148,133681],{},"  ③数字后面 ",[765,133684,133685],{},"不能加单位",[54148,133687],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22437,133690,133692],{"id":133691},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,133694,133695],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,133697,133698],{},"方法:",[1618,133700,133701,133711],{},[574,133702,133703,133704,133707,133708],{},"left: 50%; 让 ",[765,133705,133706],{},"盒子的左侧"," 移动到 ",[765,133709,133710],{},"父级元素的水平中心位置",[574,133712,133713,133714,133717,133718],{},"margin-left: -100px; 让盒子 ",[765,133715,133716],{},"向左"," 移动 ",[765,133719,133720],{},"自身宽度的一半",[22437,133722,133724],{"id":133723},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[571,133726,133727,133730],{},[574,133728,133729],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[574,133731,133732],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,133734,133735],{},"也就是说绝对定位和固定定位和浮动类似",[571,133737,133738],{"start":52},[574,133739,133740],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1618,133742,133743,133746,133749],{},[574,133744,133745],{},"可以用inline-block 转换为行内块",[574,133747,133748],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[574,133750,133751],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,133753,133754],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22437,133756,133758],{"id":133757},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[571,133760,133761,133764,133767,133770],{},[574,133762,133763],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[574,133765,133766],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[574,133768,133769],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[574,133771,133772],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[26,133774,133775],{"className":126926,"code":131392,"language":126928,"meta":31,"style":31},[33,133776,133777,133783,133793,133797,133803,133813],{"__ignoreMap":31},[36,133778,133779,133781],{"class":38,"line":39},[36,133780,131399],{"class":55},[36,133782,16011],{"class":98},[36,133784,133785,133787,133789,133791],{"class":38,"line":46},[36,133786,131406],{"class":109},[36,133788,51869],{"class":98},[36,133790,24175],{"class":109},[36,133792,1772],{"class":98},[36,133794,133795],{"class":38,"line":52},[36,133796,2044],{"class":98},[36,133798,133799,133801],{"class":38,"line":66},[36,133800,131421],{"class":55},[36,133802,16011],{"class":98},[36,133804,133805,133807,133809,133811],{"class":38,"line":72},[36,133806,131406],{"class":109},[36,133808,51869],{"class":98},[36,133810,72954],{"class":109},[36,133812,1772],{"class":98},[36,133814,133815],{"class":38,"line":82},[36,133816,2044],{"class":98},[1941,133818],{"style":126782,"src":133819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22437,133821,133823],{"id":133822},"_11138-轮播图","11.1.3.8 轮播图",[1941,133825],{"style":126782,"src":133826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[571,133828,133829],{},[574,133830,133831],{},"制作顺序:",[1618,133833,133834,133837,133840,133849],{},[574,133835,133836],{},"大盒子我们类名为： tb-promo 淘宝广告",[574,133838,133839],{},"里面先放一张图片",[574,133841,133842,133843,133845,133846,133848],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[54148,133844],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[54148,133847],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[574,133850,133851,133852,133854,133855,133857],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[54148,133853],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[54148,133856],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[571,133859,133860],{"start":46},[574,133861,133862],{},"代码模块",[26,133864,133866],{"className":126926,"code":133865,"language":126928,"meta":31,"style":31},"\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",[33,133867,133868,133873,133880,133890,133900,133910,133914,133919,133926,133936],{"__ignoreMap":31},[36,133869,133870],{"class":38,"line":39},[36,133871,133872],{"class":42},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[36,133874,133875,133878],{"class":38,"line":46},[36,133876,133877],{"class":55},".son",[36,133879,16011],{"class":98},[36,133881,133882,133884,133886,133888],{"class":38,"line":52},[36,133883,132732],{"class":109},[36,133885,51869],{"class":98},[36,133887,55263],{"class":109},[36,133889,1772],{"class":98},[36,133891,133892,133894,133896,133898],{"class":38,"line":66},[36,133893,132746],{"class":109},[36,133895,51869],{"class":98},[36,133897,807],{"class":109},[36,133899,1772],{"class":98},[36,133901,133902,133904,133906,133908],{"class":38,"line":72},[36,133903,132763],{"class":109},[36,133905,51869],{"class":98},[36,133907,807],{"class":109},[36,133909,1772],{"class":98},[36,133911,133912],{"class":38,"line":82},[36,133913,2044],{"class":98},[36,133915,133916],{"class":38,"line":88},[36,133917,133918],{"class":42},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[36,133920,133921,133924],{"class":38,"line":113},[36,133922,133923],{"class":55},".father",[36,133925,16011],{"class":98},[36,133927,133928,133930,133932,133934],{"class":38,"line":119},[36,133929,132732],{"class":109},[36,133931,51869],{"class":98},[36,133933,55196],{"class":109},[36,133935,1772],{"class":98},[36,133937,133938],{"class":38,"line":131},[36,133939,2044],{"class":98},[14,133941,133942],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[588,133944,133946],{"id":133945},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1941,133948],{"style":126782,"src":133949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,133951,133952],{},"✨ 黄金口诀：",[14,133954,133955],{},"\"TOP正下负上，LEFT正右负左\"",[14,133957,133958],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,133960,133961],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,133963,133964],{},"✨ 简单记：",[14,133966,133967],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[537,133969,133970],{},"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":31,"searchDepth":46,"depth":46,"links":133972},[133973],{"id":132500,"depth":46,"text":132501,"children":133974},[133975,133976,133977,133978],{"id":132504,"depth":52,"text":132505},{"id":132519,"depth":52,"text":132520},{"id":132687,"depth":52,"text":132688},{"id":133945,"depth":52,"text":133946},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132492,"description":542},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133985,"title":133986,"body":133987,"description":542,"extension":543,"meta":135410,"navigation":246,"path":135411,"seo":135412,"stem":135413,"__hash__":135414},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133988,"toc":135389},[133989,133992,133996,134004,134008,134013,134021,134033,134037,134042,134050,134061,134065,134070,134111,134119,134123,134126,134129,134132,134226,134229,134323,134326,134420,134423,134426,134461,134464,134467,134497,134500,134503,134506,134509,134512,134515,134518,134588,134591,134595,134599,134640,134644,134650,134653,134656,134660,134663,134666,134669,134750,134753,134756,134760,134764,134767,134770,134773,134776,134779,134785,134794,134798,134817,134821,134831,134834,134837,134840,134843,134846,134849,134852,134855,134864,134868,134877,134880,134885,134938,134943,135109,135112,135115,135120,135123,135126,135129,135132,135137,135285,135288,135291,135296,135299,135304,135338,135341,135344,135348,135351,135358,135361,135364,135367,135370,135373,135376,135379,135383,135386],[10,133990,133986],{"id":133991},"_12-显示隐藏与图形资源",[559,133993,133995],{"id":133994},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1618,133997,133998,134001],{},[574,133999,134000],{},"目的:让一个元素在页面中消失或者显示出来",[574,134002,134003],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[588,134005,134007],{"id":134006},"_1211-display-显示","12.1.1 display 显示",[571,134009,134010],{},[574,134011,134012],{},"display 设置或检索对象是否及如何显示",[1618,134014,134015,134018],{},[574,134016,134017],{},"display: none;隐藏对象",[574,134019,134020],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[571,134022,134023,134030],{"start":46},[574,134024,134025,134026,134029],{},"特点： display 隐藏元素后， ",[765,134027,134028],{},"不再占"," 有原来的位置",[574,134031,134032],{},"在js中使用非常的广泛",[588,134034,134036],{"id":134035},"_1212-visibility可见性","12.1.2 visibility可见性",[571,134038,134039],{},[574,134040,134041],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1618,134043,134044,134047],{},[574,134045,134046],{},"visibility： visible；元素可见",[574,134048,134049],{},"visibility：hidden；元素隐藏",[571,134051,134052,134055,134058],{"start":46},[574,134053,134054],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[574,134056,134057],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[574,134059,134060],{},"隐藏后继续占有原有位置",[588,134062,134064],{"id":134063},"_1213-overflow溢出","12.1.3 overflow溢出",[1618,134066,134067],{},[574,134068,134069],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[753,134071,134072,134080],{},[756,134073,134074],{},[759,134075,134076,134078],{},[762,134077,127390],{"align":24175},[762,134079,27923],{"align":24175},[800,134081,134082,134090,134097,134104],{},[759,134083,134084,134087],{},[805,134085,134086],{"align":24175},"visible",[805,134088,134089],{"align":24175},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[759,134091,134092,134094],{},[805,134093,62146],{"align":24175},[805,134095,134096],{"align":24175},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[759,134098,134099,134101],{},[805,134100,129346],{"align":24175},[805,134102,134103],{"align":24175},"不管超出内容否，总是显示滚动条",[759,134105,134106,134108],{},[805,134107,73095],{"align":24175},[805,134109,134110],{"align":24175},"超出自动显示滚动条，不超出不显示滚动条",[1618,134112,134113,134116],{},[574,134114,134115],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[574,134117,134118],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[588,134120,134122],{"id":134121},"_1214-案例收获","12.1.4 案例收获",[1941,134124],{"style":126782,"src":134125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,134127,134128],{},"问题：没做出来动态效果，使用hover没实现",[14,134130,134131],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[26,134133,134134],{"className":126926,"code":132358,"language":126928,"meta":31,"style":31},[33,134135,134136,134140,134154,134158,134172,134176,134190,134194,134208,134212],{"__ignoreMap":31},[36,134137,134138],{"class":38,"line":39},[36,134139,132365],{"class":42},[36,134141,134142,134144,134146,134148,134150,134152],{"class":38,"line":46},[36,134143,132370],{"class":55},[36,134145,80239],{"class":98},[36,134147,129286],{"class":109},[36,134149,51869],{"class":98},[36,134151,132379],{"class":109},[36,134153,129856],{"class":98},[36,134155,134156],{"class":38,"line":52},[36,134157,132386],{"class":42},[36,134159,134160,134162,134164,134166,134168,134170],{"class":38,"line":66},[36,134161,132391],{"class":55},[36,134163,80239],{"class":98},[36,134165,129286],{"class":109},[36,134167,51869],{"class":98},[36,134169,55196],{"class":109},[36,134171,129856],{"class":98},[36,134173,134174],{"class":38,"line":72},[36,134175,132406],{"class":42},[36,134177,134178,134180,134182,134184,134186,134188],{"class":38,"line":82},[36,134179,132411],{"class":55},[36,134181,80239],{"class":98},[36,134183,129286],{"class":109},[36,134185,51869],{"class":98},[36,134187,55263],{"class":109},[36,134189,129856],{"class":98},[36,134191,134192],{"class":38,"line":88},[36,134193,132426],{"class":42},[36,134195,134196,134198,134200,134202,134204,134206],{"class":38,"line":113},[36,134197,132431],{"class":55},[36,134199,80239],{"class":98},[36,134201,129286],{"class":109},[36,134203,51869],{"class":98},[36,134205,86665],{"class":109},[36,134207,129856],{"class":98},[36,134209,134210],{"class":38,"line":119},[36,134211,132446],{"class":42},[36,134213,134214,134216,134218,134220,134222,134224],{"class":38,"line":131},[36,134215,132451],{"class":55},[36,134217,80239],{"class":98},[36,134219,129286],{"class":109},[36,134221,51869],{"class":98},[36,134223,132460],{"class":109},[36,134225,129856],{"class":98},[14,134227,134228],{},"完整代码：",[26,134230,134231],{"className":126926,"code":132358,"language":126928,"meta":31,"style":31},[33,134232,134233,134237,134251,134255,134269,134273,134287,134291,134305,134309],{"__ignoreMap":31},[36,134234,134235],{"class":38,"line":39},[36,134236,132365],{"class":42},[36,134238,134239,134241,134243,134245,134247,134249],{"class":38,"line":46},[36,134240,132370],{"class":55},[36,134242,80239],{"class":98},[36,134244,129286],{"class":109},[36,134246,51869],{"class":98},[36,134248,132379],{"class":109},[36,134250,129856],{"class":98},[36,134252,134253],{"class":38,"line":52},[36,134254,132386],{"class":42},[36,134256,134257,134259,134261,134263,134265,134267],{"class":38,"line":66},[36,134258,132391],{"class":55},[36,134260,80239],{"class":98},[36,134262,129286],{"class":109},[36,134264,51869],{"class":98},[36,134266,55196],{"class":109},[36,134268,129856],{"class":98},[36,134270,134271],{"class":38,"line":72},[36,134272,132406],{"class":42},[36,134274,134275,134277,134279,134281,134283,134285],{"class":38,"line":82},[36,134276,132411],{"class":55},[36,134278,80239],{"class":98},[36,134280,129286],{"class":109},[36,134282,51869],{"class":98},[36,134284,55263],{"class":109},[36,134286,129856],{"class":98},[36,134288,134289],{"class":38,"line":88},[36,134290,132426],{"class":42},[36,134292,134293,134295,134297,134299,134301,134303],{"class":38,"line":113},[36,134294,132431],{"class":55},[36,134296,80239],{"class":98},[36,134298,129286],{"class":109},[36,134300,51869],{"class":98},[36,134302,86665],{"class":109},[36,134304,129856],{"class":98},[36,134306,134307],{"class":38,"line":119},[36,134308,132446],{"class":42},[36,134310,134311,134313,134315,134317,134319,134321],{"class":38,"line":131},[36,134312,132451],{"class":55},[36,134314,80239],{"class":98},[36,134316,129286],{"class":109},[36,134318,51869],{"class":98},[36,134320,132460],{"class":109},[36,134322,129856],{"class":98},[14,134324,134325],{},"分布思路重点详解：",[26,134327,134328],{"className":126926,"code":132358,"language":126928,"meta":31,"style":31},[33,134329,134330,134334,134348,134352,134366,134370,134384,134388,134402,134406],{"__ignoreMap":31},[36,134331,134332],{"class":38,"line":39},[36,134333,132365],{"class":42},[36,134335,134336,134338,134340,134342,134344,134346],{"class":38,"line":46},[36,134337,132370],{"class":55},[36,134339,80239],{"class":98},[36,134341,129286],{"class":109},[36,134343,51869],{"class":98},[36,134345,132379],{"class":109},[36,134347,129856],{"class":98},[36,134349,134350],{"class":38,"line":52},[36,134351,132386],{"class":42},[36,134353,134354,134356,134358,134360,134362,134364],{"class":38,"line":66},[36,134355,132391],{"class":55},[36,134357,80239],{"class":98},[36,134359,129286],{"class":109},[36,134361,51869],{"class":98},[36,134363,55196],{"class":109},[36,134365,129856],{"class":98},[36,134367,134368],{"class":38,"line":72},[36,134369,132406],{"class":42},[36,134371,134372,134374,134376,134378,134380,134382],{"class":38,"line":82},[36,134373,132411],{"class":55},[36,134375,80239],{"class":98},[36,134377,129286],{"class":109},[36,134379,51869],{"class":98},[36,134381,55263],{"class":109},[36,134383,129856],{"class":98},[36,134385,134386],{"class":38,"line":88},[36,134387,132426],{"class":42},[36,134389,134390,134392,134394,134396,134398,134400],{"class":38,"line":113},[36,134391,132431],{"class":55},[36,134393,80239],{"class":98},[36,134395,129286],{"class":109},[36,134397,51869],{"class":98},[36,134399,86665],{"class":109},[36,134401,129856],{"class":98},[36,134403,134404],{"class":38,"line":119},[36,134405,132446],{"class":42},[36,134407,134408,134410,134412,134414,134416,134418],{"class":38,"line":131},[36,134409,132451],{"class":55},[36,134411,80239],{"class":98},[36,134413,129286],{"class":109},[36,134415,51869],{"class":98},[36,134417,132460],{"class":109},[36,134419,129856],{"class":98},[1941,134421],{"style":126782,"src":134422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,134424,134425],{},"图片太大，盒子太小，此时需要修改图片的大小",[26,134427,134429],{"className":127673,"code":134428,"language":127675,"meta":31,"style":31},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[33,134430,134431],{"__ignoreMap":31},[36,134432,134433,134435,134437,134439,134441,134444,134446,134448,134451,134454,134456,134459],{"class":38,"line":39},[36,134434,179],{"class":98},[36,134436,1941],{"class":51733},[36,134438,55671],{"class":55},[36,134440,176],{"class":98},[36,134442,134443],{"class":59},"\"images\u002Fpic.jpg\"",[36,134445,55679],{"class":55},[36,134447,176],{"class":98},[36,134449,134450],{"class":59},"\"描述文字\"",[36,134452,134453],{"class":55}," title",[36,134455,176],{"class":98},[36,134457,134458],{"class":59},"\"悬停提示\"",[36,134460,188],{"class":98},[1941,134462],{"style":126782,"src":134463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,134465,134466],{},"制造遮罩层",[26,134468,134469],{"className":127673,"code":134428,"language":127675,"meta":31,"style":31},[33,134470,134471],{"__ignoreMap":31},[36,134472,134473,134475,134477,134479,134481,134483,134485,134487,134489,134491,134493,134495],{"class":38,"line":39},[36,134474,179],{"class":98},[36,134476,1941],{"class":51733},[36,134478,55671],{"class":55},[36,134480,176],{"class":98},[36,134482,134443],{"class":59},[36,134484,55679],{"class":55},[36,134486,176],{"class":98},[36,134488,134450],{"class":59},[36,134490,134453],{"class":55},[36,134492,176],{"class":98},[36,134494,134458],{"class":59},[36,134496,188],{"class":98},[14,134498,134499],{},"此时是这样的为标准流",[1941,134501],{"style":126782,"src":134502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,134504,134505],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,134507,134508],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,134510,134511],{},"让他在中间，用center(background-position)",[14,134513,134514],{},"将需要变的尽可能放到一个盒子中",[14,134516,134517],{},"放大盒子上内部盒子发生变化",[26,134519,134521],{"className":126926,"code":134520,"language":126928,"meta":31,"style":31},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[33,134522,134523,134529,134539,134543,134550,134560,134572,134584],{"__ignoreMap":31},[36,134524,134525,134527],{"class":38,"line":39},[36,134526,127993],{"class":55},[36,134528,16011],{"class":98},[36,134530,134531,134533,134535,134537],{"class":38,"line":46},[36,134532,132732],{"class":109},[36,134534,51869],{"class":98},[36,134536,55196],{"class":109},[36,134538,1772],{"class":98},[36,134540,134541],{"class":38,"line":52},[36,134542,2044],{"class":98},[36,134544,134545,134548],{"class":38,"line":66},[36,134546,134547],{"class":55},".child",[36,134549,16011],{"class":98},[36,134551,134552,134554,134556,134558],{"class":38,"line":72},[36,134553,132732],{"class":109},[36,134555,51869],{"class":98},[36,134557,55263],{"class":109},[36,134559,1772],{"class":98},[36,134561,134562,134564,134566,134568,134570],{"class":38,"line":82},[36,134563,132746],{"class":109},[36,134565,51869],{"class":98},[36,134567,1270],{"class":109},[36,134569,942],{"class":163},[36,134571,1772],{"class":98},[36,134573,134574,134576,134578,134580,134582],{"class":38,"line":88},[36,134575,132763],{"class":109},[36,134577,51869],{"class":98},[36,134579,1270],{"class":109},[36,134581,942],{"class":163},[36,134583,1772],{"class":98},[36,134585,134586],{"class":38,"line":113},[36,134587,2044],{"class":98},[14,134589,134590],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[559,134592,134594],{"id":134593},"_122-精灵图","12.2 精灵图",[588,134596,134598],{"id":134597},"_1221-理解","12.2.1 理解",[571,134600,134601,134619],{},[574,134602,134603,134604,132832,134607,134610,134611,134614,134615,134618],{},"目的： ",[765,134605,134606],{},"为了有效地减少服务器接收和发送请求的次数",[765,134608,134609],{},"提高"," 页面的 ",[765,134612,134613],{},"加载速度"," ，出现了 ",[765,134616,134617],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[574,134620,134621,134622,134624,134625,134627,134628,134630,134631,134633,134634,134636,134637,134639],{},"使用精灵图核心：",[54148,134623],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[54148,134626],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[54148,134629],{},"  ③移动背景图片位置， 此时可以使用 background-position",[54148,134632],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[54148,134635],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[54148,134638],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[588,134641,134643],{"id":134642},"_1222-扒图","12.2.2 扒图",[26,134645,134648],{"className":134646,"code":134647,"language":5638},[5636],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[33,134649,134647],{"__ignoreMap":31},[1941,134651],{"style":126782,"src":134652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1941,134654],{"style":126782,"src":134655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[588,134657,134659],{"id":134658},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1941,134661],{"style":126782,"src":134662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,134664,134665],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1941,134667],{"style":126782,"src":134668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[26,134670,134672],{"className":126926,"code":134671,"language":126928,"meta":31,"style":31},"\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",[33,134673,134674,134679,134686,134698,134710,134729,134746],{"__ignoreMap":31},[36,134675,134676],{"class":38,"line":39},[36,134677,134678],{"class":42},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[36,134680,134681,134684],{"class":38,"line":46},[36,134682,134683],{"class":55},".icon",[36,134685,16011],{"class":98},[36,134687,134688,134690,134692,134694,134696],{"class":38,"line":52},[36,134689,71000],{"class":109},[36,134691,51869],{"class":98},[36,134693,1313],{"class":109},[36,134695,51924],{"class":163},[36,134697,1772],{"class":98},[36,134699,134700,134702,134704,134706,134708],{"class":38,"line":66},[36,134701,71220],{"class":109},[36,134703,51869],{"class":98},[36,134705,1313],{"class":109},[36,134707,51924],{"class":163},[36,134709,1772],{"class":98},[36,134711,134712,134714,134716,134718,134720,134723,134725,134727],{"class":38,"line":72},[36,134713,71043],{"class":109},[36,134715,51869],{"class":98},[36,134717,62158],{"class":109},[36,134719,621],{"class":98},[36,134721,134722],{"class":5667},"sprites.png",[36,134724,14153],{"class":98},[36,134726,62168],{"class":109},[36,134728,1772],{"class":98},[36,134730,134731,134733,134735,134737,134739,134742,134744],{"class":38,"line":82},[36,134732,129186],{"class":109},[36,134734,51869],{"class":98},[36,134736,52195],{"class":109},[36,134738,51924],{"class":163},[36,134740,134741],{"class":109}," -20",[36,134743,51924],{"class":163},[36,134745,1772],{"class":98},[36,134747,134748],{"class":38,"line":88},[36,134749,2044],{"class":98},[1941,134751],{"style":126782,"src":134752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,134754,134755],{},"在前端中坐标轴的正方向是右和下",[559,134757,134759],{"id":134758},"_123-字体图标","12.3 字体图标",[588,134761,134763],{"id":134762},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,134765,134766],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,134768,134769],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,134771,134772],{},"1.图片文件还是比较大的。",[14,134774,134775],{},"2.图片本身放大和缩小会失真。",[14,134777,134778],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,134780,134781,134782,26177],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[765,134783,134784],{},"字体图标 iconfont",[14,134786,134787,134790,134791,28819],{},[765,134788,134789],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[765,134792,134793],{},"展示的是图标，本质属于字体",[588,134795,134797],{"id":134796},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1618,134799,134800,134805,134808,134811,134814],{},[574,134801,134802,134804],{},[765,134803,26313],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[574,134806,134807],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[574,134809,134810],{},"兼容性：几乎支持所有的浏览器，请放心使用",[574,134812,134813],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[574,134815,134816],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[588,134818,134820],{"id":134819},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1618,134822,134823],{},[574,134824,134825,134826],{},"icomoon字体库：",[20,134827,134830],{"href":134828,"rel":134829},"http:\u002F\u002Ficomoon.io\u002F",[24],"http:\u002F\u002Ficomoon.io",[14,134832,134833],{},"进去之后点icomoon app",[1941,134835],{"style":126782,"src":134836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,134838,134839],{},"可以对其编辑：",[1941,134841],{"style":126782,"src":134842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,134844,134845],{},"生成字体：",[1941,134847],{"style":126782,"src":134848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,134850,134851],{},"下载：",[1941,134853],{"style":126782,"src":134854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1618,134856,134857],{},[574,134858,134859,134860],{},"阿里iconfont字体库： ",[20,134861,134862],{"href":134862,"rel":134863},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24],[588,134865,134867],{"id":134866},"_1234-字体图标的引入","12.3.4 字体图标的引入",[571,134869,134870],{},[574,134871,134872,134873,134876],{},"把下载包里面的 ",[765,134874,134875],{},"fonts"," 文件夹放入页面根目录下",[1941,134878],{"style":126782,"src":134879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[571,134881,134882],{"start":46},[574,134883,134884],{},"字体文件格式",[753,134886,134887,134896],{},[756,134888,134889],{},[759,134890,134891,134894],{},[762,134892,134893],{"align":24175},"格式",[762,134895,24179],{"align":24175},[800,134897,134898,134908,134918,134928],{},[759,134899,134900,134905],{},[805,134901,134902],{"align":24175},[765,134903,134904],{},".ttf",[805,134906,134907],{"align":24175},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[759,134909,134910,134915],{},[805,134911,134912],{"align":24175},[765,134913,134914],{},".woff",[805,134916,134917],{"align":24175},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[759,134919,134920,134925],{},[805,134921,134922],{"align":24175},[765,134923,134924],{},".eot",[805,134926,134927],{"align":24175},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[759,134929,134930,134935],{},[805,134931,134932],{"align":24175},[765,134933,134934],{},"svg",[805,134936,134937],{"align":24175},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[571,134939,134940],{"start":52},[574,134941,134942],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[26,134944,134946],{"className":126926,"code":134945,"language":126928,"meta":31,"style":31},"\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",[33,134947,134948,134953,134960,134972,134988,135013,135034,135054,135074,135078,135084,135094,135105],{"__ignoreMap":31},[36,134949,134950],{"class":38,"line":39},[36,134951,134952],{"class":42},"\u002F* 引入字体图标 *\u002F\n",[36,134954,134955,134958],{"class":38,"line":46},[36,134956,134957],{"class":163},"@font-face",[36,134959,16011],{"class":98},[36,134961,134962,134965,134967,134970],{"class":38,"line":52},[36,134963,134964],{"class":109},"  font-family",[36,134966,51869],{"class":98},[36,134968,134969],{"class":59},"'icomoon'",[36,134971,1772],{"class":98},[36,134973,134974,134977,134979,134981,134983,134986],{"class":38,"line":66},[36,134975,134976],{"class":109},"  src",[36,134978,51869],{"class":98},[36,134980,62158],{"class":109},[36,134982,621],{"class":98},[36,134984,134985],{"class":59},"'fonts\u002Ficomoon.eot'",[36,134987,3170],{"class":98},[36,134989,134990,134992,134994,134996,134998,135001,135003,135006,135008,135011],{"class":38,"line":72},[36,134991,134976],{"class":109},[36,134993,51869],{"class":98},[36,134995,62158],{"class":109},[36,134997,621],{"class":98},[36,134999,135000],{"class":59},"'fonts\u002Ficomoon.eot?#iefix'",[36,135002,14153],{"class":98},[36,135004,135005],{"class":109},"format",[36,135007,621],{"class":98},[36,135009,135010],{"class":59},"'embedded-opentype'",[36,135012,38480],{"class":98},[36,135014,135015,135018,135020,135023,135025,135027,135029,135032],{"class":38,"line":82},[36,135016,135017],{"class":109},"       url",[36,135019,621],{"class":98},[36,135021,135022],{"class":59},"'fonts\u002Ficomoon.woff'",[36,135024,14153],{"class":98},[36,135026,135005],{"class":109},[36,135028,621],{"class":98},[36,135030,135031],{"class":59},"'woff'",[36,135033,38480],{"class":98},[36,135035,135036,135038,135040,135043,135045,135047,135049,135052],{"class":38,"line":88},[36,135037,135017],{"class":109},[36,135039,621],{"class":98},[36,135041,135042],{"class":59},"'fonts\u002Ficomoon.ttf'",[36,135044,14153],{"class":98},[36,135046,135005],{"class":109},[36,135048,621],{"class":98},[36,135050,135051],{"class":59},"'truetype'",[36,135053,38480],{"class":98},[36,135055,135056,135058,135060,135063,135065,135067,135069,135072],{"class":38,"line":113},[36,135057,135017],{"class":109},[36,135059,621],{"class":98},[36,135061,135062],{"class":59},"'fonts\u002Ficomoon.svg#icomoon'",[36,135064,14153],{"class":98},[36,135066,135005],{"class":109},[36,135068,621],{"class":98},[36,135070,135071],{"class":59},"'svg'",[36,135073,3170],{"class":98},[36,135075,135076],{"class":38,"line":119},[36,135077,2044],{"class":98},[36,135079,135080,135082],{"class":38,"line":131},[36,135081,134683],{"class":55},[36,135083,16011],{"class":98},[36,135085,135086,135088,135090,135092],{"class":38,"line":137},[36,135087,134964],{"class":109},[36,135089,51869],{"class":98},[36,135091,134969],{"class":59},[36,135093,1772],{"class":98},[36,135095,135096,135099,135101,135103],{"class":38,"line":147},[36,135097,135098],{"class":109},"  font-style",[36,135100,51869],{"class":98},[36,135102,64273],{"class":109},[36,135104,1772],{"class":98},[36,135106,135107],{"class":38,"line":153},[36,135108,2044],{"class":98},[14,135110,135111],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1941,135113],{"style":126782,"src":135114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[571,135116,135117],{"start":66},[574,135118,135119],{},"添加字体",[1941,135121],{"style":126782,"src":135122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,135124,135125],{},"复制：",[1941,135127],{"style":126782,"src":135128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,135130,135131],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[571,135133,135134],{"start":72},[574,135135,135136],{},"代码展示：",[26,135138,135139],{"className":126926,"code":134945,"language":126928,"meta":31,"style":31},[33,135140,135141,135145,135151,135161,135175,135197,135215,135233,135251,135255,135261,135271,135281],{"__ignoreMap":31},[36,135142,135143],{"class":38,"line":39},[36,135144,134952],{"class":42},[36,135146,135147,135149],{"class":38,"line":46},[36,135148,134957],{"class":163},[36,135150,16011],{"class":98},[36,135152,135153,135155,135157,135159],{"class":38,"line":52},[36,135154,134964],{"class":109},[36,135156,51869],{"class":98},[36,135158,134969],{"class":59},[36,135160,1772],{"class":98},[36,135162,135163,135165,135167,135169,135171,135173],{"class":38,"line":66},[36,135164,134976],{"class":109},[36,135166,51869],{"class":98},[36,135168,62158],{"class":109},[36,135170,621],{"class":98},[36,135172,134985],{"class":59},[36,135174,3170],{"class":98},[36,135176,135177,135179,135181,135183,135185,135187,135189,135191,135193,135195],{"class":38,"line":72},[36,135178,134976],{"class":109},[36,135180,51869],{"class":98},[36,135182,62158],{"class":109},[36,135184,621],{"class":98},[36,135186,135000],{"class":59},[36,135188,14153],{"class":98},[36,135190,135005],{"class":109},[36,135192,621],{"class":98},[36,135194,135010],{"class":59},[36,135196,38480],{"class":98},[36,135198,135199,135201,135203,135205,135207,135209,135211,135213],{"class":38,"line":82},[36,135200,135017],{"class":109},[36,135202,621],{"class":98},[36,135204,135022],{"class":59},[36,135206,14153],{"class":98},[36,135208,135005],{"class":109},[36,135210,621],{"class":98},[36,135212,135031],{"class":59},[36,135214,38480],{"class":98},[36,135216,135217,135219,135221,135223,135225,135227,135229,135231],{"class":38,"line":88},[36,135218,135017],{"class":109},[36,135220,621],{"class":98},[36,135222,135042],{"class":59},[36,135224,14153],{"class":98},[36,135226,135005],{"class":109},[36,135228,621],{"class":98},[36,135230,135051],{"class":59},[36,135232,38480],{"class":98},[36,135234,135235,135237,135239,135241,135243,135245,135247,135249],{"class":38,"line":113},[36,135236,135017],{"class":109},[36,135238,621],{"class":98},[36,135240,135062],{"class":59},[36,135242,14153],{"class":98},[36,135244,135005],{"class":109},[36,135246,621],{"class":98},[36,135248,135071],{"class":59},[36,135250,3170],{"class":98},[36,135252,135253],{"class":38,"line":119},[36,135254,2044],{"class":98},[36,135256,135257,135259],{"class":38,"line":131},[36,135258,134683],{"class":55},[36,135260,16011],{"class":98},[36,135262,135263,135265,135267,135269],{"class":38,"line":137},[36,135264,134964],{"class":109},[36,135266,51869],{"class":98},[36,135268,134969],{"class":59},[36,135270,1772],{"class":98},[36,135272,135273,135275,135277,135279],{"class":38,"line":147},[36,135274,135098],{"class":109},[36,135276,51869],{"class":98},[36,135278,64273],{"class":109},[36,135280,1772],{"class":98},[36,135282,135283],{"class":38,"line":153},[36,135284,2044],{"class":98},[1941,135286],{"style":126782,"src":135287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,135289,135290],{},"更加细节展示：",[571,135292,135293],{},[574,135294,135295],{},"html 标签内添加小图标",[1941,135297],{"style":126782,"src":135298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[571,135300,135301],{"start":46},[574,135302,135303],{},"给标签定义字体",[26,135305,135306],{"className":127673,"code":131030,"language":127675,"meta":31,"style":31},[33,135307,135308,135312,135326,135330],{"__ignoreMap":31},[36,135309,135310],{"class":38,"line":39},[36,135311,131037],{"class":42},[36,135313,135314,135316,135318,135320,135322,135324],{"class":38,"line":46},[36,135315,179],{"class":98},[36,135317,52043],{"class":51733},[36,135319,53918],{"class":55},[36,135321,176],{"class":98},[36,135323,131050],{"class":59},[36,135325,188],{"class":98},[36,135327,135328],{"class":38,"line":52},[36,135329,131057],{"class":98},[36,135331,135332,135334,135336],{"class":38,"line":66},[36,135333,52217],{"class":98},[36,135335,52043],{"class":51733},[36,135337,188],{"class":98},[14,135339,135340],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1941,135342],{"style":126782,"src":135343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[588,135345,135347],{"id":135346},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,135349,135350],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,135352,135353,135354,135357],{},"把压缩包里面的 ",[765,135355,135356],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,135359,135360],{},"打开网站，点下方：",[1941,135362],{"style":126782,"src":135363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1941,135365],{"style":126782,"src":135366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1941,135368],{"style":126782,"src":135369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,135371,135372],{},"点yes重新加载",[14,135374,135375],{},"然后重复之前的操作就可以实现了",[14,135377,135378],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[588,135380,135382],{"id":135381},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1941,135384],{"style":126782,"src":135385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[537,135387,135388],{},"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":31,"searchDepth":46,"depth":46,"links":135390},[135391,135397,135402],{"id":133994,"depth":46,"text":133995,"children":135392},[135393,135394,135395,135396],{"id":134006,"depth":52,"text":134007},{"id":134035,"depth":52,"text":134036},{"id":134063,"depth":52,"text":134064},{"id":134121,"depth":52,"text":134122},{"id":134593,"depth":46,"text":134594,"children":135398},[135399,135400,135401],{"id":134597,"depth":52,"text":134598},{"id":134642,"depth":52,"text":134643},{"id":134658,"depth":52,"text":134659},{"id":134758,"depth":46,"text":134759,"children":135403},[135404,135405,135406,135407,135408,135409],{"id":134762,"depth":52,"text":134763},{"id":134796,"depth":52,"text":134797},{"id":134819,"depth":52,"text":134820},{"id":134866,"depth":52,"text":134867},{"id":135346,"depth":52,"text":135347},{"id":135381,"depth":52,"text":135382},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133986,"description":542},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135416,"title":135417,"body":135418,"description":542,"extension":543,"meta":136645,"navigation":246,"path":136646,"seo":136647,"stem":136648,"__hash__":136649},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135419,"toc":136626},[135420,135423,135427,135430,135444,135512,135542,135545,135549,135553,135655,135702,135706,135709,135712,135746,135749,135752,135755,135758,135761,135764,135767,135769,135772,135775,135778,135781,135784,135787,135790,135818,135821,135825,135828,135835,135838,135841,135867,135870,135874,135877,135880,135887,135891,135894,135896,135928,135931,135934,135946,135952,135955,135958,135961,135963,135967,135970,135973,135976,136021,136025,136027,136030,136037,136079,136082,136086,136091,136105,136109,136112,136115,136118,136121,136124,136158,136161,136164,136218,136221,136224,136227,136230,136282,136285,136288,136337,136341,136343,136346,136349,136352,136355,136358,136416,136419,136425,136428,136431,136463,136466,136470,136474,136477,136509,136513,136516,136560,136564,136567,136570,136573,136576,136579,136582,136585,136587,136590,136592,136595,136598,136601,136604,136609,136612,136614,136617,136620,136623],[10,135421,135417],{"id":135422},"_13-界面样式与布局技巧",[559,135424,135426],{"id":135425},"_131-css三角","13.1 css三角",[14,135428,135429],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1618,135431,135432,135435,135438,135441],{},[574,135433,135434],{},"用css 边框可以模拟三角效果",[574,135436,135437],{},"宽度高度为0",[574,135439,135440],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[574,135442,135443],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[26,135445,135447],{"className":126926,"code":135446,"language":126928,"meta":31,"style":31},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[33,135448,135449,135454,135461,135471,135481,135497,135508],{"__ignoreMap":31},[36,135450,135451],{"class":38,"line":39},[36,135452,135453],{"class":42},"\u002F* CSS 实现三角形 *\u002F\n",[36,135455,135456,135459],{"class":38,"line":46},[36,135457,135458],{"class":55},".triangle",[36,135460,16011],{"class":98},[36,135462,135463,135465,135467,135469],{"class":38,"line":52},[36,135464,71000],{"class":109},[36,135466,51869],{"class":98},[36,135468,807],{"class":109},[36,135470,1772],{"class":98},[36,135472,135473,135475,135477,135479],{"class":38,"line":66},[36,135474,71220],{"class":109},[36,135476,51869],{"class":98},[36,135478,807],{"class":109},[36,135480,1772],{"class":98},[36,135482,135483,135485,135487,135489,135491,135493,135495],{"class":38,"line":72},[36,135484,71328],{"class":109},[36,135486,51869],{"class":98},[36,135488,1060],{"class":109},[36,135490,51924],{"class":163},[36,135492,51953],{"class":109},[36,135494,64423],{"class":109},[36,135496,1772],{"class":98},[36,135498,135499,135502,135504,135506],{"class":38,"line":82},[36,135500,135501],{"class":109},"  border-bottom-color",[36,135503,51869],{"class":98},[36,135505,62801],{"class":109},[36,135507,1772],{"class":98},[36,135509,135510],{"class":38,"line":88},[36,135511,2044],{"class":98},[26,135513,135514],{"className":126926,"code":131083,"language":126928,"meta":31,"style":31},[33,135515,135516,135522,135538],{"__ignoreMap":31},[36,135517,135518,135520],{"class":38,"line":39},[36,135519,52043],{"class":51733},[36,135521,16011],{"class":98},[36,135523,135524,135526,135528,135530,135532,135534,135536],{"class":38,"line":46},[36,135525,71328],{"class":109},[36,135527,51869],{"class":98},[36,135529,833],{"class":109},[36,135531,51924],{"class":163},[36,135533,51953],{"class":109},[36,135535,130318],{"class":109},[36,135537,1772],{"class":98},[36,135539,135540],{"class":38,"line":52},[36,135541,2044],{"class":98},[1941,135543],{"style":126782,"src":135544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[559,135546,135548],{"id":135547},"_132-css用户界面样式","13.2 css用户界面样式",[588,135550,135552],{"id":135551},"_1321-鼠标样式","13.2.1 鼠标样式",[26,135554,135556],{"className":126926,"code":135555,"language":126928,"meta":31,"style":31},"\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",[33,135557,135558,135563,135582,135600,135619,135636],{"__ignoreMap":31},[36,135559,135560],{"class":38,"line":39},[36,135561,135562],{"class":42},"\u002F* 鼠标样式 *\u002F\n",[36,135564,135565,135567,135569,135572,135574,135576,135579],{"class":38,"line":46},[36,135566,52043],{"class":51733},[36,135568,80239],{"class":98},[36,135570,135571],{"class":109},"cursor",[36,135573,51869],{"class":98},[36,135575,62462],{"class":109},[36,135577,135578],{"class":98},"; }   ",[36,135580,135581],{"class":42},"\u002F* 手型 *\u002F\n",[36,135583,135584,135586,135588,135590,135592,135595,135597],{"class":38,"line":52},[36,135585,52043],{"class":51733},[36,135587,80239],{"class":98},[36,135589,135571],{"class":109},[36,135591,51869],{"class":98},[36,135593,135594],{"class":109},"default",[36,135596,135578],{"class":98},[36,135598,135599],{"class":42},"\u002F* 默认 *\u002F\n",[36,135601,135602,135604,135606,135608,135610,135613,135616],{"class":38,"line":66},[36,135603,52043],{"class":51733},[36,135605,80239],{"class":98},[36,135607,135571],{"class":109},[36,135609,51869],{"class":98},[36,135611,135612],{"class":109},"move",[36,135614,135615],{"class":98},"; }      ",[36,135617,135618],{"class":42},"\u002F* 移动 *\u002F\n",[36,135620,135621,135623,135625,135627,135629,135631,135633],{"class":38,"line":72},[36,135622,52043],{"class":51733},[36,135624,80239],{"class":98},[36,135626,135571],{"class":109},[36,135628,51869],{"class":98},[36,135630,5638],{"class":109},[36,135632,135615],{"class":98},[36,135634,135635],{"class":42},"\u002F* 文本 *\u002F\n",[36,135637,135638,135640,135642,135644,135646,135649,135652],{"class":38,"line":82},[36,135639,52043],{"class":51733},[36,135641,80239],{"class":98},[36,135643,135571],{"class":109},[36,135645,51869],{"class":98},[36,135647,135648],{"class":109},"not-allowed",[36,135650,135651],{"class":98},"; } ",[36,135653,135654],{"class":42},"\u002F* 禁止 *\u002F\n",[753,135656,135657,135665],{},[756,135658,135659],{},[759,135660,135661,135663],{},[762,135662,127390],{"align":24175},[762,135664,27923],{"align":24175},[800,135666,135667,135674,135681,135688,135695],{},[759,135668,135669,135671],{},[805,135670,135594],{"align":24175},[805,135672,135673],{"align":24175},"小白 默认",[759,135675,135676,135678],{},[805,135677,62462],{"align":24175},[805,135679,135680],{"align":24175},"小手",[759,135682,135683,135685],{},[805,135684,135612],{"align":24175},[805,135686,135687],{"align":24175},"移动",[759,135689,135690,135692],{},[805,135691,5638],{"align":24175},[805,135693,135694],{"align":24175},"文本",[759,135696,135697,135699],{},[805,135698,135648],{"align":24175},[805,135700,135701],{"align":24175},"禁止",[588,135703,135705],{"id":135704},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,135707,135708],{},"去除表单轮廓线",[14,135710,135711],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[26,135713,135714],{"className":126926,"code":130290,"language":126928,"meta":31,"style":31},[33,135715,135716,135720,135726,135742],{"__ignoreMap":31},[36,135717,135718],{"class":38,"line":39},[36,135719,130297],{"class":42},[36,135721,135722,135724],{"class":38,"line":46},[36,135723,52043],{"class":51733},[36,135725,16011],{"class":98},[36,135727,135728,135730,135732,135734,135736,135738,135740],{"class":38,"line":52},[36,135729,71328],{"class":109},[36,135731,51869],{"class":98},[36,135733,833],{"class":109},[36,135735,51924],{"class":163},[36,135737,51953],{"class":109},[36,135739,130318],{"class":109},[36,135741,1772],{"class":98},[36,135743,135744],{"class":38,"line":66},[36,135745,2044],{"class":98},[14,135747,135748],{},"文本域：",[1941,135750],{"style":126782,"src":135751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,135753,135754],{},"此时会有一个空白区域",[1941,135756],{"style":126782,"src":135757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,135759,135760],{},"写在同一行就不会出现这个问题",[1941,135762],{"style":126782,"src":135763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,135765,135766],{},"文本域是行内块元素，一定记住！！！",[14,135768,98665],{},[1941,135770],{"style":126782,"src":135771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,135773,135774],{},"文本域尽量放在一行",[14,135776,135777],{},"知识回顾：cols是列，rols是行",[1941,135779],{"style":126782,"src":135780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,135782,135783],{},"它可以进行拖动，显然这是我们不愿意看到的",[1941,135785],{"style":126782,"src":135786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,135788,135789],{},"使用resize进行解决",[26,135791,135793],{"className":126926,"code":135792,"language":126928,"meta":31,"style":31},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[33,135794,135795,135801,135814],{"__ignoreMap":31},[36,135796,135797,135799],{"class":38,"line":39},[36,135798,54253],{"class":51733},[36,135800,16011],{"class":98},[36,135802,135803,135805,135807,135809,135811],{"class":38,"line":46},[36,135804,71230],{"class":109},[36,135806,51869],{"class":98},[36,135808,55169],{"class":109},[36,135810,130789],{"class":98},[36,135812,135813],{"class":42},"\u002F* 取消表单轮廓线 *\u002F\n",[36,135815,135816],{"class":38,"line":52},[36,135817,2044],{"class":98},[14,135819,135820],{},"此时就无法通过右下方实现拖动了",[588,135822,135824],{"id":135823},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,135826,135827],{},"实现一个盒子中的文字和图片对齐",[14,135829,135830,135831,135834],{},"用于设置一个元素的 ",[765,135832,135833],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,135836,135837],{},"图片和文字默认是基线对齐",[1941,135839],{"style":126782,"src":135840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[26,135842,135843],{"className":126926,"code":135792,"language":126928,"meta":31,"style":31},[33,135844,135845,135851,135863],{"__ignoreMap":31},[36,135846,135847,135849],{"class":38,"line":39},[36,135848,54253],{"class":51733},[36,135850,16011],{"class":98},[36,135852,135853,135855,135857,135859,135861],{"class":38,"line":46},[36,135854,71230],{"class":109},[36,135856,51869],{"class":98},[36,135858,55169],{"class":109},[36,135860,130789],{"class":98},[36,135862,135813],{"class":42},[36,135864,135865],{"class":38,"line":52},[36,135866,2044],{"class":98},[1941,135868],{"style":126782,"src":135869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22437,135871,135873],{"id":135872},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,135875,135876],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1941,135878],{"style":126782,"src":135879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,135881,135882,135883,135886],{},"此时可以给图片、表单这些行内块元素的 ",[765,135884,135885],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22437,135888,135890],{"id":135889},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,135892,135893],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,135895,15072],{},[26,135897,135899],{"className":126926,"code":135898,"language":126928,"meta":31,"style":31},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[33,135900,135901,135906,135912,135924],{"__ignoreMap":31},[36,135902,135903],{"class":38,"line":39},[36,135904,135905],{"class":42},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[36,135907,135908,135910],{"class":38,"line":46},[36,135909,1941],{"class":51733},[36,135911,16011],{"class":98},[36,135913,135914,135917,135919,135922],{"class":38,"line":52},[36,135915,135916],{"class":109},"  vertical-align",[36,135918,51869],{"class":98},[36,135920,135921],{"class":109},"middle",[36,135923,1772],{"class":98},[36,135925,135926],{"class":38,"line":66},[36,135927,2044],{"class":98},[1941,135929],{"style":126782,"src":135930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,135932,135933],{},"主要解决方法有两种：",[571,135935,135936],{},[574,135937,135938,135941,135942,135945],{},[765,135939,135940],{},"给图片"," 添加 ",[765,135943,135944],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,135947,135948,135949],{},"2.把图片转换为块级元素 ",[765,135950,135951],{},"display: block",[14,135953,135954],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,135956,135957],{},"img {",[14,135959,135960],{},"vertical-align:middle;",[14,135962,1558],{},[588,135964,135966],{"id":135965},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,135968,135969],{},"效果：",[1941,135971],{"style":126782,"src":135972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,135974,135975],{},"单行文本溢出显示省略号--必须满足三个条件：",[26,135977,135979],{"className":126926,"code":135978,"language":126928,"meta":31,"style":31},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[33,135980,135981,135986,135992,136002,136007,136017],{"__ignoreMap":31},[36,135982,135983],{"class":38,"line":39},[36,135984,135985],{"class":42},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[36,135987,135988,135990],{"class":38,"line":46},[36,135989,1941],{"class":51733},[36,135991,16011],{"class":98},[36,135993,135994,135996,135998,136000],{"class":38,"line":52},[36,135995,135916],{"class":109},[36,135997,51869],{"class":98},[36,135999,135921],{"class":109},[36,136001,1772],{"class":98},[36,136003,136004],{"class":38,"line":66},[36,136005,136006],{"class":42},"  \u002F* 或 *\u002F\n",[36,136008,136009,136011,136013,136015],{"class":38,"line":72},[36,136010,128542],{"class":109},[36,136012,51869],{"class":98},[36,136014,61301],{"class":109},[36,136016,1772],{"class":98},[36,136018,136019],{"class":38,"line":82},[36,136020,2044],{"class":98},[588,136022,136024],{"id":136023},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,136026,135969],{},[1941,136028],{"style":126782,"src":136029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,136031,136032,136033,136036],{},"多行文本溢出显示省略号， ",[765,136034,136035],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[26,136038,136039],{"className":126926,"code":135978,"language":126928,"meta":31,"style":31},[33,136040,136041,136045,136051,136061,136065,136075],{"__ignoreMap":31},[36,136042,136043],{"class":38,"line":39},[36,136044,135985],{"class":42},[36,136046,136047,136049],{"class":38,"line":46},[36,136048,1941],{"class":51733},[36,136050,16011],{"class":98},[36,136052,136053,136055,136057,136059],{"class":38,"line":52},[36,136054,135916],{"class":109},[36,136056,51869],{"class":98},[36,136058,135921],{"class":109},[36,136060,1772],{"class":98},[36,136062,136063],{"class":38,"line":66},[36,136064,136006],{"class":42},[36,136066,136067,136069,136071,136073],{"class":38,"line":72},[36,136068,128542],{"class":109},[36,136070,51869],{"class":98},[36,136072,61301],{"class":109},[36,136074,1772],{"class":98},[36,136076,136077],{"class":38,"line":82},[36,136078,2044],{"class":98},[14,136080,136081],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[559,136083,136085],{"id":136084},"_133-常见布局技巧","13.3 常见布局技巧",[14,136087,136088],{},[765,136089,136090],{},"巧妙利用一个技术更快更好的布局：",[571,136092,136093,136096,136099,136102],{},[574,136094,136095],{},"margin负值的运用",[574,136097,136098],{},"文字围绕浮动元素",[574,136100,136101],{},"行内块的巧妙运用",[574,136103,136104],{},"CSS三角强化",[588,136106,136108],{"id":136107},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,136110,136111],{},"应用场景：",[1941,136113],{"style":126782,"src":136114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1941,136116],{"style":126782,"src":136117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,136119,136120],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,136122,136123],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[26,136125,136126],{"className":126926,"code":130290,"language":126928,"meta":31,"style":31},[33,136127,136128,136132,136138,136154],{"__ignoreMap":31},[36,136129,136130],{"class":38,"line":39},[36,136131,130297],{"class":42},[36,136133,136134,136136],{"class":38,"line":46},[36,136135,52043],{"class":51733},[36,136137,16011],{"class":98},[36,136139,136140,136142,136144,136146,136148,136150,136152],{"class":38,"line":52},[36,136141,71328],{"class":109},[36,136143,51869],{"class":98},[36,136145,833],{"class":109},[36,136147,51924],{"class":163},[36,136149,51953],{"class":109},[36,136151,130318],{"class":109},[36,136153,1772],{"class":98},[36,136155,136156],{"class":38,"line":66},[36,136157,2044],{"class":98},[1941,136159],{"style":126782,"src":136160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,136162,136163],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[26,136165,136167],{"className":126926,"code":136166,"language":126928,"meta":31,"style":31},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[33,136168,136169,136174,136180,136190,136202,136214],{"__ignoreMap":31},[36,136170,136171],{"class":38,"line":39},[36,136172,136173],{"class":42},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[36,136175,136176,136178],{"class":38,"line":46},[36,136177,130774],{"class":55},[36,136179,16011],{"class":98},[36,136181,136182,136184,136186,136188],{"class":38,"line":52},[36,136183,132732],{"class":109},[36,136185,51869],{"class":98},[36,136187,55196],{"class":109},[36,136189,1772],{"class":98},[36,136191,136192,136194,136196,136198,136200],{"class":38,"line":66},[36,136193,132746],{"class":109},[36,136195,51869],{"class":98},[36,136197,1060],{"class":109},[36,136199,51924],{"class":163},[36,136201,1772],{"class":98},[36,136203,136204,136206,136208,136210,136212],{"class":38,"line":72},[36,136205,132763],{"class":109},[36,136207,51869],{"class":98},[36,136209,1313],{"class":109},[36,136211,51924],{"class":163},[36,136213,1772],{"class":98},[36,136215,136216],{"class":38,"line":82},[36,136217,2044],{"class":98},[14,136219,136220],{},"加上上述代码会发现：",[1941,136222],{"style":126782,"src":136223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,136225,136226],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,136228,136229],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[26,136231,136232],{"className":126926,"code":136166,"language":126928,"meta":31,"style":31},[33,136233,136234,136238,136244,136254,136266,136278],{"__ignoreMap":31},[36,136235,136236],{"class":38,"line":39},[36,136237,136173],{"class":42},[36,136239,136240,136242],{"class":38,"line":46},[36,136241,130774],{"class":55},[36,136243,16011],{"class":98},[36,136245,136246,136248,136250,136252],{"class":38,"line":52},[36,136247,132732],{"class":109},[36,136249,51869],{"class":98},[36,136251,55196],{"class":109},[36,136253,1772],{"class":98},[36,136255,136256,136258,136260,136262,136264],{"class":38,"line":66},[36,136257,132746],{"class":109},[36,136259,51869],{"class":98},[36,136261,1060],{"class":109},[36,136263,51924],{"class":163},[36,136265,1772],{"class":98},[36,136267,136268,136270,136272,136274,136276],{"class":38,"line":72},[36,136269,132763],{"class":109},[36,136271,51869],{"class":98},[36,136273,1313],{"class":109},[36,136275,51924],{"class":163},[36,136277,1772],{"class":98},[36,136279,136280],{"class":38,"line":82},[36,136281,2044],{"class":98},[14,136283,136284],{},"解决方式2：",[14,136286,136287],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[26,136289,136291],{"className":126926,"code":136290,"language":126928,"meta":31,"style":31},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[33,136292,136293,136299,136309,136321,136333],{"__ignoreMap":31},[36,136294,136295,136297],{"class":38,"line":39},[36,136296,52043],{"class":51733},[36,136298,16011],{"class":98},[36,136300,136301,136303,136305,136307],{"class":38,"line":46},[36,136302,132732],{"class":109},[36,136304,51869],{"class":98},[36,136306,55196],{"class":109},[36,136308,1772],{"class":98},[36,136310,136311,136313,136315,136317,136319],{"class":38,"line":52},[36,136312,132746],{"class":109},[36,136314,51869],{"class":98},[36,136316,1060],{"class":109},[36,136318,51924],{"class":163},[36,136320,1772],{"class":98},[36,136322,136323,136325,136327,136329,136331],{"class":38,"line":66},[36,136324,132763],{"class":109},[36,136326,51869],{"class":98},[36,136328,1313],{"class":109},[36,136330,51924],{"class":163},[36,136332,1772],{"class":98},[36,136334,136335],{"class":38,"line":72},[36,136336,2044],{"class":98},[588,136338,136340],{"id":136339},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,136342,136111],{},[1941,136344],{"style":126782,"src":136345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,136347,136348],{},"实现结构图：",[1941,136350],{"style":126782,"src":136351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,136353,136354],{},"巧妙运用浮动元素不会压住文字的特性",[14,136356,136357],{},"代码显示：",[26,136359,136361],{"className":126926,"code":136360,"language":126928,"meta":31,"style":31},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[33,136362,136363,136369,136379,136383,136388,136392,136398,136412],{"__ignoreMap":31},[36,136364,136365,136367],{"class":38,"line":39},[36,136366,130774],{"class":55},[36,136368,16011],{"class":98},[36,136370,136371,136373,136375,136377],{"class":38,"line":46},[36,136372,131406],{"class":109},[36,136374,51869],{"class":98},[36,136376,24175],{"class":109},[36,136378,1772],{"class":98},[36,136380,136381],{"class":38,"line":52},[36,136382,2044],{"class":98},[36,136384,136385],{"class":38,"line":66},[36,136386,136387],{"class":98},"```Css\n",[36,136389,136390],{"class":38,"line":72},[36,136391,130769],{"class":42},[36,136393,136394,136396],{"class":38,"line":82},[36,136395,130774],{"class":55},[36,136397,16011],{"class":98},[36,136399,136400,136402,136404,136406,136408,136410],{"class":38,"line":88},[36,136401,70902],{"class":109},[36,136403,51869],{"class":98},[36,136405,807],{"class":109},[36,136407,51988],{"class":109},[36,136409,130789],{"class":98},[36,136411,130792],{"class":42},[36,136413,136414],{"class":38,"line":113},[36,136415,2044],{"class":98},[14,136417,136418],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[26,136420,136423],{"className":136421,"code":136422,"language":5638},[5636],"\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",[33,136424,136422],{"__ignoreMap":31},[1941,136426],{"style":126782,"src":136427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,136429,136430],{},"最终展示结果：",[26,136432,136433],{"className":126926,"code":130762,"language":126928,"meta":31,"style":31},[33,136434,136435,136439,136445,136459],{"__ignoreMap":31},[36,136436,136437],{"class":38,"line":39},[36,136438,130769],{"class":42},[36,136440,136441,136443],{"class":38,"line":46},[36,136442,130774],{"class":55},[36,136444,16011],{"class":98},[36,136446,136447,136449,136451,136453,136455,136457],{"class":38,"line":52},[36,136448,70902],{"class":109},[36,136450,51869],{"class":98},[36,136452,807],{"class":109},[36,136454,51988],{"class":109},[36,136456,130789],{"class":98},[36,136458,130792],{"class":42},[36,136460,136461],{"class":38,"line":66},[36,136462,2044],{"class":98},[1941,136464],{"style":126782,"src":136465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[559,136467,136469],{"id":136468},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[588,136471,136473],{"id":136472},"_1341-原理","13.4.1 原理",[1941,136475],{"style":126782,"src":136476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[26,136478,136479],{"className":126926,"code":130762,"language":126928,"meta":31,"style":31},[33,136480,136481,136485,136491,136505],{"__ignoreMap":31},[36,136482,136483],{"class":38,"line":39},[36,136484,130769],{"class":42},[36,136486,136487,136489],{"class":38,"line":46},[36,136488,130774],{"class":55},[36,136490,16011],{"class":98},[36,136492,136493,136495,136497,136499,136501,136503],{"class":38,"line":52},[36,136494,70902],{"class":109},[36,136496,51869],{"class":98},[36,136498,807],{"class":109},[36,136500,51988],{"class":109},[36,136502,130789],{"class":98},[36,136504,130792],{"class":42},[36,136506,136507],{"class":38,"line":66},[36,136508,2044],{"class":98},[588,136510,136512],{"id":136511},"_1342-实例","13.4.2 实例",[1941,136514],{"style":126782,"src":136515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[26,136517,136518],{"className":126926,"code":131392,"language":126928,"meta":31,"style":31},[33,136519,136520,136526,136536,136540,136546,136556],{"__ignoreMap":31},[36,136521,136522,136524],{"class":38,"line":39},[36,136523,131399],{"class":55},[36,136525,16011],{"class":98},[36,136527,136528,136530,136532,136534],{"class":38,"line":46},[36,136529,131406],{"class":109},[36,136531,51869],{"class":98},[36,136533,24175],{"class":109},[36,136535,1772],{"class":98},[36,136537,136538],{"class":38,"line":52},[36,136539,2044],{"class":98},[36,136541,136542,136544],{"class":38,"line":66},[36,136543,131421],{"class":55},[36,136545,16011],{"class":98},[36,136547,136548,136550,136552,136554],{"class":38,"line":72},[36,136549,131406],{"class":109},[36,136551,51869],{"class":98},[36,136553,72954],{"class":109},[36,136555,1772],{"class":98},[36,136557,136558],{"class":38,"line":82},[36,136559,2044],{"class":98},[559,136561,136563],{"id":136562},"_135-css的初始化","13.5 css的初始化",[14,136565,136566],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,136568,136569],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,136571,136572],{},"每个网页都必须首先进行 CSS初始化。",[14,136574,136575],{},"这里我们以 京东CSS初始化代码为例。",[14,136577,136578],{},"在网页右键查看网页源代码",[14,136580,136581],{},"找到css的link引入语句",[14,136583,136584],{},"然后ctrl+f 输入body",[14,136586,77658],{},[1941,136588],{"style":126782,"src":136589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,136591,77681],{},[1941,136593],{"style":126782,"src":136594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,136596,136597],{},"③打开了网页上传压缩的代码",[1941,136599],{"style":126782,"src":136600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,136602,136603],{},"④从body前可以查看这个网页的初始化代码",[14,136605,136606],{},[765,136607,136608],{},"Unicode编码字体：",[14,136610,136611],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,136613,83639],{},[14,136615,136616],{},"黑体 \\9ED1\\4F53",[14,136618,136619],{},"宋体 \\5B8B\\4F53",[14,136621,136622],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[537,136624,136625],{},"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":31,"searchDepth":46,"depth":46,"links":136627},[136628,136629,136636,136640,136644],{"id":135425,"depth":46,"text":135426},{"id":135547,"depth":46,"text":135548,"children":136630},[136631,136632,136633,136634,136635],{"id":135551,"depth":52,"text":135552},{"id":135704,"depth":52,"text":135705},{"id":135823,"depth":52,"text":135824},{"id":135965,"depth":52,"text":135966},{"id":136023,"depth":52,"text":136024},{"id":136084,"depth":46,"text":136085,"children":136637},[136638,136639],{"id":136107,"depth":52,"text":136108},{"id":136339,"depth":52,"text":136340},{"id":136468,"depth":46,"text":136469,"children":136641},[136642,136643],{"id":136472,"depth":52,"text":136473},{"id":136511,"depth":52,"text":136512},{"id":136562,"depth":46,"text":136563},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135417,"description":542},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136651,"title":136652,"body":136653,"description":542,"extension":543,"meta":138339,"navigation":246,"path":138340,"seo":138341,"stem":138342,"__hash__":138343},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136654,"toc":138328},[136655,136658,136662,136666,136669,136676,136679,136682,136720,136723,136725,136739,136743,136752,136756,136761,136764,136767,136770,136805,136810,136813,136843,136846,136851,136854,136857,136887,136890,136944,136947,136951,136956,136968,136971,136975,137005,137008,137013,137016,137046,137049,137053,137070,137074,137078,137081,137114,137117,137121,137124,137127,137130,137133,137136,137247,137250,137253,137256,137358,137361,137365,137369,137373,137376,137416,137419,137421,137437,137441,137444,137449,137530,137533,137536,137662,137667,137670,137678,137681,137686,137771,137774,137778,137781,137784,137788,137808,137813,137897,137900,137905,137908,137911,137989,137992,137995,137998,138001,138004,138009,138012,138015,138087,138090,138095,138098,138195,138198,138204,138207,138210,138213,138216,138219,138222,138225,138228,138232,138237,138240,138273,138278,138281,138322,138325],[10,136656,136652],{"id":136657},"_14-html5与css3新特性",[559,136659,136661],{"id":136660},"_141-html5的新特性","14.1 HTML5的新特性",[588,136663,136665],{"id":136664},"_1411-基本标签","14.1.1 基本标签",[14,136667,136668],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,136670,136671,136672,136675],{},"这些新特性都有兼容性问题，基本是 ",[765,136673,136674],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,136677,136678],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,136680,136681],{},"现在使用的是新特性：",[1618,136683,136684,136690,136696,136702,136708,136714],{},[574,136685,136686,136689],{},[33,136687,136688],{},"\u003Cheader>"," 头部标签",[574,136691,136692,136695],{},[33,136693,136694],{},"\u003Cnav>"," 导航标签",[574,136697,136698,136701],{},[33,136699,136700],{},"\u003Carticle>"," 内容标签",[574,136703,136704,136707],{},[33,136705,136706],{},"\u003Csection>"," 定义文档某个区域",[574,136709,136710,136713],{},[33,136711,136712],{},"\u003Caside>"," 侧边栏标签",[574,136715,136716,136719],{},[33,136717,136718],{},"\u003Cfooter>"," 尾部标签",[1941,136721],{"style":126782,"src":136722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,136724,650],{},[1618,136726,136727,136730,136733,136736],{},[574,136728,136729],{},"这种语义化标准主要是针对搜索引擎的",[574,136731,136732],{},"这些标签页面中可以经常使用",[574,136734,136735],{},"在IE9中，需要把这些元素转换为块级元素",[574,136737,136738],{},"移动端更喜欢使用这些标签",[588,136740,136742],{"id":136741},"_1412-多媒体标签","14.1.2 多媒体标签",[14,136744,136745,136746,136748,136749,136751],{},"音频 ",[765,136747,28608],{}," 和视频 ",[765,136750,28617],{}," 两个标签",[22437,136753,136755],{"id":136754},"_14121-视频标签-video","14.1.2.1 视频标签- video",[571,136757,136758],{},[574,136759,136760],{},"支持格式：",[1941,136762],{"style":126782,"src":136763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,136765,136766],{},"尽量使用MP4，兼容性好",[14,136768,136769],{},"用MP4就可以",[26,136771,136773],{"className":127673,"code":136772,"language":127675,"meta":31,"style":31},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[33,136774,136775],{"__ignoreMap":31},[36,136776,136777,136779,136781,136783,136785,136788,136790,136793,136796,136799,136801,136803],{"class":38,"line":39},[36,136778,179],{"class":98},[36,136780,28617],{"class":51733},[36,136782,55671],{"class":55},[36,136784,176],{"class":98},[36,136786,136787],{"class":59},"\"movie.mp4\"",[36,136789,92855],{"class":55},[36,136791,136792],{"class":55}," autoplay",[36,136794,136795],{"class":55}," muted",[36,136797,136798],{"class":55}," loop",[36,136800,55746],{"class":98},[36,136802,28617],{"class":51733},[36,136804,188],{"class":98},[571,136806,136807],{"start":46},[574,136808,136809],{},"兼容写法",[14,136811,136812],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[26,136814,136815],{"className":127673,"code":136772,"language":127675,"meta":31,"style":31},[33,136816,136817],{"__ignoreMap":31},[36,136818,136819,136821,136823,136825,136827,136829,136831,136833,136835,136837,136839,136841],{"class":38,"line":39},[36,136820,179],{"class":98},[36,136822,28617],{"class":51733},[36,136824,55671],{"class":55},[36,136826,176],{"class":98},[36,136828,136787],{"class":59},[36,136830,92855],{"class":55},[36,136832,136792],{"class":55},[36,136834,136795],{"class":55},[36,136836,136798],{"class":55},[36,136838,55746],{"class":98},[36,136840,28617],{"class":51733},[36,136842,188],{"class":98},[14,136844,136845],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[571,136847,136848],{"start":52},[574,136849,136850],{},"video常用属性",[1941,136852],{"style":126782,"src":136853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,136855,136856],{},"poster属性后面是跟的等待加载图片的地址",[26,136858,136859],{"className":127673,"code":134428,"language":127675,"meta":31,"style":31},[33,136860,136861],{"__ignoreMap":31},[36,136862,136863,136865,136867,136869,136871,136873,136875,136877,136879,136881,136883,136885],{"class":38,"line":39},[36,136864,179],{"class":98},[36,136866,1941],{"class":51733},[36,136868,55671],{"class":55},[36,136870,176],{"class":98},[36,136872,134443],{"class":59},[36,136874,55679],{"class":55},[36,136876,176],{"class":98},[36,136878,134450],{"class":59},[36,136880,134453],{"class":55},[36,136882,176],{"class":98},[36,136884,134458],{"class":59},[36,136886,188],{"class":98},[14,136888,136889],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[26,136891,136893],{"className":126926,"code":136892,"language":126928,"meta":31,"style":31},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[33,136894,136895,136900,136906,136930,136935,136940],{"__ignoreMap":31},[36,136896,136897],{"class":38,"line":39},[36,136898,136899],{"class":42},"\u002F* 2D 位移 *\u002F\n",[36,136901,136902,136904],{"class":38,"line":46},[36,136903,52043],{"class":51733},[36,136905,16011],{"class":98},[36,136907,136908,136911,136913,136916,136918,136920,136922,136924,136926,136928],{"class":38,"line":52},[36,136909,136910],{"class":109},"  transform",[36,136912,51869],{"class":98},[36,136914,136915],{"class":109},"translate",[36,136917,621],{"class":98},[36,136919,926],{"class":109},[36,136921,51924],{"class":163},[36,136923,12874],{"class":98},[36,136925,1270],{"class":109},[36,136927,51924],{"class":163},[36,136929,3170],{"class":98},[36,136931,136932],{"class":38,"line":66},[36,136933,136934],{"class":42},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[36,136936,136937],{"class":38,"line":72},[36,136938,136939],{"class":42},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[36,136941,136942],{"class":38,"line":82},[36,136943,2044],{"class":98},[14,136945,136946],{},"muted:自动静音属性",[22437,136948,136950],{"id":136949},"_14122-音频标签audio","14.1.2.2 音频标签audio",[571,136952,136953],{},[574,136954,136955],{},"基本使用",[14,136957,136958,136959,136964,136965],{},"当前 ",[765,136960,136961],{},[33,136962,136963],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[765,136966,136967],{},"mp3格式",[1941,136969],{"style":126782,"src":136970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[571,136972,136973],{"start":46},[574,136974,136809],{},[26,136976,136977],{"className":127673,"code":136772,"language":127675,"meta":31,"style":31},[33,136978,136979],{"__ignoreMap":31},[36,136980,136981,136983,136985,136987,136989,136991,136993,136995,136997,136999,137001,137003],{"class":38,"line":39},[36,136982,179],{"class":98},[36,136984,28617],{"class":51733},[36,136986,55671],{"class":55},[36,136988,176],{"class":98},[36,136990,136787],{"class":59},[36,136992,92855],{"class":55},[36,136994,136792],{"class":55},[36,136996,136795],{"class":55},[36,136998,136798],{"class":55},[36,137000,55746],{"class":98},[36,137002,28617],{"class":51733},[36,137004,188],{"class":98},[14,137006,137007],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[571,137009,137010],{"start":52},[574,137011,137012],{},"常用属性",[1941,137014],{"style":126782,"src":137015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[26,137017,137018],{"className":127673,"code":136772,"language":127675,"meta":31,"style":31},[33,137019,137020],{"__ignoreMap":31},[36,137021,137022,137024,137026,137028,137030,137032,137034,137036,137038,137040,137042,137044],{"class":38,"line":39},[36,137023,179],{"class":98},[36,137025,28617],{"class":51733},[36,137027,55671],{"class":55},[36,137029,176],{"class":98},[36,137031,136787],{"class":59},[36,137033,92855],{"class":55},[36,137035,136792],{"class":55},[36,137037,136795],{"class":55},[36,137039,136798],{"class":55},[36,137041,55746],{"class":98},[36,137043,28617],{"class":51733},[36,137045,188],{"class":98},[14,137047,137048],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22437,137050,137052],{"id":137051},"_14123-总结","14.1.2.3 总结",[1618,137054,137055,137058,137061,137064,137067],{},[574,137056,137057],{},"音频标签和视频标签使用方式基本一致",[574,137059,137060],{},"浏览器支持情况不同",[574,137062,137063],{},"谷歌浏览器把音频和视频自动播放禁止了",[574,137065,137066],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[574,137068,137069],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[588,137071,137073],{"id":137072},"_1413-表单元素","14.1.3 表单元素",[22437,137075,137077],{"id":137076},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1941,137079],{"style":126782,"src":137080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[26,137082,137084],{"className":127673,"code":137083,"language":127675,"meta":31,"style":31},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[33,137085,137086],{"__ignoreMap":31},[36,137087,137088,137090,137092,137094,137096,137098,137100,137102,137105,137107,137109,137112],{"class":38,"line":39},[36,137089,179],{"class":98},[36,137091,54253],{"class":51733},[36,137093,54256],{"class":55},[36,137095,176],{"class":98},[36,137097,63131],{"class":59},[36,137099,15359],{"class":55},[36,137101,176],{"class":98},[36,137103,137104],{"class":59},"\"username\"",[36,137106,61452],{"class":55},[36,137108,176],{"class":98},[36,137110,137111],{"class":59},"\"请输入用户名\"",[36,137113,188],{"class":98},[1941,137115],{"style":126782,"src":137116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22437,137118,137120],{"id":137119},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1941,137122],{"style":126782,"src":137123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,137125,137126],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,137128,137129],{},"快捷操作：",[1941,137131],{"style":126782,"src":137132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,137134,137135],{},"例子1：",[26,137137,137139],{"className":127673,"code":137138,"language":127675,"meta":31,"style":31},"\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",[33,137140,137141,137164,137191,137220,137239],{"__ignoreMap":31},[36,137142,137143,137145,137147,137149,137151,137154,137157,137159,137162],{"class":38,"line":39},[36,137144,179],{"class":98},[36,137146,67057],{"class":51733},[36,137148,67060],{"class":55},[36,137150,176],{"class":98},[36,137152,137153],{"class":59},"\"\u002Fsubmit\"",[36,137155,137156],{"class":55}," method",[36,137158,176],{"class":98},[36,137160,137161],{"class":59},"\"post\"",[36,137163,188],{"class":98},[36,137165,137166,137168,137170,137172,137174,137176,137178,137180,137182,137184,137186,137189],{"class":38,"line":46},[36,137167,52576],{"class":98},[36,137169,54253],{"class":51733},[36,137171,54256],{"class":55},[36,137173,176],{"class":98},[36,137175,63131],{"class":59},[36,137177,15359],{"class":55},[36,137179,176],{"class":98},[36,137181,137104],{"class":59},[36,137183,61452],{"class":55},[36,137185,176],{"class":98},[36,137187,137188],{"class":59},"\"用户名\"",[36,137190,188],{"class":98},[36,137192,137193,137195,137197,137199,137201,137204,137206,137208,137211,137213,137215,137218],{"class":38,"line":52},[36,137194,52576],{"class":98},[36,137196,54253],{"class":51733},[36,137198,54256],{"class":55},[36,137200,176],{"class":98},[36,137202,137203],{"class":59},"\"password\"",[36,137205,15359],{"class":55},[36,137207,176],{"class":98},[36,137209,137210],{"class":59},"\"pwd\"",[36,137212,61452],{"class":55},[36,137214,176],{"class":98},[36,137216,137217],{"class":59},"\"密码\"",[36,137219,188],{"class":98},[36,137221,137222,137224,137226,137228,137230,137232,137235,137237],{"class":38,"line":66},[36,137223,52576],{"class":98},[36,137225,54319],{"class":51733},[36,137227,54256],{"class":55},[36,137229,176],{"class":98},[36,137231,67080],{"class":59},[36,137233,137234],{"class":98},">提交\u003C\u002F",[36,137236,54319],{"class":51733},[36,137238,188],{"class":98},[36,137240,137241,137243,137245],{"class":38,"line":72},[36,137242,52217],{"class":98},[36,137244,67057],{"class":51733},[36,137246,188],{"class":98},[1941,137248],{"style":126782,"src":137249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,137251,137252],{},"value是表单域的内容",[14,137254,137255],{},"例子2：",[26,137257,137258],{"className":127673,"code":137138,"language":127675,"meta":31,"style":31},[33,137259,137260,137280,137306,137332,137350],{"__ignoreMap":31},[36,137261,137262,137264,137266,137268,137270,137272,137274,137276,137278],{"class":38,"line":39},[36,137263,179],{"class":98},[36,137265,67057],{"class":51733},[36,137267,67060],{"class":55},[36,137269,176],{"class":98},[36,137271,137153],{"class":59},[36,137273,137156],{"class":55},[36,137275,176],{"class":98},[36,137277,137161],{"class":59},[36,137279,188],{"class":98},[36,137281,137282,137284,137286,137288,137290,137292,137294,137296,137298,137300,137302,137304],{"class":38,"line":46},[36,137283,52576],{"class":98},[36,137285,54253],{"class":51733},[36,137287,54256],{"class":55},[36,137289,176],{"class":98},[36,137291,63131],{"class":59},[36,137293,15359],{"class":55},[36,137295,176],{"class":98},[36,137297,137104],{"class":59},[36,137299,61452],{"class":55},[36,137301,176],{"class":98},[36,137303,137188],{"class":59},[36,137305,188],{"class":98},[36,137307,137308,137310,137312,137314,137316,137318,137320,137322,137324,137326,137328,137330],{"class":38,"line":52},[36,137309,52576],{"class":98},[36,137311,54253],{"class":51733},[36,137313,54256],{"class":55},[36,137315,176],{"class":98},[36,137317,137203],{"class":59},[36,137319,15359],{"class":55},[36,137321,176],{"class":98},[36,137323,137210],{"class":59},[36,137325,61452],{"class":55},[36,137327,176],{"class":98},[36,137329,137217],{"class":59},[36,137331,188],{"class":98},[36,137333,137334,137336,137338,137340,137342,137344,137346,137348],{"class":38,"line":66},[36,137335,52576],{"class":98},[36,137337,54319],{"class":51733},[36,137339,54256],{"class":55},[36,137341,176],{"class":98},[36,137343,67080],{"class":59},[36,137345,137234],{"class":98},[36,137347,54319],{"class":51733},[36,137349,188],{"class":98},[36,137351,137352,137354,137356],{"class":38,"line":72},[36,137353,52217],{"class":98},[36,137355,67057],{"class":51733},[36,137357,188],{"class":98},[1941,137359],{"style":126782,"src":137360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[559,137362,137364],{"id":137363},"_142-css新特性","14.2 CSS新特性",[588,137366,137368],{"id":137367},"_1421-新增选择器","14.2.1 新增选择器",[22437,137370,137372],{"id":137371},"_14211-属性选择器","14.2.1.1 属性选择器",[1941,137374],{"style":126782,"src":137375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[26,137377,137379],{"className":126926,"code":137378,"language":126928,"meta":31,"style":31},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[33,137380,137381,137396,137412],{"__ignoreMap":31},[36,137382,137383,137385,137387,137389,137391,137393],{"class":38,"line":39},[36,137384,54253],{"class":51733},[36,137386,1503],{"class":98},[36,137388,103538],{"class":55},[36,137390,176],{"class":163},[36,137392,63131],{"class":59},[36,137394,137395],{"class":98},"] {\n",[36,137397,137398,137400,137402,137404,137406,137408,137410],{"class":38,"line":46},[36,137399,71328],{"class":109},[36,137401,51869],{"class":98},[36,137403,833],{"class":109},[36,137405,51924],{"class":163},[36,137407,51953],{"class":109},[36,137409,130506],{"class":109},[36,137411,1772],{"class":98},[36,137413,137414],{"class":38,"line":52},[36,137415,2044],{"class":98},[1941,137417],{"style":126782,"src":137418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,137420,650],{},[1618,137422,137423,137426,137429,137432],{},[574,137424,137425],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[574,137427,137428],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[574,137430,137431],{},"属性选择器也可以选择出来自定义的属性",[574,137433,137434,137436],{},[765,137435,9466],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22437,137438,137440],{"id":137439},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1941,137442],{"style":126782,"src":137443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[571,137445,137446],{},[574,137447,137448],{},"fist-child",[26,137450,137452],{"className":126926,"code":137451,"language":126928,"meta":31,"style":31},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[33,137453,137454,137459,137474,137494,137512],{"__ignoreMap":31},[36,137455,137456],{"class":38,"line":39},[36,137457,137458],{"class":42},"\u002F* 属性选择器 *\u002F\n",[36,137460,137461,137463,137465,137467,137469,137471],{"class":38,"line":46},[36,137462,54253],{"class":51733},[36,137464,1503],{"class":98},[36,137466,103538],{"class":55},[36,137468,176],{"class":163},[36,137470,63131],{"class":59},[36,137472,137473],{"class":98},"] { }\n",[36,137475,137476,137478,137480,137482,137485,137488,137491],{"class":38,"line":52},[36,137477,54253],{"class":51733},[36,137479,1503],{"class":98},[36,137481,15133],{"class":55},[36,137483,137484],{"class":163},"^=",[36,137486,137487],{"class":59},"\"icon\"",[36,137489,137490],{"class":98},"] { }  ",[36,137492,137493],{"class":42},"\u002F* 以 icon 开头 *\u002F\n",[36,137495,137496,137498,137500,137502,137505,137507,137509],{"class":38,"line":66},[36,137497,54253],{"class":51733},[36,137499,1503],{"class":98},[36,137501,15133],{"class":55},[36,137503,137504],{"class":163},"$=",[36,137506,137487],{"class":59},[36,137508,137490],{"class":98},[36,137510,137511],{"class":42},"\u002F* 以 icon 结尾 *\u002F\n",[36,137513,137514,137516,137518,137520,137523,137525,137527],{"class":38,"line":72},[36,137515,54253],{"class":51733},[36,137517,1503],{"class":98},[36,137519,15133],{"class":55},[36,137521,137522],{"class":163},"*=",[36,137524,137487],{"class":59},[36,137526,137490],{"class":98},[36,137528,137529],{"class":42},"\u002F* 包含 icon *\u002F\n",[14,137531,137532],{},"ul的第一个儿子文本为红色",[14,137534,137535],{},"一定要在冒号前加空格，不然就是选中所有的了",[26,137537,137539],{"className":126926,"code":137538,"language":126928,"meta":31,"style":31},".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",[33,137540,137541,137547,137557,137561,137565,137570,137583,137596,137612,137629,137646],{"__ignoreMap":31},[36,137542,137543,137545],{"class":38,"line":39},[36,137544,127217],{"class":55},[36,137546,16011],{"class":98},[36,137548,137549,137551,137553,137555],{"class":38,"line":46},[36,137550,71337],{"class":109},[36,137552,51869],{"class":98},[36,137554,57853],{"class":109},[36,137556,1772],{"class":98},[36,137558,137559],{"class":38,"line":52},[36,137560,2044],{"class":98},[36,137562,137563],{"class":38,"line":66},[36,137564,136387],{"class":98},[36,137566,137567],{"class":38,"line":72},[36,137568,137569],{"class":42},"\u002F* 结构伪类选择器 *\u002F\n",[36,137571,137572,137574,137577,137580],{"class":38,"line":82},[36,137573,574],{"class":51733},[36,137575,137576],{"class":55},":first-child",[36,137578,137579],{"class":98}," { }           ",[36,137581,137582],{"class":42},"\u002F* 第一个 *\u002F\n",[36,137584,137585,137587,137590,137593],{"class":38,"line":88},[36,137586,574],{"class":51733},[36,137588,137589],{"class":55},":last-child",[36,137591,137592],{"class":98}," { }            ",[36,137594,137595],{"class":42},"\u002F* 最后一个 *\u002F\n",[36,137597,137598,137600,137602,137604,137606,137609],{"class":38,"line":113},[36,137599,574],{"class":51733},[36,137601,129840],{"class":55},[36,137603,621],{"class":98},[36,137605,694],{"class":109},[36,137607,137608],{"class":98},") { }          ",[36,137610,137611],{"class":42},"\u002F* 第2个 *\u002F\n",[36,137613,137614,137616,137618,137620,137623,137626],{"class":38,"line":119},[36,137615,574],{"class":51733},[36,137617,129840],{"class":55},[36,137619,621],{"class":98},[36,137621,137622],{"class":109},"2n",[36,137624,137625],{"class":98},") { }         ",[36,137627,137628],{"class":42},"\u002F* 偶数 *\u002F\n",[36,137630,137631,137633,137635,137637,137640,137643],{"class":38,"line":131},[36,137632,574],{"class":51733},[36,137634,129840],{"class":55},[36,137636,621],{"class":98},[36,137638,137639],{"class":109},"2n+1",[36,137641,137642],{"class":98},") { }       ",[36,137644,137645],{"class":42},"\u002F* 奇数 *\u002F\n",[36,137647,137648,137650,137652,137654,137657,137659],{"class":38,"line":137},[36,137649,574],{"class":51733},[36,137651,129840],{"class":55},[36,137653,621],{"class":98},[36,137655,137656],{"class":109},"-n+3",[36,137658,137642],{"class":98},[36,137660,137661],{"class":42},"\u002F* 前3个 *\u002F\n",[52043,137663,137666],{"className":137664},[137665],"example","\n  示例内容\n",[14,137668,137669],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1618,137671,137672],{},[574,137673,137674,137677],{},[33,137675,137676],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,137679,137680],{},"也就是说它选择的是熊大",[571,137682,137683],{"start":82},[574,137684,137685],{},"权重",[26,137687,137689],{"className":126926,"code":137688,"language":126928,"meta":31,"style":31},"\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",[33,137690,137691,137695,137705,137715,137729,137743,137757],{"__ignoreMap":31},[36,137692,137693],{"class":38,"line":39},[36,137694,137569],{"class":42},[36,137696,137697,137699,137701,137703],{"class":38,"line":46},[36,137698,574],{"class":51733},[36,137700,137576],{"class":55},[36,137702,137579],{"class":98},[36,137704,137582],{"class":42},[36,137706,137707,137709,137711,137713],{"class":38,"line":52},[36,137708,574],{"class":51733},[36,137710,137589],{"class":55},[36,137712,137592],{"class":98},[36,137714,137595],{"class":42},[36,137716,137717,137719,137721,137723,137725,137727],{"class":38,"line":66},[36,137718,574],{"class":51733},[36,137720,129840],{"class":55},[36,137722,621],{"class":98},[36,137724,694],{"class":109},[36,137726,137608],{"class":98},[36,137728,137611],{"class":42},[36,137730,137731,137733,137735,137737,137739,137741],{"class":38,"line":72},[36,137732,574],{"class":51733},[36,137734,129840],{"class":55},[36,137736,621],{"class":98},[36,137738,137622],{"class":109},[36,137740,137625],{"class":98},[36,137742,137628],{"class":42},[36,137744,137745,137747,137749,137751,137753,137755],{"class":38,"line":82},[36,137746,574],{"class":51733},[36,137748,129840],{"class":55},[36,137750,621],{"class":98},[36,137752,137639],{"class":109},[36,137754,137642],{"class":98},[36,137756,137645],{"class":42},[36,137758,137759,137761,137763,137765,137767,137769],{"class":38,"line":88},[36,137760,574],{"class":51733},[36,137762,129840],{"class":55},[36,137764,621],{"class":98},[36,137766,137656],{"class":109},[36,137768,137642],{"class":98},[36,137770,137661],{"class":42},[14,137772,137773],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22437,137775,137777],{"id":137776},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,137779,137780],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1941,137782],{"style":126782,"src":137783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[571,137785,137786],{},[574,137787,650],{},[1618,137789,137790,137793,137796,137799,137802,137805],{},[574,137791,137792],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[574,137794,137795],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[574,137797,137798],{},"语法： element::before {}",[574,137800,137801],{},"before 和 after 必须有 content 属性",[574,137803,137804],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[574,137806,137807],{},"伪元素选择器和标签选择器一样，权重为 1",[571,137809,137810],{"start":46},[574,137811,137812],{},"实例",[26,137814,137815],{"className":126926,"code":137688,"language":126928,"meta":31,"style":31},[33,137816,137817,137821,137831,137841,137855,137869,137883],{"__ignoreMap":31},[36,137818,137819],{"class":38,"line":39},[36,137820,137569],{"class":42},[36,137822,137823,137825,137827,137829],{"class":38,"line":46},[36,137824,574],{"class":51733},[36,137826,137576],{"class":55},[36,137828,137579],{"class":98},[36,137830,137582],{"class":42},[36,137832,137833,137835,137837,137839],{"class":38,"line":52},[36,137834,574],{"class":51733},[36,137836,137589],{"class":55},[36,137838,137592],{"class":98},[36,137840,137595],{"class":42},[36,137842,137843,137845,137847,137849,137851,137853],{"class":38,"line":66},[36,137844,574],{"class":51733},[36,137846,129840],{"class":55},[36,137848,621],{"class":98},[36,137850,694],{"class":109},[36,137852,137608],{"class":98},[36,137854,137611],{"class":42},[36,137856,137857,137859,137861,137863,137865,137867],{"class":38,"line":72},[36,137858,574],{"class":51733},[36,137860,129840],{"class":55},[36,137862,621],{"class":98},[36,137864,137622],{"class":109},[36,137866,137625],{"class":98},[36,137868,137628],{"class":42},[36,137870,137871,137873,137875,137877,137879,137881],{"class":38,"line":82},[36,137872,574],{"class":51733},[36,137874,129840],{"class":55},[36,137876,621],{"class":98},[36,137878,137639],{"class":109},[36,137880,137642],{"class":98},[36,137882,137645],{"class":42},[36,137884,137885,137887,137889,137891,137893,137895],{"class":38,"line":88},[36,137886,574],{"class":51733},[36,137888,129840],{"class":55},[36,137890,621],{"class":98},[36,137892,137656],{"class":109},[36,137894,137642],{"class":98},[36,137896,137661],{"class":42},[1941,137898],{"style":126782,"src":137899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[571,137901,137902],{"start":52},[574,137903,137904],{},"使用场景1",[1941,137906],{"style":126782,"src":137907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,137909,137910],{},"不需要再加盒子来整红色那部分了",[26,137912,137914],{"className":126926,"code":137913,"language":126928,"meta":31,"style":31},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[33,137915,137916,137921,137930,137941,137951,137955,137964,137975,137985],{"__ignoreMap":31},[36,137917,137918],{"class":38,"line":39},[36,137919,137920],{"class":42},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[36,137922,137923,137925,137928],{"class":38,"line":46},[36,137924,52043],{"class":51733},[36,137926,137927],{"class":55},"::before",[36,137929,16011],{"class":98},[36,137931,137932,137935,137937,137939],{"class":38,"line":52},[36,137933,137934],{"class":109},"  content",[36,137936,51869],{"class":98},[36,137938,8103],{"class":59},[36,137940,1772],{"class":98},[36,137942,137943,137945,137947,137949],{"class":38,"line":66},[36,137944,128542],{"class":109},[36,137946,51869],{"class":98},[36,137948,61301],{"class":109},[36,137950,1772],{"class":98},[36,137952,137953],{"class":38,"line":72},[36,137954,2044],{"class":98},[36,137956,137957,137959,137962],{"class":38,"line":82},[36,137958,52043],{"class":51733},[36,137960,137961],{"class":55},"::after",[36,137963,16011],{"class":98},[36,137965,137966,137968,137970,137973],{"class":38,"line":88},[36,137967,137934],{"class":109},[36,137969,51869],{"class":98},[36,137971,137972],{"class":59},"\"→\"",[36,137974,1772],{"class":98},[36,137976,137977,137979,137981,137983],{"class":38,"line":113},[36,137978,71337],{"class":109},[36,137980,51869],{"class":98},[36,137982,62502],{"class":109},[36,137984,1772],{"class":98},[36,137986,137987],{"class":38,"line":119},[36,137988,2044],{"class":98},[1941,137990],{"style":126782,"src":137991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,137993,137994],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1941,137996],{"style":126782,"src":137997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,137999,138000],{},"但是在引用时需要先转义一下",[14,138002,138003],{},"content='\\e930'",[571,138005,138006],{"start":66},[574,138007,138008],{},"使用场景2",[14,138010,138011],{},"仿土豆效果",[14,138013,138014],{},"通过使用伪元素选择器可以减少body中盒子的数量",[26,138016,138017],{"className":126926,"code":137913,"language":126928,"meta":31,"style":31},[33,138018,138019,138023,138031,138041,138051,138055,138063,138073,138083],{"__ignoreMap":31},[36,138020,138021],{"class":38,"line":39},[36,138022,137920],{"class":42},[36,138024,138025,138027,138029],{"class":38,"line":46},[36,138026,52043],{"class":51733},[36,138028,137927],{"class":55},[36,138030,16011],{"class":98},[36,138032,138033,138035,138037,138039],{"class":38,"line":52},[36,138034,137934],{"class":109},[36,138036,51869],{"class":98},[36,138038,8103],{"class":59},[36,138040,1772],{"class":98},[36,138042,138043,138045,138047,138049],{"class":38,"line":66},[36,138044,128542],{"class":109},[36,138046,51869],{"class":98},[36,138048,61301],{"class":109},[36,138050,1772],{"class":98},[36,138052,138053],{"class":38,"line":72},[36,138054,2044],{"class":98},[36,138056,138057,138059,138061],{"class":38,"line":82},[36,138058,52043],{"class":51733},[36,138060,137961],{"class":55},[36,138062,16011],{"class":98},[36,138064,138065,138067,138069,138071],{"class":38,"line":88},[36,138066,137934],{"class":109},[36,138068,51869],{"class":98},[36,138070,137972],{"class":59},[36,138072,1772],{"class":98},[36,138074,138075,138077,138079,138081],{"class":38,"line":113},[36,138076,71337],{"class":109},[36,138078,51869],{"class":98},[36,138080,62502],{"class":109},[36,138082,1772],{"class":98},[36,138084,138085],{"class":38,"line":119},[36,138086,2044],{"class":98},[1941,138088],{"style":126782,"src":138089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[571,138091,138092],{"start":72},[574,138093,138094],{},"使用场景3",[14,138096,138097],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[26,138099,138101],{"className":126926,"code":138100,"language":126928,"meta":31,"style":31},".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",[33,138102,138103,138109,138119,138123,138127,138131,138139,138149,138159,138163,138171,138181,138191],{"__ignoreMap":31},[36,138104,138105,138107],{"class":38,"line":39},[36,138106,130774],{"class":55},[36,138108,16011],{"class":98},[36,138110,138111,138113,138115,138117],{"class":38,"line":46},[36,138112,131406],{"class":109},[36,138114,51869],{"class":98},[36,138116,24175],{"class":109},[36,138118,1772],{"class":98},[36,138120,138121],{"class":38,"line":52},[36,138122,2044],{"class":98},[36,138124,138125],{"class":38,"line":66},[36,138126,136387],{"class":98},[36,138128,138129],{"class":38,"line":72},[36,138130,137920],{"class":42},[36,138132,138133,138135,138137],{"class":38,"line":82},[36,138134,52043],{"class":51733},[36,138136,137927],{"class":55},[36,138138,16011],{"class":98},[36,138140,138141,138143,138145,138147],{"class":38,"line":88},[36,138142,137934],{"class":109},[36,138144,51869],{"class":98},[36,138146,8103],{"class":59},[36,138148,1772],{"class":98},[36,138150,138151,138153,138155,138157],{"class":38,"line":113},[36,138152,128542],{"class":109},[36,138154,51869],{"class":98},[36,138156,61301],{"class":109},[36,138158,1772],{"class":98},[36,138160,138161],{"class":38,"line":119},[36,138162,2044],{"class":98},[36,138164,138165,138167,138169],{"class":38,"line":131},[36,138166,52043],{"class":51733},[36,138168,137961],{"class":55},[36,138170,16011],{"class":98},[36,138172,138173,138175,138177,138179],{"class":38,"line":137},[36,138174,137934],{"class":109},[36,138176,51869],{"class":98},[36,138178,137972],{"class":59},[36,138180,1772],{"class":98},[36,138182,138183,138185,138187,138189],{"class":38,"line":147},[36,138184,71337],{"class":109},[36,138186,51869],{"class":98},[36,138188,62502],{"class":109},[36,138190,1772],{"class":98},[36,138192,138193],{"class":38,"line":153},[36,138194,2044],{"class":98},[14,138196,138197],{},"div {\nmargin: 0 auto;\n}",[26,138199,138202],{"className":138200,"code":138201,"language":5638},[5636],"\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",[33,138203,138201],{"__ignoreMap":31},[14,138205,138206],{},"如果想让多个元素都发生变化",[14,138208,138209],{},"不能如下操作：",[14,138211,138212],{},"transition: width 2s ease 0.5s;",[14,138214,138215],{},"transition: height 2s ease 0.5s;不对！！！",[14,138217,138218],{},"上方会样式冲突，导致不显示任何过渡效果",[14,138220,138221],{},"使用如下：加逗号隔开",[14,138223,138224],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,138226,138227],{},"transition all 2s ease;",[588,138229,138231],{"id":138230},"_1426-过渡练习","14.2.6 过渡练习",[571,138233,138234],{},[574,138235,138236],{},"进度条",[1941,138238],{"style":126782,"src":138239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[26,138241,138243],{"className":126926,"code":138242,"language":126928,"meta":31,"style":31},"div {\n  transition: all 0.3s ease;\n}\n",[33,138244,138245,138251,138269],{"__ignoreMap":31},[36,138246,138247,138249],{"class":38,"line":39},[36,138248,52043],{"class":51733},[36,138250,16011],{"class":98},[36,138252,138253,138256,138258,138260,138263,138265,138267],{"class":38,"line":46},[36,138254,138255],{"class":109},"  transition",[36,138257,51869],{"class":98},[36,138259,28555],{"class":109},[36,138261,138262],{"class":109}," 0.3",[36,138264,1308],{"class":163},[36,138266,79112],{"class":109},[36,138268,1772],{"class":98},[36,138270,138271],{"class":38,"line":52},[36,138272,2044],{"class":98},[571,138274,138275],{"start":46},[574,138276,138277],{},"小米logo",[14,138279,138280],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[26,138282,138284],{"className":126926,"code":138283,"language":126928,"meta":31,"style":31},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[33,138285,138286,138291,138297,138313,138318],{"__ignoreMap":31},[36,138287,138288],{"class":38,"line":39},[36,138289,138290],{"class":42},"\u002F* CSS3 过渡 *\u002F\n",[36,138292,138293,138295],{"class":38,"line":46},[36,138294,52043],{"class":51733},[36,138296,16011],{"class":98},[36,138298,138299,138301,138303,138305,138307,138309,138311],{"class":38,"line":52},[36,138300,138255],{"class":109},[36,138302,51869],{"class":98},[36,138304,28555],{"class":109},[36,138306,138262],{"class":109},[36,138308,1308],{"class":163},[36,138310,79112],{"class":109},[36,138312,1772],{"class":98},[36,138314,138315],{"class":38,"line":66},[36,138316,138317],{"class":42},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[36,138319,138320],{"class":38,"line":72},[36,138321,2044],{"class":98},[14,138323,138324],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[537,138326,138327],{},"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":31,"searchDepth":46,"depth":46,"links":138329},[138330,138335],{"id":136660,"depth":46,"text":136661,"children":138331},[138332,138333,138334],{"id":136664,"depth":52,"text":136665},{"id":136741,"depth":52,"text":136742},{"id":137072,"depth":52,"text":137073},{"id":137363,"depth":46,"text":137364,"children":138336},[138337,138338],{"id":137367,"depth":52,"text":137368},{"id":138230,"depth":52,"text":138231},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136652,"description":542},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138345,"title":138346,"body":138347,"description":542,"extension":543,"meta":140091,"navigation":246,"path":140092,"seo":140093,"stem":140094,"__hash__":140095},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138348,"toc":140072},[138349,138352,138356,138359,138365,138371,138375,138377,138380,138383,138386,138389,138392,138395,138398,138402,138406,138409,138412,138415,138419,138422,138425,138430,138433,138436,138439,138443,138446,138455,138458,138461,138465,138468,138471,138476,138483,138497,138505,138512,138517,138520,138523,138526,138533,138537,138543,138549,138552,138555,138560,138566,138568,138576,138581,138584,138590,138592,138597,138602,138605,138607,138612,138615,138620,138625,138659,138663,138667,138670,138674,138677,138763,138766,138803,138806,138842,138846,138851,138864,138918,138920,138948,138950,138978,138984,138998,139000,139044,139046,139090,139093,139100,139111,139113,139140,139142,139168,139175,139191,139193,139287,139289,139383,139390,139393,139398,139404,139478,139481,139483,139519,139521,139557,139560,139567,139586,139589,139592,139594,139619,139621,139645,139648,139651,139681,139685,139688,139751,139753,139819,139821,139885,139888,139920,139922,139948,139950,139976,139979,140010,140012,140038,140040,140066,140069],[10,138350,138346],{"id":138351},"_15-品优购项目上篇-搭建与公共模块",[559,138353,138355],{"id":138354},"_151-项目规划","15.1 项目规划",[1941,138357],{"style":126782,"src":138358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,138360,138361,138364],{},[765,138362,138363],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,138366,138367,138370],{},[765,138368,138369],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[559,138372,138374],{"id":138373},"_152-项目介绍","15.2 项目介绍",[14,138376,138363],{},[1941,138378],{"style":126782,"src":138379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,138381,138382],{},"主页：",[1941,138384],{"style":126782,"src":138385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,138387,138388],{},"列表页：",[1941,138390],{"style":126782,"src":138391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,138393,138394],{},"注册页：",[1941,138396],{"style":126782,"src":138397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[559,138399,138401],{"id":138400},"_153-项目搭建工作","15.3 项目搭建工作",[588,138403,138405],{"id":138404},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1941,138407],{"style":126782,"src":138408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,138410,138411],{},"经常更换的图片要放到upload文件夹中",[14,138413,138414],{},"不经常换的放到images文件夹中",[588,138416,138418],{"id":138417},"_1532-创建文件如下","15.3.2 创建文件如下",[1941,138420],{"style":126782,"src":138421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1941,138423],{"style":126782,"src":138424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,138426,138427],{},[765,138428,138429],{},"初始化样式：",[14,138431,138432],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,138434,138435],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,138437,138438],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[588,138440,138442],{"id":138441},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,138444,138445],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,138447,138448,138449,138454],{},"这里最典型的应用就是 ",[765,138450,138451],{},[33,138452,138453],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1941,138456],{"style":126782,"src":138457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,138459,138460],{},"通过link方法来引入",[588,138462,138464],{"id":138463},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1941,138466],{"style":126782,"src":138467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,138469,138470],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[571,138472,138473],{},[574,138474,138475],{},"制作favicon图标",[14,138477,138478,138479,138482],{},"①把品优购图标切成 ",[33,138480,138481],{},"png"," 图片",[14,138484,138485,138486,138488,138489,138492,138493],{},"②把 ",[33,138487,138481],{}," 图片转换为 ",[33,138490,138491],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[20,138494,138495],{"href":138495,"rel":138496},"http:\u002F\u002Fwww.bitbug.net\u002F",[24],[571,138498,138499,138502],{"start":46},[574,138500,138501],{},"favicon图标放到网站根目录下",[574,138503,138504],{},"HTML页面引入favicon",[14,138506,138507,138508,138511],{},"在html 页面里面的 ",[33,138509,138510],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,138513,138514],{},[33,138515,138516],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,138518,138519],{},"复制这行代码或者在生成这个的网站进行复制",[1941,138521],{"style":126782,"src":138522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,138524,138525],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,138527,138528,138529],{},"例如:",[20,138530,138531],{"href":138531,"rel":138532},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24],[588,138534,138536],{"id":138535},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,138538,138539,138542],{},[765,138540,138541],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,138544,138545,138548],{},[765,138546,138547],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,138550,138551],{},"页面必须有三个标签用来符合 SEO 优化",[1941,138553],{"style":126782,"src":138554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[571,138556,138557],{},[574,138558,138559],{},"title网站标题",[14,138561,138562,138565],{},[765,138563,138564],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,138567,69222],{},[1618,138569,138570,138573],{},[574,138571,138572],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[574,138574,138575],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[571,138577,138578],{"start":46},[574,138579,138580],{},"description网站描述",[14,138582,138583],{},"简要说明我们网站主要是做什么的",[14,138585,138586,138589],{},[765,138587,138588],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,138591,69222],{},[14,138593,138594],{},[33,138595,138596],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[571,138598,138599],{"start":52},[574,138600,138601],{},"keywords关键词",[14,138603,138604],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,138606,69222],{},[14,138608,138609],{},[33,138610,138611],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,138613,138614],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,138616,138617],{},[765,138618,138619],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[571,138621,138622],{"start":66},[574,138623,138624],{},"代码总结",[26,138626,138627],{"className":127673,"code":131030,"language":127675,"meta":31,"style":31},[33,138628,138629,138633,138647,138651],{"__ignoreMap":31},[36,138630,138631],{"class":38,"line":39},[36,138632,131037],{"class":42},[36,138634,138635,138637,138639,138641,138643,138645],{"class":38,"line":46},[36,138636,179],{"class":98},[36,138638,52043],{"class":51733},[36,138640,53918],{"class":55},[36,138642,176],{"class":98},[36,138644,131050],{"class":59},[36,138646,188],{"class":98},[36,138648,138649],{"class":38,"line":52},[36,138650,131057],{"class":98},[36,138652,138653,138655,138657],{"class":38,"line":66},[36,138654,52217],{"class":98},[36,138656,52043],{"class":51733},[36,138658,188],{"class":98},[559,138660,138662],{"id":138661},"_154-项目公共部分制作","15.4 项目公共部分制作",[588,138664,138666],{"id":138665},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1941,138668],{"style":126782,"src":138669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[588,138671,138673],{"id":138672},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,138675,138676],{},"布局思路：",[1618,138678,138679,138682,138685,138707,138740],{},[574,138680,138681],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[574,138683,138684],{},"里面包含版心的盒子",[574,138686,138687,138688],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1618,138689,138690,138698,138704],{},[574,138691,138692,138693,21939,138695,138697],{},"1 号盒子 里面包含一个",[33,138694,1618],{},[33,138696,1618],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[574,138699,138700,138701,138703],{},"里面的内容是水平排列，所以需要给",[33,138702,574],{},"设置浮动",[574,138705,138706],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[574,138708,138709,138710],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1618,138711,138712,138726,138731],{},[574,138713,138714,138715,21939,138717,138719,138720,138722,138723,138725],{},"2 号盒子 里面包含一个",[33,138716,1618],{},[33,138718,1618],{},"包裹",[33,138721,574],{},"，中间的",[33,138724,1533],{},"可以用样式去设置，也可以用字符 |",[574,138727,138728,138729,138703],{},"里面内容水平排列，给",[33,138730,574],{},[574,138732,138733,138734,138736,138737,138739],{},"找到里面所有偶数的 ",[33,138735,574],{}," 设置样式（偶数的 ",[33,138738,574],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[574,138741,138742,138743],{},"需要用到字体图标",[1618,138744,138745,138751,138754,138757,138760],{},[574,138746,138747,138748],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[33,138749,138750],{},"arrow-icon",[574,138752,138753],{},"先要引入字体图片的资源",[574,138755,138756],{},"在样式里面利用 font-face 来进行声明",[574,138758,138759],{},"在伪元素的 content属性设置 图标的编码",[574,138761,138762],{},"给伪元素设置font-family属性",[14,138764,138765],{},"结构实例代码：",[26,138767,138769],{"className":126926,"code":138768,"language":126928,"meta":31,"style":31},"div::before {\n  content: \"\";\n  display: block;\n}\n",[33,138770,138771,138779,138789,138799],{"__ignoreMap":31},[36,138772,138773,138775,138777],{"class":38,"line":39},[36,138774,52043],{"class":51733},[36,138776,137927],{"class":55},[36,138778,16011],{"class":98},[36,138780,138781,138783,138785,138787],{"class":38,"line":46},[36,138782,137934],{"class":109},[36,138784,51869],{"class":98},[36,138786,8103],{"class":59},[36,138788,1772],{"class":98},[36,138790,138791,138793,138795,138797],{"class":38,"line":52},[36,138792,128542],{"class":109},[36,138794,51869],{"class":98},[36,138796,61301],{"class":109},[36,138798,1772],{"class":98},[36,138800,138801],{"class":38,"line":66},[36,138802,2044],{"class":98},[14,138804,138805],{},"样式实例代码：",[26,138807,138808],{"className":126926,"code":138768,"language":126928,"meta":31,"style":31},[33,138809,138810,138818,138828,138838],{"__ignoreMap":31},[36,138811,138812,138814,138816],{"class":38,"line":39},[36,138813,52043],{"class":51733},[36,138815,137927],{"class":55},[36,138817,16011],{"class":98},[36,138819,138820,138822,138824,138826],{"class":38,"line":46},[36,138821,137934],{"class":109},[36,138823,51869],{"class":98},[36,138825,8103],{"class":59},[36,138827,1772],{"class":98},[36,138829,138830,138832,138834,138836],{"class":38,"line":52},[36,138831,128542],{"class":109},[36,138833,51869],{"class":98},[36,138835,61301],{"class":109},[36,138837,1772],{"class":98},[36,138839,138840],{"class":38,"line":66},[36,138841,2044],{"class":98},[588,138843,138845],{"id":138844},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1618,138847,138848],{},[574,138849,138850],{},"header 盒子必须要有高度",[14,138852,138853,138854,138856,138857],{},"1 号盒子是 ",[33,138855,131938],{}," 标志定位，在正常开发过程中， ",[765,138858,138859,138860,138863],{},"logo的布局其实是有讲究的，需要进行 ",[33,138861,138862],{},"logoSEO","的优化 （★★★）",[1618,138865,138866,138874,138882,138909],{},[574,138867,138868,138870,138871,138873],{},[33,138869,131938],{}," 里面首先放一个 ",[33,138872,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[574,138875,138876,138878,138879,138881],{},[33,138877,10],{}," 里面再放一个链接，可以返回首页的，把 ",[33,138880,131938],{}," 的背景图片给链接即可",[574,138883,138884,138885],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1618,138886,138887,138902],{},[574,138888,138889,138890,138893,138894,138897,138898,138901],{},"方法1：",[33,138891,138892],{},"text-indent"," 移到盒子外面（",[33,138895,138896],{},"text-indent: -9999px",") ，然后 ",[33,138899,138900],{},"overflow:hidden"," ，淘宝的做法",[574,138903,138904,138905,138908],{},"方法2：直接给 ",[33,138906,138907],{},"font-size: 0;"," 就看不到文字了，京东的做法",[574,138910,138911,138912,138914,138915,138917],{},"最后给链接一个 ",[33,138913,51839],{}," 属性，这样鼠标放到 ",[33,138916,131938],{}," 上就可以看到提示文字了",[14,138919,138765],{},[26,138921,138922],{"className":127673,"code":132159,"language":127675,"meta":31,"style":31},[33,138923,138924],{"__ignoreMap":31},[36,138925,138926,138928,138930,138932,138934,138936,138938,138940,138942,138944,138946],{"class":38,"line":39},[36,138927,179],{"class":98},[36,138929,20],{"class":51733},[36,138931,61489],{"class":55},[36,138933,176],{"class":98},[36,138935,132174],{"class":59},[36,138937,132177],{"class":55},[36,138939,176],{"class":98},[36,138941,132182],{"class":59},[36,138943,132185],{"class":98},[36,138945,20],{"class":51733},[36,138947,188],{"class":98},[14,138949,138805],{},[26,138951,138952],{"className":127673,"code":132159,"language":127675,"meta":31,"style":31},[33,138953,138954],{"__ignoreMap":31},[36,138955,138956,138958,138960,138962,138964,138966,138968,138970,138972,138974,138976],{"class":38,"line":39},[36,138957,179],{"class":98},[36,138959,20],{"class":51733},[36,138961,61489],{"class":55},[36,138963,176],{"class":98},[36,138965,132174],{"class":59},[36,138967,132177],{"class":55},[36,138969,176],{"class":98},[36,138971,132182],{"class":59},[36,138973,132185],{"class":98},[36,138975,20],{"class":51733},[36,138977,188],{"class":98},[14,138979,138980,138981,138983],{},"2 号盒子是 ",[33,138982,131951],{}," 搜索模块定位",[1618,138985,138986,138989,138992,138995],{},[574,138987,138988],{},"search盒子利用定位的方式放在对应的位置",[574,138990,138991],{},"search盒子设置绝对定位，header盒子设置相对定位",[574,138993,138994],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[574,138996,138997],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,138999,138765],{},[26,139001,139002],{"className":126926,"code":132246,"language":126928,"meta":31,"style":31},[33,139003,139004,139026,139030,139040],{"__ignoreMap":31},[36,139005,139006,139008,139010,139012,139014,139016,139018,139020,139022,139024],{"class":38,"line":39},[36,139007,52043],{"class":51733},[36,139009,12874],{"class":98},[36,139011,14],{"class":51733},[36,139013,12874],{"class":98},[36,139015,10],{"class":51733},[36,139017,12874],{"class":98},[36,139019,1618],{"class":51733},[36,139021,12874],{"class":98},[36,139023,574],{"class":51733},[36,139025,16011],{"class":98},[36,139027,139028],{"class":38,"line":46},[36,139029,132275],{"class":42},[36,139031,139032,139034,139036,139038],{"class":38,"line":52},[36,139033,128542],{"class":109},[36,139035,51869],{"class":98},[36,139037,61301],{"class":109},[36,139039,1772],{"class":98},[36,139041,139042],{"class":38,"line":66},[36,139043,2044],{"class":98},[14,139045,138805],{},[26,139047,139048],{"className":126926,"code":132246,"language":126928,"meta":31,"style":31},[33,139049,139050,139072,139076,139086],{"__ignoreMap":31},[36,139051,139052,139054,139056,139058,139060,139062,139064,139066,139068,139070],{"class":38,"line":39},[36,139053,52043],{"class":51733},[36,139055,12874],{"class":98},[36,139057,14],{"class":51733},[36,139059,12874],{"class":98},[36,139061,10],{"class":51733},[36,139063,12874],{"class":98},[36,139065,1618],{"class":51733},[36,139067,12874],{"class":98},[36,139069,574],{"class":51733},[36,139071,16011],{"class":98},[36,139073,139074],{"class":38,"line":46},[36,139075,132275],{"class":42},[36,139077,139078,139080,139082,139084],{"class":38,"line":52},[36,139079,128542],{"class":109},[36,139081,51869],{"class":98},[36,139083,61301],{"class":109},[36,139085,1772],{"class":98},[36,139087,139088],{"class":38,"line":66},[36,139089,2044],{"class":98},[14,139091,139092],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,139094,139095,139096,139099],{},"3 号盒子是 ",[33,139097,139098],{},"hotwords"," 热词模块定位",[1618,139101,139102,139105,139108],{},[574,139103,139104],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[574,139106,139107],{},"给里面所有的a标签设置 左右10px的外边距",[574,139109,139110],{},"给第一个a标签设置文字变红色（#c81623）",[14,139112,138765],{},[26,139114,139116],{"className":126926,"code":139115,"language":126928,"meta":31,"style":31},"div {\n  margin: 0 auto;\n}\n",[33,139117,139118,139124,139136],{"__ignoreMap":31},[36,139119,139120,139122],{"class":38,"line":39},[36,139121,52043],{"class":51733},[36,139123,16011],{"class":98},[36,139125,139126,139128,139130,139132,139134],{"class":38,"line":46},[36,139127,70902],{"class":109},[36,139129,51869],{"class":98},[36,139131,807],{"class":109},[36,139133,51988],{"class":109},[36,139135,1772],{"class":98},[36,139137,139138],{"class":38,"line":52},[36,139139,2044],{"class":98},[14,139141,138805],{},[26,139143,139144],{"className":126926,"code":139115,"language":126928,"meta":31,"style":31},[33,139145,139146,139152,139164],{"__ignoreMap":31},[36,139147,139148,139150],{"class":38,"line":39},[36,139149,52043],{"class":51733},[36,139151,16011],{"class":98},[36,139153,139154,139156,139158,139160,139162],{"class":38,"line":46},[36,139155,70902],{"class":109},[36,139157,51869],{"class":98},[36,139159,807],{"class":109},[36,139161,51988],{"class":109},[36,139163,1772],{"class":98},[36,139165,139166],{"class":38,"line":52},[36,139167,2044],{"class":98},[14,139169,139170,139171,139174],{},"4 号盒子是 ",[33,139172,139173],{},"shopcar"," 购物车模块",[1618,139176,139177,139182,139185,139188],{},[574,139178,123709,139179,139181],{},[33,139180,139173],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[574,139183,139184],{},"count 统计部分用绝对定位做",[574,139186,139187],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[574,139189,139190],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,139192,138765],{},[26,139194,139195],{"className":126926,"code":132358,"language":126928,"meta":31,"style":31},[33,139196,139197,139201,139215,139219,139233,139237,139251,139255,139269,139273],{"__ignoreMap":31},[36,139198,139199],{"class":38,"line":39},[36,139200,132365],{"class":42},[36,139202,139203,139205,139207,139209,139211,139213],{"class":38,"line":46},[36,139204,132370],{"class":55},[36,139206,80239],{"class":98},[36,139208,129286],{"class":109},[36,139210,51869],{"class":98},[36,139212,132379],{"class":109},[36,139214,129856],{"class":98},[36,139216,139217],{"class":38,"line":52},[36,139218,132386],{"class":42},[36,139220,139221,139223,139225,139227,139229,139231],{"class":38,"line":66},[36,139222,132391],{"class":55},[36,139224,80239],{"class":98},[36,139226,129286],{"class":109},[36,139228,51869],{"class":98},[36,139230,55196],{"class":109},[36,139232,129856],{"class":98},[36,139234,139235],{"class":38,"line":72},[36,139236,132406],{"class":42},[36,139238,139239,139241,139243,139245,139247,139249],{"class":38,"line":82},[36,139240,132411],{"class":55},[36,139242,80239],{"class":98},[36,139244,129286],{"class":109},[36,139246,51869],{"class":98},[36,139248,55263],{"class":109},[36,139250,129856],{"class":98},[36,139252,139253],{"class":38,"line":88},[36,139254,132426],{"class":42},[36,139256,139257,139259,139261,139263,139265,139267],{"class":38,"line":113},[36,139258,132431],{"class":55},[36,139260,80239],{"class":98},[36,139262,129286],{"class":109},[36,139264,51869],{"class":98},[36,139266,86665],{"class":109},[36,139268,129856],{"class":98},[36,139270,139271],{"class":38,"line":119},[36,139272,132446],{"class":42},[36,139274,139275,139277,139279,139281,139283,139285],{"class":38,"line":131},[36,139276,132451],{"class":55},[36,139278,80239],{"class":98},[36,139280,129286],{"class":109},[36,139282,51869],{"class":98},[36,139284,132460],{"class":109},[36,139286,129856],{"class":98},[14,139288,138805],{},[26,139290,139291],{"className":126926,"code":132358,"language":126928,"meta":31,"style":31},[33,139292,139293,139297,139311,139315,139329,139333,139347,139351,139365,139369],{"__ignoreMap":31},[36,139294,139295],{"class":38,"line":39},[36,139296,132365],{"class":42},[36,139298,139299,139301,139303,139305,139307,139309],{"class":38,"line":46},[36,139300,132370],{"class":55},[36,139302,80239],{"class":98},[36,139304,129286],{"class":109},[36,139306,51869],{"class":98},[36,139308,132379],{"class":109},[36,139310,129856],{"class":98},[36,139312,139313],{"class":38,"line":52},[36,139314,132386],{"class":42},[36,139316,139317,139319,139321,139323,139325,139327],{"class":38,"line":66},[36,139318,132391],{"class":55},[36,139320,80239],{"class":98},[36,139322,129286],{"class":109},[36,139324,51869],{"class":98},[36,139326,55196],{"class":109},[36,139328,129856],{"class":98},[36,139330,139331],{"class":38,"line":72},[36,139332,132406],{"class":42},[36,139334,139335,139337,139339,139341,139343,139345],{"class":38,"line":82},[36,139336,132411],{"class":55},[36,139338,80239],{"class":98},[36,139340,129286],{"class":109},[36,139342,51869],{"class":98},[36,139344,55263],{"class":109},[36,139346,129856],{"class":98},[36,139348,139349],{"class":38,"line":88},[36,139350,132426],{"class":42},[36,139352,139353,139355,139357,139359,139361,139363],{"class":38,"line":113},[36,139354,132431],{"class":55},[36,139356,80239],{"class":98},[36,139358,129286],{"class":109},[36,139360,51869],{"class":98},[36,139362,86665],{"class":109},[36,139364,129856],{"class":98},[36,139366,139367],{"class":38,"line":119},[36,139368,132446],{"class":42},[36,139370,139371,139373,139375,139377,139379,139381],{"class":38,"line":131},[36,139372,132451],{"class":55},[36,139374,80239],{"class":98},[36,139376,129286],{"class":109},[36,139378,51869],{"class":98},[36,139380,132460],{"class":109},[36,139382,129856],{"class":98},[588,139384,139386,139387,139389],{"id":139385},"_1544-nav导航模块制作","15.4.4 ",[33,139388,54145],{},"导航模块制作",[1941,139391],{"style":126782,"src":139392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,139394,139395,139397],{},[33,139396,54145],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,139399,139400,139401],{},"1 号盒子左侧浮动，",[33,139402,139403],{},"dropdown",[1618,139405,139406,139416,139424,139430,139438,139448,139456,139467],{},[574,139407,139408,139409,101449,139412,139415],{},"1号盒子有讲究，根据相关性 里面包含 ",[33,139410,139411],{},".dt",[33,139413,139414],{},".dd"," 两个盒子",[574,139417,139418,139420,139421,139423],{},[33,139419,139411],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[33,139422,139414],{}," 挤到下面去了",[574,139425,139426,139427,139429],{},"给 ",[33,139428,139414],{}," 盒子设置宽度 和 高度，以及背景颜色",[574,139431,139426,139432,139434,139435,120611],{},[33,139433,139414],{}," 盒子里面定义 无序列表 （",[33,139436,139437],{},"ul > li > a",[574,139439,139440,139441,139443,139444,139447],{},"每个 ",[33,139442,574],{}," 都有一个高度（",[33,139445,139446],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[574,139449,139426,139450,139452,139453,120611],{},[33,139451,574],{}," 里面的a设置文字大小（",[33,139454,139455],{},"14px",[574,139457,139426,139458,139460,139461,139463,139464,139466],{},[33,139459,574],{}," 设置 ",[33,139462,128087],{},"，当鼠标移入的时候，让",[33,139465,574],{},"的背景变成白色，让里面的文字变成红色",[574,139468,139469,139471,139472,139474,139475,139477],{},[33,139470,574],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[33,139473,574],{},"的右侧，那么给",[33,139476,574],{},"设置相对定位",[14,139479,139480],{},"一定要注意相关性",[14,139482,138765],{},[26,139484,139485],{"className":126926,"code":138768,"language":126928,"meta":31,"style":31},[33,139486,139487,139495,139505,139515],{"__ignoreMap":31},[36,139488,139489,139491,139493],{"class":38,"line":39},[36,139490,52043],{"class":51733},[36,139492,137927],{"class":55},[36,139494,16011],{"class":98},[36,139496,139497,139499,139501,139503],{"class":38,"line":46},[36,139498,137934],{"class":109},[36,139500,51869],{"class":98},[36,139502,8103],{"class":59},[36,139504,1772],{"class":98},[36,139506,139507,139509,139511,139513],{"class":38,"line":52},[36,139508,128542],{"class":109},[36,139510,51869],{"class":98},[36,139512,61301],{"class":109},[36,139514,1772],{"class":98},[36,139516,139517],{"class":38,"line":66},[36,139518,2044],{"class":98},[14,139520,138805],{},[26,139522,139523],{"className":126926,"code":138768,"language":126928,"meta":31,"style":31},[33,139524,139525,139533,139543,139553],{"__ignoreMap":31},[36,139526,139527,139529,139531],{"class":38,"line":39},[36,139528,52043],{"class":51733},[36,139530,137927],{"class":55},[36,139532,16011],{"class":98},[36,139534,139535,139537,139539,139541],{"class":38,"line":46},[36,139536,137934],{"class":109},[36,139538,51869],{"class":98},[36,139540,8103],{"class":59},[36,139542,1772],{"class":98},[36,139544,139545,139547,139549,139551],{"class":38,"line":52},[36,139546,128542],{"class":109},[36,139548,51869],{"class":98},[36,139550,61301],{"class":109},[36,139552,1772],{"class":98},[36,139554,139555],{"class":38,"line":66},[36,139556,2044],{"class":98},[14,139558,139559],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,139561,139562,139563,139566],{},"2 号盒子左侧浮动，",[33,139564,139565],{},"navitems"," 导航栏组",[1618,139568,139569,139574,139583],{},[574,139570,139571,139572],{},"里面结构是 ",[33,139573,139437],{},[574,139575,139576,139577,139579,139580,139582],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[33,139578,20],{},"左右的",[33,139581,31316],{},"把两侧撑开",[574,139584,139585],{},"让文字垂直居中（行高等于高度）",[1941,139587],{"style":126782,"src":139588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,139590,139591],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,139593,138765],{},[26,139595,139597],{"className":126926,"code":139596,"language":126928,"meta":31,"style":31},".box {\n  float: left;\n}\n",[33,139598,139599,139605,139615],{"__ignoreMap":31},[36,139600,139601,139603],{"class":38,"line":39},[36,139602,130774],{"class":55},[36,139604,16011],{"class":98},[36,139606,139607,139609,139611,139613],{"class":38,"line":46},[36,139608,131406],{"class":109},[36,139610,51869],{"class":98},[36,139612,24175],{"class":109},[36,139614,1772],{"class":98},[36,139616,139617],{"class":38,"line":52},[36,139618,2044],{"class":98},[14,139620,138805],{},[26,139622,139623],{"className":126926,"code":139596,"language":126928,"meta":31,"style":31},[33,139624,139625,139631,139641],{"__ignoreMap":31},[36,139626,139627,139629],{"class":38,"line":39},[36,139628,130774],{"class":55},[36,139630,16011],{"class":98},[36,139632,139633,139635,139637,139639],{"class":38,"line":46},[36,139634,131406],{"class":109},[36,139636,51869],{"class":98},[36,139638,24175],{"class":109},[36,139640,1772],{"class":98},[36,139642,139643],{"class":38,"line":52},[36,139644,2044],{"class":98},[14,139646,139647],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1941,139649],{"style":126782,"src":139650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[26,139652,139653],{"className":126926,"code":131083,"language":126928,"meta":31,"style":31},[33,139654,139655,139661,139677],{"__ignoreMap":31},[36,139656,139657,139659],{"class":38,"line":39},[36,139658,52043],{"class":51733},[36,139660,16011],{"class":98},[36,139662,139663,139665,139667,139669,139671,139673,139675],{"class":38,"line":46},[36,139664,71328],{"class":109},[36,139666,51869],{"class":98},[36,139668,833],{"class":109},[36,139670,51924],{"class":163},[36,139672,51953],{"class":109},[36,139674,130318],{"class":109},[36,139676,1772],{"class":98},[36,139678,139679],{"class":38,"line":52},[36,139680,2044],{"class":98},[588,139682,139684],{"id":139683},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1941,139686],{"style":126782,"src":139687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1618,139689,139690,139695,139700],{},[574,139691,139692,139694],{},[33,139693,132129],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[574,139696,139697,139699],{},[33,139698,132129],{}," 里面有一个大的版心",[574,139701,139702,139703,139706,139707],{},"版心里面包含 1 号盒子，",[33,139704,139705],{},"mod_service"," 是服务模块，mod 是模块的意思",[1618,139708,139709,139714,139727,139743,139748],{},[574,139710,139426,139711,139713],{},[33,139712,139705],{}," 设置高度（80px）和下边框",[574,139715,139716,139717,139720,139721,139723,139724,139726],{},"在里面定义 ",[33,139718,139719],{},"ul > li"," ,每个",[33,139722,574],{}," 宽度是300px 高度是 50px，给每个",[33,139725,574],{},"设置35px的左内边距",[574,139728,139729,139730,139732,139733,139735,139736,139738,139739,18849,139741,120611],{},"在每个",[33,139731,574],{},"里面，放一个 ",[33,139734,23349],{},"（里面放图标），一个",[33,139737,52043],{},"（里面放",[33,139740,52043],{},[33,139742,14],{},[574,139744,139426,139745,139747],{},[33,139746,23349],{},"设置浮动，让h5与这个div左右排列",[574,139749,139750],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,139752,138765],{},[26,139754,139756],{"className":126926,"code":139755,"language":126928,"meta":31,"style":31},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[33,139757,139758,139764,139776,139788,139815],{"__ignoreMap":31},[36,139759,139760,139762],{"class":38,"line":39},[36,139761,134683],{"class":55},[36,139763,16011],{"class":98},[36,139765,139766,139768,139770,139772,139774],{"class":38,"line":46},[36,139767,71000],{"class":109},[36,139769,51869],{"class":98},[36,139771,1313],{"class":109},[36,139773,51924],{"class":163},[36,139775,1772],{"class":98},[36,139777,139778,139780,139782,139784,139786],{"class":38,"line":52},[36,139779,71220],{"class":109},[36,139781,51869],{"class":98},[36,139783,1313],{"class":109},[36,139785,51924],{"class":163},[36,139787,1772],{"class":98},[36,139789,139790,139792,139794,139796,139798,139800,139802,139804,139807,139809,139811,139813],{"class":38,"line":66},[36,139791,71043],{"class":109},[36,139793,51869],{"class":98},[36,139795,62158],{"class":109},[36,139797,621],{"class":98},[36,139799,134722],{"class":5667},[36,139801,14153],{"class":98},[36,139803,62168],{"class":109},[36,139805,139806],{"class":109}," -10",[36,139808,51924],{"class":163},[36,139810,134741],{"class":109},[36,139812,51924],{"class":163},[36,139814,1772],{"class":98},[36,139816,139817],{"class":38,"line":72},[36,139818,2044],{"class":98},[14,139820,138805],{},[26,139822,139823],{"className":126926,"code":139755,"language":126928,"meta":31,"style":31},[33,139824,139825,139831,139843,139855,139881],{"__ignoreMap":31},[36,139826,139827,139829],{"class":38,"line":39},[36,139828,134683],{"class":55},[36,139830,16011],{"class":98},[36,139832,139833,139835,139837,139839,139841],{"class":38,"line":46},[36,139834,71000],{"class":109},[36,139836,51869],{"class":98},[36,139838,1313],{"class":109},[36,139840,51924],{"class":163},[36,139842,1772],{"class":98},[36,139844,139845,139847,139849,139851,139853],{"class":38,"line":52},[36,139846,71220],{"class":109},[36,139848,51869],{"class":98},[36,139850,1313],{"class":109},[36,139852,51924],{"class":163},[36,139854,1772],{"class":98},[36,139856,139857,139859,139861,139863,139865,139867,139869,139871,139873,139875,139877,139879],{"class":38,"line":66},[36,139858,71043],{"class":109},[36,139860,51869],{"class":98},[36,139862,62158],{"class":109},[36,139864,621],{"class":98},[36,139866,134722],{"class":5667},[36,139868,14153],{"class":98},[36,139870,62168],{"class":109},[36,139872,139806],{"class":109},[36,139874,51924],{"class":163},[36,139876,134741],{"class":109},[36,139878,51924],{"class":163},[36,139880,1772],{"class":98},[36,139882,139883],{"class":38,"line":72},[36,139884,2044],{"class":98},[14,139886,139887],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1618,139889,139890,139893,139899,139905,139917],{},[574,139891,139892],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[574,139894,139895,139896,120611],{},"里面的布局利用 自定义列表来实现（",[33,139897,139898],{},"dl > dt + dd",[574,139900,139426,139901,139904],{},[33,139902,139903],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[574,139906,139426,139907,139910,139911,18849,139913,139916],{},[33,139908,139909],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[33,139912,139909],{},[33,139914,139915],{},"dd","之间有些距离",[574,139918,139919],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,139921,138765],{},[26,139923,139924],{"className":126926,"code":139115,"language":126928,"meta":31,"style":31},[33,139925,139926,139932,139944],{"__ignoreMap":31},[36,139927,139928,139930],{"class":38,"line":39},[36,139929,52043],{"class":51733},[36,139931,16011],{"class":98},[36,139933,139934,139936,139938,139940,139942],{"class":38,"line":46},[36,139935,70902],{"class":109},[36,139937,51869],{"class":98},[36,139939,807],{"class":109},[36,139941,51988],{"class":109},[36,139943,1772],{"class":98},[36,139945,139946],{"class":38,"line":52},[36,139947,2044],{"class":98},[14,139949,138805],{},[26,139951,139952],{"className":126926,"code":139115,"language":126928,"meta":31,"style":31},[33,139953,139954,139960,139972],{"__ignoreMap":31},[36,139955,139956,139958],{"class":38,"line":39},[36,139957,52043],{"class":51733},[36,139959,16011],{"class":98},[36,139961,139962,139964,139966,139968,139970],{"class":38,"line":46},[36,139963,70902],{"class":109},[36,139965,51869],{"class":98},[36,139967,807],{"class":109},[36,139969,51988],{"class":109},[36,139971,1772],{"class":98},[36,139973,139974],{"class":38,"line":52},[36,139975,2044],{"class":98},[14,139977,139978],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1618,139980,139981,139990,139993,140004],{},[574,139982,139983,139984,139986,139987,139989],{},"分为上下两块，上面是 ",[33,139985,132146],{}," 友情链接，下面是 ",[33,139988,132139],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[574,139991,139992],{},"把内容分别复制到相应模块中",[574,139994,139426,139995,139997,139998,140000,140001,140003],{},[33,139996,132146],{}," 设置 15px 的下外边距，给",[33,139999,132146],{}," 里面 的 ",[33,140002,20],{}," 标签设置 左右 3px 的外边距",[574,140005,140006,140007,140009],{},"给",[33,140008,132139],{}," 设置 20px 的行高",[14,140011,138765],{},[26,140013,140014],{"className":126926,"code":139115,"language":126928,"meta":31,"style":31},[33,140015,140016,140022,140034],{"__ignoreMap":31},[36,140017,140018,140020],{"class":38,"line":39},[36,140019,52043],{"class":51733},[36,140021,16011],{"class":98},[36,140023,140024,140026,140028,140030,140032],{"class":38,"line":46},[36,140025,70902],{"class":109},[36,140027,51869],{"class":98},[36,140029,807],{"class":109},[36,140031,51988],{"class":109},[36,140033,1772],{"class":98},[36,140035,140036],{"class":38,"line":52},[36,140037,2044],{"class":98},[14,140039,138805],{},[26,140041,140042],{"className":126926,"code":139115,"language":126928,"meta":31,"style":31},[33,140043,140044,140050,140062],{"__ignoreMap":31},[36,140045,140046,140048],{"class":38,"line":39},[36,140047,52043],{"class":51733},[36,140049,16011],{"class":98},[36,140051,140052,140054,140056,140058,140060],{"class":38,"line":46},[36,140053,70902],{"class":109},[36,140055,51869],{"class":98},[36,140057,807],{"class":109},[36,140059,51988],{"class":109},[36,140061,1772],{"class":98},[36,140063,140064],{"class":38,"line":52},[36,140065,2044],{"class":98},[14,140067,140068],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[537,140070,140071],{},"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":31,"searchDepth":46,"depth":46,"links":140073},[140074,140075,140076,140083],{"id":138354,"depth":46,"text":138355},{"id":138373,"depth":46,"text":138374},{"id":138400,"depth":46,"text":138401,"children":140077},[140078,140079,140080,140081,140082],{"id":138404,"depth":52,"text":138405},{"id":138417,"depth":52,"text":138418},{"id":138441,"depth":52,"text":138442},{"id":138463,"depth":52,"text":138464},{"id":138535,"depth":52,"text":138536},{"id":138661,"depth":46,"text":138662,"children":140084},[140085,140086,140087,140088,140090],{"id":138665,"depth":52,"text":138666},{"id":138672,"depth":52,"text":138673},{"id":138844,"depth":52,"text":138845},{"id":139385,"depth":52,"text":140089},"15.4.4 nav导航模块制作",{"id":139683,"depth":52,"text":139684},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138346,"description":542},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":140097,"title":140098,"body":140099,"description":542,"extension":543,"meta":142501,"navigation":246,"path":142502,"seo":142503,"stem":142504,"__hash__":142505},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":140100,"toc":142478},[140101,140104,140108,140112,140124,140127,140130,140133,140144,140146,140170,140172,140196,140201,140204,140206,140242,140244,140280,140283,140288,140291,140294,140297,140327,140334,140337,140347,140349,140383,140386,140420,140426,140443,140445,140481,140483,140519,140524,140549,140551,140577,140579,140603,140610,140613,140677,140679,140721,140723,140763,140770,140775,140777,140807,140809,140839,140843,140846,140853,140865,140867,140893,140895,140919,140922,140924,140948,140954,140964,140966,140996,140998,141028,141035,141076,141078,141114,141116,141152,141156,141159,141162,141165,141171,141176,141179,141202,141205,141229,141232,141256,141261,141264,141267,141270,141273,141276,141350,141352,141382,141384,141414,141417,141420,141452,141456,141460,141474,141483,141486,141491,141493,141587,141589,141683,141706,141708,141732,141734,141758,141765,141768,141778,141780,141804,141809,141817,141819,141849,141854,141894,141896,141922,141924,141950,141954,141957,141962,141965,141969,141977,141984,141992,141994,142024,142026,142056,142064,142067,142070,142072,142102,142104,142134,142137,142142,142144,142168,142170,142194,142197,142282,142284,142308,142310,142334,142338,142340,142364,142366,142400,142404,142418,142421,142426,142429,142434,142437,142467,142475],[10,140102,140098],{"id":140103},"_16-品优购项目下篇-主体与页面开发",[559,140105,140107],{"id":140106},"_161-项目主体模块制作","16.1 项目主体模块制作",[588,140109,140111],{"id":140110},"_1611-首页制作","16.1.1 首页制作",[14,140113,140114,140116,140117,140119,140120,140123],{},[765,140115,102489],{}," 主体模块是 ",[765,140118,74490],{}," 里面专有的，注意需要新的样式文件 ",[765,140121,140122],{},"index.css，"," 就不要写在common.css中了",[1941,140125],{"style":126782,"src":140126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1941,140128],{"style":126782,"src":140129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,140131,140132],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1618,140134,140135,140138,140141],{},[574,140136,140137],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[574,140139,140140],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[574,140142,140143],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,140145,138765],{},[26,140147,140148],{"className":126926,"code":139596,"language":126928,"meta":31,"style":31},[33,140149,140150,140156,140166],{"__ignoreMap":31},[36,140151,140152,140154],{"class":38,"line":39},[36,140153,130774],{"class":55},[36,140155,16011],{"class":98},[36,140157,140158,140160,140162,140164],{"class":38,"line":46},[36,140159,131406],{"class":109},[36,140161,51869],{"class":98},[36,140163,24175],{"class":109},[36,140165,1772],{"class":98},[36,140167,140168],{"class":38,"line":52},[36,140169,2044],{"class":98},[14,140171,138805],{},[26,140173,140174],{"className":126926,"code":139596,"language":126928,"meta":31,"style":31},[33,140175,140176,140182,140192],{"__ignoreMap":31},[36,140177,140178,140180],{"class":38,"line":39},[36,140179,130774],{"class":55},[36,140181,16011],{"class":98},[36,140183,140184,140186,140188,140190],{"class":38,"line":46},[36,140185,131406],{"class":109},[36,140187,51869],{"class":98},[36,140189,24175],{"class":109},[36,140191,1772],{"class":98},[36,140193,140194],{"class":38,"line":52},[36,140195,2044],{"class":98},[571,140197,140198],{},[574,140199,140200],{},"左侧focus模块制作",[1941,140202],{"style":126782,"src":140203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,140205,138765],{},[26,140207,140208],{"className":126926,"code":128249,"language":126928,"meta":31,"style":31},[33,140209,140210,140218,140228,140238],{"__ignoreMap":31},[36,140211,140212,140214,140216],{"class":38,"line":39},[36,140213,54253],{"class":51733},[36,140215,62332],{"class":55},[36,140217,16011],{"class":98},[36,140219,140220,140222,140224,140226],{"class":38,"line":46},[36,140221,128264],{"class":109},[36,140223,51869],{"class":98},[36,140225,55321],{"class":109},[36,140227,1772],{"class":98},[36,140229,140230,140232,140234,140236],{"class":38,"line":52},[36,140231,71230],{"class":109},[36,140233,51869],{"class":98},[36,140235,55169],{"class":109},[36,140237,1772],{"class":98},[36,140239,140240],{"class":38,"line":66},[36,140241,2044],{"class":98},[14,140243,138805],{},[26,140245,140246],{"className":126926,"code":128249,"language":126928,"meta":31,"style":31},[33,140247,140248,140256,140266,140276],{"__ignoreMap":31},[36,140249,140250,140252,140254],{"class":38,"line":39},[36,140251,54253],{"class":51733},[36,140253,62332],{"class":55},[36,140255,16011],{"class":98},[36,140257,140258,140260,140262,140264],{"class":38,"line":46},[36,140259,128264],{"class":109},[36,140261,51869],{"class":98},[36,140263,55321],{"class":109},[36,140265,1772],{"class":98},[36,140267,140268,140270,140272,140274],{"class":38,"line":52},[36,140269,71230],{"class":109},[36,140271,51869],{"class":98},[36,140273,55169],{"class":109},[36,140275,1772],{"class":98},[36,140277,140278],{"class":38,"line":66},[36,140279,2044],{"class":98},[14,140281,140282],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[571,140284,140285],{"start":46},[574,140286,140287],{},"右侧newsflash模块制作",[1941,140289],{"style":126782,"src":140290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,140292,140293],{},"右侧的模块 分为上中下三个盒子",[14,140295,140296],{},"结构代码：",[26,140298,140299],{"className":127673,"code":134428,"language":127675,"meta":31,"style":31},[33,140300,140301],{"__ignoreMap":31},[36,140302,140303,140305,140307,140309,140311,140313,140315,140317,140319,140321,140323,140325],{"class":38,"line":39},[36,140304,179],{"class":98},[36,140306,1941],{"class":51733},[36,140308,55671],{"class":55},[36,140310,176],{"class":98},[36,140312,134443],{"class":59},[36,140314,55679],{"class":55},[36,140316,176],{"class":98},[36,140318,134450],{"class":59},[36,140320,134453],{"class":55},[36,140322,176],{"class":98},[36,140324,134458],{"class":59},[36,140326,188],{"class":98},[14,140328,140329,140330,140333],{},"1 号盒子为 ",[33,140331,140332],{},"news"," 新闻模块 高度为 165px",[1941,140335],{"style":126782,"src":140336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,140338,140339,140340,140343,140344],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[33,140341,140342],{},"news-hd","，下面是 ",[33,140345,140346],{},"news-bd",[14,140348,140296],{},[26,140350,140351],{"className":127673,"code":131030,"language":127675,"meta":31,"style":31},[33,140352,140353,140357,140371,140375],{"__ignoreMap":31},[36,140354,140355],{"class":38,"line":39},[36,140356,131037],{"class":42},[36,140358,140359,140361,140363,140365,140367,140369],{"class":38,"line":46},[36,140360,179],{"class":98},[36,140362,52043],{"class":51733},[36,140364,53918],{"class":55},[36,140366,176],{"class":98},[36,140368,131050],{"class":59},[36,140370,188],{"class":98},[36,140372,140373],{"class":38,"line":52},[36,140374,131057],{"class":98},[36,140376,140377,140379,140381],{"class":38,"line":66},[36,140378,52217],{"class":98},[36,140380,52043],{"class":51733},[36,140382,188],{"class":98},[14,140384,140385],{},"样式代码：",[26,140387,140388],{"className":127673,"code":131030,"language":127675,"meta":31,"style":31},[33,140389,140390,140394,140408,140412],{"__ignoreMap":31},[36,140391,140392],{"class":38,"line":39},[36,140393,131037],{"class":42},[36,140395,140396,140398,140400,140402,140404,140406],{"class":38,"line":46},[36,140397,179],{"class":98},[36,140399,52043],{"class":51733},[36,140401,53918],{"class":55},[36,140403,176],{"class":98},[36,140405,131050],{"class":59},[36,140407,188],{"class":98},[36,140409,140410],{"class":38,"line":52},[36,140411,131057],{"class":98},[36,140413,140414,140416,140418],{"class":38,"line":66},[36,140415,52217],{"class":98},[36,140417,52043],{"class":51733},[36,140419,188],{"class":98},[14,140421,140422,140423,140425],{},"上面是",[33,140424,140342],{},"，设置高度是 33px，设置下边框",[1618,140427,140428,140434],{},[574,140429,140430,140431,140433],{},"里面放一个",[33,140432,23349],{}," 标题",[574,140435,140436,140437,140439,140440,140442],{},"放一个a",[33,140438,103124],{},"，内容是 更多，然后让 ",[33,140441,20],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,140444,140296],{},[26,140446,140447],{"className":126926,"code":138768,"language":126928,"meta":31,"style":31},[33,140448,140449,140457,140467,140477],{"__ignoreMap":31},[36,140450,140451,140453,140455],{"class":38,"line":39},[36,140452,52043],{"class":51733},[36,140454,137927],{"class":55},[36,140456,16011],{"class":98},[36,140458,140459,140461,140463,140465],{"class":38,"line":46},[36,140460,137934],{"class":109},[36,140462,51869],{"class":98},[36,140464,8103],{"class":59},[36,140466,1772],{"class":98},[36,140468,140469,140471,140473,140475],{"class":38,"line":52},[36,140470,128542],{"class":109},[36,140472,51869],{"class":98},[36,140474,61301],{"class":109},[36,140476,1772],{"class":98},[36,140478,140479],{"class":38,"line":66},[36,140480,2044],{"class":98},[14,140482,140385],{},[26,140484,140485],{"className":126926,"code":138768,"language":126928,"meta":31,"style":31},[33,140486,140487,140495,140505,140515],{"__ignoreMap":31},[36,140488,140489,140491,140493],{"class":38,"line":39},[36,140490,52043],{"class":51733},[36,140492,137927],{"class":55},[36,140494,16011],{"class":98},[36,140496,140497,140499,140501,140503],{"class":38,"line":46},[36,140498,137934],{"class":109},[36,140500,51869],{"class":98},[36,140502,8103],{"class":59},[36,140504,1772],{"class":98},[36,140506,140507,140509,140511,140513],{"class":38,"line":52},[36,140508,128542],{"class":109},[36,140510,51869],{"class":98},[36,140512,61301],{"class":109},[36,140514,1772],{"class":98},[36,140516,140517],{"class":38,"line":66},[36,140518,2044],{"class":98},[14,140520,140521,140522],{},"下面是",[33,140523,140346],{},[1618,140525,140526,140534],{},[574,140527,140528,140529,101449,140531,140533],{},"里面包含 ",[33,140530,1618],{},[33,140532,574],{}," 还有链接",[574,140535,140006,140536,140538,140539,140541,140542,140545,140546],{},[33,140537,574],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[33,140540,131592],{}," 2.设置 ",[33,140543,140544],{},"white-space: nowrap;"," 3. 设置 ",[33,140547,140548],{},"text-overflow: ellipsis;",[14,140550,140296],{},[26,140552,140554],{"className":126926,"code":140553,"language":126928,"meta":31,"style":31},"div {\n  overflow: hidden;\n}\n",[33,140555,140556,140562,140573],{"__ignoreMap":31},[36,140557,140558,140560],{"class":38,"line":39},[36,140559,52043],{"class":51733},[36,140561,16011],{"class":98},[36,140563,140564,140567,140569,140571],{"class":38,"line":46},[36,140565,140566],{"class":109},"  overflow",[36,140568,51869],{"class":98},[36,140570,62146],{"class":109},[36,140572,1772],{"class":98},[36,140574,140575],{"class":38,"line":52},[36,140576,2044],{"class":98},[14,140578,140385],{},[26,140580,140581],{"className":126926,"code":140553,"language":126928,"meta":31,"style":31},[33,140582,140583,140589,140599],{"__ignoreMap":31},[36,140584,140585,140587],{"class":38,"line":39},[36,140586,52043],{"class":51733},[36,140588,16011],{"class":98},[36,140590,140591,140593,140595,140597],{"class":38,"line":46},[36,140592,140566],{"class":109},[36,140594,51869],{"class":98},[36,140596,62146],{"class":109},[36,140598,1772],{"class":98},[36,140600,140601],{"class":38,"line":52},[36,140602,2044],{"class":98},[14,140604,140605,140606,140609],{},"2 号盒子为 ",[33,140607,140608],{},"lifeservice"," 生活服务模块 高度为 209px",[1941,140611],{"style":126782,"src":140612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1618,140614,140615,140618,140628,140652,140663],{},[574,140616,140617],{},"设置边框（左右下边框）",[574,140619,140620,140621,140624,140625,140627],{},"里面的内容 是 ",[33,140622,140623],{},"ul > 12*li","，给",[33,140626,574],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[574,140629,140630,140631],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1618,140632,140633,140638,140647],{},[574,140634,140635,140637],{},[33,140636,140608],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[574,140639,140640,140641,140643,140644,140646],{},"可以让 ",[33,140642,140608],{}," 里面的 ",[33,140645,1618],{}," 宽度为 252，就可以装的下 4 个 小 li",[574,140648,140649,140651],{},[33,140650,140608],{}," 盒子 overflow 隐藏多余的部分就可以了",[574,140653,116898,140654,140656,140657,140659,140660,140662],{},[33,140655,574],{}," 里面放一个 ",[33,140658,1055],{},"（里面放图标），下面的文本用 ",[33,140661,14],{}," 标签包裹",[574,140664,139426,140665,140667,140668,140670,140671,139460,140673,140676],{},[33,140666,1055],{}," 设置 24px宽和28px的高（注意 ",[33,140669,1055],{}," 是行内元素， 转成行内块），给 ",[33,140672,574],{},[33,140674,140675],{},"text-align:center"," 让里面内容居中显示",[14,140678,140296],{},[26,140680,140682],{"className":126926,"code":140681,"language":126928,"meta":31,"style":31},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[33,140683,140684,140702,140707,140717],{"__ignoreMap":31},[36,140685,140686,140688,140690,140692,140694,140696,140698,140700],{"class":38,"line":39},[36,140687,36],{"class":51733},[36,140689,12874],{"class":98},[36,140691,20],{"class":51733},[36,140693,12874],{"class":98},[36,140695,23992],{"class":51733},[36,140697,12874],{"class":98},[36,140699,765],{"class":51733},[36,140701,16011],{"class":98},[36,140703,140704],{"class":38,"line":46},[36,140705,140706],{"class":42},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[36,140708,140709,140711,140713,140715],{"class":38,"line":52},[36,140710,128542],{"class":109},[36,140712,51869],{"class":98},[36,140714,128604],{"class":109},[36,140716,1772],{"class":98},[36,140718,140719],{"class":38,"line":66},[36,140720,2044],{"class":98},[14,140722,140385],{},[26,140724,140725],{"className":126926,"code":140681,"language":126928,"meta":31,"style":31},[33,140726,140727,140745,140749,140759],{"__ignoreMap":31},[36,140728,140729,140731,140733,140735,140737,140739,140741,140743],{"class":38,"line":39},[36,140730,36],{"class":51733},[36,140732,12874],{"class":98},[36,140734,20],{"class":51733},[36,140736,12874],{"class":98},[36,140738,23992],{"class":51733},[36,140740,12874],{"class":98},[36,140742,765],{"class":51733},[36,140744,16011],{"class":98},[36,140746,140747],{"class":38,"line":46},[36,140748,140706],{"class":42},[36,140750,140751,140753,140755,140757],{"class":38,"line":52},[36,140752,128542],{"class":109},[36,140754,51869],{"class":98},[36,140756,128604],{"class":109},[36,140758,1772],{"class":98},[36,140760,140761],{"class":38,"line":66},[36,140762,2044],{"class":98},[14,140764,140765,140766,140769],{},"3 号盒子为 ",[33,140767,140768],{},"bargain"," 特价商品",[1618,140771,140772],{},[574,140773,140774],{},"这个比较简单，直接插入一张图片即可",[14,140776,140296],{},[26,140778,140779],{"className":127673,"code":134428,"language":127675,"meta":31,"style":31},[33,140780,140781],{"__ignoreMap":31},[36,140782,140783,140785,140787,140789,140791,140793,140795,140797,140799,140801,140803,140805],{"class":38,"line":39},[36,140784,179],{"class":98},[36,140786,1941],{"class":51733},[36,140788,55671],{"class":55},[36,140790,176],{"class":98},[36,140792,134443],{"class":59},[36,140794,55679],{"class":55},[36,140796,176],{"class":98},[36,140798,134450],{"class":59},[36,140800,134453],{"class":55},[36,140802,176],{"class":98},[36,140804,134458],{"class":59},[36,140806,188],{"class":98},[14,140808,140385],{},[26,140810,140811],{"className":127673,"code":134428,"language":127675,"meta":31,"style":31},[33,140812,140813],{"__ignoreMap":31},[36,140814,140815,140817,140819,140821,140823,140825,140827,140829,140831,140833,140835,140837],{"class":38,"line":39},[36,140816,179],{"class":98},[36,140818,1941],{"class":51733},[36,140820,55671],{"class":55},[36,140822,176],{"class":98},[36,140824,134443],{"class":59},[36,140826,55679],{"class":55},[36,140828,176],{"class":98},[36,140830,134450],{"class":59},[36,140832,134453],{"class":55},[36,140834,176],{"class":98},[36,140836,134458],{"class":59},[36,140838,188],{"class":98},[588,140840,140842],{"id":140841},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1941,140844],{"style":126782,"src":140845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,140847,140848,140849,140852],{},"大盒子 ",[33,140850,140851],{},"recom"," 推荐模块 recommend",[1618,140854,140855],{},[574,140856,140857,140858,140860,140861,140864],{},"给这个 ",[33,140859,140851],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[33,140862,140863],{},"#ebebeb","），设置距离上边 12px",[14,140866,140296],{},[26,140868,140870],{"className":126926,"code":140869,"language":126928,"meta":31,"style":31},"div {\n  background-color: #f0f0f0;\n}\n",[33,140871,140872,140878,140889],{"__ignoreMap":31},[36,140873,140874,140876],{"class":38,"line":39},[36,140875,52043],{"class":51733},[36,140877,16011],{"class":98},[36,140879,140880,140882,140884,140887],{"class":38,"line":46},[36,140881,71310],{"class":109},[36,140883,51869],{"class":98},[36,140885,140886],{"class":109},"#f0f0f0",[36,140888,1772],{"class":98},[36,140890,140891],{"class":38,"line":52},[36,140892,2044],{"class":98},[14,140894,140385],{},[26,140896,140897],{"className":126926,"code":140869,"language":126928,"meta":31,"style":31},[33,140898,140899,140905,140915],{"__ignoreMap":31},[36,140900,140901,140903],{"class":38,"line":39},[36,140902,52043],{"class":51733},[36,140904,16011],{"class":98},[36,140906,140907,140909,140911,140913],{"class":38,"line":46},[36,140908,71310],{"class":109},[36,140910,51869],{"class":98},[36,140912,140886],{"class":109},[36,140914,1772],{"class":98},[36,140916,140917],{"class":38,"line":52},[36,140918,2044],{"class":98},[14,140920,140921],{},"里面包含 2 个盒子， 浮动即可",[14,140923,140296],{},[26,140925,140926],{"className":126926,"code":139596,"language":126928,"meta":31,"style":31},[33,140927,140928,140934,140944],{"__ignoreMap":31},[36,140929,140930,140932],{"class":38,"line":39},[36,140931,130774],{"class":55},[36,140933,16011],{"class":98},[36,140935,140936,140938,140940,140942],{"class":38,"line":46},[36,140937,131406],{"class":109},[36,140939,51869],{"class":98},[36,140941,24175],{"class":109},[36,140943,1772],{"class":98},[36,140945,140946],{"class":38,"line":52},[36,140947,2044],{"class":98},[14,140949,140950,140951],{},"1 号盒子 ",[33,140952,140953],{},"recom_hd",[1618,140955,140956,140959],{},[574,140957,140958],{},"设置宽度205px，高度163px",[574,140960,140430,140961,140963],{},[33,140962,1941],{},"标签，插入图片即可",[14,140965,140296],{},[26,140967,140968],{"className":127673,"code":134428,"language":127675,"meta":31,"style":31},[33,140969,140970],{"__ignoreMap":31},[36,140971,140972,140974,140976,140978,140980,140982,140984,140986,140988,140990,140992,140994],{"class":38,"line":39},[36,140973,179],{"class":98},[36,140975,1941],{"class":51733},[36,140977,55671],{"class":55},[36,140979,176],{"class":98},[36,140981,134443],{"class":59},[36,140983,55679],{"class":55},[36,140985,176],{"class":98},[36,140987,134450],{"class":59},[36,140989,134453],{"class":55},[36,140991,176],{"class":98},[36,140993,134458],{"class":59},[36,140995,188],{"class":98},[14,140997,140385],{},[26,140999,141000],{"className":127673,"code":134428,"language":127675,"meta":31,"style":31},[33,141001,141002],{"__ignoreMap":31},[36,141003,141004,141006,141008,141010,141012,141014,141016,141018,141020,141022,141024,141026],{"class":38,"line":39},[36,141005,179],{"class":98},[36,141007,1941],{"class":51733},[36,141009,55671],{"class":55},[36,141011,176],{"class":98},[36,141013,134443],{"class":59},[36,141015,55679],{"class":55},[36,141017,176],{"class":98},[36,141019,134450],{"class":59},[36,141021,134453],{"class":55},[36,141023,176],{"class":98},[36,141025,134458],{"class":59},[36,141027,188],{"class":98},[14,141029,141030,141031,141034],{},"2 号盒子 ",[33,141032,141033],{},"recom_bd"," ，注意里面的小竖线",[1618,141036,141037,141048,141051,141056,141061],{},[574,141038,141039,141040,141042,141043,141045,141046],{},"右侧结构里面放 ",[33,141041,1618],{}," 包含 4个 ",[33,141044,574],{},"，每个li里面包含一个",[33,141047,1941],{},[574,141049,141050],{},"直接利用切片工具把里面的内容当成一张图片",[574,141052,139426,141053,141055],{},[33,141054,574],{}," 设置浮动",[574,141057,139426,141058,141060],{},[33,141059,1941],{}," 设置宽高，宽度 248px，高度 163px",[574,141062,141063,141064,140624,141067,141069,141070,141072,141073],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[33,141065,141066],{},"top 10px",[33,141068,574],{},"设置相对定位（注意，最后一个",[33,141071,574],{},"不用设置伪元素），可以利用 ",[33,141074,141075],{},"nth-child(-n+3){...}",[14,141077,140296],{},[26,141079,141080],{"className":126926,"code":138768,"language":126928,"meta":31,"style":31},[33,141081,141082,141090,141100,141110],{"__ignoreMap":31},[36,141083,141084,141086,141088],{"class":38,"line":39},[36,141085,52043],{"class":51733},[36,141087,137927],{"class":55},[36,141089,16011],{"class":98},[36,141091,141092,141094,141096,141098],{"class":38,"line":46},[36,141093,137934],{"class":109},[36,141095,51869],{"class":98},[36,141097,8103],{"class":59},[36,141099,1772],{"class":98},[36,141101,141102,141104,141106,141108],{"class":38,"line":52},[36,141103,128542],{"class":109},[36,141105,51869],{"class":98},[36,141107,61301],{"class":109},[36,141109,1772],{"class":98},[36,141111,141112],{"class":38,"line":66},[36,141113,2044],{"class":98},[14,141115,140385],{},[26,141117,141118],{"className":126926,"code":138768,"language":126928,"meta":31,"style":31},[33,141119,141120,141128,141138,141148],{"__ignoreMap":31},[36,141121,141122,141124,141126],{"class":38,"line":39},[36,141123,52043],{"class":51733},[36,141125,137927],{"class":55},[36,141127,16011],{"class":98},[36,141129,141130,141132,141134,141136],{"class":38,"line":46},[36,141131,137934],{"class":109},[36,141133,51869],{"class":98},[36,141135,8103],{"class":59},[36,141137,1772],{"class":98},[36,141139,141140,141142,141144,141146],{"class":38,"line":52},[36,141141,128542],{"class":109},[36,141143,51869],{"class":98},[36,141145,61301],{"class":109},[36,141147,1772],{"class":98},[36,141149,141150],{"class":38,"line":66},[36,141151,2044],{"class":98},[588,141153,141155],{"id":141154},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1941,141157],{"style":126782,"src":141158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,141160,141161],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,141163,141164],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,141166,141167,141170],{},[33,141168,141169],{},"box_hd"," 制作",[14,141172,140950,141173,141175],{},[33,141174,141169],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1941,141177],{"style":126782,"src":141178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1618,141180,141181,141186,141191,141194],{},[574,141182,141183,141185],{},[33,141184,141169],{}," 给 30px 的高度，2个像素的下边框",[574,141187,141188,141189],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[33,141190,139437],{},[574,141192,141193],{},"左侧盒左浮动，右侧盒子右浮动",[574,141195,141196,141198,141199,141201],{},[33,141197,20],{},"标签之间的距离用左右的",[33,141200,31316],{},"撑开即可",[14,141203,141204],{},"结构代码",[26,141206,141207],{"className":126926,"code":139596,"language":126928,"meta":31,"style":31},[33,141208,141209,141215,141225],{"__ignoreMap":31},[36,141210,141211,141213],{"class":38,"line":39},[36,141212,130774],{"class":55},[36,141214,16011],{"class":98},[36,141216,141217,141219,141221,141223],{"class":38,"line":46},[36,141218,131406],{"class":109},[36,141220,51869],{"class":98},[36,141222,24175],{"class":109},[36,141224,1772],{"class":98},[36,141226,141227],{"class":38,"line":52},[36,141228,2044],{"class":98},[14,141230,141231],{},"样式代码",[26,141233,141234],{"className":126926,"code":139596,"language":126928,"meta":31,"style":31},[33,141235,141236,141242,141252],{"__ignoreMap":31},[36,141237,141238,141240],{"class":38,"line":39},[36,141239,130774],{"class":55},[36,141241,16011],{"class":98},[36,141243,141244,141246,141248,141250],{"class":38,"line":46},[36,141245,131406],{"class":109},[36,141247,51869],{"class":98},[36,141249,24175],{"class":109},[36,141251,1772],{"class":98},[36,141253,141254],{"class":38,"line":52},[36,141255,2044],{"class":98},[14,141257,141258,141170],{},[33,141259,141260],{},"box_bd",[14,141262,141263],{},"2 号盒子 box_bd，不要给高度",[1941,141265],{"style":126782,"src":141266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,141268,141269],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,141271,141272],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,141274,141275],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1618,141277,141278,141290,141306],{},[574,141279,141280,141282,141283,141286,141287,141289],{},[33,141281,141260],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[33,141284,141285],{},"tab_content","，在",[33,141288,141285],{}," 里面包裹tab选项卡对应的内容",[574,141291,141292,141293,141296,141297,141299,141300,141302,141303,141305],{},"内容被一个大盒子包裹（",[33,141294,141295],{},"tab_list_item","），里面是 ",[33,141298,1618],{}," 包裹 5个 ",[33,141301,574],{},"，每个",[33,141304,574],{},"设置对应的宽度，然后设置浮动",[574,141307,141308,141309,141311,141312,141314,141315],{},"而这5个",[33,141310,574],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[33,141313,574],{},"设置",[1618,141316,141317,141335,141338],{},[574,141318,141319,141320,141322,141323,141325,141326,141328,141329,141331,141332,141334],{},"第一个小 ",[33,141321,574],{}," 分为上下结构，上面是 ",[33,141324,1618],{}," 包裹 ",[33,141327,574],{}," ，",[33,141330,574],{},"里面包裹 ",[33,141333,20],{},"，下面插入一张图片",[574,141336,141337],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[574,141339,141340,141341,141343,141344,141346,141347,141349],{},"后面的小 ",[33,141342,574],{}," 里面先放一个",[33,141345,20],{},"标签，然后在",[33,141348,20],{},"标签里面插入图片即可",[14,141351,141204],{},[26,141353,141354],{"className":127673,"code":134428,"language":127675,"meta":31,"style":31},[33,141355,141356],{"__ignoreMap":31},[36,141357,141358,141360,141362,141364,141366,141368,141370,141372,141374,141376,141378,141380],{"class":38,"line":39},[36,141359,179],{"class":98},[36,141361,1941],{"class":51733},[36,141363,55671],{"class":55},[36,141365,176],{"class":98},[36,141367,134443],{"class":59},[36,141369,55679],{"class":55},[36,141371,176],{"class":98},[36,141373,134450],{"class":59},[36,141375,134453],{"class":55},[36,141377,176],{"class":98},[36,141379,134458],{"class":59},[36,141381,188],{"class":98},[14,141383,141231],{},[26,141385,141386],{"className":127673,"code":134428,"language":127675,"meta":31,"style":31},[33,141387,141388],{"__ignoreMap":31},[36,141389,141390,141392,141394,141396,141398,141400,141402,141404,141406,141408,141410,141412],{"class":38,"line":39},[36,141391,179],{"class":98},[36,141393,1941],{"class":51733},[36,141395,55671],{"class":55},[36,141397,176],{"class":98},[36,141399,134443],{"class":59},[36,141401,55679],{"class":55},[36,141403,176],{"class":98},[36,141405,134450],{"class":59},[36,141407,134453],{"class":55},[36,141409,176],{"class":98},[36,141411,134458],{"class":59},[36,141413,188],{"class":98},[14,141415,141416],{},"tab栏切换需求！！！！！！介绍：",[1941,141418],{"style":126782,"src":141419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1618,141421,141422,141430,141436,141439],{},[574,141423,141424,141427,141428],{},[33,141425,141426],{},"tab","栏的布局是 ",[33,141429,139437],{},[574,141431,141432,141433,141435],{},"有多少个",[33,141434,141426],{},"选项卡，那么对应就有多少个内容",[574,141437,141438],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[574,141440,141441,141442,141445,141446,141448,141449,141451],{},"等后面我们学习了",[33,141443,141444],{},"js","之后，我们就会配合",[33,141447,141444],{},"来实现，",[33,141450,141426],{},"栏的切换",[559,141453,141455],{"id":141454},"_162-列表制作","16.2 列表制作",[588,141457,141459],{"id":141458},"_1621-准备工作","16.2.1 准备工作",[1618,141461,141462,141465,141468,141471],{},[574,141463,141464],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[574,141466,141467],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[574,141469,141470],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[574,141472,141473],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[588,141475,141477,141478,101449,141480,141482],{"id":141476},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[33,141479,131931],{},[33,141481,54145],{}," 修改",[1941,141484],{"style":126782,"src":141485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1618,141487,141488],{},[574,141489,141490],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,141492,140296],{},[26,141494,141495],{"className":126926,"code":132358,"language":126928,"meta":31,"style":31},[33,141496,141497,141501,141515,141519,141533,141537,141551,141555,141569,141573],{"__ignoreMap":31},[36,141498,141499],{"class":38,"line":39},[36,141500,132365],{"class":42},[36,141502,141503,141505,141507,141509,141511,141513],{"class":38,"line":46},[36,141504,132370],{"class":55},[36,141506,80239],{"class":98},[36,141508,129286],{"class":109},[36,141510,51869],{"class":98},[36,141512,132379],{"class":109},[36,141514,129856],{"class":98},[36,141516,141517],{"class":38,"line":52},[36,141518,132386],{"class":42},[36,141520,141521,141523,141525,141527,141529,141531],{"class":38,"line":66},[36,141522,132391],{"class":55},[36,141524,80239],{"class":98},[36,141526,129286],{"class":109},[36,141528,51869],{"class":98},[36,141530,55196],{"class":109},[36,141532,129856],{"class":98},[36,141534,141535],{"class":38,"line":72},[36,141536,132406],{"class":42},[36,141538,141539,141541,141543,141545,141547,141549],{"class":38,"line":82},[36,141540,132411],{"class":55},[36,141542,80239],{"class":98},[36,141544,129286],{"class":109},[36,141546,51869],{"class":98},[36,141548,55263],{"class":109},[36,141550,129856],{"class":98},[36,141552,141553],{"class":38,"line":88},[36,141554,132426],{"class":42},[36,141556,141557,141559,141561,141563,141565,141567],{"class":38,"line":113},[36,141558,132431],{"class":55},[36,141560,80239],{"class":98},[36,141562,129286],{"class":109},[36,141564,51869],{"class":98},[36,141566,86665],{"class":109},[36,141568,129856],{"class":98},[36,141570,141571],{"class":38,"line":119},[36,141572,132446],{"class":42},[36,141574,141575,141577,141579,141581,141583,141585],{"class":38,"line":131},[36,141576,132451],{"class":55},[36,141578,80239],{"class":98},[36,141580,129286],{"class":109},[36,141582,51869],{"class":98},[36,141584,132460],{"class":109},[36,141586,129856],{"class":98},[14,141588,140385],{},[26,141590,141591],{"className":126926,"code":132358,"language":126928,"meta":31,"style":31},[33,141592,141593,141597,141611,141615,141629,141633,141647,141651,141665,141669],{"__ignoreMap":31},[36,141594,141595],{"class":38,"line":39},[36,141596,132365],{"class":42},[36,141598,141599,141601,141603,141605,141607,141609],{"class":38,"line":46},[36,141600,132370],{"class":55},[36,141602,80239],{"class":98},[36,141604,129286],{"class":109},[36,141606,51869],{"class":98},[36,141608,132379],{"class":109},[36,141610,129856],{"class":98},[36,141612,141613],{"class":38,"line":52},[36,141614,132386],{"class":42},[36,141616,141617,141619,141621,141623,141625,141627],{"class":38,"line":66},[36,141618,132391],{"class":55},[36,141620,80239],{"class":98},[36,141622,129286],{"class":109},[36,141624,51869],{"class":98},[36,141626,55196],{"class":109},[36,141628,129856],{"class":98},[36,141630,141631],{"class":38,"line":72},[36,141632,132406],{"class":42},[36,141634,141635,141637,141639,141641,141643,141645],{"class":38,"line":82},[36,141636,132411],{"class":55},[36,141638,80239],{"class":98},[36,141640,129286],{"class":109},[36,141642,51869],{"class":98},[36,141644,55263],{"class":109},[36,141646,129856],{"class":98},[36,141648,141649],{"class":38,"line":88},[36,141650,132426],{"class":42},[36,141652,141653,141655,141657,141659,141661,141663],{"class":38,"line":113},[36,141654,132431],{"class":55},[36,141656,80239],{"class":98},[36,141658,129286],{"class":109},[36,141660,51869],{"class":98},[36,141662,86665],{"class":109},[36,141664,129856],{"class":98},[36,141666,141667],{"class":38,"line":119},[36,141668,132446],{"class":42},[36,141670,141671,141673,141675,141677,141679,141681],{"class":38,"line":131},[36,141672,132451],{"class":55},[36,141674,80239],{"class":98},[36,141676,129286],{"class":109},[36,141678,51869],{"class":98},[36,141680,132460],{"class":109},[36,141682,129856],{"class":98},[1618,141684,141685,141696],{},[574,141686,141687,141688,141691,141692,101449,141694],{},"1 号盒子左侧浮动 ",[33,141689,141690],{},"sk_list"," 里面包含 ",[33,141693,1618],{},[33,141695,574],{},[574,141697,141698,141699,141691,141702,101449,141704],{},"2 号盒子左侧浮动 ",[33,141700,141701],{},"sk_con",[33,141703,1618],{},[33,141705,574],{},[14,141707,140296],{},[26,141709,141710],{"className":126926,"code":139596,"language":126928,"meta":31,"style":31},[33,141711,141712,141718,141728],{"__ignoreMap":31},[36,141713,141714,141716],{"class":38,"line":39},[36,141715,130774],{"class":55},[36,141717,16011],{"class":98},[36,141719,141720,141722,141724,141726],{"class":38,"line":46},[36,141721,131406],{"class":109},[36,141723,51869],{"class":98},[36,141725,24175],{"class":109},[36,141727,1772],{"class":98},[36,141729,141730],{"class":38,"line":52},[36,141731,2044],{"class":98},[14,141733,140385],{},[26,141735,141736],{"className":126926,"code":139596,"language":126928,"meta":31,"style":31},[33,141737,141738,141744,141754],{"__ignoreMap":31},[36,141739,141740,141742],{"class":38,"line":39},[36,141741,130774],{"class":55},[36,141743,16011],{"class":98},[36,141745,141746,141748,141750,141752],{"class":38,"line":46},[36,141747,131406],{"class":109},[36,141749,51869],{"class":98},[36,141751,24175],{"class":109},[36,141753,1772],{"class":98},[36,141755,141756],{"class":38,"line":52},[36,141757,2044],{"class":98},[588,141759,141761,141762],{"id":141760},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[33,141763,141764],{},"sk_container",[1941,141766],{"style":126782,"src":141767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1618,141769,141770,141775],{},[574,141771,140950,141772,141774],{},[33,141773,141764],{}," 给宽度 1200，不要给高度",[574,141776,141777],{},"一定不要忘记清除浮动",[14,141779,140296],{},[26,141781,141782],{"className":126926,"code":139596,"language":126928,"meta":31,"style":31},[33,141783,141784,141790,141800],{"__ignoreMap":31},[36,141785,141786,141788],{"class":38,"line":39},[36,141787,130774],{"class":55},[36,141789,16011],{"class":98},[36,141791,141792,141794,141796,141798],{"class":38,"line":46},[36,141793,131406],{"class":109},[36,141795,51869],{"class":98},[36,141797,24175],{"class":109},[36,141799,1772],{"class":98},[36,141801,141802],{"class":38,"line":52},[36,141803,2044],{"class":98},[571,141805,141806],{},[574,141807,141808],{},"sk_hd制作",[1618,141810,141811],{},[574,141812,141030,141813,141816],{},[33,141814,141815],{},"sk_hd"," ，插入图片即可",[14,141818,140296],{},[26,141820,141821],{"className":127673,"code":134428,"language":127675,"meta":31,"style":31},[33,141822,141823],{"__ignoreMap":31},[36,141824,141825,141827,141829,141831,141833,141835,141837,141839,141841,141843,141845,141847],{"class":38,"line":39},[36,141826,179],{"class":98},[36,141828,1941],{"class":51733},[36,141830,55671],{"class":55},[36,141832,176],{"class":98},[36,141834,134443],{"class":59},[36,141836,55679],{"class":55},[36,141838,176],{"class":98},[36,141840,134450],{"class":59},[36,141842,134453],{"class":55},[36,141844,176],{"class":98},[36,141846,134458],{"class":59},[36,141848,188],{"class":98},[571,141850,141851],{"start":46},[574,141852,141853],{},"sk_bd制作",[1618,141855,141856],{},[574,141857,141858,141859,141862,141863,101449,141865,141867],{},"3 号盒子 ",[33,141860,141861],{},"sk_bd"," ，里面包含很多的 ",[33,141864,1618],{},[33,141866,574],{},[1618,141868,141869,141878],{},[574,141870,141871,141872,141874,141875,141877],{},"当鼠标移入到 ",[33,141873,574],{}," 上面的时候显示红色的边框，在这里先给 ",[33,141876,574],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[574,141879,141880,141881,141883,141884,141886,141887,141890,141891,141893],{},"由于给每个 ",[33,141882,574],{}," 都设置了外边距，导致一行的最后一个 ",[33,141885,574],{}," 掉了下来，在这里我们利用 ",[33,141888,141889],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[33,141892,574],{},"，去掉外边距就好了",[14,141895,140296],{},[26,141897,141898],{"className":126926,"code":139115,"language":126928,"meta":31,"style":31},[33,141899,141900,141906,141918],{"__ignoreMap":31},[36,141901,141902,141904],{"class":38,"line":39},[36,141903,52043],{"class":51733},[36,141905,16011],{"class":98},[36,141907,141908,141910,141912,141914,141916],{"class":38,"line":46},[36,141909,70902],{"class":109},[36,141911,51869],{"class":98},[36,141913,807],{"class":109},[36,141915,51988],{"class":109},[36,141917,1772],{"class":98},[36,141919,141920],{"class":38,"line":52},[36,141921,2044],{"class":98},[14,141923,140385],{},[26,141925,141926],{"className":126926,"code":139115,"language":126928,"meta":31,"style":31},[33,141927,141928,141934,141946],{"__ignoreMap":31},[36,141929,141930,141932],{"class":38,"line":39},[36,141931,52043],{"class":51733},[36,141933,16011],{"class":98},[36,141935,141936,141938,141940,141942,141944],{"class":38,"line":46},[36,141937,70902],{"class":109},[36,141939,51869],{"class":98},[36,141941,807],{"class":109},[36,141943,51988],{"class":109},[36,141945,1772],{"class":98},[36,141947,141948],{"class":38,"line":52},[36,141949,2044],{"class":98},[559,141951,141953],{"id":141952},"_163-注册页面制作","16.3 注册页面制作",[1941,141955],{"style":126782,"src":141956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,141958,141959,141961],{},[765,141960,9466],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1941,141963],{"style":126782,"src":141964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[588,141966,141968],{"id":141967},"_1631-准备工作","16.3.1 准备工作",[1618,141970,141971,141974],{},[574,141972,141973],{},"创建register.html，引入 base.css，引入favicon图标",[574,141975,141976],{},"创建register.css ，在html页面进行引入",[588,141978,141980,141981,141983],{"id":141979},"_1632-header-头部实现","16.3.2 ",[33,141982,131931],{}," 头部实现",[1618,141985,141986,141989],{},[574,141987,141988],{},"整个内容用 版心 进行包裹",[574,141990,141991],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,141993,140296],{},[26,141995,141996],{"className":127673,"code":134428,"language":127675,"meta":31,"style":31},[33,141997,141998],{"__ignoreMap":31},[36,141999,142000,142002,142004,142006,142008,142010,142012,142014,142016,142018,142020,142022],{"class":38,"line":39},[36,142001,179],{"class":98},[36,142003,1941],{"class":51733},[36,142005,55671],{"class":55},[36,142007,176],{"class":98},[36,142009,134443],{"class":59},[36,142011,55679],{"class":55},[36,142013,176],{"class":98},[36,142015,134450],{"class":59},[36,142017,134453],{"class":55},[36,142019,176],{"class":98},[36,142021,134458],{"class":59},[36,142023,188],{"class":98},[14,142025,140385],{},[26,142027,142028],{"className":127673,"code":134428,"language":127675,"meta":31,"style":31},[33,142029,142030],{"__ignoreMap":31},[36,142031,142032,142034,142036,142038,142040,142042,142044,142046,142048,142050,142052,142054],{"class":38,"line":39},[36,142033,179],{"class":98},[36,142035,1941],{"class":51733},[36,142037,55671],{"class":55},[36,142039,176],{"class":98},[36,142041,134443],{"class":59},[36,142043,55679],{"class":55},[36,142045,176],{"class":98},[36,142047,134450],{"class":59},[36,142049,134453],{"class":55},[36,142051,176],{"class":98},[36,142053,134458],{"class":59},[36,142055,188],{"class":98},[588,142057,142059,142060,142063],{"id":142058},"_1633-registerarea-主体模块实现","16.3.3 ",[33,142061,142062],{},"registerarea"," 主体模块实现",[1941,142065],{"style":126782,"src":142066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,142068,142069],{},"整个大盒子 高度为 522px，设置4个边框",[14,142071,140296],{},[26,142073,142074],{"className":126926,"code":131083,"language":126928,"meta":31,"style":31},[33,142075,142076,142082,142098],{"__ignoreMap":31},[36,142077,142078,142080],{"class":38,"line":39},[36,142079,52043],{"class":51733},[36,142081,16011],{"class":98},[36,142083,142084,142086,142088,142090,142092,142094,142096],{"class":38,"line":46},[36,142085,71328],{"class":109},[36,142087,51869],{"class":98},[36,142089,833],{"class":109},[36,142091,51924],{"class":163},[36,142093,51953],{"class":109},[36,142095,130318],{"class":109},[36,142097,1772],{"class":98},[36,142099,142100],{"class":38,"line":52},[36,142101,2044],{"class":98},[14,142103,140385],{},[26,142105,142106],{"className":126926,"code":131083,"language":126928,"meta":31,"style":31},[33,142107,142108,142114,142130],{"__ignoreMap":31},[36,142109,142110,142112],{"class":38,"line":39},[36,142111,52043],{"class":51733},[36,142113,16011],{"class":98},[36,142115,142116,142118,142120,142122,142124,142126,142128],{"class":38,"line":46},[36,142117,71328],{"class":109},[36,142119,51869],{"class":98},[36,142121,833],{"class":109},[36,142123,51924],{"class":163},[36,142125,51953],{"class":109},[36,142127,130318],{"class":109},[36,142129,1772],{"class":98},[36,142131,142132],{"class":38,"line":52},[36,142133,2044],{"class":98},[14,142135,142136],{},"1号盒子 是一个 h3 标签，放标题",[1618,142138,142139],{},[574,142140,142141],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,142143,140296],{},[26,142145,142146],{"className":126926,"code":139596,"language":126928,"meta":31,"style":31},[33,142147,142148,142154,142164],{"__ignoreMap":31},[36,142149,142150,142152],{"class":38,"line":39},[36,142151,130774],{"class":55},[36,142153,16011],{"class":98},[36,142155,142156,142158,142160,142162],{"class":38,"line":46},[36,142157,131406],{"class":109},[36,142159,51869],{"class":98},[36,142161,24175],{"class":109},[36,142163,1772],{"class":98},[36,142165,142166],{"class":38,"line":52},[36,142167,2044],{"class":98},[14,142169,140385],{},[26,142171,142172],{"className":126926,"code":139596,"language":126928,"meta":31,"style":31},[33,142173,142174,142180,142190],{"__ignoreMap":31},[36,142175,142176,142178],{"class":38,"line":39},[36,142177,130774],{"class":55},[36,142179,16011],{"class":98},[36,142181,142182,142184,142186,142188],{"class":38,"line":46},[36,142183,131406],{"class":109},[36,142185,51869],{"class":98},[36,142187,24175],{"class":109},[36,142189,1772],{"class":98},[36,142191,142192],{"class":38,"line":52},[36,142193,2044],{"class":98},[14,142195,142196],{},"2号盒子 里面放注册的内容",[1618,142198,142199,142202,142211,142225,142238,142241,142244,142262,142276],{},[574,142200,142201],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[574,142203,142204,142205,142207,142208,142210],{},"里面的内容利用 ",[33,142206,1618],{}," 包含 ",[33,142209,574],{}," 来实现的（不需要用表格）",[574,142212,139440,142213,142215,142216,142218,142219,142221,142222,142224],{},[33,142214,574],{}," 里面，左侧放 ",[33,142217,34041],{}," 标签， 中间放",[33,142220,54253],{}," 标签， 右侧放 ",[33,142223,36],{}," 提示信息",[574,142226,142227,142228,142230,142231,142233,142234,142237],{},"左侧 ",[33,142229,34041],{},"里面的文字都是右对齐，我们可以给",[33,142232,34041],{},"设置一个宽度（88px），然后利用",[33,142235,142236],{},"text-align"," 来设置右对齐",[574,142239,142240],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[574,142242,142243],{},"右侧 span修饰一下文字颜色",[574,142245,142246,142247],{},"提示信息的样式优化",[1618,142248,142249,142252,142255],{},[574,142250,142251],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[574,142253,142254],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[574,142256,142257,142258,142261],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[33,142259,142260],{},"vertical-algin"," 来设置 图片与文字对齐方式",[574,142263,142264,142265],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1618,142266,142267,142273],{},[574,142268,142269,142270,142272],{},"设置 ",[33,142271,23992],{}," 的 左右 12px 的内边距，设置一下文字颜色",[574,142274,142275],{},"分别设置 背景颜色",[574,142277,142278,142279,142281],{},"同意协议 和 完成注册 都是用 ",[33,142280,574],{}," 进行包裹",[14,142283,140296],{},[26,142285,142286],{"className":126926,"code":140869,"language":126928,"meta":31,"style":31},[33,142287,142288,142294,142304],{"__ignoreMap":31},[36,142289,142290,142292],{"class":38,"line":39},[36,142291,52043],{"class":51733},[36,142293,16011],{"class":98},[36,142295,142296,142298,142300,142302],{"class":38,"line":46},[36,142297,71310],{"class":109},[36,142299,51869],{"class":98},[36,142301,140886],{"class":109},[36,142303,1772],{"class":98},[36,142305,142306],{"class":38,"line":52},[36,142307,2044],{"class":98},[14,142309,140385],{},[26,142311,142312],{"className":126926,"code":140869,"language":126928,"meta":31,"style":31},[33,142313,142314,142320,142330],{"__ignoreMap":31},[36,142315,142316,142318],{"class":38,"line":39},[36,142317,52043],{"class":51733},[36,142319,16011],{"class":98},[36,142321,142322,142324,142326,142328],{"class":38,"line":46},[36,142323,71310],{"class":109},[36,142325,51869],{"class":98},[36,142327,140886],{"class":109},[36,142329,1772],{"class":98},[36,142331,142332],{"class":38,"line":52},[36,142333,2044],{"class":98},[588,142335,142337],{"id":142336},"_1634-底部实现","16.3.4 底部实现",[14,142339,140296],{},[26,142341,142342],{"className":126926,"code":140869,"language":126928,"meta":31,"style":31},[33,142343,142344,142350,142360],{"__ignoreMap":31},[36,142345,142346,142348],{"class":38,"line":39},[36,142347,52043],{"class":51733},[36,142349,16011],{"class":98},[36,142351,142352,142354,142356,142358],{"class":38,"line":46},[36,142353,71310],{"class":109},[36,142355,51869],{"class":98},[36,142357,140886],{"class":109},[36,142359,1772],{"class":98},[36,142361,142362],{"class":38,"line":52},[36,142363,2044],{"class":98},[14,142365,140385],{},[26,142367,142368],{"className":127673,"code":131030,"language":127675,"meta":31,"style":31},[33,142369,142370,142374,142388,142392],{"__ignoreMap":31},[36,142371,142372],{"class":38,"line":39},[36,142373,131037],{"class":42},[36,142375,142376,142378,142380,142382,142384,142386],{"class":38,"line":46},[36,142377,179],{"class":98},[36,142379,52043],{"class":51733},[36,142381,53918],{"class":55},[36,142383,176],{"class":98},[36,142385,131050],{"class":59},[36,142387,188],{"class":98},[36,142389,142390],{"class":38,"line":52},[36,142391,131057],{"class":98},[36,142393,142394,142396,142398],{"class":38,"line":66},[36,142395,52217],{"class":98},[36,142397,52043],{"class":51733},[36,142399,188],{"class":98},[559,142401,142403],{"id":142402},"_164-项目总结","16.4 项目总结",[571,142405,142406,142409,142412,142415],{},[574,142407,142408],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[574,142410,142411],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[574,142413,142414],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[574,142416,142417],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1941,142419],{"style":126782,"src":142420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[571,142422,142423],{"start":72},[574,142424,142425],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1941,142427],{"style":126782,"src":142428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[571,142430,142431],{"start":82},[574,142432,142433],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1941,142435],{"style":126782,"src":142436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[26,142438,142439],{"className":127673,"code":137083,"language":127675,"meta":31,"style":31},[33,142440,142441],{"__ignoreMap":31},[36,142442,142443,142445,142447,142449,142451,142453,142455,142457,142459,142461,142463,142465],{"class":38,"line":39},[36,142444,179],{"class":98},[36,142446,54253],{"class":51733},[36,142448,54256],{"class":55},[36,142450,176],{"class":98},[36,142452,63131],{"class":59},[36,142454,15359],{"class":55},[36,142456,176],{"class":98},[36,142458,137104],{"class":59},[36,142460,61452],{"class":55},[36,142462,176],{"class":98},[36,142464,137111],{"class":59},[36,142466,188],{"class":98},[571,142468,142469,142472],{"start":88},[574,142470,142471],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[574,142473,142474],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[537,142476,142477],{},"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":31,"searchDepth":46,"depth":46,"links":142479},[142480,142485,142492,142500],{"id":140106,"depth":46,"text":140107,"children":142481},[142482,142483,142484],{"id":140110,"depth":52,"text":140111},{"id":140841,"depth":52,"text":140842},{"id":141154,"depth":52,"text":141155},{"id":141454,"depth":46,"text":141455,"children":142486},[142487,142488,142490],{"id":141458,"depth":52,"text":141459},{"id":141476,"depth":52,"text":142489},"16.2.2 列表页 header 和 nav 修改",{"id":141760,"depth":52,"text":142491},"16.2.3 列表页主体 sk_container",{"id":141952,"depth":46,"text":141953,"children":142493},[142494,142495,142497,142499],{"id":141967,"depth":52,"text":141968},{"id":141979,"depth":52,"text":142496},"16.3.2 header 头部实现",{"id":142058,"depth":52,"text":142498},"16.3.3 registerarea 主体模块实现",{"id":142336,"depth":52,"text":142337},{"id":142402,"depth":46,"text":142403},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":140098,"description":542},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142507,"title":142508,"body":142509,"description":542,"extension":543,"meta":142617,"navigation":246,"path":142618,"seo":142619,"stem":142620,"__hash__":142621},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142510,"toc":142612},[142511,142514,142518,142521,142524,142533,142542,142546,142551,142558,142576,142579,142582,142585,142588,142591,142594,142597,142600,142603,142606,142609],[10,142512,142508],{"id":142513},"_17-web服务器与网站发布",[559,142515,142517],{"id":142516},"_171-web服务器","17.1 Web服务器",[14,142519,142520],{},"把自己网站上传到服务器上，可以让其他人访问",[1941,142522],{"style":126782,"src":142523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,142525,142526,142529,142530],{},[765,142527,142528],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[765,142531,142532],{},"Web 服务器等",[14,142534,142535,142536,101449,142539,26177],{},"根据服务器在网络中所在的位置不同，又可分为 ",[765,142537,142538],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[765,142540,142541],{},"远程服务器",[588,142543,142545],{"id":142544},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,142547,142548],{},[765,142549,142550],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,142552,142553,142554],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[20,142555,142556],{"href":142556,"rel":142557},"http:\u002F\u002Ffree.3v.do\u002F",[24],[1618,142559,142560,142563,142566,142573],{},[574,142561,142562],{},"去免费空间网站注册账号。",[574,142564,142565],{},"记录下主机名、用户名、密码、域名。",[574,142567,142568,142569,142572],{},"利用 ",[33,142570,142571],{},"utftp"," 软件 上传网站到远程服务器",[574,142574,142575],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,142577,142578],{},"使用软件上传，对上传软件文件进行解压",[1941,142580],{"style":126782,"src":142581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1941,142583],{"style":126782,"src":142584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,142586,142587],{},"输入刚刚申请的服务器账号信息：",[1941,142589],{"style":126782,"src":142590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1941,142592],{"style":126782,"src":142593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1941,142595],{"style":126782,"src":142596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1941,142598],{"style":126782,"src":142599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,142601,142602],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1941,142604],{"style":126782,"src":142605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,142607,142608],{},"浏览器输入域名即可访问",[14,142610,142611],{},"首页一定必须是index",{"title":31,"searchDepth":46,"depth":46,"links":142613},[142614],{"id":142516,"depth":46,"text":142517,"children":142615},[142616],{"id":142544,"depth":52,"text":142545},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142508,"description":542},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142623,"title":142624,"body":142625,"description":542,"extension":543,"meta":143552,"navigation":246,"path":143553,"seo":143554,"stem":143555,"__hash__":143556},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142626,"toc":143535},[142627,142630,142634,142637,142640,142651,142654,142658,142662,142667,142670,142673,142676,142679,142683,142709,142713,142717,142720,142723,142727,142760,142764,142767,142770,142834,142838,142842,142845,142848,142851,142855,142900,142904,142907,142937,142941,142945,142948,142951,142955,142958,143027,143030,143138,143140,143146,143150,143153,143156,143252,143255,143259,143283,143287,143290,143294,143297,143301,143304,143307,143310,143313,143317,143320,143323,143327,143331,143334,143337,143340,143343,143347,143350,143354,143357,143360,143405,143409,143413,143416,143419,143422,143454,143458,143461,143495,143499,143502,143532],[10,142628,142624],{"id":142629},"_18-2d动画与3d转换",[559,142631,142633],{"id":142632},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,142635,142636],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,142638,142639],{},"转换（transform）你可以简单理解为变形",[1618,142641,142642,142645,142648],{},[574,142643,142644],{},"移动：translate",[574,142646,142647],{},"旋转：rotate",[574,142649,142650],{},"缩放：scale",[1941,142652],{"style":126782,"src":142653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[588,142655,142657],{"id":142656},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22437,142659,142661],{"id":142660},"_18111-translate介绍","18.1.1.1 translate介绍",[14,142663,142664,142665],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[765,142666,133585],{},[1941,142668],{"style":126782,"src":142669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,142671,142672],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,142674,142675],{},"对于行内元素无效",[14,142677,142678],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22437,142680,142682],{"id":142681},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[26,142684,142685],{"className":126926,"code":139115,"language":126928,"meta":31,"style":31},[33,142686,142687,142693,142705],{"__ignoreMap":31},[36,142688,142689,142691],{"class":38,"line":39},[36,142690,52043],{"class":51733},[36,142692,16011],{"class":98},[36,142694,142695,142697,142699,142701,142703],{"class":38,"line":46},[36,142696,70902],{"class":109},[36,142698,51869],{"class":98},[36,142700,807],{"class":109},[36,142702,51988],{"class":109},[36,142704,1772],{"class":98},[36,142706,142707],{"class":38,"line":52},[36,142708,2044],{"class":98},[588,142710,142712],{"id":142711},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22437,142714,142716],{"id":142715},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,142718,142719],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1941,142721],{"style":126782,"src":142722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22437,142724,142726],{"id":142725},"_18122-旋转效果","18.1.2.2 旋转效果",[26,142728,142730],{"className":126926,"code":142729,"language":126928,"meta":31,"style":31},"div {\n  transform: rotate(45deg);\n}\n",[33,142731,142732,142738,142756],{"__ignoreMap":31},[36,142733,142734,142736],{"class":38,"line":39},[36,142735,52043],{"class":51733},[36,142737,16011],{"class":98},[36,142739,142740,142742,142744,142747,142749,142751,142754],{"class":38,"line":46},[36,142741,136910],{"class":109},[36,142743,51869],{"class":98},[36,142745,142746],{"class":109},"rotate",[36,142748,621],{"class":98},[36,142750,1143],{"class":109},[36,142752,142753],{"class":163},"deg",[36,142755,3170],{"class":98},[36,142757,142758],{"class":38,"line":52},[36,142759,2044],{"class":98},[22437,142761,142763],{"id":142762},"_18123-三角做法","18.1.2.3 三角做法",[14,142765,142766],{},"该下标当经过最外层大盒子时会实现向上反转",[1941,142768],{"style":126782,"src":142769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[26,142771,142772],{"className":126926,"code":135446,"language":126928,"meta":31,"style":31},[33,142773,142774,142778,142784,142794,142804,142820,142830],{"__ignoreMap":31},[36,142775,142776],{"class":38,"line":39},[36,142777,135453],{"class":42},[36,142779,142780,142782],{"class":38,"line":46},[36,142781,135458],{"class":55},[36,142783,16011],{"class":98},[36,142785,142786,142788,142790,142792],{"class":38,"line":52},[36,142787,71000],{"class":109},[36,142789,51869],{"class":98},[36,142791,807],{"class":109},[36,142793,1772],{"class":98},[36,142795,142796,142798,142800,142802],{"class":38,"line":66},[36,142797,71220],{"class":109},[36,142799,51869],{"class":98},[36,142801,807],{"class":109},[36,142803,1772],{"class":98},[36,142805,142806,142808,142810,142812,142814,142816,142818],{"class":38,"line":72},[36,142807,71328],{"class":109},[36,142809,51869],{"class":98},[36,142811,1060],{"class":109},[36,142813,51924],{"class":163},[36,142815,51953],{"class":109},[36,142817,64423],{"class":109},[36,142819,1772],{"class":98},[36,142821,142822,142824,142826,142828],{"class":38,"line":82},[36,142823,135501],{"class":109},[36,142825,51869],{"class":98},[36,142827,62801],{"class":109},[36,142829,1772],{"class":98},[36,142831,142832],{"class":38,"line":88},[36,142833,2044],{"class":98},[588,142835,142837],{"id":142836},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22437,142839,142841],{"id":142840},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,142843,142844],{},"设置中心点",[1941,142846],{"style":126782,"src":142847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,142849,142850],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22437,142852,142854],{"id":142853},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[26,142856,142858],{"className":126926,"code":142857,"language":126928,"meta":31,"style":31},"\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",[33,142859,142860,142865,142871,142886,142891,142896],{"__ignoreMap":31},[36,142861,142862],{"class":38,"line":39},[36,142863,142864],{"class":42},"\u002F* 转换中心点 *\u002F\n",[36,142866,142867,142869],{"class":38,"line":46},[36,142868,52043],{"class":51733},[36,142870,16011],{"class":98},[36,142872,142873,142876,142878,142880,142882,142884],{"class":38,"line":52},[36,142874,142875],{"class":109},"  transform-origin",[36,142877,51869],{"class":98},[36,142879,52024],{"class":109},[36,142881,17583],{"class":109},[36,142883,130789],{"class":98},[36,142885,135599],{"class":42},[36,142887,142888],{"class":38,"line":66},[36,142889,142890],{"class":42},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[36,142892,142893],{"class":38,"line":72},[36,142894,142895],{"class":42},"  \u002F* transform-origin: left top; *\u002F\n",[36,142897,142898],{"class":38,"line":82},[36,142899,2044],{"class":98},[22437,142901,142903],{"id":142902},"_18133-旋转案例","18.1.3.3 旋转案例",[1941,142905],{"style":126782,"src":142906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[26,142908,142909],{"className":126926,"code":142729,"language":126928,"meta":31,"style":31},[33,142910,142911,142917,142933],{"__ignoreMap":31},[36,142912,142913,142915],{"class":38,"line":39},[36,142914,52043],{"class":51733},[36,142916,16011],{"class":98},[36,142918,142919,142921,142923,142925,142927,142929,142931],{"class":38,"line":46},[36,142920,136910],{"class":109},[36,142922,51869],{"class":98},[36,142924,142746],{"class":109},[36,142926,621],{"class":98},[36,142928,1143],{"class":109},[36,142930,142753],{"class":163},[36,142932,3170],{"class":98},[36,142934,142935],{"class":38,"line":52},[36,142936,2044],{"class":98},[588,142938,142940],{"id":142939},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22437,142942,142944],{"id":142943},"_18141-scale介绍","18.1.4.1 scale介绍",[14,142946,142947],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1941,142949],{"style":126782,"src":142950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22437,142952,142954],{"id":142953},"_18142-分页按钮","18.1.4.2 分页按钮",[1941,142956],{"style":126782,"src":142957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[26,142959,142961],{"className":126926,"code":142960,"language":126928,"meta":31,"style":31},"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",[33,142962,142963,142969,142985,142989,142993,142998,143004,143018,143023],{"__ignoreMap":31},[36,142964,142965,142967],{"class":38,"line":39},[36,142966,52043],{"class":51733},[36,142968,16011],{"class":98},[36,142970,142971,142973,142975,142978,142980,142983],{"class":38,"line":46},[36,142972,136910],{"class":109},[36,142974,51869],{"class":98},[36,142976,142977],{"class":109},"scale",[36,142979,621],{"class":98},[36,142981,142982],{"class":109},"1.2",[36,142984,3170],{"class":98},[36,142986,142987],{"class":38,"line":52},[36,142988,2044],{"class":98},[36,142990,142991],{"class":38,"line":66},[36,142992,136387],{"class":98},[36,142994,142995],{"class":38,"line":72},[36,142996,142997],{"class":42},"\u002F* 2D 缩放 *\u002F\n",[36,142999,143000,143002],{"class":38,"line":82},[36,143001,52043],{"class":51733},[36,143003,16011],{"class":98},[36,143005,143006,143008,143010,143012,143014,143016],{"class":38,"line":88},[36,143007,136910],{"class":109},[36,143009,51869],{"class":98},[36,143011,142977],{"class":109},[36,143013,621],{"class":98},[36,143015,142982],{"class":109},[36,143017,3170],{"class":98},[36,143019,143020],{"class":38,"line":113},[36,143021,143022],{"class":42},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[36,143024,143025],{"class":38,"line":119},[36,143026,2044],{"class":98},[14,143028,143029],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[26,143031,143033],{"className":126926,"code":143032,"language":126928,"meta":31,"style":31},"\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",[33,143034,143035,143040,143050,143071,143092,143096,143101,143107,143134],{"__ignoreMap":31},[36,143036,143037],{"class":38,"line":39},[36,143038,143039],{"class":42},"\u002F* 定义动画 *\u002F\n",[36,143041,143042,143045,143048],{"class":38,"line":46},[36,143043,143044],{"class":163},"@keyframes",[36,143046,143047],{"class":5667}," move",[36,143049,16011],{"class":98},[36,143051,143052,143055,143057,143059,143061,143064,143066,143068],{"class":38,"line":52},[36,143053,143054],{"class":55},"  0%",[36,143056,80239],{"class":98},[36,143058,48567],{"class":109},[36,143060,51869],{"class":98},[36,143062,143063],{"class":109},"translateX",[36,143065,621],{"class":98},[36,143067,807],{"class":109},[36,143069,143070],{"class":98},"); }\n",[36,143072,143073,143076,143078,143080,143082,143084,143086,143088,143090],{"class":38,"line":66},[36,143074,143075],{"class":55},"  100%",[36,143077,80239],{"class":98},[36,143079,48567],{"class":109},[36,143081,51869],{"class":98},[36,143083,143063],{"class":109},[36,143085,621],{"class":98},[36,143087,926],{"class":109},[36,143089,51924],{"class":163},[36,143091,143070],{"class":98},[36,143093,143094],{"class":38,"line":72},[36,143095,2044],{"class":98},[36,143097,143098],{"class":38,"line":82},[36,143099,143100],{"class":42},"\u002F* 调用动画 *\u002F\n",[36,143102,143103,143105],{"class":38,"line":88},[36,143104,52043],{"class":51733},[36,143106,16011],{"class":98},[36,143108,143109,143112,143114,143116,143118,143120,143122,143124,143126,143129,143132],{"class":38,"line":113},[36,143110,143111],{"class":109},"  animation",[36,143113,51869],{"class":98},[36,143115,135612],{"class":109},[36,143117,25555],{"class":109},[36,143119,1308],{"class":163},[36,143121,79112],{"class":109},[36,143123,4544],{"class":109},[36,143125,1308],{"class":163},[36,143127,143128],{"class":109}," infinite",[36,143130,143131],{"class":109}," alternate",[36,143133,1772],{"class":98},[36,143135,143136],{"class":38,"line":119},[36,143137,2044],{"class":98},[14,143139,143029],{},[26,143141,143144],{"className":143142,"code":143143,"language":5638},[5636],"\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",[33,143145,143143],{"__ignoreMap":31},[22437,143147,143149],{"id":143148},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,143151,143152],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1941,143154],{"style":126782,"src":143155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[26,143157,143158],{"className":126926,"code":143032,"language":126928,"meta":31,"style":31},[33,143159,143160,143164,143172,143190,143210,143214,143218,143224,143248],{"__ignoreMap":31},[36,143161,143162],{"class":38,"line":39},[36,143163,143039],{"class":42},[36,143165,143166,143168,143170],{"class":38,"line":46},[36,143167,143044],{"class":163},[36,143169,143047],{"class":5667},[36,143171,16011],{"class":98},[36,143173,143174,143176,143178,143180,143182,143184,143186,143188],{"class":38,"line":52},[36,143175,143054],{"class":55},[36,143177,80239],{"class":98},[36,143179,48567],{"class":109},[36,143181,51869],{"class":98},[36,143183,143063],{"class":109},[36,143185,621],{"class":98},[36,143187,807],{"class":109},[36,143189,143070],{"class":98},[36,143191,143192,143194,143196,143198,143200,143202,143204,143206,143208],{"class":38,"line":66},[36,143193,143075],{"class":55},[36,143195,80239],{"class":98},[36,143197,48567],{"class":109},[36,143199,51869],{"class":98},[36,143201,143063],{"class":109},[36,143203,621],{"class":98},[36,143205,926],{"class":109},[36,143207,51924],{"class":163},[36,143209,143070],{"class":98},[36,143211,143212],{"class":38,"line":72},[36,143213,2044],{"class":98},[36,143215,143216],{"class":38,"line":82},[36,143217,143100],{"class":42},[36,143219,143220,143222],{"class":38,"line":88},[36,143221,52043],{"class":51733},[36,143223,16011],{"class":98},[36,143225,143226,143228,143230,143232,143234,143236,143238,143240,143242,143244,143246],{"class":38,"line":113},[36,143227,143111],{"class":109},[36,143229,51869],{"class":98},[36,143231,135612],{"class":109},[36,143233,25555],{"class":109},[36,143235,1308],{"class":163},[36,143237,79112],{"class":109},[36,143239,4544],{"class":109},[36,143241,1308],{"class":163},[36,143243,143128],{"class":109},[36,143245,143131],{"class":109},[36,143247,1772],{"class":98},[36,143249,143250],{"class":38,"line":119},[36,143251,2044],{"class":98},[14,143253,143254],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[588,143256,143258],{"id":143257},"_1823-知识点回顾","18.2.3 知识点回顾",[26,143260,143261],{"className":126926,"code":129095,"language":126928,"meta":31,"style":31},[33,143262,143263,143269,143279],{"__ignoreMap":31},[36,143264,143265,143267],{"class":38,"line":39},[36,143266,52043],{"class":51733},[36,143268,16011],{"class":98},[36,143270,143271,143273,143275,143277],{"class":38,"line":46},[36,143272,129108],{"class":109},[36,143274,51869],{"class":98},[36,143276,62168],{"class":109},[36,143278,1772],{"class":98},[36,143280,143281],{"class":38,"line":52},[36,143282,2044],{"class":98},[559,143284,143286],{"id":143285},"_183-3d-转换","18.3 3D 转换",[14,143288,143289],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[588,143291,143293],{"id":143292},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1941,143295],{"style":126782,"src":143296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[588,143298,143300],{"id":143299},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1941,143302],{"style":126782,"src":143303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,143305,143306],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,143308,143309],{},"translate3d的效果需要搭配透视perspective来使用",[1941,143311],{"style":126782,"src":143312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[588,143314,143316],{"id":143315},"_1833-透视-perspective","18.3.3 透视 perspective",[1941,143318],{"style":126782,"src":143319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,143321,143322],{},"透视写在父盒子上，单位为像素",[588,143324,143326],{"id":143325},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22437,143328,143330],{"id":143329},"_18341-分开解释","18.3.4.1 分开解释",[1941,143332],{"style":126782,"src":143333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1941,143335],{"style":126782,"src":143336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1941,143338],{"style":126782,"src":143339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,143341,143342],{},"总结来说就是左手原则",[22437,143344,143346],{"id":143345},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1941,143348],{"style":126782,"src":143349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[588,143351,143353],{"id":143352},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1941,143355],{"style":126782,"src":143356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1941,143358],{"style":126782,"src":143359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[26,143361,143363],{"className":126926,"code":143362,"language":126928,"meta":31,"style":31},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[33,143364,143365,143371,143384,143401],{"__ignoreMap":31},[36,143366,143367,143369],{"class":38,"line":39},[36,143368,52043],{"class":51733},[36,143370,16011],{"class":98},[36,143372,143373,143376,143378,143380,143382],{"class":38,"line":46},[36,143374,143375],{"class":109},"  perspective",[36,143377,51869],{"class":98},[36,143379,65506],{"class":109},[36,143381,51924],{"class":163},[36,143383,1772],{"class":98},[36,143385,143386,143388,143390,143393,143395,143397,143399],{"class":38,"line":52},[36,143387,136910],{"class":109},[36,143389,51869],{"class":98},[36,143391,143392],{"class":109},"rotateX",[36,143394,621],{"class":98},[36,143396,1143],{"class":109},[36,143398,142753],{"class":163},[36,143400,3170],{"class":98},[36,143402,143403],{"class":38,"line":66},[36,143404,2044],{"class":98},[588,143406,143408],{"id":143407},"_1836-案例","18.3.6 案例",[22437,143410,143412],{"id":143411},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1941,143414],{"style":126782,"src":143415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1941,143417],{"style":126782,"src":143418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1941,143420],{"style":126782,"src":143421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[26,143423,143425],{"className":126926,"code":143424,"language":126928,"meta":31,"style":31},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[33,143426,143427,143432,143438,143450],{"__ignoreMap":31},[36,143428,143429],{"class":38,"line":39},[36,143430,143431],{"class":42},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[36,143433,143434,143436],{"class":38,"line":46},[36,143435,133923],{"class":55},[36,143437,16011],{"class":98},[36,143439,143440,143442,143444,143446,143448],{"class":38,"line":52},[36,143441,143375],{"class":109},[36,143443,51869],{"class":98},[36,143445,65506],{"class":109},[36,143447,51924],{"class":163},[36,143449,1772],{"class":98},[36,143451,143452],{"class":38,"line":66},[36,143453,2044],{"class":98},[22437,143455,143457],{"id":143456},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1941,143459],{"style":126782,"src":143460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[26,143462,143463],{"className":127673,"code":131030,"language":127675,"meta":31,"style":31},[33,143464,143465,143469,143483,143487],{"__ignoreMap":31},[36,143466,143467],{"class":38,"line":39},[36,143468,131037],{"class":42},[36,143470,143471,143473,143475,143477,143479,143481],{"class":38,"line":46},[36,143472,179],{"class":98},[36,143474,52043],{"class":51733},[36,143476,53918],{"class":55},[36,143478,176],{"class":98},[36,143480,131050],{"class":59},[36,143482,188],{"class":98},[36,143484,143485],{"class":38,"line":52},[36,143486,131057],{"class":98},[36,143488,143489,143491,143493],{"class":38,"line":66},[36,143490,52217],{"class":98},[36,143492,52043],{"class":51733},[36,143494,188],{"class":98},[22437,143496,143498],{"id":143497},"_18363-旋转木马","18.3.6.3 旋转木马",[1941,143500],{"style":126782,"src":143501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[26,143503,143504],{"className":126926,"code":142729,"language":126928,"meta":31,"style":31},[33,143505,143506,143512,143528],{"__ignoreMap":31},[36,143507,143508,143510],{"class":38,"line":39},[36,143509,52043],{"class":51733},[36,143511,16011],{"class":98},[36,143513,143514,143516,143518,143520,143522,143524,143526],{"class":38,"line":46},[36,143515,136910],{"class":109},[36,143517,51869],{"class":98},[36,143519,142746],{"class":109},[36,143521,621],{"class":98},[36,143523,1143],{"class":109},[36,143525,142753],{"class":163},[36,143527,3170],{"class":98},[36,143529,143530],{"class":38,"line":52},[36,143531,2044],{"class":98},[537,143533,143534],{},"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":31,"searchDepth":46,"depth":46,"links":143536},[143537,143544],{"id":142632,"depth":46,"text":142633,"children":143538},[143539,143540,143541,143542,143543],{"id":142656,"depth":52,"text":142657},{"id":142711,"depth":52,"text":142712},{"id":142836,"depth":52,"text":142837},{"id":142939,"depth":52,"text":142940},{"id":143257,"depth":52,"text":143258},{"id":143285,"depth":46,"text":143286,"children":143545},[143546,143547,143548,143549,143550,143551],{"id":143292,"depth":52,"text":143293},{"id":143299,"depth":52,"text":143300},{"id":143315,"depth":52,"text":143316},{"id":143325,"depth":52,"text":143326},{"id":143352,"depth":52,"text":143353},{"id":143407,"depth":52,"text":143408},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142624,"description":542},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143558,"title":143559,"body":143560,"description":542,"extension":543,"meta":143763,"navigation":246,"path":143764,"seo":143765,"stem":143766,"__hash__":143767},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143561,"toc":143752},[143562,143565,143569,143572,143575,143579,143582,143585,143588,143592,143595,143599,143602,143606,143609,143613,143627,143631,143656,143659,143662,143679,143683,143687,143690,143693,143697,143700,143703,143721,143725,143728,143742,143746,143749],[10,143563,143559],{"id":143564},"_19-移动端基础-前缀现状与视口",[559,143566,143568],{"id":143567},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1941,143570],{"style":126782,"src":143571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,143573,143574],{},"意思就是加个前缀，增加兼容性",[559,143576,143578],{"id":143577},"_192-移动端现状认识","19.2 移动端现状认识",[1941,143580],{"style":126782,"src":143581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,143583,143584],{},"调试方法：",[1941,143586],{"style":126782,"src":143587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[559,143589,143591],{"id":143590},"_193-视口","19.3 视口",[14,143593,143594],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[588,143596,143598],{"id":143597},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1941,143600],{"style":126782,"src":143601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[588,143603,143605],{"id":143604},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1941,143607],{"style":126782,"src":143608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[588,143610,143612],{"id":143611},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1618,143614,143615,143618,143621,143624],{},[574,143616,143617],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[574,143619,143620],{},"理想视口，对设备来讲，是最理想的视口尺寸",[574,143622,143623],{},"需要手动添写meta视口标签通知浏览器操作",[574,143625,143626],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[588,143628,143630],{"id":143629},"_1934-meta视口标签","19.3.4 meta视口标签",[26,143632,143634],{"className":127673,"code":143633,"language":127675,"meta":31,"style":31},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[33,143635,143636],{"__ignoreMap":31},[36,143637,143638,143640,143642,143644,143646,143648,143650,143652,143654],{"class":38,"line":39},[36,143639,179],{"class":98},[36,143641,51776],{"class":51733},[36,143643,15359],{"class":55},[36,143645,176],{"class":98},[36,143647,51823],{"class":59},[36,143649,51803],{"class":55},[36,143651,176],{"class":98},[36,143653,51830],{"class":59},[36,143655,188],{"class":98},[1941,143657],{"style":126782,"src":143658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,143660,143661],{},"标准视口设置：",[571,143663,143664,143667,143670,143673,143676],{},[574,143665,143666],{},"视口宽度和设备保持一致",[574,143668,143669],{},"视口的默认缩放比例1.0",[574,143671,143672],{},"不允许用户自行缩放",[574,143674,143675],{},"最大允许的缩放比例1.0",[574,143677,143678],{},"最小允许的缩放比例1.0",[588,143680,143682],{"id":143681},"_1935-二倍图","19.3.5 二倍图",[22437,143684,143686],{"id":143685},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1941,143688],{"style":126782,"src":143689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1941,143691],{"style":126782,"src":143692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22437,143694,143696],{"id":143695},"_19352-多倍图","19.3.5.2 多倍图",[1941,143698],{"style":126782,"src":143699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,143701,143702],{},"二倍图法，代码如下：",[26,143704,143706],{"className":126926,"code":143705,"language":126928,"meta":31,"style":31},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[33,143707,143708,143713],{"__ignoreMap":31},[36,143709,143710],{"class":38,"line":39},[36,143711,143712],{"class":42},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[36,143714,143715,143718],{"class":38,"line":46},[36,143716,143717],{"class":51733},"background-size",[36,143719,143720],{"class":98},": 50% 50%;\n",[22437,143722,143724],{"id":143723},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1941,143726],{"style":126782,"src":143727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[571,143729,143730,143733,143736,143739],{},[574,143731,143732],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[574,143734,143735],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[574,143737,143738],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[574,143740,143741],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22437,143743,143745],{"id":143744},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1941,143747],{"style":126782,"src":143748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[537,143750,143751],{},"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":31,"searchDepth":46,"depth":46,"links":143753},[143754,143755,143756],{"id":143567,"depth":46,"text":143568},{"id":143577,"depth":46,"text":143578},{"id":143590,"depth":46,"text":143591,"children":143757},[143758,143759,143760,143761,143762],{"id":143597,"depth":52,"text":143598},{"id":143604,"depth":52,"text":143605},{"id":143611,"depth":52,"text":143612},{"id":143629,"depth":52,"text":143630},{"id":143681,"depth":52,"text":143682},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143559,"description":542},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143769,"title":143770,"body":143771,"description":542,"extension":543,"meta":144648,"navigation":246,"path":144649,"seo":144650,"stem":144651,"__hash__":144652},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143772,"toc":144632},[143773,143776,143780,143787,143790,143797,143800,143805,143808,143812,143816,143823,143826,143829,143833,143836,143839,143842,143845,143848,143852,143855,143859,143861,143864,143867,143870,143873,143875,143878,143880,143910,143912,143942,143946,143949,143953,143956,143973,143976,143979,144055,144057,144060,144063,144066,144069,144071,144074,144077,144081,144103,144106,144109,144113,144116,144122,144125,144129,144132,144135,144139,144142,144145,144148,144152,144155,144158,144161,144164,144168,144171,144175,144182,144185,144188,144191,144194,144204,144207,144210,144217,144220,144224,144227,144230,144234,144237,144240,144243,144288,144291,144294,144297,144299,144428,144430,144468,144471,144474,144476,144594,144596,144630],[10,143774,143770],{"id":143775},"_20-移动端布局实战上篇",[559,143777,143779],{"id":143778},"_201-移动端主流方案","20.1 移动端主流方案",[571,143781,143782],{},[574,143783,143784],{},[765,143785,143786],{},"单独移动端页面（主流）",[1941,143788],{"style":126782,"src":143789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[571,143791,143792],{"start":46},[574,143793,143794],{},[765,143795,143796],{},"响应式兼容PC移动端",[1941,143798],{"style":126782,"src":143799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[571,143801,143802],{"start":52},[574,143803,143804],{},"两种页面选型布局方式",[1941,143806],{"style":126782,"src":143807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[559,143809,143811],{"id":143810},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[588,143813,143815],{"id":143814},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,143817,143818,143819],{},"官网地址： ",[20,143820,143821],{"href":143821,"rel":143822},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24],[1941,143824],{"style":126782,"src":143825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1941,143827],{"style":126782,"src":143828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[588,143830,143832],{"id":143831},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1941,143834],{"style":126782,"src":143835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1941,143837],{"style":126782,"src":143838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,143840,143841],{},"去除高亮：",[14,143843,143844],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,143846,143847],{},"-webkit- tap-highlight-color: transparent;",[559,143849,143851],{"id":143850},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1941,143853],{"style":126782,"src":143854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[559,143856,143858],{"id":143857},"_204-流式布局案例","20.4 流式布局案例",[14,143860,650],{},[14,143862,143863],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,143865,143866],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,143868,143869],{},"图片格式：",[1941,143871],{"style":126782,"src":143872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,143874,135969],{},[1941,143876],{"style":126782,"src":143877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,143879,140296],{},[26,143881,143882],{"className":127673,"code":134428,"language":127675,"meta":31,"style":31},[33,143883,143884],{"__ignoreMap":31},[36,143885,143886,143888,143890,143892,143894,143896,143898,143900,143902,143904,143906,143908],{"class":38,"line":39},[36,143887,179],{"class":98},[36,143889,1941],{"class":51733},[36,143891,55671],{"class":55},[36,143893,176],{"class":98},[36,143895,134443],{"class":59},[36,143897,55679],{"class":55},[36,143899,176],{"class":98},[36,143901,134450],{"class":59},[36,143903,134453],{"class":55},[36,143905,176],{"class":98},[36,143907,134458],{"class":59},[36,143909,188],{"class":98},[14,143911,140385],{},[26,143913,143914],{"className":127673,"code":134428,"language":127675,"meta":31,"style":31},[33,143915,143916],{"__ignoreMap":31},[36,143917,143918,143920,143922,143924,143926,143928,143930,143932,143934,143936,143938,143940],{"class":38,"line":39},[36,143919,179],{"class":98},[36,143921,1941],{"class":51733},[36,143923,55671],{"class":55},[36,143925,176],{"class":98},[36,143927,134443],{"class":59},[36,143929,55679],{"class":55},[36,143931,176],{"class":98},[36,143933,134450],{"class":59},[36,143935,134453],{"class":55},[36,143937,176],{"class":98},[36,143939,134458],{"class":59},[36,143941,188],{"class":98},[559,143943,143945],{"id":143944},"_205-flex布局","20.5 flex布局",[1941,143947],{"style":126782,"src":143948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[588,143950,143952],{"id":143951},"_2051-布局原理","20.5.1 布局原理",[14,143954,143955],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1618,143957,143958,143961,143964,143967,143970],{},[574,143959,143960],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[574,143962,143963],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[574,143965,143966],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[574,143968,143969],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[574,143971,143972],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,143974,143975],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,143977,143978],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[26,143980,143982],{"className":126926,"code":143981,"language":126928,"meta":31,"style":31},"\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",[33,143983,143984,143989,143996,144006,144018,144029,144040,144051],{"__ignoreMap":31},[36,143985,143986],{"class":38,"line":39},[36,143987,143988],{"class":42},"\u002F* Flex 弹性布局 *\u002F\n",[36,143990,143991,143994],{"class":38,"line":46},[36,143992,143993],{"class":55},".container",[36,143995,16011],{"class":98},[36,143997,143998,144000,144002,144004],{"class":38,"line":52},[36,143999,128542],{"class":109},[36,144001,51869],{"class":98},[36,144003,51909],{"class":109},[36,144005,1772],{"class":98},[36,144007,144008,144011,144013,144016],{"class":38,"line":66},[36,144009,144010],{"class":109},"  flex-direction",[36,144012,51869],{"class":98},[36,144014,144015],{"class":109},"row",[36,144017,1772],{"class":98},[36,144019,144020,144023,144025,144027],{"class":38,"line":72},[36,144021,144022],{"class":109},"  justify-content",[36,144024,51869],{"class":98},[36,144026,52100],{"class":109},[36,144028,1772],{"class":98},[36,144030,144031,144034,144036,144038],{"class":38,"line":82},[36,144032,144033],{"class":109},"  align-items",[36,144035,51869],{"class":98},[36,144037,52024],{"class":109},[36,144039,1772],{"class":98},[36,144041,144042,144045,144047,144049],{"class":38,"line":88},[36,144043,144044],{"class":109},"  flex-wrap",[36,144046,51869],{"class":98},[36,144048,79042],{"class":109},[36,144050,1772],{"class":98},[36,144052,144053],{"class":38,"line":113},[36,144054,2044],{"class":98},[14,144056,70885],{},[14,144058,144059],{},".form-item .male-label {",[14,144061,144062],{},"   margin-right: 20px;",[14,144064,144065],{},"   display: inline-flex;",[14,144067,144068],{},"   align-items: center;",[14,144070,1558],{},[1941,144072],{"style":126782,"src":144073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1941,144075],{"style":126782,"src":144076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[588,144078,144080],{"id":144079},"_2052-常见父项属性","20.5.2 常见父项属性",[571,144082,144083,144086,144089,144092,144095,144098,144101],{},[574,144084,144085],{},"flex-direction：设置主轴的方向",[574,144087,144088],{},"justify-content：设置主轴上的子元素排列方式",[574,144090,144091],{},"flex-wrap：设置子元素是否换行",[574,144093,144094],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[574,144096,144097],{},"align-items：设置侧轴上的子元素排列方式（单行）",[574,144099,144100],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[574,144102,144085],{},[1941,144104],{"style":126782,"src":144105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1941,144107],{"style":126782,"src":144108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[571,144110,144111],{"start":46},[574,144112,144088],{},[1941,144114],{"style":126782,"src":144115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,144117,144118,144121],{},[33,144119,144120],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,144123,144124],{},"跟着主轴走",[571,144126,144127],{"start":52},[574,144128,144091],{},[1941,144130],{"style":126782,"src":144131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,144133,144134],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[571,144136,144137],{"start":66},[574,144138,144094],{},[1941,144140],{"style":126782,"src":144141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,144143,144144],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,144146,144147],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[571,144149,144150],{"start":72},[574,144151,144097],{},[1941,144153],{"style":126782,"src":144154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,144156,144157],{},"align-items与align-content之间的区别：",[14,144159,144160],{},"单找items，多找content",[1941,144162],{"style":126782,"src":144163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[571,144165,144166],{"start":82},[574,144167,144100],{},[1941,144169],{"style":126782,"src":144170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[588,144172,144174],{"id":144173},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[571,144176,144177],{},[574,144178,144179],{},[765,144180,144181],{},"flex 属性",[14,144183,144184],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1941,144186],{"style":126782,"src":144187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,144189,144190],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,144192,144193],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[571,144195,144196],{"start":46},[574,144197,144198,14234,144201],{},[765,144199,144200],{},"align-self",[765,144202,144203],{},"控制子项自己在侧轴上的排列方式",[1941,144205],{"style":126782,"src":144206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,144208,144209],{},"单个子盒子在父盒子侧轴上的排列方式",[571,144211,144212],{"start":52},[574,144213,144214,144216],{},[765,144215,95729],{}," 属性定义项目的排列顺序",[1941,144218],{"style":126782,"src":144219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[588,144221,144223],{"id":144222},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1941,144225],{"style":126782,"src":144226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,144228,144229],{},"必须要添加浏览器的私有前缀",[588,144231,144233],{"id":144232},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,144235,144236],{},"学到最重要的知识：",[14,144238,144239],{},"flex处理这样的布局思路",[1941,144241],{"style":126782,"src":144242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[26,144244,144246],{"className":126926,"code":144245,"language":126928,"meta":31,"style":31},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[33,144247,144248,144254,144264,144274,144284],{"__ignoreMap":31},[36,144249,144250,144252],{"class":38,"line":39},[36,144251,143993],{"class":55},[36,144253,16011],{"class":98},[36,144255,144256,144258,144260,144262],{"class":38,"line":46},[36,144257,128542],{"class":109},[36,144259,51869],{"class":98},[36,144261,51909],{"class":109},[36,144263,1772],{"class":98},[36,144265,144266,144268,144270,144272],{"class":38,"line":52},[36,144267,144022],{"class":109},[36,144269,51869],{"class":98},[36,144271,52024],{"class":109},[36,144273,1772],{"class":98},[36,144275,144276,144278,144280,144282],{"class":38,"line":66},[36,144277,144033],{"class":109},[36,144279,51869],{"class":98},[36,144281,52024],{"class":109},[36,144283,1772],{"class":98},[36,144285,144286],{"class":38,"line":72},[36,144287,2044],{"class":98},[14,144289,144290],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,144292,144293],{},"使用属性选择器",[1941,144295],{"style":126782,"src":144296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,144298,69321],{},[26,144300,144302],{"className":127673,"code":144301,"language":127675,"meta":31,"style":31},"\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",[33,144303,144304,144309,144323,144328,144348,144353,144372,144377,144396,144401,144420],{"__ignoreMap":31},[36,144305,144306],{"class":38,"line":39},[36,144307,144308],{"class":42},"\u003C!-- 携程网移动端案例结构 -->\n",[36,144310,144311,144313,144315,144317,144319,144321],{"class":38,"line":46},[36,144312,179],{"class":98},[36,144314,52043],{"class":51733},[36,144316,53918],{"class":55},[36,144318,176],{"class":98},[36,144320,92755],{"class":59},[36,144322,188],{"class":98},[36,144324,144325],{"class":38,"line":52},[36,144326,144327],{"class":42},"  \u003C!-- 搜索栏 -->\n",[36,144329,144330,144332,144334,144336,144338,144341,144344,144346],{"class":38,"line":66},[36,144331,52576],{"class":98},[36,144333,52043],{"class":51733},[36,144335,53918],{"class":55},[36,144337,176],{"class":98},[36,144339,144340],{"class":59},"\"search-index\"",[36,144342,144343],{"class":98},">...\u003C\u002F",[36,144345,52043],{"class":51733},[36,144347,188],{"class":98},[36,144349,144350],{"class":38,"line":72},[36,144351,144352],{"class":42},"  \u003C!-- 焦点图 -->\n",[36,144354,144355,144357,144359,144361,144363,144366,144368,144370],{"class":38,"line":82},[36,144356,52576],{"class":98},[36,144358,52043],{"class":51733},[36,144360,53918],{"class":55},[36,144362,176],{"class":98},[36,144364,144365],{"class":59},"\"focus\"",[36,144367,144343],{"class":98},[36,144369,52043],{"class":51733},[36,144371,188],{"class":98},[36,144373,144374],{"class":38,"line":88},[36,144375,144376],{"class":42},"  \u003C!-- 主导航 -->\n",[36,144378,144379,144381,144383,144385,144387,144390,144392,144394],{"class":38,"line":113},[36,144380,52576],{"class":98},[36,144382,52043],{"class":51733},[36,144384,53918],{"class":55},[36,144386,176],{"class":98},[36,144388,144389],{"class":59},"\"local-nav\"",[36,144391,144343],{"class":98},[36,144393,52043],{"class":51733},[36,144395,188],{"class":98},[36,144397,144398],{"class":38,"line":119},[36,144399,144400],{"class":42},"  \u003C!-- 子导航 -->\n",[36,144402,144403,144405,144407,144409,144411,144414,144416,144418],{"class":38,"line":131},[36,144404,52576],{"class":98},[36,144406,52043],{"class":51733},[36,144408,53918],{"class":55},[36,144410,176],{"class":98},[36,144412,144413],{"class":59},"\"nav-common\"",[36,144415,144343],{"class":98},[36,144417,52043],{"class":51733},[36,144419,188],{"class":98},[36,144421,144422,144424,144426],{"class":38,"line":137},[36,144423,52217],{"class":98},[36,144425,52043],{"class":51733},[36,144427,188],{"class":98},[14,144429,70885],{},[26,144431,144432],{"className":126926,"code":137378,"language":126928,"meta":31,"style":31},[33,144433,144434,144448,144464],{"__ignoreMap":31},[36,144435,144436,144438,144440,144442,144444,144446],{"class":38,"line":39},[36,144437,54253],{"class":51733},[36,144439,1503],{"class":98},[36,144441,103538],{"class":55},[36,144443,176],{"class":163},[36,144445,63131],{"class":59},[36,144447,137395],{"class":98},[36,144449,144450,144452,144454,144456,144458,144460,144462],{"class":38,"line":46},[36,144451,71328],{"class":109},[36,144453,51869],{"class":98},[36,144455,833],{"class":109},[36,144457,51924],{"class":163},[36,144459,51953],{"class":109},[36,144461,130506],{"class":109},[36,144463,1772],{"class":98},[36,144465,144466],{"class":38,"line":52},[36,144467,2044],{"class":98},[14,144469,144470],{},"总代码和效果展示：",[1941,144472],{"style":126782,"src":144473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,144475,69321],{},[26,144477,144478],{"className":127673,"code":144301,"language":127675,"meta":31,"style":31},[33,144479,144480,144484,144498,144502,144520,144524,144542,144546,144564,144568,144586],{"__ignoreMap":31},[36,144481,144482],{"class":38,"line":39},[36,144483,144308],{"class":42},[36,144485,144486,144488,144490,144492,144494,144496],{"class":38,"line":46},[36,144487,179],{"class":98},[36,144489,52043],{"class":51733},[36,144491,53918],{"class":55},[36,144493,176],{"class":98},[36,144495,92755],{"class":59},[36,144497,188],{"class":98},[36,144499,144500],{"class":38,"line":52},[36,144501,144327],{"class":42},[36,144503,144504,144506,144508,144510,144512,144514,144516,144518],{"class":38,"line":66},[36,144505,52576],{"class":98},[36,144507,52043],{"class":51733},[36,144509,53918],{"class":55},[36,144511,176],{"class":98},[36,144513,144340],{"class":59},[36,144515,144343],{"class":98},[36,144517,52043],{"class":51733},[36,144519,188],{"class":98},[36,144521,144522],{"class":38,"line":72},[36,144523,144352],{"class":42},[36,144525,144526,144528,144530,144532,144534,144536,144538,144540],{"class":38,"line":82},[36,144527,52576],{"class":98},[36,144529,52043],{"class":51733},[36,144531,53918],{"class":55},[36,144533,176],{"class":98},[36,144535,144365],{"class":59},[36,144537,144343],{"class":98},[36,144539,52043],{"class":51733},[36,144541,188],{"class":98},[36,144543,144544],{"class":38,"line":88},[36,144545,144376],{"class":42},[36,144547,144548,144550,144552,144554,144556,144558,144560,144562],{"class":38,"line":113},[36,144549,52576],{"class":98},[36,144551,52043],{"class":51733},[36,144553,53918],{"class":55},[36,144555,176],{"class":98},[36,144557,144389],{"class":59},[36,144559,144343],{"class":98},[36,144561,52043],{"class":51733},[36,144563,188],{"class":98},[36,144565,144566],{"class":38,"line":119},[36,144567,144400],{"class":42},[36,144569,144570,144572,144574,144576,144578,144580,144582,144584],{"class":38,"line":131},[36,144571,52576],{"class":98},[36,144573,52043],{"class":51733},[36,144575,53918],{"class":55},[36,144577,176],{"class":98},[36,144579,144413],{"class":59},[36,144581,144343],{"class":98},[36,144583,52043],{"class":51733},[36,144585,188],{"class":98},[36,144587,144588,144590,144592],{"class":38,"line":137},[36,144589,52217],{"class":98},[36,144591,52043],{"class":51733},[36,144593,188],{"class":98},[14,144595,70885],{},[26,144597,144598],{"className":127673,"code":131030,"language":127675,"meta":31,"style":31},[33,144599,144600,144604,144618,144622],{"__ignoreMap":31},[36,144601,144602],{"class":38,"line":39},[36,144603,131037],{"class":42},[36,144605,144606,144608,144610,144612,144614,144616],{"class":38,"line":46},[36,144607,179],{"class":98},[36,144609,52043],{"class":51733},[36,144611,53918],{"class":55},[36,144613,176],{"class":98},[36,144615,131050],{"class":59},[36,144617,188],{"class":98},[36,144619,144620],{"class":38,"line":52},[36,144621,131057],{"class":98},[36,144623,144624,144626,144628],{"class":38,"line":66},[36,144625,52217],{"class":98},[36,144627,52043],{"class":51733},[36,144629,188],{"class":98},[537,144631,138327],{},{"title":31,"searchDepth":46,"depth":46,"links":144633},[144634,144635,144639,144640,144641],{"id":143778,"depth":46,"text":143779},{"id":143810,"depth":46,"text":143811,"children":144636},[144637,144638],{"id":143814,"depth":52,"text":143815},{"id":143831,"depth":52,"text":143832},{"id":143850,"depth":46,"text":143851},{"id":143857,"depth":46,"text":143858},{"id":143944,"depth":46,"text":143945,"children":144642},[144643,144644,144645,144646,144647],{"id":143951,"depth":52,"text":143952},{"id":144079,"depth":52,"text":144080},{"id":144173,"depth":52,"text":144174},{"id":144222,"depth":52,"text":144223},{"id":144232,"depth":52,"text":144233},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143770,"description":542},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144654,"title":144655,"body":144656,"description":542,"extension":543,"meta":145883,"navigation":246,"path":145884,"seo":145885,"stem":145886,"__hash__":145887},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144657,"toc":145861},[144658,144661,144665,144669,144672,144675,144679,144684,144687,144690,144693,144696,144699,144756,144759,144764,144767,144770,144774,144785,144789,144792,144795,144802,144807,144811,144814,144820,144823,144827,144830,144837,144840,144843,144850,144853,144860,144863,144866,144873,144876,144879,144881,144898,144902,144905,144908,144911,144915,144918,144921,144924,144927,144930,144933,144935,144938,144941,145003,145006,145116,145123,145129,145132,145135,145139,145142,145146,145151,145154,145161,145164,145170,145175,145178,145181,145184,145187,145190,145193,145196,145199,145255,145257,145283,145287,145290,145293,145296,145304,145307,145310,145314,145370,145373,145377,145383,145394,145397,145402,145405,145408,145414,145417,145420,145423,145426,145429,145432,145435,145438,145463,145469,145472,145475,145478,145481,145484,145487,145492,145495,145498,145501,145509,145512,145519,145522,145525,145527,145551,145553,145556,145559,145562,145565,145568,145571,145574,145608,145611,145614,145648,145655,145658,145661,145664,145667,145670,145673,145680,145683,145686,145689,145692,145699,145702,145705,145712,145715,145718,145722,145725,145728,145731,145734,145737,145740,145743,145746,145748,145772,145774,145798,145802,145813,145816,145819,145822,145825,145828,145831,145834,145837,145840,145843,145846,145849,145852,145855,145858],[10,144659,144655],{"id":144660},"_21-移动端布局实战下篇",[559,144662,144664],{"id":144663},"_211-rem适配布局","21.1 rem适配布局",[588,144666,144668],{"id":144667},"_2111-rem单位","21.1.1 rem单位",[1941,144670],{"style":126782,"src":144671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,144673,144674],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[588,144676,144678],{"id":144677},"_2112-媒体查询","21.1.2 媒体查询",[571,144680,144681],{},[574,144682,144683],{},"参数介绍",[1941,144685],{"style":126782,"src":144686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1941,144688],{"style":126782,"src":144689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1941,144691],{"style":126782,"src":144692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1941,144694],{"style":126782,"src":144695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1941,144697],{"style":126782,"src":144698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[26,144700,144702],{"className":126926,"code":144701,"language":126928,"meta":31,"style":31},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[33,144703,144704,144709,144728,144735,144748,144752],{"__ignoreMap":31},[36,144705,144706],{"class":38,"line":39},[36,144707,144708],{"class":42},"\u002F* 媒体查询 *\u002F\n",[36,144710,144711,144714,144716,144719,144721,144724,144726],{"class":38,"line":46},[36,144712,144713],{"class":163},"@media",[36,144715,2130],{"class":98},[36,144717,144718],{"class":109},"max-width",[36,144720,51869],{"class":98},[36,144722,144723],{"class":109},"768",[36,144725,51924],{"class":163},[36,144727,12881],{"class":98},[36,144729,144730,144733],{"class":38,"line":52},[36,144731,144732],{"class":55},"  .container",[36,144734,16011],{"class":98},[36,144736,144737,144740,144742,144744,144746],{"class":38,"line":66},[36,144738,144739],{"class":109},"    width",[36,144741,51869],{"class":98},[36,144743,926],{"class":109},[36,144745,942],{"class":163},[36,144747,1772],{"class":98},[36,144749,144750],{"class":38,"line":72},[36,144751,127722],{"class":98},[36,144753,144754],{"class":38,"line":82},[36,144755,2044],{"class":98},[14,144757,144758],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[571,144760,144761],{"start":46},[574,144762,144763],{},"引入资源",[1941,144765],{"style":126782,"src":144766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,144768,144769],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[588,144771,144773],{"id":144772},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1618,144775,144776,144779,144782],{},[574,144777,144778],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[574,144780,144781],{},"媒体查询可以根据不同设备宽度来修改样式",[574,144783,144784],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[559,144786,144788],{"id":144787},"_212-less基础","21.2 Less基础",[14,144790,144791],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,144793,144794],{},"Less可以解决该问题，它是css的扩展语言",[14,144796,144797,144798],{},"Less中文网址： ",[20,144799,144800],{"href":144800,"rel":144801},"http:\u002F\u002Flesscss.cn\u002F",[24],[14,144803,144804],{},[765,144805,144806],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[588,144808,144810],{"id":144809},"_2121-less安装","21.2.1 less安装",[14,144812,144813],{},"如果使用vscode，则无需进行下方安装步骤",[14,144815,144816],{},[20,144817,144818],{"href":144818,"rel":144819},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24],[1941,144821],{"style":126782,"src":144822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[588,144824,144826],{"id":144825},"_2122-less使用","21.2.2 less使用",[14,144828,144829],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[571,144831,144832],{},[574,144833,144834],{},[765,144835,144836],{},"Less 变量",[1941,144838],{"style":126782,"src":144839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1941,144841],{"style":126782,"src":144842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[571,144844,144845],{"start":46},[574,144846,144847],{},[765,144848,144849],{},"Less 编译",[1941,144851],{"style":126782,"src":144852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[571,144854,144855],{"start":52},[574,144856,144857],{},[765,144858,144859],{},"Less 嵌套",[1941,144861],{"style":126782,"src":144862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1941,144864],{"style":126782,"src":144865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[571,144867,144868],{"start":66},[574,144869,144870],{},[765,144871,144872],{},"Less 运算",[1941,144874],{"style":126782,"src":144875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,144877,144878],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,144880,650],{},[1618,144882,144883,144886,144889,144892,144895],{},[574,144884,144885],{},"乘号（*）和除号（\u002F）的写法",[574,144887,144888],{},"运算符中间左右有个空格隔开 1px + 5",[574,144890,144891],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[574,144893,144894],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[574,144896,144897],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[559,144899,144901],{"id":144900},"_213-rem-适配方案","21.3 rem 适配方案",[14,144903,144904],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,144906,144907],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1941,144909],{"style":126782,"src":144910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[588,144912,144914],{"id":144913},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,144916,144917],{},"rem + 媒体查询 + less 技术",[1941,144919],{"style":126782,"src":144920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,144922,144923],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,144925,144926],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1941,144928],{"style":126782,"src":144929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,144931,144932],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,144934,15072],{},[1941,144936],{"style":126782,"src":144937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,144939,144940],{},"index.html:",[26,144942,144944],{"className":126926,"code":144943,"language":126928,"meta":31,"style":31},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[33,144945,144946,144951,144957,144973,144977,144983,144999],{"__ignoreMap":31},[36,144947,144948],{"class":38,"line":39},[36,144949,144950],{"class":42},"\u002F* rem 适配方案 *\u002F\n",[36,144952,144953,144955],{"class":38,"line":46},[36,144954,51068],{"class":51733},[36,144956,16011],{"class":98},[36,144958,144959,144961,144963,144966,144968,144970],{"class":38,"line":52},[36,144960,71058],{"class":109},[36,144962,51869],{"class":98},[36,144964,144965],{"class":109},"62.5",[36,144967,942],{"class":163},[36,144969,130789],{"class":98},[36,144971,144972],{"class":42},"\u002F* 1rem = 10px *\u002F\n",[36,144974,144975],{"class":38,"line":66},[36,144976,2044],{"class":98},[36,144978,144979,144981],{"class":38,"line":72},[36,144980,130774],{"class":55},[36,144982,16011],{"class":98},[36,144984,144985,144987,144989,144991,144994,144996],{"class":38,"line":82},[36,144986,71000],{"class":109},[36,144988,51869],{"class":98},[36,144990,1060],{"class":109},[36,144992,144993],{"class":163},"rem",[36,144995,130789],{"class":98},[36,144997,144998],{"class":42},"\u002F* 100px *\u002F\n",[36,145000,145001],{"class":38,"line":88},[36,145002,2044],{"class":98},[14,145004,145005],{},"common.less",[26,145007,145009],{"className":126926,"code":145008,"language":126928,"meta":31,"style":31},"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",[33,145010,145011,145017,145032,145036,145042,145056,145060,145064,145068,145074,145088,145092,145098,145112],{"__ignoreMap":31},[36,145012,145013,145015],{"class":38,"line":39},[36,145014,51068],{"class":51733},[36,145016,16011],{"class":98},[36,145018,145019,145021,145023,145025,145027,145029],{"class":38,"line":46},[36,145020,71058],{"class":109},[36,145022,51869],{"class":98},[36,145024,144965],{"class":109},[36,145026,942],{"class":163},[36,145028,26504],{"class":98},[36,145030,145031],{"class":42},"\u002F* 10px *\u002F\n",[36,145033,145034],{"class":38,"line":52},[36,145035,2044],{"class":98},[36,145037,145038,145040],{"class":38,"line":66},[36,145039,52043],{"class":51733},[36,145041,16011],{"class":98},[36,145043,145044,145046,145048,145050,145052,145054],{"class":38,"line":72},[36,145045,71000],{"class":109},[36,145047,51869],{"class":98},[36,145049,1060],{"class":109},[36,145051,144993],{"class":163},[36,145053,26504],{"class":98},[36,145055,144998],{"class":42},[36,145057,145058],{"class":38,"line":82},[36,145059,2044],{"class":98},[36,145061,145062],{"class":38,"line":88},[36,145063,136387],{"class":98},[36,145065,145066],{"class":38,"line":113},[36,145067,144950],{"class":42},[36,145069,145070,145072],{"class":38,"line":119},[36,145071,51068],{"class":51733},[36,145073,16011],{"class":98},[36,145075,145076,145078,145080,145082,145084,145086],{"class":38,"line":131},[36,145077,71058],{"class":109},[36,145079,51869],{"class":98},[36,145081,144965],{"class":109},[36,145083,942],{"class":163},[36,145085,130789],{"class":98},[36,145087,144972],{"class":42},[36,145089,145090],{"class":38,"line":137},[36,145091,2044],{"class":98},[36,145093,145094,145096],{"class":38,"line":147},[36,145095,130774],{"class":55},[36,145097,16011],{"class":98},[36,145099,145100,145102,145104,145106,145108,145110],{"class":38,"line":153},[36,145101,71000],{"class":109},[36,145103,51869],{"class":98},[36,145105,1060],{"class":109},[36,145107,144993],{"class":163},[36,145109,130789],{"class":98},[36,145111,144998],{"class":42},[36,145113,145114],{"class":38,"line":191},[36,145115,2044],{"class":98},[14,145117,145118,145119,145122],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23992,145120,145121],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[26,145124,145127],{"className":145125,"code":145126,"language":5638},[5636],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[33,145128,145126],{"__ignoreMap":31},[14,145130,145131],{},"less保存时会自动变成.css文件",[14,145133,145134],{},"好好搞懂上述代码写法",[588,145136,145138],{"id":145137},"_2132-样式导入样式","21.3.2 样式导入样式",[1941,145140],{"style":126782,"src":145141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[588,145143,145145],{"id":145144},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[571,145147,145148],{},[574,145149,145150],{},"准备工作",[1941,145152],{"style":126782,"src":145153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,145155,145156,145157],{},"github地址：",[20,145158,145159],{"href":145159,"rel":145160},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24],[14,145162,145163],{},"下载之后，将index.js文件拖到项目中就可以了",[14,145165,145166,145167],{},"js文件引入到index.html中使用的是",[33,145168,145169],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[571,145171,145172],{"start":46},[574,145173,145174],{},"vscode插件",[1941,145176],{"style":126782,"src":145177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,145179,145180],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,145182,145183],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1941,145185],{"style":126782,"src":145186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,145188,145189],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1941,145191],{"style":126782,"src":145192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,145194,145195],{},"修改成75就可以，alt+z为快捷键",[14,145197,145198],{},"index.css：",[26,145200,145201],{"className":126926,"code":144943,"language":126928,"meta":31,"style":31},[33,145202,145203,145207,145213,145227,145231,145237,145251],{"__ignoreMap":31},[36,145204,145205],{"class":38,"line":39},[36,145206,144950],{"class":42},[36,145208,145209,145211],{"class":38,"line":46},[36,145210,51068],{"class":51733},[36,145212,16011],{"class":98},[36,145214,145215,145217,145219,145221,145223,145225],{"class":38,"line":52},[36,145216,71058],{"class":109},[36,145218,51869],{"class":98},[36,145220,144965],{"class":109},[36,145222,942],{"class":163},[36,145224,130789],{"class":98},[36,145226,144972],{"class":42},[36,145228,145229],{"class":38,"line":66},[36,145230,2044],{"class":98},[36,145232,145233,145235],{"class":38,"line":72},[36,145234,130774],{"class":55},[36,145236,16011],{"class":98},[36,145238,145239,145241,145243,145245,145247,145249],{"class":38,"line":82},[36,145240,71000],{"class":109},[36,145242,51869],{"class":98},[36,145244,1060],{"class":109},[36,145246,144993],{"class":163},[36,145248,130789],{"class":98},[36,145250,144998],{"class":42},[36,145252,145253],{"class":38,"line":88},[36,145254,2044],{"class":98},[14,145256,144940],{},[26,145258,145259],{"className":126926,"code":127330,"language":126928,"meta":31,"style":31},[33,145260,145261,145267,145279],{"__ignoreMap":31},[36,145262,145263,145265],{"class":38,"line":39},[36,145264,52232],{"class":51733},[36,145266,16011],{"class":98},[36,145268,145269,145271,145273,145275,145277],{"class":38,"line":46},[36,145270,71058],{"class":109},[36,145272,51869],{"class":98},[36,145274,1215],{"class":109},[36,145276,51924],{"class":163},[36,145278,1772],{"class":98},[36,145280,145281],{"class":38,"line":52},[36,145282,2044],{"class":98},[559,145284,145286],{"id":145285},"_214-响应式开发","21.4 响应式开发",[14,145288,145289],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1941,145291],{"style":126782,"src":145292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,145294,145295],{},"做法：",[1618,145297,145298,145301],{},[574,145299,145300],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[574,145302,145303],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1941,145305],{"style":126782,"src":145306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,145308,145309],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[588,145311,145313],{"id":145312},"_2141-简单代码示范","21.4.1 简单代码示范",[26,145315,145316],{"className":126926,"code":144943,"language":126928,"meta":31,"style":31},[33,145317,145318,145322,145328,145342,145346,145352,145366],{"__ignoreMap":31},[36,145319,145320],{"class":38,"line":39},[36,145321,144950],{"class":42},[36,145323,145324,145326],{"class":38,"line":46},[36,145325,51068],{"class":51733},[36,145327,16011],{"class":98},[36,145329,145330,145332,145334,145336,145338,145340],{"class":38,"line":52},[36,145331,71058],{"class":109},[36,145333,51869],{"class":98},[36,145335,144965],{"class":109},[36,145337,942],{"class":163},[36,145339,130789],{"class":98},[36,145341,144972],{"class":42},[36,145343,145344],{"class":38,"line":66},[36,145345,2044],{"class":98},[36,145347,145348,145350],{"class":38,"line":72},[36,145349,130774],{"class":55},[36,145351,16011],{"class":98},[36,145353,145354,145356,145358,145360,145362,145364],{"class":38,"line":82},[36,145355,71000],{"class":109},[36,145357,51869],{"class":98},[36,145359,1060],{"class":109},[36,145361,144993],{"class":163},[36,145363,130789],{"class":98},[36,145365,144998],{"class":42},[36,145367,145368],{"class":38,"line":88},[36,145369,2044],{"class":98},[14,145371,145372],{},"父盒子一般命名为container",[588,145374,145376],{"id":145375},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,145378,145379,145380],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[765,145381,145382],{},"使得 Web 开发更加快捷",[1618,145384,145385],{},[574,145386,145387,145388],{},"官网：",[765,145389,145390],{},[20,145391,145392],{"href":145392,"rel":145393},"http:\u002F\u002Fgetbootstrap.com\u002F",[24],[14,145395,145396],{},"可以直接去官网拿现成的东西",[571,145398,145399],{},[574,145400,145401],{},"Bootstrap的使用",[14,145403,145404],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,145406,145407],{},"Bootstrap 使用四步曲：",[14,145409,145410,145413],{},[765,145411,145412],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1941,145415],{"style":126782,"src":145416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,145418,145419],{},"打开Bootstrap官网，然后下载",[1941,145421],{"style":126782,"src":145422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1941,145424],{"style":126782,"src":145425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,145427,145428],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,145430,145431],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,145433,145434],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1941,145436],{"style":126782,"src":145437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[26,145439,145441],{"className":126926,"code":145440,"language":126928,"meta":31,"style":31},".center {\n  color: red;\n}\n",[33,145442,145443,145449,145459],{"__ignoreMap":31},[36,145444,145445,145447],{"class":38,"line":39},[36,145446,127217],{"class":55},[36,145448,16011],{"class":98},[36,145450,145451,145453,145455,145457],{"class":38,"line":46},[36,145452,71337],{"class":109},[36,145454,51869],{"class":98},[36,145456,57853],{"class":109},[36,145458,1772],{"class":98},[36,145460,145461],{"class":38,"line":52},[36,145462,2044],{"class":98},[14,145464,145465,145468],{},[33,145466,145467],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1941,145470],{"style":126782,"src":145471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1941,145473],{"style":126782,"src":145474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1941,145476],{"style":126782,"src":145477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,145479,145480],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1941,145482],{"style":126782,"src":145483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,145485,145486],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[571,145488,145489],{"start":46},[574,145490,145491],{},"布局容器",[1941,145493],{"style":126782,"src":145494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,145496,145497],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,145499,145500],{},"container-fluid用于移动式布局比较方便",[571,145502,145503],{"start":52},[574,145504,145505,145506],{},"bootstrap ",[765,145507,145508],{},"栅格系统原理",[1941,145510],{"style":126782,"src":145511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[571,145513,145514],{"start":66},[574,145515,145516],{},[765,145517,145518],{},"栅格选项参数",[1941,145520],{"style":126782,"src":145521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,145523,145524],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,145526,15072],{},[26,145528,145529],{"className":126926,"code":145440,"language":126928,"meta":31,"style":31},[33,145530,145531,145537,145547],{"__ignoreMap":31},[36,145532,145533,145535],{"class":38,"line":39},[36,145534,127217],{"class":55},[36,145536,16011],{"class":98},[36,145538,145539,145541,145543,145545],{"class":38,"line":46},[36,145540,71337],{"class":109},[36,145542,51869],{"class":98},[36,145544,57853],{"class":109},[36,145546,1772],{"class":98},[36,145548,145549],{"class":38,"line":52},[36,145550,2044],{"class":98},[14,145552,135969],{},[1941,145554],{"style":126782,"src":145555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,145557,145558],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,145560,145561],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,145563,145564],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,145566,145567],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,145569,145570],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,145572,145573],{},"汇总展示说明：",[26,145575,145576],{"className":127673,"code":131030,"language":127675,"meta":31,"style":31},[33,145577,145578,145582,145596,145600],{"__ignoreMap":31},[36,145579,145580],{"class":38,"line":39},[36,145581,131037],{"class":42},[36,145583,145584,145586,145588,145590,145592,145594],{"class":38,"line":46},[36,145585,179],{"class":98},[36,145587,52043],{"class":51733},[36,145589,53918],{"class":55},[36,145591,176],{"class":98},[36,145593,131050],{"class":59},[36,145595,188],{"class":98},[36,145597,145598],{"class":38,"line":52},[36,145599,131057],{"class":98},[36,145601,145602,145604,145606],{"class":38,"line":66},[36,145603,52217],{"class":98},[36,145605,52043],{"class":51733},[36,145607,188],{"class":98},[1941,145609],{"style":126782,"src":145610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,145612,145613],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[26,145615,145616],{"className":127673,"code":131030,"language":127675,"meta":31,"style":31},[33,145617,145618,145622,145636,145640],{"__ignoreMap":31},[36,145619,145620],{"class":38,"line":39},[36,145621,131037],{"class":42},[36,145623,145624,145626,145628,145630,145632,145634],{"class":38,"line":46},[36,145625,179],{"class":98},[36,145627,52043],{"class":51733},[36,145629,53918],{"class":55},[36,145631,176],{"class":98},[36,145633,131050],{"class":59},[36,145635,188],{"class":98},[36,145637,145638],{"class":38,"line":52},[36,145639,131057],{"class":98},[36,145641,145642,145644,145646],{"class":38,"line":66},[36,145643,52217],{"class":98},[36,145645,52043],{"class":51733},[36,145647,188],{"class":98},[571,145649,145650],{"start":72},[574,145651,145652],{},[765,145653,145654],{},"列嵌套",[1941,145656],{"style":126782,"src":145657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,145659,145660],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,145662,145663],{},"没加row内部这样：",[1941,145665],{"style":126782,"src":145666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,145668,145669],{},"加上row之后内部为：",[1941,145671],{"style":126782,"src":145672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[571,145674,145675],{"start":82},[574,145676,145677],{},[765,145678,145679],{},"列偏移",[1941,145681],{"style":126782,"src":145682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,145684,145685],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,145687,145688],{},"要加偏移量，即偏移份数",[14,145690,145691],{},"偏移的份数=12-两个盒子的份数",[571,145693,145694],{"start":88},[574,145695,145696],{},[765,145697,145698],{},"列排序",[1941,145700],{"style":126782,"src":145701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,145703,145704],{},"pull拉左；push推右",[571,145706,145707],{"start":113},[574,145708,145709],{},[765,145710,145711],{},"响应式工具",[1941,145713],{"style":126782,"src":145714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,145716,145717],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[588,145719,145721],{"id":145720},"_2143-响应式小项目","21.4.3 响应式小项目",[14,145723,145724],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,145726,145727],{},"ul {",[14,145729,145730],{},"list-style: none;",[14,145732,145733],{},"margin:0;",[14,145735,145736],{},"padding:0; }",[1941,145738],{"style":126782,"src":145739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1941,145741],{"style":126782,"src":145742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,145744,145745],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,145747,69321],{},[26,145749,145750],{"className":126926,"code":139596,"language":126928,"meta":31,"style":31},[33,145751,145752,145758,145768],{"__ignoreMap":31},[36,145753,145754,145756],{"class":38,"line":39},[36,145755,130774],{"class":55},[36,145757,16011],{"class":98},[36,145759,145760,145762,145764,145766],{"class":38,"line":46},[36,145761,131406],{"class":109},[36,145763,51869],{"class":98},[36,145765,24175],{"class":109},[36,145767,1772],{"class":98},[36,145769,145770],{"class":38,"line":52},[36,145771,2044],{"class":98},[14,145773,70885],{},[26,145775,145776],{"className":126926,"code":139596,"language":126928,"meta":31,"style":31},[33,145777,145778,145784,145794],{"__ignoreMap":31},[36,145779,145780,145782],{"class":38,"line":39},[36,145781,130774],{"class":55},[36,145783,16011],{"class":98},[36,145785,145786,145788,145790,145792],{"class":38,"line":46},[36,145787,131406],{"class":109},[36,145789,51869],{"class":98},[36,145791,24175],{"class":109},[36,145793,1772],{"class":98},[36,145795,145796],{"class":38,"line":52},[36,145797,2044],{"class":98},[559,145799,145801],{"id":145800},"_215-swiper-插件使用","21.5 swiper 插件使用",[1618,145803,145804,145807,145810],{},[574,145805,145806],{},"下载需要的css和js文件html页面中 引入相关文件",[574,145808,145809],{},"官网找到类似案例，复制html结构，css样式 js 语法",[574,145811,145812],{},"根据需求定制修改模块",[1941,145814],{"style":126782,"src":145815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,145817,145818],{},"解压后将这两部分放到项目中",[1941,145820],{"style":126782,"src":145821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,145823,145824],{},"这个插件可以帮助我们实现轮播图效果",[14,145826,145827],{},"用法：",[1941,145829],{"style":126782,"src":145830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,145832,145833],{},"找到自己喜欢的",[1941,145835],{"style":126782,"src":145836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,145838,145839],{},"右键，查看网页源代码",[1941,145841],{"style":126782,"src":145842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,145844,145845],{},"复制人家的结构内容",[14,145847,145848],{},"然后去看API文档：",[1941,145850],{"style":126782,"src":145851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,145853,145854],{},"可以看看如何修改样式",[14,145856,145857],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[537,145859,145860],{},"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":31,"searchDepth":46,"depth":46,"links":145862},[145863,145868,145872,145877,145882],{"id":144663,"depth":46,"text":144664,"children":145864},[145865,145866,145867],{"id":144667,"depth":52,"text":144668},{"id":144677,"depth":52,"text":144678},{"id":144772,"depth":52,"text":144773},{"id":144787,"depth":46,"text":144788,"children":145869},[145870,145871],{"id":144809,"depth":52,"text":144810},{"id":144825,"depth":52,"text":144826},{"id":144900,"depth":46,"text":144901,"children":145873},[145874,145875,145876],{"id":144913,"depth":52,"text":144914},{"id":145137,"depth":52,"text":145138},{"id":145144,"depth":52,"text":145145},{"id":145285,"depth":46,"text":145286,"children":145878},[145879,145880,145881],{"id":145312,"depth":52,"text":145313},{"id":145375,"depth":52,"text":145376},{"id":145720,"depth":52,"text":145721},{"id":145800,"depth":46,"text":145801},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144655,"description":542},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145889,"title":145890,"body":145891,"description":542,"extension":543,"meta":146111,"navigation":246,"path":146112,"seo":146113,"stem":146114,"__hash__":146115},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145892,"toc":146107},[145893,145896,145900,145903,145918,145923,145926,145931,145966,145971,145983,145988,146001,146006,146023,146028,146048,146053,146071,146074,146077,146080,146083,146087,146090,146093,146096,146099,146102,146105],[10,145894,145890],{"id":145895},"_22-代码提交与新型相对单位",[559,145897,145899],{"id":145898},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,145901,145902],{},"法1：",[571,145904,145905,145912,145915],{},[574,145906,145907,145908],{},"登录网站注册：",[20,145909,145910],{"href":145910,"rel":145911},"https:\u002F\u002Fgitee.com\u002F",[24],[574,145913,145914],{},"码云创建新的仓库",[574,145916,145917],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1618,145919,145920],{},[574,145921,145922],{},"在网站根目录右键-- Git Bash Here",[1941,145924],{"style":126782,"src":145925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1618,145927,145928],{},[574,145929,145930],{},"如果是第一次利用git提交，请配置好全局选项",[26,145932,145934],{"className":28,"code":145933,"language":30,"meta":31,"style":31},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[33,145935,145936,145952],{"__ignoreMap":31},[36,145937,145938,145941,145943,145946,145949],{"class":38,"line":39},[36,145939,145940],{"class":55},"git",[36,145942,120093],{"class":59},[36,145944,145945],{"class":109}," --global",[36,145947,145948],{"class":59}," user.name",[36,145950,145951],{"class":59}," \"你的名字\"\n",[36,145953,145954,145956,145958,145960,145963],{"class":38,"line":46},[36,145955,145940],{"class":55},[36,145957,120093],{"class":59},[36,145959,145945],{"class":109},[36,145961,145962],{"class":59}," user.email",[36,145964,145965],{"class":59}," \"你的邮箱\"\n",[1618,145967,145968],{},[574,145969,145970],{},"初始化仓库",[26,145972,145974],{"className":28,"code":145973,"language":30,"meta":31,"style":31},"git init\n",[33,145975,145976],{"__ignoreMap":31},[36,145977,145978,145980],{"class":38,"line":39},[36,145979,145940],{"class":55},[36,145981,145982],{"class":59}," init\n",[1618,145984,145985],{},[574,145986,145987],{},"把本地文件放到暂存区",[26,145989,145991],{"className":28,"code":145990,"language":30,"meta":31,"style":31},"git add .\n",[33,145992,145993],{"__ignoreMap":31},[36,145994,145995,145997,145999],{"class":38,"line":39},[36,145996,145940],{"class":55},[36,145998,5660],{"class":59},[36,146000,29175],{"class":59},[1618,146002,146003],{},[574,146004,146005],{},"把本地文件放到本地仓库里面",[26,146007,146009],{"className":28,"code":146008,"language":30,"meta":31,"style":31},"git commit -m \"first commit\"\n",[33,146010,146011],{"__ignoreMap":31},[36,146012,146013,146015,146018,146020],{"class":38,"line":39},[36,146014,145940],{"class":55},[36,146016,146017],{"class":59}," commit",[36,146019,101314],{"class":109},[36,146021,146022],{"class":59}," \"first commit\"\n",[1618,146024,146025],{},[574,146026,146027],{},"链接远程仓库",[26,146029,146031],{"className":28,"code":146030,"language":30,"meta":31,"style":31},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[33,146032,146033],{"__ignoreMap":31},[36,146034,146035,146037,146040,146042,146045],{"class":38,"line":39},[36,146036,145940],{"class":55},[36,146038,146039],{"class":59}," remote",[36,146041,5660],{"class":59},[36,146043,146044],{"class":59}," origin",[36,146046,146047],{"class":59}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1618,146049,146050],{},[574,146051,146052],{},"把本地仓库的文件推送到远程仓库 push",[26,146054,146056],{"className":28,"code":146055,"language":30,"meta":31,"style":31},"git push -u origin master\n",[33,146057,146058],{"__ignoreMap":31},[36,146059,146060,146062,146064,146066,146068],{"class":38,"line":39},[36,146061,145940],{"class":55},[36,146063,29449],{"class":59},[36,146065,28724],{"class":109},[36,146067,146044],{"class":59},[36,146069,146070],{"class":59}," master\n",[1941,146072],{"style":126782,"src":146073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,146075,146076],{},"上方方法暂未实现，后边学完git后在整",[14,146078,146079],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1941,146081],{"style":126782,"src":146082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[559,146084,146086],{"id":146085},"_222-新型相对单位","22.2 新型相对单位",[1941,146088],{"style":126782,"src":146089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1941,146091],{"style":126782,"src":146092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,146094,146095],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,146097,146098],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1941,146100],{"style":126782,"src":146101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,146103,146104],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[537,146106,24395],{},{"title":31,"searchDepth":46,"depth":46,"links":146108},[146109,146110],{"id":145898,"depth":46,"text":145899},{"id":146085,"depth":46,"text":146086},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145890,"description":542},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":146117,"title":146118,"body":146119,"description":146123,"extension":543,"meta":146124,"navigation":246,"path":146125,"seo":146126,"stem":146127,"__hash__":146128},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":146120,"toc":146121},[],{"title":31,"searchDepth":46,"depth":46,"links":146122},[],"自己正经开始学编程的第一门语言！",{"category":93271},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":146118,"description":146123},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":146130,"title":146131,"body":146132,"description":542,"extension":543,"meta":147279,"navigation":246,"path":147280,"seo":147281,"stem":147282,"__hash__":147283},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":146133,"toc":147255},[146134,146137,146141,146144,146147,146172,146175,146181,146185,146188,146215,146218,146258,146261,146273,146276,146282,146286,146290,146317,146334,146341,146345,146348,146374,146377,146381,146384,146424,146427,146444,146450,146454,146459,146503,146506,146524,146527,146595,146599,146606,146609,146624,146627,146636,146639,146650,146653,146662,146665,146682,146685,146700,146704,146708,146711,146713,146733,146737,146740,146743,146754,146757,146763,146767,146773,146800,146803,146815,146818,146829,146832,146838,146842,146848,146898,146901,146943,146946,146979,146982,147016,147020,147023,147043,147046,147082,147085,147098,147102,147106,147112,147115,147128,147132,147135,147141,147144,147148,147151,147154,147203,147207,147223,147229,147236,147242,147252],[10,146135,146131],{"id":146136},"_1-python环境与第一个程序",[559,146138,146140],{"id":146139},"_11-什么是python","1.1 什么是Python",[14,146142,146143],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,146145,146146],{},"理解 Python 时抓住三个关键词：",[571,146148,146149,146152,146155],{},[574,146150,146151],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[574,146153,146154],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[574,146156,146157,146158,828,146161,828,146164,828,146167,828,146169,28819],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[33,146159,146160],{},"os",[33,146162,146163],{},"sys",[33,146165,146166],{},"json",[33,146168,58292],{},[33,146170,146171],{},"datetime",[14,146173,146174],{},"Python 程序的运行链路：",[26,146176,146179],{"className":146177,"code":146178,"language":5638,"meta":31},[5636],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[33,146180,146178],{"__ignoreMap":31},[559,146182,146184],{"id":146183},"_12-python解释器","1.2 Python解释器",[14,146186,146187],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[26,146189,146191],{"className":24261,"code":146190,"language":24263,"meta":31,"style":31},"python --version\npython3 --version\npython\npython3\n",[33,146192,146193,146199,146205,146210],{"__ignoreMap":31},[36,146194,146195,146197],{"class":38,"line":39},[36,146196,30813],{"class":55},[36,146198,26727],{"class":109},[36,146200,146201,146203],{"class":38,"line":46},[36,146202,101311],{"class":55},[36,146204,26727],{"class":109},[36,146206,146207],{"class":38,"line":52},[36,146208,146209],{"class":55},"python\n",[36,146211,146212],{"class":38,"line":66},[36,146213,146214],{"class":55},"python3\n",[14,146216,146217],{},"进入交互模式后，可以直接输入表达式：",[26,146219,146221],{"className":30811,"code":146220,"language":30813,"meta":31,"style":31},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[33,146222,146223,146234,146239,146253],{"__ignoreMap":31},[36,146224,146225,146228,146230,146232],{"class":38,"line":39},[36,146226,146227],{"class":163},">>>",[36,146229,25555],{"class":109},[36,146231,45999],{"class":163},[36,146233,48156],{"class":109},[36,146235,146236],{"class":38,"line":46},[36,146237,146238],{"class":109},"3\n",[36,146240,146241,146243,146246,146248,146251],{"class":38,"line":52},[36,146242,146227],{"class":163},[36,146244,146245],{"class":109}," print",[36,146247,621],{"class":98},[36,146249,146250],{"class":59},"\"hello python\"",[36,146252,627],{"class":98},[36,146254,146255],{"class":38,"line":66},[36,146256,146257],{"class":98},"hello python\n",[14,146259,146260],{},"退出交互模式：",[26,146262,146264],{"className":30811,"code":146263,"language":30813,"meta":31,"style":31},"exit()\n",[33,146265,146266],{"__ignoreMap":31},[36,146267,146268,146271],{"class":38,"line":39},[36,146269,146270],{"class":109},"exit",[36,146272,2435],{"class":98},[14,146274,146275],{},"或使用快捷键：",[26,146277,146280],{"className":146278,"code":146279,"language":5638,"meta":31},[5636],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[33,146281,146279],{"__ignoreMap":31},[559,146283,146285],{"id":146284},"_13-安装python","1.3 安装Python",[588,146287,146289],{"id":146288},"_131-windows安装","1.3.1 Windows安装",[571,146291,146292,146299,146302,146308,146314],{},[574,146293,146294,146295],{},"打开 Python 官网：",[20,146296,146297],{"href":146297,"rel":146298},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24],[574,146300,146301],{},"下载 Windows Installer。",[574,146303,146304,146305,28819],{},"安装时勾选 ",[33,146306,146307],{},"Add Python to PATH",[574,146309,146310,146311,28819],{},"点击 ",[33,146312,146313],{},"Install Now",[574,146315,146316],{},"安装完成后打开命令提示符验证：",[26,146318,146320],{"className":24261,"code":146319,"language":24263,"meta":31,"style":31},"python --version\npip --version\n",[33,146321,146322,146328],{"__ignoreMap":31},[36,146323,146324,146326],{"class":38,"line":39},[36,146325,30813],{"class":55},[36,146327,26727],{"class":109},[36,146329,146330,146332],{"class":38,"line":46},[36,146331,24270],{"class":55},[36,146333,26727],{"class":109},[14,146335,146336,146337,146340],{},"如果提示 ",[33,146338,146339],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[588,146342,146344],{"id":146343},"_132-macos安装","1.3.2 macOS安装",[14,146346,146347],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[26,146349,146351],{"className":24261,"code":146350,"language":24263,"meta":31,"style":31},"brew install python\npython3 --version\npip3 --version\n",[33,146352,146353,146362,146368],{"__ignoreMap":31},[36,146354,146355,146358,146360],{"class":38,"line":39},[36,146356,146357],{"class":55},"brew",[36,146359,160],{"class":59},[36,146361,124692],{"class":59},[36,146363,146364,146366],{"class":38,"line":46},[36,146365,101311],{"class":55},[36,146367,26727],{"class":109},[36,146369,146370,146372],{"class":38,"line":52},[36,146371,120074],{"class":55},[36,146373,26727],{"class":109},[14,146375,146376],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[588,146378,146380],{"id":146379},"_133-linux安装","1.3.3 Linux安装",[14,146382,146383],{},"Ubuntu\u002FDebian：",[26,146385,146387],{"className":24261,"code":146386,"language":24263,"meta":31,"style":31},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[33,146388,146389,146397,146412,146418],{"__ignoreMap":31},[36,146390,146391,146393,146395],{"class":38,"line":39},[36,146392,56],{"class":55},[36,146394,60],{"class":59},[36,146396,63],{"class":59},[36,146398,146399,146401,146403,146405,146407,146409],{"class":38,"line":46},[36,146400,56],{"class":55},[36,146402,60],{"class":59},[36,146404,160],{"class":59},[36,146406,104834],{"class":59},[36,146408,101230],{"class":59},[36,146410,146411],{"class":59}," python3-venv\n",[36,146413,146414,146416],{"class":38,"line":52},[36,146415,101311],{"class":55},[36,146417,26727],{"class":109},[36,146419,146420,146422],{"class":38,"line":66},[36,146421,120074],{"class":55},[36,146423,26727],{"class":109},[14,146425,146426],{},"Fedora：",[26,146428,146430],{"className":24261,"code":146429,"language":24263,"meta":31,"style":31},"sudo dnf install python3 python3-pip\n",[33,146431,146432],{"__ignoreMap":31},[36,146433,146434,146436,146438,146440,146442],{"class":38,"line":39},[36,146435,56],{"class":55},[36,146437,26749],{"class":59},[36,146439,160],{"class":59},[36,146441,104834],{"class":59},[36,146443,120139],{"class":59},[14,146445,146446,146447,146449],{},"Linux 上通常使用 ",[33,146448,101311],{}," 命令，避免和系统旧版本 Python 冲突。",[559,146451,146453],{"id":146452},"_14-pip包管理器","1.4 pip包管理器",[14,146455,146456,146458],{},[33,146457,24270],{}," 用来安装第三方库。",[26,146460,146462],{"className":24261,"code":146461,"language":24263,"meta":31,"style":31},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[33,146463,146464,146473,146482,146490,146496],{"__ignoreMap":31},[36,146465,146466,146468,146470],{"class":38,"line":39},[36,146467,24270],{"class":55},[36,146469,160],{"class":59},[36,146471,146472],{"class":59}," requests\n",[36,146474,146475,146477,146480],{"class":38,"line":46},[36,146476,24270],{"class":55},[36,146478,146479],{"class":59}," uninstall",[36,146481,146472],{"class":59},[36,146483,146484,146486,146488],{"class":38,"line":52},[36,146485,24270],{"class":55},[36,146487,359],{"class":59},[36,146489,146472],{"class":59},[36,146491,146492,146494],{"class":38,"line":66},[36,146493,24270],{"class":55},[36,146495,119329],{"class":59},[36,146497,146498,146500],{"class":38,"line":72},[36,146499,24270],{"class":55},[36,146501,146502],{"class":59}," freeze\n",[14,146504,146505],{},"国内网络较慢时可以临时使用镜像：",[26,146507,146509],{"className":24261,"code":146508,"language":24263,"meta":31,"style":31},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[33,146510,146511],{"__ignoreMap":31},[36,146512,146513,146515,146517,146520,146522],{"class":38,"line":39},[36,146514,24270],{"class":55},[36,146516,160],{"class":59},[36,146518,146519],{"class":59}," requests",[36,146521,26864],{"class":109},[36,146523,120102],{"class":59},[14,146525,146526],{},"常见第三方库：",[753,146528,146529,146538],{},[756,146530,146531],{},[759,146532,146533,146536],{},[762,146534,146535],{},"库",[762,146537,103127],{},[800,146539,146540,146548,146555,146563,146571,146579,146587],{},[759,146541,146542,146545],{},[805,146543,146544],{},"requests",[805,146546,146547],{},"网络请求",[759,146549,146550,146552],{},[805,146551,101058],{},[805,146553,146554],{},"数值计算",[759,146556,146557,146560],{},[805,146558,146559],{},"pandas",[805,146561,146562],{},"表格数据处理",[759,146564,146565,146568],{},[805,146566,146567],{},"matplotlib",[805,146569,146570],{},"绘图",[759,146572,146573,146576],{},[805,146574,146575],{},"pyecharts",[805,146577,146578],{},"ECharts 图表",[759,146580,146581,146584],{},[805,146582,146583],{},"flask",[805,146585,146586],{},"Web 后端",[759,146588,146589,146592],{},[805,146590,146591],{},"pytest",[805,146593,146594],{},"自动化测试",[559,146596,146598],{"id":146597},"_15-虚拟环境","1.5 虚拟环境",[14,146600,146601,146602,146605],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[33,146603,146604],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,146607,146608],{},"创建虚拟环境：",[26,146610,146612],{"className":24261,"code":146611,"language":24263,"meta":31,"style":31},"python -m venv .venv\n",[33,146613,146614],{"__ignoreMap":31},[36,146615,146616,146618,146620,146622],{"class":38,"line":39},[36,146617,30813],{"class":55},[36,146619,101314],{"class":109},[36,146621,101317],{"class":59},[36,146623,101320],{"class":59},[14,146625,146626],{},"Windows 激活：",[26,146628,146630],{"className":24261,"code":146629,"language":24263,"meta":31,"style":31},".venv\\Scripts\\activate\n",[33,146631,146632],{"__ignoreMap":31},[36,146633,146634],{"class":38,"line":39},[36,146635,146629],{"class":55},[14,146637,146638],{},"macOS\u002FLinux 激活：",[26,146640,146642],{"className":24261,"code":146641,"language":24263,"meta":31,"style":31},"source .venv\u002Fbin\u002Factivate\n",[33,146643,146644],{"__ignoreMap":31},[36,146645,146646,146648],{"class":38,"line":39},[36,146647,101325],{"class":109},[36,146649,101328],{"class":59},[14,146651,146652],{},"退出虚拟环境：",[26,146654,146656],{"className":24261,"code":146655,"language":24263,"meta":31,"style":31},"deactivate\n",[33,146657,146658],{"__ignoreMap":31},[36,146659,146660],{"class":38,"line":39},[36,146661,146655],{"class":55},[14,146663,146664],{},"保存依赖：",[26,146666,146668],{"className":24261,"code":146667,"language":24263,"meta":31,"style":31},"pip freeze > requirements.txt\n",[33,146669,146670],{"__ignoreMap":31},[36,146671,146672,146674,146677,146679],{"class":38,"line":39},[36,146673,24270],{"class":55},[36,146675,146676],{"class":59}," freeze",[36,146678,26657],{"class":163},[36,146680,146681],{"class":59}," requirements.txt\n",[14,146683,146684],{},"安装依赖：",[26,146686,146688],{"className":24261,"code":146687,"language":24263,"meta":31,"style":31},"pip install -r requirements.txt\n",[33,146689,146690],{"__ignoreMap":31},[36,146691,146692,146694,146696,146698],{"class":38,"line":39},[36,146693,24270],{"class":55},[36,146695,160],{"class":59},[36,146697,120013],{"class":109},[36,146699,146681],{"class":59},[559,146701,146703],{"id":146702},"_16-开发工具","1.6 开发工具",[588,146705,146707],{"id":146706},"_161-pycharm","1.6.1 PyCharm",[14,146709,146710],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,146712,122436],{},[571,146714,146715,146718,146721,146727,146730],{},[574,146716,146717],{},"New Project：创建项目。",[574,146719,146720],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[574,146722,146723,146724,126357],{},"New Python File：创建 ",[33,146725,146726],{},".py",[574,146728,146729],{},"Run：运行当前文件。",[574,146731,146732],{},"Debug：断点调试。",[588,146734,146736],{"id":146735},"_162-vs-code","1.6.2 VS Code",[14,146738,146739],{},"VS Code 轻量，适合后续多语言开发。",[14,146741,146742],{},"建议安装插件：",[571,146744,146745,146748,146751],{},[574,146746,146747],{},"Python。",[574,146749,146750],{},"Pylance。",[574,146752,146753],{},"Jupyter。",[14,146755,146756],{},"选择解释器：",[26,146758,146761],{"className":146759,"code":146760,"language":5638,"meta":31},[5636],"Ctrl + Shift + P -> Python: Select Interpreter\n",[33,146762,146760],{"__ignoreMap":31},[559,146764,146766],{"id":146765},"_17-第一个python程序","1.7 第一个Python程序",[14,146768,146769,146770,25055],{},"创建文件 ",[33,146771,146772],{},"hello.py",[26,146774,146776],{"className":30811,"code":146775,"language":30813,"meta":31,"style":31},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[33,146777,146778,146789],{"__ignoreMap":31},[36,146779,146780,146782,146784,146787],{"class":38,"line":39},[36,146781,30848],{"class":109},[36,146783,621],{"class":98},[36,146785,146786],{"class":59},"\"Hello World\"",[36,146788,627],{"class":98},[36,146790,146791,146793,146795,146798],{"class":38,"line":46},[36,146792,30848],{"class":109},[36,146794,621],{"class":98},[36,146796,146797],{"class":59},"\"你好，Python\"",[36,146799,627],{"class":98},[14,146801,146802],{},"在终端运行：",[26,146804,146806],{"className":24261,"code":146805,"language":24263,"meta":31,"style":31},"python hello.py\n",[33,146807,146808],{"__ignoreMap":31},[36,146809,146810,146812],{"class":38,"line":39},[36,146811,30813],{"class":55},[36,146813,146814],{"class":59}," hello.py\n",[14,146816,146817],{},"或：",[26,146819,146821],{"className":24261,"code":146820,"language":24263,"meta":31,"style":31},"python3 hello.py\n",[33,146822,146823],{"__ignoreMap":31},[36,146824,146825,146827],{"class":38,"line":39},[36,146826,101311],{"class":55},[36,146828,146814],{"class":59},[14,146830,146831],{},"输出：",[26,146833,146836],{"className":146834,"code":146835,"language":5638,"meta":31},[5636],"Hello World\n你好，Python\n",[33,146837,146835],{"__ignoreMap":31},[559,146839,146841],{"id":146840},"_18-print函数","1.8 print函数",[14,146843,146844,146847],{},[33,146845,146846],{},"print()"," 用来输出内容。",[26,146849,146851],{"className":30811,"code":146850,"language":30813,"meta":31,"style":31},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[33,146852,146853,146863,146873,146883],{"__ignoreMap":31},[36,146854,146855,146857,146859,146861],{"class":38,"line":39},[36,146856,30848],{"class":109},[36,146858,621],{"class":98},[36,146860,6295],{"class":59},[36,146862,627],{"class":98},[36,146864,146865,146867,146869,146871],{"class":38,"line":46},[36,146866,30848],{"class":109},[36,146868,621],{"class":98},[36,146870,926],{"class":109},[36,146872,627],{"class":98},[36,146874,146875,146877,146879,146881],{"class":38,"line":52},[36,146876,30848],{"class":109},[36,146878,621],{"class":98},[36,146880,668],{"class":109},[36,146882,627],{"class":98},[36,146884,146885,146887,146889,146892,146894,146896],{"class":38,"line":66},[36,146886,30848],{"class":109},[36,146888,621],{"class":98},[36,146890,146891],{"class":59},"\"年龄:\"",[36,146893,12874],{"class":98},[36,146895,1264],{"class":109},[36,146897,627],{"class":98},[14,146899,146900],{},"多个内容用逗号隔开，默认中间加空格：",[26,146902,146904],{"className":30811,"code":146903,"language":30813,"meta":31,"style":31},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[33,146905,146906,146916,146926],{"__ignoreMap":31},[36,146907,146908,146911,146913],{"class":38,"line":39},[36,146909,146910],{"class":98},"name ",[36,146912,176],{"class":163},[36,146914,146915],{"class":59}," \"张三\"\n",[36,146917,146918,146921,146923],{"class":38,"line":46},[36,146919,146920],{"class":98},"age ",[36,146922,176],{"class":163},[36,146924,146925],{"class":109}," 18\n",[36,146927,146928,146930,146932,146935,146938,146940],{"class":38,"line":52},[36,146929,30848],{"class":109},[36,146931,621],{"class":98},[36,146933,146934],{"class":59},"\"姓名:\"",[36,146936,146937],{"class":98},", name, ",[36,146939,146891],{"class":59},[36,146941,146942],{"class":98},", age)\n",[14,146944,146945],{},"修改分隔符：",[26,146947,146949],{"className":30811,"code":146948,"language":30813,"meta":31,"style":31},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[33,146950,146951],{"__ignoreMap":31},[36,146952,146953,146955,146957,146960,146962,146964,146966,146968,146970,146973,146975,146977],{"class":38,"line":39},[36,146954,30848],{"class":109},[36,146956,621],{"class":98},[36,146958,146959],{"class":59},"\"2024\"",[36,146961,12874],{"class":98},[36,146963,54748],{"class":59},[36,146965,12874],{"class":98},[36,146967,54748],{"class":59},[36,146969,12874],{"class":98},[36,146971,146972],{"class":5667},"sep",[36,146974,176],{"class":163},[36,146976,32916],{"class":59},[36,146978,627],{"class":98},[14,146980,146981],{},"修改结尾符：",[26,146983,146985],{"className":30811,"code":146984,"language":30813,"meta":31,"style":31},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[33,146986,146987,147005],{"__ignoreMap":31},[36,146988,146989,146991,146993,146995,146997,146999,147001,147003],{"class":38,"line":39},[36,146990,30848],{"class":109},[36,146992,621],{"class":98},[36,146994,6295],{"class":59},[36,146996,12874],{"class":98},[36,146998,46234],{"class":5667},[36,147000,176],{"class":163},[36,147002,4810],{"class":59},[36,147004,627],{"class":98},[36,147006,147007,147009,147011,147014],{"class":38,"line":46},[36,147008,30848],{"class":109},[36,147010,621],{"class":98},[36,147012,147013],{"class":59},"\"python\"",[36,147015,627],{"class":98},[559,147017,147019],{"id":147018},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,147021,147022],{},"交互运行适合临时验证：",[26,147024,147026],{"className":30811,"code":147025,"language":30813,"meta":31,"style":31},">>> 10 * 3\n30\n",[33,147027,147028,147038],{"__ignoreMap":31},[36,147029,147030,147032,147034,147036],{"class":38,"line":39},[36,147031,146227],{"class":163},[36,147033,2497],{"class":109},[36,147035,6969],{"class":163},[36,147037,120410],{"class":109},[36,147039,147040],{"class":38,"line":46},[36,147041,147042],{"class":109},"30\n",[14,147044,147045],{},"脚本运行适合保存程序：",[26,147047,147049],{"className":30811,"code":147048,"language":30813,"meta":31,"style":31},"price = 8\ncount = 5\nprint(price * count)\n",[33,147050,147051,147061,147070],{"__ignoreMap":31},[36,147052,147053,147056,147058],{"class":38,"line":39},[36,147054,147055],{"class":98},"price ",[36,147057,176],{"class":163},[36,147059,147060],{"class":109}," 8\n",[36,147062,147063,147066,147068],{"class":38,"line":46},[36,147064,147065],{"class":98},"count ",[36,147067,176],{"class":163},[36,147069,54859],{"class":109},[36,147071,147072,147074,147077,147079],{"class":38,"line":52},[36,147073,30848],{"class":109},[36,147075,147076],{"class":98},"(price ",[36,147078,1069],{"class":163},[36,147080,147081],{"class":98}," count)\n",[14,147083,147084],{},"实际学习中推荐：",[571,147086,147087,147090,147095],{},[574,147088,147089],{},"临时试一个语法，用交互模式。",[574,147091,147092,147093,126357],{},"写完整练习，用 ",[33,147094,146726],{},[574,147096,147097],{},"写项目，用独立目录和虚拟环境。",[559,147099,147101],{"id":147100},"_110-常见错误","1.10 常见错误",[588,147103,147105],{"id":147104},"_1101-命令找不到","1.10.1 命令找不到",[26,147107,147110],{"className":147108,"code":147109,"language":5638,"meta":31},[5636],"python: command not found\n",[33,147111,147109],{"__ignoreMap":31},[14,147113,147114],{},"原因：",[571,147116,147117,147120,147123],{},[574,147118,147119],{},"没安装 Python。",[574,147121,147122],{},"PATH 没配置。",[574,147124,147125,147126,28819],{},"Linux\u002FmacOS 应该使用 ",[33,147127,101311],{},[588,147129,147131],{"id":147130},"_1102-文件名冲突","1.10.2 文件名冲突",[14,147133,147134],{},"不要把文件命名为：",[26,147136,147139],{"className":147137,"code":147138,"language":5638,"meta":31},[5636],"random.py\njson.py\ntime.py\nrequests.py\n",[33,147140,147138],{"__ignoreMap":31},[14,147142,147143],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[588,147145,147147],{"id":147146},"_1103-中文乱码","1.10.3 中文乱码",[14,147149,147150],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,147152,147153],{},"如果读写文件出现乱码，要明确指定编码：",[26,147155,147157],{"className":30811,"code":147156,"language":30813,"meta":31,"style":31},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[33,147158,147159,147193],{"__ignoreMap":31},[36,147160,147161,147163,147166,147168,147171,147173,147176,147178,147181,147183,147186,147188,147190],{"class":38,"line":39},[36,147162,108264],{"class":163},[36,147164,147165],{"class":109}," open",[36,147167,621],{"class":98},[36,147169,147170],{"class":59},"\"data.txt\"",[36,147172,12874],{"class":98},[36,147174,147175],{"class":59},"\"r\"",[36,147177,12874],{"class":98},[36,147179,147180],{"class":5667},"encoding",[36,147182,176],{"class":163},[36,147184,147185],{"class":59},"\"utf-8\"",[36,147187,14153],{"class":98},[36,147189,31816],{"class":163},[36,147191,147192],{"class":98}," f:\n",[36,147194,147195,147198,147200],{"class":38,"line":46},[36,147196,147197],{"class":98},"    content ",[36,147199,176],{"class":163},[36,147201,147202],{"class":98}," f.read()\n",[559,147204,147206],{"id":147205},"_111-本章练习","1.11 本章练习",[571,147208,147209,147212,147218],{},[574,147210,147211],{},"安装 Python，并在终端输出版本号。",[574,147213,147214,147215,147217],{},"新建 ",[33,147216,146772],{},"，输出自己的姓名、年龄、学习目标。",[574,147219,104797,147220,147222],{},[33,147221,146846],{}," 输出下面格式：",[26,147224,147227],{"className":147225,"code":147226,"language":5638,"meta":31},[5636],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[33,147228,147226],{"__ignoreMap":31},[571,147230,147231],{"start":66},[574,147232,104797,147233,147235],{},[33,147234,146972],{}," 输出日期：",[26,147237,147240],{"className":147238,"code":147239,"language":5638,"meta":31},[5636],"2024-10-10\n",[33,147241,147239],{"__ignoreMap":31},[571,147243,147244],{"start":72},[574,147245,104797,147246,147248,147249,147251],{},[33,147247,46234],{}," 让两次 ",[33,147250,146846],{}," 输出在同一行。",[537,147253,147254],{},"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":31,"searchDepth":46,"depth":46,"links":147256},[147257,147258,147259,147264,147265,147266,147270,147271,147272,147273,147278],{"id":146139,"depth":46,"text":146140},{"id":146183,"depth":46,"text":146184},{"id":146284,"depth":46,"text":146285,"children":147260},[147261,147262,147263],{"id":146288,"depth":52,"text":146289},{"id":146343,"depth":52,"text":146344},{"id":146379,"depth":52,"text":146380},{"id":146452,"depth":46,"text":146453},{"id":146597,"depth":46,"text":146598},{"id":146702,"depth":46,"text":146703,"children":147267},[147268,147269],{"id":146706,"depth":52,"text":146707},{"id":146735,"depth":52,"text":146736},{"id":146765,"depth":46,"text":146766},{"id":146840,"depth":46,"text":146841},{"id":147018,"depth":46,"text":147019},{"id":147100,"depth":46,"text":147101,"children":147274},[147275,147276,147277],{"id":147104,"depth":52,"text":147105},{"id":147130,"depth":52,"text":147131},{"id":147146,"depth":52,"text":147147},{"id":147205,"depth":46,"text":147206},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":146131,"description":542},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147285,"title":147286,"body":147287,"description":542,"extension":543,"meta":149691,"navigation":246,"path":149692,"seo":149693,"stem":149694,"__hash__":149695},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147288,"toc":149676},[147289,147292,147296,147299,147302,147319,147322,147364,147367,147371,147374,147377,147414,147417,147451,147454,147546,147550,147564,147567,147594,147597,147601,147704,147711,147714,147731,147735,147742,147931,147934,148007,148011,148014,148098,148101,148133,148137,148341,148344,148348,148354,148456,148459,148715,148719,148722,148725,148739,148741,148927,148931,149293,149299,149303,149306,149430,149433,149612,149615,149619,149652,149656,149673],[10,147290,147286],{"id":147291},"_10-json与pyecharts折线图",[559,147293,147295],{"id":147294},"_101-数据可视化","10.1 数据可视化",[14,147297,147298],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,147300,147301],{},"常见图表：",[571,147303,147304,147307,147310,147313,147316],{},[574,147305,147306],{},"折线图：看趋势。",[574,147308,147309],{},"柱状图：看分类对比。",[574,147311,147312],{},"饼图：看占比。",[574,147314,147315],{},"地图：看地域分布。",[574,147317,147318],{},"散点图：看两个变量之间的关系。",[14,147320,147321],{},"Python 可视化常用库：",[753,147323,147324,147332],{},[756,147325,147326],{},[759,147327,147328,147330],{},[762,147329,146535],{},[762,147331,24179],{},[800,147333,147334,147341,147349,147356],{},[759,147335,147336,147338],{},[805,147337,146567],{},[805,147339,147340],{},"基础、经典、可定制",[759,147342,147343,147346],{},[805,147344,147345],{},"seaborn",[805,147347,147348],{},"统计图表更美观",[759,147350,147351,147353],{},[805,147352,146575],{},[805,147354,147355],{},"生成交互式网页图表",[759,147357,147358,147361],{},[805,147359,147360],{},"plotly",[805,147362,147363],{},"交互图表能力强",[14,147365,147366],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[559,147368,147370],{"id":147369},"_102-json回顾","10.2 JSON回顾",[14,147372,147373],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,147375,147376],{},"Python 字典：",[26,147378,147380],{"className":30811,"code":147379,"language":30813,"meta":31,"style":31},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[33,147381,147382,147390,147401,147410],{"__ignoreMap":31},[36,147383,147384,147386,147388],{"class":38,"line":39},[36,147385,102089],{"class":98},[36,147387,176],{"class":163},[36,147389,16011],{"class":98},[36,147391,147392,147395,147397,147399],{"class":38,"line":46},[36,147393,147394],{"class":59},"    \"name\"",[36,147396,51869],{"class":98},[36,147398,69701],{"class":59},[36,147400,31899],{"class":98},[36,147402,147403,147406,147408],{"class":38,"line":52},[36,147404,147405],{"class":59},"    \"value\"",[36,147407,51869],{"class":98},[36,147409,97890],{"class":109},[36,147411,147412],{"class":38,"line":66},[36,147413,2044],{"class":98},[14,147415,147416],{},"JSON 字符串：",[26,147418,147421],{"className":147419,"code":147420,"language":146166,"meta":31,"style":31},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[33,147422,147423,147427,147438,147447],{"__ignoreMap":31},[36,147424,147425],{"class":38,"line":39},[36,147426,2025],{"class":98},[36,147428,147429,147432,147434,147436],{"class":38,"line":46},[36,147430,147431],{"class":109},"  \"name\"",[36,147433,51869],{"class":98},[36,147435,69701],{"class":59},[36,147437,31899],{"class":98},[36,147439,147440,147443,147445],{"class":38,"line":52},[36,147441,147442],{"class":109},"  \"value\"",[36,147444,51869],{"class":98},[36,147446,97890],{"class":109},[36,147448,147449],{"class":38,"line":66},[36,147450,2044],{"class":98},[14,147452,147453],{},"Python 与 JSON 的转换：",[26,147455,147457],{"className":30811,"code":147456,"language":30813,"meta":31,"style":31},"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",[33,147458,147459,147466,147470,147495,147499,147518,147525,147529,147539],{"__ignoreMap":31},[36,147460,147461,147463],{"class":38,"line":39},[36,147462,30825],{"class":163},[36,147464,147465],{"class":98}," json\n",[36,147467,147468],{"class":38,"line":46},[36,147469,247],{"emptyLinePlaceholder":246},[36,147471,147472,147474,147476,147478,147480,147482,147484,147486,147489,147491,147493],{"class":38,"line":52},[36,147473,102089],{"class":98},[36,147475,176],{"class":163},[36,147477,4899],{"class":98},[36,147479,63111],{"class":59},[36,147481,51869],{"class":98},[36,147483,69701],{"class":59},[36,147485,12874],{"class":98},[36,147487,147488],{"class":59},"\"value\"",[36,147490,51869],{"class":98},[36,147492,926],{"class":109},[36,147494,2044],{"class":98},[36,147496,147497],{"class":38,"line":66},[36,147498,247],{"emptyLinePlaceholder":246},[36,147500,147501,147504,147506,147509,147512,147514,147516],{"class":38,"line":72},[36,147502,147503],{"class":98},"json_text ",[36,147505,176],{"class":163},[36,147507,147508],{"class":98}," json.dumps(data, ",[36,147510,147511],{"class":5667},"ensure_ascii",[36,147513,176],{"class":163},[36,147515,34420],{"class":109},[36,147517,627],{"class":98},[36,147519,147520,147522],{"class":38,"line":82},[36,147521,30848],{"class":109},[36,147523,147524],{"class":98},"(json_text)\n",[36,147526,147527],{"class":38,"line":88},[36,147528,247],{"emptyLinePlaceholder":246},[36,147530,147531,147534,147536],{"class":38,"line":113},[36,147532,147533],{"class":98},"new_data ",[36,147535,176],{"class":163},[36,147537,147538],{"class":98}," json.loads(json_text)\n",[36,147540,147541,147543],{"class":38,"line":119},[36,147542,30848],{"class":109},[36,147544,147545],{"class":98},"(new_data)\n",[559,147547,147549],{"id":147548},"_103-安装pyecharts","10.3 安装pyecharts",[26,147551,147553],{"className":24261,"code":147552,"language":24263,"meta":31,"style":31},"pip install pyecharts\n",[33,147554,147555],{"__ignoreMap":31},[36,147556,147557,147559,147561],{"class":38,"line":39},[36,147558,24270],{"class":55},[36,147560,160],{"class":59},[36,147562,147563],{"class":59}," pyecharts\n",[14,147565,147566],{},"验证：",[26,147568,147570],{"className":30811,"code":147569,"language":30813,"meta":31,"style":31},"import pyecharts\n\nprint(pyecharts.__version__)\n",[33,147571,147572,147578,147582],{"__ignoreMap":31},[36,147573,147574,147576],{"class":38,"line":39},[36,147575,30825],{"class":163},[36,147577,147563],{"class":98},[36,147579,147580],{"class":38,"line":46},[36,147581,247],{"emptyLinePlaceholder":246},[36,147583,147584,147586,147589,147592],{"class":38,"line":52},[36,147585,30848],{"class":109},[36,147587,147588],{"class":98},"(pyecharts.",[36,147590,147591],{"class":109},"__version__",[36,147593,627],{"class":98},[14,147595,147596],{},"如果使用虚拟环境，要先激活环境再安装。",[559,147598,147600],{"id":147599},"_104-第一个折线图","10.4 第一个折线图",[26,147602,147604],{"className":30811,"code":147603,"language":30813,"meta":31,"style":31},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[33,147605,147606,147618,147622,147632,147662,147694],{"__ignoreMap":31},[36,147607,147608,147610,147613,147615],{"class":38,"line":39},[36,147609,31170],{"class":163},[36,147611,147612],{"class":98}," pyecharts.charts ",[36,147614,30825],{"class":163},[36,147616,147617],{"class":98}," Line\n",[36,147619,147620],{"class":38,"line":46},[36,147621,247],{"emptyLinePlaceholder":246},[36,147623,147624,147627,147629],{"class":38,"line":52},[36,147625,147626],{"class":98},"line ",[36,147628,176],{"class":163},[36,147630,147631],{"class":98}," Line()\n",[36,147633,147634,147637,147640,147642,147645,147647,147650,147652,147655,147657,147660],{"class":38,"line":66},[36,147635,147636],{"class":98},"line.add_xaxis([",[36,147638,147639],{"class":59},"\"周一\"",[36,147641,12874],{"class":98},[36,147643,147644],{"class":59},"\"周二\"",[36,147646,12874],{"class":98},[36,147648,147649],{"class":59},"\"周三\"",[36,147651,12874],{"class":98},[36,147653,147654],{"class":59},"\"周四\"",[36,147656,12874],{"class":98},[36,147658,147659],{"class":59},"\"周五\"",[36,147661,5108],{"class":98},[36,147663,147664,147667,147670,147672,147674,147676,147678,147680,147682,147684,147687,147689,147692],{"class":38,"line":72},[36,147665,147666],{"class":98},"line.add_yaxis(",[36,147668,147669],{"class":59},"\"销售额\"",[36,147671,77950],{"class":98},[36,147673,926],{"class":109},[36,147675,12874],{"class":98},[36,147677,1430],{"class":109},[36,147679,12874],{"class":98},[36,147681,1475],{"class":109},[36,147683,12874],{"class":98},[36,147685,147686],{"class":109},"150",[36,147688,12874],{"class":98},[36,147690,147691],{"class":109},"180",[36,147693,5108],{"class":98},[36,147695,147696,147699,147702],{"class":38,"line":82},[36,147697,147698],{"class":98},"line.render(",[36,147700,147701],{"class":59},"\"line.html\"",[36,147703,627],{"class":98},[14,147705,147706,147707,147710],{},"运行后会生成 ",[33,147708,147709],{},"line.html","，用浏览器打开即可看到图表。",[14,147712,147713],{},"核心步骤：",[571,147715,147716,147719,147722,147725,147728],{},[574,147717,147718],{},"导入图表类。",[574,147720,147721],{},"创建图表对象。",[574,147723,147724],{},"添加 x 轴数据。",[574,147726,147727],{},"添加 y 轴数据。",[574,147729,147730],{},"渲染为 HTML。",[559,147732,147734],{"id":147733},"_105-全局配置","10.5 全局配置",[14,147736,147737,147738,147741],{},"常用配置在 ",[33,147739,147740],{},"pyecharts.options"," 中。",[26,147743,147745],{"className":30811,"code":147744,"language":30813,"meta":31,"style":31},"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",[33,147746,147747,147764,147774,147778,147786,147810,147838,147843,147862,147881,147899,147919,147923],{"__ignoreMap":31},[36,147748,147749,147751,147754,147756,147759,147761],{"class":38,"line":39},[36,147750,31170],{"class":163},[36,147752,147753],{"class":98}," pyecharts ",[36,147755,30825],{"class":163},[36,147757,147758],{"class":98}," options ",[36,147760,31816],{"class":163},[36,147762,147763],{"class":98}," opts\n",[36,147765,147766,147768,147770,147772],{"class":38,"line":46},[36,147767,31170],{"class":163},[36,147769,147612],{"class":98},[36,147771,30825],{"class":163},[36,147773,147617],{"class":98},[36,147775,147776],{"class":38,"line":52},[36,147777,247],{"emptyLinePlaceholder":246},[36,147779,147780,147782,147784],{"class":38,"line":66},[36,147781,147626],{"class":98},[36,147783,176],{"class":163},[36,147785,147631],{"class":98},[36,147787,147788,147790,147792,147794,147796,147798,147800,147802,147804,147806,147808],{"class":38,"line":72},[36,147789,147636],{"class":98},[36,147791,147639],{"class":59},[36,147793,12874],{"class":98},[36,147795,147644],{"class":59},[36,147797,12874],{"class":98},[36,147799,147649],{"class":59},[36,147801,12874],{"class":98},[36,147803,147654],{"class":59},[36,147805,12874],{"class":98},[36,147807,147659],{"class":59},[36,147809,5108],{"class":98},[36,147811,147812,147814,147816,147818,147820,147822,147824,147826,147828,147830,147832,147834,147836],{"class":38,"line":82},[36,147813,147666],{"class":98},[36,147815,147669],{"class":59},[36,147817,77950],{"class":98},[36,147819,926],{"class":109},[36,147821,12874],{"class":98},[36,147823,1430],{"class":109},[36,147825,12874],{"class":98},[36,147827,1475],{"class":109},[36,147829,12874],{"class":98},[36,147831,147686],{"class":109},[36,147833,12874],{"class":98},[36,147835,147691],{"class":109},[36,147837,5108],{"class":98},[36,147839,147840],{"class":38,"line":88},[36,147841,147842],{"class":98},"line.set_global_opts(\n",[36,147844,147845,147848,147850,147853,147855,147857,147860],{"class":38,"line":113},[36,147846,147847],{"class":5667},"    title_opts",[36,147849,176],{"class":163},[36,147851,147852],{"class":98},"opts.TitleOpts(",[36,147854,51839],{"class":5667},[36,147856,176],{"class":163},[36,147858,147859],{"class":59},"\"一周销售额\"",[36,147861,38480],{"class":98},[36,147863,147864,147867,147869,147872,147874,147876,147879],{"class":38,"line":119},[36,147865,147866],{"class":5667},"    xaxis_opts",[36,147868,176],{"class":163},[36,147870,147871],{"class":98},"opts.AxisOpts(",[36,147873,80242],{"class":5667},[36,147875,176],{"class":163},[36,147877,147878],{"class":59},"\"日期\"",[36,147880,38480],{"class":98},[36,147882,147883,147886,147888,147890,147892,147894,147897],{"class":38,"line":131},[36,147884,147885],{"class":5667},"    yaxis_opts",[36,147887,176],{"class":163},[36,147889,147871],{"class":98},[36,147891,80242],{"class":5667},[36,147893,176],{"class":163},[36,147895,147896],{"class":59},"\"金额\"",[36,147898,38480],{"class":98},[36,147900,147901,147904,147906,147909,147912,147914,147917],{"class":38,"line":137},[36,147902,147903],{"class":5667},"    tooltip_opts",[36,147905,176],{"class":163},[36,147907,147908],{"class":98},"opts.TooltipOpts(",[36,147910,147911],{"class":5667},"trigger",[36,147913,176],{"class":163},[36,147915,147916],{"class":59},"\"axis\"",[36,147918,38480],{"class":98},[36,147920,147921],{"class":38,"line":147},[36,147922,627],{"class":98},[36,147924,147925,147927,147929],{"class":38,"line":153},[36,147926,147698],{"class":98},[36,147928,147701],{"class":59},[36,147930,627],{"class":98},[14,147932,147933],{},"常见全局配置：",[753,147935,147936,147945],{},[756,147937,147938],{},[759,147939,147940,147943],{},[762,147941,147942],{},"配置",[762,147944,103127],{},[800,147946,147947,147957,147967,147977,147987,147997],{},[759,147948,147949,147954],{},[805,147950,147951],{},[33,147952,147953],{},"TitleOpts",[805,147955,147956],{},"标题",[759,147958,147959,147964],{},[805,147960,147961],{},[33,147962,147963],{},"LegendOpts",[805,147965,147966],{},"图例",[759,147968,147969,147974],{},[805,147970,147971],{},[33,147972,147973],{},"TooltipOpts",[805,147975,147976],{},"提示框",[759,147978,147979,147984],{},[805,147980,147981],{},[33,147982,147983],{},"AxisOpts",[805,147985,147986],{},"坐标轴",[759,147988,147989,147994],{},[805,147990,147991],{},[33,147992,147993],{},"VisualMapOpts",[805,147995,147996],{},"视觉映射",[759,147998,147999,148004],{},[805,148000,148001],{},[33,148002,148003],{},"DataZoomOpts",[805,148005,148006],{},"区域缩放",[559,148008,148010],{"id":148009},"_106-系列配置","10.6 系列配置",[14,148012,148013],{},"系列配置作用于某一组数据。",[26,148015,148017],{"className":30811,"code":148016,"language":30813,"meta":31,"style":31},"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",[33,148018,148019,148024,148035,148064,148075,148094],{"__ignoreMap":31},[36,148020,148021],{"class":38,"line":39},[36,148022,148023],{"class":98},"line.add_yaxis(\n",[36,148025,148026,148029,148031,148033],{"class":38,"line":46},[36,148027,148028],{"class":5667},"    series_name",[36,148030,176],{"class":163},[36,148032,147669],{"class":59},[36,148034,31899],{"class":98},[36,148036,148037,148040,148042,148044,148046,148048,148050,148052,148054,148056,148058,148060,148062],{"class":38,"line":52},[36,148038,148039],{"class":5667},"    y_axis",[36,148041,176],{"class":163},[36,148043,1503],{"class":98},[36,148045,926],{"class":109},[36,148047,12874],{"class":98},[36,148049,1430],{"class":109},[36,148051,12874],{"class":98},[36,148053,1475],{"class":109},[36,148055,12874],{"class":98},[36,148057,147686],{"class":109},[36,148059,12874],{"class":98},[36,148061,147691],{"class":109},[36,148063,88268],{"class":98},[36,148065,148066,148069,148071,148073],{"class":38,"line":66},[36,148067,148068],{"class":5667},"    is_smooth",[36,148070,176],{"class":163},[36,148072,31909],{"class":109},[36,148074,31899],{"class":98},[36,148076,148077,148080,148082,148085,148088,148090,148092],{"class":38,"line":72},[36,148078,148079],{"class":5667},"    label_opts",[36,148081,176],{"class":163},[36,148083,148084],{"class":98},"opts.LabelOpts(",[36,148086,148087],{"class":5667},"is_show",[36,148089,176],{"class":163},[36,148091,31909],{"class":109},[36,148093,38480],{"class":98},[36,148095,148096],{"class":38,"line":82},[36,148097,627],{"class":98},[14,148099,148100],{},"常用参数：",[571,148102,148103,148109,148115,148121,148127],{},[574,148104,148105,148108],{},[33,148106,148107],{},"series_name","：系列名称。",[574,148110,148111,148114],{},[33,148112,148113],{},"y_axis","：y 轴数据。",[574,148116,148117,148120],{},[33,148118,148119],{},"is_smooth","：是否平滑曲线。",[574,148122,148123,148126],{},[33,148124,148125],{},"label_opts","：标签配置。",[574,148128,148129,148132],{},[33,148130,148131],{},"symbol_size","：标记点大小。",[559,148134,148136],{"id":148135},"_107-多条折线","10.7 多条折线",[26,148138,148140],{"className":30811,"code":148139,"language":30813,"meta":31,"style":31},"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",[33,148141,148142,148156,148166,148170,148199,148203,148211,148216,148254,148291,148295,148312,148328,148332],{"__ignoreMap":31},[36,148143,148144,148146,148148,148150,148152,148154],{"class":38,"line":39},[36,148145,31170],{"class":163},[36,148147,147753],{"class":98},[36,148149,30825],{"class":163},[36,148151,147758],{"class":98},[36,148153,31816],{"class":163},[36,148155,147763],{"class":98},[36,148157,148158,148160,148162,148164],{"class":38,"line":46},[36,148159,31170],{"class":163},[36,148161,147612],{"class":98},[36,148163,30825],{"class":163},[36,148165,147617],{"class":98},[36,148167,148168],{"class":38,"line":52},[36,148169,247],{"emptyLinePlaceholder":246},[36,148171,148172,148175,148177,148179,148181,148183,148185,148187,148189,148191,148193,148195,148197],{"class":38,"line":66},[36,148173,148174],{"class":98},"dates ",[36,148176,176],{"class":163},[36,148178,52658],{"class":98},[36,148180,147639],{"class":59},[36,148182,12874],{"class":98},[36,148184,147644],{"class":59},[36,148186,12874],{"class":98},[36,148188,147649],{"class":59},[36,148190,12874],{"class":98},[36,148192,147654],{"class":59},[36,148194,12874],{"class":98},[36,148196,147659],{"class":59},[36,148198,33679],{"class":98},[36,148200,148201],{"class":38,"line":72},[36,148202,247],{"emptyLinePlaceholder":246},[36,148204,148205,148207,148209],{"class":38,"line":82},[36,148206,147626],{"class":98},[36,148208,176],{"class":163},[36,148210,147631],{"class":98},[36,148212,148213],{"class":38,"line":88},[36,148214,148215],{"class":98},"line.add_xaxis(dates)\n",[36,148217,148218,148220,148223,148225,148227,148229,148232,148234,148236,148238,148240,148242,148244,148246,148248,148250,148252],{"class":38,"line":113},[36,148219,147666],{"class":98},[36,148221,148222],{"class":59},"\"线上销售\"",[36,148224,77950],{"class":98},[36,148226,926],{"class":109},[36,148228,12874],{"class":98},[36,148230,148231],{"class":109},"130",[36,148233,12874],{"class":98},[36,148235,1430],{"class":109},[36,148237,12874],{"class":98},[36,148239,21487],{"class":109},[36,148241,12874],{"class":98},[36,148243,2190],{"class":109},[36,148245,112633],{"class":98},[36,148247,148119],{"class":5667},[36,148249,176],{"class":163},[36,148251,31909],{"class":109},[36,148253,627],{"class":98},[36,148255,148256,148258,148261,148263,148265,148267,148269,148271,148273,148275,148277,148279,148281,148283,148285,148287,148289],{"class":38,"line":119},[36,148257,147666],{"class":98},[36,148259,148260],{"class":59},"\"线下销售\"",[36,148262,77950],{"class":98},[36,148264,1226],{"class":109},[36,148266,12874],{"class":98},[36,148268,1475],{"class":109},[36,148270,12874],{"class":98},[36,148272,926],{"class":109},[36,148274,12874],{"class":98},[36,148276,1430],{"class":109},[36,148278,12874],{"class":98},[36,148280,147686],{"class":109},[36,148282,112633],{"class":98},[36,148284,148119],{"class":5667},[36,148286,176],{"class":163},[36,148288,31909],{"class":109},[36,148290,627],{"class":98},[36,148292,148293],{"class":38,"line":131},[36,148294,147842],{"class":98},[36,148296,148297,148299,148301,148303,148305,148307,148310],{"class":38,"line":137},[36,148298,147847],{"class":5667},[36,148300,176],{"class":163},[36,148302,147852],{"class":98},[36,148304,51839],{"class":5667},[36,148306,176],{"class":163},[36,148308,148309],{"class":59},"\"线上线下销售趋势\"",[36,148311,38480],{"class":98},[36,148313,148314,148316,148318,148320,148322,148324,148326],{"class":38,"line":147},[36,148315,147903],{"class":5667},[36,148317,176],{"class":163},[36,148319,147908],{"class":98},[36,148321,147911],{"class":5667},[36,148323,176],{"class":163},[36,148325,147916],{"class":59},[36,148327,38480],{"class":98},[36,148329,148330],{"class":38,"line":153},[36,148331,627],{"class":98},[36,148333,148334,148336,148339],{"class":38,"line":191},[36,148335,147698],{"class":98},[36,148337,148338],{"class":59},"\"sales.html\"",[36,148340,627],{"class":98},[14,148342,148343],{},"多条折线适合比较不同指标或不同地区。",[559,148345,148347],{"id":148346},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,148349,148350,148351,25055],{},"假设 ",[33,148352,148353],{},"sales.json",[26,148355,148357],{"className":147419,"code":148356,"language":146166,"meta":31,"style":31},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[33,148358,148359,148364,148396,148424,148452],{"__ignoreMap":31},[36,148360,148361],{"class":38,"line":39},[36,148362,148363],{"class":98},"[\n",[36,148365,148366,148369,148372,148374,148376,148378,148381,148383,148385,148387,148390,148392,148394],{"class":38,"line":46},[36,148367,148368],{"class":98},"  {",[36,148370,148371],{"class":109},"\"date\"",[36,148373,51869],{"class":98},[36,148375,147639],{"class":59},[36,148377,12874],{"class":98},[36,148379,148380],{"class":109},"\"online\"",[36,148382,51869],{"class":98},[36,148384,926],{"class":109},[36,148386,12874],{"class":98},[36,148388,148389],{"class":109},"\"offline\"",[36,148391,51869],{"class":98},[36,148393,1226],{"class":109},[36,148395,5381],{"class":98},[36,148397,148398,148400,148402,148404,148406,148408,148410,148412,148414,148416,148418,148420,148422],{"class":38,"line":52},[36,148399,148368],{"class":98},[36,148401,148371],{"class":109},[36,148403,51869],{"class":98},[36,148405,147644],{"class":59},[36,148407,12874],{"class":98},[36,148409,148380],{"class":109},[36,148411,51869],{"class":98},[36,148413,148231],{"class":109},[36,148415,12874],{"class":98},[36,148417,148389],{"class":109},[36,148419,51869],{"class":98},[36,148421,1475],{"class":109},[36,148423,5381],{"class":98},[36,148425,148426,148428,148430,148432,148434,148436,148438,148440,148442,148444,148446,148448,148450],{"class":38,"line":66},[36,148427,148368],{"class":98},[36,148429,148371],{"class":109},[36,148431,51869],{"class":98},[36,148433,147649],{"class":59},[36,148435,12874],{"class":98},[36,148437,148380],{"class":109},[36,148439,51869],{"class":98},[36,148441,1430],{"class":109},[36,148443,12874],{"class":98},[36,148445,148389],{"class":109},[36,148447,51869],{"class":98},[36,148449,926],{"class":109},[36,148451,2044],{"class":98},[36,148453,148454],{"class":38,"line":72},[36,148455,33679],{"class":98},[14,148457,148458],{},"读取并绘图：",[26,148460,148462],{"className":30811,"code":148461,"language":30813,"meta":31,"style":31},"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",[33,148463,148464,148470,148484,148494,148498,148530,148543,148547,148555,148564,148573,148577,148589,148598,148607,148616,148620,148628,148632,148649,148666,148670,148687,148703,148707],{"__ignoreMap":31},[36,148465,148466,148468],{"class":38,"line":39},[36,148467,30825],{"class":163},[36,148469,147465],{"class":98},[36,148471,148472,148474,148476,148478,148480,148482],{"class":38,"line":46},[36,148473,31170],{"class":163},[36,148475,147753],{"class":98},[36,148477,30825],{"class":163},[36,148479,147758],{"class":98},[36,148481,31816],{"class":163},[36,148483,147763],{"class":98},[36,148485,148486,148488,148490,148492],{"class":38,"line":52},[36,148487,31170],{"class":163},[36,148489,147612],{"class":98},[36,148491,30825],{"class":163},[36,148493,147617],{"class":98},[36,148495,148496],{"class":38,"line":66},[36,148497,247],{"emptyLinePlaceholder":246},[36,148499,148500,148502,148504,148506,148509,148511,148513,148515,148517,148519,148521,148523,148525,148528],{"class":38,"line":72},[36,148501,108264],{"class":163},[36,148503,147165],{"class":109},[36,148505,621],{"class":98},[36,148507,148508],{"class":59},"\"sales.json\"",[36,148510,12874],{"class":98},[36,148512,147175],{"class":59},[36,148514,12874],{"class":98},[36,148516,147180],{"class":5667},[36,148518,176],{"class":163},[36,148520,147185],{"class":59},[36,148522,14153],{"class":98},[36,148524,31816],{"class":163},[36,148526,148527],{"class":5667}," file",[36,148529,4190],{"class":98},[36,148531,148532,148534,148536,148539,148541],{"class":38,"line":82},[36,148533,101852],{"class":98},[36,148535,176],{"class":163},[36,148537,148538],{"class":98}," json.load(",[36,148540,45787],{"class":5667},[36,148542,627],{"class":98},[36,148544,148545],{"class":38,"line":88},[36,148546,247],{"emptyLinePlaceholder":246},[36,148548,148549,148551,148553],{"class":38,"line":113},[36,148550,148174],{"class":98},[36,148552,176],{"class":163},[36,148554,52270],{"class":98},[36,148556,148557,148560,148562],{"class":38,"line":119},[36,148558,148559],{"class":98},"online_sales ",[36,148561,176],{"class":163},[36,148563,52270],{"class":98},[36,148565,148566,148569,148571],{"class":38,"line":131},[36,148567,148568],{"class":98},"offline_sales ",[36,148570,176],{"class":163},[36,148572,52270],{"class":98},[36,148574,148575],{"class":38,"line":137},[36,148576,247],{"emptyLinePlaceholder":246},[36,148578,148579,148581,148584,148586],{"class":38,"line":147},[36,148580,3476],{"class":163},[36,148582,148583],{"class":98}," item ",[36,148585,26480],{"class":163},[36,148587,148588],{"class":98}," data:\n",[36,148590,148591,148594,148596],{"class":38,"line":153},[36,148592,148593],{"class":98},"    dates.append(item[",[36,148595,148371],{"class":59},[36,148597,5108],{"class":98},[36,148599,148600,148603,148605],{"class":38,"line":191},[36,148601,148602],{"class":98},"    online_sales.append(item[",[36,148604,148380],{"class":59},[36,148606,5108],{"class":98},[36,148608,148609,148612,148614],{"class":38,"line":197},[36,148610,148611],{"class":98},"    offline_sales.append(item[",[36,148613,148389],{"class":59},[36,148615,5108],{"class":98},[36,148617,148618],{"class":38,"line":217},[36,148619,247],{"emptyLinePlaceholder":246},[36,148621,148622,148624,148626],{"class":38,"line":223},[36,148623,147626],{"class":98},[36,148625,176],{"class":163},[36,148627,147631],{"class":98},[36,148629,148630],{"class":38,"line":243},[36,148631,148215],{"class":98},[36,148633,148634,148636,148638,148641,148643,148645,148647],{"class":38,"line":250},[36,148635,147666],{"class":98},[36,148637,148222],{"class":59},[36,148639,148640],{"class":98},", online_sales, ",[36,148642,148119],{"class":5667},[36,148644,176],{"class":163},[36,148646,31909],{"class":109},[36,148648,627],{"class":98},[36,148650,148651,148653,148655,148658,148660,148662,148664],{"class":38,"line":256},[36,148652,147666],{"class":98},[36,148654,148260],{"class":59},[36,148656,148657],{"class":98},", offline_sales, ",[36,148659,148119],{"class":5667},[36,148661,176],{"class":163},[36,148663,31909],{"class":109},[36,148665,627],{"class":98},[36,148667,148668],{"class":38,"line":273},[36,148669,147842],{"class":98},[36,148671,148672,148674,148676,148678,148680,148682,148685],{"class":38,"line":278},[36,148673,147847],{"class":5667},[36,148675,176],{"class":163},[36,148677,147852],{"class":98},[36,148679,51839],{"class":5667},[36,148681,176],{"class":163},[36,148683,148684],{"class":59},"\"销售趋势\"",[36,148686,38480],{"class":98},[36,148688,148689,148691,148693,148695,148697,148699,148701],{"class":38,"line":284},[36,148690,147903],{"class":5667},[36,148692,176],{"class":163},[36,148694,147908],{"class":98},[36,148696,147911],{"class":5667},[36,148698,176],{"class":163},[36,148700,147916],{"class":59},[36,148702,38480],{"class":98},[36,148704,148705],{"class":38,"line":315},[36,148706,627],{"class":98},[36,148708,148709,148711,148713],{"class":38,"line":320},[36,148710,147698],{"class":98},[36,148712,148338],{"class":59},[36,148714,627],{"class":98},[559,148716,148718],{"id":148717},"_109-数据清洗","10.9 数据清洗",[14,148720,148721],{},"真实数据经常不整齐，需要清洗。",[14,148723,148724],{},"常见问题：",[571,148726,148727,148730,148733,148736],{},[574,148728,148729],{},"数字是字符串。",[574,148731,148732],{},"字段缺失。",[574,148734,148735],{},"空值。",[574,148737,148738],{},"日期格式不统一。",[14,148740,15574],{},[26,148742,148744],{"className":30811,"code":148743,"language":30813,"meta":31,"style":31},"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",[33,148745,148746,148755,148778,148798,148819,148823,148827,148835,148844,148848,148859,148873,148882,148887,148891,148899,148909,148913,148920],{"__ignoreMap":31},[36,148747,148748,148751,148753],{"class":38,"line":39},[36,148749,148750],{"class":98},"raw_data ",[36,148752,176],{"class":163},[36,148754,55879],{"class":98},[36,148756,148757,148760,148762,148764,148766,148768,148771,148773,148776],{"class":38,"line":46},[36,148758,148759],{"class":98},"    {",[36,148761,148371],{"class":59},[36,148763,51869],{"class":98},[36,148765,147639],{"class":59},[36,148767,12874],{"class":98},[36,148769,148770],{"class":59},"\"sales\"",[36,148772,51869],{"class":98},[36,148774,148775],{"class":59},"\"100\"",[36,148777,5381],{"class":98},[36,148779,148780,148782,148784,148786,148788,148790,148792,148794,148796],{"class":38,"line":52},[36,148781,148759],{"class":98},[36,148783,148371],{"class":59},[36,148785,51869],{"class":98},[36,148787,147644],{"class":59},[36,148789,12874],{"class":98},[36,148791,148770],{"class":59},[36,148793,51869],{"class":98},[36,148795,8103],{"class":59},[36,148797,5381],{"class":98},[36,148799,148800,148802,148804,148806,148808,148810,148812,148814,148817],{"class":38,"line":66},[36,148801,148759],{"class":98},[36,148803,148371],{"class":59},[36,148805,51869],{"class":98},[36,148807,147649],{"class":59},[36,148809,12874],{"class":98},[36,148811,148770],{"class":59},[36,148813,51869],{"class":98},[36,148815,148816],{"class":59},"\"120\"",[36,148818,5381],{"class":98},[36,148820,148821],{"class":38,"line":72},[36,148822,33679],{"class":98},[36,148824,148825],{"class":38,"line":82},[36,148826,247],{"emptyLinePlaceholder":246},[36,148828,148829,148831,148833],{"class":38,"line":88},[36,148830,148174],{"class":98},[36,148832,176],{"class":163},[36,148834,52270],{"class":98},[36,148836,148837,148840,148842],{"class":38,"line":113},[36,148838,148839],{"class":98},"sales ",[36,148841,176],{"class":163},[36,148843,52270],{"class":98},[36,148845,148846],{"class":38,"line":119},[36,148847,247],{"emptyLinePlaceholder":246},[36,148849,148850,148852,148854,148856],{"class":38,"line":131},[36,148851,3476],{"class":163},[36,148853,148583],{"class":98},[36,148855,26480],{"class":163},[36,148857,148858],{"class":98}," raw_data:\n",[36,148860,148861,148864,148866,148869,148871],{"class":38,"line":137},[36,148862,148863],{"class":98},"    value ",[36,148865,176],{"class":163},[36,148867,148868],{"class":98}," item.get(",[36,148870,148770],{"class":59},[36,148872,627],{"class":98},[36,148874,148875,148877,148879],{"class":38,"line":147},[36,148876,3552],{"class":163},[36,148878,39363],{"class":163},[36,148880,148881],{"class":98}," value:\n",[36,148883,148884],{"class":38,"line":153},[36,148885,148886],{"class":163},"        continue\n",[36,148888,148889],{"class":38,"line":191},[36,148890,247],{"emptyLinePlaceholder":246},[36,148892,148893,148895,148897],{"class":38,"line":197},[36,148894,148593],{"class":98},[36,148896,148371],{"class":59},[36,148898,5108],{"class":98},[36,148900,148901,148904,148906],{"class":38,"line":217},[36,148902,148903],{"class":98},"    sales.append(",[36,148905,624],{"class":109},[36,148907,148908],{"class":98},"(value))\n",[36,148910,148911],{"class":38,"line":223},[36,148912,247],{"emptyLinePlaceholder":246},[36,148914,148915,148917],{"class":38,"line":243},[36,148916,30848],{"class":109},[36,148918,148919],{"class":98},"(dates)\n",[36,148921,148922,148924],{"class":38,"line":250},[36,148923,30848],{"class":109},[36,148925,148926],{"class":98},"(sales)\n",[559,148928,148930],{"id":148929},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[26,148932,148934],{"className":30811,"code":148933,"language":30813,"meta":31,"style":31},"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",[33,148935,148936,148950,148960,148964,148972,148993,149015,149037,149059,149081,149085,149089,149111,149132,149136,149144,149148,149152,149162,149171,149181,149197,149201,149205,149222,149238,149254,149270,149280,149284],{"__ignoreMap":31},[36,148937,148938,148940,148942,148944,148946,148948],{"class":38,"line":39},[36,148939,31170],{"class":163},[36,148941,147753],{"class":98},[36,148943,30825],{"class":163},[36,148945,147758],{"class":98},[36,148947,31816],{"class":163},[36,148949,147763],{"class":98},[36,148951,148952,148954,148956,148958],{"class":38,"line":46},[36,148953,31170],{"class":163},[36,148955,147612],{"class":98},[36,148957,30825],{"class":163},[36,148959,147617],{"class":98},[36,148961,148962],{"class":38,"line":52},[36,148963,247],{"emptyLinePlaceholder":246},[36,148965,148966,148968,148970],{"class":38,"line":66},[36,148967,148839],{"class":98},[36,148969,176],{"class":163},[36,148971,55879],{"class":98},[36,148973,148974,148976,148978,148980,148983,148985,148987,148989,148991],{"class":38,"line":72},[36,148975,148759],{"class":98},[36,148977,148371],{"class":59},[36,148979,51869],{"class":98},[36,148981,148982],{"class":59},"\"2024-10-01\"",[36,148984,12874],{"class":98},[36,148986,84516],{"class":59},[36,148988,51869],{"class":98},[36,148990,92455],{"class":109},[36,148992,5381],{"class":98},[36,148994,148995,148997,148999,149001,149004,149006,149008,149010,149013],{"class":38,"line":82},[36,148996,148759],{"class":98},[36,148998,148371],{"class":59},[36,149000,51869],{"class":98},[36,149002,149003],{"class":59},"\"2024-10-02\"",[36,149005,12874],{"class":98},[36,149007,84516],{"class":59},[36,149009,51869],{"class":98},[36,149011,149012],{"class":109},"1800",[36,149014,5381],{"class":98},[36,149016,149017,149019,149021,149023,149026,149028,149030,149032,149035],{"class":38,"line":88},[36,149018,148759],{"class":98},[36,149020,148371],{"class":59},[36,149022,51869],{"class":98},[36,149024,149025],{"class":59},"\"2024-10-03\"",[36,149027,12874],{"class":98},[36,149029,84516],{"class":59},[36,149031,51869],{"class":98},[36,149033,149034],{"class":109},"1500",[36,149036,5381],{"class":98},[36,149038,149039,149041,149043,149045,149048,149050,149052,149054,149057],{"class":38,"line":113},[36,149040,148759],{"class":98},[36,149042,148371],{"class":59},[36,149044,51869],{"class":98},[36,149046,149047],{"class":59},"\"2024-10-04\"",[36,149049,12874],{"class":98},[36,149051,84516],{"class":59},[36,149053,51869],{"class":98},[36,149055,149056],{"class":109},"2100",[36,149058,5381],{"class":98},[36,149060,149061,149063,149065,149067,149070,149072,149074,149076,149079],{"class":38,"line":119},[36,149062,148759],{"class":98},[36,149064,148371],{"class":59},[36,149066,51869],{"class":98},[36,149068,149069],{"class":59},"\"2024-10-05\"",[36,149071,12874],{"class":98},[36,149073,84516],{"class":59},[36,149075,51869],{"class":98},[36,149077,149078],{"class":109},"2600",[36,149080,5381],{"class":98},[36,149082,149083],{"class":38,"line":131},[36,149084,33679],{"class":98},[36,149086,149087],{"class":38,"line":137},[36,149088,247],{"emptyLinePlaceholder":246},[36,149090,149091,149093,149095,149098,149100,149102,149104,149106,149108],{"class":38,"line":147},[36,149092,148174],{"class":98},[36,149094,176],{"class":163},[36,149096,149097],{"class":98}," [item[",[36,149099,148371],{"class":59},[36,149101,4894],{"class":98},[36,149103,3476],{"class":163},[36,149105,148583],{"class":98},[36,149107,26480],{"class":163},[36,149109,149110],{"class":98}," sales]\n",[36,149112,149113,149116,149118,149120,149122,149124,149126,149128,149130],{"class":38,"line":153},[36,149114,149115],{"class":98},"amounts ",[36,149117,176],{"class":163},[36,149119,149097],{"class":98},[36,149121,84516],{"class":59},[36,149123,4894],{"class":98},[36,149125,3476],{"class":163},[36,149127,148583],{"class":98},[36,149129,26480],{"class":163},[36,149131,149110],{"class":98},[36,149133,149134],{"class":38,"line":191},[36,149135,247],{"emptyLinePlaceholder":246},[36,149137,149138,149140,149142],{"class":38,"line":197},[36,149139,147626],{"class":98},[36,149141,176],{"class":163},[36,149143,147631],{"class":98},[36,149145,149146],{"class":38,"line":217},[36,149147,148215],{"class":98},[36,149149,149150],{"class":38,"line":223},[36,149151,148023],{"class":98},[36,149153,149154,149156,149158,149160],{"class":38,"line":243},[36,149155,148028],{"class":5667},[36,149157,176],{"class":163},[36,149159,147669],{"class":59},[36,149161,31899],{"class":98},[36,149163,149164,149166,149168],{"class":38,"line":250},[36,149165,148039],{"class":5667},[36,149167,176],{"class":163},[36,149169,149170],{"class":98},"amounts,\n",[36,149172,149173,149175,149177,149179],{"class":38,"line":256},[36,149174,148068],{"class":5667},[36,149176,176],{"class":163},[36,149178,31909],{"class":109},[36,149180,31899],{"class":98},[36,149182,149183,149185,149187,149189,149191,149193,149195],{"class":38,"line":273},[36,149184,148079],{"class":5667},[36,149186,176],{"class":163},[36,149188,148084],{"class":98},[36,149190,148087],{"class":5667},[36,149192,176],{"class":163},[36,149194,31909],{"class":109},[36,149196,38480],{"class":98},[36,149198,149199],{"class":38,"line":278},[36,149200,627],{"class":98},[36,149202,149203],{"class":38,"line":284},[36,149204,147842],{"class":98},[36,149206,149207,149209,149211,149213,149215,149217,149220],{"class":38,"line":315},[36,149208,147847],{"class":5667},[36,149210,176],{"class":163},[36,149212,147852],{"class":98},[36,149214,51839],{"class":5667},[36,149216,176],{"class":163},[36,149218,149219],{"class":59},"\"每日销售额\"",[36,149221,38480],{"class":98},[36,149223,149224,149226,149228,149230,149232,149234,149236],{"class":38,"line":320},[36,149225,147866],{"class":5667},[36,149227,176],{"class":163},[36,149229,147871],{"class":98},[36,149231,80242],{"class":5667},[36,149233,176],{"class":163},[36,149235,147878],{"class":59},[36,149237,38480],{"class":98},[36,149239,149240,149242,149244,149246,149248,149250,149252],{"class":38,"line":326},[36,149241,147885],{"class":5667},[36,149243,176],{"class":163},[36,149245,147871],{"class":98},[36,149247,80242],{"class":5667},[36,149249,176],{"class":163},[36,149251,147896],{"class":59},[36,149253,38480],{"class":98},[36,149255,149256,149258,149260,149262,149264,149266,149268],{"class":38,"line":343},[36,149257,147903],{"class":5667},[36,149259,176],{"class":163},[36,149261,147908],{"class":98},[36,149263,147911],{"class":5667},[36,149265,176],{"class":163},[36,149267,147916],{"class":59},[36,149269,38480],{"class":98},[36,149271,149272,149275,149277],{"class":38,"line":348},[36,149273,149274],{"class":5667},"    datazoom_opts",[36,149276,176],{"class":163},[36,149278,149279],{"class":98},"[opts.DataZoomOpts()],\n",[36,149281,149282],{"class":38,"line":354},[36,149283,627],{"class":98},[36,149285,149286,149288,149291],{"class":38,"line":370},[36,149287,147698],{"class":98},[36,149289,149290],{"class":59},"\"daily_sales.html\"",[36,149292,627],{"class":98},[14,149294,149295,149298],{},[33,149296,149297],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[559,149300,149302],{"id":149301},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,149304,149305],{},"如果数据结构如下：",[26,149307,149309],{"className":30811,"code":149308,"language":30813,"meta":31,"style":31},"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",[33,149310,149311,149319,149327,149349,149370,149375,149382,149402,149422,149426],{"__ignoreMap":31},[36,149312,149313,149315,149317],{"class":38,"line":39},[36,149314,102089],{"class":98},[36,149316,176],{"class":163},[36,149318,16011],{"class":98},[36,149320,149321,149324],{"class":38,"line":46},[36,149322,149323],{"class":59},"    \"北京\"",[36,149325,149326],{"class":98},": [\n",[36,149328,149329,149331,149333,149335,149338,149340,149343,149345,149347],{"class":38,"line":52},[36,149330,5368],{"class":98},[36,149332,148371],{"class":59},[36,149334,51869],{"class":98},[36,149336,149337],{"class":59},"\"2024-01-01\"",[36,149339,12874],{"class":98},[36,149341,149342],{"class":59},"\"confirm\"",[36,149344,51869],{"class":98},[36,149346,1060],{"class":109},[36,149348,5381],{"class":98},[36,149350,149351,149353,149355,149357,149360,149362,149364,149366,149368],{"class":38,"line":66},[36,149352,5368],{"class":98},[36,149354,148371],{"class":59},[36,149356,51869],{"class":98},[36,149358,149359],{"class":59},"\"2024-01-02\"",[36,149361,12874],{"class":98},[36,149363,149342],{"class":59},[36,149365,51869],{"class":98},[36,149367,1112],{"class":109},[36,149369,5381],{"class":98},[36,149371,149372],{"class":38,"line":72},[36,149373,149374],{"class":98},"    ],\n",[36,149376,149377,149380],{"class":38,"line":82},[36,149378,149379],{"class":59},"    \"上海\"",[36,149381,149326],{"class":98},[36,149383,149384,149386,149388,149390,149392,149394,149396,149398,149400],{"class":38,"line":88},[36,149385,5368],{"class":98},[36,149387,148371],{"class":59},[36,149389,51869],{"class":98},[36,149391,149337],{"class":59},[36,149393,12874],{"class":98},[36,149395,149342],{"class":59},[36,149397,51869],{"class":98},[36,149399,1009],{"class":109},[36,149401,5381],{"class":98},[36,149403,149404,149406,149408,149410,149412,149414,149416,149418,149420],{"class":38,"line":113},[36,149405,5368],{"class":98},[36,149407,148371],{"class":59},[36,149409,51869],{"class":98},[36,149411,149359],{"class":59},[36,149413,12874],{"class":98},[36,149415,149342],{"class":59},[36,149417,51869],{"class":98},[36,149419,1137],{"class":109},[36,149421,5381],{"class":98},[36,149423,149424],{"class":38,"line":119},[36,149425,149374],{"class":98},[36,149427,149428],{"class":38,"line":131},[36,149429,2044],{"class":98},[14,149431,149432],{},"绘制多地区趋势：",[26,149434,149436],{"className":30811,"code":149435,"language":30813,"meta":31,"style":31},"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",[33,149437,149438,149452,149462,149466,149491,149495,149503,149507,149511,149523,149545,149558,149562,149566,149583,149599,149603],{"__ignoreMap":31},[36,149439,149440,149442,149444,149446,149448,149450],{"class":38,"line":39},[36,149441,31170],{"class":163},[36,149443,147753],{"class":98},[36,149445,30825],{"class":163},[36,149447,147758],{"class":98},[36,149449,31816],{"class":163},[36,149451,147763],{"class":98},[36,149453,149454,149456,149458,149460],{"class":38,"line":46},[36,149455,31170],{"class":163},[36,149457,147612],{"class":98},[36,149459,30825],{"class":163},[36,149461,147617],{"class":98},[36,149463,149464],{"class":38,"line":52},[36,149465,247],{"emptyLinePlaceholder":246},[36,149467,149468,149470,149472,149474,149476,149478,149480,149482,149484,149487,149489],{"class":38,"line":66},[36,149469,148174],{"class":98},[36,149471,176],{"class":163},[36,149473,149097],{"class":98},[36,149475,148371],{"class":59},[36,149477,4894],{"class":98},[36,149479,3476],{"class":163},[36,149481,148583],{"class":98},[36,149483,26480],{"class":163},[36,149485,149486],{"class":98}," data[",[36,149488,69701],{"class":59},[36,149490,77959],{"class":98},[36,149492,149493],{"class":38,"line":72},[36,149494,247],{"emptyLinePlaceholder":246},[36,149496,149497,149499,149501],{"class":38,"line":82},[36,149498,147626],{"class":98},[36,149500,176],{"class":163},[36,149502,147631],{"class":98},[36,149504,149505],{"class":38,"line":88},[36,149506,148215],{"class":98},[36,149508,149509],{"class":38,"line":113},[36,149510,247],{"emptyLinePlaceholder":246},[36,149512,149513,149515,149518,149520],{"class":38,"line":119},[36,149514,3476],{"class":163},[36,149516,149517],{"class":98}," city, records ",[36,149519,26480],{"class":163},[36,149521,149522],{"class":98}," data.items():\n",[36,149524,149525,149528,149530,149532,149534,149536,149538,149540,149542],{"class":38,"line":131},[36,149526,149527],{"class":98},"    values ",[36,149529,176],{"class":163},[36,149531,149097],{"class":98},[36,149533,149342],{"class":59},[36,149535,4894],{"class":98},[36,149537,3476],{"class":163},[36,149539,148583],{"class":98},[36,149541,26480],{"class":163},[36,149543,149544],{"class":98}," records]\n",[36,149546,149547,149550,149552,149554,149556],{"class":38,"line":137},[36,149548,149549],{"class":98},"    line.add_yaxis(city, values, ",[36,149551,148119],{"class":5667},[36,149553,176],{"class":163},[36,149555,31909],{"class":109},[36,149557,627],{"class":98},[36,149559,149560],{"class":38,"line":147},[36,149561,247],{"emptyLinePlaceholder":246},[36,149563,149564],{"class":38,"line":153},[36,149565,147842],{"class":98},[36,149567,149568,149570,149572,149574,149576,149578,149581],{"class":38,"line":191},[36,149569,147847],{"class":5667},[36,149571,176],{"class":163},[36,149573,147852],{"class":98},[36,149575,51839],{"class":5667},[36,149577,176],{"class":163},[36,149579,149580],{"class":59},"\"多地区趋势图\"",[36,149582,38480],{"class":98},[36,149584,149585,149587,149589,149591,149593,149595,149597],{"class":38,"line":197},[36,149586,147903],{"class":5667},[36,149588,176],{"class":163},[36,149590,147908],{"class":98},[36,149592,147911],{"class":5667},[36,149594,176],{"class":163},[36,149596,147916],{"class":59},[36,149598,38480],{"class":98},[36,149600,149601],{"class":38,"line":217},[36,149602,627],{"class":98},[36,149604,149605,149607,149610],{"class":38,"line":223},[36,149606,147698],{"class":98},[36,149608,149609],{"class":59},"\"trend.html\"",[36,149611,627],{"class":98},[14,149613,149614],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[559,149616,149618],{"id":149617},"_1012-易错点","10.12 易错点",[571,149620,149621,149627,149633,149643,149649],{},[574,149622,149623,149626],{},[33,149624,149625],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[574,149628,149629,149632],{},[33,149630,149631],{},"render()"," 生成的是 HTML，不是图片。",[574,149634,149635,149636,149639,149640,28819],{},"JSON 字符串用 ",[33,149637,149638],{},"json.loads()","，JSON 文件用 ",[33,149641,149642],{},"json.load()",[574,149644,149645,149646,28819],{},"中文 JSON 保存时加 ",[33,149647,149648],{},"ensure_ascii=False",[574,149650,149651],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[559,149653,149655],{"id":149654},"_1013-本章练习","10.13 本章练习",[571,149657,149658,149661,149664,149667,149670],{},[574,149659,149660],{},"安装 pyecharts 并生成第一个折线图。",[574,149662,149663],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[574,149665,149666],{},"绘制两条折线，对比线上和线下销售额。",[574,149668,149669],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[574,149671,149672],{},"对含有空值的销售数据进行清洗后再绘图。",[537,149674,149675],{},"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":31,"searchDepth":46,"depth":46,"links":149677},[149678,149679,149680,149681,149682,149683,149684,149685,149686,149687,149688,149689,149690],{"id":147294,"depth":46,"text":147295},{"id":147369,"depth":46,"text":147370},{"id":147548,"depth":46,"text":147549},{"id":147599,"depth":46,"text":147600},{"id":147733,"depth":46,"text":147734},{"id":148009,"depth":46,"text":148010},{"id":148135,"depth":46,"text":148136},{"id":148346,"depth":46,"text":148347},{"id":148717,"depth":46,"text":148718},{"id":148929,"depth":46,"text":148930},{"id":149301,"depth":46,"text":149302},{"id":149617,"depth":46,"text":149618},{"id":149654,"depth":46,"text":149655},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147286,"description":542},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149697,"title":149698,"body":149699,"description":542,"extension":543,"meta":152059,"navigation":246,"path":152060,"seo":152061,"stem":152062,"__hash__":152063},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149700,"toc":152036},[149701,149704,149708,149711,149714,149790,149793,149884,149887,149891,149894,149938,149951,149955,149958,150025,150028,150032,150035,150119,150127,150131,150136,150277,150280,150291,150297,150303,150417,150421,150424,150427,150680,150683,150687,150690,150794,150797,150801,150952,150956,150963,151076,151080,151083,151189,151192,151196,151199,151230,151233,151338,151341,151345,151349,151359,151427,151431,151438,151502,151505,151509,151515,151611,151620,151624,151948,151957,151961,151989,151993,152033],[10,149702,149698],{"id":149703},"_11-面向对象基础",[559,149705,149707],{"id":149706},"_111-什么是面向对象","11.1 什么是面向对象",[14,149709,149710],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,149712,149713],{},"面向过程：",[26,149715,149717],{"className":30811,"code":149716,"language":30813,"meta":31,"style":31},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[33,149718,149719,149728,149736,149740,149750,149781,149785],{"__ignoreMap":31},[36,149720,149721,149723,149725],{"class":38,"line":39},[36,149722,146910],{"class":98},[36,149724,176],{"class":163},[36,149726,149727],{"class":59}," \"小明\"\n",[36,149729,149730,149732,149734],{"class":38,"line":46},[36,149731,146920],{"class":98},[36,149733,176],{"class":163},[36,149735,146925],{"class":109},[36,149737,149738],{"class":38,"line":52},[36,149739,247],{"emptyLinePlaceholder":246},[36,149741,149742,149744,149747],{"class":38,"line":66},[36,149743,32380],{"class":163},[36,149745,149746],{"class":55}," introduce",[36,149748,149749],{"class":98},"(name, age):\n",[36,149751,149752,149754,149756,149758,149761,149763,149765,149767,149770,149772,149774,149776,149779],{"class":38,"line":72},[36,149753,31732],{"class":109},[36,149755,621],{"class":98},[36,149757,671],{"class":163},[36,149759,149760],{"class":59},"\"我叫",[36,149762,1509],{"class":109},[36,149764,80242],{"class":98},[36,149766,1558],{"class":109},[36,149768,149769],{"class":59},"，今年",[36,149771,1509],{"class":109},[36,149773,70653],{"class":98},[36,149775,1558],{"class":109},[36,149777,149778],{"class":59},"岁\"",[36,149780,627],{"class":98},[36,149782,149783],{"class":38,"line":82},[36,149784,247],{"emptyLinePlaceholder":246},[36,149786,149787],{"class":38,"line":88},[36,149788,149789],{"class":98},"introduce(name, age)\n",[14,149791,149792],{},"面向对象：",[26,149794,149796],{"className":30811,"code":149795,"language":30813,"meta":31,"style":31},"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",[33,149797,149798,149806,149814,149843,149847,149851,149861,149870,149879],{"__ignoreMap":31},[36,149799,149800,149802,149804],{"class":38,"line":39},[36,149801,15133],{"class":163},[36,149803,8349],{"class":55},[36,149805,4190],{"class":98},[36,149807,149808,149810,149812],{"class":38,"line":46},[36,149809,31234],{"class":163},[36,149811,149746],{"class":55},[36,149813,31240],{"class":98},[36,149815,149816,149818,149820,149822,149824,149827,149829,149831,149833,149835,149837,149839,149841],{"class":38,"line":52},[36,149817,32884],{"class":109},[36,149819,621],{"class":98},[36,149821,671],{"class":163},[36,149823,149760],{"class":59},[36,149825,149826],{"class":109},"{self",[36,149828,80733],{"class":98},[36,149830,1558],{"class":109},[36,149832,149769],{"class":59},[36,149834,149826],{"class":109},[36,149836,80745],{"class":98},[36,149838,1558],{"class":109},[36,149840,149778],{"class":59},[36,149842,627],{"class":98},[36,149844,149845],{"class":38,"line":66},[36,149846,247],{"emptyLinePlaceholder":246},[36,149848,149849],{"class":38,"line":72},[36,149850,247],{"emptyLinePlaceholder":246},[36,149852,149853,149856,149858],{"class":38,"line":82},[36,149854,149855],{"class":98},"student ",[36,149857,176],{"class":163},[36,149859,149860],{"class":98}," Student()\n",[36,149862,149863,149866,149868],{"class":38,"line":88},[36,149864,149865],{"class":98},"student.name ",[36,149867,176],{"class":163},[36,149869,149727],{"class":59},[36,149871,149872,149875,149877],{"class":38,"line":113},[36,149873,149874],{"class":98},"student.age ",[36,149876,176],{"class":163},[36,149878,146925],{"class":109},[36,149880,149881],{"class":38,"line":119},[36,149882,149883],{"class":98},"student.introduce()\n",[14,149885,149886],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[559,149888,149890],{"id":149889},"_112-类和对象","11.2 类和对象",[14,149892,149893],{},"类是模板，对象是根据模板创建出来的具体实例。",[26,149895,149897],{"className":30811,"code":149896,"language":30813,"meta":31,"style":31},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[33,149898,149899,149907,149912,149916,149920,149929],{"__ignoreMap":31},[36,149900,149901,149903,149905],{"class":38,"line":39},[36,149902,15133],{"class":163},[36,149904,8349],{"class":55},[36,149906,4190],{"class":98},[36,149908,149909],{"class":38,"line":46},[36,149910,149911],{"class":163},"    pass\n",[36,149913,149914],{"class":38,"line":52},[36,149915,247],{"emptyLinePlaceholder":246},[36,149917,149918],{"class":38,"line":66},[36,149919,247],{"emptyLinePlaceholder":246},[36,149921,149922,149925,149927],{"class":38,"line":72},[36,149923,149924],{"class":98},"student1 ",[36,149926,176],{"class":163},[36,149928,149860],{"class":98},[36,149930,149931,149934,149936],{"class":38,"line":82},[36,149932,149933],{"class":98},"student2 ",[36,149935,176],{"class":163},[36,149937,149860],{"class":98},[14,149939,149940,149943,149944,101449,149947,149950],{},[33,149941,149942],{},"Student"," 是类，",[33,149945,149946],{},"student1",[33,149948,149949],{},"student2"," 是对象。",[559,149952,149954],{"id":149953},"_113-属性","11.3 属性",[14,149956,149957],{},"属性是对象保存的数据。",[26,149959,149961],{"className":30811,"code":149960,"language":30813,"meta":31,"style":31},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[33,149962,149963,149971,149975,149979,149983,149991,149999,150007,150011,150018],{"__ignoreMap":31},[36,149964,149965,149967,149969],{"class":38,"line":39},[36,149966,15133],{"class":163},[36,149968,8349],{"class":55},[36,149970,4190],{"class":98},[36,149972,149973],{"class":38,"line":46},[36,149974,149911],{"class":163},[36,149976,149977],{"class":38,"line":52},[36,149978,247],{"emptyLinePlaceholder":246},[36,149980,149981],{"class":38,"line":66},[36,149982,247],{"emptyLinePlaceholder":246},[36,149984,149985,149987,149989],{"class":38,"line":72},[36,149986,149855],{"class":98},[36,149988,176],{"class":163},[36,149990,149860],{"class":98},[36,149992,149993,149995,149997],{"class":38,"line":82},[36,149994,149865],{"class":98},[36,149996,176],{"class":163},[36,149998,149727],{"class":59},[36,150000,150001,150003,150005],{"class":38,"line":88},[36,150002,149874],{"class":98},[36,150004,176],{"class":163},[36,150006,146925],{"class":109},[36,150008,150009],{"class":38,"line":113},[36,150010,247],{"emptyLinePlaceholder":246},[36,150012,150013,150015],{"class":38,"line":119},[36,150014,30848],{"class":109},[36,150016,150017],{"class":98},"(student.name)\n",[36,150019,150020,150022],{"class":38,"line":131},[36,150021,30848],{"class":109},[36,150023,150024],{"class":98},"(student.age)\n",[14,150026,150027],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[559,150029,150031],{"id":150030},"_114-方法","11.4 方法",[14,150033,150034],{},"类中的函数叫方法。",[26,150036,150037],{"className":30811,"code":149795,"language":30813,"meta":31,"style":31},[33,150038,150039,150047,150055,150083,150087,150091,150099,150107,150115],{"__ignoreMap":31},[36,150040,150041,150043,150045],{"class":38,"line":39},[36,150042,15133],{"class":163},[36,150044,8349],{"class":55},[36,150046,4190],{"class":98},[36,150048,150049,150051,150053],{"class":38,"line":46},[36,150050,31234],{"class":163},[36,150052,149746],{"class":55},[36,150054,31240],{"class":98},[36,150056,150057,150059,150061,150063,150065,150067,150069,150071,150073,150075,150077,150079,150081],{"class":38,"line":52},[36,150058,32884],{"class":109},[36,150060,621],{"class":98},[36,150062,671],{"class":163},[36,150064,149760],{"class":59},[36,150066,149826],{"class":109},[36,150068,80733],{"class":98},[36,150070,1558],{"class":109},[36,150072,149769],{"class":59},[36,150074,149826],{"class":109},[36,150076,80745],{"class":98},[36,150078,1558],{"class":109},[36,150080,149778],{"class":59},[36,150082,627],{"class":98},[36,150084,150085],{"class":38,"line":66},[36,150086,247],{"emptyLinePlaceholder":246},[36,150088,150089],{"class":38,"line":72},[36,150090,247],{"emptyLinePlaceholder":246},[36,150092,150093,150095,150097],{"class":38,"line":82},[36,150094,149855],{"class":98},[36,150096,176],{"class":163},[36,150098,149860],{"class":98},[36,150100,150101,150103,150105],{"class":38,"line":88},[36,150102,149865],{"class":98},[36,150104,176],{"class":163},[36,150106,149727],{"class":59},[36,150108,150109,150111,150113],{"class":38,"line":113},[36,150110,149874],{"class":98},[36,150112,176],{"class":163},[36,150114,146925],{"class":109},[36,150116,150117],{"class":38,"line":119},[36,150118,149883],{"class":98},[14,150120,150121,150123,150124,150126],{},[33,150122,31256],{}," 表示当前对象。调用方法时不需要手动传入 ",[33,150125,31256],{},"，Python 会自动传。",[559,150128,150130],{"id":150129},"_115-构造方法__init__","11.5 构造方法__init__",[14,150132,150133,150135],{},[33,150134,31262],{}," 在对象创建时自动执行，用于初始化属性。",[26,150137,150139],{"className":30811,"code":150138,"language":30813,"meta":31,"style":31},"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",[33,150140,150141,150149,150158,150170,150182,150193,150197,150205,150243,150247,150251,150273],{"__ignoreMap":31},[36,150142,150143,150145,150147],{"class":38,"line":39},[36,150144,15133],{"class":163},[36,150146,8349],{"class":55},[36,150148,4190],{"class":98},[36,150150,150151,150153,150155],{"class":38,"line":46},[36,150152,31234],{"class":163},[36,150154,31237],{"class":109},[36,150156,150157],{"class":98},"(self, name, age, score):\n",[36,150159,150160,150162,150165,150167],{"class":38,"line":52},[36,150161,31278],{"class":109},[36,150163,150164],{"class":98},".name ",[36,150166,176],{"class":163},[36,150168,150169],{"class":98}," name\n",[36,150171,150172,150174,150177,150179],{"class":38,"line":66},[36,150173,31278],{"class":109},[36,150175,150176],{"class":98},".age ",[36,150178,176],{"class":163},[36,150180,150181],{"class":98}," age\n",[36,150183,150184,150186,150189,150191],{"class":38,"line":72},[36,150185,31278],{"class":109},[36,150187,150188],{"class":98},".score ",[36,150190,176],{"class":163},[36,150192,2058],{"class":98},[36,150194,150195],{"class":38,"line":82},[36,150196,247],{"emptyLinePlaceholder":246},[36,150198,150199,150201,150203],{"class":38,"line":88},[36,150200,31234],{"class":163},[36,150202,149746],{"class":55},[36,150204,31240],{"class":98},[36,150206,150207,150209,150211,150213,150215,150217,150219,150221,150223,150225,150227,150229,150232,150234,150237,150239,150241],{"class":38,"line":113},[36,150208,32884],{"class":109},[36,150210,621],{"class":98},[36,150212,671],{"class":163},[36,150214,149760],{"class":59},[36,150216,149826],{"class":109},[36,150218,80733],{"class":98},[36,150220,1558],{"class":109},[36,150222,149769],{"class":59},[36,150224,149826],{"class":109},[36,150226,80745],{"class":98},[36,150228,1558],{"class":109},[36,150230,150231],{"class":59},"岁，成绩",[36,150233,149826],{"class":109},[36,150235,150236],{"class":98},".score",[36,150238,1558],{"class":109},[36,150240,866],{"class":59},[36,150242,627],{"class":98},[36,150244,150245],{"class":38,"line":119},[36,150246,247],{"emptyLinePlaceholder":246},[36,150248,150249],{"class":38,"line":131},[36,150250,247],{"emptyLinePlaceholder":246},[36,150252,150253,150255,150257,150260,150263,150265,150267,150269,150271],{"class":38,"line":137},[36,150254,149855],{"class":98},[36,150256,176],{"class":163},[36,150258,150259],{"class":98}," Student(",[36,150261,150262],{"class":59},"\"小明\"",[36,150264,12874],{"class":98},[36,150266,1264],{"class":109},[36,150268,12874],{"class":98},[36,150270,1600],{"class":109},[36,150272,627],{"class":98},[36,150274,150275],{"class":38,"line":147},[36,150276,149883],{"class":98},[14,150278,150279],{},"构造方法的好处：",[571,150281,150282,150285,150288],{},[574,150283,150284],{},"创建对象时必须提供必要数据。",[574,150286,150287],{},"属性初始化集中，不容易漏。",[574,150289,150290],{},"对象状态更完整。",[559,150292,150294,150295],{"id":150293},"_116-str","11.6 ",[765,150296,1781],{},[14,150298,150299,150300,28819],{},"直接打印对象时，默认输出不直观。可以定义 ",[33,150301,150302],{},"__str__",[26,150304,150306],{"className":30811,"code":150305,"language":30813,"meta":31,"style":31},"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",[33,150307,150308,150316,150325,150335,150345,150349,150358,150386,150390,150394,150410],{"__ignoreMap":31},[36,150309,150310,150312,150314],{"class":38,"line":39},[36,150311,15133],{"class":163},[36,150313,8349],{"class":55},[36,150315,4190],{"class":98},[36,150317,150318,150320,150322],{"class":38,"line":46},[36,150319,31234],{"class":163},[36,150321,31237],{"class":109},[36,150323,150324],{"class":98},"(self, name, age):\n",[36,150326,150327,150329,150331,150333],{"class":38,"line":52},[36,150328,31278],{"class":109},[36,150330,150164],{"class":98},[36,150332,176],{"class":163},[36,150334,150169],{"class":98},[36,150336,150337,150339,150341,150343],{"class":38,"line":66},[36,150338,31278],{"class":109},[36,150340,150176],{"class":98},[36,150342,176],{"class":163},[36,150344,150181],{"class":98},[36,150346,150347],{"class":38,"line":72},[36,150348,247],{"emptyLinePlaceholder":246},[36,150350,150351,150353,150356],{"class":38,"line":82},[36,150352,31234],{"class":163},[36,150354,150355],{"class":109}," __str__",[36,150357,31240],{"class":98},[36,150359,150360,150362,150365,150368,150370,150372,150374,150377,150379,150381,150383],{"class":38,"line":88},[36,150361,15191],{"class":163},[36,150363,150364],{"class":163}," f",[36,150366,150367],{"class":59},"\"Student(name=",[36,150369,149826],{"class":109},[36,150371,80733],{"class":98},[36,150373,1558],{"class":109},[36,150375,150376],{"class":59},", age=",[36,150378,149826],{"class":109},[36,150380,80745],{"class":98},[36,150382,1558],{"class":109},[36,150384,150385],{"class":59},")\"\n",[36,150387,150388],{"class":38,"line":113},[36,150389,247],{"emptyLinePlaceholder":246},[36,150391,150392],{"class":38,"line":119},[36,150393,247],{"emptyLinePlaceholder":246},[36,150395,150396,150398,150400,150402,150404,150406,150408],{"class":38,"line":131},[36,150397,149855],{"class":98},[36,150399,176],{"class":163},[36,150401,150259],{"class":98},[36,150403,150262],{"class":59},[36,150405,12874],{"class":98},[36,150407,1264],{"class":109},[36,150409,627],{"class":98},[36,150411,150412,150414],{"class":38,"line":137},[36,150413,30848],{"class":109},[36,150415,150416],{"class":98},"(student)\n",[559,150418,150420],{"id":150419},"_117-封装","11.7 封装",[14,150422,150423],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,150425,150426],{},"Python 中以双下划线开头的属性通常视为私有属性。",[26,150428,150430],{"className":30811,"code":150429,"language":30813,"meta":31,"style":31},"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",[33,150431,150432,150441,150450,150462,150474,150478,150487,150496,150500,150510,150523,150534,150539,150550,150554,150563,150575,150586,150590,150603,150614,150618,150629,150633,150637,150655,150664,150673],{"__ignoreMap":31},[36,150433,150434,150436,150439],{"class":38,"line":39},[36,150435,15133],{"class":163},[36,150437,150438],{"class":55}," Account",[36,150440,4190],{"class":98},[36,150442,150443,150445,150447],{"class":38,"line":46},[36,150444,31234],{"class":163},[36,150446,31237],{"class":109},[36,150448,150449],{"class":98},"(self, owner, balance):\n",[36,150451,150452,150454,150457,150459],{"class":38,"line":52},[36,150453,31278],{"class":109},[36,150455,150456],{"class":98},".owner ",[36,150458,176],{"class":163},[36,150460,150461],{"class":98}," owner\n",[36,150463,150464,150466,150469,150471],{"class":38,"line":66},[36,150465,31278],{"class":109},[36,150467,150468],{"class":98},".__balance ",[36,150470,176],{"class":163},[36,150472,150473],{"class":98}," balance\n",[36,150475,150476],{"class":38,"line":72},[36,150477,247],{"emptyLinePlaceholder":246},[36,150479,150480,150482,150485],{"class":38,"line":82},[36,150481,31234],{"class":163},[36,150483,150484],{"class":55}," get_balance",[36,150486,31240],{"class":98},[36,150488,150489,150491,150493],{"class":38,"line":88},[36,150490,15191],{"class":163},[36,150492,39306],{"class":109},[36,150494,150495],{"class":98},".__balance\n",[36,150497,150498],{"class":38,"line":113},[36,150499,247],{"emptyLinePlaceholder":246},[36,150501,150502,150504,150507],{"class":38,"line":119},[36,150503,31234],{"class":163},[36,150505,150506],{"class":55}," deposit",[36,150508,150509],{"class":98},"(self, money):\n",[36,150511,150512,150514,150517,150519,150521],{"class":38,"line":131},[36,150513,2955],{"class":163},[36,150515,150516],{"class":98}," money ",[36,150518,2067],{"class":163},[36,150520,4544],{"class":109},[36,150522,4190],{"class":98},[36,150524,150525,150527,150529,150532],{"class":38,"line":137},[36,150526,35083],{"class":109},[36,150528,621],{"class":98},[36,150530,150531],{"class":59},"\"存款金额必须大于0\"",[36,150533,627],{"class":98},[36,150535,150536],{"class":38,"line":147},[36,150537,150538],{"class":163},"            return\n",[36,150540,150541,150543,150545,150547],{"class":38,"line":153},[36,150542,31278],{"class":109},[36,150544,150468],{"class":98},[36,150546,9918],{"class":163},[36,150548,150549],{"class":98}," money\n",[36,150551,150552],{"class":38,"line":191},[36,150553,247],{"emptyLinePlaceholder":246},[36,150555,150556,150558,150561],{"class":38,"line":197},[36,150557,31234],{"class":163},[36,150559,150560],{"class":55}," withdraw",[36,150562,150509],{"class":98},[36,150564,150565,150567,150569,150571,150573],{"class":38,"line":217},[36,150566,2955],{"class":163},[36,150568,150516],{"class":98},[36,150570,2067],{"class":163},[36,150572,4544],{"class":109},[36,150574,4190],{"class":98},[36,150576,150577,150579,150581,150584],{"class":38,"line":223},[36,150578,35083],{"class":109},[36,150580,621],{"class":98},[36,150582,150583],{"class":59},"\"取款金额必须大于0\"",[36,150585,627],{"class":98},[36,150587,150588],{"class":38,"line":243},[36,150589,150538],{"class":163},[36,150591,150592,150594,150596,150598,150600],{"class":38,"line":250},[36,150593,2955],{"class":163},[36,150595,150516],{"class":98},[36,150597,173],{"class":163},[36,150599,39306],{"class":109},[36,150601,150602],{"class":98},".__balance:\n",[36,150604,150605,150607,150609,150612],{"class":38,"line":256},[36,150606,35083],{"class":109},[36,150608,621],{"class":98},[36,150610,150611],{"class":59},"\"余额不足\"",[36,150613,627],{"class":98},[36,150615,150616],{"class":38,"line":273},[36,150617,150538],{"class":163},[36,150619,150620,150622,150624,150627],{"class":38,"line":278},[36,150621,31278],{"class":109},[36,150623,150468],{"class":98},[36,150625,150626],{"class":163},"-=",[36,150628,150549],{"class":98},[36,150630,150631],{"class":38,"line":284},[36,150632,247],{"emptyLinePlaceholder":246},[36,150634,150635],{"class":38,"line":315},[36,150636,247],{"emptyLinePlaceholder":246},[36,150638,150639,150642,150644,150647,150649,150651,150653],{"class":38,"line":320},[36,150640,150641],{"class":98},"account ",[36,150643,176],{"class":163},[36,150645,150646],{"class":98}," Account(",[36,150648,150262],{"class":59},[36,150650,12874],{"class":98},[36,150652,6861],{"class":109},[36,150654,627],{"class":98},[36,150656,150657,150660,150662],{"class":38,"line":326},[36,150658,150659],{"class":98},"account.deposit(",[36,150661,2190],{"class":109},[36,150663,627],{"class":98},[36,150665,150666,150669,150671],{"class":38,"line":343},[36,150667,150668],{"class":98},"account.withdraw(",[36,150670,926],{"class":109},[36,150672,627],{"class":98},[36,150674,150675,150677],{"class":38,"line":348},[36,150676,30848],{"class":109},[36,150678,150679],{"class":98},"(account.get_balance())\n",[14,150681,150682],{},"封装的意义是避免外部随意修改内部状态。",[559,150684,150686],{"id":150685},"_118-继承","11.8 继承",[14,150688,150689],{},"继承可以让子类复用父类的属性和方法。",[26,150691,150693],{"className":30811,"code":150692,"language":30813,"meta":31,"style":31},"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",[33,150694,150695,150704,150713,150724,150728,150732,150746,150755,150766,150770,150774,150784,150789],{"__ignoreMap":31},[36,150696,150697,150699,150702],{"class":38,"line":39},[36,150698,15133],{"class":163},[36,150700,150701],{"class":55}," Animal",[36,150703,4190],{"class":98},[36,150705,150706,150708,150711],{"class":38,"line":46},[36,150707,31234],{"class":163},[36,150709,150710],{"class":55}," eat",[36,150712,31240],{"class":98},[36,150714,150715,150717,150719,150722],{"class":38,"line":52},[36,150716,32884],{"class":109},[36,150718,621],{"class":98},[36,150720,150721],{"class":59},"\"吃东西\"",[36,150723,627],{"class":98},[36,150725,150726],{"class":38,"line":66},[36,150727,247],{"emptyLinePlaceholder":246},[36,150729,150730],{"class":38,"line":72},[36,150731,247],{"emptyLinePlaceholder":246},[36,150733,150734,150736,150739,150741,150744],{"class":38,"line":82},[36,150735,15133],{"class":163},[36,150737,150738],{"class":55}," Dog",[36,150740,621],{"class":98},[36,150742,150743],{"class":55},"Animal",[36,150745,31219],{"class":98},[36,150747,150748,150750,150753],{"class":38,"line":88},[36,150749,31234],{"class":163},[36,150751,150752],{"class":55}," bark",[36,150754,31240],{"class":98},[36,150756,150757,150759,150761,150764],{"class":38,"line":113},[36,150758,32884],{"class":109},[36,150760,621],{"class":98},[36,150762,150763],{"class":59},"\"汪汪\"",[36,150765,627],{"class":98},[36,150767,150768],{"class":38,"line":119},[36,150769,247],{"emptyLinePlaceholder":246},[36,150771,150772],{"class":38,"line":131},[36,150773,247],{"emptyLinePlaceholder":246},[36,150775,150776,150779,150781],{"class":38,"line":137},[36,150777,150778],{"class":98},"dog ",[36,150780,176],{"class":163},[36,150782,150783],{"class":98}," Dog()\n",[36,150785,150786],{"class":38,"line":147},[36,150787,150788],{"class":98},"dog.eat()\n",[36,150790,150791],{"class":38,"line":153},[36,150792,150793],{"class":98},"dog.bark()\n",[14,150795,150796],{},"子类可以扩展新方法，也可以重写父类方法。",[559,150798,150800],{"id":150799},"_119-方法重写","11.9 方法重写",[26,150802,150804],{"className":30811,"code":150803,"language":30813,"meta":31,"style":31},"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",[33,150805,150806,150814,150823,150834,150838,150842,150854,150862,150872,150876,150880,150893,150901,150912,150916,150920,150928,150938,150942,150947],{"__ignoreMap":31},[36,150807,150808,150810,150812],{"class":38,"line":39},[36,150809,15133],{"class":163},[36,150811,150701],{"class":55},[36,150813,4190],{"class":98},[36,150815,150816,150818,150821],{"class":38,"line":46},[36,150817,31234],{"class":163},[36,150819,150820],{"class":55}," speak",[36,150822,31240],{"class":98},[36,150824,150825,150827,150829,150832],{"class":38,"line":52},[36,150826,32884],{"class":109},[36,150828,621],{"class":98},[36,150830,150831],{"class":59},"\"动物叫\"",[36,150833,627],{"class":98},[36,150835,150836],{"class":38,"line":66},[36,150837,247],{"emptyLinePlaceholder":246},[36,150839,150840],{"class":38,"line":72},[36,150841,247],{"emptyLinePlaceholder":246},[36,150843,150844,150846,150848,150850,150852],{"class":38,"line":82},[36,150845,15133],{"class":163},[36,150847,150738],{"class":55},[36,150849,621],{"class":98},[36,150851,150743],{"class":55},[36,150853,31219],{"class":98},[36,150855,150856,150858,150860],{"class":38,"line":88},[36,150857,31234],{"class":163},[36,150859,150820],{"class":55},[36,150861,31240],{"class":98},[36,150863,150864,150866,150868,150870],{"class":38,"line":113},[36,150865,32884],{"class":109},[36,150867,621],{"class":98},[36,150869,150763],{"class":59},[36,150871,627],{"class":98},[36,150873,150874],{"class":38,"line":119},[36,150875,247],{"emptyLinePlaceholder":246},[36,150877,150878],{"class":38,"line":131},[36,150879,247],{"emptyLinePlaceholder":246},[36,150881,150882,150884,150887,150889,150891],{"class":38,"line":137},[36,150883,15133],{"class":163},[36,150885,150886],{"class":55}," Cat",[36,150888,621],{"class":98},[36,150890,150743],{"class":55},[36,150892,31219],{"class":98},[36,150894,150895,150897,150899],{"class":38,"line":147},[36,150896,31234],{"class":163},[36,150898,150820],{"class":55},[36,150900,31240],{"class":98},[36,150902,150903,150905,150907,150910],{"class":38,"line":153},[36,150904,32884],{"class":109},[36,150906,621],{"class":98},[36,150908,150909],{"class":59},"\"喵喵\"",[36,150911,627],{"class":98},[36,150913,150914],{"class":38,"line":191},[36,150915,247],{"emptyLinePlaceholder":246},[36,150917,150918],{"class":38,"line":197},[36,150919,247],{"emptyLinePlaceholder":246},[36,150921,150922,150924,150926],{"class":38,"line":217},[36,150923,150778],{"class":98},[36,150925,176],{"class":163},[36,150927,150783],{"class":98},[36,150929,150930,150933,150935],{"class":38,"line":223},[36,150931,150932],{"class":98},"cat ",[36,150934,176],{"class":163},[36,150936,150937],{"class":98}," Cat()\n",[36,150939,150940],{"class":38,"line":243},[36,150941,247],{"emptyLinePlaceholder":246},[36,150943,150944],{"class":38,"line":250},[36,150945,150946],{"class":98},"dog.speak()\n",[36,150948,150949],{"class":38,"line":256},[36,150950,150951],{"class":98},"cat.speak()\n",[559,150953,150955],{"id":150954},"_1110-super","11.10 super",[14,150957,150958,150959,150962],{},"子类可以通过 ",[33,150960,150961],{},"super()"," 调用父类方法。",[26,150964,150966],{"className":30811,"code":150965,"language":30813,"meta":31,"style":31},"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",[33,150967,150968,150976,150985,150995,150999,151003,151015,151024,151035,151045,151049,151053,151069],{"__ignoreMap":31},[36,150969,150970,150972,150974],{"class":38,"line":39},[36,150971,15133],{"class":163},[36,150973,16008],{"class":55},[36,150975,4190],{"class":98},[36,150977,150978,150980,150982],{"class":38,"line":46},[36,150979,31234],{"class":163},[36,150981,31237],{"class":109},[36,150983,150984],{"class":98},"(self, name):\n",[36,150986,150987,150989,150991,150993],{"class":38,"line":52},[36,150988,31278],{"class":109},[36,150990,150164],{"class":98},[36,150992,176],{"class":163},[36,150994,150169],{"class":98},[36,150996,150997],{"class":38,"line":66},[36,150998,247],{"emptyLinePlaceholder":246},[36,151000,151001],{"class":38,"line":72},[36,151002,247],{"emptyLinePlaceholder":246},[36,151004,151005,151007,151009,151011,151013],{"class":38,"line":82},[36,151006,15133],{"class":163},[36,151008,8349],{"class":55},[36,151010,621],{"class":98},[36,151012,19485],{"class":55},[36,151014,31219],{"class":98},[36,151016,151017,151019,151021],{"class":38,"line":88},[36,151018,31234],{"class":163},[36,151020,31237],{"class":109},[36,151022,151023],{"class":98},"(self, name, score):\n",[36,151025,151026,151028,151030,151032],{"class":38,"line":113},[36,151027,31250],{"class":109},[36,151029,17700],{"class":98},[36,151031,31262],{"class":109},[36,151033,151034],{"class":98},"(name)\n",[36,151036,151037,151039,151041,151043],{"class":38,"line":119},[36,151038,31278],{"class":109},[36,151040,150188],{"class":98},[36,151042,176],{"class":163},[36,151044,2058],{"class":98},[36,151046,151047],{"class":38,"line":131},[36,151048,247],{"emptyLinePlaceholder":246},[36,151050,151051],{"class":38,"line":137},[36,151052,247],{"emptyLinePlaceholder":246},[36,151054,151055,151057,151059,151061,151063,151065,151067],{"class":38,"line":147},[36,151056,149855],{"class":98},[36,151058,176],{"class":163},[36,151060,150259],{"class":98},[36,151062,150262],{"class":59},[36,151064,12874],{"class":98},[36,151066,1600],{"class":109},[36,151068,627],{"class":98},[36,151070,151071,151073],{"class":38,"line":153},[36,151072,30848],{"class":109},[36,151074,151075],{"class":98},"(student.name, student.score)\n",[559,151077,151079],{"id":151078},"_1111-多态","11.11 多态",[14,151081,151082],{},"多态指不同对象响应同一个方法，表现出不同结果。",[26,151084,151086],{"className":30811,"code":151085,"language":30813,"meta":31,"style":31},"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",[33,151087,151088,151096,151104,151114,151118,151122,151130,151138,151148,151152,151156,151166,151171,151175,151179,151184],{"__ignoreMap":31},[36,151089,151090,151092,151094],{"class":38,"line":39},[36,151091,15133],{"class":163},[36,151093,150738],{"class":55},[36,151095,4190],{"class":98},[36,151097,151098,151100,151102],{"class":38,"line":46},[36,151099,31234],{"class":163},[36,151101,150820],{"class":55},[36,151103,31240],{"class":98},[36,151105,151106,151108,151110,151112],{"class":38,"line":52},[36,151107,32884],{"class":109},[36,151109,621],{"class":98},[36,151111,150763],{"class":59},[36,151113,627],{"class":98},[36,151115,151116],{"class":38,"line":66},[36,151117,247],{"emptyLinePlaceholder":246},[36,151119,151120],{"class":38,"line":72},[36,151121,247],{"emptyLinePlaceholder":246},[36,151123,151124,151126,151128],{"class":38,"line":82},[36,151125,15133],{"class":163},[36,151127,150886],{"class":55},[36,151129,4190],{"class":98},[36,151131,151132,151134,151136],{"class":38,"line":88},[36,151133,31234],{"class":163},[36,151135,150820],{"class":55},[36,151137,31240],{"class":98},[36,151139,151140,151142,151144,151146],{"class":38,"line":113},[36,151141,32884],{"class":109},[36,151143,621],{"class":98},[36,151145,150909],{"class":59},[36,151147,627],{"class":98},[36,151149,151150],{"class":38,"line":119},[36,151151,247],{"emptyLinePlaceholder":246},[36,151153,151154],{"class":38,"line":131},[36,151155,247],{"emptyLinePlaceholder":246},[36,151157,151158,151160,151163],{"class":38,"line":137},[36,151159,32380],{"class":163},[36,151161,151162],{"class":55}," make_sound",[36,151164,151165],{"class":98},"(animal):\n",[36,151167,151168],{"class":38,"line":147},[36,151169,151170],{"class":98},"    animal.speak()\n",[36,151172,151173],{"class":38,"line":153},[36,151174,247],{"emptyLinePlaceholder":246},[36,151176,151177],{"class":38,"line":191},[36,151178,247],{"emptyLinePlaceholder":246},[36,151180,151181],{"class":38,"line":197},[36,151182,151183],{"class":98},"make_sound(Dog())\n",[36,151185,151186],{"class":38,"line":217},[36,151187,151188],{"class":98},"make_sound(Cat())\n",[14,151190,151191],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[559,151193,151195],{"id":151194},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,151197,151198],{},"实例属性属于对象：",[26,151200,151202],{"className":30811,"code":151201,"language":30813,"meta":31,"style":31},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[33,151203,151204,151212,151220],{"__ignoreMap":31},[36,151205,151206,151208,151210],{"class":38,"line":39},[36,151207,15133],{"class":163},[36,151209,8349],{"class":55},[36,151211,4190],{"class":98},[36,151213,151214,151216,151218],{"class":38,"line":46},[36,151215,31234],{"class":163},[36,151217,31237],{"class":109},[36,151219,150984],{"class":98},[36,151221,151222,151224,151226,151228],{"class":38,"line":52},[36,151223,31278],{"class":109},[36,151225,150164],{"class":98},[36,151227,176],{"class":163},[36,151229,150169],{"class":98},[14,151231,151232],{},"类属性属于类，所有对象共享：",[26,151234,151236],{"className":30811,"code":151235,"language":30813,"meta":31,"style":31},"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",[33,151237,151238,151246,151256,151260,151268,151278,151282,151286,151299,151313,151317,151324,151331],{"__ignoreMap":31},[36,151239,151240,151242,151244],{"class":38,"line":39},[36,151241,15133],{"class":163},[36,151243,8349],{"class":55},[36,151245,4190],{"class":98},[36,151247,151248,151251,151253],{"class":38,"line":46},[36,151249,151250],{"class":98},"    school ",[36,151252,176],{"class":163},[36,151254,151255],{"class":59}," \"黑马学校\"\n",[36,151257,151258],{"class":38,"line":52},[36,151259,247],{"emptyLinePlaceholder":246},[36,151261,151262,151264,151266],{"class":38,"line":66},[36,151263,31234],{"class":163},[36,151265,31237],{"class":109},[36,151267,150984],{"class":98},[36,151269,151270,151272,151274,151276],{"class":38,"line":72},[36,151271,31278],{"class":109},[36,151273,150164],{"class":98},[36,151275,176],{"class":163},[36,151277,150169],{"class":98},[36,151279,151280],{"class":38,"line":82},[36,151281,247],{"emptyLinePlaceholder":246},[36,151283,151284],{"class":38,"line":88},[36,151285,247],{"emptyLinePlaceholder":246},[36,151287,151288,151291,151293,151295,151297],{"class":38,"line":113},[36,151289,151290],{"class":98},"s1 ",[36,151292,176],{"class":163},[36,151294,150259],{"class":98},[36,151296,150262],{"class":59},[36,151298,627],{"class":98},[36,151300,151301,151304,151306,151308,151311],{"class":38,"line":119},[36,151302,151303],{"class":98},"s2 ",[36,151305,176],{"class":163},[36,151307,150259],{"class":98},[36,151309,151310],{"class":59},"\"小红\"",[36,151312,627],{"class":98},[36,151314,151315],{"class":38,"line":131},[36,151316,247],{"emptyLinePlaceholder":246},[36,151318,151319,151321],{"class":38,"line":137},[36,151320,30848],{"class":109},[36,151322,151323],{"class":98},"(s1.school)\n",[36,151325,151326,151328],{"class":38,"line":147},[36,151327,30848],{"class":109},[36,151329,151330],{"class":98},"(s2.school)\n",[36,151332,151333,151335],{"class":38,"line":153},[36,151334,30848],{"class":109},[36,151336,151337],{"class":98},"(Student.school)\n",[14,151339,151340],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[559,151342,151344],{"id":151343},"_1113-类方法和静态方法","11.13 类方法和静态方法",[588,151346,151348],{"id":151347},"_11131-类方法","11.13.1 类方法",[14,151350,151351,151352,151355,151356,28819],{},"类方法使用 ",[33,151353,151354],{},"@classmethod","，第一个参数通常是 ",[33,151357,151358],{},"cls",[26,151360,151362],{"className":30811,"code":151361,"language":30813,"meta":31,"style":31},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[33,151363,151364,151372,151380,151384,151392,151402,151412,151416,151420],{"__ignoreMap":31},[36,151365,151366,151368,151370],{"class":38,"line":39},[36,151367,15133],{"class":163},[36,151369,8349],{"class":55},[36,151371,4190],{"class":98},[36,151373,151374,151376,151378],{"class":38,"line":46},[36,151375,151250],{"class":98},[36,151377,176],{"class":163},[36,151379,151255],{"class":59},[36,151381,151382],{"class":38,"line":52},[36,151383,247],{"emptyLinePlaceholder":246},[36,151385,151386,151389],{"class":38,"line":66},[36,151387,151388],{"class":55},"    @",[36,151390,151391],{"class":109},"classmethod\n",[36,151393,151394,151396,151399],{"class":38,"line":72},[36,151395,31234],{"class":163},[36,151397,151398],{"class":55}," get_school",[36,151400,151401],{"class":98},"(cls):\n",[36,151403,151404,151406,151409],{"class":38,"line":82},[36,151405,15191],{"class":163},[36,151407,151408],{"class":109}," cls",[36,151410,151411],{"class":98},".school\n",[36,151413,151414],{"class":38,"line":88},[36,151415,247],{"emptyLinePlaceholder":246},[36,151417,151418],{"class":38,"line":113},[36,151419,247],{"emptyLinePlaceholder":246},[36,151421,151422,151424],{"class":38,"line":119},[36,151423,30848],{"class":109},[36,151425,151426],{"class":98},"(Student.get_school())\n",[588,151428,151430],{"id":151429},"_11132-静态方法","11.13.2 静态方法",[14,151432,151433,151434,151437],{},"静态方法使用 ",[33,151435,151436],{},"@staticmethod","，不需要访问实例和类。",[26,151439,151441],{"className":30811,"code":151440,"language":30813,"meta":31,"style":31},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[33,151442,151443,151452,151459,151468,151479,151483,151487],{"__ignoreMap":31},[36,151444,151445,151447,151450],{"class":38,"line":39},[36,151446,15133],{"class":163},[36,151448,151449],{"class":55}," MathUtils",[36,151451,4190],{"class":98},[36,151453,151454,151456],{"class":38,"line":46},[36,151455,151388],{"class":55},[36,151457,151458],{"class":109},"staticmethod\n",[36,151460,151461,151463,151465],{"class":38,"line":52},[36,151462,31234],{"class":163},[36,151464,5660],{"class":55},[36,151466,151467],{"class":98},"(a, b):\n",[36,151469,151470,151472,151474,151476],{"class":38,"line":66},[36,151471,15191],{"class":163},[36,151473,11308],{"class":98},[36,151475,1095],{"class":163},[36,151477,151478],{"class":98}," b\n",[36,151480,151481],{"class":38,"line":72},[36,151482,247],{"emptyLinePlaceholder":246},[36,151484,151485],{"class":38,"line":82},[36,151486,247],{"emptyLinePlaceholder":246},[36,151488,151489,151491,151494,151496,151498,151500],{"class":38,"line":88},[36,151490,30848],{"class":109},[36,151492,151493],{"class":98},"(MathUtils.add(",[36,151495,833],{"class":109},[36,151497,12874],{"class":98},[36,151499,694],{"class":109},[36,151501,30930],{"class":98},[14,151503,151504],{},"静态方法本质上是放在类命名空间里的普通函数。",[559,151506,151508],{"id":151507},"_1114-dataclass","11.14 dataclass",[14,151510,151511,151514],{},[33,151512,151513],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[26,151516,151518],{"className":30811,"code":151517,"language":30813,"meta":31,"style":31},"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",[33,151519,151520,151532,151536,151540,151545,151553,151561,151569,151577,151581,151585,151605],{"__ignoreMap":31},[36,151521,151522,151524,151527,151529],{"class":38,"line":39},[36,151523,31170],{"class":163},[36,151525,151526],{"class":98}," dataclasses ",[36,151528,30825],{"class":163},[36,151530,151531],{"class":98}," dataclass\n",[36,151533,151534],{"class":38,"line":46},[36,151535,247],{"emptyLinePlaceholder":246},[36,151537,151538],{"class":38,"line":52},[36,151539,247],{"emptyLinePlaceholder":246},[36,151541,151542],{"class":38,"line":66},[36,151543,151544],{"class":55},"@dataclass\n",[36,151546,151547,151549,151551],{"class":38,"line":72},[36,151548,15133],{"class":163},[36,151550,8349],{"class":55},[36,151552,4190],{"class":98},[36,151554,151555,151558],{"class":38,"line":82},[36,151556,151557],{"class":98},"    name: ",[36,151559,151560],{"class":109},"str\n",[36,151562,151563,151566],{"class":38,"line":88},[36,151564,151565],{"class":98},"    age: ",[36,151567,151568],{"class":109},"int\n",[36,151570,151571,151574],{"class":38,"line":113},[36,151572,151573],{"class":98},"    score: ",[36,151575,151576],{"class":109},"float\n",[36,151578,151579],{"class":38,"line":119},[36,151580,247],{"emptyLinePlaceholder":246},[36,151582,151583],{"class":38,"line":131},[36,151584,247],{"emptyLinePlaceholder":246},[36,151586,151587,151589,151591,151593,151595,151597,151599,151601,151603],{"class":38,"line":137},[36,151588,149855],{"class":98},[36,151590,176],{"class":163},[36,151592,150259],{"class":98},[36,151594,150262],{"class":59},[36,151596,12874],{"class":98},[36,151598,1264],{"class":109},[36,151600,12874],{"class":98},[36,151602,1600],{"class":109},[36,151604,627],{"class":98},[36,151606,151607,151609],{"class":38,"line":147},[36,151608,30848],{"class":109},[36,151610,150416],{"class":98},[14,151612,151613,151614,828,151616,151619],{},"它会自动生成 ",[33,151615,31262],{},[33,151617,151618],{},"__repr__"," 等方法。适合数据模型类。",[559,151621,151623],{"id":151622},"_1115-小案例学生类","11.15 小案例：学生类",[26,151625,151627],{"className":30811,"code":151626,"language":30813,"meta":31,"style":31},"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",[33,151628,151629,151637,151646,151658,151668,151678,151688,151692,151701,151714,151718,151727,151733,151745,151757,151769,151781,151785,151789,151795,151805,151814,151824,151832,151840,151849,151853,151857,151865,151901,151905,151909,151934,151941],{"__ignoreMap":31},[36,151630,151631,151633,151635],{"class":38,"line":39},[36,151632,15133],{"class":163},[36,151634,8349],{"class":55},[36,151636,4190],{"class":98},[36,151638,151639,151641,151643],{"class":38,"line":46},[36,151640,31234],{"class":163},[36,151642,31237],{"class":109},[36,151644,151645],{"class":98},"(self, student_id, name, age, score):\n",[36,151647,151648,151650,151653,151655],{"class":38,"line":52},[36,151649,31278],{"class":109},[36,151651,151652],{"class":98},".student_id ",[36,151654,176],{"class":163},[36,151656,151657],{"class":98}," student_id\n",[36,151659,151660,151662,151664,151666],{"class":38,"line":66},[36,151661,31278],{"class":109},[36,151663,150164],{"class":98},[36,151665,176],{"class":163},[36,151667,150169],{"class":98},[36,151669,151670,151672,151674,151676],{"class":38,"line":72},[36,151671,31278],{"class":109},[36,151673,150176],{"class":98},[36,151675,176],{"class":163},[36,151677,150181],{"class":98},[36,151679,151680,151682,151684,151686],{"class":38,"line":82},[36,151681,31278],{"class":109},[36,151683,150188],{"class":98},[36,151685,176],{"class":163},[36,151687,2058],{"class":98},[36,151689,151690],{"class":38,"line":88},[36,151691,247],{"emptyLinePlaceholder":246},[36,151693,151694,151696,151699],{"class":38,"line":113},[36,151695,31234],{"class":163},[36,151697,151698],{"class":55}," is_passed",[36,151700,31240],{"class":98},[36,151702,151703,151705,151707,151709,151711],{"class":38,"line":119},[36,151704,15191],{"class":163},[36,151706,39306],{"class":109},[36,151708,150188],{"class":98},[36,151710,2178],{"class":163},[36,151712,151713],{"class":109}," 60\n",[36,151715,151716],{"class":38,"line":131},[36,151717,247],{"emptyLinePlaceholder":246},[36,151719,151720,151722,151725],{"class":38,"line":137},[36,151721,31234],{"class":163},[36,151723,151724],{"class":55}," to_dict",[36,151726,31240],{"class":98},[36,151728,151729,151731],{"class":38,"line":147},[36,151730,15191],{"class":163},[36,151732,16011],{"class":98},[36,151734,151735,151738,151740,151742],{"class":38,"line":153},[36,151736,151737],{"class":59},"            \"student_id\"",[36,151739,51869],{"class":98},[36,151741,31256],{"class":109},[36,151743,151744],{"class":98},".student_id,\n",[36,151746,151747,151750,151752,151754],{"class":38,"line":191},[36,151748,151749],{"class":59},"            \"name\"",[36,151751,51869],{"class":98},[36,151753,31256],{"class":109},[36,151755,151756],{"class":98},".name,\n",[36,151758,151759,151762,151764,151766],{"class":38,"line":197},[36,151760,151761],{"class":59},"            \"age\"",[36,151763,51869],{"class":98},[36,151765,31256],{"class":109},[36,151767,151768],{"class":98},".age,\n",[36,151770,151771,151774,151776,151778],{"class":38,"line":217},[36,151772,151773],{"class":59},"            \"score\"",[36,151775,51869],{"class":98},[36,151777,31256],{"class":109},[36,151779,151780],{"class":98},".score,\n",[36,151782,151783],{"class":38,"line":223},[36,151784,2987],{"class":98},[36,151786,151787],{"class":38,"line":243},[36,151788,247],{"emptyLinePlaceholder":246},[36,151790,151791,151793],{"class":38,"line":250},[36,151792,151388],{"class":55},[36,151794,151391],{"class":109},[36,151796,151797,151799,151802],{"class":38,"line":256},[36,151798,31234],{"class":163},[36,151800,151801],{"class":55}," from_dict",[36,151803,151804],{"class":98},"(cls, data):\n",[36,151806,151807,151809,151811],{"class":38,"line":273},[36,151808,15191],{"class":163},[36,151810,151408],{"class":109},[36,151812,151813],{"class":98},"(\n",[36,151815,151816,151819,151822],{"class":38,"line":278},[36,151817,151818],{"class":98},"            data[",[36,151820,151821],{"class":59},"\"student_id\"",[36,151823,88268],{"class":98},[36,151825,151826,151828,151830],{"class":38,"line":284},[36,151827,151818],{"class":98},[36,151829,63111],{"class":59},[36,151831,88268],{"class":98},[36,151833,151834,151836,151838],{"class":38,"line":315},[36,151835,151818],{"class":98},[36,151837,69556],{"class":59},[36,151839,88268],{"class":98},[36,151841,151842,151844,151847],{"class":38,"line":320},[36,151843,151818],{"class":98},[36,151845,151846],{"class":59},"\"score\"",[36,151848,88268],{"class":98},[36,151850,151851],{"class":38,"line":326},[36,151852,38559],{"class":98},[36,151854,151855],{"class":38,"line":343},[36,151856,247],{"emptyLinePlaceholder":246},[36,151858,151859,151861,151863],{"class":38,"line":348},[36,151860,31234],{"class":163},[36,151862,150355],{"class":109},[36,151864,31240],{"class":98},[36,151866,151867,151869,151871,151873,151875,151878,151880,151883,151885,151887,151889,151891,151893,151895,151897,151899],{"class":38,"line":354},[36,151868,15191],{"class":163},[36,151870,150364],{"class":163},[36,151872,866],{"class":59},[36,151874,149826],{"class":109},[36,151876,151877],{"class":98},".student_id",[36,151879,1558],{"class":109},[36,151881,151882],{"class":109}," {self",[36,151884,80733],{"class":98},[36,151886,1558],{"class":109},[36,151888,151882],{"class":109},[36,151890,80745],{"class":98},[36,151892,1558],{"class":109},[36,151894,151882],{"class":109},[36,151896,150236],{"class":98},[36,151898,1558],{"class":109},[36,151900,25570],{"class":59},[36,151902,151903],{"class":38,"line":370},[36,151904,247],{"emptyLinePlaceholder":246},[36,151906,151907],{"class":38,"line":375},[36,151908,247],{"emptyLinePlaceholder":246},[36,151910,151911,151913,151915,151917,151920,151922,151924,151926,151928,151930,151932],{"class":38,"line":381},[36,151912,149855],{"class":98},[36,151914,176],{"class":163},[36,151916,150259],{"class":98},[36,151918,151919],{"class":59},"\"001\"",[36,151921,12874],{"class":98},[36,151923,150262],{"class":59},[36,151925,12874],{"class":98},[36,151927,1264],{"class":109},[36,151929,12874],{"class":98},[36,151931,1600],{"class":109},[36,151933,627],{"class":98},[36,151935,151936,151938],{"class":38,"line":399},[36,151937,30848],{"class":109},[36,151939,151940],{"class":98},"(student.is_passed())\n",[36,151942,151943,151945],{"class":38,"line":404},[36,151944,30848],{"class":109},[36,151946,151947],{"class":98},"(student.to_dict())\n",[14,151949,151950,101449,151953,151956],{},[33,151951,151952],{},"to_dict()",[33,151954,151955],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[559,151958,151960],{"id":151959},"_1116-易错点","11.16 易错点",[571,151962,151963,151969,151975,151980,151983,151986],{},[574,151964,151965,151966,28819],{},"类名推荐使用大驼峰，如 ",[33,151967,151968],{},"StudentManager",[574,151970,151971,151972,151974],{},"方法第一个参数必须写 ",[33,151973,31256],{},"，调用时不用传。",[574,151976,151977,151979],{},[33,151978,31262],{}," 不是普通方法，它在创建对象时自动执行。",[574,151981,151982],{},"私有属性不是绝对安全，只是约定和名称改写。",[574,151984,151985],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[574,151987,151988],{},"类中方法太多时，说明职责可能过重。",[559,151990,151992],{"id":151991},"_1117-本章练习","11.17 本章练习",[571,151994,151995,152001,152007,152012,152025],{},[574,151996,151997,151998,152000],{},"定义 ",[33,151999,149942],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[574,152002,151997,152003,152006],{},[33,152004,152005],{},"Account"," 类，实现存款、取款、查询余额。",[574,152008,151997,152009,152011],{},[33,152010,17665],{}," 类，计算圆的周长和面积。",[574,152013,151997,152014,828,152017,152020,152021,152024],{},[33,152015,152016],{},"Dog",[33,152018,152019],{},"Cat"," 类，并用同一个函数调用它们的 ",[33,152022,152023],{},"speak()"," 方法。",[574,152026,104797,152027,152029,152030,28819],{},[33,152028,151513],{}," 定义一个商品类 ",[33,152031,152032],{},"Product",[537,152034,152035],{},"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":31,"searchDepth":46,"depth":46,"links":152037},[152038,152039,152040,152041,152042,152043,152045,152046,152047,152048,152049,152050,152051,152055,152056,152057,152058],{"id":149706,"depth":46,"text":149707},{"id":149889,"depth":46,"text":149890},{"id":149953,"depth":46,"text":149954},{"id":150030,"depth":46,"text":150031},{"id":150129,"depth":46,"text":150130},{"id":150293,"depth":46,"text":152044},"11.6 str",{"id":150419,"depth":46,"text":150420},{"id":150685,"depth":46,"text":150686},{"id":150799,"depth":46,"text":150800},{"id":150954,"depth":46,"text":150955},{"id":151078,"depth":46,"text":151079},{"id":151194,"depth":46,"text":151195},{"id":151343,"depth":46,"text":151344,"children":152052},[152053,152054],{"id":151347,"depth":52,"text":151348},{"id":151429,"depth":52,"text":151430},{"id":151507,"depth":46,"text":151508},{"id":151622,"depth":46,"text":151623},{"id":151959,"depth":46,"text":151960},{"id":151991,"depth":46,"text":151992},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149698,"description":542},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":152065,"title":152066,"body":152067,"description":542,"extension":543,"meta":155380,"navigation":246,"path":155381,"seo":155382,"stem":155383,"__hash__":155384},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":152068,"toc":155356},[152069,152072,152076,152079,152082,152111,152114,152122,152126,152130,152133,152156,152159,152165,152169,153615,153618,153639,153643,153646,153658,153661,153845,153848,153974,153977,153981,153985,154121,154125,154211,154215,154297,154301,154338,154342,154531,154535,154538,154768,154772,154775,154956,154959,154963,154966,154972,154975,155001,155005,155008,155022,155025,155050,155053,155067,155070,155087,155090,155107,155110,155127,155131,155157,155161,155184,155188,155191,155193,155199,155201,155222,155225,155231,155237,155241,155244,155320,155323,155327,155353],[10,152070,152066],{"id":152071},"_12-综合案例与复习路线",[559,152073,152075],{"id":152074},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,152077,152078],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,152080,152081],{},"一个合格的入门综合项目最好覆盖：",[571,152083,152084,152087,152090,152093,152096,152099,152102,152105,152108],{},[574,152085,152086],{},"输入输出。",[574,152088,152089],{},"判断和循环。",[574,152091,152092],{},"函数拆分。",[574,152094,152095],{},"列表、字典等容器。",[574,152097,152098],{},"文件持久化。",[574,152100,152101],{},"异常处理。",[574,152103,152104],{},"模块拆分。",[574,152106,152107],{},"可选：面向对象。",[574,152109,152110],{},"可选：数据可视化。",[14,152112,152113],{},"本章整理两个方向：",[571,152115,152116,152119],{},[574,152117,152118],{},"学生管理系统。",[574,152120,152121],{},"销售数据统计和可视化。",[559,152123,152125],{"id":152124},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[588,152127,152129],{"id":152128},"_1221-需求","12.2.1 需求",[14,152131,152132],{},"实现一个命令行学生管理系统：",[571,152134,152135,152138,152141,152144,152147,152150,152153],{},[574,152136,152137],{},"添加学生。",[574,152139,152140],{},"删除学生。",[574,152142,152143],{},"修改学生。",[574,152145,152146],{},"查询学生。",[574,152148,152149],{},"显示所有学生。",[574,152151,152152],{},"保存到 JSON 文件。",[574,152154,152155],{},"程序启动时自动读取 JSON 文件。",[14,152157,152158],{},"学生字段：",[26,152160,152163],{"className":152161,"code":152162,"language":5638,"meta":31},[5636],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[33,152164,152162],{"__ignoreMap":31},[559,152166,152168],{"id":152167},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[26,152170,152172],{"className":30811,"code":152171,"language":30813,"meta":31,"style":31},"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",[33,152173,152174,152180,152190,152194,152208,152212,152216,152225,152237,152243,152247,152253,152284,152294,152301,152312,152318,152322,152326,152336,152367,152393,152397,152401,152410,152421,152432,152443,152454,152465,152476,152487,152491,152495,152505,152517,152533,152540,152547,152551,152555,152565,152573,152580,152593,152603,152614,152618,152622,152631,152639,152645,152657,152665,152676,152680,152684,152693,152709,152713,152720,152731,152736,152740,152756,152771,152786,152790,152795,152803,152811,152819,152827,152831,152836,152847,152851,152855,152864,152879,152889,152893,152905,152916,152920,152924,152929,152933,152944,152948,152952,152961,152976,152984,152988,153000,153010,153014,153018,153033,153046,153059,153063,153076,153088,153100,153104,153108,153119,153123,153127,153136,153151,153159,153163,153175,153185,153189,153193,153198,153202,153206,153216,153222,153244,153263,153282,153301,153306,153310,153314,153323,153331,153342,153346,153350,153376,153386,153391,153395,153399,153407,153417,153421,153429,153434,153450,153454,153468,153473,153487,153492,153505,153510,153523,153528,153541,153546,153559,153570,153574,153580,153591,153595,153599,153611],{"__ignoreMap":31},[36,152175,152176,152178],{"class":38,"line":39},[36,152177,30825],{"class":163},[36,152179,147465],{"class":98},[36,152181,152182,152184,152186,152188],{"class":38,"line":46},[36,152183,31170],{"class":163},[36,152185,108742],{"class":98},[36,152187,30825],{"class":163},[36,152189,108747],{"class":98},[36,152191,152192],{"class":38,"line":52},[36,152193,247],{"emptyLinePlaceholder":246},[36,152195,152196,152199,152201,152203,152206],{"class":38,"line":66},[36,152197,152198],{"class":109},"DATA_FILE",[36,152200,14003],{"class":163},[36,152202,108976],{"class":98},[36,152204,152205],{"class":59},"\"students.json\"",[36,152207,627],{"class":98},[36,152209,152210],{"class":38,"line":72},[36,152211,247],{"emptyLinePlaceholder":246},[36,152213,152214],{"class":38,"line":82},[36,152215,247],{"emptyLinePlaceholder":246},[36,152217,152218,152220,152223],{"class":38,"line":88},[36,152219,32380],{"class":163},[36,152221,152222],{"class":55}," load_students",[36,152224,32386],{"class":98},[36,152226,152227,152229,152231,152234],{"class":38,"line":113},[36,152228,3552],{"class":163},[36,152230,39363],{"class":163},[36,152232,152233],{"class":109}," DATA_FILE",[36,152235,152236],{"class":98},".exists():\n",[36,152238,152239,152241],{"class":38,"line":119},[36,152240,15191],{"class":163},[36,152242,52270],{"class":98},[36,152244,152245],{"class":38,"line":131},[36,152246,247],{"emptyLinePlaceholder":246},[36,152248,152249,152251],{"class":38,"line":137},[36,152250,126158],{"class":163},[36,152252,4190],{"class":98},[36,152254,152255,152258,152260,152262,152264,152266,152268,152270,152272,152274,152276,152278,152280,152282],{"class":38,"line":147},[36,152256,152257],{"class":163},"        with",[36,152259,147165],{"class":109},[36,152261,621],{"class":98},[36,152263,152198],{"class":109},[36,152265,12874],{"class":98},[36,152267,147175],{"class":59},[36,152269,12874],{"class":98},[36,152271,147180],{"class":5667},[36,152273,176],{"class":163},[36,152275,147185],{"class":59},[36,152277,14153],{"class":98},[36,152279,31816],{"class":163},[36,152281,148527],{"class":5667},[36,152283,4190],{"class":98},[36,152285,152286,152288,152290,152292],{"class":38,"line":153},[36,152287,16171],{"class":163},[36,152289,148538],{"class":98},[36,152291,45787],{"class":5667},[36,152293,627],{"class":98},[36,152295,152296,152298],{"class":38,"line":191},[36,152297,126186],{"class":163},[36,152299,152300],{"class":98}," json.JSONDecodeError:\n",[36,152302,152303,152305,152307,152310],{"class":38,"line":197},[36,152304,32884],{"class":109},[36,152306,621],{"class":98},[36,152308,152309],{"class":59},"\"数据文件格式错误，已使用空数据启动\"",[36,152311,627],{"class":98},[36,152313,152314,152316],{"class":38,"line":217},[36,152315,15191],{"class":163},[36,152317,52270],{"class":98},[36,152319,152320],{"class":38,"line":223},[36,152321,247],{"emptyLinePlaceholder":246},[36,152323,152324],{"class":38,"line":243},[36,152325,247],{"emptyLinePlaceholder":246},[36,152327,152328,152330,152333],{"class":38,"line":250},[36,152329,32380],{"class":163},[36,152331,152332],{"class":55}," save_students",[36,152334,152335],{"class":98},"(students):\n",[36,152337,152338,152340,152342,152344,152346,152348,152351,152353,152355,152357,152359,152361,152363,152365],{"class":38,"line":256},[36,152339,34611],{"class":163},[36,152341,147165],{"class":109},[36,152343,621],{"class":98},[36,152345,152198],{"class":109},[36,152347,12874],{"class":98},[36,152349,152350],{"class":59},"\"w\"",[36,152352,12874],{"class":98},[36,152354,147180],{"class":5667},[36,152356,176],{"class":163},[36,152358,147185],{"class":59},[36,152360,14153],{"class":98},[36,152362,31816],{"class":163},[36,152364,148527],{"class":5667},[36,152366,4190],{"class":98},[36,152368,152369,152372,152374,152376,152378,152380,152382,152384,152387,152389,152391],{"class":38,"line":273},[36,152370,152371],{"class":98},"        json.dump(students, ",[36,152373,45787],{"class":5667},[36,152375,12874],{"class":98},[36,152377,147511],{"class":5667},[36,152379,176],{"class":163},[36,152381,34420],{"class":109},[36,152383,12874],{"class":98},[36,152385,152386],{"class":5667},"indent",[36,152388,176],{"class":163},[36,152390,694],{"class":109},[36,152392,627],{"class":98},[36,152394,152395],{"class":38,"line":278},[36,152396,247],{"emptyLinePlaceholder":246},[36,152398,152399],{"class":38,"line":284},[36,152400,247],{"emptyLinePlaceholder":246},[36,152402,152403,152405,152408],{"class":38,"line":315},[36,152404,32380],{"class":163},[36,152406,152407],{"class":55}," show_menu",[36,152409,32386],{"class":98},[36,152411,152412,152414,152416,152419],{"class":38,"line":320},[36,152413,31732],{"class":109},[36,152415,621],{"class":98},[36,152417,152418],{"class":59},"\"====== 学生管理系统 ======\"",[36,152420,627],{"class":98},[36,152422,152423,152425,152427,152430],{"class":38,"line":326},[36,152424,31732],{"class":109},[36,152426,621],{"class":98},[36,152428,152429],{"class":59},"\"1. 添加学生\"",[36,152431,627],{"class":98},[36,152433,152434,152436,152438,152441],{"class":38,"line":343},[36,152435,31732],{"class":109},[36,152437,621],{"class":98},[36,152439,152440],{"class":59},"\"2. 删除学生\"",[36,152442,627],{"class":98},[36,152444,152445,152447,152449,152452],{"class":38,"line":348},[36,152446,31732],{"class":109},[36,152448,621],{"class":98},[36,152450,152451],{"class":59},"\"3. 修改学生\"",[36,152453,627],{"class":98},[36,152455,152456,152458,152460,152463],{"class":38,"line":354},[36,152457,31732],{"class":109},[36,152459,621],{"class":98},[36,152461,152462],{"class":59},"\"4. 查询学生\"",[36,152464,627],{"class":98},[36,152466,152467,152469,152471,152474],{"class":38,"line":370},[36,152468,31732],{"class":109},[36,152470,621],{"class":98},[36,152472,152473],{"class":59},"\"5. 显示所有学生\"",[36,152475,627],{"class":98},[36,152477,152478,152480,152482,152485],{"class":38,"line":375},[36,152479,31732],{"class":109},[36,152481,621],{"class":98},[36,152483,152484],{"class":59},"\"0. 退出系统\"",[36,152486,627],{"class":98},[36,152488,152489],{"class":38,"line":381},[36,152490,247],{"emptyLinePlaceholder":246},[36,152492,152493],{"class":38,"line":399},[36,152494,247],{"emptyLinePlaceholder":246},[36,152496,152497,152499,152502],{"class":38,"line":404},[36,152498,32380],{"class":163},[36,152500,152501],{"class":55}," find_student",[36,152503,152504],{"class":98},"(students, student_id):\n",[36,152506,152507,152509,152512,152514],{"class":38,"line":410},[36,152508,3652],{"class":163},[36,152510,152511],{"class":98}," student ",[36,152513,26480],{"class":163},[36,152515,152516],{"class":98}," students:\n",[36,152518,152519,152521,152524,152526,152528,152530],{"class":38,"line":423},[36,152520,2955],{"class":163},[36,152522,152523],{"class":98}," student[",[36,152525,151821],{"class":59},[36,152527,4894],{"class":98},[36,152529,3400],{"class":163},[36,152531,152532],{"class":98}," student_id:\n",[36,152534,152535,152537],{"class":38,"line":436},[36,152536,16171],{"class":163},[36,152538,152539],{"class":98}," student\n",[36,152541,152542,152544],{"class":38,"line":441},[36,152543,4541],{"class":163},[36,152545,152546],{"class":109}," None\n",[36,152548,152549],{"class":38,"line":447},[36,152550,247],{"emptyLinePlaceholder":246},[36,152552,152553],{"class":38,"line":465},[36,152554,247],{"emptyLinePlaceholder":246},[36,152556,152557,152559,152562],{"class":38,"line":470},[36,152558,32380],{"class":163},[36,152560,152561],{"class":55}," input_int",[36,152563,152564],{"class":98},"(prompt):\n",[36,152566,152567,152569,152571],{"class":38,"line":476},[36,152568,2710],{"class":163},[36,152570,95724],{"class":109},[36,152572,4190],{"class":98},[36,152574,152575,152578],{"class":38,"line":496},[36,152576,152577],{"class":163},"        try",[36,152579,4190],{"class":98},[36,152581,152582,152584,152586,152588,152590],{"class":38,"line":501},[36,152583,16171],{"class":163},[36,152585,2841],{"class":109},[36,152587,621],{"class":98},[36,152589,54253],{"class":109},[36,152591,152592],{"class":98},"(prompt))\n",[36,152594,152595,152598,152601],{"class":38,"line":507},[36,152596,152597],{"class":163},"        except",[36,152599,152600],{"class":109}," ValueError",[36,152602,4190],{"class":98},[36,152604,152605,152607,152609,152612],{"class":38,"line":517},[36,152606,35083],{"class":109},[36,152608,621],{"class":98},[36,152610,152611],{"class":59},"\"请输入整数\"",[36,152613,627],{"class":98},[36,152615,152616],{"class":38,"line":522},[36,152617,247],{"emptyLinePlaceholder":246},[36,152619,152620],{"class":38,"line":528},[36,152621,247],{"emptyLinePlaceholder":246},[36,152623,152624,152626,152629],{"class":38,"line":10203},[36,152625,32380],{"class":163},[36,152627,152628],{"class":55}," input_float",[36,152630,152564],{"class":98},[36,152632,152633,152635,152637],{"class":38,"line":10227},[36,152634,2710],{"class":163},[36,152636,95724],{"class":109},[36,152638,4190],{"class":98},[36,152640,152641,152643],{"class":38,"line":10232},[36,152642,152577],{"class":163},[36,152644,4190],{"class":98},[36,152646,152647,152649,152651,152653,152655],{"class":38,"line":10237},[36,152648,16171],{"class":163},[36,152650,110228],{"class":109},[36,152652,621],{"class":98},[36,152654,54253],{"class":109},[36,152656,152592],{"class":98},[36,152658,152659,152661,152663],{"class":38,"line":10242},[36,152660,152597],{"class":163},[36,152662,152600],{"class":109},[36,152664,4190],{"class":98},[36,152666,152667,152669,152671,152674],{"class":38,"line":10251},[36,152668,35083],{"class":109},[36,152670,621],{"class":98},[36,152672,152673],{"class":59},"\"请输入数字\"",[36,152675,627],{"class":98},[36,152677,152678],{"class":38,"line":10256},[36,152679,247],{"emptyLinePlaceholder":246},[36,152681,152682],{"class":38,"line":10262},[36,152683,247],{"emptyLinePlaceholder":246},[36,152685,152686,152688,152691],{"class":38,"line":10283},[36,152687,32380],{"class":163},[36,152689,152690],{"class":55}," add_student",[36,152692,152335],{"class":98},[36,152694,152695,152698,152700,152702,152704,152707],{"class":38,"line":10289},[36,152696,152697],{"class":98},"    student_id ",[36,152699,176],{"class":163},[36,152701,61037],{"class":109},[36,152703,621],{"class":98},[36,152705,152706],{"class":59},"\"请输入学号:\"",[36,152708,627],{"class":98},[36,152710,152711],{"class":38,"line":10303},[36,152712,247],{"emptyLinePlaceholder":246},[36,152714,152715,152717],{"class":38,"line":10309},[36,152716,3552],{"class":163},[36,152718,152719],{"class":98}," find_student(students, student_id):\n",[36,152721,152722,152724,152726,152729],{"class":38,"line":10336},[36,152723,32884],{"class":109},[36,152725,621],{"class":98},[36,152727,152728],{"class":59},"\"学号已存在\"",[36,152730,627],{"class":98},[36,152732,152733],{"class":38,"line":10345},[36,152734,152735],{"class":163},"        return\n",[36,152737,152738],{"class":38,"line":10351},[36,152739,247],{"emptyLinePlaceholder":246},[36,152741,152742,152745,152747,152749,152751,152754],{"class":38,"line":10359},[36,152743,152744],{"class":98},"    name ",[36,152746,176],{"class":163},[36,152748,61037],{"class":109},[36,152750,621],{"class":98},[36,152752,152753],{"class":59},"\"请输入姓名:\"",[36,152755,627],{"class":98},[36,152757,152758,152761,152763,152766,152769],{"class":38,"line":10364},[36,152759,152760],{"class":98},"    age ",[36,152762,176],{"class":163},[36,152764,152765],{"class":98}," input_int(",[36,152767,152768],{"class":59},"\"请输入年龄:\"",[36,152770,627],{"class":98},[36,152772,152773,152776,152778,152781,152784],{"class":38,"line":17043},[36,152774,152775],{"class":98},"    score ",[36,152777,176],{"class":163},[36,152779,152780],{"class":98}," input_float(",[36,152782,152783],{"class":59},"\"请输入成绩:\"",[36,152785,627],{"class":98},[36,152787,152788],{"class":38,"line":17049},[36,152789,247],{"emptyLinePlaceholder":246},[36,152791,152792],{"class":38,"line":17072},[36,152793,152794],{"class":98},"    students.append({\n",[36,152796,152797,152800],{"class":38,"line":17078},[36,152798,152799],{"class":59},"        \"student_id\"",[36,152801,152802],{"class":98},": student_id,\n",[36,152804,152805,152808],{"class":38,"line":17101},[36,152806,152807],{"class":59},"        \"name\"",[36,152809,152810],{"class":98},": name,\n",[36,152812,152813,152816],{"class":38,"line":17115},[36,152814,152815],{"class":59},"        \"age\"",[36,152817,152818],{"class":98},": age,\n",[36,152820,152821,152824],{"class":38,"line":17135},[36,152822,152823],{"class":59},"        \"score\"",[36,152825,152826],{"class":98},": score,\n",[36,152828,152829],{"class":38,"line":17141},[36,152830,33894],{"class":98},[36,152832,152833],{"class":38,"line":17152},[36,152834,152835],{"class":98},"    save_students(students)\n",[36,152837,152838,152840,152842,152845],{"class":38,"line":17175},[36,152839,31732],{"class":109},[36,152841,621],{"class":98},[36,152843,152844],{"class":59},"\"添加成功\"",[36,152846,627],{"class":98},[36,152848,152849],{"class":38,"line":17197},[36,152850,247],{"emptyLinePlaceholder":246},[36,152852,152853],{"class":38,"line":17202},[36,152854,247],{"emptyLinePlaceholder":246},[36,152856,152857,152859,152862],{"class":38,"line":17208},[36,152858,32380],{"class":163},[36,152860,152861],{"class":55}," delete_student",[36,152863,152335],{"class":98},[36,152865,152866,152868,152870,152872,152874,152877],{"class":38,"line":17222},[36,152867,152697],{"class":98},[36,152869,176],{"class":163},[36,152871,61037],{"class":109},[36,152873,621],{"class":98},[36,152875,152876],{"class":59},"\"请输入要删除的学号:\"",[36,152878,627],{"class":98},[36,152880,152881,152884,152886],{"class":38,"line":17235},[36,152882,152883],{"class":98},"    student ",[36,152885,176],{"class":163},[36,152887,152888],{"class":98}," find_student(students, student_id)\n",[36,152890,152891],{"class":38,"line":17240},[36,152892,247],{"emptyLinePlaceholder":246},[36,152894,152895,152897,152899,152901,152903],{"class":38,"line":17254},[36,152896,3552],{"class":163},[36,152898,152511],{"class":98},[36,152900,39360],{"class":163},[36,152902,39366],{"class":109},[36,152904,4190],{"class":98},[36,152906,152907,152909,152911,152914],{"class":38,"line":17259},[36,152908,32884],{"class":109},[36,152910,621],{"class":98},[36,152912,152913],{"class":59},"\"学生不存在\"",[36,152915,627],{"class":98},[36,152917,152918],{"class":38,"line":17265},[36,152919,152735],{"class":163},[36,152921,152922],{"class":38,"line":17270},[36,152923,247],{"emptyLinePlaceholder":246},[36,152925,152926],{"class":38,"line":17284},[36,152927,152928],{"class":98},"    students.remove(student)\n",[36,152930,152931],{"class":38,"line":17289},[36,152932,152835],{"class":98},[36,152934,152935,152937,152939,152942],{"class":38,"line":17294},[36,152936,31732],{"class":109},[36,152938,621],{"class":98},[36,152940,152941],{"class":59},"\"删除成功\"",[36,152943,627],{"class":98},[36,152945,152946],{"class":38,"line":17308},[36,152947,247],{"emptyLinePlaceholder":246},[36,152949,152950],{"class":38,"line":17320},[36,152951,247],{"emptyLinePlaceholder":246},[36,152953,152954,152956,152959],{"class":38,"line":17325},[36,152955,32380],{"class":163},[36,152957,152958],{"class":55}," update_student",[36,152960,152335],{"class":98},[36,152962,152963,152965,152967,152969,152971,152974],{"class":38,"line":17338},[36,152964,152697],{"class":98},[36,152966,176],{"class":163},[36,152968,61037],{"class":109},[36,152970,621],{"class":98},[36,152972,152973],{"class":59},"\"请输入要修改的学号:\"",[36,152975,627],{"class":98},[36,152977,152978,152980,152982],{"class":38,"line":17343},[36,152979,152883],{"class":98},[36,152981,176],{"class":163},[36,152983,152888],{"class":98},[36,152985,152986],{"class":38,"line":17348},[36,152987,247],{"emptyLinePlaceholder":246},[36,152989,152990,152992,152994,152996,152998],{"class":38,"line":17353},[36,152991,3552],{"class":163},[36,152993,152511],{"class":98},[36,152995,39360],{"class":163},[36,152997,39366],{"class":109},[36,152999,4190],{"class":98},[36,153001,153002,153004,153006,153008],{"class":38,"line":17366},[36,153003,32884],{"class":109},[36,153005,621],{"class":98},[36,153007,152913],{"class":59},[36,153009,627],{"class":98},[36,153011,153012],{"class":38,"line":17371},[36,153013,152735],{"class":163},[36,153015,153016],{"class":38,"line":33066},[36,153017,247],{"emptyLinePlaceholder":246},[36,153019,153020,153022,153024,153026,153028,153031],{"class":38,"line":33072},[36,153021,152744],{"class":98},[36,153023,176],{"class":163},[36,153025,61037],{"class":109},[36,153027,621],{"class":98},[36,153029,153030],{"class":59},"\"请输入新姓名:\"",[36,153032,627],{"class":98},[36,153034,153035,153037,153039,153041,153044],{"class":38,"line":33078},[36,153036,152760],{"class":98},[36,153038,176],{"class":163},[36,153040,152765],{"class":98},[36,153042,153043],{"class":59},"\"请输入新年龄:\"",[36,153045,627],{"class":98},[36,153047,153048,153050,153052,153054,153057],{"class":38,"line":33084},[36,153049,152775],{"class":98},[36,153051,176],{"class":163},[36,153053,152780],{"class":98},[36,153055,153056],{"class":59},"\"请输入新成绩:\"",[36,153058,627],{"class":98},[36,153060,153061],{"class":38,"line":33090},[36,153062,247],{"emptyLinePlaceholder":246},[36,153064,153065,153068,153070,153072,153074],{"class":38,"line":33101},[36,153066,153067],{"class":98},"    student[",[36,153069,63111],{"class":59},[36,153071,4894],{"class":98},[36,153073,176],{"class":163},[36,153075,150169],{"class":98},[36,153077,153078,153080,153082,153084,153086],{"class":38,"line":33107},[36,153079,153067],{"class":98},[36,153081,69556],{"class":59},[36,153083,4894],{"class":98},[36,153085,176],{"class":163},[36,153087,150181],{"class":98},[36,153089,153090,153092,153094,153096,153098],{"class":38,"line":33127},[36,153091,153067],{"class":98},[36,153093,151846],{"class":59},[36,153095,4894],{"class":98},[36,153097,176],{"class":163},[36,153099,2058],{"class":98},[36,153101,153102],{"class":38,"line":33133},[36,153103,247],{"emptyLinePlaceholder":246},[36,153105,153106],{"class":38,"line":33144},[36,153107,152835],{"class":98},[36,153109,153110,153112,153114,153117],{"class":38,"line":33150},[36,153111,31732],{"class":109},[36,153113,621],{"class":98},[36,153115,153116],{"class":59},"\"修改成功\"",[36,153118,627],{"class":98},[36,153120,153121],{"class":38,"line":33156},[36,153122,247],{"emptyLinePlaceholder":246},[36,153124,153125],{"class":38,"line":33162},[36,153126,247],{"emptyLinePlaceholder":246},[36,153128,153129,153131,153134],{"class":38,"line":33168},[36,153130,32380],{"class":163},[36,153132,153133],{"class":55}," query_student",[36,153135,152335],{"class":98},[36,153137,153138,153140,153142,153144,153146,153149],{"class":38,"line":33174},[36,153139,152697],{"class":98},[36,153141,176],{"class":163},[36,153143,61037],{"class":109},[36,153145,621],{"class":98},[36,153147,153148],{"class":59},"\"请输入要查询的学号:\"",[36,153150,627],{"class":98},[36,153152,153153,153155,153157],{"class":38,"line":33180},[36,153154,152883],{"class":98},[36,153156,176],{"class":163},[36,153158,152888],{"class":98},[36,153160,153161],{"class":38,"line":33186},[36,153162,247],{"emptyLinePlaceholder":246},[36,153164,153165,153167,153169,153171,153173],{"class":38,"line":33206},[36,153166,3552],{"class":163},[36,153168,152511],{"class":98},[36,153170,39360],{"class":163},[36,153172,39366],{"class":109},[36,153174,4190],{"class":98},[36,153176,153177,153179,153181,153183],{"class":38,"line":33212},[36,153178,32884],{"class":109},[36,153180,621],{"class":98},[36,153182,152913],{"class":59},[36,153184,627],{"class":98},[36,153186,153187],{"class":38,"line":33228},[36,153188,152735],{"class":163},[36,153190,153191],{"class":38,"line":33234},[36,153192,247],{"emptyLinePlaceholder":246},[36,153194,153195],{"class":38,"line":33248},[36,153196,153197],{"class":98},"    print_student(student)\n",[36,153199,153200],{"class":38,"line":33254},[36,153201,247],{"emptyLinePlaceholder":246},[36,153203,153204],{"class":38,"line":33269},[36,153205,247],{"emptyLinePlaceholder":246},[36,153207,153208,153210,153213],{"class":38,"line":33275},[36,153209,32380],{"class":163},[36,153211,153212],{"class":55}," print_student",[36,153214,153215],{"class":98},"(student):\n",[36,153217,153218,153220],{"class":38,"line":33284},[36,153219,31732],{"class":109},[36,153221,151813],{"class":98},[36,153223,153224,153227,153229,153231,153234,153237,153239,153242],{"class":38,"line":33290},[36,153225,153226],{"class":163},"        f",[36,153228,866],{"class":59},[36,153230,1509],{"class":109},[36,153232,153233],{"class":98},"student[",[36,153235,153236],{"class":59},"'student_id'",[36,153238,1552],{"class":98},[36,153240,153241],{"class":109},"}\\t",[36,153243,25570],{"class":59},[36,153245,153246,153248,153250,153252,153254,153257,153259,153261],{"class":38,"line":33299},[36,153247,153226],{"class":163},[36,153249,866],{"class":59},[36,153251,1509],{"class":109},[36,153253,153233],{"class":98},[36,153255,153256],{"class":59},"'name'",[36,153258,1552],{"class":98},[36,153260,153241],{"class":109},[36,153262,25570],{"class":59},[36,153264,153265,153267,153269,153271,153273,153276,153278,153280],{"class":38,"line":33305},[36,153266,153226],{"class":163},[36,153268,866],{"class":59},[36,153270,1509],{"class":109},[36,153272,153233],{"class":98},[36,153274,153275],{"class":59},"'age'",[36,153277,1552],{"class":98},[36,153279,153241],{"class":109},[36,153281,25570],{"class":59},[36,153283,153284,153286,153288,153290,153292,153295,153297,153299],{"class":38,"line":33311},[36,153285,153226],{"class":163},[36,153287,866],{"class":59},[36,153289,1509],{"class":109},[36,153291,153233],{"class":98},[36,153293,153294],{"class":59},"'score'",[36,153296,1552],{"class":98},[36,153298,1558],{"class":109},[36,153300,25570],{"class":59},[36,153302,153303],{"class":38,"line":33320},[36,153304,153305],{"class":98},"    )\n",[36,153307,153308],{"class":38,"line":33326},[36,153309,247],{"emptyLinePlaceholder":246},[36,153311,153312],{"class":38,"line":33337},[36,153313,247],{"emptyLinePlaceholder":246},[36,153315,153316,153318,153321],{"class":38,"line":33343},[36,153317,32380],{"class":163},[36,153319,153320],{"class":55}," show_all_students",[36,153322,152335],{"class":98},[36,153324,153325,153327,153329],{"class":38,"line":33362},[36,153326,3552],{"class":163},[36,153328,39363],{"class":163},[36,153330,152516],{"class":98},[36,153332,153333,153335,153337,153340],{"class":38,"line":33368},[36,153334,32884],{"class":109},[36,153336,621],{"class":98},[36,153338,153339],{"class":59},"\"暂无学生\"",[36,153341,627],{"class":98},[36,153343,153344],{"class":38,"line":33379},[36,153345,152735],{"class":163},[36,153347,153348],{"class":38,"line":33385},[36,153349,247],{"emptyLinePlaceholder":246},[36,153351,153352,153354,153356,153359,153361,153364,153366,153369,153371,153374],{"class":38,"line":33405},[36,153353,31732],{"class":109},[36,153355,621],{"class":98},[36,153357,153358],{"class":59},"\"学号",[36,153360,1712],{"class":109},[36,153362,153363],{"class":59},"姓名",[36,153365,1712],{"class":109},[36,153367,153368],{"class":59},"年龄",[36,153370,1712],{"class":109},[36,153372,153373],{"class":59},"成绩\"",[36,153375,627],{"class":98},[36,153377,153378,153380,153382,153384],{"class":38,"line":33421},[36,153379,3652],{"class":163},[36,153381,152511],{"class":98},[36,153383,26480],{"class":163},[36,153385,152516],{"class":98},[36,153387,153388],{"class":38,"line":33427},[36,153389,153390],{"class":98},"        print_student(student)\n",[36,153392,153393],{"class":38,"line":33441},[36,153394,247],{"emptyLinePlaceholder":246},[36,153396,153397],{"class":38,"line":33447},[36,153398,247],{"emptyLinePlaceholder":246},[36,153400,153401,153403,153405],{"class":38,"line":33453},[36,153402,32380],{"class":163},[36,153404,2432],{"class":55},[36,153406,32386],{"class":98},[36,153408,153409,153412,153414],{"class":38,"line":33464},[36,153410,153411],{"class":98},"    students ",[36,153413,176],{"class":163},[36,153415,153416],{"class":98}," load_students()\n",[36,153418,153419],{"class":38,"line":33470},[36,153420,247],{"emptyLinePlaceholder":246},[36,153422,153423,153425,153427],{"class":38,"line":33476},[36,153424,2710],{"class":163},[36,153426,95724],{"class":109},[36,153428,4190],{"class":98},[36,153430,153431],{"class":38,"line":33486},[36,153432,153433],{"class":98},"        show_menu()\n",[36,153435,153436,153439,153441,153443,153445,153448],{"class":38,"line":33492},[36,153437,153438],{"class":98},"        choice ",[36,153440,176],{"class":163},[36,153442,61037],{"class":109},[36,153444,621],{"class":98},[36,153446,153447],{"class":59},"\"请输入操作:\"",[36,153449,627],{"class":98},[36,153451,153452],{"class":38,"line":33503},[36,153453,247],{"emptyLinePlaceholder":246},[36,153455,153456,153458,153461,153463,153466],{"class":38,"line":33509},[36,153457,2955],{"class":163},[36,153459,153460],{"class":98}," choice ",[36,153462,3400],{"class":163},[36,153464,153465],{"class":59}," \"1\"",[36,153467,4190],{"class":98},[36,153469,153470],{"class":38,"line":33519},[36,153471,153472],{"class":98},"            add_student(students)\n",[36,153474,153475,153478,153480,153482,153485],{"class":38,"line":33524},[36,153476,153477],{"class":163},"        elif",[36,153479,153460],{"class":98},[36,153481,3400],{"class":163},[36,153483,153484],{"class":59}," \"2\"",[36,153486,4190],{"class":98},[36,153488,153489],{"class":38,"line":33530},[36,153490,153491],{"class":98},"            delete_student(students)\n",[36,153493,153494,153496,153498,153500,153503],{"class":38,"line":33579},[36,153495,153477],{"class":163},[36,153497,153460],{"class":98},[36,153499,3400],{"class":163},[36,153501,153502],{"class":59}," \"3\"",[36,153504,4190],{"class":98},[36,153506,153507],{"class":38,"line":33626},[36,153508,153509],{"class":98},"            update_student(students)\n",[36,153511,153512,153514,153516,153518,153521],{"class":38,"line":33631},[36,153513,153477],{"class":163},[36,153515,153460],{"class":98},[36,153517,3400],{"class":163},[36,153519,153520],{"class":59}," \"4\"",[36,153522,4190],{"class":98},[36,153524,153525],{"class":38,"line":33637},[36,153526,153527],{"class":98},"            query_student(students)\n",[36,153529,153530,153532,153534,153536,153539],{"class":38,"line":33656},[36,153531,153477],{"class":163},[36,153533,153460],{"class":98},[36,153535,3400],{"class":163},[36,153537,153538],{"class":59}," \"5\"",[36,153540,4190],{"class":98},[36,153542,153543],{"class":38,"line":33662},[36,153544,153545],{"class":98},"            show_all_students(students)\n",[36,153547,153548,153550,153552,153554,153557],{"class":38,"line":33682},[36,153549,153477],{"class":163},[36,153551,153460],{"class":98},[36,153553,3400],{"class":163},[36,153555,153556],{"class":59}," \"0\"",[36,153558,4190],{"class":98},[36,153560,153561,153563,153565,153568],{"class":38,"line":33688},[36,153562,35083],{"class":109},[36,153564,621],{"class":98},[36,153566,153567],{"class":59},"\"退出系统\"",[36,153569,627],{"class":98},[36,153571,153572],{"class":38,"line":33694},[36,153573,115529],{"class":163},[36,153575,153576,153578],{"class":38,"line":33704},[36,153577,2992],{"class":163},[36,153579,4190],{"class":98},[36,153581,153582,153584,153586,153589],{"class":38,"line":33709},[36,153583,35083],{"class":109},[36,153585,621],{"class":98},[36,153587,153588],{"class":59},"\"输入错误\"",[36,153590,627],{"class":98},[36,153592,153593],{"class":38,"line":33715},[36,153594,247],{"emptyLinePlaceholder":246},[36,153596,153597],{"class":38,"line":33731},[36,153598,247],{"emptyLinePlaceholder":246},[36,153600,153601,153603,153605,153607,153609],{"class":38,"line":33776},[36,153602,2010],{"class":163},[36,153604,31653],{"class":109},[36,153606,101990],{"class":163},[36,153608,101993],{"class":59},[36,153610,4190],{"class":98},[36,153612,153613],{"class":38,"line":33782},[36,153614,102000],{"class":98},[14,153616,153617],{},"这个项目串联了：",[571,153619,153620,153623,153626,153629,153632,153634],{},[574,153621,153622],{},"菜单循环。",[574,153624,153625],{},"函数封装。",[574,153627,153628],{},"列表字典。",[574,153630,153631],{},"JSON 读写。",[574,153633,152101],{},[574,153635,153636,28819],{},[33,153637,153638],{},"if __name__ == \"__main__\"",[559,153640,153642],{"id":153641},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,153644,153645],{},"可以进一步拆成两个类：",[571,153647,153648,153653],{},[574,153649,153650,153652],{},[33,153651,149942],{},"：表示单个学生。",[574,153654,153655,153657],{},[33,153656,151968],{},"：负责学生增删改查和文件保存。",[14,153659,153660],{},"示意代码：",[26,153662,153664],{"className":30811,"code":153663,"language":30813,"meta":31,"style":31},"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",[33,153665,153666,153676,153680,153684,153688,153696,153703,153709,153715,153721,153725,153733,153739,153749,153759,153769,153779,153783,153787,153793,153801,153809,153817,153825,153833,153841],{"__ignoreMap":31},[36,153667,153668,153670,153672,153674],{"class":38,"line":39},[36,153669,31170],{"class":163},[36,153671,151526],{"class":98},[36,153673,30825],{"class":163},[36,153675,151531],{"class":98},[36,153677,153678],{"class":38,"line":46},[36,153679,247],{"emptyLinePlaceholder":246},[36,153681,153682],{"class":38,"line":52},[36,153683,247],{"emptyLinePlaceholder":246},[36,153685,153686],{"class":38,"line":66},[36,153687,151544],{"class":55},[36,153689,153690,153692,153694],{"class":38,"line":72},[36,153691,15133],{"class":163},[36,153693,8349],{"class":55},[36,153695,4190],{"class":98},[36,153697,153698,153701],{"class":38,"line":82},[36,153699,153700],{"class":98},"    student_id: ",[36,153702,151560],{"class":109},[36,153704,153705,153707],{"class":38,"line":88},[36,153706,151557],{"class":98},[36,153708,151560],{"class":109},[36,153710,153711,153713],{"class":38,"line":113},[36,153712,151565],{"class":98},[36,153714,151568],{"class":109},[36,153716,153717,153719],{"class":38,"line":119},[36,153718,151573],{"class":98},[36,153720,151576],{"class":109},[36,153722,153723],{"class":38,"line":131},[36,153724,247],{"emptyLinePlaceholder":246},[36,153726,153727,153729,153731],{"class":38,"line":137},[36,153728,31234],{"class":163},[36,153730,151724],{"class":55},[36,153732,31240],{"class":98},[36,153734,153735,153737],{"class":38,"line":147},[36,153736,15191],{"class":163},[36,153738,16011],{"class":98},[36,153740,153741,153743,153745,153747],{"class":38,"line":153},[36,153742,151737],{"class":59},[36,153744,51869],{"class":98},[36,153746,31256],{"class":109},[36,153748,151744],{"class":98},[36,153750,153751,153753,153755,153757],{"class":38,"line":191},[36,153752,151749],{"class":59},[36,153754,51869],{"class":98},[36,153756,31256],{"class":109},[36,153758,151756],{"class":98},[36,153760,153761,153763,153765,153767],{"class":38,"line":197},[36,153762,151761],{"class":59},[36,153764,51869],{"class":98},[36,153766,31256],{"class":109},[36,153768,151768],{"class":98},[36,153770,153771,153773,153775,153777],{"class":38,"line":217},[36,153772,151773],{"class":59},[36,153774,51869],{"class":98},[36,153776,31256],{"class":109},[36,153778,151780],{"class":98},[36,153780,153781],{"class":38,"line":223},[36,153782,2987],{"class":98},[36,153784,153785],{"class":38,"line":243},[36,153786,247],{"emptyLinePlaceholder":246},[36,153788,153789,153791],{"class":38,"line":250},[36,153790,151388],{"class":55},[36,153792,151391],{"class":109},[36,153794,153795,153797,153799],{"class":38,"line":256},[36,153796,31234],{"class":163},[36,153798,151801],{"class":55},[36,153800,151804],{"class":98},[36,153802,153803,153805,153807],{"class":38,"line":273},[36,153804,15191],{"class":163},[36,153806,151408],{"class":109},[36,153808,151813],{"class":98},[36,153810,153811,153813,153815],{"class":38,"line":278},[36,153812,151818],{"class":98},[36,153814,151821],{"class":59},[36,153816,88268],{"class":98},[36,153818,153819,153821,153823],{"class":38,"line":284},[36,153820,151818],{"class":98},[36,153822,63111],{"class":59},[36,153824,88268],{"class":98},[36,153826,153827,153829,153831],{"class":38,"line":315},[36,153828,151818],{"class":98},[36,153830,69556],{"class":59},[36,153832,88268],{"class":98},[36,153834,153835,153837,153839],{"class":38,"line":320},[36,153836,151818],{"class":98},[36,153838,151846],{"class":59},[36,153840,88268],{"class":98},[36,153842,153843],{"class":38,"line":326},[36,153844,38559],{"class":98},[14,153846,153847],{},"管理器示意：",[26,153849,153851],{"className":30811,"code":153850,"language":30813,"meta":31,"style":31},"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",[33,153852,153853,153862,153870,153881,153885,153895,153908,153919,153926,153932,153936,153945,153954,153960,153967],{"__ignoreMap":31},[36,153854,153855,153857,153860],{"class":38,"line":39},[36,153856,15133],{"class":163},[36,153858,153859],{"class":55}," StudentManager",[36,153861,4190],{"class":98},[36,153863,153864,153866,153868],{"class":38,"line":46},[36,153865,31234],{"class":163},[36,153867,31237],{"class":109},[36,153869,31240],{"class":98},[36,153871,153872,153874,153877,153879],{"class":38,"line":52},[36,153873,31278],{"class":109},[36,153875,153876],{"class":98},".students ",[36,153878,176],{"class":163},[36,153880,52270],{"class":98},[36,153882,153883],{"class":38,"line":66},[36,153884,247],{"emptyLinePlaceholder":246},[36,153886,153887,153889,153892],{"class":38,"line":72},[36,153888,31234],{"class":163},[36,153890,153891],{"class":55}," find_by_id",[36,153893,153894],{"class":98},"(self, student_id):\n",[36,153896,153897,153899,153901,153903,153905],{"class":38,"line":82},[36,153898,3854],{"class":163},[36,153900,152511],{"class":98},[36,153902,26480],{"class":163},[36,153904,39306],{"class":109},[36,153906,153907],{"class":98},".students:\n",[36,153909,153910,153912,153915,153917],{"class":38,"line":88},[36,153911,5093],{"class":163},[36,153913,153914],{"class":98}," student.student_id ",[36,153916,3400],{"class":163},[36,153918,152532],{"class":98},[36,153920,153921,153924],{"class":38,"line":113},[36,153922,153923],{"class":163},"                return",[36,153925,152539],{"class":98},[36,153927,153928,153930],{"class":38,"line":119},[36,153929,15191],{"class":163},[36,153931,152546],{"class":109},[36,153933,153934],{"class":38,"line":131},[36,153935,247],{"emptyLinePlaceholder":246},[36,153937,153938,153940,153942],{"class":38,"line":137},[36,153939,31234],{"class":163},[36,153941,5660],{"class":55},[36,153943,153944],{"class":98},"(self, student):\n",[36,153946,153947,153949,153951],{"class":38,"line":147},[36,153948,2955],{"class":163},[36,153950,39306],{"class":109},[36,153952,153953],{"class":98},".find_by_id(student.student_id):\n",[36,153955,153956,153958],{"class":38,"line":153},[36,153957,16171],{"class":163},[36,153959,126181],{"class":109},[36,153961,153962,153964],{"class":38,"line":191},[36,153963,31278],{"class":109},[36,153965,153966],{"class":98},".students.append(student)\n",[36,153968,153969,153971],{"class":38,"line":197},[36,153970,15191],{"class":163},[36,153972,153973],{"class":109}," True\n",[14,153975,153976],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[559,153978,153980],{"id":153979},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[588,153982,153984],{"id":153983},"_1251-数据结构","12.5.1 数据结构",[26,153986,153988],{"className":30811,"code":153987,"language":30813,"meta":31,"style":31},"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",[33,153989,153990,153998,154029,154059,154088,154117],{"__ignoreMap":31},[36,153991,153992,153994,153996],{"class":38,"line":39},[36,153993,148839],{"class":98},[36,153995,176],{"class":163},[36,153997,55879],{"class":98},[36,153999,154000,154002,154004,154006,154008,154010,154013,154015,154018,154020,154022,154024,154027],{"class":38,"line":46},[36,154001,148759],{"class":98},[36,154003,148371],{"class":59},[36,154005,51869],{"class":98},[36,154007,148982],{"class":59},[36,154009,12874],{"class":98},[36,154011,154012],{"class":59},"\"category\"",[36,154014,51869],{"class":98},[36,154016,154017],{"class":59},"\"手机\"",[36,154019,12874],{"class":98},[36,154021,84516],{"class":59},[36,154023,51869],{"class":98},[36,154025,154026],{"class":109},"12000",[36,154028,5381],{"class":98},[36,154030,154031,154033,154035,154037,154039,154041,154043,154045,154048,154050,154052,154054,154057],{"class":38,"line":52},[36,154032,148759],{"class":98},[36,154034,148371],{"class":59},[36,154036,51869],{"class":98},[36,154038,148982],{"class":59},[36,154040,12874],{"class":98},[36,154042,154012],{"class":59},[36,154044,51869],{"class":98},[36,154046,154047],{"class":59},"\"电脑\"",[36,154049,12874],{"class":98},[36,154051,84516],{"class":59},[36,154053,51869],{"class":98},[36,154055,154056],{"class":109},"18000",[36,154058,5381],{"class":98},[36,154060,154061,154063,154065,154067,154069,154071,154073,154075,154077,154079,154081,154083,154086],{"class":38,"line":66},[36,154062,148759],{"class":98},[36,154064,148371],{"class":59},[36,154066,51869],{"class":98},[36,154068,149003],{"class":59},[36,154070,12874],{"class":98},[36,154072,154012],{"class":59},[36,154074,51869],{"class":98},[36,154076,154017],{"class":59},[36,154078,12874],{"class":98},[36,154080,84516],{"class":59},[36,154082,51869],{"class":98},[36,154084,154085],{"class":109},"15000",[36,154087,5381],{"class":98},[36,154089,154090,154092,154094,154096,154098,154100,154102,154104,154106,154108,154110,154112,154115],{"class":38,"line":72},[36,154091,148759],{"class":98},[36,154093,148371],{"class":59},[36,154095,51869],{"class":98},[36,154097,149003],{"class":59},[36,154099,12874],{"class":98},[36,154101,154012],{"class":59},[36,154103,51869],{"class":98},[36,154105,154047],{"class":59},[36,154107,12874],{"class":98},[36,154109,84516],{"class":59},[36,154111,51869],{"class":98},[36,154113,154114],{"class":109},"16000",[36,154116,5381],{"class":98},[36,154118,154119],{"class":38,"line":82},[36,154120,33679],{"class":98},[588,154122,154124],{"id":154123},"_1252-按日期统计","12.5.2 按日期统计",[26,154126,154128],{"className":30811,"code":154127,"language":30813,"meta":31,"style":31},"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",[33,154129,154130,154139,154143,154154,154168,154181,154200,154204],{"__ignoreMap":31},[36,154131,154132,154135,154137],{"class":38,"line":39},[36,154133,154134],{"class":98},"daily_total ",[36,154136,176],{"class":163},[36,154138,88300],{"class":98},[36,154140,154141],{"class":38,"line":46},[36,154142,247],{"emptyLinePlaceholder":246},[36,154144,154145,154147,154149,154151],{"class":38,"line":52},[36,154146,3476],{"class":163},[36,154148,148583],{"class":98},[36,154150,26480],{"class":163},[36,154152,154153],{"class":98}," sales:\n",[36,154155,154156,154159,154161,154164,154166],{"class":38,"line":66},[36,154157,154158],{"class":98},"    date ",[36,154160,176],{"class":163},[36,154162,154163],{"class":98}," item[",[36,154165,148371],{"class":59},[36,154167,33679],{"class":98},[36,154169,154170,154173,154175,154177,154179],{"class":38,"line":72},[36,154171,154172],{"class":98},"    amount ",[36,154174,176],{"class":163},[36,154176,154163],{"class":98},[36,154178,84516],{"class":59},[36,154180,33679],{"class":98},[36,154182,154183,154186,154188,154191,154193,154195,154197],{"class":38,"line":82},[36,154184,154185],{"class":98},"    daily_total[date] ",[36,154187,176],{"class":163},[36,154189,154190],{"class":98}," daily_total.get(date, ",[36,154192,807],{"class":109},[36,154194,14153],{"class":98},[36,154196,1095],{"class":163},[36,154198,154199],{"class":98}," amount\n",[36,154201,154202],{"class":38,"line":88},[36,154203,247],{"emptyLinePlaceholder":246},[36,154205,154206,154208],{"class":38,"line":113},[36,154207,30848],{"class":109},[36,154209,154210],{"class":98},"(daily_total)\n",[588,154212,154214],{"id":154213},"_1253-按类别统计","12.5.3 按类别统计",[26,154216,154218],{"className":30811,"code":154217,"language":30813,"meta":31,"style":31},"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",[33,154219,154220,154229,154233,154243,154256,154268,154286,154290],{"__ignoreMap":31},[36,154221,154222,154225,154227],{"class":38,"line":39},[36,154223,154224],{"class":98},"category_total ",[36,154226,176],{"class":163},[36,154228,88300],{"class":98},[36,154230,154231],{"class":38,"line":46},[36,154232,247],{"emptyLinePlaceholder":246},[36,154234,154235,154237,154239,154241],{"class":38,"line":52},[36,154236,3476],{"class":163},[36,154238,148583],{"class":98},[36,154240,26480],{"class":163},[36,154242,154153],{"class":98},[36,154244,154245,154248,154250,154252,154254],{"class":38,"line":66},[36,154246,154247],{"class":98},"    category ",[36,154249,176],{"class":163},[36,154251,154163],{"class":98},[36,154253,154012],{"class":59},[36,154255,33679],{"class":98},[36,154257,154258,154260,154262,154264,154266],{"class":38,"line":72},[36,154259,154172],{"class":98},[36,154261,176],{"class":163},[36,154263,154163],{"class":98},[36,154265,84516],{"class":59},[36,154267,33679],{"class":98},[36,154269,154270,154273,154275,154278,154280,154282,154284],{"class":38,"line":82},[36,154271,154272],{"class":98},"    category_total[category] ",[36,154274,176],{"class":163},[36,154276,154277],{"class":98}," category_total.get(category, ",[36,154279,807],{"class":109},[36,154281,14153],{"class":98},[36,154283,1095],{"class":163},[36,154285,154199],{"class":98},[36,154287,154288],{"class":38,"line":88},[36,154289,247],{"emptyLinePlaceholder":246},[36,154291,154292,154294],{"class":38,"line":113},[36,154293,30848],{"class":109},[36,154295,154296],{"class":98},"(category_total)\n",[588,154298,154300],{"id":154299},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[26,154302,154304],{"className":30811,"code":154303,"language":30813,"meta":31,"style":31},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[33,154305,154306,154331],{"__ignoreMap":31},[36,154307,154308,154311,154313,154315,154318,154321,154324,154327,154329],{"class":38,"line":39},[36,154309,154310],{"class":98},"top_date, top_amount ",[36,154312,176],{"class":163},[36,154314,6402],{"class":109},[36,154316,154317],{"class":98},"(daily_total.items(), ",[36,154319,154320],{"class":5667},"key",[36,154322,154323],{"class":163},"=lambda",[36,154325,154326],{"class":98}," item: item[",[36,154328,833],{"class":109},[36,154330,5108],{"class":98},[36,154332,154333,154335],{"class":38,"line":46},[36,154334,30848],{"class":109},[36,154336,154337],{"class":98},"(top_date, top_amount)\n",[559,154339,154341],{"id":154340},"_126-绘制柱状图","12.6 绘制柱状图",[26,154343,154345],{"className":30811,"code":154344,"language":30813,"meta":31,"style":31},"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",[33,154346,154347,154361,154372,154376,154384,154396,154408,154419,154423,154427,154437,154448,154462,154467,154484,154501,154517,154521],{"__ignoreMap":31},[36,154348,154349,154351,154353,154355,154357,154359],{"class":38,"line":39},[36,154350,31170],{"class":163},[36,154352,147753],{"class":98},[36,154354,30825],{"class":163},[36,154356,147758],{"class":98},[36,154358,31816],{"class":163},[36,154360,147763],{"class":98},[36,154362,154363,154365,154367,154369],{"class":38,"line":46},[36,154364,31170],{"class":163},[36,154366,147612],{"class":98},[36,154368,30825],{"class":163},[36,154370,154371],{"class":98}," Bar\n",[36,154373,154374],{"class":38,"line":52},[36,154375,247],{"emptyLinePlaceholder":246},[36,154377,154378,154380,154382],{"class":38,"line":66},[36,154379,154224],{"class":98},[36,154381,176],{"class":163},[36,154383,16011],{"class":98},[36,154385,154386,154389,154391,154394],{"class":38,"line":72},[36,154387,154388],{"class":59},"    \"手机\"",[36,154390,51869],{"class":98},[36,154392,154393],{"class":109},"27000",[36,154395,31899],{"class":98},[36,154397,154398,154401,154403,154406],{"class":38,"line":82},[36,154399,154400],{"class":59},"    \"电脑\"",[36,154402,51869],{"class":98},[36,154404,154405],{"class":109},"34000",[36,154407,31899],{"class":98},[36,154409,154410,154413,154415,154417],{"class":38,"line":88},[36,154411,154412],{"class":59},"    \"耳机\"",[36,154414,51869],{"class":98},[36,154416,124773],{"class":109},[36,154418,31899],{"class":98},[36,154420,154421],{"class":38,"line":113},[36,154422,2044],{"class":98},[36,154424,154425],{"class":38,"line":119},[36,154426,247],{"emptyLinePlaceholder":246},[36,154428,154429,154432,154434],{"class":38,"line":131},[36,154430,154431],{"class":98},"bar ",[36,154433,176],{"class":163},[36,154435,154436],{"class":98}," Bar()\n",[36,154438,154439,154442,154445],{"class":38,"line":137},[36,154440,154441],{"class":98},"bar.add_xaxis(",[36,154443,154444],{"class":109},"list",[36,154446,154447],{"class":98},"(category_total.keys()))\n",[36,154449,154450,154453,154455,154457,154459],{"class":38,"line":147},[36,154451,154452],{"class":98},"bar.add_yaxis(",[36,154454,147669],{"class":59},[36,154456,12874],{"class":98},[36,154458,154444],{"class":109},[36,154460,154461],{"class":98},"(category_total.values()))\n",[36,154463,154464],{"class":38,"line":153},[36,154465,154466],{"class":98},"bar.set_global_opts(\n",[36,154468,154469,154471,154473,154475,154477,154479,154482],{"class":38,"line":191},[36,154470,147847],{"class":5667},[36,154472,176],{"class":163},[36,154474,147852],{"class":98},[36,154476,51839],{"class":5667},[36,154478,176],{"class":163},[36,154480,154481],{"class":59},"\"品类销售额\"",[36,154483,38480],{"class":98},[36,154485,154486,154488,154490,154492,154494,154496,154499],{"class":38,"line":197},[36,154487,147866],{"class":5667},[36,154489,176],{"class":163},[36,154491,147871],{"class":98},[36,154493,80242],{"class":5667},[36,154495,176],{"class":163},[36,154497,154498],{"class":59},"\"品类\"",[36,154500,38480],{"class":98},[36,154502,154503,154505,154507,154509,154511,154513,154515],{"class":38,"line":217},[36,154504,147885],{"class":5667},[36,154506,176],{"class":163},[36,154508,147871],{"class":98},[36,154510,80242],{"class":5667},[36,154512,176],{"class":163},[36,154514,147669],{"class":59},[36,154516,38480],{"class":98},[36,154518,154519],{"class":38,"line":223},[36,154520,627],{"class":98},[36,154522,154523,154526,154529],{"class":38,"line":243},[36,154524,154525],{"class":98},"bar.render(",[36,154527,154528],{"class":59},"\"category_sales.html\"",[36,154530,627],{"class":98},[559,154532,154534],{"id":154533},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,154536,154537],{},"时间线适合展示不同日期、月份、年份的数据变化。",[26,154539,154541],{"className":30811,"code":154540,"language":30813,"meta":31,"style":31},"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",[33,154542,154543,154557,154568,154572,154580,154604,154627,154652,154656,154660,154670,154674,154685,154694,154704,154718,154749,154754,154758],{"__ignoreMap":31},[36,154544,154545,154547,154549,154551,154553,154555],{"class":38,"line":39},[36,154546,31170],{"class":163},[36,154548,147753],{"class":98},[36,154550,30825],{"class":163},[36,154552,147758],{"class":98},[36,154554,31816],{"class":163},[36,154556,147763],{"class":98},[36,154558,154559,154561,154563,154565],{"class":38,"line":46},[36,154560,31170],{"class":163},[36,154562,147612],{"class":98},[36,154564,30825],{"class":163},[36,154566,154567],{"class":98}," Bar, Timeline\n",[36,154569,154570],{"class":38,"line":52},[36,154571,247],{"emptyLinePlaceholder":246},[36,154573,154574,154576,154578],{"class":38,"line":66},[36,154575,102089],{"class":98},[36,154577,176],{"class":163},[36,154579,16011],{"class":98},[36,154581,154582,154585,154588,154590,154592,154594,154596,154598,154600,154602],{"class":38,"line":72},[36,154583,154584],{"class":59},"    \"2024-10-01\"",[36,154586,154587],{"class":98},": {",[36,154589,154017],{"class":59},[36,154591,51869],{"class":98},[36,154593,154026],{"class":109},[36,154595,12874],{"class":98},[36,154597,154047],{"class":59},[36,154599,51869],{"class":98},[36,154601,154056],{"class":109},[36,154603,5381],{"class":98},[36,154605,154606,154609,154611,154613,154615,154617,154619,154621,154623,154625],{"class":38,"line":82},[36,154607,154608],{"class":59},"    \"2024-10-02\"",[36,154610,154587],{"class":98},[36,154612,154017],{"class":59},[36,154614,51869],{"class":98},[36,154616,154085],{"class":109},[36,154618,12874],{"class":98},[36,154620,154047],{"class":59},[36,154622,51869],{"class":98},[36,154624,154114],{"class":109},[36,154626,5381],{"class":98},[36,154628,154629,154632,154634,154636,154638,154641,154643,154645,154647,154650],{"class":38,"line":88},[36,154630,154631],{"class":59},"    \"2024-10-03\"",[36,154633,154587],{"class":98},[36,154635,154017],{"class":59},[36,154637,51869],{"class":98},[36,154639,154640],{"class":109},"17000",[36,154642,12874],{"class":98},[36,154644,154047],{"class":59},[36,154646,51869],{"class":98},[36,154648,154649],{"class":109},"19000",[36,154651,5381],{"class":98},[36,154653,154654],{"class":38,"line":113},[36,154655,2044],{"class":98},[36,154657,154658],{"class":38,"line":119},[36,154659,247],{"emptyLinePlaceholder":246},[36,154661,154662,154665,154667],{"class":38,"line":131},[36,154663,154664],{"class":98},"timeline ",[36,154666,176],{"class":163},[36,154668,154669],{"class":98}," Timeline()\n",[36,154671,154672],{"class":38,"line":137},[36,154673,247],{"emptyLinePlaceholder":246},[36,154675,154676,154678,154681,154683],{"class":38,"line":147},[36,154677,3476],{"class":163},[36,154679,154680],{"class":98}," date, category_data ",[36,154682,26480],{"class":163},[36,154684,149522],{"class":98},[36,154686,154687,154690,154692],{"class":38,"line":153},[36,154688,154689],{"class":98},"    bar ",[36,154691,176],{"class":163},[36,154693,154436],{"class":98},[36,154695,154696,154699,154701],{"class":38,"line":191},[36,154697,154698],{"class":98},"    bar.add_xaxis(",[36,154700,154444],{"class":109},[36,154702,154703],{"class":98},"(category_data.keys()))\n",[36,154705,154706,154709,154711,154713,154715],{"class":38,"line":197},[36,154707,154708],{"class":98},"    bar.add_yaxis(",[36,154710,147669],{"class":59},[36,154712,12874],{"class":98},[36,154714,154444],{"class":109},[36,154716,154717],{"class":98},"(category_data.values()))\n",[36,154719,154720,154723,154726,154728,154730,154732,154734,154736,154738,154740,154742,154744,154747],{"class":38,"line":217},[36,154721,154722],{"class":98},"    bar.set_global_opts(",[36,154724,154725],{"class":5667},"title_opts",[36,154727,176],{"class":163},[36,154729,147852],{"class":98},[36,154731,51839],{"class":5667},[36,154733,176],{"class":163},[36,154735,671],{"class":163},[36,154737,866],{"class":59},[36,154739,1509],{"class":109},[36,154741,74358],{"class":98},[36,154743,1558],{"class":109},[36,154745,154746],{"class":59},"销售额\"",[36,154748,30930],{"class":98},[36,154750,154751],{"class":38,"line":223},[36,154752,154753],{"class":98},"    timeline.add(bar, date)\n",[36,154755,154756],{"class":38,"line":243},[36,154757,247],{"emptyLinePlaceholder":246},[36,154759,154760,154763,154766],{"class":38,"line":250},[36,154761,154762],{"class":98},"timeline.render(",[36,154764,154765],{"class":59},"\"timeline_sales.html\"",[36,154767,627],{"class":98},[559,154769,154771],{"id":154770},"_128-绘制地图","12.8 绘制地图",[14,154773,154774],{},"地图适合展示地区数据。",[26,154776,154778],{"className":30811,"code":154777,"language":30813,"meta":31,"style":31},"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",[33,154779,154780,154794,154805,154809,154817,154830,154842,154855,154868,154872,154876,154886,154901,154906,154923,154942,154946],{"__ignoreMap":31},[36,154781,154782,154784,154786,154788,154790,154792],{"class":38,"line":39},[36,154783,31170],{"class":163},[36,154785,147753],{"class":98},[36,154787,30825],{"class":163},[36,154789,147758],{"class":98},[36,154791,31816],{"class":163},[36,154793,147763],{"class":98},[36,154795,154796,154798,154800,154802],{"class":38,"line":46},[36,154797,31170],{"class":163},[36,154799,147612],{"class":98},[36,154801,30825],{"class":163},[36,154803,154804],{"class":98}," Map\n",[36,154806,154807],{"class":38,"line":52},[36,154808,247],{"emptyLinePlaceholder":246},[36,154810,154811,154813,154815],{"class":38,"line":66},[36,154812,102089],{"class":98},[36,154814,176],{"class":163},[36,154816,55879],{"class":98},[36,154818,154819,154822,154824,154826,154828],{"class":38,"line":72},[36,154820,154821],{"class":98},"    (",[36,154823,69701],{"class":59},[36,154825,12874],{"class":98},[36,154827,1430],{"class":109},[36,154829,38480],{"class":98},[36,154831,154832,154834,154836,154838,154840],{"class":38,"line":82},[36,154833,154821],{"class":98},[36,154835,69721],{"class":59},[36,154837,12874],{"class":98},[36,154839,147686],{"class":109},[36,154841,38480],{"class":98},[36,154843,154844,154846,154849,154851,154853],{"class":38,"line":88},[36,154845,154821],{"class":98},[36,154847,154848],{"class":59},"\"广东\"",[36,154850,12874],{"class":98},[36,154852,2190],{"class":109},[36,154854,38480],{"class":98},[36,154856,154857,154859,154862,154864,154866],{"class":38,"line":113},[36,154858,154821],{"class":98},[36,154860,154861],{"class":59},"\"浙江\"",[36,154863,12874],{"class":98},[36,154865,147691],{"class":109},[36,154867,38480],{"class":98},[36,154869,154870],{"class":38,"line":119},[36,154871,33679],{"class":98},[36,154873,154874],{"class":38,"line":131},[36,154875,247],{"emptyLinePlaceholder":246},[36,154877,154878,154881,154883],{"class":38,"line":137},[36,154879,154880],{"class":98},"map_chart ",[36,154882,176],{"class":163},[36,154884,154885],{"class":98}," Map()\n",[36,154887,154888,154891,154893,154896,154899],{"class":38,"line":147},[36,154889,154890],{"class":98},"map_chart.add(",[36,154892,147669],{"class":59},[36,154894,154895],{"class":98},", data, ",[36,154897,154898],{"class":59},"\"china\"",[36,154900,627],{"class":98},[36,154902,154903],{"class":38,"line":153},[36,154904,154905],{"class":98},"map_chart.set_global_opts(\n",[36,154907,154908,154910,154912,154914,154916,154918,154921],{"class":38,"line":191},[36,154909,147847],{"class":5667},[36,154911,176],{"class":163},[36,154913,147852],{"class":98},[36,154915,51839],{"class":5667},[36,154917,176],{"class":163},[36,154919,154920],{"class":59},"\"地区销售额\"",[36,154922,38480],{"class":98},[36,154924,154925,154928,154930,154933,154936,154938,154940],{"class":38,"line":197},[36,154926,154927],{"class":5667},"    visualmap_opts",[36,154929,176],{"class":163},[36,154931,154932],{"class":98},"opts.VisualMapOpts(",[36,154934,154935],{"class":5667},"max_",[36,154937,176],{"class":163},[36,154939,2190],{"class":109},[36,154941,38480],{"class":98},[36,154943,154944],{"class":38,"line":217},[36,154945,627],{"class":98},[36,154947,154948,154951,154954],{"class":38,"line":223},[36,154949,154950],{"class":98},"map_chart.render(",[36,154952,154953],{"class":59},"\"map_sales.html\"",[36,154955,627],{"class":98},[14,154957,154958],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[559,154960,154962],{"id":154961},"_129-项目拆分建议","12.9 项目拆分建议",[14,154964,154965],{},"当代码超过一个文件时，可以这样组织：",[26,154967,154970],{"className":154968,"code":154969,"language":5638,"meta":31},[5636],"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",[33,154971,154969],{"__ignoreMap":31},[14,154973,154974],{},"职责：",[571,154976,154977,154983,154989,154995],{},[574,154978,154979,154982],{},[33,154980,154981],{},"main.py","：程序入口。",[574,154984,154985,154988],{},[33,154986,154987],{},"file_utils.py","：读写 JSON。",[574,154990,154991,154994],{},[33,154992,154993],{},"sales_service.py","：统计销售数据。",[574,154996,154997,155000],{},[33,154998,154999],{},"chart_builder.py","：生成图表。",[559,155002,155004],{"id":155003},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,155006,155007],{},"语法基础：",[571,155009,155010,155013,155016,155019],{},[574,155011,155012],{},"会写变量、注释、输入输出。",[574,155014,155015],{},"会使用 int、float、str、bool。",[574,155017,155018],{},"会做类型转换。",[574,155020,155021],{},"会使用 f-string 格式化输出。",[14,155023,155024],{},"流程控制：",[571,155026,155027,155033,155039,155047],{},[574,155028,155029,155030,28819],{},"会写 ",[33,155031,155032],{},"if elif else",[574,155034,155029,155035,101449,155037,28819],{},[33,155036,109094],{},[33,155038,3476],{},[574,155040,155041,155042,101449,155044,28819],{},"理解 ",[33,155043,2512],{},[33,155045,155046],{},"continue",[574,155048,155049],{},"能写嵌套循环。",[14,155051,155052],{},"函数：",[571,155054,155055,155058,155061,155064],{},[574,155056,155057],{},"会定义和调用函数。",[574,155059,155060],{},"理解参数和返回值。",[574,155062,155063],{},"知道局部变量和全局变量。",[574,155065,155066],{},"会使用默认参数、关键字参数、不定长参数。",[14,155068,155069],{},"容器：",[571,155071,155072,155075,155078,155081,155084],{},[574,155073,155074],{},"会使用列表增删改查。",[574,155076,155077],{},"会遍历列表、字典。",[574,155079,155080],{},"会使用切片。",[574,155082,155083],{},"会用集合去重。",[574,155085,155086],{},"会处理列表嵌套字典。",[14,155088,155089],{},"文件和模块：",[571,155091,155092,155095,155098,155101,155104],{},[574,155093,155094],{},"会读写文本文件。",[574,155096,155097],{},"会读写 JSON。",[574,155099,155100],{},"会捕获常见异常。",[574,155102,155103],{},"会导入模块和第三方包。",[574,155105,155106],{},"会创建简单包结构。",[14,155108,155109],{},"项目能力：",[571,155111,155112,155115,155118,155121,155124],{},[574,155113,155114],{},"能把代码拆成函数。",[574,155116,155117],{},"能把数据保存到文件。",[574,155119,155120],{},"能处理用户输入错误。",[574,155122,155123],{},"能写一个完整菜单程序。",[574,155125,155126],{},"能用 pyecharts 生成图表。",[559,155128,155130],{"id":155129},"_1211-推荐练习顺序","12.11 推荐练习顺序",[571,155132,155133,155136,155139,155142,155145,155148,155151,155154],{},[574,155134,155135],{},"猜数字游戏。",[574,155137,155138],{},"ATM 菜单程序。",[574,155140,155141],{},"学生成绩统计。",[574,155143,155144],{},"学生管理系统函数版。",[574,155146,155147],{},"学生管理系统文件持久化版。",[574,155149,155150],{},"学生管理系统面向对象版。",[574,155152,155153],{},"销售数据统计。",[574,155155,155156],{},"销售数据可视化。",[559,155158,155160],{"id":155159},"_1212-常见学习误区","12.12 常见学习误区",[571,155162,155163,155166,155169,155172,155175,155178,155181],{},[574,155164,155165],{},"只看视频不敲代码。",[574,155167,155168],{},"一报错就复制错误去搜，不先读报错位置。",[574,155170,155171],{},"变量名随便写，后续自己看不懂。",[574,155173,155174],{},"所有代码都写在一个文件一个函数里。",[574,155176,155177],{},"不保存练习代码，复习时没有材料。",[574,155179,155180],{},"还没掌握列表字典就急着学框架。",[574,155182,155183],{},"不会读官方文档，只依赖教程。",[559,155185,155187],{"id":155186},"_1213-如何读报错","12.13 如何读报错",[14,155189,155190],{},"报错通常从下往上看最后几行。",[14,155192,15574],{},[26,155194,155197],{"className":155195,"code":155196,"language":5638,"meta":31},[5636],"ValueError: invalid literal for int() with base 10: 'abc'\n",[33,155198,155196],{"__ignoreMap":31},[14,155200,25036],{},[571,155202,155203,155209,155219],{},[574,155204,155205,155206,28819],{},"异常类型是 ",[33,155207,155208],{},"ValueError",[574,155210,107776,155211,155214,155215,155218],{},[33,155212,155213],{},"int()"," 无法把 ",[33,155216,155217],{},"'abc'"," 转成整数。",[574,155220,155221],{},"应该检查输入内容或增加异常处理。",[14,155223,155224],{},"再看文件名和行号：",[26,155226,155229],{"className":155227,"code":155228,"language":5638,"meta":31},[5636],"File \"main.py\", line 10, in \u003Cmodule>\n",[33,155230,155228],{"__ignoreMap":31},[14,155232,155233,155234,155236],{},"表示错误发生在 ",[33,155235,154981],{}," 第 10 行。",[559,155238,155240],{"id":155239},"_1214-后续学习方向","12.14 后续学习方向",[14,155242,155243],{},"Python 基础完成后，可以按兴趣选择方向：",[571,155245,155246,155258,155267,155279,155290,155299,155309],{},[574,155247,155248,155249,828,155252,828,155255,28819],{},"自动化办公：",[33,155250,155251],{},"openpyxl",[33,155253,155254],{},"python-docx",[33,155256,155257],{},"pdfplumber",[574,155259,155260,155261,828,155263,828,155265,28819],{},"数据分析：",[33,155262,101058],{},[33,155264,146559],{},[33,155266,146567],{},[574,155268,155269,155270,828,155273,828,155276,28819],{},"Web 后端：",[33,155271,155272],{},"Flask",[33,155274,155275],{},"FastAPI",[33,155277,155278],{},"Django",[574,155280,155281,155282,828,155284,828,155287,28819],{},"爬虫：",[33,155283,146544],{},[33,155285,155286],{},"BeautifulSoup",[33,155288,155289],{},"Scrapy",[574,155291,155292,155293,828,155295,155298],{},"测试开发：",[33,155294,146591],{},[33,155296,155297],{},"selenium","、接口测试。",[574,155300,155301,155302,828,155304,828,155306,28819],{},"人工智能：",[33,155303,101058],{},[33,155305,146559],{},[33,155307,155308],{},"pytorch",[574,155310,155311,155312,828,155314,828,155317,28819],{},"运维脚本：",[33,155313,146160],{},[33,155315,155316],{},"subprocess",[33,155318,155319],{},"paramiko",[14,155321,155322],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[559,155324,155326],{"id":155325},"_1215-结课练习","12.15 结课练习",[571,155328,155329,155332,155335,155338,155341,155344,155347,155350],{},[574,155330,155331],{},"完成函数版学生管理系统。",[574,155333,155334],{},"给学生管理系统增加 JSON 持久化。",[574,155336,155337],{},"给学生管理系统增加异常处理。",[574,155339,155340],{},"把学生管理系统改成面向对象版。",[574,155342,155343],{},"使用 pyecharts 绘制学生成绩柱状图。",[574,155345,155346],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[574,155348,155349],{},"按品类统计销售额并绘制柱状图。",[574,155351,155352],{},"写一份自己的 Python 学习路线图。",[537,155354,155355],{},"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":31,"searchDepth":46,"depth":46,"links":155357},[155358,155359,155362,155363,155364,155370,155371,155372,155373,155374,155375,155376,155377,155378,155379],{"id":152074,"depth":46,"text":152075},{"id":152124,"depth":46,"text":152125,"children":155360},[155361],{"id":152128,"depth":52,"text":152129},{"id":152167,"depth":46,"text":152168},{"id":153641,"depth":46,"text":153642},{"id":153979,"depth":46,"text":153980,"children":155365},[155366,155367,155368,155369],{"id":153983,"depth":52,"text":153984},{"id":154123,"depth":52,"text":154124},{"id":154213,"depth":52,"text":154214},{"id":154299,"depth":52,"text":154300},{"id":154340,"depth":46,"text":154341},{"id":154533,"depth":46,"text":154534},{"id":154770,"depth":46,"text":154771},{"id":154961,"depth":46,"text":154962},{"id":155003,"depth":46,"text":155004},{"id":155129,"depth":46,"text":155130},{"id":155159,"depth":46,"text":155160},{"id":155186,"depth":46,"text":155187},{"id":155239,"depth":46,"text":155240},{"id":155325,"depth":46,"text":155326},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":152066,"description":542},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155386,"title":155387,"body":155388,"description":542,"extension":543,"meta":157857,"navigation":246,"path":157858,"seo":157859,"stem":157860,"__hash__":157861},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155389,"toc":157832},[155390,155393,155397,155400,155403,155423,155426,155449,155452,155455,155477,155480,155502,155506,155509,155549,155552,155673,155677,155680,155720,155723,155747,155750,155754,155757,155771,155804,155807,155842,155845,155868,155871,155904,155907,155909,155915,155990,155993,155999,156016,156056,156060,156063,156109,156111,156149,156152,156187,156190,156225,156228,156260,156263,156282,156286,156290,156403,156405,156480,156484,156530,156533,156559,156568,156572,156575,156638,156646,156674,156678,156718,156783,156787,156790,156829,156832,156877,156880,156941,156945,156972,156975,157003,157006,157010,157014,157079,157082,157120,157123,157155,157159,157258,157262,157265,157338,157341,157389,157393,157399,157439,157442,157489,157492,157541,157545,157547,157561,157563,157744,157748,157775,157795,157802,157806,157823,157829],[10,155391,155387],{"id":155392},"_2-基础语法变量与字符串",[559,155394,155396],{"id":155395},"_21-注释","2.1 注释",[14,155398,155399],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,155401,155402],{},"单行注释：",[26,155404,155406],{"className":30811,"code":155405,"language":30813,"meta":31,"style":31},"# 这是单行注释\nprint(\"hello\")\n",[33,155407,155408,155413],{"__ignoreMap":31},[36,155409,155410],{"class":38,"line":39},[36,155411,155412],{"class":42},"# 这是单行注释\n",[36,155414,155415,155417,155419,155421],{"class":38,"line":46},[36,155416,30848],{"class":109},[36,155418,621],{"class":98},[36,155420,6295],{"class":59},[36,155422,627],{"class":98},[14,155424,155425],{},"多行说明常用三引号：",[26,155427,155429],{"className":30811,"code":155428,"language":30813,"meta":31,"style":31},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[33,155430,155431,155435,155440,155445],{"__ignoreMap":31},[36,155432,155433],{"class":38,"line":39},[36,155434,96130],{"class":59},[36,155436,155437],{"class":38,"line":46},[36,155438,155439],{"class":59},"这是多行说明。\n",[36,155441,155442],{"class":38,"line":52},[36,155443,155444],{"class":59},"常用于文件顶部说明、函数说明等。\n",[36,155446,155447],{"class":38,"line":66},[36,155448,96130],{"class":59},[14,155450,155451],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,155453,155454],{},"不好：",[26,155456,155458],{"className":30811,"code":155457,"language":30813,"meta":31,"style":31},"# age 加 1\nage = age + 1\n",[33,155459,155460,155465],{"__ignoreMap":31},[36,155461,155462],{"class":38,"line":39},[36,155463,155464],{"class":42},"# age 加 1\n",[36,155466,155467,155469,155471,155473,155475],{"class":38,"line":46},[36,155468,146920],{"class":98},[36,155470,176],{"class":163},[36,155472,16146],{"class":98},[36,155474,1095],{"class":163},[36,155476,56131],{"class":109},[14,155478,155479],{},"较好：",[26,155481,155483],{"className":30811,"code":155482,"language":30813,"meta":31,"style":31},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[33,155484,155485,155490],{"__ignoreMap":31},[36,155486,155487],{"class":38,"line":39},[36,155488,155489],{"class":42},"# 用户过完生日后，年龄增加一岁\n",[36,155491,155492,155494,155496,155498,155500],{"class":38,"line":46},[36,155493,146920],{"class":98},[36,155495,176],{"class":163},[36,155497,16146],{"class":98},[36,155499,1095],{"class":163},[36,155501,56131],{"class":109},[559,155503,155505],{"id":155504},"_22-字面量","2.2 字面量",[14,155507,155508],{},"字面量就是代码中直接写出来的数据。",[26,155510,155512],{"className":30811,"code":155511,"language":30813,"meta":31,"style":31},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[33,155513,155514,155521,155528,155535,155542],{"__ignoreMap":31},[36,155515,155516,155518],{"class":38,"line":39},[36,155517,926],{"class":109},[36,155519,155520],{"class":42},"          # 整数\n",[36,155522,155523,155525],{"class":38,"line":46},[36,155524,668],{"class":109},[36,155526,155527],{"class":42},"         # 小数\n",[36,155529,155530,155532],{"class":38,"line":52},[36,155531,6295],{"class":59},[36,155533,155534],{"class":42},"      # 字符串\n",[36,155536,155537,155539],{"class":38,"line":66},[36,155538,31909],{"class":109},[36,155540,155541],{"class":42},"         # 布尔值\n",[36,155543,155544,155546],{"class":38,"line":72},[36,155545,96118],{"class":109},[36,155547,155548],{"class":42},"         # 空值\n",[14,155550,155551],{},"常见字面量类型：",[753,155553,155554,155564],{},[756,155555,155556],{},[759,155557,155558,155560,155562],{},[762,155559,24176],{},[762,155561,27926],{},[762,155563,26306],{},[800,155565,155566,155577,155588,155599,155611,155623,155635,155648,155660],{},[759,155567,155568,155570,155574],{},[805,155569,624],{},[805,155571,155572],{},[33,155573,926],{},[805,155575,155576],{},"整数",[759,155578,155579,155581,155585],{},[805,155580,660],{},[805,155582,155583],{},[33,155584,668],{},[805,155586,155587],{},"浮点数",[759,155589,155590,155592,155596],{},[805,155591,1781],{},[805,155593,155594],{},[33,155595,6295],{},[805,155597,155598],{},"字符串",[759,155600,155601,155603,155609],{},[805,155602,1833],{},[805,155604,155605,828,155607],{},[33,155606,31909],{},[33,155608,34420],{},[805,155610,66447],{},[759,155612,155613,155616,155620],{},[805,155614,155615],{},"NoneType",[805,155617,155618],{},[33,155619,96118],{},[805,155621,155622],{},"空值",[759,155624,155625,155627,155632],{},[805,155626,154444],{},[805,155628,155629],{},[33,155630,155631],{},"[1, 2, 3]",[805,155633,155634],{},"列表",[759,155636,155637,155640,155645],{},[805,155638,155639],{},"tuple",[805,155641,155642],{},[33,155643,155644],{},"(1, 2, 3)",[805,155646,155647],{},"元组",[759,155649,155650,155652,155657],{},[805,155651,114977],{},[805,155653,155654],{},[33,155655,155656],{},"{\"name\": \"张三\"}",[805,155658,155659],{},"字典",[759,155661,155662,155665,155670],{},[805,155663,155664],{},"set",[805,155666,155667],{},[33,155668,155669],{},"{1, 2, 3}",[805,155671,155672],{},"集合",[559,155674,155676],{"id":155675},"_23-变量","2.3 变量",[14,155678,155679],{},"变量是保存数据的名字。",[26,155681,155683],{"className":30811,"code":155682,"language":30813,"meta":31,"style":31},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[33,155684,155685,155693,155701,155711],{"__ignoreMap":31},[36,155686,155687,155689,155691],{"class":38,"line":39},[36,155688,146910],{"class":98},[36,155690,176],{"class":163},[36,155692,149727],{"class":59},[36,155694,155695,155697,155699],{"class":38,"line":46},[36,155696,146920],{"class":98},[36,155698,176],{"class":163},[36,155700,146925],{"class":109},[36,155702,155703,155706,155708],{"class":38,"line":52},[36,155704,155705],{"class":98},"height ",[36,155707,176],{"class":163},[36,155709,155710],{"class":109}," 1.75\n",[36,155712,155713,155716,155718],{"class":38,"line":66},[36,155714,155715],{"class":98},"is_student ",[36,155717,176],{"class":163},[36,155719,153973],{"class":109},[14,155721,155722],{},"Python 的变量不需要提前声明类型：",[26,155724,155726],{"className":30811,"code":155725,"language":30813,"meta":31,"style":31},"score = 100\nscore = \"满分\"\n",[33,155727,155728,155738],{"__ignoreMap":31},[36,155729,155730,155733,155735],{"class":38,"line":39},[36,155731,155732],{"class":98},"score ",[36,155734,176],{"class":163},[36,155736,155737],{"class":109}," 100\n",[36,155739,155740,155742,155744],{"class":38,"line":46},[36,155741,155732],{"class":98},[36,155743,176],{"class":163},[36,155745,155746],{"class":59}," \"满分\"\n",[14,155748,155749],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[559,155751,155753],{"id":155752},"_24-变量命名规则","2.4 变量命名规则",[14,155755,155756],{},"硬性规则：",[571,155758,155759,155762,155765,155768],{},[574,155760,155761],{},"只能由字母、数字、下划线组成。",[574,155763,155764],{},"不能以数字开头。",[574,155766,155767],{},"不能使用 Python 关键字。",[574,155769,155770],{},"区分大小写。",[26,155772,155774],{"className":30811,"code":155773,"language":30813,"meta":31,"style":31},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[33,155775,155776,155785,155794],{"__ignoreMap":31},[36,155777,155778,155781,155783],{"class":38,"line":39},[36,155779,155780],{"class":98},"user_name ",[36,155782,176],{"class":163},[36,155784,146915],{"class":59},[36,155786,155787,155790,155792],{"class":38,"line":46},[36,155788,155789],{"class":98},"age2 ",[36,155791,176],{"class":163},[36,155793,146925],{"class":109},[36,155795,155796,155799,155801],{"class":38,"line":52},[36,155797,155798],{"class":98},"_token ",[36,155800,176],{"class":163},[36,155802,155803],{"class":59}," \"abc\"\n",[14,155805,155806],{},"错误写法：",[26,155808,155810],{"className":30811,"code":155809,"language":30813,"meta":31,"style":31},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[33,155811,155812,155821,155833],{"__ignoreMap":31},[36,155813,155814,155817,155819],{"class":38,"line":39},[36,155815,155816],{"class":77835},"2age",[36,155818,14003],{"class":163},[36,155820,146925],{"class":109},[36,155822,155823,155825,155827,155829,155831],{"class":38,"line":46},[36,155824,131958],{"class":98},[36,155826,1146],{"class":163},[36,155828,146910],{"class":98},[36,155830,176],{"class":163},[36,155832,146915],{"class":59},[36,155834,155835,155837,155839],{"class":38,"line":52},[36,155836,15133],{"class":163},[36,155838,14003],{"class":163},[36,155840,155841],{"class":59}," \"一班\"\n",[14,155843,155844],{},"查看关键字：",[26,155846,155848],{"className":30811,"code":155847,"language":30813,"meta":31,"style":31},"import keyword\n\nprint(keyword.kwlist)\n",[33,155849,155850,155857,155861],{"__ignoreMap":31},[36,155851,155852,155854],{"class":38,"line":39},[36,155853,30825],{"class":163},[36,155855,155856],{"class":98}," keyword\n",[36,155858,155859],{"class":38,"line":46},[36,155860,247],{"emptyLinePlaceholder":246},[36,155862,155863,155865],{"class":38,"line":52},[36,155864,30848],{"class":109},[36,155866,155867],{"class":98},"(keyword.kwlist)\n",[14,155869,155870],{},"推荐命名风格：",[26,155872,155874],{"className":30811,"code":155873,"language":30813,"meta":31,"style":31},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[33,155875,155876,155885,155895],{"__ignoreMap":31},[36,155877,155878,155881,155883],{"class":38,"line":39},[36,155879,155880],{"class":98},"student_name ",[36,155882,176],{"class":163},[36,155884,149727],{"class":59},[36,155886,155887,155890,155892],{"class":38,"line":46},[36,155888,155889],{"class":98},"total_price ",[36,155891,176],{"class":163},[36,155893,155894],{"class":109}," 99.8\n",[36,155896,155897,155900,155902],{"class":38,"line":52},[36,155898,155899],{"class":98},"is_finished ",[36,155901,176],{"class":163},[36,155903,126181],{"class":109},[14,155905,155906],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[559,155908,51165],{"id":51164},[14,155910,104797,155911,155914],{},[33,155912,155913],{},"type()"," 查看数据类型：",[26,155916,155918],{"className":30811,"code":155917,"language":30813,"meta":31,"style":31},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[33,155919,155920,155934,155948,155962,155976],{"__ignoreMap":31},[36,155921,155922,155924,155926,155928,155930,155932],{"class":38,"line":39},[36,155923,30848],{"class":109},[36,155925,621],{"class":98},[36,155927,103538],{"class":109},[36,155929,621],{"class":98},[36,155931,926],{"class":109},[36,155933,30930],{"class":98},[36,155935,155936,155938,155940,155942,155944,155946],{"class":38,"line":46},[36,155937,30848],{"class":109},[36,155939,621],{"class":98},[36,155941,103538],{"class":109},[36,155943,621],{"class":98},[36,155945,668],{"class":109},[36,155947,30930],{"class":98},[36,155949,155950,155952,155954,155956,155958,155960],{"class":38,"line":52},[36,155951,30848],{"class":109},[36,155953,621],{"class":98},[36,155955,103538],{"class":109},[36,155957,621],{"class":98},[36,155959,6295],{"class":59},[36,155961,30930],{"class":98},[36,155963,155964,155966,155968,155970,155972,155974],{"class":38,"line":66},[36,155965,30848],{"class":109},[36,155967,621],{"class":98},[36,155969,103538],{"class":109},[36,155971,621],{"class":98},[36,155973,31909],{"class":109},[36,155975,30930],{"class":98},[36,155977,155978,155980,155982,155984,155986,155988],{"class":38,"line":72},[36,155979,30848],{"class":109},[36,155981,621],{"class":98},[36,155983,103538],{"class":109},[36,155985,621],{"class":98},[36,155987,96118],{"class":109},[36,155989,30930],{"class":98},[14,155991,155992],{},"输出类似：",[26,155994,155997],{"className":155995,"code":155996,"language":5638,"meta":31},[5636],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[33,155998,155996],{"__ignoreMap":31},[14,156000,9466,156001,107714,156003,156005,156006,156008,156009,21939,156011,156008,156013,156015],{},[33,156002,1833],{},[33,156004,624],{}," 的子类，",[33,156007,31909],{}," 可以当作 ",[33,156010,833],{},[33,156012,34420],{},[33,156014,807],{},"，但业务代码中不要滥用。",[26,156017,156019],{"className":30811,"code":156018,"language":30813,"meta":31,"style":31},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[33,156020,156021,156039],{"__ignoreMap":31},[36,156022,156023,156025,156027,156029,156031,156033,156036],{"class":38,"line":39},[36,156024,30848],{"class":109},[36,156026,621],{"class":98},[36,156028,31909],{"class":109},[36,156030,45999],{"class":163},[36,156032,25555],{"class":109},[36,156034,156035],{"class":98},")   ",[36,156037,156038],{"class":42},"# 2\n",[36,156040,156041,156043,156045,156047,156049,156051,156053],{"class":38,"line":46},[36,156042,30848],{"class":109},[36,156044,621],{"class":98},[36,156046,34420],{"class":109},[36,156048,45999],{"class":163},[36,156050,25555],{"class":109},[36,156052,46241],{"class":98},[36,156054,156055],{"class":42},"# 1\n",[559,156057,156059],{"id":156058},"_26-类型转换","2.6 类型转换",[14,156061,156062],{},"常用转换函数：",[26,156064,156066],{"className":30811,"code":156065,"language":30813,"meta":31,"style":31},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[33,156067,156068,156078,156089,156099],{"__ignoreMap":31},[36,156069,156070,156072,156074,156076],{"class":38,"line":39},[36,156071,624],{"class":109},[36,156073,621],{"class":98},[36,156075,54748],{"class":59},[36,156077,627],{"class":98},[36,156079,156080,156082,156084,156087],{"class":38,"line":46},[36,156081,660],{"class":109},[36,156083,621],{"class":98},[36,156085,156086],{"class":59},"\"3.14\"",[36,156088,627],{"class":98},[36,156090,156091,156093,156095,156097],{"class":38,"line":52},[36,156092,1781],{"class":109},[36,156094,621],{"class":98},[36,156096,926],{"class":109},[36,156098,627],{"class":98},[36,156100,156101,156103,156105,156107],{"class":38,"line":66},[36,156102,1833],{"class":109},[36,156104,621],{"class":98},[36,156106,833],{"class":109},[36,156108,627],{"class":98},[14,156110,15574],{},[26,156112,156114],{"className":30811,"code":156113,"language":30813,"meta":31,"style":31},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[33,156115,156116,156125,156136],{"__ignoreMap":31},[36,156117,156118,156120,156122],{"class":38,"line":39},[36,156119,146920],{"class":98},[36,156121,176],{"class":163},[36,156123,156124],{"class":59}," \"18\"\n",[36,156126,156127,156129,156131,156133],{"class":38,"line":46},[36,156128,146920],{"class":98},[36,156130,176],{"class":163},[36,156132,2841],{"class":109},[36,156134,156135],{"class":98},"(age)\n",[36,156137,156138,156140,156143,156145,156147],{"class":38,"line":52},[36,156139,30848],{"class":109},[36,156141,156142],{"class":98},"(age ",[36,156144,1095],{"class":163},[36,156146,25555],{"class":109},[36,156148,627],{"class":98},[14,156150,156151],{},"输入得到的内容永远是字符串：",[26,156153,156155],{"className":30811,"code":156154,"language":30813,"meta":31,"style":31},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[33,156156,156157,156173],{"__ignoreMap":31},[36,156158,156159,156162,156164,156166,156168,156171],{"class":38,"line":39},[36,156160,156161],{"class":98},"num ",[36,156163,176],{"class":163},[36,156165,61037],{"class":109},[36,156167,621],{"class":98},[36,156169,156170],{"class":59},"\"请输入数字:\"",[36,156172,627],{"class":98},[36,156174,156175,156177,156179,156181,156184],{"class":38,"line":46},[36,156176,30848],{"class":109},[36,156178,621],{"class":98},[36,156180,103538],{"class":109},[36,156182,156183],{"class":98},"(num))  ",[36,156185,156186],{"class":42},"# str\n",[14,156188,156189],{},"如果要做数学运算，必须转换：",[26,156191,156193],{"className":30811,"code":156192,"language":30813,"meta":31,"style":31},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[33,156194,156195,156213],{"__ignoreMap":31},[36,156196,156197,156199,156201,156203,156205,156207,156209,156211],{"class":38,"line":39},[36,156198,156161],{"class":98},[36,156200,176],{"class":163},[36,156202,2841],{"class":109},[36,156204,621],{"class":98},[36,156206,54253],{"class":109},[36,156208,621],{"class":98},[36,156210,156170],{"class":59},[36,156212,30930],{"class":98},[36,156214,156215,156217,156219,156221,156223],{"class":38,"line":46},[36,156216,30848],{"class":109},[36,156218,46052],{"class":98},[36,156220,1095],{"class":163},[36,156222,2497],{"class":109},[36,156224,627],{"class":98},[14,156226,156227],{},"常见错误：",[26,156229,156231],{"className":30811,"code":156230,"language":30813,"meta":31,"style":31},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[33,156232,156233,156246],{"__ignoreMap":31},[36,156234,156235,156237,156239,156241,156243],{"class":38,"line":39},[36,156236,624],{"class":109},[36,156238,621],{"class":98},[36,156240,156086],{"class":59},[36,156242,156035],{"class":98},[36,156244,156245],{"class":42},"# 错误\n",[36,156247,156248,156250,156252,156255,156258],{"class":38,"line":46},[36,156249,624],{"class":109},[36,156251,621],{"class":98},[36,156253,156254],{"class":59},"\"abc\"",[36,156256,156257],{"class":98},")    ",[36,156259,156245],{"class":42},[14,156261,156262],{},"正确写法：",[26,156264,156266],{"className":30811,"code":156265,"language":30813,"meta":31,"style":31},"num = float(\"3.14\")\n",[33,156267,156268],{"__ignoreMap":31},[36,156269,156270,156272,156274,156276,156278,156280],{"class":38,"line":39},[36,156271,156161],{"class":98},[36,156273,176],{"class":163},[36,156275,110228],{"class":109},[36,156277,621],{"class":98},[36,156279,156086],{"class":59},[36,156281,627],{"class":98},[559,156283,156285],{"id":156284},"_27-运算符","2.7 运算符",[588,156287,156289],{"id":156288},"_271-算术运算符","2.7.1 算术运算符",[753,156291,156292,156303],{},[756,156293,156294],{},[759,156295,156296,156299,156301],{},[762,156297,156298],{},"运算符",[762,156300,26306],{},[762,156302,27926],{},[800,156304,156305,156319,156333,156347,156361,156375,156389],{},[759,156306,156307,156311,156314],{},[805,156308,156309],{},[33,156310,1095],{},[805,156312,156313],{},"加法",[805,156315,156316],{},[33,156317,156318],{},"1 + 2",[759,156320,156321,156325,156328],{},[805,156322,156323],{},[33,156324,1146],{},[805,156326,156327],{},"减法",[805,156329,156330],{},[33,156331,156332],{},"5 - 3",[759,156334,156335,156339,156342],{},[805,156336,156337],{},[33,156338,1069],{},[805,156340,156341],{},"乘法",[805,156343,156344],{},[33,156345,156346],{},"2 * 3",[759,156348,156349,156353,156356],{},[805,156350,156351],{},[33,156352,1198],{},[805,156354,156355],{},"除法，结果是浮点数",[805,156357,156358],{},[33,156359,156360],{},"5 \u002F 2",[759,156362,156363,156367,156370],{},[805,156364,156365],{},[33,156366,33762],{},[805,156368,156369],{},"整除",[805,156371,156372],{},[33,156373,156374],{},"5 \u002F\u002F 2",[759,156376,156377,156381,156384],{},[805,156378,156379],{},[33,156380,942],{},[805,156382,156383],{},"取余",[805,156385,156386],{},[33,156387,156388],{},"5 % 2",[759,156390,156391,156395,156398],{},[805,156392,156393],{},[33,156394,11100],{},[805,156396,156397],{},"幂运算",[805,156399,156400],{},[33,156401,156402],{},"2 ** 3",[14,156404,15574],{},[26,156406,156408],{"className":30811,"code":156407,"language":30813,"meta":31,"style":31},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[33,156409,156410,156428,156445,156462],{"__ignoreMap":31},[36,156411,156412,156414,156416,156418,156421,156423,156425],{"class":38,"line":39},[36,156413,30848],{"class":109},[36,156415,621],{"class":98},[36,156417,933],{"class":109},[36,156419,156420],{"class":163}," \u002F",[36,156422,15194],{"class":109},[36,156424,156035],{"class":98},[36,156426,156427],{"class":42},"# 2.5\n",[36,156429,156430,156432,156434,156436,156439,156441,156443],{"class":38,"line":46},[36,156431,30848],{"class":109},[36,156433,621],{"class":98},[36,156435,933],{"class":109},[36,156437,156438],{"class":163}," \u002F\u002F",[36,156440,15194],{"class":109},[36,156442,46241],{"class":98},[36,156444,156038],{"class":42},[36,156446,156447,156449,156451,156453,156456,156458,156460],{"class":38,"line":52},[36,156448,30848],{"class":109},[36,156450,621],{"class":98},[36,156452,933],{"class":109},[36,156454,156455],{"class":163}," %",[36,156457,15194],{"class":109},[36,156459,156035],{"class":98},[36,156461,156055],{"class":42},[36,156463,156464,156466,156468,156470,156473,156475,156477],{"class":38,"line":66},[36,156465,30848],{"class":109},[36,156467,621],{"class":98},[36,156469,694],{"class":109},[36,156471,156472],{"class":163}," **",[36,156474,78502],{"class":109},[36,156476,46241],{"class":98},[36,156478,156479],{"class":42},"# 8\n",[588,156481,156483],{"id":156482},"_272-赋值运算符","2.7.2 赋值运算符",[26,156485,156487],{"className":30811,"code":156486,"language":30813,"meta":31,"style":31},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[33,156488,156489,156497,156505,156513,156521],{"__ignoreMap":31},[36,156490,156491,156493,156495],{"class":38,"line":39},[36,156492,156161],{"class":98},[36,156494,176],{"class":163},[36,156496,58860],{"class":109},[36,156498,156499,156501,156503],{"class":38,"line":46},[36,156500,156161],{"class":98},[36,156502,9918],{"class":163},[36,156504,54859],{"class":109},[36,156506,156507,156509,156511],{"class":38,"line":52},[36,156508,156161],{"class":98},[36,156510,150626],{"class":163},[36,156512,48156],{"class":109},[36,156514,156515,156517,156519],{"class":38,"line":66},[36,156516,156161],{"class":98},[36,156518,137522],{"class":163},[36,156520,120410],{"class":109},[36,156522,156523,156525,156528],{"class":38,"line":72},[36,156524,156161],{"class":98},[36,156526,156527],{"class":163},"\u002F=",[36,156529,48156],{"class":109},[14,156531,156532],{},"等价关系：",[26,156534,156536],{"className":30811,"code":156535,"language":30813,"meta":31,"style":31},"num += 1\nnum = num + 1\n",[33,156537,156538,156546],{"__ignoreMap":31},[36,156539,156540,156542,156544],{"class":38,"line":39},[36,156541,156161],{"class":98},[36,156543,9918],{"class":163},[36,156545,56131],{"class":109},[36,156547,156548,156550,156552,156555,156557],{"class":38,"line":46},[36,156549,156161],{"class":98},[36,156551,176],{"class":163},[36,156553,156554],{"class":98}," num ",[36,156556,1095],{"class":163},[36,156558,56131],{"class":109},[14,156560,156561,156562,101449,156565,28819],{},"Python 没有 ",[33,156563,156564],{},"num++",[33,156566,156567],{},"num--",[588,156569,156571],{"id":156570},"_273-比较运算符","2.7.3 比较运算符",[14,156573,156574],{},"比较运算结果是布尔值。",[26,156576,156578],{"className":30811,"code":156577,"language":30813,"meta":31,"style":31},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[33,156579,156580,156594,156609,156623],{"__ignoreMap":31},[36,156581,156582,156584,156586,156588,156590,156592],{"class":38,"line":39},[36,156583,30848],{"class":109},[36,156585,621],{"class":98},[36,156587,1060],{"class":109},[36,156589,26657],{"class":163},[36,156591,2607],{"class":109},[36,156593,627],{"class":98},[36,156595,156596,156598,156600,156602,156605,156607],{"class":38,"line":46},[36,156597,30848],{"class":109},[36,156599,621],{"class":98},[36,156601,1060],{"class":109},[36,156603,156604],{"class":163}," >=",[36,156606,2497],{"class":109},[36,156608,627],{"class":98},[36,156610,156611,156613,156615,156617,156619,156621],{"class":38,"line":52},[36,156612,30848],{"class":109},[36,156614,621],{"class":98},[36,156616,1060],{"class":109},[36,156618,101990],{"class":163},[36,156620,2542],{"class":109},[36,156622,627],{"class":98},[36,156624,156625,156627,156629,156631,156634,156636],{"class":38,"line":66},[36,156626,30848],{"class":109},[36,156628,621],{"class":98},[36,156630,1060],{"class":109},[36,156632,156633],{"class":163}," !=",[36,156635,2542],{"class":109},[36,156637,627],{"class":98},[14,156639,156640,156641,156643,156644,28819],{},"注意：判断相等用 ",[33,156642,3400],{},"，赋值用 ",[33,156645,176],{},[26,156647,156649],{"className":30811,"code":156648,"language":30813,"meta":31,"style":31},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[33,156650,156651,156663],{"__ignoreMap":31},[36,156652,156653,156655,156657,156660],{"class":38,"line":39},[36,156654,146920],{"class":98},[36,156656,176],{"class":163},[36,156658,156659],{"class":109}," 18",[36,156661,156662],{"class":42},"       # 赋值\n",[36,156664,156665,156667,156669,156671],{"class":38,"line":46},[36,156666,146920],{"class":98},[36,156668,3400],{"class":163},[36,156670,156659],{"class":109},[36,156672,156673],{"class":42},"      # 判断是否相等\n",[588,156675,156677],{"id":156676},"_274-逻辑运算符","2.7.4 逻辑运算符",[753,156679,156680,156688],{},[756,156681,156682],{},[759,156683,156684,156686],{},[762,156685,156298],{},[762,156687,26306],{},[800,156689,156690,156699,156708],{},[759,156691,156692,156696],{},[805,156693,156694],{},[33,156695,30895],{},[805,156697,156698],{},"并且",[759,156700,156701,156705],{},[805,156702,156703],{},[33,156704,115521],{},[805,156706,156707],{},"或者",[759,156709,156710,156715],{},[805,156711,156712],{},[33,156713,156714],{},"not",[805,156716,156717],{},"取反",[26,156719,156721],{"className":30811,"code":156720,"language":30813,"meta":31,"style":31},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[33,156722,156723,156731,156740,156744,156759,156773],{"__ignoreMap":31},[36,156724,156725,156727,156729],{"class":38,"line":39},[36,156726,146920],{"class":98},[36,156728,176],{"class":163},[36,156730,88497],{"class":109},[36,156732,156733,156736,156738],{"class":38,"line":46},[36,156734,156735],{"class":98},"has_ticket ",[36,156737,176],{"class":163},[36,156739,153973],{"class":109},[36,156741,156742],{"class":38,"line":52},[36,156743,247],{"emptyLinePlaceholder":246},[36,156745,156746,156748,156750,156752,156754,156756],{"class":38,"line":66},[36,156747,30848],{"class":109},[36,156749,156142],{"class":98},[36,156751,2178],{"class":163},[36,156753,156659],{"class":109},[36,156755,120803],{"class":163},[36,156757,156758],{"class":98}," has_ticket)\n",[36,156760,156761,156763,156765,156767,156769,156771],{"class":38,"line":72},[36,156762,30848],{"class":109},[36,156764,156142],{"class":98},[36,156766,179],{"class":163},[36,156768,156659],{"class":109},[36,156770,114632],{"class":163},[36,156772,156758],{"class":98},[36,156774,156775,156777,156779,156781],{"class":38,"line":82},[36,156776,30848],{"class":109},[36,156778,621],{"class":98},[36,156780,156714],{"class":163},[36,156782,156758],{"class":98},[559,156784,156786],{"id":156785},"_28-字符串定义","2.8 字符串定义",[14,156788,156789],{},"三种常见写法：",[26,156791,156793],{"className":30811,"code":156792,"language":30813,"meta":31,"style":31},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[33,156794,156795,156805,156814,156824],{"__ignoreMap":31},[36,156796,156797,156800,156802],{"class":38,"line":39},[36,156798,156799],{"class":98},"name1 ",[36,156801,176],{"class":163},[36,156803,156804],{"class":59}," '小明'\n",[36,156806,156807,156810,156812],{"class":38,"line":46},[36,156808,156809],{"class":98},"name2 ",[36,156811,176],{"class":163},[36,156813,149727],{"class":59},[36,156815,156816,156819,156821],{"class":38,"line":52},[36,156817,156818],{"class":98},"text ",[36,156820,176],{"class":163},[36,156822,156823],{"class":59}," \"\"\"这是多行字符串\n",[36,156825,156826],{"class":38,"line":66},[36,156827,156828],{"class":59},"可以换行\"\"\"\n",[14,156830,156831],{},"字符串中包含引号：",[26,156833,156835],{"className":30811,"code":156834,"language":30813,"meta":31,"style":31},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[33,156836,156837,156847,156857],{"__ignoreMap":31},[36,156838,156839,156842,156844],{"class":38,"line":39},[36,156840,156841],{"class":98},"msg ",[36,156843,176],{"class":163},[36,156845,156846],{"class":59}," \"他说:'你好'\"\n",[36,156848,156849,156852,156854],{"class":38,"line":46},[36,156850,156851],{"class":98},"msg2 ",[36,156853,176],{"class":163},[36,156855,156856],{"class":59}," '他说:\"你好\"'\n",[36,156858,156859,156862,156864,156867,156870,156873,156875],{"class":38,"line":52},[36,156860,156861],{"class":98},"msg3 ",[36,156863,176],{"class":163},[36,156865,156866],{"class":59}," \"他说:",[36,156868,156869],{"class":109},"\\\"",[36,156871,156872],{"class":59},"你好",[36,156874,156869],{"class":109},[36,156876,25570],{"class":59},[14,156878,156879],{},"常见转义字符：",[753,156881,156882,156891],{},[756,156883,156884],{},[759,156885,156886,156889],{},[762,156887,156888],{},"写法",[762,156890,101132],{},[800,156892,156893,156903,156912,156922,156931],{},[759,156894,156895,156900],{},[805,156896,156897],{},[33,156898,156899],{},"\\n",[805,156901,156902],{},"换行",[759,156904,156905,156909],{},[805,156906,156907],{},[33,156908,1712],{},[805,156910,156911],{},"制表符",[759,156913,156914,156919],{},[805,156915,156916],{},[33,156917,156918],{},"\\\\",[805,156920,156921],{},"反斜杠",[759,156923,156924,156928],{},[805,156925,156926],{},[33,156927,156869],{},[805,156929,156930],{},"双引号",[759,156932,156933,156938],{},[805,156934,156935],{},[33,156936,156937],{},"\\'",[805,156939,156940],{},"单引号",[559,156942,156944],{"id":156943},"_29-字符串拼接","2.9 字符串拼接",[26,156946,156948],{"className":30811,"code":156947,"language":30813,"meta":31,"style":31},"name = \"小明\"\nprint(\"你好，\" + name)\n",[33,156949,156950,156958],{"__ignoreMap":31},[36,156951,156952,156954,156956],{"class":38,"line":39},[36,156953,146910],{"class":98},[36,156955,176],{"class":163},[36,156957,149727],{"class":59},[36,156959,156960,156962,156964,156967,156969],{"class":38,"line":46},[36,156961,30848],{"class":109},[36,156963,621],{"class":98},[36,156965,156966],{"class":59},"\"你好，\"",[36,156968,45999],{"class":163},[36,156970,156971],{"class":98}," name)\n",[14,156973,156974],{},"字符串只能和字符串拼接：",[26,156976,156978],{"className":30811,"code":156977,"language":30813,"meta":31,"style":31},"age = 18\nprint(\"年龄:\" + str(age))\n",[33,156979,156980,156988],{"__ignoreMap":31},[36,156981,156982,156984,156986],{"class":38,"line":39},[36,156983,146920],{"class":98},[36,156985,176],{"class":163},[36,156987,146925],{"class":109},[36,156989,156990,156992,156994,156996,156998,157000],{"class":38,"line":46},[36,156991,30848],{"class":109},[36,156993,621],{"class":98},[36,156995,146891],{"class":59},[36,156997,45999],{"class":163},[36,156999,74351],{"class":109},[36,157001,157002],{"class":98},"(age))\n",[14,157004,157005],{},"更推荐使用格式化字符串。",[559,157007,157009],{"id":157008},"_210-字符串格式化","2.10 字符串格式化",[588,157011,157013],{"id":157012},"_2101-百分号格式化","2.10.1 百分号格式化",[26,157015,157017],{"className":30811,"code":157016,"language":30813,"meta":31,"style":31},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[33,157018,157019,157027,157035,157044,157048],{"__ignoreMap":31},[36,157020,157021,157023,157025],{"class":38,"line":39},[36,157022,146910],{"class":98},[36,157024,176],{"class":163},[36,157026,149727],{"class":59},[36,157028,157029,157031,157033],{"class":38,"line":46},[36,157030,146920],{"class":98},[36,157032,176],{"class":163},[36,157034,146925],{"class":109},[36,157036,157037,157039,157041],{"class":38,"line":52},[36,157038,155732],{"class":98},[36,157040,176],{"class":163},[36,157042,157043],{"class":109}," 95.5\n",[36,157045,157046],{"class":38,"line":66},[36,157047,247],{"emptyLinePlaceholder":246},[36,157049,157050,157052,157054,157057,157060,157063,157066,157069,157072,157074,157076],{"class":38,"line":72},[36,157051,30848],{"class":109},[36,157053,621],{"class":98},[36,157055,157056],{"class":59},"\"姓名:",[36,157058,157059],{"class":109},"%s",[36,157061,157062],{"class":59}," 年龄:",[36,157064,157065],{"class":109},"%d",[36,157067,157068],{"class":59}," 分数:",[36,157070,157071],{"class":109},"%.1f",[36,157073,866],{"class":59},[36,157075,156455],{"class":163},[36,157077,157078],{"class":98}," (name, age, score))\n",[14,157080,157081],{},"常用占位符：",[753,157083,157084,157093],{},[756,157085,157086],{},[759,157087,157088,157091],{},[762,157089,157090],{},"占位符",[762,157092,26306],{},[800,157094,157095,157103,157111],{},[759,157096,157097,157101],{},[805,157098,157099],{},[33,157100,157059],{},[805,157102,155598],{},[759,157104,157105,157109],{},[805,157106,157107],{},[33,157108,157065],{},[805,157110,155576],{},[759,157112,157113,157118],{},[805,157114,157115],{},[33,157116,157117],{},"%f",[805,157119,155587],{},[14,157121,157122],{},"精度控制：",[26,157124,157126],{"className":30811,"code":157125,"language":30813,"meta":31,"style":31},"price = 12.3456\nprint(\"%.2f\" % price)\n",[33,157127,157128,157137],{"__ignoreMap":31},[36,157129,157130,157132,157134],{"class":38,"line":39},[36,157131,147055],{"class":98},[36,157133,176],{"class":163},[36,157135,157136],{"class":109}," 12.3456\n",[36,157138,157139,157141,157143,157145,157148,157150,157152],{"class":38,"line":46},[36,157140,30848],{"class":109},[36,157142,621],{"class":98},[36,157144,866],{"class":59},[36,157146,157147],{"class":109},"%.2f",[36,157149,866],{"class":59},[36,157151,156455],{"class":163},[36,157153,157154],{"class":98}," price)\n",[588,157156,157158],{"id":157157},"_2102-format方法","2.10.2 format方法",[26,157160,157162],{"className":30811,"code":157161,"language":30813,"meta":31,"style":31},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[33,157163,157164,157172,157180,157184,157203,157223],{"__ignoreMap":31},[36,157165,157166,157168,157170],{"class":38,"line":39},[36,157167,146910],{"class":98},[36,157169,176],{"class":163},[36,157171,149727],{"class":59},[36,157173,157174,157176,157178],{"class":38,"line":46},[36,157175,146920],{"class":98},[36,157177,176],{"class":163},[36,157179,146925],{"class":109},[36,157181,157182],{"class":38,"line":52},[36,157183,247],{"emptyLinePlaceholder":246},[36,157185,157186,157188,157190,157192,157194,157196,157198,157200],{"class":38,"line":66},[36,157187,30848],{"class":109},[36,157189,621],{"class":98},[36,157191,157056],{"class":59},[36,157193,32892],{"class":109},[36,157195,157062],{"class":59},[36,157197,32892],{"class":109},[36,157199,866],{"class":59},[36,157201,157202],{"class":98},".format(name, age))\n",[36,157204,157205,157207,157209,157211,157214,157216,157219,157221],{"class":38,"line":72},[36,157206,30848],{"class":109},[36,157208,621],{"class":98},[36,157210,157056],{"class":59},[36,157212,157213],{"class":109},"{0}",[36,157215,157062],{"class":59},[36,157217,157218],{"class":109},"{1}",[36,157220,866],{"class":59},[36,157222,157202],{"class":98},[36,157224,157225,157227,157229,157231,157234,157236,157239,157241,157244,157246,157248,157251,157253,157255],{"class":38,"line":82},[36,157226,30848],{"class":109},[36,157228,621],{"class":98},[36,157230,157056],{"class":59},[36,157232,157233],{"class":109},"{name}",[36,157235,157062],{"class":59},[36,157237,157238],{"class":109},"{age}",[36,157240,866],{"class":59},[36,157242,157243],{"class":98},".format(",[36,157245,80242],{"class":5667},[36,157247,176],{"class":163},[36,157249,157250],{"class":98},"name, ",[36,157252,70653],{"class":5667},[36,157254,176],{"class":163},[36,157256,157257],{"class":98},"age))\n",[588,157259,157261],{"id":157260},"_2103-f-string","2.10.3 f-string",[14,157263,157264],{},"推荐写法：",[26,157266,157268],{"className":30811,"code":157267,"language":30813,"meta":31,"style":31},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[33,157269,157270,157278,157286,157294,157298],{"__ignoreMap":31},[36,157271,157272,157274,157276],{"class":38,"line":39},[36,157273,146910],{"class":98},[36,157275,176],{"class":163},[36,157277,149727],{"class":59},[36,157279,157280,157282,157284],{"class":38,"line":46},[36,157281,146920],{"class":98},[36,157283,176],{"class":163},[36,157285,146925],{"class":109},[36,157287,157288,157290,157292],{"class":38,"line":52},[36,157289,155732],{"class":98},[36,157291,176],{"class":163},[36,157293,157043],{"class":109},[36,157295,157296],{"class":38,"line":66},[36,157297,247],{"emptyLinePlaceholder":246},[36,157299,157300,157302,157304,157306,157308,157310,157312,157314,157316,157318,157320,157322,157324,157326,157329,157332,157334,157336],{"class":38,"line":72},[36,157301,30848],{"class":109},[36,157303,621],{"class":98},[36,157305,671],{"class":163},[36,157307,157056],{"class":59},[36,157309,1509],{"class":109},[36,157311,80242],{"class":98},[36,157313,1558],{"class":109},[36,157315,157062],{"class":59},[36,157317,1509],{"class":109},[36,157319,70653],{"class":98},[36,157321,1558],{"class":109},[36,157323,157068],{"class":59},[36,157325,1509],{"class":109},[36,157327,157328],{"class":98},"score",[36,157330,157331],{"class":163},":.1f",[36,157333,1558],{"class":109},[36,157335,866],{"class":59},[36,157337,627],{"class":98},[14,157339,157340],{},"表达式也可以放进去：",[26,157342,157344],{"className":30811,"code":157343,"language":30813,"meta":31,"style":31},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[33,157345,157346,157354,157362],{"__ignoreMap":31},[36,157347,157348,157350,157352],{"class":38,"line":39},[36,157349,147055],{"class":98},[36,157351,176],{"class":163},[36,157353,147060],{"class":109},[36,157355,157356,157358,157360],{"class":38,"line":46},[36,157357,147065],{"class":98},[36,157359,176],{"class":163},[36,157361,54859],{"class":109},[36,157363,157364,157366,157368,157370,157373,157375,157377,157379,157382,157384,157387],{"class":38,"line":52},[36,157365,30848],{"class":109},[36,157367,621],{"class":98},[36,157369,671],{"class":163},[36,157371,157372],{"class":59},"\"总价:",[36,157374,1509],{"class":109},[36,157376,147055],{"class":98},[36,157378,1069],{"class":163},[36,157380,157381],{"class":98}," count",[36,157383,1558],{"class":109},[36,157385,157386],{"class":59},"元\"",[36,157388,627],{"class":98},[559,157390,157392],{"id":157391},"_211-input输入","2.11 input输入",[14,157394,157395,157398],{},[33,157396,157397],{},"input()"," 会暂停程序，等待用户输入。",[26,157400,157402],{"className":30811,"code":157401,"language":30813,"meta":31,"style":31},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[33,157403,157404,157418],{"__ignoreMap":31},[36,157405,157406,157408,157410,157412,157414,157416],{"class":38,"line":39},[36,157407,146910],{"class":98},[36,157409,176],{"class":163},[36,157411,61037],{"class":109},[36,157413,621],{"class":98},[36,157415,152753],{"class":59},[36,157417,627],{"class":98},[36,157419,157420,157422,157424,157426,157429,157431,157433,157435,157437],{"class":38,"line":46},[36,157421,30848],{"class":109},[36,157423,621],{"class":98},[36,157425,671],{"class":163},[36,157427,157428],{"class":59},"\"你好，",[36,157430,1509],{"class":109},[36,157432,80242],{"class":98},[36,157434,1558],{"class":109},[36,157436,866],{"class":59},[36,157438,627],{"class":98},[14,157440,157441],{},"输入整数：",[26,157443,157445],{"className":30811,"code":157444,"language":30813,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[33,157446,157447,157465],{"__ignoreMap":31},[36,157448,157449,157451,157453,157455,157457,157459,157461,157463],{"class":38,"line":39},[36,157450,146920],{"class":98},[36,157452,176],{"class":163},[36,157454,2841],{"class":109},[36,157456,621],{"class":98},[36,157458,54253],{"class":109},[36,157460,621],{"class":98},[36,157462,152768],{"class":59},[36,157464,30930],{"class":98},[36,157466,157467,157469,157471,157473,157476,157478,157480,157482,157485,157487],{"class":38,"line":46},[36,157468,30848],{"class":109},[36,157470,621],{"class":98},[36,157472,671],{"class":163},[36,157474,157475],{"class":59},"\"明年你",[36,157477,1509],{"class":109},[36,157479,146920],{"class":98},[36,157481,1095],{"class":163},[36,157483,157484],{"class":109}," 1}",[36,157486,149778],{"class":59},[36,157488,627],{"class":98},[14,157490,157491],{},"输入小数：",[26,157493,157495],{"className":30811,"code":157494,"language":30813,"meta":31,"style":31},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[33,157496,157497,157516],{"__ignoreMap":31},[36,157498,157499,157501,157503,157505,157507,157509,157511,157514],{"class":38,"line":39},[36,157500,155705],{"class":98},[36,157502,176],{"class":163},[36,157504,110228],{"class":109},[36,157506,621],{"class":98},[36,157508,54253],{"class":109},[36,157510,621],{"class":98},[36,157512,157513],{"class":59},"\"请输入身高:\"",[36,157515,30930],{"class":98},[36,157517,157518,157520,157522,157524,157527,157529,157531,157534,157536,157539],{"class":38,"line":46},[36,157519,30848],{"class":109},[36,157521,621],{"class":98},[36,157523,671],{"class":163},[36,157525,157526],{"class":59},"\"身高:",[36,157528,1509],{"class":109},[36,157530,25418],{"class":98},[36,157532,157533],{"class":163},":.2f",[36,157535,1558],{"class":109},[36,157537,157538],{"class":59},"米\"",[36,157540,627],{"class":98},[559,157542,157544],{"id":157543},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,157546,123666],{},[571,157548,157549,157552,157555,157558],{},[574,157550,157551],{},"输入商品单价。",[574,157553,157554],{},"输入购买数量。",[574,157556,157557],{},"输入折扣，例如 0.8 表示八折。",[574,157559,157560],{},"输出最终金额，保留两位小数。",[14,157562,10474],{},[26,157564,157566],{"className":30811,"code":157565,"language":30813,"meta":31,"style":31},"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",[33,157567,157568,157587,157606,157626,157630,157650,157654,157677,157698,157720],{"__ignoreMap":31},[36,157569,157570,157572,157574,157576,157578,157580,157582,157585],{"class":38,"line":39},[36,157571,147055],{"class":98},[36,157573,176],{"class":163},[36,157575,110228],{"class":109},[36,157577,621],{"class":98},[36,157579,54253],{"class":109},[36,157581,621],{"class":98},[36,157583,157584],{"class":59},"\"请输入商品单价:\"",[36,157586,30930],{"class":98},[36,157588,157589,157591,157593,157595,157597,157599,157601,157604],{"class":38,"line":46},[36,157590,147065],{"class":98},[36,157592,176],{"class":163},[36,157594,2841],{"class":109},[36,157596,621],{"class":98},[36,157598,54253],{"class":109},[36,157600,621],{"class":98},[36,157602,157603],{"class":59},"\"请输入购买数量:\"",[36,157605,30930],{"class":98},[36,157607,157608,157611,157613,157615,157617,157619,157621,157624],{"class":38,"line":52},[36,157609,157610],{"class":98},"discount ",[36,157612,176],{"class":163},[36,157614,110228],{"class":109},[36,157616,621],{"class":98},[36,157618,54253],{"class":109},[36,157620,621],{"class":98},[36,157622,157623],{"class":59},"\"请输入折扣:\"",[36,157625,30930],{"class":98},[36,157627,157628],{"class":38,"line":66},[36,157629,247],{"emptyLinePlaceholder":246},[36,157631,157632,157635,157637,157640,157642,157645,157647],{"class":38,"line":72},[36,157633,157634],{"class":98},"total ",[36,157636,176],{"class":163},[36,157638,157639],{"class":98}," price ",[36,157641,1069],{"class":163},[36,157643,157644],{"class":98}," count ",[36,157646,1069],{"class":163},[36,157648,157649],{"class":98}," discount\n",[36,157651,157652],{"class":38,"line":82},[36,157653,247],{"emptyLinePlaceholder":246},[36,157655,157656,157658,157660,157662,157665,157667,157669,157671,157673,157675],{"class":38,"line":88},[36,157657,30848],{"class":109},[36,157659,621],{"class":98},[36,157661,671],{"class":163},[36,157663,157664],{"class":59},"\"商品单价:",[36,157666,1509],{"class":109},[36,157668,80247],{"class":98},[36,157670,157533],{"class":163},[36,157672,1558],{"class":109},[36,157674,866],{"class":59},[36,157676,627],{"class":98},[36,157678,157679,157681,157683,157685,157688,157690,157692,157694,157696],{"class":38,"line":113},[36,157680,30848],{"class":109},[36,157682,621],{"class":98},[36,157684,671],{"class":163},[36,157686,157687],{"class":59},"\"购买数量:",[36,157689,1509],{"class":109},[36,157691,84866],{"class":98},[36,157693,1558],{"class":109},[36,157695,866],{"class":59},[36,157697,627],{"class":98},[36,157699,157700,157702,157704,157706,157709,157711,157714,157716,157718],{"class":38,"line":119},[36,157701,30848],{"class":109},[36,157703,621],{"class":98},[36,157705,671],{"class":163},[36,157707,157708],{"class":59},"\"折扣:",[36,157710,1509],{"class":109},[36,157712,157713],{"class":98},"discount",[36,157715,1558],{"class":109},[36,157717,866],{"class":59},[36,157719,627],{"class":98},[36,157721,157722,157724,157726,157728,157731,157733,157736,157738,157740,157742],{"class":38,"line":131},[36,157723,30848],{"class":109},[36,157725,621],{"class":98},[36,157727,671],{"class":163},[36,157729,157730],{"class":59},"\"应付金额:",[36,157732,1509],{"class":109},[36,157734,157735],{"class":98},"total",[36,157737,157533],{"class":163},[36,157739,1558],{"class":109},[36,157741,157386],{"class":59},[36,157743,627],{"class":98},[559,157745,157747],{"id":157746},"_213-易错点","2.13 易错点",[571,157749,157750,157755,157761,157769,157772],{},[574,157751,157752,157754],{},[33,157753,157397],{}," 的结果是字符串，做运算前要转换。",[574,157756,157757,157758,28819],{},"字符串拼接时，数字要先 ",[33,157759,157760],{},"str()",[574,157762,157763,157765,157766,157768],{},[33,157764,176],{}," 是赋值，",[33,157767,3400],{}," 是比较。",[574,157770,157771],{},"Python 没有自增自减运算符。",[574,157773,157774],{},"浮点数计算可能有精度误差：",[26,157776,157778],{"className":30811,"code":157777,"language":30813,"meta":31,"style":31},"print(0.1 + 0.2)\n",[33,157779,157780],{"__ignoreMap":31},[36,157781,157782,157784,157786,157788,157790,157793],{"class":38,"line":39},[36,157783,30848],{"class":109},[36,157785,621],{"class":98},[36,157787,86642],{"class":109},[36,157789,45999],{"class":163},[36,157791,157792],{"class":109}," 0.2",[36,157794,627],{"class":98},[14,157796,157797,157798,157801],{},"金额计算如果要求严格，可以后续学习 ",[33,157799,157800],{},"decimal"," 模块。",[559,157803,157805],{"id":157804},"_214-本章练习","2.14 本章练习",[571,157807,157808,157811,157814,157817,157820],{},[574,157809,157810],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[574,157812,157813],{},"输入圆的半径，计算面积，保留两位小数。",[574,157815,157816],{},"输入工资和奖金，计算总收入。",[574,157818,157819],{},"输入摄氏温度，转换为华氏温度。",[574,157821,157822],{},"写一个 BMI 计算程序：",[26,157824,157827],{"className":157825,"code":157826,"language":5638,"meta":31},[5636],"BMI = 体重kg \u002F 身高m ** 2\n",[33,157828,157826],{"__ignoreMap":31},[537,157830,157831],{},"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":31,"searchDepth":46,"depth":46,"links":157833},[157834,157835,157836,157837,157838,157839,157840,157846,157847,157848,157853,157854,157855,157856],{"id":155395,"depth":46,"text":155396},{"id":155504,"depth":46,"text":155505},{"id":155675,"depth":46,"text":155676},{"id":155752,"depth":46,"text":155753},{"id":51164,"depth":46,"text":51165},{"id":156058,"depth":46,"text":156059},{"id":156284,"depth":46,"text":156285,"children":157841},[157842,157843,157844,157845],{"id":156288,"depth":52,"text":156289},{"id":156482,"depth":52,"text":156483},{"id":156570,"depth":52,"text":156571},{"id":156676,"depth":52,"text":156677},{"id":156785,"depth":46,"text":156786},{"id":156943,"depth":46,"text":156944},{"id":157008,"depth":46,"text":157009,"children":157849},[157850,157851,157852],{"id":157012,"depth":52,"text":157013},{"id":157157,"depth":52,"text":157158},{"id":157260,"depth":52,"text":157261},{"id":157391,"depth":46,"text":157392},{"id":157543,"depth":46,"text":157544},{"id":157746,"depth":46,"text":157747},{"id":157804,"depth":46,"text":157805},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155387,"description":542},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157863,"title":157864,"body":157865,"description":542,"extension":543,"meta":159501,"navigation":246,"path":159502,"seo":159503,"stem":159504,"__hash__":159505},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157866,"toc":159482},[157867,157870,157874,157877,157892,157895,157923,157927,157977,157979,157995,157998,158024,158027,158031,158098,158101,158117,158121,158124,158242,158245,158252,158301,158307,158311,158314,158427,158430,158434,158438,158441,158491,158495,158498,158548,158552,158555,158593,158597,158600,158646,158649,158684,158688,158693,158696,158742,158744,158811,158815,158821,158932,158941,158945,158947,158958,158960,159126,159130,159132,159146,159148,159362,159366,159385,159402,159405,159451,159455,159479],[10,157868,157864],{"id":157869},"_3-判断语句",[559,157871,157873],{"id":157872},"_31-布尔值","3.1 布尔值",[14,157875,157876],{},"判断语句依赖布尔值：",[26,157878,157880],{"className":30811,"code":157879,"language":30813,"meta":31,"style":31},"True\nFalse\n",[33,157881,157882,157887],{"__ignoreMap":31},[36,157883,157884],{"class":38,"line":39},[36,157885,157886],{"class":109},"True\n",[36,157888,157889],{"class":38,"line":46},[36,157890,157891],{"class":109},"False\n",[14,157893,157894],{},"比较表达式会产生布尔值：",[26,157896,157898],{"className":30811,"code":157897,"language":30813,"meta":31,"style":31},"age = 18\nprint(age >= 18)  # True\n",[33,157899,157900,157908],{"__ignoreMap":31},[36,157901,157902,157904,157906],{"class":38,"line":39},[36,157903,146920],{"class":98},[36,157905,176],{"class":163},[36,157907,146925],{"class":109},[36,157909,157910,157912,157914,157916,157918,157920],{"class":38,"line":46},[36,157911,30848],{"class":109},[36,157913,156142],{"class":98},[36,157915,2178],{"class":163},[36,157917,156659],{"class":109},[36,157919,46241],{"class":98},[36,157921,157922],{"class":42},"# True\n",[559,157924,157926],{"id":157925},"_32-if基础语法","3.2 if基础语法",[26,157928,157930],{"className":30811,"code":157929,"language":30813,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[33,157931,157932,157950,157954,157966],{"__ignoreMap":31},[36,157933,157934,157936,157938,157940,157942,157944,157946,157948],{"class":38,"line":39},[36,157935,146920],{"class":98},[36,157937,176],{"class":163},[36,157939,2841],{"class":109},[36,157941,621],{"class":98},[36,157943,54253],{"class":109},[36,157945,621],{"class":98},[36,157947,152768],{"class":59},[36,157949,30930],{"class":98},[36,157951,157952],{"class":38,"line":46},[36,157953,247],{"emptyLinePlaceholder":246},[36,157955,157956,157958,157960,157962,157964],{"class":38,"line":52},[36,157957,2010],{"class":163},[36,157959,16146],{"class":98},[36,157961,2178],{"class":163},[36,157963,156659],{"class":109},[36,157965,4190],{"class":98},[36,157967,157968,157970,157972,157975],{"class":38,"line":66},[36,157969,31732],{"class":109},[36,157971,621],{"class":98},[36,157973,157974],{"class":59},"\"可以进入网吧\"",[36,157976,627],{"class":98},[14,157978,9466],{},[571,157980,157981,157986,157989,157992],{},[574,157982,157983,157985],{},[33,157984,2010],{}," 后面是条件表达式。",[574,157987,157988],{},"条件后面必须写冒号。",[574,157990,157991],{},"条件成立时执行缩进代码块。",[574,157993,157994],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,157996,157997],{},"错误示例：",[26,157999,158001],{"className":30811,"code":158000,"language":30813,"meta":31,"style":31},"if age >= 18\n    print(\"可以进入\")\n",[33,158002,158003,158013],{"__ignoreMap":31},[36,158004,158005,158007,158009,158011],{"class":38,"line":39},[36,158006,2010],{"class":163},[36,158008,16146],{"class":98},[36,158010,2178],{"class":163},[36,158012,146925],{"class":109},[36,158014,158015,158017,158019,158022],{"class":38,"line":46},[36,158016,31732],{"class":109},[36,158018,621],{"class":98},[36,158020,158021],{"class":59},"\"可以进入\"",[36,158023,627],{"class":98},[14,158025,158026],{},"缺少冒号。",[559,158028,158030],{"id":158029},"_33-if-else","3.3 if else",[26,158032,158034],{"className":30811,"code":158033,"language":30813,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[33,158035,158036,158054,158058,158070,158081,158087],{"__ignoreMap":31},[36,158037,158038,158040,158042,158044,158046,158048,158050,158052],{"class":38,"line":39},[36,158039,146920],{"class":98},[36,158041,176],{"class":163},[36,158043,2841],{"class":109},[36,158045,621],{"class":98},[36,158047,54253],{"class":109},[36,158049,621],{"class":98},[36,158051,152768],{"class":59},[36,158053,30930],{"class":98},[36,158055,158056],{"class":38,"line":46},[36,158057,247],{"emptyLinePlaceholder":246},[36,158059,158060,158062,158064,158066,158068],{"class":38,"line":52},[36,158061,2010],{"class":163},[36,158063,16146],{"class":98},[36,158065,2178],{"class":163},[36,158067,156659],{"class":109},[36,158069,4190],{"class":98},[36,158071,158072,158074,158076,158079],{"class":38,"line":66},[36,158073,31732],{"class":109},[36,158075,621],{"class":98},[36,158077,158078],{"class":59},"\"成年人\"",[36,158080,627],{"class":98},[36,158082,158083,158085],{"class":38,"line":72},[36,158084,2169],{"class":163},[36,158086,4190],{"class":98},[36,158088,158089,158091,158093,158096],{"class":38,"line":82},[36,158090,31732],{"class":109},[36,158092,621],{"class":98},[36,158094,158095],{"class":59},"\"未成年人\"",[36,158097,627],{"class":98},[14,158099,158100],{},"执行逻辑：",[571,158102,158103,158109,158114],{},[574,158104,158105,158106,158108],{},"条件成立，执行 ",[33,158107,2010],{}," 代码块。",[574,158110,158111,158112,158108],{},"条件不成立，执行 ",[33,158113,2169],{},[574,158115,158116],{},"两个代码块只会执行其中一个。",[559,158118,158120],{"id":158119},"_34-if-elif-else","3.4 if elif else",[14,158122,158123],{},"多条件判断：",[26,158125,158127],{"className":30811,"code":158126,"language":30813,"meta":31,"style":31},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[33,158128,158129,158147,158151,158165,158176,158190,158201,158214,158225,158231],{"__ignoreMap":31},[36,158130,158131,158133,158135,158137,158139,158141,158143,158145],{"class":38,"line":39},[36,158132,155732],{"class":98},[36,158134,176],{"class":163},[36,158136,2841],{"class":109},[36,158138,621],{"class":98},[36,158140,54253],{"class":109},[36,158142,621],{"class":98},[36,158144,152783],{"class":59},[36,158146,30930],{"class":98},[36,158148,158149],{"class":38,"line":46},[36,158150,247],{"emptyLinePlaceholder":246},[36,158152,158153,158155,158158,158160,158163],{"class":38,"line":52},[36,158154,2010],{"class":163},[36,158156,158157],{"class":98}," score ",[36,158159,2178],{"class":163},[36,158161,158162],{"class":109}," 90",[36,158164,4190],{"class":98},[36,158166,158167,158169,158171,158174],{"class":38,"line":66},[36,158168,31732],{"class":109},[36,158170,621],{"class":98},[36,158172,158173],{"class":59},"\"优秀\"",[36,158175,627],{"class":98},[36,158177,158178,158181,158183,158185,158188],{"class":38,"line":72},[36,158179,158180],{"class":163},"elif",[36,158182,158157],{"class":98},[36,158184,2178],{"class":163},[36,158186,158187],{"class":109}," 80",[36,158189,4190],{"class":98},[36,158191,158192,158194,158196,158199],{"class":38,"line":82},[36,158193,31732],{"class":109},[36,158195,621],{"class":98},[36,158197,158198],{"class":59},"\"良好\"",[36,158200,627],{"class":98},[36,158202,158203,158205,158207,158209,158212],{"class":38,"line":88},[36,158204,158180],{"class":163},[36,158206,158157],{"class":98},[36,158208,2178],{"class":163},[36,158210,158211],{"class":109}," 60",[36,158213,4190],{"class":98},[36,158215,158216,158218,158220,158223],{"class":38,"line":113},[36,158217,31732],{"class":109},[36,158219,621],{"class":98},[36,158221,158222],{"class":59},"\"及格\"",[36,158224,627],{"class":98},[36,158226,158227,158229],{"class":38,"line":119},[36,158228,2169],{"class":163},[36,158230,4190],{"class":98},[36,158232,158233,158235,158237,158240],{"class":38,"line":131},[36,158234,31732],{"class":109},[36,158236,621],{"class":98},[36,158238,158239],{"class":59},"\"不及格\"",[36,158241,627],{"class":98},[14,158243,158244],{},"注意判断顺序很重要。",[14,158246,158247,158248,158251],{},"如果把 ",[33,158249,158250],{},"score >= 60"," 放在最前面：",[26,158253,158255],{"className":30811,"code":158254,"language":30813,"meta":31,"style":31},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[33,158256,158257,158269,158279,158291],{"__ignoreMap":31},[36,158258,158259,158261,158263,158265,158267],{"class":38,"line":39},[36,158260,2010],{"class":163},[36,158262,158157],{"class":98},[36,158264,2178],{"class":163},[36,158266,158211],{"class":109},[36,158268,4190],{"class":98},[36,158270,158271,158273,158275,158277],{"class":38,"line":46},[36,158272,31732],{"class":109},[36,158274,621],{"class":98},[36,158276,158222],{"class":59},[36,158278,627],{"class":98},[36,158280,158281,158283,158285,158287,158289],{"class":38,"line":52},[36,158282,158180],{"class":163},[36,158284,158157],{"class":98},[36,158286,2178],{"class":163},[36,158288,158162],{"class":109},[36,158290,4190],{"class":98},[36,158292,158293,158295,158297,158299],{"class":38,"line":66},[36,158294,31732],{"class":109},[36,158296,621],{"class":98},[36,158298,158173],{"class":59},[36,158300,627],{"class":98},[14,158302,158303,158304,158306],{},"成绩 95 会先满足 ",[33,158305,158250],{},"，后面的优秀分支就不会执行。",[559,158308,158310],{"id":158309},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,158312,158313],{},"嵌套判断就是在一个判断内部再写判断。",[26,158315,158317],{"className":30811,"code":158316,"language":30813,"meta":31,"style":31},"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",[33,158318,158319,158337,158352,158356,158368,158382,158392,158399,158410,158416],{"__ignoreMap":31},[36,158320,158321,158323,158325,158327,158329,158331,158333,158335],{"class":38,"line":39},[36,158322,146920],{"class":98},[36,158324,176],{"class":163},[36,158326,2841],{"class":109},[36,158328,621],{"class":98},[36,158330,54253],{"class":109},[36,158332,621],{"class":98},[36,158334,152768],{"class":59},[36,158336,30930],{"class":98},[36,158338,158339,158341,158343,158345,158347,158350],{"class":38,"line":46},[36,158340,156735],{"class":98},[36,158342,176],{"class":163},[36,158344,61037],{"class":109},[36,158346,621],{"class":98},[36,158348,158349],{"class":59},"\"是否有票(y\u002Fn):\"",[36,158351,627],{"class":98},[36,158353,158354],{"class":38,"line":52},[36,158355,247],{"emptyLinePlaceholder":246},[36,158357,158358,158360,158362,158364,158366],{"class":38,"line":66},[36,158359,2010],{"class":163},[36,158361,16146],{"class":98},[36,158363,2178],{"class":163},[36,158365,156659],{"class":109},[36,158367,4190],{"class":98},[36,158369,158370,158372,158375,158377,158380],{"class":38,"line":72},[36,158371,3552],{"class":163},[36,158373,158374],{"class":98}," has_ticket ",[36,158376,3400],{"class":163},[36,158378,158379],{"class":59}," \"y\"",[36,158381,4190],{"class":98},[36,158383,158384,158386,158388,158390],{"class":38,"line":82},[36,158385,32884],{"class":109},[36,158387,621],{"class":98},[36,158389,158021],{"class":59},[36,158391,627],{"class":98},[36,158393,158394,158397],{"class":38,"line":88},[36,158395,158396],{"class":163},"    else",[36,158398,4190],{"class":98},[36,158400,158401,158403,158405,158408],{"class":38,"line":113},[36,158402,32884],{"class":109},[36,158404,621],{"class":98},[36,158406,158407],{"class":59},"\"请先买票\"",[36,158409,627],{"class":98},[36,158411,158412,158414],{"class":38,"line":119},[36,158413,2169],{"class":163},[36,158415,4190],{"class":98},[36,158417,158418,158420,158422,158425],{"class":38,"line":131},[36,158419,31732],{"class":109},[36,158421,621],{"class":98},[36,158423,158424],{"class":59},"\"未成年人禁止进入\"",[36,158426,627],{"class":98},[14,158428,158429],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[559,158431,158433],{"id":158432},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[588,158435,158437],{"id":158436},"_361-and","3.6.1 and",[14,158439,158440],{},"两个条件都成立才成立。",[26,158442,158444],{"className":30811,"code":158443,"language":30813,"meta":31,"style":31},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[33,158445,158446,158454,158462,158466,158481],{"__ignoreMap":31},[36,158447,158448,158450,158452],{"class":38,"line":39},[36,158449,146920],{"class":98},[36,158451,176],{"class":163},[36,158453,88497],{"class":109},[36,158455,158456,158458,158460],{"class":38,"line":46},[36,158457,156735],{"class":98},[36,158459,176],{"class":163},[36,158461,153973],{"class":109},[36,158463,158464],{"class":38,"line":52},[36,158465,247],{"emptyLinePlaceholder":246},[36,158467,158468,158470,158472,158474,158476,158478],{"class":38,"line":66},[36,158469,2010],{"class":163},[36,158471,16146],{"class":98},[36,158473,2178],{"class":163},[36,158475,156659],{"class":109},[36,158477,120803],{"class":163},[36,158479,158480],{"class":98}," has_ticket:\n",[36,158482,158483,158485,158487,158489],{"class":38,"line":72},[36,158484,31732],{"class":109},[36,158486,621],{"class":98},[36,158488,158021],{"class":59},[36,158490,627],{"class":98},[588,158492,158494],{"id":158493},"_362-or","3.6.2 or",[14,158496,158497],{},"只要一个条件成立就成立。",[26,158499,158501],{"className":30811,"code":158500,"language":30813,"meta":31,"style":31},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[33,158502,158503,158512,158521,158525,158537],{"__ignoreMap":31},[36,158504,158505,158508,158510],{"class":38,"line":39},[36,158506,158507],{"class":98},"is_vip ",[36,158509,176],{"class":163},[36,158511,126181],{"class":109},[36,158513,158514,158517,158519],{"class":38,"line":46},[36,158515,158516],{"class":98},"coupon ",[36,158518,176],{"class":163},[36,158520,153973],{"class":109},[36,158522,158523],{"class":38,"line":52},[36,158524,247],{"emptyLinePlaceholder":246},[36,158526,158527,158529,158532,158534],{"class":38,"line":66},[36,158528,2010],{"class":163},[36,158530,158531],{"class":98}," is_vip ",[36,158533,115521],{"class":163},[36,158535,158536],{"class":98}," coupon:\n",[36,158538,158539,158541,158543,158546],{"class":38,"line":72},[36,158540,31732],{"class":109},[36,158542,621],{"class":98},[36,158544,158545],{"class":59},"\"可以享受优惠\"",[36,158547,627],{"class":98},[588,158549,158551],{"id":158550},"_363-not","3.6.3 not",[14,158553,158554],{},"取反。",[26,158556,158558],{"className":30811,"code":158557,"language":30813,"meta":31,"style":31},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[33,158559,158560,158569,158573,158582],{"__ignoreMap":31},[36,158561,158562,158565,158567],{"class":38,"line":39},[36,158563,158564],{"class":98},"is_closed ",[36,158566,176],{"class":163},[36,158568,126181],{"class":109},[36,158570,158571],{"class":38,"line":46},[36,158572,247],{"emptyLinePlaceholder":246},[36,158574,158575,158577,158579],{"class":38,"line":52},[36,158576,2010],{"class":163},[36,158578,39363],{"class":163},[36,158580,158581],{"class":98}," is_closed:\n",[36,158583,158584,158586,158588,158591],{"class":38,"line":66},[36,158585,31732],{"class":109},[36,158587,621],{"class":98},[36,158589,158590],{"class":59},"\"店铺营业中\"",[36,158592,627],{"class":98},[559,158594,158596],{"id":158595},"_37-链式比较","3.7 链式比较",[14,158598,158599],{},"Python 支持链式比较：",[26,158601,158603],{"className":30811,"code":158602,"language":30813,"meta":31,"style":31},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[33,158604,158605,158614,158618,158635],{"__ignoreMap":31},[36,158606,158607,158609,158611],{"class":38,"line":39},[36,158608,155732],{"class":98},[36,158610,176],{"class":163},[36,158612,158613],{"class":109}," 85\n",[36,158615,158616],{"class":38,"line":46},[36,158617,247],{"emptyLinePlaceholder":246},[36,158619,158620,158622,158624,158627,158629,158631,158633],{"class":38,"line":52},[36,158621,2010],{"class":163},[36,158623,4544],{"class":109},[36,158625,158626],{"class":163}," \u003C=",[36,158628,158157],{"class":98},[36,158630,2067],{"class":163},[36,158632,6205],{"class":109},[36,158634,4190],{"class":98},[36,158636,158637,158639,158641,158644],{"class":38,"line":66},[36,158638,31732],{"class":109},[36,158640,621],{"class":98},[36,158642,158643],{"class":59},"\"成绩合法\"",[36,158645,627],{"class":98},[14,158647,158648],{},"等价于：",[26,158650,158652],{"className":30811,"code":158651,"language":30813,"meta":31,"style":31},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[33,158653,158654,158674],{"__ignoreMap":31},[36,158655,158656,158658,158660,158662,158664,158666,158668,158670,158672],{"class":38,"line":39},[36,158657,2010],{"class":163},[36,158659,158157],{"class":98},[36,158661,2178],{"class":163},[36,158663,4544],{"class":109},[36,158665,120803],{"class":163},[36,158667,158157],{"class":98},[36,158669,2067],{"class":163},[36,158671,6205],{"class":109},[36,158673,4190],{"class":98},[36,158675,158676,158678,158680,158682],{"class":38,"line":46},[36,158677,31732],{"class":109},[36,158679,621],{"class":98},[36,158681,158643],{"class":59},[36,158683,627],{"class":98},[559,158685,158687],{"id":158686},"_38-真值和假值","3.8 真值和假值",[14,158689,116898,158690,158692],{},[33,158691,2010],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,158694,158695],{},"假值：",[26,158697,158699],{"className":30811,"code":158698,"language":30813,"meta":31,"style":31},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[33,158700,158701,158705,158710,158714,158718,158723,158727,158731,158736],{"__ignoreMap":31},[36,158702,158703],{"class":38,"line":39},[36,158704,157891],{"class":109},[36,158706,158707],{"class":38,"line":46},[36,158708,158709],{"class":109},"None\n",[36,158711,158712],{"class":38,"line":52},[36,158713,3536],{"class":109},[36,158715,158716],{"class":38,"line":66},[36,158717,32775],{"class":109},[36,158719,158720],{"class":38,"line":72},[36,158721,158722],{"class":59},"\"\"\n",[36,158724,158725],{"class":38,"line":82},[36,158726,32790],{"class":98},[36,158728,158729],{"class":38,"line":88},[36,158730,2435],{"class":98},[36,158732,158733],{"class":38,"line":113},[36,158734,158735],{"class":98},"{}\n",[36,158737,158738,158740],{"class":38,"line":119},[36,158739,155664],{"class":109},[36,158741,2435],{"class":98},[14,158743,15574],{},[26,158745,158747],{"className":30811,"code":158746,"language":30813,"meta":31,"style":31},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[33,158748,158749,158763,158767,158774,158794,158800],{"__ignoreMap":31},[36,158750,158751,158753,158755,158757,158759,158761],{"class":38,"line":39},[36,158752,146910],{"class":98},[36,158754,176],{"class":163},[36,158756,61037],{"class":109},[36,158758,621],{"class":98},[36,158760,152753],{"class":59},[36,158762,627],{"class":98},[36,158764,158765],{"class":38,"line":46},[36,158766,247],{"emptyLinePlaceholder":246},[36,158768,158769,158771],{"class":38,"line":52},[36,158770,2010],{"class":163},[36,158772,158773],{"class":98}," name:\n",[36,158775,158776,158778,158780,158782,158784,158786,158788,158790,158792],{"class":38,"line":66},[36,158777,31732],{"class":109},[36,158779,621],{"class":98},[36,158781,671],{"class":163},[36,158783,157428],{"class":59},[36,158785,1509],{"class":109},[36,158787,80242],{"class":98},[36,158789,1558],{"class":109},[36,158791,866],{"class":59},[36,158793,627],{"class":98},[36,158795,158796,158798],{"class":38,"line":72},[36,158797,2169],{"class":163},[36,158799,4190],{"class":98},[36,158801,158802,158804,158806,158809],{"class":38,"line":82},[36,158803,31732],{"class":109},[36,158805,621],{"class":98},[36,158807,158808],{"class":59},"\"姓名不能为空\"",[36,158810,627],{"class":98},[559,158812,158814],{"id":158813},"_39-match语句","3.9 match语句",[14,158816,158817,158818,158820],{},"Python 3.10 开始支持 ",[33,158819,71697],{},"。它适合处理固定选项。",[26,158822,158824],{"className":30811,"code":158823,"language":30813,"meta":31,"style":31},"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",[33,158825,158826,158842,158846,158853,158863,158874,158883,158894,158903,158914,158921],{"__ignoreMap":31},[36,158827,158828,158831,158833,158835,158837,158840],{"class":38,"line":39},[36,158829,158830],{"class":98},"command ",[36,158832,176],{"class":163},[36,158834,61037],{"class":109},[36,158836,621],{"class":98},[36,158838,158839],{"class":59},"\"请输入命令:\"",[36,158841,627],{"class":98},[36,158843,158844],{"class":38,"line":46},[36,158845,247],{"emptyLinePlaceholder":246},[36,158847,158848,158850],{"class":38,"line":52},[36,158849,71697],{"class":163},[36,158851,158852],{"class":98}," command:\n",[36,158854,158855,158858,158861],{"class":38,"line":66},[36,158856,158857],{"class":163},"    case",[36,158859,158860],{"class":59}," \"start\"",[36,158862,4190],{"class":98},[36,158864,158865,158867,158869,158872],{"class":38,"line":72},[36,158866,32884],{"class":109},[36,158868,621],{"class":98},[36,158870,158871],{"class":59},"\"启动\"",[36,158873,627],{"class":98},[36,158875,158876,158878,158881],{"class":38,"line":82},[36,158877,158857],{"class":163},[36,158879,158880],{"class":59}," \"stop\"",[36,158882,4190],{"class":98},[36,158884,158885,158887,158889,158892],{"class":38,"line":88},[36,158886,32884],{"class":109},[36,158888,621],{"class":98},[36,158890,158891],{"class":59},"\"停止\"",[36,158893,627],{"class":98},[36,158895,158896,158898,158901],{"class":38,"line":113},[36,158897,158857],{"class":163},[36,158899,158900],{"class":59}," \"restart\"",[36,158902,4190],{"class":98},[36,158904,158905,158907,158909,158912],{"class":38,"line":119},[36,158906,32884],{"class":109},[36,158908,621],{"class":98},[36,158910,158911],{"class":59},"\"重启\"",[36,158913,627],{"class":98},[36,158915,158916,158918],{"class":38,"line":131},[36,158917,158857],{"class":163},[36,158919,158920],{"class":98}," _:\n",[36,158922,158923,158925,158927,158930],{"class":38,"line":137},[36,158924,32884],{"class":109},[36,158926,621],{"class":98},[36,158928,158929],{"class":59},"\"未知命令\"",[36,158931,627],{"class":98},[14,158933,158934,158935,158937,158938,158940],{},"入门阶段掌握 ",[33,158936,155032],{}," 更重要，",[33,158939,71697],{}," 可以作为补充。",[559,158942,158944],{"id":158943},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,158946,123666],{},[571,158948,158949,158952,158955],{},[574,158950,158951],{},"输入成绩。",[574,158953,158954],{},"判断成绩是否合法。",[574,158956,158957],{},"输出等级。",[14,158959,10474],{},[26,158961,158963],{"className":30811,"code":158962,"language":30813,"meta":31,"style":31},"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",[33,158964,158965,158983,158987,159005,159016,159028,159039,159051,159062,159075,159086,159098,159109,159115],{"__ignoreMap":31},[36,158966,158967,158969,158971,158973,158975,158977,158979,158981],{"class":38,"line":39},[36,158968,155732],{"class":98},[36,158970,176],{"class":163},[36,158972,110228],{"class":109},[36,158974,621],{"class":98},[36,158976,54253],{"class":109},[36,158978,621],{"class":98},[36,158980,152783],{"class":59},[36,158982,30930],{"class":98},[36,158984,158985],{"class":38,"line":46},[36,158986,247],{"emptyLinePlaceholder":246},[36,158988,158989,158991,158993,158995,158997,158999,159001,159003],{"class":38,"line":52},[36,158990,2010],{"class":163},[36,158992,39363],{"class":163},[36,158994,4544],{"class":109},[36,158996,158626],{"class":163},[36,158998,158157],{"class":98},[36,159000,2067],{"class":163},[36,159002,6205],{"class":109},[36,159004,4190],{"class":98},[36,159006,159007,159009,159011,159014],{"class":38,"line":66},[36,159008,31732],{"class":109},[36,159010,621],{"class":98},[36,159012,159013],{"class":59},"\"成绩不合法\"",[36,159015,627],{"class":98},[36,159017,159018,159020,159022,159024,159026],{"class":38,"line":72},[36,159019,158180],{"class":163},[36,159021,158157],{"class":98},[36,159023,2178],{"class":163},[36,159025,158162],{"class":109},[36,159027,4190],{"class":98},[36,159029,159030,159032,159034,159037],{"class":38,"line":82},[36,159031,31732],{"class":109},[36,159033,621],{"class":98},[36,159035,159036],{"class":59},"\"等级:A\"",[36,159038,627],{"class":98},[36,159040,159041,159043,159045,159047,159049],{"class":38,"line":88},[36,159042,158180],{"class":163},[36,159044,158157],{"class":98},[36,159046,2178],{"class":163},[36,159048,158187],{"class":109},[36,159050,4190],{"class":98},[36,159052,159053,159055,159057,159060],{"class":38,"line":113},[36,159054,31732],{"class":109},[36,159056,621],{"class":98},[36,159058,159059],{"class":59},"\"等级:B\"",[36,159061,627],{"class":98},[36,159063,159064,159066,159068,159070,159073],{"class":38,"line":119},[36,159065,158180],{"class":163},[36,159067,158157],{"class":98},[36,159069,2178],{"class":163},[36,159071,159072],{"class":109}," 70",[36,159074,4190],{"class":98},[36,159076,159077,159079,159081,159084],{"class":38,"line":131},[36,159078,31732],{"class":109},[36,159080,621],{"class":98},[36,159082,159083],{"class":59},"\"等级:C\"",[36,159085,627],{"class":98},[36,159087,159088,159090,159092,159094,159096],{"class":38,"line":137},[36,159089,158180],{"class":163},[36,159091,158157],{"class":98},[36,159093,2178],{"class":163},[36,159095,158211],{"class":109},[36,159097,4190],{"class":98},[36,159099,159100,159102,159104,159107],{"class":38,"line":147},[36,159101,31732],{"class":109},[36,159103,621],{"class":98},[36,159105,159106],{"class":59},"\"等级:D\"",[36,159108,627],{"class":98},[36,159110,159111,159113],{"class":38,"line":153},[36,159112,2169],{"class":163},[36,159114,4190],{"class":98},[36,159116,159117,159119,159121,159124],{"class":38,"line":191},[36,159118,31732],{"class":109},[36,159120,621],{"class":98},[36,159122,159123],{"class":59},"\"等级:E\"",[36,159125,627],{"class":98},[559,159127,159129],{"id":159128},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,159131,123666],{},[571,159133,159134,159137,159140,159143],{},[574,159135,159136],{},"输入消费金额。",[574,159138,159139],{},"输入会员等级，普通、银卡、金卡。",[574,159141,159142],{},"普通不打折，银卡 9 折，金卡 8 折。",[574,159144,159145],{},"满 500 再减 50。",[14,159147,10474],{},[26,159149,159151],{"className":30811,"code":159150,"language":30813,"meta":31,"style":31},"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",[33,159152,159153,159173,159189,159193,159201,159205,159219,159229,159242,159251,159264,159272,159278,159289,159293,159307,159311,159325,159335,159339],{"__ignoreMap":31},[36,159154,159155,159158,159160,159162,159164,159166,159168,159171],{"class":38,"line":39},[36,159156,159157],{"class":98},"amount ",[36,159159,176],{"class":163},[36,159161,110228],{"class":109},[36,159163,621],{"class":98},[36,159165,54253],{"class":109},[36,159167,621],{"class":98},[36,159169,159170],{"class":59},"\"请输入消费金额:\"",[36,159172,30930],{"class":98},[36,159174,159175,159178,159180,159182,159184,159187],{"class":38,"line":46},[36,159176,159177],{"class":98},"level ",[36,159179,176],{"class":163},[36,159181,61037],{"class":109},[36,159183,621],{"class":98},[36,159185,159186],{"class":59},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[36,159188,627],{"class":98},[36,159190,159191],{"class":38,"line":52},[36,159192,247],{"emptyLinePlaceholder":246},[36,159194,159195,159197,159199],{"class":38,"line":66},[36,159196,157610],{"class":98},[36,159198,176],{"class":163},[36,159200,56131],{"class":109},[36,159202,159203],{"class":38,"line":72},[36,159204,247],{"emptyLinePlaceholder":246},[36,159206,159207,159209,159212,159214,159217],{"class":38,"line":82},[36,159208,2010],{"class":163},[36,159210,159211],{"class":98}," level ",[36,159213,3400],{"class":163},[36,159215,159216],{"class":59}," \"银卡\"",[36,159218,4190],{"class":98},[36,159220,159221,159224,159226],{"class":38,"line":88},[36,159222,159223],{"class":98},"    discount ",[36,159225,176],{"class":163},[36,159227,159228],{"class":109}," 0.9\n",[36,159230,159231,159233,159235,159237,159240],{"class":38,"line":113},[36,159232,158180],{"class":163},[36,159234,159211],{"class":98},[36,159236,3400],{"class":163},[36,159238,159239],{"class":59}," \"金卡\"",[36,159241,4190],{"class":98},[36,159243,159244,159246,159248],{"class":38,"line":119},[36,159245,159223],{"class":98},[36,159247,176],{"class":163},[36,159249,159250],{"class":109}," 0.8\n",[36,159252,159253,159255,159257,159259,159262],{"class":38,"line":131},[36,159254,158180],{"class":163},[36,159256,159211],{"class":98},[36,159258,3400],{"class":163},[36,159260,159261],{"class":59}," \"普通\"",[36,159263,4190],{"class":98},[36,159265,159266,159268,159270],{"class":38,"line":137},[36,159267,159223],{"class":98},[36,159269,176],{"class":163},[36,159271,56131],{"class":109},[36,159273,159274,159276],{"class":38,"line":147},[36,159275,2169],{"class":163},[36,159277,4190],{"class":98},[36,159279,159280,159282,159284,159287],{"class":38,"line":153},[36,159281,31732],{"class":109},[36,159283,621],{"class":98},[36,159285,159286],{"class":59},"\"会员等级输入错误，按普通会员计算\"",[36,159288,627],{"class":98},[36,159290,159291],{"class":38,"line":191},[36,159292,247],{"emptyLinePlaceholder":246},[36,159294,159295,159298,159300,159303,159305],{"class":38,"line":197},[36,159296,159297],{"class":98},"pay ",[36,159299,176],{"class":163},[36,159301,159302],{"class":98}," amount ",[36,159304,1069],{"class":163},[36,159306,157649],{"class":98},[36,159308,159309],{"class":38,"line":217},[36,159310,247],{"emptyLinePlaceholder":246},[36,159312,159313,159315,159318,159320,159323],{"class":38,"line":223},[36,159314,2010],{"class":163},[36,159316,159317],{"class":98}," pay ",[36,159319,2178],{"class":163},[36,159321,159322],{"class":109}," 500",[36,159324,4190],{"class":98},[36,159326,159327,159330,159332],{"class":38,"line":243},[36,159328,159329],{"class":98},"    pay ",[36,159331,150626],{"class":163},[36,159333,159334],{"class":109}," 50\n",[36,159336,159337],{"class":38,"line":250},[36,159338,247],{"emptyLinePlaceholder":246},[36,159340,159341,159343,159345,159347,159349,159351,159354,159356,159358,159360],{"class":38,"line":256},[36,159342,30848],{"class":109},[36,159344,621],{"class":98},[36,159346,671],{"class":163},[36,159348,157730],{"class":59},[36,159350,1509],{"class":109},[36,159352,159353],{"class":98},"pay",[36,159355,157533],{"class":163},[36,159357,1558],{"class":109},[36,159359,157386],{"class":59},[36,159361,627],{"class":98},[559,159363,159365],{"id":159364},"_312-易错点","3.12 易错点",[571,159367,159368,159371,159374,159377,159382],{},[574,159369,159370],{},"冒号不能漏。",[574,159372,159373],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[574,159375,159376],{},"多分支判断要注意顺序。",[574,159378,159379,159380,28819],{},"判断相等用 ",[33,159381,3400],{},[574,159383,159384],{},"字符串比较区分大小写：",[26,159386,159388],{"className":30811,"code":159387,"language":30813,"meta":31,"style":31},"\"Y\" == \"y\"  # False\n",[33,159389,159390],{"__ignoreMap":31},[36,159391,159392,159395,159397,159399],{"class":38,"line":39},[36,159393,159394],{"class":59},"\"Y\"",[36,159396,101990],{"class":163},[36,159398,158379],{"class":59},[36,159400,159401],{"class":42},"  # False\n",[14,159403,159404],{},"可转换后再判断：",[26,159406,159408],{"className":30811,"code":159407,"language":30813,"meta":31,"style":31},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[33,159409,159410,159427,159440],{"__ignoreMap":31},[36,159411,159412,159415,159417,159419,159421,159424],{"class":38,"line":39},[36,159413,159414],{"class":98},"answer ",[36,159416,176],{"class":163},[36,159418,61037],{"class":109},[36,159420,621],{"class":98},[36,159422,159423],{"class":59},"\"是否继续(y\u002Fn):\"",[36,159425,159426],{"class":98},").lower()\n",[36,159428,159429,159431,159434,159436,159438],{"class":38,"line":46},[36,159430,2010],{"class":163},[36,159432,159433],{"class":98}," answer ",[36,159435,3400],{"class":163},[36,159437,158379],{"class":59},[36,159439,4190],{"class":98},[36,159441,159442,159444,159446,159449],{"class":38,"line":52},[36,159443,31732],{"class":109},[36,159445,621],{"class":98},[36,159447,159448],{"class":59},"\"继续\"",[36,159450,627],{"class":98},[559,159452,159454],{"id":159453},"_313-本章练习","3.13 本章练习",[571,159456,159457,159460,159463,159466,159476],{},[574,159458,159459],{},"输入年龄，判断是否成年。",[574,159461,159462],{},"输入年份，判断是否为闰年。",[574,159464,159465],{},"输入三个数字，输出最大值。",[574,159467,159468,159469,159472,159473,159475],{},"写登录判断：用户名是 ",[33,159470,159471],{},"admin"," 且密码是 ",[33,159474,15523],{}," 才登录成功。",[574,159477,159478],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[537,159480,159481],{},"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":31,"searchDepth":46,"depth":46,"links":159483},[159484,159485,159486,159487,159488,159489,159494,159495,159496,159497,159498,159499,159500],{"id":157872,"depth":46,"text":157873},{"id":157925,"depth":46,"text":157926},{"id":158029,"depth":46,"text":158030},{"id":158119,"depth":46,"text":158120},{"id":158309,"depth":46,"text":158310},{"id":158432,"depth":46,"text":158433,"children":159490},[159491,159492,159493],{"id":158436,"depth":52,"text":158437},{"id":158493,"depth":52,"text":158494},{"id":158550,"depth":52,"text":158551},{"id":158595,"depth":46,"text":158596},{"id":158686,"depth":46,"text":158687},{"id":158813,"depth":46,"text":158814},{"id":158943,"depth":46,"text":158944},{"id":159128,"depth":46,"text":159129},{"id":159364,"depth":46,"text":159365},{"id":159453,"depth":46,"text":159454},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157864,"description":542},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159507,"title":159508,"body":159509,"description":542,"extension":543,"meta":161278,"navigation":246,"path":161279,"seo":161280,"stem":161281,"__hash__":161282},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159510,"toc":161258},[159511,159514,159518,159524,159527,159544,159548,159550,159567,159569,159614,159616,159633,159637,159640,159706,159709,159727,159731,159892,159901,159905,159909,159914,159961,159963,159969,159973,159978,160025,160027,160033,160037,160042,160078,160081,160128,160132,160138,160196,160201,160232,160237,160241,160296,160299,160371,160374,160433,160437,160440,160515,160518,160522,160628,160631,160657,160661,160673,160742,160745,160837,160841,160843,160854,160856,160986,160990,161192,161200,161204,161234,161238,161255],[10,159512,159508],{"id":159513},"_4-循环语句",[559,159515,159517],{"id":159516},"_41-为什么需要循环","4.1 为什么需要循环",[14,159519,159520,159521,159523],{},"如果要输出 1 到 100，不应该写 100 行 ",[33,159522,146846],{},"，而应该用循环。",[14,159525,159526],{},"循环适合处理重复任务：",[571,159528,159529,159532,159535,159538,159541],{},[574,159530,159531],{},"重复输出。",[574,159533,159534],{},"重复输入。",[574,159536,159537],{},"遍历数据。",[574,159539,159540],{},"持续执行菜单。",[574,159542,159543],{},"批量处理文件或数据。",[559,159545,159547],{"id":159546},"_42-while循环","4.2 while循环",[14,159549,5632],{},[26,159551,159553],{"className":30811,"code":159552,"language":30813,"meta":31,"style":31},"while 条件:\n    循环体\n",[33,159554,159555,159562],{"__ignoreMap":31},[36,159556,159557,159559],{"class":38,"line":39},[36,159558,109094],{"class":163},[36,159560,159561],{"class":98}," 条件:\n",[36,159563,159564],{"class":38,"line":46},[36,159565,159566],{"class":98},"    循环体\n",[14,159568,15574],{},[26,159570,159572],{"className":30811,"code":159571,"language":30813,"meta":31,"style":31},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[33,159573,159574,159582,159586,159598,159605],{"__ignoreMap":31},[36,159575,159576,159578,159580],{"class":38,"line":39},[36,159577,100580],{"class":98},[36,159579,176],{"class":163},[36,159581,56131],{"class":109},[36,159583,159584],{"class":38,"line":46},[36,159585,247],{"emptyLinePlaceholder":246},[36,159587,159588,159590,159592,159594,159596],{"class":38,"line":52},[36,159589,109094],{"class":163},[36,159591,9879],{"class":98},[36,159593,2067],{"class":163},[36,159595,2607],{"class":109},[36,159597,4190],{"class":98},[36,159599,159600,159602],{"class":38,"line":66},[36,159601,31732],{"class":109},[36,159603,159604],{"class":98},"(i)\n",[36,159606,159607,159610,159612],{"class":38,"line":72},[36,159608,159609],{"class":98},"    i ",[36,159611,9918],{"class":163},[36,159613,56131],{"class":109},[14,159615,81361],{},[571,159617,159618,159624,159627,159630],{},[574,159619,159620,159621,28819],{},"判断条件 ",[33,159622,159623],{},"i \u003C= 5",[574,159625,159626],{},"条件成立，执行循环体。",[574,159628,159629],{},"执行完后回到条件判断。",[574,159631,159632],{},"条件不成立，退出循环。",[559,159634,159636],{"id":159635},"_43-while累加","4.3 while累加",[14,159638,159639],{},"计算 1 到 100 的和：",[26,159641,159643],{"className":30811,"code":159642,"language":30813,"meta":31,"style":31},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[33,159644,159645,159653,159661,159665,159677,159687,159695,159699],{"__ignoreMap":31},[36,159646,159647,159649,159651],{"class":38,"line":39},[36,159648,100580],{"class":98},[36,159650,176],{"class":163},[36,159652,56131],{"class":109},[36,159654,159655,159657,159659],{"class":38,"line":46},[36,159656,157634],{"class":98},[36,159658,176],{"class":163},[36,159660,47766],{"class":109},[36,159662,159663],{"class":38,"line":52},[36,159664,247],{"emptyLinePlaceholder":246},[36,159666,159667,159669,159671,159673,159675],{"class":38,"line":66},[36,159668,109094],{"class":163},[36,159670,9879],{"class":98},[36,159672,2067],{"class":163},[36,159674,6205],{"class":109},[36,159676,4190],{"class":98},[36,159678,159679,159682,159684],{"class":38,"line":72},[36,159680,159681],{"class":98},"    total ",[36,159683,9918],{"class":163},[36,159685,159686],{"class":98}," i\n",[36,159688,159689,159691,159693],{"class":38,"line":82},[36,159690,159609],{"class":98},[36,159692,9918],{"class":163},[36,159694,56131],{"class":109},[36,159696,159697],{"class":38,"line":88},[36,159698,247],{"emptyLinePlaceholder":246},[36,159700,159701,159703],{"class":38,"line":113},[36,159702,30848],{"class":109},[36,159704,159705],{"class":98},"(total)\n",[14,159707,159708],{},"核心思想：",[571,159710,159711,159716,159721],{},[574,159712,159713,159715],{},[33,159714,1055],{}," 控制循环次数。",[574,159717,159718,159720],{},[33,159719,157735],{}," 保存累加结果。",[574,159722,159723,159724,159726],{},"每轮循环都要更新 ",[33,159725,1055],{},"，否则可能死循环。",[559,159728,159730],{"id":159729},"_44-while猜数字","4.4 while猜数字",[26,159732,159734],{"className":30811,"code":159733,"language":30813,"meta":31,"style":31},"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",[33,159735,159736,159742,159746,159763,159771,159775,159783,159803,159812,159816,159828,159839,159849,159860,159866,159888],{"__ignoreMap":31},[36,159737,159738,159740],{"class":38,"line":39},[36,159739,30825],{"class":163},[36,159741,45761],{"class":98},[36,159743,159744],{"class":38,"line":46},[36,159745,247],{"emptyLinePlaceholder":246},[36,159747,159748,159750,159752,159755,159757,159759,159761],{"class":38,"line":52},[36,159749,159414],{"class":98},[36,159751,176],{"class":163},[36,159753,159754],{"class":98}," random.randint(",[36,159756,833],{"class":109},[36,159758,12874],{"class":98},[36,159760,926],{"class":109},[36,159762,627],{"class":98},[36,159764,159765,159767,159769],{"class":38,"line":66},[36,159766,147065],{"class":98},[36,159768,176],{"class":163},[36,159770,47766],{"class":109},[36,159772,159773],{"class":38,"line":72},[36,159774,247],{"emptyLinePlaceholder":246},[36,159776,159777,159779,159781],{"class":38,"line":82},[36,159778,109094],{"class":163},[36,159780,95724],{"class":109},[36,159782,4190],{"class":98},[36,159784,159785,159788,159790,159792,159794,159796,159798,159801],{"class":38,"line":88},[36,159786,159787],{"class":98},"    guess ",[36,159789,176],{"class":163},[36,159791,2841],{"class":109},[36,159793,621],{"class":98},[36,159795,54253],{"class":109},[36,159797,621],{"class":98},[36,159799,159800],{"class":59},"\"请输入1到100之间的数字:\"",[36,159802,30930],{"class":98},[36,159804,159805,159808,159810],{"class":38,"line":113},[36,159806,159807],{"class":98},"    count ",[36,159809,9918],{"class":163},[36,159811,56131],{"class":109},[36,159813,159814],{"class":38,"line":119},[36,159815,247],{"emptyLinePlaceholder":246},[36,159817,159818,159820,159823,159825],{"class":38,"line":131},[36,159819,3552],{"class":163},[36,159821,159822],{"class":98}," guess ",[36,159824,173],{"class":163},[36,159826,159827],{"class":98}," answer:\n",[36,159829,159830,159832,159834,159837],{"class":38,"line":137},[36,159831,32884],{"class":109},[36,159833,621],{"class":98},[36,159835,159836],{"class":59},"\"猜大了\"",[36,159838,627],{"class":98},[36,159840,159841,159843,159845,159847],{"class":38,"line":147},[36,159842,39726],{"class":163},[36,159844,159822],{"class":98},[36,159846,179],{"class":163},[36,159848,159827],{"class":98},[36,159850,159851,159853,159855,159858],{"class":38,"line":153},[36,159852,32884],{"class":109},[36,159854,621],{"class":98},[36,159856,159857],{"class":59},"\"猜小了\"",[36,159859,627],{"class":98},[36,159861,159862,159864],{"class":38,"line":191},[36,159863,158396],{"class":163},[36,159865,4190],{"class":98},[36,159867,159868,159870,159872,159874,159877,159879,159881,159883,159886],{"class":38,"line":197},[36,159869,32884],{"class":109},[36,159871,621],{"class":98},[36,159873,671],{"class":163},[36,159875,159876],{"class":59},"\"猜对了，一共猜了",[36,159878,1509],{"class":109},[36,159880,84866],{"class":98},[36,159882,1558],{"class":109},[36,159884,159885],{"class":59},"次\"",[36,159887,627],{"class":98},[36,159889,159890],{"class":38,"line":217},[36,159891,32060],{"class":163},[14,159893,159894,159897,159898,159900],{},[33,159895,159896],{},"while True"," 表示无限循环，通常配合 ",[33,159899,2512],{}," 使用。",[559,159902,159904],{"id":159903},"_45-break和continue","4.5 break和continue",[588,159906,159908],{"id":159907},"_451-break","4.5.1 break",[14,159910,159911,159913],{},[33,159912,2512],{}," 直接结束整个循环。",[26,159915,159917],{"className":30811,"code":159916,"language":30813,"meta":31,"style":31},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[33,159918,159919,159939,159951,159955],{"__ignoreMap":31},[36,159920,159921,159923,159925,159927,159929,159931,159933,159935,159937],{"class":38,"line":39},[36,159922,3476],{"class":163},[36,159924,9879],{"class":98},[36,159926,26480],{"class":163},[36,159928,32876],{"class":109},[36,159930,621],{"class":98},[36,159932,833],{"class":109},[36,159934,12874],{"class":98},[36,159936,958],{"class":109},[36,159938,31219],{"class":98},[36,159940,159941,159943,159945,159947,159949],{"class":38,"line":46},[36,159942,3552],{"class":163},[36,159944,9879],{"class":98},[36,159946,3400],{"class":163},[36,159948,78502],{"class":109},[36,159950,4190],{"class":98},[36,159952,159953],{"class":38,"line":52},[36,159954,32060],{"class":163},[36,159956,159957,159959],{"class":38,"line":66},[36,159958,31732],{"class":109},[36,159960,159604],{"class":98},[14,159962,146831],{},[26,159964,159967],{"className":159965,"code":159966,"language":5638,"meta":31},[5636],"1\n2\n",[33,159968,159966],{"__ignoreMap":31},[588,159970,159972],{"id":159971},"_452-continue","4.5.2 continue",[14,159974,159975,159977],{},[33,159976,155046],{}," 跳过本轮剩余代码，进入下一轮循环。",[26,159979,159981],{"className":30811,"code":159980,"language":30813,"meta":31,"style":31},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[33,159982,159983,160003,160015,160019],{"__ignoreMap":31},[36,159984,159985,159987,159989,159991,159993,159995,159997,159999,160001],{"class":38,"line":39},[36,159986,3476],{"class":163},[36,159988,9879],{"class":98},[36,159990,26480],{"class":163},[36,159992,32876],{"class":109},[36,159994,621],{"class":98},[36,159996,833],{"class":109},[36,159998,12874],{"class":98},[36,160000,958],{"class":109},[36,160002,31219],{"class":98},[36,160004,160005,160007,160009,160011,160013],{"class":38,"line":46},[36,160006,3552],{"class":163},[36,160008,9879],{"class":98},[36,160010,3400],{"class":163},[36,160012,78502],{"class":109},[36,160014,4190],{"class":98},[36,160016,160017],{"class":38,"line":52},[36,160018,148886],{"class":163},[36,160020,160021,160023],{"class":38,"line":66},[36,160022,31732],{"class":109},[36,160024,159604],{"class":98},[14,160026,146831],{},[26,160028,160031],{"className":160029,"code":160030,"language":5638,"meta":31},[5636],"1\n2\n4\n5\n",[33,160032,160030],{"__ignoreMap":31},[559,160034,160036],{"id":160035},"_46-for循环","4.6 for循环",[14,160038,160039,160041],{},[33,160040,3476],{}," 常用于遍历序列。",[26,160043,160045],{"className":30811,"code":160044,"language":30813,"meta":31,"style":31},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[33,160046,160047,160056,160060,160071],{"__ignoreMap":31},[36,160048,160049,160051,160053],{"class":38,"line":39},[36,160050,146910],{"class":98},[36,160052,176],{"class":163},[36,160054,160055],{"class":59}," \"python\"\n",[36,160057,160058],{"class":38,"line":46},[36,160059,247],{"emptyLinePlaceholder":246},[36,160061,160062,160064,160067,160069],{"class":38,"line":52},[36,160063,3476],{"class":163},[36,160065,160066],{"class":98}," ch ",[36,160068,26480],{"class":163},[36,160070,158773],{"class":98},[36,160072,160073,160075],{"class":38,"line":66},[36,160074,31732],{"class":109},[36,160076,160077],{"class":98},"(ch)\n",[14,160079,160080],{},"遍历列表：",[26,160082,160084],{"className":30811,"code":160083,"language":30813,"meta":31,"style":31},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[33,160085,160086,160108,160112,160122],{"__ignoreMap":31},[36,160087,160088,160091,160093,160095,160097,160099,160101,160103,160106],{"class":38,"line":39},[36,160089,160090],{"class":98},"students ",[36,160092,176],{"class":163},[36,160094,52658],{"class":98},[36,160096,150262],{"class":59},[36,160098,12874],{"class":98},[36,160100,151310],{"class":59},[36,160102,12874],{"class":98},[36,160104,160105],{"class":59},"\"小刚\"",[36,160107,33679],{"class":98},[36,160109,160110],{"class":38,"line":46},[36,160111,247],{"emptyLinePlaceholder":246},[36,160113,160114,160116,160118,160120],{"class":38,"line":52},[36,160115,3476],{"class":163},[36,160117,152511],{"class":98},[36,160119,26480],{"class":163},[36,160121,152516],{"class":98},[36,160123,160124,160126],{"class":38,"line":66},[36,160125,31732],{"class":109},[36,160127,150416],{"class":98},[559,160129,160131],{"id":160130},"_47-range函数","4.7 range函数",[14,160133,160134,160137],{},[33,160135,160136],{},"range()"," 用于生成整数序列。",[26,160139,160141],{"className":30811,"code":160140,"language":30813,"meta":31,"style":31},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[33,160142,160143,160157,160175],{"__ignoreMap":31},[36,160144,160145,160147,160149,160151,160154],{"class":38,"line":39},[36,160146,33849],{"class":109},[36,160148,621],{"class":98},[36,160150,933],{"class":109},[36,160152,160153],{"class":98},")          ",[36,160155,160156],{"class":42},"# 0,1,2,3,4\n",[36,160158,160159,160161,160163,160165,160167,160169,160172],{"class":38,"line":46},[36,160160,33849],{"class":109},[36,160162,621],{"class":98},[36,160164,833],{"class":109},[36,160166,12874],{"class":98},[36,160168,933],{"class":109},[36,160170,160171],{"class":98},")       ",[36,160173,160174],{"class":42},"# 1,2,3,4\n",[36,160176,160177,160179,160181,160183,160185,160187,160189,160191,160193],{"class":38,"line":52},[36,160178,33849],{"class":109},[36,160180,621],{"class":98},[36,160182,833],{"class":109},[36,160184,12874],{"class":98},[36,160186,1060],{"class":109},[36,160188,12874],{"class":98},[36,160190,694],{"class":109},[36,160192,156035],{"class":98},[36,160194,160195],{"class":42},"# 1,3,5,7,9\n",[14,160197,160198,160199,25055],{},"配合 ",[33,160200,3476],{},[26,160202,160204],{"className":30811,"code":160203,"language":30813,"meta":31,"style":31},"for i in range(1, 6):\n    print(i)\n",[33,160205,160206,160226],{"__ignoreMap":31},[36,160207,160208,160210,160212,160214,160216,160218,160220,160222,160224],{"class":38,"line":39},[36,160209,3476],{"class":163},[36,160211,9879],{"class":98},[36,160213,26480],{"class":163},[36,160215,32876],{"class":109},[36,160217,621],{"class":98},[36,160219,833],{"class":109},[36,160221,12874],{"class":98},[36,160223,958],{"class":109},[36,160225,31219],{"class":98},[36,160227,160228,160230],{"class":38,"line":46},[36,160229,31732],{"class":109},[36,160231,159604],{"class":98},[14,160233,9466,160234,160236],{},[33,160235,33849],{}," 的结束值不包含在内。",[559,160238,160240],{"id":160239},"_48-for循环求和","4.8 for循环求和",[26,160242,160244],{"className":30811,"code":160243,"language":30813,"meta":31,"style":31},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[33,160245,160246,160254,160258,160278,160286,160290],{"__ignoreMap":31},[36,160247,160248,160250,160252],{"class":38,"line":39},[36,160249,157634],{"class":98},[36,160251,176],{"class":163},[36,160253,47766],{"class":109},[36,160255,160256],{"class":38,"line":46},[36,160257,247],{"emptyLinePlaceholder":246},[36,160259,160260,160262,160264,160266,160268,160270,160272,160274,160276],{"class":38,"line":52},[36,160261,3476],{"class":163},[36,160263,9879],{"class":98},[36,160265,26480],{"class":163},[36,160267,32876],{"class":109},[36,160269,621],{"class":98},[36,160271,833],{"class":109},[36,160273,12874],{"class":98},[36,160275,951],{"class":109},[36,160277,31219],{"class":98},[36,160279,160280,160282,160284],{"class":38,"line":66},[36,160281,159681],{"class":98},[36,160283,9918],{"class":163},[36,160285,159686],{"class":98},[36,160287,160288],{"class":38,"line":72},[36,160289,247],{"emptyLinePlaceholder":246},[36,160291,160292,160294],{"class":38,"line":82},[36,160293,30848],{"class":109},[36,160295,159705],{"class":98},[14,160297,160298],{},"求偶数和：",[26,160300,160302],{"className":30811,"code":160301,"language":30813,"meta":31,"style":31},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[33,160303,160304,160312,160316,160336,160352,160361,160365],{"__ignoreMap":31},[36,160305,160306,160308,160310],{"class":38,"line":39},[36,160307,157634],{"class":98},[36,160309,176],{"class":163},[36,160311,47766],{"class":109},[36,160313,160314],{"class":38,"line":46},[36,160315,247],{"emptyLinePlaceholder":246},[36,160317,160318,160320,160322,160324,160326,160328,160330,160332,160334],{"class":38,"line":52},[36,160319,3476],{"class":163},[36,160321,9879],{"class":98},[36,160323,26480],{"class":163},[36,160325,32876],{"class":109},[36,160327,621],{"class":98},[36,160329,833],{"class":109},[36,160331,12874],{"class":98},[36,160333,951],{"class":109},[36,160335,31219],{"class":98},[36,160337,160338,160340,160342,160344,160346,160348,160350],{"class":38,"line":66},[36,160339,3552],{"class":163},[36,160341,9879],{"class":98},[36,160343,942],{"class":163},[36,160345,15194],{"class":109},[36,160347,101990],{"class":163},[36,160349,4544],{"class":109},[36,160351,4190],{"class":98},[36,160353,160354,160357,160359],{"class":38,"line":72},[36,160355,160356],{"class":98},"        total ",[36,160358,9918],{"class":163},[36,160360,159686],{"class":98},[36,160362,160363],{"class":38,"line":82},[36,160364,247],{"emptyLinePlaceholder":246},[36,160366,160367,160369],{"class":38,"line":88},[36,160368,30848],{"class":109},[36,160370,159705],{"class":98},[14,160372,160373],{},"也可以：",[26,160375,160377],{"className":30811,"code":160376,"language":30813,"meta":31,"style":31},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[33,160378,160379,160387,160391,160415,160423,160427],{"__ignoreMap":31},[36,160380,160381,160383,160385],{"class":38,"line":39},[36,160382,157634],{"class":98},[36,160384,176],{"class":163},[36,160386,47766],{"class":109},[36,160388,160389],{"class":38,"line":46},[36,160390,247],{"emptyLinePlaceholder":246},[36,160392,160393,160395,160397,160399,160401,160403,160405,160407,160409,160411,160413],{"class":38,"line":52},[36,160394,3476],{"class":163},[36,160396,9879],{"class":98},[36,160398,26480],{"class":163},[36,160400,32876],{"class":109},[36,160402,621],{"class":98},[36,160404,694],{"class":109},[36,160406,12874],{"class":98},[36,160408,951],{"class":109},[36,160410,12874],{"class":98},[36,160412,694],{"class":109},[36,160414,31219],{"class":98},[36,160416,160417,160419,160421],{"class":38,"line":66},[36,160418,159681],{"class":98},[36,160420,9918],{"class":163},[36,160422,159686],{"class":98},[36,160424,160425],{"class":38,"line":72},[36,160426,247],{"emptyLinePlaceholder":246},[36,160428,160429,160431],{"class":38,"line":82},[36,160430,30848],{"class":109},[36,160432,159705],{"class":98},[559,160434,160436],{"id":160435},"_49-循环嵌套","4.9 循环嵌套",[14,160438,160439],{},"嵌套循环就是循环里面再写循环。",[26,160441,160443],{"className":30811,"code":160442,"language":30813,"meta":31,"style":31},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[33,160444,160445,160465,160485],{"__ignoreMap":31},[36,160446,160447,160449,160451,160453,160455,160457,160459,160461,160463],{"class":38,"line":39},[36,160448,3476],{"class":163},[36,160450,9879],{"class":98},[36,160452,26480],{"class":163},[36,160454,32876],{"class":109},[36,160456,621],{"class":98},[36,160458,833],{"class":109},[36,160460,12874],{"class":98},[36,160462,908],{"class":109},[36,160464,31219],{"class":98},[36,160466,160467,160469,160471,160473,160475,160477,160479,160481,160483],{"class":38,"line":46},[36,160468,3652],{"class":163},[36,160470,9941],{"class":98},[36,160472,26480],{"class":163},[36,160474,32876],{"class":109},[36,160476,621],{"class":98},[36,160478,833],{"class":109},[36,160480,12874],{"class":98},[36,160482,908],{"class":109},[36,160484,31219],{"class":98},[36,160486,160487,160489,160491,160493,160496,160498,160500,160502,160505,160507,160509,160511,160513],{"class":38,"line":52},[36,160488,32884],{"class":109},[36,160490,621],{"class":98},[36,160492,671],{"class":163},[36,160494,160495],{"class":59},"\"i=",[36,160497,1509],{"class":109},[36,160499,1055],{"class":98},[36,160501,1558],{"class":109},[36,160503,160504],{"class":59},", j=",[36,160506,1509],{"class":109},[36,160508,1081],{"class":98},[36,160510,1558],{"class":109},[36,160512,866],{"class":59},[36,160514,627],{"class":98},[14,160516,160517],{},"外层循环执行一次，内层循环执行完整一轮。",[559,160519,160521],{"id":160520},"_410-九九乘法表","4.10 九九乘法表",[26,160523,160525],{"className":30811,"code":160524,"language":30813,"meta":31,"style":31},"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",[33,160526,160527,160547,160570,160622],{"__ignoreMap":31},[36,160528,160529,160531,160533,160535,160537,160539,160541,160543,160545],{"class":38,"line":39},[36,160530,3476],{"class":163},[36,160532,9879],{"class":98},[36,160534,26480],{"class":163},[36,160536,32876],{"class":109},[36,160538,621],{"class":98},[36,160540,833],{"class":109},[36,160542,12874],{"class":98},[36,160544,1060],{"class":109},[36,160546,31219],{"class":98},[36,160548,160549,160551,160553,160555,160557,160559,160561,160564,160566,160568],{"class":38,"line":46},[36,160550,3652],{"class":163},[36,160552,9941],{"class":98},[36,160554,26480],{"class":163},[36,160556,32876],{"class":109},[36,160558,621],{"class":98},[36,160560,833],{"class":109},[36,160562,160563],{"class":98},", i ",[36,160565,1095],{"class":163},[36,160567,25555],{"class":109},[36,160569,31219],{"class":98},[36,160571,160572,160574,160576,160578,160580,160582,160584,160586,160588,160590,160592,160594,160596,160598,160600,160602,160604,160606,160608,160610,160612,160614,160616,160618,160620],{"class":38,"line":52},[36,160573,32884],{"class":109},[36,160575,621],{"class":98},[36,160577,671],{"class":163},[36,160579,866],{"class":59},[36,160581,1509],{"class":109},[36,160583,1081],{"class":98},[36,160585,1558],{"class":109},[36,160587,1069],{"class":59},[36,160589,1509],{"class":109},[36,160591,1055],{"class":98},[36,160593,1558],{"class":109},[36,160595,176],{"class":59},[36,160597,1509],{"class":109},[36,160599,100580],{"class":98},[36,160601,1069],{"class":163},[36,160603,3861],{"class":98},[36,160605,1558],{"class":109},[36,160607,866],{"class":59},[36,160609,12874],{"class":98},[36,160611,46234],{"class":5667},[36,160613,176],{"class":163},[36,160615,866],{"class":59},[36,160617,1712],{"class":109},[36,160619,866],{"class":59},[36,160621,627],{"class":98},[36,160623,160624,160626],{"class":38,"line":66},[36,160625,31732],{"class":109},[36,160627,2435],{"class":98},[14,160629,160630],{},"关键点：",[571,160632,160633,160639,160645,160651],{},[574,160634,160635,160636,160638],{},"外层 ",[33,160637,1055],{}," 控制行。",[574,160640,160641,160642,160644],{},"内层 ",[33,160643,1081],{}," 控制列。",[574,160646,160647,160648,160650],{},"每行结束后用 ",[33,160649,146846],{}," 换行。",[574,160652,160653,160656],{},[33,160654,160655],{},"end=\"\\t\""," 让同一行的内容横向排列。",[559,160658,160660],{"id":160659},"_411-循环else","4.11 循环else",[14,160662,160663,160664,160666,160667,160669,160670,160672],{},"Python 的循环可以带 ",[33,160665,2169],{},"。当循环正常结束时执行 ",[33,160668,2169],{},"，如果被 ",[33,160671,2512],{}," 打断，则不执行。",[26,160674,160676],{"className":30811,"code":160675,"language":30813,"meta":31,"style":31},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[33,160677,160678,160698,160710,160721,160725,160731],{"__ignoreMap":31},[36,160679,160680,160682,160684,160686,160688,160690,160692,160694,160696],{"class":38,"line":39},[36,160681,3476],{"class":163},[36,160683,9879],{"class":98},[36,160685,26480],{"class":163},[36,160687,32876],{"class":109},[36,160689,621],{"class":98},[36,160691,833],{"class":109},[36,160693,12874],{"class":98},[36,160695,958],{"class":109},[36,160697,31219],{"class":98},[36,160699,160700,160702,160704,160706,160708],{"class":38,"line":46},[36,160701,3552],{"class":163},[36,160703,9879],{"class":98},[36,160705,3400],{"class":163},[36,160707,2497],{"class":109},[36,160709,4190],{"class":98},[36,160711,160712,160714,160716,160719],{"class":38,"line":52},[36,160713,32884],{"class":109},[36,160715,621],{"class":98},[36,160717,160718],{"class":59},"\"找到了\"",[36,160720,627],{"class":98},[36,160722,160723],{"class":38,"line":66},[36,160724,32060],{"class":163},[36,160726,160727,160729],{"class":38,"line":72},[36,160728,2169],{"class":163},[36,160730,4190],{"class":98},[36,160732,160733,160735,160737,160740],{"class":38,"line":82},[36,160734,31732],{"class":109},[36,160736,621],{"class":98},[36,160738,160739],{"class":59},"\"没找到\"",[36,160741,627],{"class":98},[14,160743,160744],{},"常用于搜索。",[26,160746,160748],{"className":30811,"code":160747,"language":30813,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[33,160749,160750,160771,160780,160784,160796,160807,160817,160821,160827],{"__ignoreMap":31},[36,160751,160752,160755,160757,160759,160761,160763,160765,160767,160769],{"class":38,"line":39},[36,160753,160754],{"class":98},"names ",[36,160756,176],{"class":163},[36,160758,52658],{"class":98},[36,160760,150262],{"class":59},[36,160762,12874],{"class":98},[36,160764,151310],{"class":59},[36,160766,12874],{"class":98},[36,160768,160105],{"class":59},[36,160770,33679],{"class":98},[36,160772,160773,160775,160777],{"class":38,"line":46},[36,160774,112009],{"class":98},[36,160776,176],{"class":163},[36,160778,160779],{"class":59}," \"小李\"\n",[36,160781,160782],{"class":38,"line":52},[36,160783,247],{"emptyLinePlaceholder":246},[36,160785,160786,160788,160791,160793],{"class":38,"line":66},[36,160787,3476],{"class":163},[36,160789,160790],{"class":98}," name ",[36,160792,26480],{"class":163},[36,160794,160795],{"class":98}," names:\n",[36,160797,160798,160800,160802,160804],{"class":38,"line":72},[36,160799,3552],{"class":163},[36,160801,160790],{"class":98},[36,160803,3400],{"class":163},[36,160805,160806],{"class":98}," target:\n",[36,160808,160809,160811,160813,160815],{"class":38,"line":82},[36,160810,32884],{"class":109},[36,160812,621],{"class":98},[36,160814,160718],{"class":59},[36,160816,627],{"class":98},[36,160818,160819],{"class":38,"line":88},[36,160820,32060],{"class":163},[36,160822,160823,160825],{"class":38,"line":113},[36,160824,2169],{"class":163},[36,160826,4190],{"class":98},[36,160828,160829,160831,160833,160835],{"class":38,"line":119},[36,160830,31732],{"class":109},[36,160832,621],{"class":98},[36,160834,160739],{"class":59},[36,160836,627],{"class":98},[559,160838,160840],{"id":160839},"_412-小案例登录重试","4.12 小案例：登录重试",[14,160842,123666],{},[571,160844,160845,160848,160851],{},[574,160846,160847],{},"用户最多输入 3 次密码。",[574,160849,160850],{},"密码正确则登录成功。",[574,160852,160853],{},"3 次都错误则锁定账号。",[14,160855,10474],{},[26,160857,160859],{"className":30811,"code":160858,"language":30813,"meta":31,"style":31},"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",[33,160860,160861,160871,160875,160891,160907,160911,160923,160934,160938,160944,160969,160975],{"__ignoreMap":31},[36,160862,160863,160866,160868],{"class":38,"line":39},[36,160864,160865],{"class":98},"password ",[36,160867,176],{"class":163},[36,160869,160870],{"class":59}," \"123456\"\n",[36,160872,160873],{"class":38,"line":46},[36,160874,247],{"emptyLinePlaceholder":246},[36,160876,160877,160879,160881,160883,160885,160887,160889],{"class":38,"line":52},[36,160878,3476],{"class":163},[36,160880,9879],{"class":98},[36,160882,26480],{"class":163},[36,160884,32876],{"class":109},[36,160886,621],{"class":98},[36,160888,689],{"class":109},[36,160890,31219],{"class":98},[36,160892,160893,160896,160898,160900,160902,160905],{"class":38,"line":66},[36,160894,160895],{"class":98},"    user_password ",[36,160897,176],{"class":163},[36,160899,61037],{"class":109},[36,160901,621],{"class":98},[36,160903,160904],{"class":59},"\"请输入密码:\"",[36,160906,627],{"class":98},[36,160908,160909],{"class":38,"line":72},[36,160910,247],{"emptyLinePlaceholder":246},[36,160912,160913,160915,160918,160920],{"class":38,"line":82},[36,160914,3552],{"class":163},[36,160916,160917],{"class":98}," user_password ",[36,160919,3400],{"class":163},[36,160921,160922],{"class":98}," password:\n",[36,160924,160925,160927,160929,160932],{"class":38,"line":88},[36,160926,32884],{"class":109},[36,160928,621],{"class":98},[36,160930,160931],{"class":59},"\"登录成功\"",[36,160933,627],{"class":98},[36,160935,160936],{"class":38,"line":113},[36,160937,32060],{"class":163},[36,160939,160940,160942],{"class":38,"line":119},[36,160941,158396],{"class":163},[36,160943,4190],{"class":98},[36,160945,160946,160948,160950,160952,160955,160958,160960,160962,160964,160967],{"class":38,"line":131},[36,160947,32884],{"class":109},[36,160949,621],{"class":98},[36,160951,671],{"class":163},[36,160953,160954],{"class":59},"\"密码错误，还剩",[36,160956,160957],{"class":109},"{2",[36,160959,52703],{"class":163},[36,160961,3483],{"class":98},[36,160963,1558],{"class":109},[36,160965,160966],{"class":59},"次机会\"",[36,160968,627],{"class":98},[36,160970,160971,160973],{"class":38,"line":137},[36,160972,2169],{"class":163},[36,160974,4190],{"class":98},[36,160976,160977,160979,160981,160984],{"class":38,"line":147},[36,160978,31732],{"class":109},[36,160980,621],{"class":98},[36,160982,160983],{"class":59},"\"账号已锁定\"",[36,160985,627],{"class":98},[559,160987,160989],{"id":160988},"_413-小案例菜单程序","4.13 小案例：菜单程序",[26,160991,160993],{"className":30811,"code":160992,"language":30813,"meta":31,"style":31},"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",[33,160994,160995,161003,161014,161025,161036,161047,161058,161062,161077,161081,161093,161104,161116,161127,161139,161150,161162,161172,161176,161182],{"__ignoreMap":31},[36,160996,160997,160999,161001],{"class":38,"line":39},[36,160998,109094],{"class":163},[36,161000,95724],{"class":109},[36,161002,4190],{"class":98},[36,161004,161005,161007,161009,161012],{"class":38,"line":46},[36,161006,31732],{"class":109},[36,161008,621],{"class":98},[36,161010,161011],{"class":59},"\"====== 菜单 ======\"",[36,161013,627],{"class":98},[36,161015,161016,161018,161020,161023],{"class":38,"line":52},[36,161017,31732],{"class":109},[36,161019,621],{"class":98},[36,161021,161022],{"class":59},"\"1. 查询余额\"",[36,161024,627],{"class":98},[36,161026,161027,161029,161031,161034],{"class":38,"line":66},[36,161028,31732],{"class":109},[36,161030,621],{"class":98},[36,161032,161033],{"class":59},"\"2. 存款\"",[36,161035,627],{"class":98},[36,161037,161038,161040,161042,161045],{"class":38,"line":72},[36,161039,31732],{"class":109},[36,161041,621],{"class":98},[36,161043,161044],{"class":59},"\"3. 取款\"",[36,161046,627],{"class":98},[36,161048,161049,161051,161053,161056],{"class":38,"line":82},[36,161050,31732],{"class":109},[36,161052,621],{"class":98},[36,161054,161055],{"class":59},"\"0. 退出\"",[36,161057,627],{"class":98},[36,161059,161060],{"class":38,"line":88},[36,161061,247],{"emptyLinePlaceholder":246},[36,161063,161064,161067,161069,161071,161073,161075],{"class":38,"line":113},[36,161065,161066],{"class":98},"    choice ",[36,161068,176],{"class":163},[36,161070,61037],{"class":109},[36,161072,621],{"class":98},[36,161074,153447],{"class":59},[36,161076,627],{"class":98},[36,161078,161079],{"class":38,"line":119},[36,161080,247],{"emptyLinePlaceholder":246},[36,161082,161083,161085,161087,161089,161091],{"class":38,"line":131},[36,161084,3552],{"class":163},[36,161086,153460],{"class":98},[36,161088,3400],{"class":163},[36,161090,153465],{"class":59},[36,161092,4190],{"class":98},[36,161094,161095,161097,161099,161102],{"class":38,"line":137},[36,161096,32884],{"class":109},[36,161098,621],{"class":98},[36,161100,161101],{"class":59},"\"余额为1000元\"",[36,161103,627],{"class":98},[36,161105,161106,161108,161110,161112,161114],{"class":38,"line":147},[36,161107,39726],{"class":163},[36,161109,153460],{"class":98},[36,161111,3400],{"class":163},[36,161113,153484],{"class":59},[36,161115,4190],{"class":98},[36,161117,161118,161120,161122,161125],{"class":38,"line":153},[36,161119,32884],{"class":109},[36,161121,621],{"class":98},[36,161123,161124],{"class":59},"\"存款功能\"",[36,161126,627],{"class":98},[36,161128,161129,161131,161133,161135,161137],{"class":38,"line":191},[36,161130,39726],{"class":163},[36,161132,153460],{"class":98},[36,161134,3400],{"class":163},[36,161136,153502],{"class":59},[36,161138,4190],{"class":98},[36,161140,161141,161143,161145,161148],{"class":38,"line":197},[36,161142,32884],{"class":109},[36,161144,621],{"class":98},[36,161146,161147],{"class":59},"\"取款功能\"",[36,161149,627],{"class":98},[36,161151,161152,161154,161156,161158,161160],{"class":38,"line":217},[36,161153,39726],{"class":163},[36,161155,153460],{"class":98},[36,161157,3400],{"class":163},[36,161159,153556],{"class":59},[36,161161,4190],{"class":98},[36,161163,161164,161166,161168,161170],{"class":38,"line":223},[36,161165,32884],{"class":109},[36,161167,621],{"class":98},[36,161169,153567],{"class":59},[36,161171,627],{"class":98},[36,161173,161174],{"class":38,"line":243},[36,161175,32060],{"class":163},[36,161177,161178,161180],{"class":38,"line":250},[36,161179,158396],{"class":163},[36,161181,4190],{"class":98},[36,161183,161184,161186,161188,161190],{"class":38,"line":256},[36,161185,32884],{"class":109},[36,161187,621],{"class":98},[36,161189,153588],{"class":59},[36,161191,627],{"class":98},[14,161193,161194,161195,161197,161198,28819],{},"菜单类程序通常使用 ",[33,161196,159896],{},"，用户选择退出时 ",[33,161199,2512],{},[559,161201,161203],{"id":161202},"_414-易错点","4.14 易错点",[571,161205,161206,161211,161217,161225,161231],{},[574,161207,161208,161210],{},[33,161209,109094],{}," 循环必须更新控制变量。",[574,161212,161213,161216],{},[33,161214,161215],{},"range(1, 10)"," 不包含 10。",[574,161218,161219,161221,161222,161224],{},[33,161220,2512],{}," 结束整个循环，",[33,161223,155046],{}," 只跳过本轮。",[574,161226,161227,161228,161230],{},"嵌套循环中，",[33,161229,2512],{}," 只跳出当前所在的一层循环。",[574,161232,161233],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[559,161235,161237],{"id":161236},"_415-本章练习","4.15 本章练习",[571,161239,161240,161243,161246,161249,161252],{},[574,161241,161242],{},"输出 1 到 100。",[574,161244,161245],{},"计算 1 到 100 的偶数和。",[574,161247,161248],{},"输出 100 以内能被 3 和 5 同时整除的数。",[574,161250,161251],{},"编写猜数字游戏，限制最多猜 7 次。",[574,161253,161254],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[537,161256,161257],{},"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":31,"searchDepth":46,"depth":46,"links":161259},[161260,161261,161262,161263,161264,161268,161269,161270,161271,161272,161273,161274,161275,161276,161277],{"id":159516,"depth":46,"text":159517},{"id":159546,"depth":46,"text":159547},{"id":159635,"depth":46,"text":159636},{"id":159729,"depth":46,"text":159730},{"id":159903,"depth":46,"text":159904,"children":161265},[161266,161267],{"id":159907,"depth":52,"text":159908},{"id":159971,"depth":52,"text":159972},{"id":160035,"depth":46,"text":160036},{"id":160130,"depth":46,"text":160131},{"id":160239,"depth":46,"text":160240},{"id":160435,"depth":46,"text":160436},{"id":160520,"depth":46,"text":160521},{"id":160659,"depth":46,"text":160660},{"id":160839,"depth":46,"text":160840},{"id":160988,"depth":46,"text":160989},{"id":161202,"depth":46,"text":161203},{"id":161236,"depth":46,"text":161237},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159508,"description":542},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161284,"title":161285,"body":161286,"description":542,"extension":543,"meta":163291,"navigation":246,"path":163292,"seo":163293,"stem":163294,"__hash__":163295},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161287,"toc":163271},[161288,161291,161295,161298,161301,161315,161318,161332,161336,161338,161357,161359,161406,161408,161422,161426,161500,161503,161507,161510,161569,161577,161580,161633,161636,161640,161645,161700,161708,161758,161762,161767,161775,161874,161880,161884,161889,161892,161903,161944,161957,161961,161964,162000,162003,162016,162019,162079,162083,162087,162090,162141,162145,162148,162195,162201,162267,162270,162274,162277,162393,162396,162400,162403,162509,162513,162516,162554,162557,162599,162602,162662,162665,162669,163133,163136,163140,163167,163173,163234,163238,163268],[10,161289,161285],{"id":161290},"_5-函数基础",[559,161292,161294],{"id":161293},"_51-为什么需要函数","5.1 为什么需要函数",[14,161296,161297],{},"函数用于封装一段可以重复使用的代码。",[14,161299,161300],{},"不使用函数的问题：",[571,161302,161303,161306,161309,161312],{},[574,161304,161305],{},"重复代码多。",[574,161307,161308],{},"修改逻辑时容易漏改。",[574,161310,161311],{},"主流程不清晰。",[574,161313,161314],{},"程序越写越长，难以维护。",[14,161316,161317],{},"使用函数后的好处：",[571,161319,161320,161323,161326,161329],{},[574,161321,161322],{},"提高复用性。",[574,161324,161325],{},"提高可读性。",[574,161327,161328],{},"便于调试。",[574,161330,161331],{},"便于分工。",[559,161333,161335],{"id":161334},"_52-函数定义","5.2 函数定义",[14,161337,5632],{},[26,161339,161341],{"className":30811,"code":161340,"language":30813,"meta":31,"style":31},"def 函数名():\n    函数体\n",[33,161342,161343,161352],{"__ignoreMap":31},[36,161344,161345,161347,161350],{"class":38,"line":39},[36,161346,32380],{"class":163},[36,161348,161349],{"class":55}," 函数名",[36,161351,32386],{"class":98},[36,161353,161354],{"class":38,"line":46},[36,161355,161356],{"class":98},"    函数体\n",[14,161358,15574],{},[26,161360,161362],{"className":30811,"code":161361,"language":30813,"meta":31,"style":31},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[33,161363,161364,161373,161383,161393,161397,161401],{"__ignoreMap":31},[36,161365,161366,161368,161371],{"class":38,"line":39},[36,161367,32380],{"class":163},[36,161369,161370],{"class":55}," say_hello",[36,161372,32386],{"class":98},[36,161374,161375,161377,161379,161381],{"class":38,"line":46},[36,161376,31732],{"class":109},[36,161378,621],{"class":98},[36,161380,6295],{"class":59},[36,161382,627],{"class":98},[36,161384,161385,161387,161389,161391],{"class":38,"line":52},[36,161386,31732],{"class":109},[36,161388,621],{"class":98},[36,161390,147013],{"class":59},[36,161392,627],{"class":98},[36,161394,161395],{"class":38,"line":66},[36,161396,247],{"emptyLinePlaceholder":246},[36,161398,161399],{"class":38,"line":72},[36,161400,247],{"emptyLinePlaceholder":246},[36,161402,161403],{"class":38,"line":82},[36,161404,161405],{"class":98},"say_hello()\n",[14,161407,9466],{},[571,161409,161410,161413,161416,161419],{},[574,161411,161412],{},"函数必须先定义，再调用。",[574,161414,161415],{},"函数名遵循变量命名规则。",[574,161417,161418],{},"函数体需要缩进。",[574,161420,161421],{},"函数不调用就不会执行。",[559,161423,161425],{"id":161424},"_53-函数调用","5.3 函数调用",[26,161427,161429],{"className":30811,"code":161428,"language":30813,"meta":31,"style":31},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[33,161430,161431,161440,161451,161462,161473,161483,161487,161491,161496],{"__ignoreMap":31},[36,161432,161433,161435,161438],{"class":38,"line":39},[36,161434,32380],{"class":163},[36,161436,161437],{"class":55}," print_menu",[36,161439,32386],{"class":98},[36,161441,161442,161444,161446,161449],{"class":38,"line":46},[36,161443,31732],{"class":109},[36,161445,621],{"class":98},[36,161447,161448],{"class":59},"\"1. 查询\"",[36,161450,627],{"class":98},[36,161452,161453,161455,161457,161460],{"class":38,"line":52},[36,161454,31732],{"class":109},[36,161456,621],{"class":98},[36,161458,161459],{"class":59},"\"2. 添加\"",[36,161461,627],{"class":98},[36,161463,161464,161466,161468,161471],{"class":38,"line":66},[36,161465,31732],{"class":109},[36,161467,621],{"class":98},[36,161469,161470],{"class":59},"\"3. 删除\"",[36,161472,627],{"class":98},[36,161474,161475,161477,161479,161481],{"class":38,"line":72},[36,161476,31732],{"class":109},[36,161478,621],{"class":98},[36,161480,161055],{"class":59},[36,161482,627],{"class":98},[36,161484,161485],{"class":38,"line":82},[36,161486,247],{"emptyLinePlaceholder":246},[36,161488,161489],{"class":38,"line":88},[36,161490,247],{"emptyLinePlaceholder":246},[36,161492,161493],{"class":38,"line":113},[36,161494,161495],{"class":98},"print_menu()\n",[36,161497,161498],{"class":38,"line":119},[36,161499,161495],{"class":98},[14,161501,161502],{},"函数可以多次调用，每次调用都会执行函数体。",[559,161504,161506],{"id":161505},"_54-参数","5.4 参数",[14,161508,161509],{},"参数用于向函数传递数据。",[26,161511,161513],{"className":30811,"code":161512,"language":30813,"meta":31,"style":31},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[33,161514,161515,161524,161544,161548,161552,161561],{"__ignoreMap":31},[36,161516,161517,161519,161521],{"class":38,"line":39},[36,161518,32380],{"class":163},[36,161520,161370],{"class":55},[36,161522,161523],{"class":98},"(name):\n",[36,161525,161526,161528,161530,161532,161534,161536,161538,161540,161542],{"class":38,"line":46},[36,161527,31732],{"class":109},[36,161529,621],{"class":98},[36,161531,671],{"class":163},[36,161533,157428],{"class":59},[36,161535,1509],{"class":109},[36,161537,80242],{"class":98},[36,161539,1558],{"class":109},[36,161541,866],{"class":59},[36,161543,627],{"class":98},[36,161545,161546],{"class":38,"line":52},[36,161547,247],{"emptyLinePlaceholder":246},[36,161549,161550],{"class":38,"line":66},[36,161551,247],{"emptyLinePlaceholder":246},[36,161553,161554,161557,161559],{"class":38,"line":72},[36,161555,161556],{"class":98},"say_hello(",[36,161558,150262],{"class":59},[36,161560,627],{"class":98},[36,161562,161563,161565,161567],{"class":38,"line":82},[36,161564,161556],{"class":98},[36,161566,151310],{"class":59},[36,161568,627],{"class":98},[14,161570,161571,161573,161574,161576],{},[33,161572,80242],{}," 是形参，",[33,161575,150262],{}," 是实参。",[14,161578,161579],{},"多个参数：",[26,161581,161583],{"className":30811,"code":161582,"language":30813,"meta":31,"style":31},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[33,161584,161585,161593,161606,161612,161616,161620],{"__ignoreMap":31},[36,161586,161587,161589,161591],{"class":38,"line":39},[36,161588,32380],{"class":163},[36,161590,5660],{"class":55},[36,161592,151467],{"class":98},[36,161594,161595,161598,161600,161602,161604],{"class":38,"line":46},[36,161596,161597],{"class":98},"    result ",[36,161599,176],{"class":163},[36,161601,11308],{"class":98},[36,161603,1095],{"class":163},[36,161605,151478],{"class":98},[36,161607,161608,161610],{"class":38,"line":52},[36,161609,31732],{"class":109},[36,161611,77017],{"class":98},[36,161613,161614],{"class":38,"line":66},[36,161615,247],{"emptyLinePlaceholder":246},[36,161617,161618],{"class":38,"line":72},[36,161619,247],{"emptyLinePlaceholder":246},[36,161621,161622,161625,161627,161629,161631],{"class":38,"line":82},[36,161623,161624],{"class":98},"add(",[36,161626,1060],{"class":109},[36,161628,12874],{"class":98},[36,161630,1313],{"class":109},[36,161632,627],{"class":98},[14,161634,161635],{},"调用时参数数量必须匹配。",[559,161637,161639],{"id":161638},"_55-返回值","5.5 返回值",[14,161641,161642,161644],{},[33,161643,17485],{}," 用于把函数内部的结果返回给调用者。",[26,161646,161648],{"className":30811,"code":161647,"language":30813,"meta":31,"style":31},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[33,161649,161650,161658,161668,161672,161676,161694],{"__ignoreMap":31},[36,161651,161652,161654,161656],{"class":38,"line":39},[36,161653,32380],{"class":163},[36,161655,5660],{"class":55},[36,161657,151467],{"class":98},[36,161659,161660,161662,161664,161666],{"class":38,"line":46},[36,161661,4541],{"class":163},[36,161663,11308],{"class":98},[36,161665,1095],{"class":163},[36,161667,151478],{"class":98},[36,161669,161670],{"class":38,"line":52},[36,161671,247],{"emptyLinePlaceholder":246},[36,161673,161674],{"class":38,"line":66},[36,161675,247],{"emptyLinePlaceholder":246},[36,161677,161678,161681,161683,161686,161688,161690,161692],{"class":38,"line":72},[36,161679,161680],{"class":98},"result ",[36,161682,176],{"class":163},[36,161684,161685],{"class":98}," add(",[36,161687,1060],{"class":109},[36,161689,12874],{"class":98},[36,161691,1313],{"class":109},[36,161693,627],{"class":98},[36,161695,161696,161698],{"class":38,"line":82},[36,161697,30848],{"class":109},[36,161699,77017],{"class":98},[14,161701,161702,161703,161705,161706,28819],{},"如果函数没有写 ",[33,161704,17485],{},"，默认返回 ",[33,161707,96118],{},[26,161709,161711],{"className":30811,"code":161710,"language":30813,"meta":31,"style":31},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[33,161712,161713,161721,161731,161735,161739,161748],{"__ignoreMap":31},[36,161714,161715,161717,161719],{"class":38,"line":39},[36,161716,32380],{"class":163},[36,161718,161370],{"class":55},[36,161720,32386],{"class":98},[36,161722,161723,161725,161727,161729],{"class":38,"line":46},[36,161724,31732],{"class":109},[36,161726,621],{"class":98},[36,161728,6295],{"class":59},[36,161730,627],{"class":98},[36,161732,161733],{"class":38,"line":52},[36,161734,247],{"emptyLinePlaceholder":246},[36,161736,161737],{"class":38,"line":66},[36,161738,247],{"emptyLinePlaceholder":246},[36,161740,161741,161743,161745],{"class":38,"line":72},[36,161742,161680],{"class":98},[36,161744,176],{"class":163},[36,161746,161747],{"class":98}," say_hello()\n",[36,161749,161750,161752,161755],{"class":38,"line":82},[36,161751,30848],{"class":109},[36,161753,161754],{"class":98},"(result)  ",[36,161756,161757],{"class":42},"# None\n",[559,161759,161761],{"id":161760},"_56-return的作用","5.6 return的作用",[14,161763,161764,161766],{},[33,161765,17485],{}," 有两个作用：",[571,161768,161769,161772],{},[574,161770,161771],{},"返回结果。",[574,161773,161774],{},"结束函数。",[26,161776,161778],{"className":30811,"code":161777,"language":30813,"meta":31,"style":31},"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",[33,161779,161780,161790,161802,161809,161813,161825,161832,161836,161843,161847,161851,161862],{"__ignoreMap":31},[36,161781,161782,161784,161787],{"class":38,"line":39},[36,161783,32380],{"class":163},[36,161785,161786],{"class":55}," check_age",[36,161788,161789],{"class":98},"(age):\n",[36,161791,161792,161794,161796,161798,161800],{"class":38,"line":46},[36,161793,3552],{"class":163},[36,161795,16146],{"class":98},[36,161797,179],{"class":163},[36,161799,4544],{"class":109},[36,161801,4190],{"class":98},[36,161803,161804,161806],{"class":38,"line":52},[36,161805,15191],{"class":163},[36,161807,161808],{"class":59}," \"年龄不合法\"\n",[36,161810,161811],{"class":38,"line":66},[36,161812,247],{"emptyLinePlaceholder":246},[36,161814,161815,161817,161819,161821,161823],{"class":38,"line":72},[36,161816,3552],{"class":163},[36,161818,16146],{"class":98},[36,161820,2178],{"class":163},[36,161822,156659],{"class":109},[36,161824,4190],{"class":98},[36,161826,161827,161829],{"class":38,"line":82},[36,161828,15191],{"class":163},[36,161830,161831],{"class":59}," \"成年人\"\n",[36,161833,161834],{"class":38,"line":88},[36,161835,247],{"emptyLinePlaceholder":246},[36,161837,161838,161840],{"class":38,"line":113},[36,161839,4541],{"class":163},[36,161841,161842],{"class":59}," \"未成年人\"\n",[36,161844,161845],{"class":38,"line":119},[36,161846,247],{"emptyLinePlaceholder":246},[36,161848,161849],{"class":38,"line":131},[36,161850,247],{"emptyLinePlaceholder":246},[36,161852,161853,161855,161858,161860],{"class":38,"line":137},[36,161854,30848],{"class":109},[36,161856,161857],{"class":98},"(check_age(",[36,161859,1313],{"class":109},[36,161861,30930],{"class":98},[36,161863,161864,161866,161868,161870,161872],{"class":38,"line":147},[36,161865,30848],{"class":109},[36,161867,161857],{"class":98},[36,161869,1146],{"class":163},[36,161871,833],{"class":109},[36,161873,30930],{"class":98},[14,161875,161876,161877,161879],{},"函数执行到 ",[33,161878,17485],{}," 后，后面的代码不会继续执行。",[559,161881,161883],{"id":161882},"_57-none","5.7 None",[14,161885,161886,161888],{},[33,161887,96118],{}," 表示空值或没有结果。",[14,161890,161891],{},"常见使用场景：",[571,161893,161894,161897,161900],{},[574,161895,161896],{},"函数没有返回值。",[574,161898,161899],{},"变量暂时没有具体值。",[574,161901,161902],{},"表示查询不到结果。",[26,161904,161906],{"className":30811,"code":161905,"language":30813,"meta":31,"style":31},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[33,161907,161908,161916,161920,161933],{"__ignoreMap":31},[36,161909,161910,161912,161914],{"class":38,"line":39},[36,161911,161680],{"class":98},[36,161913,176],{"class":163},[36,161915,152546],{"class":109},[36,161917,161918],{"class":38,"line":46},[36,161919,247],{"emptyLinePlaceholder":246},[36,161921,161922,161924,161927,161929,161931],{"class":38,"line":52},[36,161923,2010],{"class":163},[36,161925,161926],{"class":98}," result ",[36,161928,39360],{"class":163},[36,161930,39366],{"class":109},[36,161932,4190],{"class":98},[36,161934,161935,161937,161939,161942],{"class":38,"line":66},[36,161936,31732],{"class":109},[36,161938,621],{"class":98},[36,161940,161941],{"class":59},"\"没有数据\"",[36,161943,627],{"class":98},[14,161945,161946,161947,161949,161950,161953,161954,28819],{},"判断 ",[33,161948,96118],{}," 推荐使用 ",[33,161951,161952],{},"is None","，不要写成 ",[33,161955,161956],{},"== None",[559,161958,161960],{"id":161959},"_58-函数文档字符串","5.8 函数文档字符串",[14,161962,161963],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[26,161965,161967],{"className":30811,"code":161966,"language":30813,"meta":31,"style":31},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[33,161968,161969,161979,161984],{"__ignoreMap":31},[36,161970,161971,161973,161976],{"class":38,"line":39},[36,161972,32380],{"class":163},[36,161974,161975],{"class":55}," calculate_bmi",[36,161977,161978],{"class":98},"(weight, height):\n",[36,161980,161981],{"class":38,"line":46},[36,161982,161983],{"class":59},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[36,161985,161986,161988,161991,161993,161996,161998],{"class":38,"line":52},[36,161987,4541],{"class":163},[36,161989,161990],{"class":98}," weight ",[36,161992,1198],{"class":163},[36,161994,161995],{"class":98}," height ",[36,161997,11100],{"class":163},[36,161999,48156],{"class":109},[14,162001,162002],{},"查看说明：",[26,162004,162006],{"className":30811,"code":162005,"language":30813,"meta":31,"style":31},"help(calculate_bmi)\n",[33,162007,162008],{"__ignoreMap":31},[36,162009,162010,162013],{"class":38,"line":39},[36,162011,162012],{"class":109},"help",[36,162014,162015],{"class":98},"(calculate_bmi)\n",[14,162017,162018],{},"较完整的写法：",[26,162020,162022],{"className":30811,"code":162021,"language":30813,"meta":31,"style":31},"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",[33,162023,162024,162032,162037,162042,162046,162051,162056,162061,162065],{"__ignoreMap":31},[36,162025,162026,162028,162030],{"class":38,"line":39},[36,162027,32380],{"class":163},[36,162029,161975],{"class":55},[36,162031,161978],{"class":98},[36,162033,162034],{"class":38,"line":46},[36,162035,162036],{"class":59},"    \"\"\"\n",[36,162038,162039],{"class":38,"line":52},[36,162040,162041],{"class":59},"    计算BMI。\n",[36,162043,162044],{"class":38,"line":66},[36,162045,247],{"emptyLinePlaceholder":246},[36,162047,162048],{"class":38,"line":72},[36,162049,162050],{"class":59},"    :param weight: 体重，单位kg\n",[36,162052,162053],{"class":38,"line":82},[36,162054,162055],{"class":59},"    :param height: 身高，单位m\n",[36,162057,162058],{"class":38,"line":88},[36,162059,162060],{"class":59},"    :return: BMI数值\n",[36,162062,162063],{"class":38,"line":113},[36,162064,162036],{"class":59},[36,162066,162067,162069,162071,162073,162075,162077],{"class":38,"line":119},[36,162068,4541],{"class":163},[36,162070,161990],{"class":98},[36,162072,1198],{"class":163},[36,162074,161995],{"class":98},[36,162076,11100],{"class":163},[36,162078,48156],{"class":109},[559,162080,162082],{"id":162081},"_59-变量作用域","5.9 变量作用域",[588,162084,162086],{"id":162085},"_591-局部变量","5.9.1 局部变量",[14,162088,162089],{},"在函数内部定义的变量，只能在函数内部使用。",[26,162091,162093],{"className":30811,"code":162092,"language":30813,"meta":31,"style":31},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[33,162094,162095,162104,162112,162118,162122,162126,162131],{"__ignoreMap":31},[36,162096,162097,162099,162102],{"class":38,"line":39},[36,162098,32380],{"class":163},[36,162100,162101],{"class":55}," test",[36,162103,32386],{"class":98},[36,162105,162106,162108,162110],{"class":38,"line":46},[36,162107,46026],{"class":98},[36,162109,176],{"class":163},[36,162111,58860],{"class":109},[36,162113,162114,162116],{"class":38,"line":52},[36,162115,31732],{"class":109},[36,162117,634],{"class":98},[36,162119,162120],{"class":38,"line":66},[36,162121,247],{"emptyLinePlaceholder":246},[36,162123,162124],{"class":38,"line":72},[36,162125,247],{"emptyLinePlaceholder":246},[36,162127,162128],{"class":38,"line":82},[36,162129,162130],{"class":98},"test()\n",[36,162132,162133,162135,162138],{"class":38,"line":88},[36,162134,30848],{"class":109},[36,162136,162137],{"class":98},"(num)  ",[36,162139,162140],{"class":42},"# 报错\n",[588,162142,162144],{"id":162143},"_592-全局变量","5.9.2 全局变量",[14,162146,162147],{},"在函数外部定义的变量，可以在函数内部读取。",[26,162149,162151],{"className":30811,"code":162150,"language":30813,"meta":31,"style":31},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[33,162152,162153,162161,162165,162169,162177,162183,162187,162191],{"__ignoreMap":31},[36,162154,162155,162157,162159],{"class":38,"line":39},[36,162156,146910],{"class":98},[36,162158,176],{"class":163},[36,162160,149727],{"class":59},[36,162162,162163],{"class":38,"line":46},[36,162164,247],{"emptyLinePlaceholder":246},[36,162166,162167],{"class":38,"line":52},[36,162168,247],{"emptyLinePlaceholder":246},[36,162170,162171,162173,162175],{"class":38,"line":66},[36,162172,32380],{"class":163},[36,162174,161370],{"class":55},[36,162176,32386],{"class":98},[36,162178,162179,162181],{"class":38,"line":72},[36,162180,31732],{"class":109},[36,162182,151034],{"class":98},[36,162184,162185],{"class":38,"line":82},[36,162186,247],{"emptyLinePlaceholder":246},[36,162188,162189],{"class":38,"line":88},[36,162190,247],{"emptyLinePlaceholder":246},[36,162192,162193],{"class":38,"line":113},[36,162194,161405],{"class":98},[14,162196,162197,162198,28819],{},"如果要在函数内部修改全局变量，需要 ",[33,162199,162200],{},"global",[26,162202,162204],{"className":30811,"code":162203,"language":30813,"meta":31,"style":31},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[33,162205,162206,162214,162218,162222,162231,162239,162247,162251,162255,162260],{"__ignoreMap":31},[36,162207,162208,162210,162212],{"class":38,"line":39},[36,162209,147065],{"class":98},[36,162211,176],{"class":163},[36,162213,47766],{"class":109},[36,162215,162216],{"class":38,"line":46},[36,162217,247],{"emptyLinePlaceholder":246},[36,162219,162220],{"class":38,"line":52},[36,162221,247],{"emptyLinePlaceholder":246},[36,162223,162224,162226,162229],{"class":38,"line":66},[36,162225,32380],{"class":163},[36,162227,162228],{"class":55}," add_count",[36,162230,32386],{"class":98},[36,162232,162233,162236],{"class":38,"line":72},[36,162234,162235],{"class":163},"    global",[36,162237,162238],{"class":98}," count\n",[36,162240,162241,162243,162245],{"class":38,"line":82},[36,162242,159807],{"class":98},[36,162244,9918],{"class":163},[36,162246,56131],{"class":109},[36,162248,162249],{"class":38,"line":88},[36,162250,247],{"emptyLinePlaceholder":246},[36,162252,162253],{"class":38,"line":113},[36,162254,247],{"emptyLinePlaceholder":246},[36,162256,162257],{"class":38,"line":119},[36,162258,162259],{"class":98},"add_count()\n",[36,162261,162262,162264],{"class":38,"line":131},[36,162263,30848],{"class":109},[36,162265,162266],{"class":98},"(count)\n",[14,162268,162269],{},"不建议大量使用全局变量，项目变大后很难维护。",[559,162271,162273],{"id":162272},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,162275,162276],{},"一个函数中可以调用另一个函数。",[26,162278,162280],{"className":30811,"code":162279,"language":30813,"meta":31,"style":31},"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",[33,162281,162282,162291,162305,162309,162313,162322,162327,162347,162368,162372,162376,162380],{"__ignoreMap":31},[36,162283,162284,162286,162289],{"class":38,"line":39},[36,162285,32380],{"class":163},[36,162287,162288],{"class":55}," print_line",[36,162290,32386],{"class":98},[36,162292,162293,162295,162297,162299,162301,162303],{"class":38,"line":46},[36,162294,31732],{"class":109},[36,162296,621],{"class":98},[36,162298,32916],{"class":59},[36,162300,6969],{"class":163},[36,162302,79097],{"class":109},[36,162304,627],{"class":98},[36,162306,162307],{"class":38,"line":52},[36,162308,247],{"emptyLinePlaceholder":246},[36,162310,162311],{"class":38,"line":66},[36,162312,247],{"emptyLinePlaceholder":246},[36,162314,162315,162317,162320],{"class":38,"line":72},[36,162316,32380],{"class":163},[36,162318,162319],{"class":55}," print_info",[36,162321,149749],{"class":98},[36,162323,162324],{"class":38,"line":82},[36,162325,162326],{"class":98},"    print_line()\n",[36,162328,162329,162331,162333,162335,162337,162339,162341,162343,162345],{"class":38,"line":88},[36,162330,31732],{"class":109},[36,162332,621],{"class":98},[36,162334,671],{"class":163},[36,162336,157056],{"class":59},[36,162338,1509],{"class":109},[36,162340,80242],{"class":98},[36,162342,1558],{"class":109},[36,162344,866],{"class":59},[36,162346,627],{"class":98},[36,162348,162349,162351,162353,162355,162358,162360,162362,162364,162366],{"class":38,"line":113},[36,162350,31732],{"class":109},[36,162352,621],{"class":98},[36,162354,671],{"class":163},[36,162356,162357],{"class":59},"\"年龄:",[36,162359,1509],{"class":109},[36,162361,70653],{"class":98},[36,162363,1558],{"class":109},[36,162365,866],{"class":59},[36,162367,627],{"class":98},[36,162369,162370],{"class":38,"line":119},[36,162371,162326],{"class":98},[36,162373,162374],{"class":38,"line":131},[36,162375,247],{"emptyLinePlaceholder":246},[36,162377,162378],{"class":38,"line":137},[36,162379,247],{"emptyLinePlaceholder":246},[36,162381,162382,162385,162387,162389,162391],{"class":38,"line":147},[36,162383,162384],{"class":98},"print_info(",[36,162386,150262],{"class":59},[36,162388,12874],{"class":98},[36,162390,1264],{"class":109},[36,162392,627],{"class":98},[14,162394,162395],{},"这种方式可以把小功能组合成大功能。",[559,162397,162399],{"id":162398},"_511-参数检查","5.11 参数检查",[14,162401,162402],{},"函数内部可以检查参数是否合法。",[26,162404,162406],{"className":30811,"code":162405,"language":30813,"meta":31,"style":31},"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",[33,162407,162408,162417,162429,162435,162445,162449,162453,162470,162474,162486,162497,162503],{"__ignoreMap":31},[36,162409,162410,162412,162415],{"class":38,"line":39},[36,162411,32380],{"class":163},[36,162413,162414],{"class":55}," divide",[36,162416,151467],{"class":98},[36,162418,162419,162421,162423,162425,162427],{"class":38,"line":46},[36,162420,3552],{"class":163},[36,162422,11321],{"class":98},[36,162424,3400],{"class":163},[36,162426,4544],{"class":109},[36,162428,4190],{"class":98},[36,162430,162431,162433],{"class":38,"line":52},[36,162432,15191],{"class":163},[36,162434,152546],{"class":109},[36,162436,162437,162439,162441,162443],{"class":38,"line":66},[36,162438,4541],{"class":163},[36,162440,11308],{"class":98},[36,162442,1198],{"class":163},[36,162444,151478],{"class":98},[36,162446,162447],{"class":38,"line":72},[36,162448,247],{"emptyLinePlaceholder":246},[36,162450,162451],{"class":38,"line":82},[36,162452,247],{"emptyLinePlaceholder":246},[36,162454,162455,162457,162459,162462,162464,162466,162468],{"class":38,"line":88},[36,162456,161680],{"class":98},[36,162458,176],{"class":163},[36,162460,162461],{"class":98}," divide(",[36,162463,1060],{"class":109},[36,162465,12874],{"class":98},[36,162467,807],{"class":109},[36,162469,627],{"class":98},[36,162471,162472],{"class":38,"line":113},[36,162473,247],{"emptyLinePlaceholder":246},[36,162475,162476,162478,162480,162482,162484],{"class":38,"line":119},[36,162477,2010],{"class":163},[36,162479,161926],{"class":98},[36,162481,39360],{"class":163},[36,162483,39366],{"class":109},[36,162485,4190],{"class":98},[36,162487,162488,162490,162492,162495],{"class":38,"line":131},[36,162489,31732],{"class":109},[36,162491,621],{"class":98},[36,162493,162494],{"class":59},"\"除数不能为0\"",[36,162496,627],{"class":98},[36,162498,162499,162501],{"class":38,"line":137},[36,162500,2169],{"class":163},[36,162502,4190],{"class":98},[36,162504,162505,162507],{"class":38,"line":147},[36,162506,31732],{"class":109},[36,162508,77017],{"class":98},[559,162510,162512],{"id":162511},"_512-类型提示","5.12 类型提示",[14,162514,162515],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[26,162517,162519],{"className":30811,"code":162518,"language":30813,"meta":31,"style":31},"def add(a: int, b: int) -> int:\n    return a + b\n",[33,162520,162521,162544],{"__ignoreMap":31},[36,162522,162523,162525,162527,162530,162532,162535,162537,162540,162542],{"class":38,"line":39},[36,162524,32380],{"class":163},[36,162526,5660],{"class":55},[36,162528,162529],{"class":98},"(a: ",[36,162531,624],{"class":109},[36,162533,162534],{"class":98},", b: ",[36,162536,624],{"class":109},[36,162538,162539],{"class":98},") -> ",[36,162541,624],{"class":109},[36,162543,4190],{"class":98},[36,162545,162546,162548,162550,162552],{"class":38,"line":46},[36,162547,4541],{"class":163},[36,162549,11308],{"class":98},[36,162551,1095],{"class":163},[36,162553,151478],{"class":98},[14,162555,162556],{},"字符串参数：",[26,162558,162560],{"className":30811,"code":162559,"language":30813,"meta":31,"style":31},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[33,162561,162562,162579],{"__ignoreMap":31},[36,162563,162564,162566,162568,162571,162573,162575,162577],{"class":38,"line":39},[36,162565,32380],{"class":163},[36,162567,161370],{"class":55},[36,162569,162570],{"class":98},"(name: ",[36,162572,1781],{"class":109},[36,162574,162539],{"class":98},[36,162576,96118],{"class":109},[36,162578,4190],{"class":98},[36,162580,162581,162583,162585,162587,162589,162591,162593,162595,162597],{"class":38,"line":46},[36,162582,31732],{"class":109},[36,162584,621],{"class":98},[36,162586,671],{"class":163},[36,162588,157428],{"class":59},[36,162590,1509],{"class":109},[36,162592,80242],{"class":98},[36,162594,1558],{"class":109},[36,162596,866],{"class":59},[36,162598,627],{"class":98},[14,162600,162601],{},"列表参数：",[26,162603,162605],{"className":30811,"code":162604,"language":30813,"meta":31,"style":31},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[33,162606,162607,162626,162634,162646,162655],{"__ignoreMap":31},[36,162608,162609,162611,162614,162617,162619,162622,162624],{"class":38,"line":39},[36,162610,32380],{"class":163},[36,162612,162613],{"class":55}," get_total",[36,162615,162616],{"class":98},"(numbers: list[",[36,162618,624],{"class":109},[36,162620,162621],{"class":98},"]) -> ",[36,162623,624],{"class":109},[36,162625,4190],{"class":98},[36,162627,162628,162630,162632],{"class":38,"line":46},[36,162629,159681],{"class":98},[36,162631,176],{"class":163},[36,162633,47766],{"class":109},[36,162635,162636,162638,162641,162643],{"class":38,"line":52},[36,162637,3652],{"class":163},[36,162639,162640],{"class":98}," number ",[36,162642,26480],{"class":163},[36,162644,162645],{"class":98}," numbers:\n",[36,162647,162648,162650,162652],{"class":38,"line":66},[36,162649,160356],{"class":98},[36,162651,9918],{"class":163},[36,162653,162654],{"class":98}," number\n",[36,162656,162657,162659],{"class":38,"line":72},[36,162658,4541],{"class":163},[36,162660,162661],{"class":98}," total\n",[14,162663,162664],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[559,162666,162668],{"id":162667},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[26,162670,162672],{"className":30811,"code":162671,"language":30813,"meta":31,"style":31},"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",[33,162673,162674,162684,162688,162692,162700,162711,162721,162731,162741,162751,162755,162759,162768,162790,162794,162798,162807,162813,162833,162845,162856,162860,162869,162880,162885,162889,162893,162902,162908,162927,162939,162949,162953,162964,162974,162978,162986,162997,163001,163005,163009,163017,163022,163036,163040,163052,163057,163069,163074,163086,163091,163103,163113,163117,163123],{"__ignoreMap":31},[36,162675,162676,162679,162681],{"class":38,"line":39},[36,162677,162678],{"class":98},"balance ",[36,162680,176],{"class":163},[36,162682,162683],{"class":109}," 1000\n",[36,162685,162686],{"class":38,"line":46},[36,162687,247],{"emptyLinePlaceholder":246},[36,162689,162690],{"class":38,"line":52},[36,162691,247],{"emptyLinePlaceholder":246},[36,162693,162694,162696,162698],{"class":38,"line":66},[36,162695,32380],{"class":163},[36,162697,152407],{"class":55},[36,162699,32386],{"class":98},[36,162701,162702,162704,162706,162709],{"class":38,"line":72},[36,162703,31732],{"class":109},[36,162705,621],{"class":98},[36,162707,162708],{"class":59},"\"====== ATM ======\"",[36,162710,627],{"class":98},[36,162712,162713,162715,162717,162719],{"class":38,"line":82},[36,162714,31732],{"class":109},[36,162716,621],{"class":98},[36,162718,161022],{"class":59},[36,162720,627],{"class":98},[36,162722,162723,162725,162727,162729],{"class":38,"line":88},[36,162724,31732],{"class":109},[36,162726,621],{"class":98},[36,162728,161033],{"class":59},[36,162730,627],{"class":98},[36,162732,162733,162735,162737,162739],{"class":38,"line":113},[36,162734,31732],{"class":109},[36,162736,621],{"class":98},[36,162738,161044],{"class":59},[36,162740,627],{"class":98},[36,162742,162743,162745,162747,162749],{"class":38,"line":119},[36,162744,31732],{"class":109},[36,162746,621],{"class":98},[36,162748,161055],{"class":59},[36,162750,627],{"class":98},[36,162752,162753],{"class":38,"line":131},[36,162754,247],{"emptyLinePlaceholder":246},[36,162756,162757],{"class":38,"line":137},[36,162758,247],{"emptyLinePlaceholder":246},[36,162760,162761,162763,162766],{"class":38,"line":147},[36,162762,32380],{"class":163},[36,162764,162765],{"class":55}," show_balance",[36,162767,32386],{"class":98},[36,162769,162770,162772,162774,162776,162779,162781,162784,162786,162788],{"class":38,"line":153},[36,162771,31732],{"class":109},[36,162773,621],{"class":98},[36,162775,671],{"class":163},[36,162777,162778],{"class":59},"\"当前余额:",[36,162780,1509],{"class":109},[36,162782,162783],{"class":98},"balance",[36,162785,1558],{"class":109},[36,162787,157386],{"class":59},[36,162789,627],{"class":98},[36,162791,162792],{"class":38,"line":191},[36,162793,247],{"emptyLinePlaceholder":246},[36,162795,162796],{"class":38,"line":197},[36,162797,247],{"emptyLinePlaceholder":246},[36,162799,162800,162802,162805],{"class":38,"line":217},[36,162801,32380],{"class":163},[36,162803,162804],{"class":55}," save_money",[36,162806,32386],{"class":98},[36,162808,162809,162811],{"class":38,"line":223},[36,162810,162235],{"class":163},[36,162812,150473],{"class":98},[36,162814,162815,162818,162820,162822,162824,162826,162828,162831],{"class":38,"line":243},[36,162816,162817],{"class":98},"    money ",[36,162819,176],{"class":163},[36,162821,110228],{"class":109},[36,162823,621],{"class":98},[36,162825,54253],{"class":109},[36,162827,621],{"class":98},[36,162829,162830],{"class":59},"\"请输入存款金额:\"",[36,162832,30930],{"class":98},[36,162834,162835,162837,162839,162841,162843],{"class":38,"line":250},[36,162836,3552],{"class":163},[36,162838,150516],{"class":98},[36,162840,2067],{"class":163},[36,162842,4544],{"class":109},[36,162844,4190],{"class":98},[36,162846,162847,162849,162851,162854],{"class":38,"line":256},[36,162848,32884],{"class":109},[36,162850,621],{"class":98},[36,162852,162853],{"class":59},"\"金额必须大于0\"",[36,162855,627],{"class":98},[36,162857,162858],{"class":38,"line":273},[36,162859,152735],{"class":163},[36,162861,162862,162865,162867],{"class":38,"line":278},[36,162863,162864],{"class":98},"    balance ",[36,162866,9918],{"class":163},[36,162868,150549],{"class":98},[36,162870,162871,162873,162875,162878],{"class":38,"line":284},[36,162872,31732],{"class":109},[36,162874,621],{"class":98},[36,162876,162877],{"class":59},"\"存款成功\"",[36,162879,627],{"class":98},[36,162881,162882],{"class":38,"line":315},[36,162883,162884],{"class":98},"    show_balance()\n",[36,162886,162887],{"class":38,"line":320},[36,162888,247],{"emptyLinePlaceholder":246},[36,162890,162891],{"class":38,"line":326},[36,162892,247],{"emptyLinePlaceholder":246},[36,162894,162895,162897,162900],{"class":38,"line":343},[36,162896,32380],{"class":163},[36,162898,162899],{"class":55}," withdraw_money",[36,162901,32386],{"class":98},[36,162903,162904,162906],{"class":38,"line":348},[36,162905,162235],{"class":163},[36,162907,150473],{"class":98},[36,162909,162910,162912,162914,162916,162918,162920,162922,162925],{"class":38,"line":354},[36,162911,162817],{"class":98},[36,162913,176],{"class":163},[36,162915,110228],{"class":109},[36,162917,621],{"class":98},[36,162919,54253],{"class":109},[36,162921,621],{"class":98},[36,162923,162924],{"class":59},"\"请输入取款金额:\"",[36,162926,30930],{"class":98},[36,162928,162929,162931,162933,162935,162937],{"class":38,"line":370},[36,162930,3552],{"class":163},[36,162932,150516],{"class":98},[36,162934,2067],{"class":163},[36,162936,4544],{"class":109},[36,162938,4190],{"class":98},[36,162940,162941,162943,162945,162947],{"class":38,"line":375},[36,162942,32884],{"class":109},[36,162944,621],{"class":98},[36,162946,162853],{"class":59},[36,162948,627],{"class":98},[36,162950,162951],{"class":38,"line":381},[36,162952,152735],{"class":163},[36,162954,162955,162957,162959,162961],{"class":38,"line":399},[36,162956,3552],{"class":163},[36,162958,150516],{"class":98},[36,162960,173],{"class":163},[36,162962,162963],{"class":98}," balance:\n",[36,162965,162966,162968,162970,162972],{"class":38,"line":404},[36,162967,32884],{"class":109},[36,162969,621],{"class":98},[36,162971,150611],{"class":59},[36,162973,627],{"class":98},[36,162975,162976],{"class":38,"line":410},[36,162977,152735],{"class":163},[36,162979,162980,162982,162984],{"class":38,"line":423},[36,162981,162864],{"class":98},[36,162983,150626],{"class":163},[36,162985,150549],{"class":98},[36,162987,162988,162990,162992,162995],{"class":38,"line":436},[36,162989,31732],{"class":109},[36,162991,621],{"class":98},[36,162993,162994],{"class":59},"\"取款成功\"",[36,162996,627],{"class":98},[36,162998,162999],{"class":38,"line":441},[36,163000,162884],{"class":98},[36,163002,163003],{"class":38,"line":447},[36,163004,247],{"emptyLinePlaceholder":246},[36,163006,163007],{"class":38,"line":465},[36,163008,247],{"emptyLinePlaceholder":246},[36,163010,163011,163013,163015],{"class":38,"line":470},[36,163012,109094],{"class":163},[36,163014,95724],{"class":109},[36,163016,4190],{"class":98},[36,163018,163019],{"class":38,"line":476},[36,163020,163021],{"class":98},"    show_menu()\n",[36,163023,163024,163026,163028,163030,163032,163034],{"class":38,"line":496},[36,163025,161066],{"class":98},[36,163027,176],{"class":163},[36,163029,61037],{"class":109},[36,163031,621],{"class":98},[36,163033,153447],{"class":59},[36,163035,627],{"class":98},[36,163037,163038],{"class":38,"line":501},[36,163039,247],{"emptyLinePlaceholder":246},[36,163041,163042,163044,163046,163048,163050],{"class":38,"line":507},[36,163043,3552],{"class":163},[36,163045,153460],{"class":98},[36,163047,3400],{"class":163},[36,163049,153465],{"class":59},[36,163051,4190],{"class":98},[36,163053,163054],{"class":38,"line":517},[36,163055,163056],{"class":98},"        show_balance()\n",[36,163058,163059,163061,163063,163065,163067],{"class":38,"line":522},[36,163060,39726],{"class":163},[36,163062,153460],{"class":98},[36,163064,3400],{"class":163},[36,163066,153484],{"class":59},[36,163068,4190],{"class":98},[36,163070,163071],{"class":38,"line":528},[36,163072,163073],{"class":98},"        save_money()\n",[36,163075,163076,163078,163080,163082,163084],{"class":38,"line":10203},[36,163077,39726],{"class":163},[36,163079,153460],{"class":98},[36,163081,3400],{"class":163},[36,163083,153502],{"class":59},[36,163085,4190],{"class":98},[36,163087,163088],{"class":38,"line":10227},[36,163089,163090],{"class":98},"        withdraw_money()\n",[36,163092,163093,163095,163097,163099,163101],{"class":38,"line":10232},[36,163094,39726],{"class":163},[36,163096,153460],{"class":98},[36,163098,3400],{"class":163},[36,163100,153556],{"class":59},[36,163102,4190],{"class":98},[36,163104,163105,163107,163109,163111],{"class":38,"line":10237},[36,163106,32884],{"class":109},[36,163108,621],{"class":98},[36,163110,153567],{"class":59},[36,163112,627],{"class":98},[36,163114,163115],{"class":38,"line":10242},[36,163116,32060],{"class":163},[36,163118,163119,163121],{"class":38,"line":10251},[36,163120,158396],{"class":163},[36,163122,4190],{"class":98},[36,163124,163125,163127,163129,163131],{"class":38,"line":10256},[36,163126,32884],{"class":109},[36,163128,621],{"class":98},[36,163130,153588],{"class":59},[36,163132,627],{"class":98},[14,163134,163135],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[559,163137,163139],{"id":163138},"_514-易错点","5.14 易错点",[571,163141,163142,163145,163148,163153,163158,163161],{},[574,163143,163144],{},"函数定义后必须调用才会执行。",[574,163146,163147],{},"函数名后面有括号才是调用。",[574,163149,163150,163152],{},[33,163151,17485],{}," 后面的代码不会执行。",[574,163154,163155,163156,28819],{},"没有返回值的函数默认返回 ",[33,163157,96118],{},[574,163159,163160],{},"局部变量不能在函数外部访问。",[574,163162,163163,163164,163166],{},"不要滥用 ",[33,163165,162200],{},"，更好的方式是让函数返回新值。",[14,163168,163169,163170,163172],{},"例如不用 ",[33,163171,162200],{}," 改写存款：",[26,163174,163176],{"className":30811,"code":163175,"language":30813,"meta":31,"style":31},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[33,163177,163178,163187,163198,163202,163206,163214,163227],{"__ignoreMap":31},[36,163179,163180,163182,163184],{"class":38,"line":39},[36,163181,32380],{"class":163},[36,163183,162804],{"class":55},[36,163185,163186],{"class":98},"(balance, money):\n",[36,163188,163189,163191,163194,163196],{"class":38,"line":46},[36,163190,4541],{"class":163},[36,163192,163193],{"class":98}," balance ",[36,163195,1095],{"class":163},[36,163197,150549],{"class":98},[36,163199,163200],{"class":38,"line":52},[36,163201,247],{"emptyLinePlaceholder":246},[36,163203,163204],{"class":38,"line":66},[36,163205,247],{"emptyLinePlaceholder":246},[36,163207,163208,163210,163212],{"class":38,"line":72},[36,163209,162678],{"class":98},[36,163211,176],{"class":163},[36,163213,162683],{"class":109},[36,163215,163216,163218,163220,163223,163225],{"class":38,"line":82},[36,163217,162678],{"class":98},[36,163219,176],{"class":163},[36,163221,163222],{"class":98}," save_money(balance, ",[36,163224,2190],{"class":109},[36,163226,627],{"class":98},[36,163228,163229,163231],{"class":38,"line":88},[36,163230,30848],{"class":109},[36,163232,163233],{"class":98},"(balance)\n",[559,163235,163237],{"id":163236},"_515-本章练习","5.15 本章练习",[571,163239,163240,163247,163253,163259,163265],{},[574,163241,163242,163243,163246],{},"定义函数 ",[33,163244,163245],{},"print_student(name, age)","，输出学生信息。",[574,163248,163242,163249,163252],{},[33,163250,163251],{},"get_max(a, b, c)","，返回三个数中的最大值。",[574,163254,163242,163255,163258],{},[33,163256,163257],{},"is_even(num)","，判断一个数是否为偶数。",[574,163260,163242,163261,163264],{},[33,163262,163263],{},"calculate_bmi(weight, height)","，返回 BMI。",[574,163266,163267],{},"把第 4 章的菜单程序拆分成多个函数。",[537,163269,163270],{},"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":31,"searchDepth":46,"depth":46,"links":163272},[163273,163274,163275,163276,163277,163278,163279,163280,163281,163285,163286,163287,163288,163289,163290],{"id":161293,"depth":46,"text":161294},{"id":161334,"depth":46,"text":161335},{"id":161424,"depth":46,"text":161425},{"id":161505,"depth":46,"text":161506},{"id":161638,"depth":46,"text":161639},{"id":161760,"depth":46,"text":161761},{"id":161882,"depth":46,"text":161883},{"id":161959,"depth":46,"text":161960},{"id":162081,"depth":46,"text":162082,"children":163282},[163283,163284],{"id":162085,"depth":52,"text":162086},{"id":162143,"depth":52,"text":162144},{"id":162272,"depth":46,"text":162273},{"id":162398,"depth":46,"text":162399},{"id":162511,"depth":46,"text":162512},{"id":162667,"depth":46,"text":162668},{"id":163138,"depth":46,"text":163139},{"id":163236,"depth":46,"text":163237},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161285,"description":542},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163297,"title":163298,"body":163299,"description":542,"extension":543,"meta":166343,"navigation":246,"path":166344,"seo":166345,"stem":166346,"__hash__":166347},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163300,"toc":166324},[163301,163304,163308,163311,163314,163418,163421,163425,163428,163508,163511,163515,163518,163578,163581,163617,163620,163635,163639,163712,163715,163770,163773,163843,163846,163930,163940,163998,164002,164047,164050,164076,164079,164185,164189,164192,164234,164237,164301,164304,164308,164311,164372,164375,164405,164408,164446,164450,164453,164462,164465,164589,164592,164633,164637,164640,164651,164691,164694,164709,164714,164717,164784,164787,164877,164881,164884,164932,164935,164962,164964,164994,164997,165017,165020,165051,165054,165087,165091,165094,165118,165121,165145,165148,165172,165176,165179,165309,165312,165392,165395,165470,165474,165477,165527,165530,165572,165575,165599,165601,165625,165628,165683,165686,165752,165756,165759,165762,165800,165803,165856,165859,165905,165908,165941,165944,165948,166267,166271,166300,166304,166321],[10,163302,163298],{"id":163303},"_6-数据容器",[559,163305,163307],{"id":163306},"_61-什么是数据容器","6.1 什么是数据容器",[14,163309,163310],{},"数据容器用于一次保存多个数据。",[14,163312,163313],{},"常见容器：",[753,163315,163316,163333],{},[756,163317,163318],{},[759,163319,163320,163322,163325,163328,163331],{},[762,163321,26208],{},[762,163323,163324],{},"是否有序",[762,163326,163327],{},"是否可变",[762,163329,163330],{},"是否允许重复",[762,163332,27926],{},[800,163334,163335,163353,163369,163384,163401],{},[759,163336,163337,163340,163343,163346,163349],{},[805,163338,163339],{},"list列表",[805,163341,163342],{},"有序",[805,163344,163345],{},"可变",[805,163347,163348],{},"允许",[805,163350,163351],{},[33,163352,155631],{},[759,163354,163355,163358,163360,163363,163365],{},[805,163356,163357],{},"tuple元组",[805,163359,163342],{},[805,163361,163362],{},"不可变",[805,163364,163348],{},[805,163366,163367],{},[33,163368,155644],{},[759,163370,163371,163374,163376,163378,163380],{},[805,163372,163373],{},"str字符串",[805,163375,163342],{},[805,163377,163362],{},[805,163379,163348],{},[805,163381,163382],{},[33,163383,156254],{},[759,163385,163386,163389,163392,163394,163397],{},[805,163387,163388],{},"set集合",[805,163390,163391],{},"无序",[805,163393,163345],{},[805,163395,163396],{},"不允许",[805,163398,163399],{},[33,163400,155669],{},[759,163402,163403,163406,163408,163410,163413],{},[805,163404,163405],{},"dict字典",[805,163407,163342],{},[805,163409,163345],{},[805,163411,163412],{},"key不允许重复",[805,163414,163415],{},[33,163416,163417],{},"{\"name\": \"小明\"}",[14,163419,163420],{},"Python 3.7 之后，字典保持插入顺序。",[559,163422,163424],{"id":163423},"_62-列表list","6.2 列表list",[14,163426,163427],{},"列表用于保存一组有顺序的数据。",[26,163429,163431],{"className":30811,"code":163430,"language":30813,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[33,163432,163433,163453,163478,163499],{"__ignoreMap":31},[36,163434,163435,163437,163439,163441,163443,163445,163447,163449,163451],{"class":38,"line":39},[36,163436,160754],{"class":98},[36,163438,176],{"class":163},[36,163440,52658],{"class":98},[36,163442,150262],{"class":59},[36,163444,12874],{"class":98},[36,163446,151310],{"class":59},[36,163448,12874],{"class":98},[36,163450,160105],{"class":59},[36,163452,33679],{"class":98},[36,163454,163455,163458,163460,163462,163464,163466,163468,163470,163472,163474,163476],{"class":38,"line":46},[36,163456,163457],{"class":98},"numbers ",[36,163459,176],{"class":163},[36,163461,52658],{"class":98},[36,163463,833],{"class":109},[36,163465,12874],{"class":98},[36,163467,694],{"class":109},[36,163469,12874],{"class":98},[36,163471,689],{"class":109},[36,163473,12874],{"class":98},[36,163475,908],{"class":109},[36,163477,33679],{"class":98},[36,163479,163480,163483,163485,163487,163489,163491,163493,163495,163497],{"class":38,"line":52},[36,163481,163482],{"class":98},"mixed ",[36,163484,176],{"class":163},[36,163486,52658],{"class":98},[36,163488,150262],{"class":59},[36,163490,12874],{"class":98},[36,163492,1264],{"class":109},[36,163494,12874],{"class":98},[36,163496,31909],{"class":109},[36,163498,33679],{"class":98},[36,163500,163501,163504,163506],{"class":38,"line":66},[36,163502,163503],{"class":98},"empty ",[36,163505,176],{"class":163},[36,163507,52270],{"class":98},[14,163509,163510],{},"推荐一个列表中保存同类数据，代码更清晰。",[559,163512,163514],{"id":163513},"_63-列表索引","6.3 列表索引",[14,163516,163517],{},"正向索引从 0 开始：",[26,163519,163521],{"className":30811,"code":163520,"language":30813,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[33,163522,163523,163543,163547,163558,163568],{"__ignoreMap":31},[36,163524,163525,163527,163529,163531,163533,163535,163537,163539,163541],{"class":38,"line":39},[36,163526,160754],{"class":98},[36,163528,176],{"class":163},[36,163530,52658],{"class":98},[36,163532,150262],{"class":59},[36,163534,12874],{"class":98},[36,163536,151310],{"class":59},[36,163538,12874],{"class":98},[36,163540,160105],{"class":59},[36,163542,33679],{"class":98},[36,163544,163545],{"class":38,"line":46},[36,163546,247],{"emptyLinePlaceholder":246},[36,163548,163549,163551,163554,163556],{"class":38,"line":52},[36,163550,30848],{"class":109},[36,163552,163553],{"class":98},"(names[",[36,163555,807],{"class":109},[36,163557,5108],{"class":98},[36,163559,163560,163562,163564,163566],{"class":38,"line":66},[36,163561,30848],{"class":109},[36,163563,163553],{"class":98},[36,163565,833],{"class":109},[36,163567,5108],{"class":98},[36,163569,163570,163572,163574,163576],{"class":38,"line":72},[36,163571,30848],{"class":109},[36,163573,163553],{"class":98},[36,163575,694],{"class":109},[36,163577,5108],{"class":98},[14,163579,163580],{},"反向索引从 -1 开始：",[26,163582,163584],{"className":30811,"code":163583,"language":30813,"meta":31,"style":31},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[33,163585,163586,163602],{"__ignoreMap":31},[36,163587,163588,163590,163592,163594,163596,163599],{"class":38,"line":39},[36,163589,30848],{"class":109},[36,163591,163553],{"class":98},[36,163593,1146],{"class":163},[36,163595,833],{"class":109},[36,163597,163598],{"class":98},"])  ",[36,163600,163601],{"class":42},"# 小刚\n",[36,163603,163604,163606,163608,163610,163612,163614],{"class":38,"line":46},[36,163605,30848],{"class":109},[36,163607,163553],{"class":98},[36,163609,1146],{"class":163},[36,163611,694],{"class":109},[36,163613,163598],{"class":98},[36,163615,163616],{"class":42},"# 小红\n",[14,163618,163619],{},"索引越界会报错：",[26,163621,163623],{"className":30811,"code":163622,"language":30813,"meta":31,"style":31},"print(names[3])\n",[33,163624,163625],{"__ignoreMap":31},[36,163626,163627,163629,163631,163633],{"class":38,"line":39},[36,163628,30848],{"class":109},[36,163630,163553],{"class":98},[36,163632,689],{"class":109},[36,163634,5108],{"class":98},[559,163636,163638],{"id":163637},"_64-列表常用方法","6.4 列表常用方法",[26,163640,163642],{"className":30811,"code":163641,"language":30813,"meta":31,"style":31},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[33,163643,163644,163660,163664,163673,163687,163701,163705],{"__ignoreMap":31},[36,163645,163646,163648,163650,163652,163654,163656,163658],{"class":38,"line":39},[36,163647,160754],{"class":98},[36,163649,176],{"class":163},[36,163651,52658],{"class":98},[36,163653,150262],{"class":59},[36,163655,12874],{"class":98},[36,163657,151310],{"class":59},[36,163659,33679],{"class":98},[36,163661,163662],{"class":38,"line":46},[36,163663,247],{"emptyLinePlaceholder":246},[36,163665,163666,163669,163671],{"class":38,"line":52},[36,163667,163668],{"class":98},"names.append(",[36,163670,160105],{"class":59},[36,163672,627],{"class":98},[36,163674,163675,163678,163680,163682,163685],{"class":38,"line":66},[36,163676,163677],{"class":98},"names.insert(",[36,163679,833],{"class":109},[36,163681,12874],{"class":98},[36,163683,163684],{"class":59},"\"小李\"",[36,163686,627],{"class":98},[36,163688,163689,163692,163694,163696,163699],{"class":38,"line":72},[36,163690,163691],{"class":98},"names.extend([",[36,163693,9124],{"class":59},[36,163695,12874],{"class":98},[36,163697,163698],{"class":59},"\"小赵\"",[36,163700,5108],{"class":98},[36,163702,163703],{"class":38,"line":82},[36,163704,247],{"emptyLinePlaceholder":246},[36,163706,163707,163709],{"class":38,"line":88},[36,163708,30848],{"class":109},[36,163710,163711],{"class":98},"(names)\n",[14,163713,163714],{},"删除元素：",[26,163716,163718],{"className":30811,"code":163717,"language":30813,"meta":31,"style":31},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[33,163719,163720,163729,163739,163753,163765],{"__ignoreMap":31},[36,163721,163722,163725,163727],{"class":38,"line":39},[36,163723,163724],{"class":98},"names.remove(",[36,163726,151310],{"class":59},[36,163728,627],{"class":98},[36,163730,163731,163734,163736],{"class":38,"line":46},[36,163732,163733],{"class":98},"last ",[36,163735,176],{"class":163},[36,163737,163738],{"class":98}," names.pop()\n",[36,163740,163741,163744,163746,163749,163751],{"class":38,"line":52},[36,163742,163743],{"class":98},"first ",[36,163745,176],{"class":163},[36,163747,163748],{"class":98}," names.pop(",[36,163750,807],{"class":109},[36,163752,627],{"class":98},[36,163754,163755,163758,163761,163763],{"class":38,"line":66},[36,163756,163757],{"class":163},"del",[36,163759,163760],{"class":98}," names[",[36,163762,807],{"class":109},[36,163764,33679],{"class":98},[36,163766,163767],{"class":38,"line":72},[36,163768,163769],{"class":98},"names.clear()\n",[14,163771,163772],{},"查询和统计：",[26,163774,163776],{"className":30811,"code":163775,"language":30813,"meta":31,"style":31},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[33,163777,163778,163806,163810,163821,163832],{"__ignoreMap":31},[36,163779,163780,163782,163784,163786,163788,163790,163792,163794,163796,163798,163800,163802,163804],{"class":38,"line":39},[36,163781,163457],{"class":98},[36,163783,176],{"class":163},[36,163785,52658],{"class":98},[36,163787,833],{"class":109},[36,163789,12874],{"class":98},[36,163791,694],{"class":109},[36,163793,12874],{"class":98},[36,163795,689],{"class":109},[36,163797,12874],{"class":98},[36,163799,694],{"class":109},[36,163801,12874],{"class":98},[36,163803,908],{"class":109},[36,163805,33679],{"class":98},[36,163807,163808],{"class":38,"line":46},[36,163809,247],{"emptyLinePlaceholder":246},[36,163811,163812,163814,163817,163819],{"class":38,"line":52},[36,163813,30848],{"class":109},[36,163815,163816],{"class":98},"(numbers.index(",[36,163818,689],{"class":109},[36,163820,30930],{"class":98},[36,163822,163823,163825,163828,163830],{"class":38,"line":66},[36,163824,30848],{"class":109},[36,163826,163827],{"class":98},"(numbers.count(",[36,163829,694],{"class":109},[36,163831,30930],{"class":98},[36,163833,163834,163836,163838,163840],{"class":38,"line":72},[36,163835,30848],{"class":109},[36,163837,621],{"class":98},[36,163839,7809],{"class":109},[36,163841,163842],{"class":98},"(numbers))\n",[14,163844,163845],{},"排序：",[26,163847,163849],{"className":30811,"code":163848,"language":30813,"meta":31,"style":31},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[33,163850,163851,163875,163879,163884,163891,163895,163909,163915,163919,163924],{"__ignoreMap":31},[36,163852,163853,163855,163857,163859,163861,163863,163865,163867,163869,163871,163873],{"class":38,"line":39},[36,163854,163457],{"class":98},[36,163856,176],{"class":163},[36,163858,52658],{"class":98},[36,163860,689],{"class":109},[36,163862,12874],{"class":98},[36,163864,833],{"class":109},[36,163866,12874],{"class":98},[36,163868,933],{"class":109},[36,163870,12874],{"class":98},[36,163872,694],{"class":109},[36,163874,33679],{"class":98},[36,163876,163877],{"class":38,"line":46},[36,163878,247],{"emptyLinePlaceholder":246},[36,163880,163881],{"class":38,"line":52},[36,163882,163883],{"class":98},"numbers.sort()\n",[36,163885,163886,163888],{"class":38,"line":66},[36,163887,30848],{"class":109},[36,163889,163890],{"class":98},"(numbers)\n",[36,163892,163893],{"class":38,"line":72},[36,163894,247],{"emptyLinePlaceholder":246},[36,163896,163897,163900,163903,163905,163907],{"class":38,"line":82},[36,163898,163899],{"class":98},"numbers.sort(",[36,163901,163902],{"class":5667},"reverse",[36,163904,176],{"class":163},[36,163906,31909],{"class":109},[36,163908,627],{"class":98},[36,163910,163911,163913],{"class":38,"line":88},[36,163912,30848],{"class":109},[36,163914,163890],{"class":98},[36,163916,163917],{"class":38,"line":113},[36,163918,247],{"emptyLinePlaceholder":246},[36,163920,163921],{"class":38,"line":119},[36,163922,163923],{"class":98},"numbers.reverse()\n",[36,163925,163926,163928],{"class":38,"line":131},[36,163927,30848],{"class":109},[36,163929,163890],{"class":98},[14,163931,163932,163935,163936,163939],{},[33,163933,163934],{},"sort()"," 会修改原列表，",[33,163937,163938],{},"sorted()"," 返回新列表。",[26,163941,163943],{"className":30811,"code":163942,"language":30813,"meta":31,"style":31},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[33,163944,163945,163969,163981,163985,163991],{"__ignoreMap":31},[36,163946,163947,163949,163951,163953,163955,163957,163959,163961,163963,163965,163967],{"class":38,"line":39},[36,163948,163457],{"class":98},[36,163950,176],{"class":163},[36,163952,52658],{"class":98},[36,163954,689],{"class":109},[36,163956,12874],{"class":98},[36,163958,833],{"class":109},[36,163960,12874],{"class":98},[36,163962,933],{"class":109},[36,163964,12874],{"class":98},[36,163966,694],{"class":109},[36,163968,33679],{"class":98},[36,163970,163971,163974,163976,163979],{"class":38,"line":46},[36,163972,163973],{"class":98},"new_numbers ",[36,163975,176],{"class":163},[36,163977,163978],{"class":109}," sorted",[36,163980,163890],{"class":98},[36,163982,163983],{"class":38,"line":52},[36,163984,247],{"emptyLinePlaceholder":246},[36,163986,163987,163989],{"class":38,"line":66},[36,163988,30848],{"class":109},[36,163990,163890],{"class":98},[36,163992,163993,163995],{"class":38,"line":72},[36,163994,30848],{"class":109},[36,163996,163997],{"class":98},"(new_numbers)\n",[559,163999,164001],{"id":164000},"_65-列表遍历","6.5 列表遍历",[26,164003,164005],{"className":30811,"code":164004,"language":30813,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[33,164006,164007,164027,164031,164041],{"__ignoreMap":31},[36,164008,164009,164011,164013,164015,164017,164019,164021,164023,164025],{"class":38,"line":39},[36,164010,160754],{"class":98},[36,164012,176],{"class":163},[36,164014,52658],{"class":98},[36,164016,150262],{"class":59},[36,164018,12874],{"class":98},[36,164020,151310],{"class":59},[36,164022,12874],{"class":98},[36,164024,160105],{"class":59},[36,164026,33679],{"class":98},[36,164028,164029],{"class":38,"line":46},[36,164030,247],{"emptyLinePlaceholder":246},[36,164032,164033,164035,164037,164039],{"class":38,"line":52},[36,164034,3476],{"class":163},[36,164036,160790],{"class":98},[36,164038,26480],{"class":163},[36,164040,160795],{"class":98},[36,164042,164043,164045],{"class":38,"line":66},[36,164044,31732],{"class":109},[36,164046,151034],{"class":98},[14,164048,164049],{},"需要索引时：",[26,164051,164053],{"className":30811,"code":164052,"language":30813,"meta":31,"style":31},"for index, name in enumerate(names):\n    print(index, name)\n",[33,164054,164055,164069],{"__ignoreMap":31},[36,164056,164057,164059,164062,164064,164066],{"class":38,"line":39},[36,164058,3476],{"class":163},[36,164060,164061],{"class":98}," index, name ",[36,164063,26480],{"class":163},[36,164065,32039],{"class":109},[36,164067,164068],{"class":98},"(names):\n",[36,164070,164071,164073],{"class":38,"line":46},[36,164072,31732],{"class":109},[36,164074,164075],{"class":98},"(index, name)\n",[14,164077,164078],{},"统计总分：",[26,164080,164082],{"className":30811,"code":164081,"language":30813,"meta":31,"style":31},"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",[33,164083,164084,164109,164117,164121,164132,164140,164144,164161],{"__ignoreMap":31},[36,164085,164086,164089,164091,164093,164095,164097,164099,164101,164103,164105,164107],{"class":38,"line":39},[36,164087,164088],{"class":98},"scores ",[36,164090,176],{"class":163},[36,164092,52658],{"class":98},[36,164094,1475],{"class":109},[36,164096,12874],{"class":98},[36,164098,1349],{"class":109},[36,164100,12874],{"class":98},[36,164102,869],{"class":109},[36,164104,12874],{"class":98},[36,164106,1175],{"class":109},[36,164108,33679],{"class":98},[36,164110,164111,164113,164115],{"class":38,"line":46},[36,164112,157634],{"class":98},[36,164114,176],{"class":163},[36,164116,47766],{"class":109},[36,164118,164119],{"class":38,"line":52},[36,164120,247],{"emptyLinePlaceholder":246},[36,164122,164123,164125,164127,164129],{"class":38,"line":66},[36,164124,3476],{"class":163},[36,164126,158157],{"class":98},[36,164128,26480],{"class":163},[36,164130,164131],{"class":98}," scores:\n",[36,164133,164134,164136,164138],{"class":38,"line":72},[36,164135,159681],{"class":98},[36,164137,9918],{"class":163},[36,164139,2058],{"class":98},[36,164141,164142],{"class":38,"line":82},[36,164143,247],{"emptyLinePlaceholder":246},[36,164145,164146,164149,164151,164154,164156,164158],{"class":38,"line":88},[36,164147,164148],{"class":98},"avg ",[36,164150,176],{"class":163},[36,164152,164153],{"class":98}," total ",[36,164155,1198],{"class":163},[36,164157,7782],{"class":109},[36,164159,164160],{"class":98},"(scores)\n",[36,164162,164163,164165,164167,164169,164172,164174,164177,164179,164181,164183],{"class":38,"line":113},[36,164164,30848],{"class":109},[36,164166,621],{"class":98},[36,164168,671],{"class":163},[36,164170,164171],{"class":59},"\"平均分:",[36,164173,1509],{"class":109},[36,164175,164176],{"class":98},"avg",[36,164178,157533],{"class":163},[36,164180,1558],{"class":109},[36,164182,866],{"class":59},[36,164184,627],{"class":98},[559,164186,164188],{"id":164187},"_66-元组tuple","6.6 元组tuple",[14,164190,164191],{},"元组和列表类似，但不可修改。",[26,164193,164195],{"className":30811,"code":164194,"language":30813,"meta":31,"style":31},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[33,164196,164197,164214],{"__ignoreMap":31},[36,164198,164199,164202,164204,164206,164208,164210,164212],{"class":38,"line":39},[36,164200,164201],{"class":98},"point ",[36,164203,176],{"class":163},[36,164205,2130],{"class":98},[36,164207,1060],{"class":109},[36,164209,12874],{"class":98},[36,164211,1313],{"class":109},[36,164213,627],{"class":98},[36,164215,164216,164218,164220,164222,164224,164226,164228,164230,164232],{"class":38,"line":46},[36,164217,116745],{"class":98},[36,164219,176],{"class":163},[36,164221,2130],{"class":98},[36,164223,150262],{"class":59},[36,164225,12874],{"class":98},[36,164227,1264],{"class":109},[36,164229,12874],{"class":98},[36,164231,69701],{"class":59},[36,164233,627],{"class":98},[14,164235,164236],{},"单元素元组必须加逗号：",[26,164238,164240],{"className":30811,"code":164239,"language":30813,"meta":31,"style":31},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[33,164241,164242,164256,164269,164273,164287],{"__ignoreMap":31},[36,164243,164244,164247,164249,164251,164253],{"class":38,"line":39},[36,164245,164246],{"class":98},"t1 ",[36,164248,176],{"class":163},[36,164250,2130],{"class":98},[36,164252,1060],{"class":109},[36,164254,164255],{"class":98},",)\n",[36,164257,164258,164261,164263,164265,164267],{"class":38,"line":46},[36,164259,164260],{"class":98},"t2 ",[36,164262,176],{"class":163},[36,164264,2130],{"class":98},[36,164266,1060],{"class":109},[36,164268,627],{"class":98},[36,164270,164271],{"class":38,"line":52},[36,164272,247],{"emptyLinePlaceholder":246},[36,164274,164275,164277,164279,164281,164284],{"class":38,"line":66},[36,164276,30848],{"class":109},[36,164278,621],{"class":98},[36,164280,103538],{"class":109},[36,164282,164283],{"class":98},"(t1))  ",[36,164285,164286],{"class":42},"# tuple\n",[36,164288,164289,164291,164293,164295,164298],{"class":38,"line":72},[36,164290,30848],{"class":109},[36,164292,621],{"class":98},[36,164294,103538],{"class":109},[36,164296,164297],{"class":98},"(t2))  ",[36,164299,164300],{"class":42},"# int\n",[14,164302,164303],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[559,164305,164307],{"id":164306},"_67-字符串str","6.7 字符串str",[14,164309,164310],{},"字符串也是序列，可以索引、切片和遍历。",[26,164312,164314],{"className":30811,"code":164313,"language":30813,"meta":31,"style":31},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[33,164315,164316,164324,164328,164339,164351,164355,164366],{"__ignoreMap":31},[36,164317,164318,164320,164322],{"class":38,"line":39},[36,164319,156818],{"class":98},[36,164321,176],{"class":163},[36,164323,160055],{"class":59},[36,164325,164326],{"class":38,"line":46},[36,164327,247],{"emptyLinePlaceholder":246},[36,164329,164330,164332,164335,164337],{"class":38,"line":52},[36,164331,30848],{"class":109},[36,164333,164334],{"class":98},"(text[",[36,164336,807],{"class":109},[36,164338,5108],{"class":98},[36,164340,164341,164343,164345,164347,164349],{"class":38,"line":66},[36,164342,30848],{"class":109},[36,164344,164334],{"class":98},[36,164346,1146],{"class":163},[36,164348,833],{"class":109},[36,164350,5108],{"class":98},[36,164352,164353],{"class":38,"line":72},[36,164354,247],{"emptyLinePlaceholder":246},[36,164356,164357,164359,164361,164363],{"class":38,"line":82},[36,164358,3476],{"class":163},[36,164360,160066],{"class":98},[36,164362,26480],{"class":163},[36,164364,164365],{"class":98}," text:\n",[36,164367,164368,164370],{"class":38,"line":88},[36,164369,31732],{"class":109},[36,164371,160077],{"class":98},[14,164373,164374],{},"字符串不可变：",[26,164376,164378],{"className":30811,"code":164377,"language":30813,"meta":31,"style":31},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[33,164379,164380,164388],{"__ignoreMap":31},[36,164381,164382,164384,164386],{"class":38,"line":39},[36,164383,156818],{"class":98},[36,164385,176],{"class":163},[36,164387,160055],{"class":59},[36,164389,164390,164393,164395,164397,164399,164402],{"class":38,"line":46},[36,164391,164392],{"class":98},"text[",[36,164394,807],{"class":109},[36,164396,4894],{"class":98},[36,164398,176],{"class":163},[36,164400,164401],{"class":59}," \"P\"",[36,164403,164404],{"class":42},"  # 报错\n",[14,164406,164407],{},"如果要得到新字符串：",[26,164409,164411],{"className":30811,"code":164410,"language":30813,"meta":31,"style":31},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[33,164412,164413,164421,164439],{"__ignoreMap":31},[36,164414,164415,164417,164419],{"class":38,"line":39},[36,164416,156818],{"class":98},[36,164418,176],{"class":163},[36,164420,160055],{"class":59},[36,164422,164423,164425,164427,164429,164431,164434,164436],{"class":38,"line":46},[36,164424,156818],{"class":98},[36,164426,176],{"class":163},[36,164428,164401],{"class":59},[36,164430,45999],{"class":163},[36,164432,164433],{"class":98}," text[",[36,164435,833],{"class":109},[36,164437,164438],{"class":98},":]\n",[36,164440,164441,164443],{"class":38,"line":52},[36,164442,30848],{"class":109},[36,164444,164445],{"class":98},"(text)\n",[559,164447,164449],{"id":164448},"_68-切片","6.8 切片",[14,164451,164452],{},"切片用于从序列中取一部分。",[26,164454,164456],{"className":30811,"code":164455,"language":30813,"meta":31,"style":31},"序列[开始:结束:步长]\n",[33,164457,164458],{"__ignoreMap":31},[36,164459,164460],{"class":38,"line":39},[36,164461,164455],{"class":98},[14,164463,164464],{},"结束位置不包含。",[26,164466,164468],{"className":30811,"code":164467,"language":30813,"meta":31,"style":31},"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",[33,164469,164470,164507,164511,164530,164545,164559,164573],{"__ignoreMap":31},[36,164471,164472,164475,164477,164479,164481,164483,164485,164487,164489,164491,164493,164495,164497,164499,164501,164503,164505],{"class":38,"line":39},[36,164473,164474],{"class":98},"nums ",[36,164476,176],{"class":163},[36,164478,52658],{"class":98},[36,164480,807],{"class":109},[36,164482,12874],{"class":98},[36,164484,833],{"class":109},[36,164486,12874],{"class":98},[36,164488,694],{"class":109},[36,164490,12874],{"class":98},[36,164492,689],{"class":109},[36,164494,12874],{"class":98},[36,164496,908],{"class":109},[36,164498,12874],{"class":98},[36,164500,933],{"class":109},[36,164502,12874],{"class":98},[36,164504,958],{"class":109},[36,164506,33679],{"class":98},[36,164508,164509],{"class":38,"line":46},[36,164510,247],{"emptyLinePlaceholder":246},[36,164512,164513,164515,164518,164520,164522,164524,164527],{"class":38,"line":52},[36,164514,30848],{"class":109},[36,164516,164517],{"class":98},"(nums[",[36,164519,833],{"class":109},[36,164521,1472],{"class":98},[36,164523,908],{"class":109},[36,164525,164526],{"class":98},"])    ",[36,164528,164529],{"class":42},"# [1, 2, 3]\n",[36,164531,164532,164534,164537,164539,164542],{"class":38,"line":66},[36,164533,30848],{"class":109},[36,164535,164536],{"class":98},"(nums[:",[36,164538,689],{"class":109},[36,164540,164541],{"class":98},"])     ",[36,164543,164544],{"class":42},"# [0, 1, 2]\n",[36,164546,164547,164549,164551,164553,164556],{"class":38,"line":72},[36,164548,30848],{"class":109},[36,164550,164517],{"class":98},[36,164552,689],{"class":109},[36,164554,164555],{"class":98},":])     ",[36,164557,164558],{"class":42},"# [3, 4, 5, 6]\n",[36,164560,164561,164563,164566,164568,164570],{"class":38,"line":82},[36,164562,30848],{"class":109},[36,164564,164565],{"class":98},"(nums[::",[36,164567,694],{"class":109},[36,164569,164526],{"class":98},[36,164571,164572],{"class":42},"# [0, 2, 4, 6]\n",[36,164574,164575,164577,164579,164581,164583,164586],{"class":38,"line":88},[36,164576,30848],{"class":109},[36,164578,164565],{"class":98},[36,164580,1146],{"class":163},[36,164582,833],{"class":109},[36,164584,164585],{"class":98},"])   ",[36,164587,164588],{"class":42},"# 反转\n",[14,164590,164591],{},"字符串切片：",[26,164593,164595],{"className":30811,"code":164594,"language":30813,"meta":31,"style":31},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[33,164596,164597,164606,164620],{"__ignoreMap":31},[36,164598,164599,164601,164603],{"class":38,"line":39},[36,164600,156818],{"class":98},[36,164602,176],{"class":163},[36,164604,164605],{"class":59}," \"abcdef\"\n",[36,164607,164608,164610,164612,164614,164616,164618],{"class":38,"line":46},[36,164609,30848],{"class":109},[36,164611,164334],{"class":98},[36,164613,833],{"class":109},[36,164615,1472],{"class":98},[36,164617,908],{"class":109},[36,164619,5108],{"class":98},[36,164621,164622,164624,164627,164629,164631],{"class":38,"line":52},[36,164623,30848],{"class":109},[36,164625,164626],{"class":98},"(text[::",[36,164628,1146],{"class":163},[36,164630,833],{"class":109},[36,164632,5108],{"class":98},[559,164634,164636],{"id":164635},"_69-集合set","6.9 集合set",[14,164638,164639],{},"集合特点：",[571,164641,164642,164645,164648],{},[574,164643,164644],{},"无序。",[574,164646,164647],{},"元素不重复。",[574,164649,164650],{},"可以做交集、并集、差集。",[26,164652,164654],{"className":30811,"code":164653,"language":30813,"meta":31,"style":31},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[33,164655,164656,164684],{"__ignoreMap":31},[36,164657,164658,164660,164662,164664,164666,164668,164670,164672,164674,164676,164678,164680,164682],{"class":38,"line":39},[36,164659,164474],{"class":98},[36,164661,176],{"class":163},[36,164663,4899],{"class":98},[36,164665,833],{"class":109},[36,164667,12874],{"class":98},[36,164669,694],{"class":109},[36,164671,12874],{"class":98},[36,164673,689],{"class":109},[36,164675,12874],{"class":98},[36,164677,689],{"class":109},[36,164679,12874],{"class":98},[36,164681,908],{"class":109},[36,164683,2044],{"class":98},[36,164685,164686,164688],{"class":38,"line":46},[36,164687,30848],{"class":109},[36,164689,164690],{"class":98},"(nums)\n",[14,164692,164693],{},"创建空集合：",[26,164695,164697],{"className":30811,"code":164696,"language":30813,"meta":31,"style":31},"s = set()\n",[33,164698,164699],{"__ignoreMap":31},[36,164700,164701,164703,164705,164707],{"class":38,"line":39},[36,164702,11018],{"class":98},[36,164704,176],{"class":163},[36,164706,120096],{"class":109},[36,164708,2435],{"class":98},[14,164710,9466,164711,164713],{},[33,164712,32892],{}," 是空字典，不是空集合。",[14,164715,164716],{},"集合常用操作：",[26,164718,164720],{"className":30811,"code":164719,"language":30813,"meta":31,"style":31},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[33,164721,164722,164742,164746,164755,164764,164773],{"__ignoreMap":31},[36,164723,164724,164726,164728,164730,164732,164734,164736,164738,164740],{"class":38,"line":39},[36,164725,11018],{"class":98},[36,164727,176],{"class":163},[36,164729,4899],{"class":98},[36,164731,833],{"class":109},[36,164733,12874],{"class":98},[36,164735,694],{"class":109},[36,164737,12874],{"class":98},[36,164739,689],{"class":109},[36,164741,2044],{"class":98},[36,164743,164744],{"class":38,"line":46},[36,164745,247],{"emptyLinePlaceholder":246},[36,164747,164748,164751,164753],{"class":38,"line":52},[36,164749,164750],{"class":98},"s.add(",[36,164752,908],{"class":109},[36,164754,627],{"class":98},[36,164756,164757,164760,164762],{"class":38,"line":66},[36,164758,164759],{"class":98},"s.remove(",[36,164761,694],{"class":109},[36,164763,627],{"class":98},[36,164765,164766,164769,164771],{"class":38,"line":72},[36,164767,164768],{"class":98},"s.discard(",[36,164770,1060],{"class":109},[36,164772,627],{"class":98},[36,164774,164775,164777,164779,164781],{"class":38,"line":82},[36,164776,30848],{"class":109},[36,164778,621],{"class":98},[36,164780,7809],{"class":109},[36,164782,164783],{"class":98},"(s))\n",[14,164785,164786],{},"交并差：",[26,164788,164790],{"className":30811,"code":164789,"language":30813,"meta":31,"style":31},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[33,164791,164792,164812,164832,164836,164851,164864],{"__ignoreMap":31},[36,164793,164794,164796,164798,164800,164802,164804,164806,164808,164810],{"class":38,"line":39},[36,164795,11358],{"class":98},[36,164797,176],{"class":163},[36,164799,4899],{"class":98},[36,164801,833],{"class":109},[36,164803,12874],{"class":98},[36,164805,694],{"class":109},[36,164807,12874],{"class":98},[36,164809,689],{"class":109},[36,164811,2044],{"class":98},[36,164813,164814,164816,164818,164820,164822,164824,164826,164828,164830],{"class":38,"line":46},[36,164815,11384],{"class":98},[36,164817,176],{"class":163},[36,164819,4899],{"class":98},[36,164821,689],{"class":109},[36,164823,12874],{"class":98},[36,164825,908],{"class":109},[36,164827,12874],{"class":98},[36,164829,933],{"class":109},[36,164831,2044],{"class":98},[36,164833,164834],{"class":38,"line":52},[36,164835,247],{"emptyLinePlaceholder":246},[36,164837,164838,164840,164843,164845,164848],{"class":38,"line":66},[36,164839,30848],{"class":109},[36,164841,164842],{"class":98},"(a ",[36,164844,967],{"class":163},[36,164846,164847],{"class":98}," b)  ",[36,164849,164850],{"class":42},"# 交集\n",[36,164852,164853,164855,164857,164859,164861],{"class":38,"line":72},[36,164854,30848],{"class":109},[36,164856,164842],{"class":98},[36,164858,1533],{"class":163},[36,164860,164847],{"class":98},[36,164862,164863],{"class":42},"# 并集\n",[36,164865,164866,164868,164870,164872,164874],{"class":38,"line":82},[36,164867,30848],{"class":109},[36,164869,164842],{"class":98},[36,164871,1146],{"class":163},[36,164873,164847],{"class":98},[36,164875,164876],{"class":42},"# 差集\n",[559,164878,164880],{"id":164879},"_610-字典dict","6.10 字典dict",[14,164882,164883],{},"字典通过 key-value 保存数据。",[26,164885,164887],{"className":30811,"code":164886,"language":30813,"meta":31,"style":31},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[33,164888,164889,164897,164907,164918,164928],{"__ignoreMap":31},[36,164890,164891,164893,164895],{"class":38,"line":39},[36,164892,149855],{"class":98},[36,164894,176],{"class":163},[36,164896,16011],{"class":98},[36,164898,164899,164901,164903,164905],{"class":38,"line":46},[36,164900,147394],{"class":59},[36,164902,51869],{"class":98},[36,164904,150262],{"class":59},[36,164906,31899],{"class":98},[36,164908,164909,164912,164914,164916],{"class":38,"line":52},[36,164910,164911],{"class":59},"    \"age\"",[36,164913,51869],{"class":98},[36,164915,1264],{"class":109},[36,164917,31899],{"class":98},[36,164919,164920,164923,164925],{"class":38,"line":66},[36,164921,164922],{"class":59},"    \"score\"",[36,164924,51869],{"class":98},[36,164926,164927],{"class":109},"95\n",[36,164929,164930],{"class":38,"line":72},[36,164931,2044],{"class":98},[14,164933,164934],{},"获取值：",[26,164936,164938],{"className":30811,"code":164937,"language":30813,"meta":31,"style":31},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[33,164939,164940,164951],{"__ignoreMap":31},[36,164941,164942,164944,164947,164949],{"class":38,"line":39},[36,164943,30848],{"class":109},[36,164945,164946],{"class":98},"(student[",[36,164948,63111],{"class":59},[36,164950,5108],{"class":98},[36,164952,164953,164955,164958,164960],{"class":38,"line":46},[36,164954,30848],{"class":109},[36,164956,164957],{"class":98},"(student.get(",[36,164959,63111],{"class":59},[36,164961,30930],{"class":98},[14,164963,15827],{},[26,164965,164967],{"className":30811,"code":164966,"language":30813,"meta":31,"style":31},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[33,164968,164969,164982],{"__ignoreMap":31},[36,164970,164971,164973,164976,164979],{"class":38,"line":39},[36,164972,153233],{"class":98},[36,164974,164975],{"class":59},"\"address\"",[36,164977,164978],{"class":98},"]     ",[36,164980,164981],{"class":42},"# key不存在会报错\n",[36,164983,164984,164987,164989,164991],{"class":38,"line":46},[36,164985,164986],{"class":98},"student.get(",[36,164988,164975],{"class":59},[36,164990,14153],{"class":98},[36,164992,164993],{"class":42},"# key不存在返回None\n",[14,164995,164996],{},"设置默认值：",[26,164998,165000],{"className":30811,"code":164999,"language":30813,"meta":31,"style":31},"print(student.get(\"address\", \"未知\"))\n",[33,165001,165002],{"__ignoreMap":31},[36,165003,165004,165006,165008,165010,165012,165015],{"class":38,"line":39},[36,165005,30848],{"class":109},[36,165007,164957],{"class":98},[36,165009,164975],{"class":59},[36,165011,12874],{"class":98},[36,165013,165014],{"class":59},"\"未知\"",[36,165016,30930],{"class":98},[14,165018,165019],{},"新增和修改：",[26,165021,165023],{"className":30811,"code":165022,"language":30813,"meta":31,"style":31},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[33,165024,165025,165038],{"__ignoreMap":31},[36,165026,165027,165029,165031,165033,165035],{"class":38,"line":39},[36,165028,153233],{"class":98},[36,165030,69556],{"class":59},[36,165032,4894],{"class":98},[36,165034,176],{"class":163},[36,165036,165037],{"class":109}," 19\n",[36,165039,165040,165042,165044,165046,165048],{"class":38,"line":46},[36,165041,153233],{"class":98},[36,165043,164975],{"class":59},[36,165045,4894],{"class":98},[36,165047,176],{"class":163},[36,165049,165050],{"class":59}," \"北京\"\n",[14,165052,165053],{},"删除：",[26,165055,165057],{"className":30811,"code":165056,"language":30813,"meta":31,"style":31},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[33,165058,165059,165072,165082],{"__ignoreMap":31},[36,165060,165061,165063,165065,165068,165070],{"class":38,"line":39},[36,165062,155732],{"class":98},[36,165064,176],{"class":163},[36,165066,165067],{"class":98}," student.pop(",[36,165069,151846],{"class":59},[36,165071,627],{"class":98},[36,165073,165074,165076,165078,165080],{"class":38,"line":46},[36,165075,163757],{"class":163},[36,165077,152523],{"class":98},[36,165079,69556],{"class":59},[36,165081,33679],{"class":98},[36,165083,165084],{"class":38,"line":52},[36,165085,165086],{"class":98},"student.clear()\n",[559,165088,165090],{"id":165089},"_611-字典遍历","6.11 字典遍历",[14,165092,165093],{},"遍历 key：",[26,165095,165097],{"className":30811,"code":165096,"language":30813,"meta":31,"style":31},"for key in student:\n    print(key, student[key])\n",[33,165098,165099,165111],{"__ignoreMap":31},[36,165100,165101,165103,165106,165108],{"class":38,"line":39},[36,165102,3476],{"class":163},[36,165104,165105],{"class":98}," key ",[36,165107,26480],{"class":163},[36,165109,165110],{"class":98}," student:\n",[36,165112,165113,165115],{"class":38,"line":46},[36,165114,31732],{"class":109},[36,165116,165117],{"class":98},"(key, student[key])\n",[14,165119,165120],{},"遍历 value：",[26,165122,165124],{"className":30811,"code":165123,"language":30813,"meta":31,"style":31},"for value in student.values():\n    print(value)\n",[33,165125,165126,165138],{"__ignoreMap":31},[36,165127,165128,165130,165133,165135],{"class":38,"line":39},[36,165129,3476],{"class":163},[36,165131,165132],{"class":98}," value ",[36,165134,26480],{"class":163},[36,165136,165137],{"class":98}," student.values():\n",[36,165139,165140,165142],{"class":38,"line":46},[36,165141,31732],{"class":109},[36,165143,165144],{"class":98},"(value)\n",[14,165146,165147],{},"遍历 key 和 value：",[26,165149,165151],{"className":30811,"code":165150,"language":30813,"meta":31,"style":31},"for key, value in student.items():\n    print(key, value)\n",[33,165152,165153,165165],{"__ignoreMap":31},[36,165154,165155,165157,165160,165162],{"class":38,"line":39},[36,165156,3476],{"class":163},[36,165158,165159],{"class":98}," key, value ",[36,165161,26480],{"class":163},[36,165163,165164],{"class":98}," student.items():\n",[36,165166,165167,165169],{"class":38,"line":46},[36,165168,31732],{"class":109},[36,165170,165171],{"class":98},"(key, value)\n",[559,165173,165175],{"id":165174},"_612-嵌套容器","6.12 嵌套容器",[14,165177,165178],{},"列表中保存字典，是项目中最常见的结构之一。",[26,165180,165182],{"className":30811,"code":165181,"language":30813,"meta":31,"style":31},"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",[33,165183,165184,165192,165220,165248,165276,165280,165284,165294],{"__ignoreMap":31},[36,165185,165186,165188,165190],{"class":38,"line":39},[36,165187,160090],{"class":98},[36,165189,176],{"class":163},[36,165191,55879],{"class":98},[36,165193,165194,165196,165198,165200,165202,165204,165206,165208,165210,165212,165214,165216,165218],{"class":38,"line":46},[36,165195,148759],{"class":98},[36,165197,63111],{"class":59},[36,165199,51869],{"class":98},[36,165201,150262],{"class":59},[36,165203,12874],{"class":98},[36,165205,69556],{"class":59},[36,165207,51869],{"class":98},[36,165209,1264],{"class":109},[36,165211,12874],{"class":98},[36,165213,151846],{"class":59},[36,165215,51869],{"class":98},[36,165217,1600],{"class":109},[36,165219,5381],{"class":98},[36,165221,165222,165224,165226,165228,165230,165232,165234,165236,165238,165240,165242,165244,165246],{"class":38,"line":52},[36,165223,148759],{"class":98},[36,165225,63111],{"class":59},[36,165227,51869],{"class":98},[36,165229,151310],{"class":59},[36,165231,12874],{"class":98},[36,165233,69556],{"class":59},[36,165235,51869],{"class":98},[36,165237,1239],{"class":109},[36,165239,12874],{"class":98},[36,165241,151846],{"class":59},[36,165243,51869],{"class":98},[36,165245,1424],{"class":109},[36,165247,5381],{"class":98},[36,165249,165250,165252,165254,165256,165258,165260,165262,165264,165266,165268,165270,165272,165274],{"class":38,"line":66},[36,165251,148759],{"class":98},[36,165253,63111],{"class":59},[36,165255,51869],{"class":98},[36,165257,160105],{"class":59},[36,165259,12874],{"class":98},[36,165261,69556],{"class":59},[36,165263,51869],{"class":98},[36,165265,1288],{"class":109},[36,165267,12874],{"class":98},[36,165269,151846],{"class":59},[36,165271,51869],{"class":98},[36,165273,1020],{"class":109},[36,165275,5381],{"class":98},[36,165277,165278],{"class":38,"line":72},[36,165279,33679],{"class":98},[36,165281,165282],{"class":38,"line":82},[36,165283,247],{"emptyLinePlaceholder":246},[36,165285,165286,165288,165290,165292],{"class":38,"line":88},[36,165287,3476],{"class":163},[36,165289,152511],{"class":98},[36,165291,26480],{"class":163},[36,165293,152516],{"class":98},[36,165295,165296,165298,165300,165302,165305,165307],{"class":38,"line":113},[36,165297,31732],{"class":109},[36,165299,164946],{"class":98},[36,165301,63111],{"class":59},[36,165303,165304],{"class":98},"], student[",[36,165306,151846],{"class":59},[36,165308,5108],{"class":98},[14,165310,165311],{},"统计平均分：",[26,165313,165315],{"className":30811,"code":165314,"language":30813,"meta":31,"style":31},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[33,165316,165317,165325,165329,165339,165351,165355,165370],{"__ignoreMap":31},[36,165318,165319,165321,165323],{"class":38,"line":39},[36,165320,157634],{"class":98},[36,165322,176],{"class":163},[36,165324,47766],{"class":109},[36,165326,165327],{"class":38,"line":46},[36,165328,247],{"emptyLinePlaceholder":246},[36,165330,165331,165333,165335,165337],{"class":38,"line":52},[36,165332,3476],{"class":163},[36,165334,152511],{"class":98},[36,165336,26480],{"class":163},[36,165338,152516],{"class":98},[36,165340,165341,165343,165345,165347,165349],{"class":38,"line":66},[36,165342,159681],{"class":98},[36,165344,9918],{"class":163},[36,165346,152523],{"class":98},[36,165348,151846],{"class":59},[36,165350,33679],{"class":98},[36,165352,165353],{"class":38,"line":72},[36,165354,247],{"emptyLinePlaceholder":246},[36,165356,165357,165359,165361,165363,165365,165367],{"class":38,"line":82},[36,165358,164148],{"class":98},[36,165360,176],{"class":163},[36,165362,164153],{"class":98},[36,165364,1198],{"class":163},[36,165366,7782],{"class":109},[36,165368,165369],{"class":98},"(students)\n",[36,165371,165372,165374,165376,165378,165380,165382,165384,165386,165388,165390],{"class":38,"line":88},[36,165373,30848],{"class":109},[36,165375,621],{"class":98},[36,165377,671],{"class":163},[36,165379,164171],{"class":59},[36,165381,1509],{"class":109},[36,165383,164176],{"class":98},[36,165385,157533],{"class":163},[36,165387,1558],{"class":109},[36,165389,866],{"class":59},[36,165391,627],{"class":98},[14,165393,165394],{},"查找学生：",[26,165396,165398],{"className":30811,"code":165397,"language":30813,"meta":31,"style":31},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[33,165399,165400,165415,165419,165429,165443,165449,165453,165459],{"__ignoreMap":31},[36,165401,165402,165404,165406,165408,165410,165413],{"class":38,"line":39},[36,165403,112009],{"class":98},[36,165405,176],{"class":163},[36,165407,61037],{"class":109},[36,165409,621],{"class":98},[36,165411,165412],{"class":59},"\"请输入学生姓名:\"",[36,165414,627],{"class":98},[36,165416,165417],{"class":38,"line":46},[36,165418,247],{"emptyLinePlaceholder":246},[36,165420,165421,165423,165425,165427],{"class":38,"line":52},[36,165422,3476],{"class":163},[36,165424,152511],{"class":98},[36,165426,26480],{"class":163},[36,165428,152516],{"class":98},[36,165430,165431,165433,165435,165437,165439,165441],{"class":38,"line":66},[36,165432,3552],{"class":163},[36,165434,152523],{"class":98},[36,165436,63111],{"class":59},[36,165438,4894],{"class":98},[36,165440,3400],{"class":163},[36,165442,160806],{"class":98},[36,165444,165445,165447],{"class":38,"line":72},[36,165446,32884],{"class":109},[36,165448,150416],{"class":98},[36,165450,165451],{"class":38,"line":82},[36,165452,32060],{"class":163},[36,165454,165455,165457],{"class":38,"line":88},[36,165456,2169],{"class":163},[36,165458,4190],{"class":98},[36,165460,165461,165463,165465,165468],{"class":38,"line":113},[36,165462,31732],{"class":109},[36,165464,621],{"class":98},[36,165466,165467],{"class":59},"\"没有找到\"",[36,165469,627],{"class":98},[559,165471,165473],{"id":165472},"_613-容器通用操作","6.13 容器通用操作",[14,165475,165476],{},"长度：",[26,165478,165480],{"className":30811,"code":165479,"language":30813,"meta":31,"style":31},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[33,165481,165482,165501,165511],{"__ignoreMap":31},[36,165483,165484,165486,165489,165491,165493,165495,165497,165499],{"class":38,"line":39},[36,165485,7809],{"class":109},[36,165487,165488],{"class":98},"([",[36,165490,833],{"class":109},[36,165492,12874],{"class":98},[36,165494,694],{"class":109},[36,165496,12874],{"class":98},[36,165498,689],{"class":109},[36,165500,5108],{"class":98},[36,165502,165503,165505,165507,165509],{"class":38,"line":46},[36,165504,7809],{"class":109},[36,165506,621],{"class":98},[36,165508,156254],{"class":59},[36,165510,627],{"class":98},[36,165512,165513,165515,165518,165520,165522,165524],{"class":38,"line":52},[36,165514,7809],{"class":109},[36,165516,165517],{"class":98},"({",[36,165519,63111],{"class":59},[36,165521,51869],{"class":98},[36,165523,150262],{"class":59},[36,165525,165526],{"class":98},"})\n",[14,165528,165529],{},"最大最小：",[26,165531,165533],{"className":30811,"code":165532,"language":30813,"meta":31,"style":31},"max([1, 2, 3])\nmin([1, 2, 3])\n",[33,165534,165535,165553],{"__ignoreMap":31},[36,165536,165537,165539,165541,165543,165545,165547,165549,165551],{"class":38,"line":39},[36,165538,6466],{"class":109},[36,165540,165488],{"class":98},[36,165542,833],{"class":109},[36,165544,12874],{"class":98},[36,165546,694],{"class":109},[36,165548,12874],{"class":98},[36,165550,689],{"class":109},[36,165552,5108],{"class":98},[36,165554,165555,165558,165560,165562,165564,165566,165568,165570],{"class":38,"line":46},[36,165556,165557],{"class":109},"min",[36,165559,165488],{"class":98},[36,165561,833],{"class":109},[36,165563,12874],{"class":98},[36,165565,694],{"class":109},[36,165567,12874],{"class":98},[36,165569,689],{"class":109},[36,165571,5108],{"class":98},[14,165573,165574],{},"求和：",[26,165576,165578],{"className":30811,"code":165577,"language":30813,"meta":31,"style":31},"sum([1, 2, 3])\n",[33,165579,165580],{"__ignoreMap":31},[36,165581,165582,165585,165587,165589,165591,165593,165595,165597],{"class":38,"line":39},[36,165583,165584],{"class":109},"sum",[36,165586,165488],{"class":98},[36,165588,833],{"class":109},[36,165590,12874],{"class":98},[36,165592,694],{"class":109},[36,165594,12874],{"class":98},[36,165596,689],{"class":109},[36,165598,5108],{"class":98},[14,165600,163845],{},[26,165602,165604],{"className":30811,"code":165603,"language":30813,"meta":31,"style":31},"sorted([3, 1, 2])\n",[33,165605,165606],{"__ignoreMap":31},[36,165607,165608,165611,165613,165615,165617,165619,165621,165623],{"class":38,"line":39},[36,165609,165610],{"class":109},"sorted",[36,165612,165488],{"class":98},[36,165614,689],{"class":109},[36,165616,12874],{"class":98},[36,165618,833],{"class":109},[36,165620,12874],{"class":98},[36,165622,694],{"class":109},[36,165624,5108],{"class":98},[14,165626,165627],{},"类型转换：",[26,165629,165631],{"className":30811,"code":165630,"language":30813,"meta":31,"style":31},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[33,165632,165633,165643,165661],{"__ignoreMap":31},[36,165634,165635,165637,165639,165641],{"class":38,"line":39},[36,165636,154444],{"class":109},[36,165638,621],{"class":98},[36,165640,156254],{"class":59},[36,165642,627],{"class":98},[36,165644,165645,165647,165649,165651,165653,165655,165657,165659],{"class":38,"line":46},[36,165646,155639],{"class":109},[36,165648,165488],{"class":98},[36,165650,833],{"class":109},[36,165652,12874],{"class":98},[36,165654,694],{"class":109},[36,165656,12874],{"class":98},[36,165658,689],{"class":109},[36,165660,5108],{"class":98},[36,165662,165663,165665,165667,165669,165671,165673,165675,165677,165679,165681],{"class":38,"line":52},[36,165664,155664],{"class":109},[36,165666,165488],{"class":98},[36,165668,833],{"class":109},[36,165670,12874],{"class":98},[36,165672,833],{"class":109},[36,165674,12874],{"class":98},[36,165676,694],{"class":109},[36,165678,12874],{"class":98},[36,165680,689],{"class":109},[36,165682,5108],{"class":98},[14,165684,165685],{},"成员判断：",[26,165687,165689],{"className":30811,"code":165688,"language":30813,"meta":31,"style":31},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[33,165690,165691,165708,165732],{"__ignoreMap":31},[36,165692,165693,165695,165697,165700,165703,165706],{"class":38,"line":39},[36,165694,30848],{"class":109},[36,165696,621],{"class":98},[36,165698,165699],{"class":59},"\"a\"",[36,165701,165702],{"class":163}," in",[36,165704,165705],{"class":59}," \"abc\"",[36,165707,627],{"class":98},[36,165709,165710,165712,165714,165716,165718,165720,165722,165724,165726,165728,165730],{"class":38,"line":46},[36,165711,30848],{"class":109},[36,165713,621],{"class":98},[36,165715,833],{"class":109},[36,165717,165702],{"class":163},[36,165719,52658],{"class":98},[36,165721,833],{"class":109},[36,165723,12874],{"class":98},[36,165725,694],{"class":109},[36,165727,12874],{"class":98},[36,165729,689],{"class":109},[36,165731,5108],{"class":98},[36,165733,165734,165736,165738,165740,165742,165744,165746,165748,165750],{"class":38,"line":52},[36,165735,30848],{"class":109},[36,165737,621],{"class":98},[36,165739,63111],{"class":59},[36,165741,165702],{"class":163},[36,165743,4899],{"class":98},[36,165745,63111],{"class":59},[36,165747,51869],{"class":98},[36,165749,150262],{"class":59},[36,165751,165526],{"class":98},[559,165753,165755],{"id":165754},"_614-推导式","6.14 推导式",[14,165757,165758],{},"推导式用于快速生成容器。",[14,165760,165761],{},"列表推导式：",[26,165763,165765],{"className":30811,"code":165764,"language":30813,"meta":31,"style":31},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[33,165766,165767,165794],{"__ignoreMap":31},[36,165768,165769,165771,165773,165776,165778,165780,165782,165784,165786,165788,165790,165792],{"class":38,"line":39},[36,165770,164474],{"class":98},[36,165772,176],{"class":163},[36,165774,165775],{"class":98}," [i ",[36,165777,3476],{"class":163},[36,165779,9879],{"class":98},[36,165781,26480],{"class":163},[36,165783,32876],{"class":109},[36,165785,621],{"class":98},[36,165787,833],{"class":109},[36,165789,12874],{"class":98},[36,165791,958],{"class":109},[36,165793,97732],{"class":98},[36,165795,165796,165798],{"class":38,"line":46},[36,165797,30848],{"class":109},[36,165799,164690],{"class":98},[14,165801,165802],{},"带条件：",[26,165804,165806],{"className":30811,"code":165805,"language":30813,"meta":31,"style":31},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[33,165807,165808,165849],{"__ignoreMap":31},[36,165809,165810,165813,165815,165817,165819,165821,165823,165825,165827,165829,165831,165833,165835,165837,165839,165841,165843,165845,165847],{"class":38,"line":39},[36,165811,165812],{"class":98},"even_nums ",[36,165814,176],{"class":163},[36,165816,165775],{"class":98},[36,165818,3476],{"class":163},[36,165820,9879],{"class":98},[36,165822,26480],{"class":163},[36,165824,32876],{"class":109},[36,165826,621],{"class":98},[36,165828,833],{"class":109},[36,165830,12874],{"class":98},[36,165832,951],{"class":109},[36,165834,14153],{"class":98},[36,165836,2010],{"class":163},[36,165838,9879],{"class":98},[36,165840,942],{"class":163},[36,165842,15194],{"class":109},[36,165844,101990],{"class":163},[36,165846,4544],{"class":109},[36,165848,33679],{"class":98},[36,165850,165851,165853],{"class":38,"line":46},[36,165852,30848],{"class":109},[36,165854,165855],{"class":98},"(even_nums)\n",[14,165857,165858],{},"字典推导式：",[26,165860,165862],{"className":30811,"code":165861,"language":30813,"meta":31,"style":31},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[33,165863,165864,165898],{"__ignoreMap":31},[36,165865,165866,165869,165871,165874,165876,165878,165881,165883,165885,165887,165889,165891,165893,165895],{"class":38,"line":39},[36,165867,165868],{"class":98},"squares ",[36,165870,176],{"class":163},[36,165872,165873],{"class":98}," {i: i ",[36,165875,11100],{"class":163},[36,165877,15194],{"class":109},[36,165879,165880],{"class":163}," for",[36,165882,9879],{"class":98},[36,165884,26480],{"class":163},[36,165886,32876],{"class":109},[36,165888,621],{"class":98},[36,165890,833],{"class":109},[36,165892,12874],{"class":98},[36,165894,958],{"class":109},[36,165896,165897],{"class":98},")}\n",[36,165899,165900,165902],{"class":38,"line":46},[36,165901,30848],{"class":109},[36,165903,165904],{"class":98},"(squares)\n",[14,165906,165907],{},"集合推导式：",[26,165909,165911],{"className":30811,"code":165910,"language":30813,"meta":31,"style":31},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[33,165912,165913,165934],{"__ignoreMap":31},[36,165914,165915,165918,165920,165923,165925,165927,165929,165932],{"class":38,"line":39},[36,165916,165917],{"class":98},"chars ",[36,165919,176],{"class":163},[36,165921,165922],{"class":98}," {ch ",[36,165924,3476],{"class":163},[36,165926,160066],{"class":98},[36,165928,26480],{"class":163},[36,165930,165931],{"class":59}," \"hello\"",[36,165933,2044],{"class":98},[36,165935,165936,165938],{"class":38,"line":46},[36,165937,30848],{"class":109},[36,165939,165940],{"class":98},"(chars)\n",[14,165942,165943],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[559,165945,165947],{"id":165946},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[26,165949,165951],{"className":30811,"code":165950,"language":30813,"meta":31,"style":31},"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",[33,165952,165953,165961,165981,166001,166021,166041,166045,166049,166057,166071,166080,166084,166094,166106,166110,166130,166139,166143,166159,166164,166168,166182,166186,166208,166244],{"__ignoreMap":31},[36,165954,165955,165957,165959],{"class":38,"line":39},[36,165956,160090],{"class":98},[36,165958,176],{"class":163},[36,165960,55879],{"class":98},[36,165962,165963,165965,165967,165969,165971,165973,165975,165977,165979],{"class":38,"line":46},[36,165964,148759],{"class":98},[36,165966,63111],{"class":59},[36,165968,51869],{"class":98},[36,165970,150262],{"class":59},[36,165972,12874],{"class":98},[36,165974,151846],{"class":59},[36,165976,51869],{"class":98},[36,165978,1600],{"class":109},[36,165980,5381],{"class":98},[36,165982,165983,165985,165987,165989,165991,165993,165995,165997,165999],{"class":38,"line":52},[36,165984,148759],{"class":98},[36,165986,63111],{"class":59},[36,165988,51869],{"class":98},[36,165990,151310],{"class":59},[36,165992,12874],{"class":98},[36,165994,151846],{"class":59},[36,165996,51869],{"class":98},[36,165998,1424],{"class":109},[36,166000,5381],{"class":98},[36,166002,166003,166005,166007,166009,166011,166013,166015,166017,166019],{"class":38,"line":66},[36,166004,148759],{"class":98},[36,166006,63111],{"class":59},[36,166008,51869],{"class":98},[36,166010,160105],{"class":59},[36,166012,12874],{"class":98},[36,166014,151846],{"class":59},[36,166016,51869],{"class":98},[36,166018,1020],{"class":109},[36,166020,5381],{"class":98},[36,166022,166023,166025,166027,166029,166031,166033,166035,166037,166039],{"class":38,"line":72},[36,166024,148759],{"class":98},[36,166026,63111],{"class":59},[36,166028,51869],{"class":98},[36,166030,163684],{"class":59},[36,166032,12874],{"class":98},[36,166034,151846],{"class":59},[36,166036,51869],{"class":98},[36,166038,1495],{"class":109},[36,166040,5381],{"class":98},[36,166042,166043],{"class":38,"line":82},[36,166044,33679],{"class":98},[36,166046,166047],{"class":38,"line":88},[36,166048,247],{"emptyLinePlaceholder":246},[36,166050,166051,166053,166055],{"class":38,"line":113},[36,166052,157634],{"class":98},[36,166054,176],{"class":163},[36,166056,47766],{"class":109},[36,166058,166059,166062,166064,166067,166069],{"class":38,"line":119},[36,166060,166061],{"class":98},"max_student ",[36,166063,176],{"class":163},[36,166065,166066],{"class":98}," students[",[36,166068,807],{"class":109},[36,166070,33679],{"class":98},[36,166072,166073,166076,166078],{"class":38,"line":131},[36,166074,166075],{"class":98},"passed ",[36,166077,176],{"class":163},[36,166079,52270],{"class":98},[36,166081,166082],{"class":38,"line":137},[36,166083,247],{"emptyLinePlaceholder":246},[36,166085,166086,166088,166090,166092],{"class":38,"line":147},[36,166087,3476],{"class":163},[36,166089,152511],{"class":98},[36,166091,26480],{"class":163},[36,166093,152516],{"class":98},[36,166095,166096,166098,166100,166102,166104],{"class":38,"line":153},[36,166097,159681],{"class":98},[36,166099,9918],{"class":163},[36,166101,152523],{"class":98},[36,166103,151846],{"class":59},[36,166105,33679],{"class":98},[36,166107,166108],{"class":38,"line":191},[36,166109,247],{"emptyLinePlaceholder":246},[36,166111,166112,166114,166116,166118,166120,166122,166125,166127],{"class":38,"line":197},[36,166113,3552],{"class":163},[36,166115,152523],{"class":98},[36,166117,151846],{"class":59},[36,166119,4894],{"class":98},[36,166121,173],{"class":163},[36,166123,166124],{"class":98}," max_student[",[36,166126,151846],{"class":59},[36,166128,166129],{"class":98},"]:\n",[36,166131,166132,166135,166137],{"class":38,"line":217},[36,166133,166134],{"class":98},"        max_student ",[36,166136,176],{"class":163},[36,166138,152539],{"class":98},[36,166140,166141],{"class":38,"line":223},[36,166142,247],{"emptyLinePlaceholder":246},[36,166144,166145,166147,166149,166151,166153,166155,166157],{"class":38,"line":243},[36,166146,3552],{"class":163},[36,166148,152523],{"class":98},[36,166150,151846],{"class":59},[36,166152,4894],{"class":98},[36,166154,2178],{"class":163},[36,166156,158211],{"class":109},[36,166158,4190],{"class":98},[36,166160,166161],{"class":38,"line":250},[36,166162,166163],{"class":98},"        passed.append(student)\n",[36,166165,166166],{"class":38,"line":256},[36,166167,247],{"emptyLinePlaceholder":246},[36,166169,166170,166172,166174,166176,166178,166180],{"class":38,"line":273},[36,166171,164148],{"class":98},[36,166173,176],{"class":163},[36,166175,164153],{"class":98},[36,166177,1198],{"class":163},[36,166179,7782],{"class":109},[36,166181,165369],{"class":98},[36,166183,166184],{"class":38,"line":278},[36,166185,247],{"emptyLinePlaceholder":246},[36,166187,166188,166190,166192,166194,166196,166198,166200,166202,166204,166206],{"class":38,"line":284},[36,166189,30848],{"class":109},[36,166191,621],{"class":98},[36,166193,671],{"class":163},[36,166195,164171],{"class":59},[36,166197,1509],{"class":109},[36,166199,164176],{"class":98},[36,166201,157533],{"class":163},[36,166203,1558],{"class":109},[36,166205,866],{"class":59},[36,166207,627],{"class":98},[36,166209,166210,166212,166214,166216,166219,166221,166224,166226,166228,166230,166232,166234,166236,166238,166240,166242],{"class":38,"line":315},[36,166211,30848],{"class":109},[36,166213,621],{"class":98},[36,166215,671],{"class":163},[36,166217,166218],{"class":59},"\"最高分学生:",[36,166220,1509],{"class":109},[36,166222,166223],{"class":98},"max_student[",[36,166225,153256],{"class":59},[36,166227,1552],{"class":98},[36,166229,1558],{"class":109},[36,166231,4899],{"class":109},[36,166233,166223],{"class":98},[36,166235,153294],{"class":59},[36,166237,1552],{"class":98},[36,166239,1558],{"class":109},[36,166241,866],{"class":59},[36,166243,627],{"class":98},[36,166245,166246,166248,166250,166252,166255,166258,166261,166263,166265],{"class":38,"line":320},[36,166247,30848],{"class":109},[36,166249,621],{"class":98},[36,166251,671],{"class":163},[36,166253,166254],{"class":59},"\"及格人数:",[36,166256,166257],{"class":109},"{len",[36,166259,166260],{"class":98},"(passed)",[36,166262,1558],{"class":109},[36,166264,866],{"class":59},[36,166266,627],{"class":98},[559,166268,166270],{"id":166269},"_616-易错点","6.16 易错点",[571,166272,166273,166276,166279,166282,166288,166297],{},[574,166274,166275],{},"列表可变，元组和字符串不可变。",[574,166277,166278],{},"切片结束位置不包含。",[574,166280,166281],{},"字典通过 key 取值，不是通过索引。",[574,166283,166284,166285,28819],{},"空集合要用 ",[33,166286,166287],{},"set()",[574,166289,104797,166290,166293,166294,28819],{},[33,166291,166292],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[33,166295,166296],{},"get()",[574,166298,166299],{},"嵌套容器要先看清楚每一层是什么类型。",[559,166301,166303],{"id":166302},"_617-本章练习","6.17 本章练习",[571,166305,166306,166309,166312,166315,166318],{},[574,166307,166308],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[574,166310,166311],{},"输入一句话，统计每个字符出现次数。",[574,166313,166314],{},"使用集合去除列表中的重复元素。",[574,166316,166317],{},"使用字典保存一个学生的信息，并实现修改成绩。",[574,166319,166320],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[537,166322,166323],{},"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":31,"searchDepth":46,"depth":46,"links":166325},[166326,166327,166328,166329,166330,166331,166332,166333,166334,166335,166336,166337,166338,166339,166340,166341,166342],{"id":163306,"depth":46,"text":163307},{"id":163423,"depth":46,"text":163424},{"id":163513,"depth":46,"text":163514},{"id":163637,"depth":46,"text":163638},{"id":164000,"depth":46,"text":164001},{"id":164187,"depth":46,"text":164188},{"id":164306,"depth":46,"text":164307},{"id":164448,"depth":46,"text":164449},{"id":164635,"depth":46,"text":164636},{"id":164879,"depth":46,"text":164880},{"id":165089,"depth":46,"text":165090},{"id":165174,"depth":46,"text":165175},{"id":165472,"depth":46,"text":165473},{"id":165754,"depth":46,"text":165755},{"id":165946,"depth":46,"text":165947},{"id":166269,"depth":46,"text":166270},{"id":166302,"depth":46,"text":166303},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163298,"description":542},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166349,"title":166350,"body":166351,"description":542,"extension":543,"meta":168523,"navigation":246,"path":168524,"seo":168525,"stem":168526,"__hash__":168527},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166352,"toc":168498},[166353,166356,166360,166363,166443,166446,166467,166470,166474,166477,166539,166542,166559,166563,166566,166611,166613,166621,166625,166628,166710,166713,166716,166741,166744,166767,166771,166774,166776,166838,166841,166843,166894,166898,166902,166908,167013,167017,167023,167094,167098,167101,167169,167172,167252,167256,167262,167298,167301,167304,167414,167420,167424,167427,167499,167502,167506,167510,167515,167577,167581,167586,167654,167658,167663,167779,167783,167786,167866,167869,167873,167876,167980,167982,167997,168000,168004,168142,168150,168154,168156,168167,168169,168427,168431,168463,168467,168495],[10,166354,166350],{"id":166355},"_7-函数进阶",[559,166357,166359],{"id":166358},"_71-多返回值","7.1 多返回值",[14,166361,166362],{},"Python 函数可以返回多个值，本质上返回的是元组。",[26,166364,166366],{"className":30811,"code":166365,"language":30813,"meta":31,"style":31},"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",[33,166367,166368,166377,166385,166393,166402,166409,166413,166417,166426,166432],{"__ignoreMap":31},[36,166369,166370,166372,166375],{"class":38,"line":39},[36,166371,32380],{"class":163},[36,166373,166374],{"class":55}," get_info",[36,166376,32386],{"class":98},[36,166378,166379,166381,166383],{"class":38,"line":46},[36,166380,152744],{"class":98},[36,166382,176],{"class":163},[36,166384,149727],{"class":59},[36,166386,166387,166389,166391],{"class":38,"line":52},[36,166388,152760],{"class":98},[36,166390,176],{"class":163},[36,166392,146925],{"class":109},[36,166394,166395,166397,166399],{"class":38,"line":66},[36,166396,152775],{"class":98},[36,166398,176],{"class":163},[36,166400,166401],{"class":109}," 95\n",[36,166403,166404,166406],{"class":38,"line":72},[36,166405,4541],{"class":163},[36,166407,166408],{"class":98}," name, age, score\n",[36,166410,166411],{"class":38,"line":82},[36,166412,247],{"emptyLinePlaceholder":246},[36,166414,166415],{"class":38,"line":88},[36,166416,247],{"emptyLinePlaceholder":246},[36,166418,166419,166421,166423],{"class":38,"line":113},[36,166420,161680],{"class":98},[36,166422,176],{"class":163},[36,166424,166425],{"class":98}," get_info()\n",[36,166427,166428,166430],{"class":38,"line":119},[36,166429,30848],{"class":109},[36,166431,77017],{"class":98},[36,166433,166434,166436,166438,166440],{"class":38,"line":131},[36,166435,30848],{"class":109},[36,166437,621],{"class":98},[36,166439,103538],{"class":109},[36,166441,166442],{"class":98},"(result))\n",[14,166444,166445],{},"可以直接解包：",[26,166447,166449],{"className":30811,"code":166448,"language":30813,"meta":31,"style":31},"name, age, score = get_info()\nprint(name, age, score)\n",[33,166450,166451,166460],{"__ignoreMap":31},[36,166452,166453,166456,166458],{"class":38,"line":39},[36,166454,166455],{"class":98},"name, age, score ",[36,166457,176],{"class":163},[36,166459,166425],{"class":98},[36,166461,166462,166464],{"class":38,"line":46},[36,166463,30848],{"class":109},[36,166465,166466],{"class":98},"(name, age, score)\n",[14,166468,166469],{},"返回多个值适合函数需要同时给出多个结果时使用。",[559,166471,166473],{"id":166472},"_72-位置参数","7.2 位置参数",[14,166475,166476],{},"位置参数按顺序传递。",[26,166478,166480],{"className":30811,"code":166479,"language":30813,"meta":31,"style":31},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[33,166481,166482,166490,166518,166522,166526],{"__ignoreMap":31},[36,166483,166484,166486,166488],{"class":38,"line":39},[36,166485,32380],{"class":163},[36,166487,149746],{"class":55},[36,166489,149749],{"class":98},[36,166491,166492,166494,166496,166498,166500,166502,166504,166506,166508,166510,166512,166514,166516],{"class":38,"line":46},[36,166493,31732],{"class":109},[36,166495,621],{"class":98},[36,166497,671],{"class":163},[36,166499,149760],{"class":59},[36,166501,1509],{"class":109},[36,166503,80242],{"class":98},[36,166505,1558],{"class":109},[36,166507,149769],{"class":59},[36,166509,1509],{"class":109},[36,166511,70653],{"class":98},[36,166513,1558],{"class":109},[36,166515,149778],{"class":59},[36,166517,627],{"class":98},[36,166519,166520],{"class":38,"line":52},[36,166521,247],{"emptyLinePlaceholder":246},[36,166523,166524],{"class":38,"line":66},[36,166525,247],{"emptyLinePlaceholder":246},[36,166527,166528,166531,166533,166535,166537],{"class":38,"line":72},[36,166529,166530],{"class":98},"introduce(",[36,166532,150262],{"class":59},[36,166534,12874],{"class":98},[36,166536,1264],{"class":109},[36,166538,627],{"class":98},[14,166540,166541],{},"顺序错了就会得到错误含义：",[26,166543,166545],{"className":30811,"code":166544,"language":30813,"meta":31,"style":31},"introduce(18, \"小明\")\n",[33,166546,166547],{"__ignoreMap":31},[36,166548,166549,166551,166553,166555,166557],{"class":38,"line":39},[36,166550,166530],{"class":98},[36,166552,1264],{"class":109},[36,166554,12874],{"class":98},[36,166556,150262],{"class":59},[36,166558,627],{"class":98},[559,166560,166562],{"id":166561},"_73-关键字参数","7.3 关键字参数",[14,166564,166565],{},"关键字参数按参数名传递。",[26,166567,166569],{"className":30811,"code":166568,"language":30813,"meta":31,"style":31},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[33,166570,166571,166591],{"__ignoreMap":31},[36,166572,166573,166575,166577,166579,166581,166583,166585,166587,166589],{"class":38,"line":39},[36,166574,166530],{"class":98},[36,166576,80242],{"class":5667},[36,166578,176],{"class":163},[36,166580,150262],{"class":59},[36,166582,12874],{"class":98},[36,166584,70653],{"class":5667},[36,166586,176],{"class":163},[36,166588,1264],{"class":109},[36,166590,627],{"class":98},[36,166592,166593,166595,166597,166599,166601,166603,166605,166607,166609],{"class":38,"line":46},[36,166594,166530],{"class":98},[36,166596,70653],{"class":5667},[36,166598,176],{"class":163},[36,166600,1264],{"class":109},[36,166602,12874],{"class":98},[36,166604,80242],{"class":5667},[36,166606,176],{"class":163},[36,166608,150262],{"class":59},[36,166610,627],{"class":98},[14,166612,118308],{},[571,166614,166615,166618],{},[574,166616,166617],{},"顺序不容易错。",[574,166619,166620],{},"调用时可读性更强。",[559,166622,166624],{"id":166623},"_74-默认参数","7.4 默认参数",[14,166626,166627],{},"默认参数给参数设置默认值。",[26,166629,166631],{"className":30811,"code":166630,"language":30813,"meta":31,"style":31},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[33,166632,166633,166649,166679,166683,166687,166697],{"__ignoreMap":31},[36,166634,166635,166637,166639,166642,166644,166647],{"class":38,"line":39},[36,166636,32380],{"class":163},[36,166638,122467],{"class":55},[36,166640,166641],{"class":98},"(host, port",[36,166643,176],{"class":163},[36,166645,166646],{"class":109},"3306",[36,166648,31219],{"class":98},[36,166650,166651,166653,166655,166657,166660,166662,166664,166666,166668,166670,166673,166675,166677],{"class":38,"line":46},[36,166652,31732],{"class":109},[36,166654,621],{"class":98},[36,166656,671],{"class":163},[36,166658,166659],{"class":59},"\"连接",[36,166661,1509],{"class":109},[36,166663,27829],{"class":98},[36,166665,1558],{"class":109},[36,166667,1472],{"class":59},[36,166669,1509],{"class":109},[36,166671,166672],{"class":98},"port",[36,166674,1558],{"class":109},[36,166676,866],{"class":59},[36,166678,627],{"class":98},[36,166680,166681],{"class":38,"line":52},[36,166682,247],{"emptyLinePlaceholder":246},[36,166684,166685],{"class":38,"line":66},[36,166686,247],{"emptyLinePlaceholder":246},[36,166688,166689,166692,166695],{"class":38,"line":72},[36,166690,166691],{"class":98},"connect(",[36,166693,166694],{"class":59},"\"localhost\"",[36,166696,627],{"class":98},[36,166698,166699,166701,166703,166705,166708],{"class":38,"line":82},[36,166700,166691],{"class":98},[36,166702,166694],{"class":59},[36,166704,12874],{"class":98},[36,166706,166707],{"class":109},"6379",[36,166709,627],{"class":98},[14,166711,166712],{},"注意：默认参数必须放在非默认参数后面。",[14,166714,166715],{},"错误：",[26,166717,166719],{"className":30811,"code":166718,"language":30813,"meta":31,"style":31},"def connect(port=3306, host):\n    pass\n",[33,166720,166721,166737],{"__ignoreMap":31},[36,166722,166723,166725,166727,166730,166732,166734],{"class":38,"line":39},[36,166724,32380],{"class":163},[36,166726,122467],{"class":55},[36,166728,166729],{"class":98},"(port",[36,166731,176],{"class":163},[36,166733,166646],{"class":109},[36,166735,166736],{"class":98},", host):\n",[36,166738,166739],{"class":38,"line":46},[36,166740,149911],{"class":163},[14,166742,166743],{},"正确：",[26,166745,166747],{"className":30811,"code":166746,"language":30813,"meta":31,"style":31},"def connect(host, port=3306):\n    pass\n",[33,166748,166749,166763],{"__ignoreMap":31},[36,166750,166751,166753,166755,166757,166759,166761],{"class":38,"line":39},[36,166752,32380],{"class":163},[36,166754,122467],{"class":55},[36,166756,166641],{"class":98},[36,166758,176],{"class":163},[36,166760,166646],{"class":109},[36,166762,31219],{"class":98},[36,166764,166765],{"class":38,"line":46},[36,166766,149911],{"class":163},[559,166768,166770],{"id":166769},"_75-默认参数的坑","7.5 默认参数的坑",[14,166772,166773],{},"不要使用可变对象作为默认参数。",[14,166775,157997],{},[26,166777,166779],{"className":30811,"code":166778,"language":30813,"meta":31,"style":31},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[33,166780,166781,166796,166801,166808,166812,166816,166827],{"__ignoreMap":31},[36,166782,166783,166785,166788,166791,166793],{"class":38,"line":39},[36,166784,32380],{"class":163},[36,166786,166787],{"class":55}," add_item",[36,166789,166790],{"class":98},"(item, items",[36,166792,176],{"class":163},[36,166794,166795],{"class":98},"[]):\n",[36,166797,166798],{"class":38,"line":46},[36,166799,166800],{"class":98},"    items.append(item)\n",[36,166802,166803,166805],{"class":38,"line":52},[36,166804,4541],{"class":163},[36,166806,166807],{"class":98}," items\n",[36,166809,166810],{"class":38,"line":66},[36,166811,247],{"emptyLinePlaceholder":246},[36,166813,166814],{"class":38,"line":72},[36,166815,247],{"emptyLinePlaceholder":246},[36,166817,166818,166820,166823,166825],{"class":38,"line":82},[36,166819,30848],{"class":109},[36,166821,166822],{"class":98},"(add_item(",[36,166824,165699],{"class":59},[36,166826,30930],{"class":98},[36,166828,166829,166831,166833,166836],{"class":38,"line":88},[36,166830,30848],{"class":109},[36,166832,166822],{"class":98},[36,166834,166835],{"class":59},"\"b\"",[36,166837,30930],{"class":98},[14,166839,166840],{},"第二次调用会复用第一次的列表。",[14,166842,156262],{},[26,166844,166846],{"className":30811,"code":166845,"language":30813,"meta":31,"style":31},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[33,166847,166848,166862,166875,166884,166888],{"__ignoreMap":31},[36,166849,166850,166852,166854,166856,166858,166860],{"class":38,"line":39},[36,166851,32380],{"class":163},[36,166853,166787],{"class":55},[36,166855,166790],{"class":98},[36,166857,176],{"class":163},[36,166859,96118],{"class":109},[36,166861,31219],{"class":98},[36,166863,166864,166866,166869,166871,166873],{"class":38,"line":46},[36,166865,3552],{"class":163},[36,166867,166868],{"class":98}," items ",[36,166870,39360],{"class":163},[36,166872,39366],{"class":109},[36,166874,4190],{"class":98},[36,166876,166877,166880,166882],{"class":38,"line":52},[36,166878,166879],{"class":98},"        items ",[36,166881,176],{"class":163},[36,166883,52270],{"class":98},[36,166885,166886],{"class":38,"line":66},[36,166887,166800],{"class":98},[36,166889,166890,166892],{"class":38,"line":72},[36,166891,4541],{"class":163},[36,166893,166807],{"class":98},[559,166895,166897],{"id":166896},"_76-不定长参数","7.6 不定长参数",[588,166899,166901],{"id":166900},"_761-args","7.6.1 *args",[14,166903,166904,166907],{},[33,166905,166906],{},"*args"," 接收任意数量的位置参数，得到元组。",[26,166909,166911],{"className":30811,"code":166910,"language":30813,"meta":31,"style":31},"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",[33,166912,166913,166926,166934,166945,166954,166960,166964,166968,166987],{"__ignoreMap":31},[36,166914,166915,166917,166919,166921,166923],{"class":38,"line":39},[36,166916,32380],{"class":163},[36,166918,5660],{"class":55},[36,166920,621],{"class":98},[36,166922,1069],{"class":163},[36,166924,166925],{"class":98},"args):\n",[36,166927,166928,166930,166932],{"class":38,"line":46},[36,166929,159681],{"class":98},[36,166931,176],{"class":163},[36,166933,47766],{"class":109},[36,166935,166936,166938,166940,166942],{"class":38,"line":52},[36,166937,3652],{"class":163},[36,166939,156554],{"class":98},[36,166941,26480],{"class":163},[36,166943,166944],{"class":98}," args:\n",[36,166946,166947,166949,166951],{"class":38,"line":66},[36,166948,160356],{"class":98},[36,166950,9918],{"class":163},[36,166952,166953],{"class":98}," num\n",[36,166955,166956,166958],{"class":38,"line":72},[36,166957,4541],{"class":163},[36,166959,162661],{"class":98},[36,166961,166962],{"class":38,"line":82},[36,166963,247],{"emptyLinePlaceholder":246},[36,166965,166966],{"class":38,"line":88},[36,166967,247],{"emptyLinePlaceholder":246},[36,166969,166970,166972,166975,166977,166979,166981,166983,166985],{"class":38,"line":113},[36,166971,30848],{"class":109},[36,166973,166974],{"class":98},"(add(",[36,166976,833],{"class":109},[36,166978,12874],{"class":98},[36,166980,694],{"class":109},[36,166982,12874],{"class":98},[36,166984,689],{"class":109},[36,166986,30930],{"class":98},[36,166988,166989,166991,166993,166995,166997,166999,167001,167003,167005,167007,167009,167011],{"class":38,"line":119},[36,166990,30848],{"class":109},[36,166992,166974],{"class":98},[36,166994,833],{"class":109},[36,166996,12874],{"class":98},[36,166998,694],{"class":109},[36,167000,12874],{"class":98},[36,167002,689],{"class":109},[36,167004,12874],{"class":98},[36,167006,908],{"class":109},[36,167008,12874],{"class":98},[36,167010,933],{"class":109},[36,167012,30930],{"class":98},[588,167014,167016],{"id":167015},"_762-kwargs","7.6.2 **kwargs",[14,167018,167019,167022],{},[33,167020,167021],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[26,167024,167026],{"className":30811,"code":167025,"language":30813,"meta":31,"style":31},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[33,167027,167028,167041,167052,167058,167062,167066],{"__ignoreMap":31},[36,167029,167030,167032,167034,167036,167038],{"class":38,"line":39},[36,167031,32380],{"class":163},[36,167033,162319],{"class":55},[36,167035,621],{"class":98},[36,167037,11100],{"class":163},[36,167039,167040],{"class":98},"kwargs):\n",[36,167042,167043,167045,167047,167049],{"class":38,"line":46},[36,167044,3652],{"class":163},[36,167046,165159],{"class":98},[36,167048,26480],{"class":163},[36,167050,167051],{"class":98}," kwargs.items():\n",[36,167053,167054,167056],{"class":38,"line":52},[36,167055,32884],{"class":109},[36,167057,165171],{"class":98},[36,167059,167060],{"class":38,"line":66},[36,167061,247],{"emptyLinePlaceholder":246},[36,167063,167064],{"class":38,"line":72},[36,167065,247],{"emptyLinePlaceholder":246},[36,167067,167068,167070,167072,167074,167076,167078,167080,167082,167084,167086,167088,167090,167092],{"class":38,"line":82},[36,167069,162384],{"class":98},[36,167071,80242],{"class":5667},[36,167073,176],{"class":163},[36,167075,150262],{"class":59},[36,167077,12874],{"class":98},[36,167079,70653],{"class":5667},[36,167081,176],{"class":163},[36,167083,1264],{"class":109},[36,167085,12874],{"class":98},[36,167087,70704],{"class":5667},[36,167089,176],{"class":163},[36,167091,69701],{"class":59},[36,167093,627],{"class":98},[559,167095,167097],{"id":167096},"_77-参数解包","7.7 参数解包",[14,167099,167100],{},"列表或元组解包为位置参数：",[26,167102,167104],{"className":30811,"code":167103,"language":30813,"meta":31,"style":31},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[33,167105,167106,167115,167130,167134,167138,167158],{"__ignoreMap":31},[36,167107,167108,167110,167112],{"class":38,"line":39},[36,167109,32380],{"class":163},[36,167111,5660],{"class":55},[36,167113,167114],{"class":98},"(a, b, c):\n",[36,167116,167117,167119,167121,167123,167125,167127],{"class":38,"line":46},[36,167118,4541],{"class":163},[36,167120,11308],{"class":98},[36,167122,1095],{"class":163},[36,167124,11321],{"class":98},[36,167126,1095],{"class":163},[36,167128,167129],{"class":98}," c\n",[36,167131,167132],{"class":38,"line":52},[36,167133,247],{"emptyLinePlaceholder":246},[36,167135,167136],{"class":38,"line":66},[36,167137,247],{"emptyLinePlaceholder":246},[36,167139,167140,167142,167144,167146,167148,167150,167152,167154,167156],{"class":38,"line":72},[36,167141,164474],{"class":98},[36,167143,176],{"class":163},[36,167145,52658],{"class":98},[36,167147,833],{"class":109},[36,167149,12874],{"class":98},[36,167151,694],{"class":109},[36,167153,12874],{"class":98},[36,167155,689],{"class":109},[36,167157,33679],{"class":98},[36,167159,167160,167162,167164,167166],{"class":38,"line":82},[36,167161,30848],{"class":109},[36,167163,166974],{"class":98},[36,167165,1069],{"class":163},[36,167167,167168],{"class":98},"nums))\n",[14,167170,167171],{},"字典解包为关键字参数：",[26,167173,167175],{"className":30811,"code":167174,"language":30813,"meta":31,"style":31},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[33,167176,167177,167185,167211,167215,167219,167243],{"__ignoreMap":31},[36,167178,167179,167181,167183],{"class":38,"line":39},[36,167180,32380],{"class":163},[36,167182,149746],{"class":55},[36,167184,149749],{"class":98},[36,167186,167187,167189,167191,167193,167195,167197,167199,167201,167203,167205,167207,167209],{"class":38,"line":46},[36,167188,31732],{"class":109},[36,167190,621],{"class":98},[36,167192,671],{"class":163},[36,167194,866],{"class":59},[36,167196,1509],{"class":109},[36,167198,80242],{"class":98},[36,167200,1558],{"class":109},[36,167202,4899],{"class":109},[36,167204,70653],{"class":98},[36,167206,1558],{"class":109},[36,167208,866],{"class":59},[36,167210,627],{"class":98},[36,167212,167213],{"class":38,"line":52},[36,167214,247],{"emptyLinePlaceholder":246},[36,167216,167217],{"class":38,"line":66},[36,167218,247],{"emptyLinePlaceholder":246},[36,167220,167221,167223,167225,167227,167229,167231,167233,167235,167237,167239,167241],{"class":38,"line":72},[36,167222,116745],{"class":98},[36,167224,176],{"class":163},[36,167226,4899],{"class":98},[36,167228,63111],{"class":59},[36,167230,51869],{"class":98},[36,167232,150262],{"class":59},[36,167234,12874],{"class":98},[36,167236,69556],{"class":59},[36,167238,51869],{"class":98},[36,167240,1264],{"class":109},[36,167242,2044],{"class":98},[36,167244,167245,167247,167249],{"class":38,"line":82},[36,167246,166530],{"class":98},[36,167248,11100],{"class":163},[36,167250,167251],{"class":98},"info)\n",[559,167253,167255],{"id":167254},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,167257,167258,167261],{},[33,167259,167260],{},"lambda"," 用于定义简单匿名函数。",[26,167263,167265],{"className":30811,"code":167264,"language":30813,"meta":31,"style":31},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[33,167266,167267,167284],{"__ignoreMap":31},[36,167268,167269,167272,167274,167277,167280,167282],{"class":38,"line":39},[36,167270,167271],{"class":98},"add ",[36,167273,176],{"class":163},[36,167275,167276],{"class":163}," lambda",[36,167278,167279],{"class":98}," a, b: a ",[36,167281,1095],{"class":163},[36,167283,151478],{"class":98},[36,167285,167286,167288,167290,167292,167294,167296],{"class":38,"line":46},[36,167287,30848],{"class":109},[36,167289,166974],{"class":98},[36,167291,833],{"class":109},[36,167293,12874],{"class":98},[36,167295,694],{"class":109},[36,167297,30930],{"class":98},[14,167299,167300],{},"常和排序、过滤等函数一起使用。",[14,167302,167303],{},"按分数排序：",[26,167305,167307],{"className":30811,"code":167306,"language":30813,"meta":31,"style":31},"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",[33,167308,167309,167317,167337,167357,167377,167381,167385,167408],{"__ignoreMap":31},[36,167310,167311,167313,167315],{"class":38,"line":39},[36,167312,160090],{"class":98},[36,167314,176],{"class":163},[36,167316,55879],{"class":98},[36,167318,167319,167321,167323,167325,167327,167329,167331,167333,167335],{"class":38,"line":46},[36,167320,148759],{"class":98},[36,167322,63111],{"class":59},[36,167324,51869],{"class":98},[36,167326,150262],{"class":59},[36,167328,12874],{"class":98},[36,167330,151846],{"class":59},[36,167332,51869],{"class":98},[36,167334,1600],{"class":109},[36,167336,5381],{"class":98},[36,167338,167339,167341,167343,167345,167347,167349,167351,167353,167355],{"class":38,"line":52},[36,167340,148759],{"class":98},[36,167342,63111],{"class":59},[36,167344,51869],{"class":98},[36,167346,151310],{"class":59},[36,167348,12874],{"class":98},[36,167350,151846],{"class":59},[36,167352,51869],{"class":98},[36,167354,1424],{"class":109},[36,167356,5381],{"class":98},[36,167358,167359,167361,167363,167365,167367,167369,167371,167373,167375],{"class":38,"line":66},[36,167360,148759],{"class":98},[36,167362,63111],{"class":59},[36,167364,51869],{"class":98},[36,167366,160105],{"class":59},[36,167368,12874],{"class":98},[36,167370,151846],{"class":59},[36,167372,51869],{"class":98},[36,167374,1020],{"class":109},[36,167376,5381],{"class":98},[36,167378,167379],{"class":38,"line":72},[36,167380,33679],{"class":98},[36,167382,167383],{"class":38,"line":82},[36,167384,247],{"emptyLinePlaceholder":246},[36,167386,167387,167390,167392,167394,167396,167398,167400,167402,167404,167406],{"class":38,"line":88},[36,167388,167389],{"class":98},"students.sort(",[36,167391,154320],{"class":5667},[36,167393,154323],{"class":163},[36,167395,154326],{"class":98},[36,167397,151846],{"class":59},[36,167399,112633],{"class":98},[36,167401,163902],{"class":5667},[36,167403,176],{"class":163},[36,167405,31909],{"class":109},[36,167407,627],{"class":98},[36,167409,167410,167412],{"class":38,"line":113},[36,167411,30848],{"class":109},[36,167413,165369],{"class":98},[14,167415,167416,167417,167419],{},"如果逻辑复杂，不要硬写 ",[33,167418,167260],{},"，定义普通函数更清晰。",[559,167421,167423],{"id":167422},"_79-函数作为参数","7.9 函数作为参数",[14,167425,167426],{},"函数可以作为参数传给另一个函数。",[26,167428,167430],{"className":30811,"code":167429,"language":30813,"meta":31,"style":31},"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",[33,167431,167432,167440,167450,167454,167458,167468,167475,167479,167483],{"__ignoreMap":31},[36,167433,167434,167436,167438],{"class":38,"line":39},[36,167435,32380],{"class":163},[36,167437,5660],{"class":55},[36,167439,151467],{"class":98},[36,167441,167442,167444,167446,167448],{"class":38,"line":46},[36,167443,4541],{"class":163},[36,167445,11308],{"class":98},[36,167447,1095],{"class":163},[36,167449,151478],{"class":98},[36,167451,167452],{"class":38,"line":52},[36,167453,247],{"emptyLinePlaceholder":246},[36,167455,167456],{"class":38,"line":66},[36,167457,247],{"emptyLinePlaceholder":246},[36,167459,167460,167462,167465],{"class":38,"line":72},[36,167461,32380],{"class":163},[36,167463,167464],{"class":55}," calculate",[36,167466,167467],{"class":98},"(a, b, func):\n",[36,167469,167470,167472],{"class":38,"line":82},[36,167471,4541],{"class":163},[36,167473,167474],{"class":98}," func(a, b)\n",[36,167476,167477],{"class":38,"line":88},[36,167478,247],{"emptyLinePlaceholder":246},[36,167480,167481],{"class":38,"line":113},[36,167482,247],{"emptyLinePlaceholder":246},[36,167484,167485,167487,167490,167492,167494,167496],{"class":38,"line":119},[36,167486,30848],{"class":109},[36,167488,167489],{"class":98},"(calculate(",[36,167491,1060],{"class":109},[36,167493,12874],{"class":98},[36,167495,1313],{"class":109},[36,167497,167498],{"class":98},", add))\n",[14,167500,167501],{},"这种思想在排序、回调、框架中经常出现。",[559,167503,167505],{"id":167504},"_710-mapfiltersorted","7.10 map、filter、sorted",[588,167507,167509],{"id":167508},"_7101-map","7.10.1 map",[14,167511,167512,167514],{},[33,167513,74476],{}," 对每个元素执行函数。",[26,167516,167518],{"className":30811,"code":167517,"language":30813,"meta":31,"style":31},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[33,167519,167520,167544,167567],{"__ignoreMap":31},[36,167521,167522,167524,167526,167528,167530,167532,167534,167536,167538,167540,167542],{"class":38,"line":39},[36,167523,164474],{"class":98},[36,167525,176],{"class":163},[36,167527,52658],{"class":98},[36,167529,833],{"class":109},[36,167531,12874],{"class":98},[36,167533,694],{"class":109},[36,167535,12874],{"class":98},[36,167537,689],{"class":109},[36,167539,12874],{"class":98},[36,167541,908],{"class":109},[36,167543,33679],{"class":98},[36,167545,167546,167548,167550,167553,167555,167557,167560,167562,167564],{"class":38,"line":46},[36,167547,161680],{"class":98},[36,167549,176],{"class":163},[36,167551,167552],{"class":109}," map",[36,167554,621],{"class":98},[36,167556,167260],{"class":163},[36,167558,167559],{"class":98}," x: x ",[36,167561,1069],{"class":163},[36,167563,15194],{"class":109},[36,167565,167566],{"class":98},", nums)\n",[36,167568,167569,167571,167573,167575],{"class":38,"line":52},[36,167570,30848],{"class":109},[36,167572,621],{"class":98},[36,167574,154444],{"class":109},[36,167576,166442],{"class":98},[588,167578,167580],{"id":167579},"_7102-filter","7.10.2 filter",[14,167582,167583,167585],{},[33,167584,80483],{}," 保留满足条件的元素。",[26,167587,167589],{"className":30811,"code":167588,"language":30813,"meta":31,"style":31},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[33,167590,167591,167619,167644],{"__ignoreMap":31},[36,167592,167593,167595,167597,167599,167601,167603,167605,167607,167609,167611,167613,167615,167617],{"class":38,"line":39},[36,167594,164474],{"class":98},[36,167596,176],{"class":163},[36,167598,52658],{"class":98},[36,167600,833],{"class":109},[36,167602,12874],{"class":98},[36,167604,694],{"class":109},[36,167606,12874],{"class":98},[36,167608,689],{"class":109},[36,167610,12874],{"class":98},[36,167612,908],{"class":109},[36,167614,12874],{"class":98},[36,167616,933],{"class":109},[36,167618,33679],{"class":98},[36,167620,167621,167623,167625,167628,167630,167632,167634,167636,167638,167640,167642],{"class":38,"line":46},[36,167622,161680],{"class":98},[36,167624,176],{"class":163},[36,167626,167627],{"class":109}," filter",[36,167629,621],{"class":98},[36,167631,167260],{"class":163},[36,167633,167559],{"class":98},[36,167635,942],{"class":163},[36,167637,15194],{"class":109},[36,167639,101990],{"class":163},[36,167641,4544],{"class":109},[36,167643,167566],{"class":98},[36,167645,167646,167648,167650,167652],{"class":38,"line":52},[36,167647,30848],{"class":109},[36,167649,621],{"class":98},[36,167651,154444],{"class":109},[36,167653,166442],{"class":98},[588,167655,167657],{"id":167656},"_7103-sorted","7.10.3 sorted",[14,167659,167660,167662],{},[33,167661,165610],{}," 返回排序后的新列表。",[26,167664,167666],{"className":30811,"code":167665,"language":30813,"meta":31,"style":31},"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",[33,167667,167668,167676,167696,167716,167736,167740,167744,167773],{"__ignoreMap":31},[36,167669,167670,167672,167674],{"class":38,"line":39},[36,167671,160090],{"class":98},[36,167673,176],{"class":163},[36,167675,55879],{"class":98},[36,167677,167678,167680,167682,167684,167686,167688,167690,167692,167694],{"class":38,"line":46},[36,167679,148759],{"class":98},[36,167681,63111],{"class":59},[36,167683,51869],{"class":98},[36,167685,150262],{"class":59},[36,167687,12874],{"class":98},[36,167689,151846],{"class":59},[36,167691,51869],{"class":98},[36,167693,1600],{"class":109},[36,167695,5381],{"class":98},[36,167697,167698,167700,167702,167704,167706,167708,167710,167712,167714],{"class":38,"line":52},[36,167699,148759],{"class":98},[36,167701,63111],{"class":59},[36,167703,51869],{"class":98},[36,167705,151310],{"class":59},[36,167707,12874],{"class":98},[36,167709,151846],{"class":59},[36,167711,51869],{"class":98},[36,167713,1424],{"class":109},[36,167715,5381],{"class":98},[36,167717,167718,167720,167722,167724,167726,167728,167730,167732,167734],{"class":38,"line":66},[36,167719,148759],{"class":98},[36,167721,63111],{"class":59},[36,167723,51869],{"class":98},[36,167725,160105],{"class":59},[36,167727,12874],{"class":98},[36,167729,151846],{"class":59},[36,167731,51869],{"class":98},[36,167733,1020],{"class":109},[36,167735,5381],{"class":98},[36,167737,167738],{"class":38,"line":72},[36,167739,33679],{"class":98},[36,167741,167742],{"class":38,"line":82},[36,167743,247],{"emptyLinePlaceholder":246},[36,167745,167746,167748,167750,167752,167755,167757,167759,167761,167763,167765,167767,167769,167771],{"class":38,"line":88},[36,167747,161680],{"class":98},[36,167749,176],{"class":163},[36,167751,163978],{"class":109},[36,167753,167754],{"class":98},"(students, ",[36,167756,154320],{"class":5667},[36,167758,154323],{"class":163},[36,167760,154326],{"class":98},[36,167762,151846],{"class":59},[36,167764,112633],{"class":98},[36,167766,163902],{"class":5667},[36,167768,176],{"class":163},[36,167770,31909],{"class":109},[36,167772,627],{"class":98},[36,167774,167775,167777],{"class":38,"line":113},[36,167776,30848],{"class":109},[36,167778,77017],{"class":98},[559,167780,167782],{"id":167781},"_711-闭包入门","7.11 闭包入门",[14,167784,167785],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[26,167787,167789],{"className":30811,"code":167788,"language":30813,"meta":31,"style":31},"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",[33,167790,167791,167801,167811,167822,167826,167833,167837,167841,167855],{"__ignoreMap":31},[36,167792,167793,167795,167798],{"class":38,"line":39},[36,167794,32380],{"class":163},[36,167796,167797],{"class":55}," outer",[36,167799,167800],{"class":98},"(base):\n",[36,167802,167803,167805,167808],{"class":38,"line":46},[36,167804,31234],{"class":163},[36,167806,167807],{"class":55}," inner",[36,167809,167810],{"class":98},"(num):\n",[36,167812,167813,167815,167818,167820],{"class":38,"line":52},[36,167814,15191],{"class":163},[36,167816,167817],{"class":98}," base ",[36,167819,1095],{"class":163},[36,167821,166953],{"class":98},[36,167823,167824],{"class":38,"line":66},[36,167825,247],{"emptyLinePlaceholder":246},[36,167827,167828,167830],{"class":38,"line":72},[36,167829,4541],{"class":163},[36,167831,167832],{"class":98}," inner\n",[36,167834,167835],{"class":38,"line":82},[36,167836,247],{"emptyLinePlaceholder":246},[36,167838,167839],{"class":38,"line":88},[36,167840,247],{"emptyLinePlaceholder":246},[36,167842,167843,167846,167848,167851,167853],{"class":38,"line":113},[36,167844,167845],{"class":98},"add_10 ",[36,167847,176],{"class":163},[36,167849,167850],{"class":98}," outer(",[36,167852,1060],{"class":109},[36,167854,627],{"class":98},[36,167856,167857,167859,167862,167864],{"class":38,"line":119},[36,167858,30848],{"class":109},[36,167860,167861],{"class":98},"(add_10(",[36,167863,933],{"class":109},[36,167865,30930],{"class":98},[14,167867,167868],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[559,167870,167872],{"id":167871},"_712-装饰器入门","7.12 装饰器入门",[14,167874,167875],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[26,167877,167879],{"className":30811,"code":167878,"language":30813,"meta":31,"style":31},"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",[33,167880,167881,167890,167899,167910,167915,167926,167930,167937,167941,167945,167950,167958,167968,167972,167976],{"__ignoreMap":31},[36,167882,167883,167885,167887],{"class":38,"line":39},[36,167884,32380],{"class":163},[36,167886,87623],{"class":55},[36,167888,167889],{"class":98},"(func):\n",[36,167891,167892,167894,167897],{"class":38,"line":46},[36,167893,31234],{"class":163},[36,167895,167896],{"class":55}," wrapper",[36,167898,32386],{"class":98},[36,167900,167901,167903,167905,167908],{"class":38,"line":52},[36,167902,32884],{"class":109},[36,167904,621],{"class":98},[36,167906,167907],{"class":59},"\"函数开始执行\"",[36,167909,627],{"class":98},[36,167911,167912],{"class":38,"line":66},[36,167913,167914],{"class":98},"        func()\n",[36,167916,167917,167919,167921,167924],{"class":38,"line":72},[36,167918,32884],{"class":109},[36,167920,621],{"class":98},[36,167922,167923],{"class":59},"\"函数执行结束\"",[36,167925,627],{"class":98},[36,167927,167928],{"class":38,"line":82},[36,167929,247],{"emptyLinePlaceholder":246},[36,167931,167932,167934],{"class":38,"line":88},[36,167933,4541],{"class":163},[36,167935,167936],{"class":98}," wrapper\n",[36,167938,167939],{"class":38,"line":113},[36,167940,247],{"emptyLinePlaceholder":246},[36,167942,167943],{"class":38,"line":119},[36,167944,247],{"emptyLinePlaceholder":246},[36,167946,167947],{"class":38,"line":131},[36,167948,167949],{"class":55},"@log\n",[36,167951,167952,167954,167956],{"class":38,"line":137},[36,167953,32380],{"class":163},[36,167955,161370],{"class":55},[36,167957,32386],{"class":98},[36,167959,167960,167962,167964,167966],{"class":38,"line":147},[36,167961,31732],{"class":109},[36,167963,621],{"class":98},[36,167965,6295],{"class":59},[36,167967,627],{"class":98},[36,167969,167970],{"class":38,"line":153},[36,167971,247],{"emptyLinePlaceholder":246},[36,167973,167974],{"class":38,"line":191},[36,167975,247],{"emptyLinePlaceholder":246},[36,167977,167978],{"class":38,"line":197},[36,167979,161405],{"class":98},[14,167981,158648],{},[26,167983,167985],{"className":30811,"code":167984,"language":30813,"meta":31,"style":31},"say_hello = log(say_hello)\n",[33,167986,167987],{"__ignoreMap":31},[36,167988,167989,167992,167994],{"class":38,"line":39},[36,167990,167991],{"class":98},"say_hello ",[36,167993,176],{"class":163},[36,167995,167996],{"class":98}," log(say_hello)\n",[14,167998,167999],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[559,168001,168003],{"id":168002},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[26,168005,168007],{"className":30811,"code":168006,"language":30813,"meta":31,"style":31},"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",[33,168008,168009,168017,168034,168044,168063,168073,168080,168084,168090,168094,168098,168102,168110,168120,168124,168128],{"__ignoreMap":31},[36,168010,168011,168013,168015],{"class":38,"line":39},[36,168012,32380],{"class":163},[36,168014,87623],{"class":55},[36,168016,167889],{"class":98},[36,168018,168019,168021,168023,168025,168027,168030,168032],{"class":38,"line":46},[36,168020,31234],{"class":163},[36,168022,167896],{"class":55},[36,168024,621],{"class":98},[36,168026,1069],{"class":163},[36,168028,168029],{"class":98},"args, ",[36,168031,11100],{"class":163},[36,168033,167040],{"class":98},[36,168035,168036,168038,168040,168042],{"class":38,"line":52},[36,168037,32884],{"class":109},[36,168039,621],{"class":98},[36,168041,167907],{"class":59},[36,168043,627],{"class":98},[36,168045,168046,168049,168051,168054,168056,168058,168060],{"class":38,"line":66},[36,168047,168048],{"class":98},"        result ",[36,168050,176],{"class":163},[36,168052,168053],{"class":98}," func(",[36,168055,1069],{"class":163},[36,168057,168029],{"class":98},[36,168059,11100],{"class":163},[36,168061,168062],{"class":98},"kwargs)\n",[36,168064,168065,168067,168069,168071],{"class":38,"line":72},[36,168066,32884],{"class":109},[36,168068,621],{"class":98},[36,168070,167923],{"class":59},[36,168072,627],{"class":98},[36,168074,168075,168077],{"class":38,"line":82},[36,168076,15191],{"class":163},[36,168078,168079],{"class":98}," result\n",[36,168081,168082],{"class":38,"line":88},[36,168083,247],{"emptyLinePlaceholder":246},[36,168085,168086,168088],{"class":38,"line":113},[36,168087,4541],{"class":163},[36,168089,167936],{"class":98},[36,168091,168092],{"class":38,"line":119},[36,168093,247],{"emptyLinePlaceholder":246},[36,168095,168096],{"class":38,"line":131},[36,168097,247],{"emptyLinePlaceholder":246},[36,168099,168100],{"class":38,"line":137},[36,168101,167949],{"class":55},[36,168103,168104,168106,168108],{"class":38,"line":147},[36,168105,32380],{"class":163},[36,168107,5660],{"class":55},[36,168109,151467],{"class":98},[36,168111,168112,168114,168116,168118],{"class":38,"line":153},[36,168113,4541],{"class":163},[36,168115,11308],{"class":98},[36,168117,1095],{"class":163},[36,168119,151478],{"class":98},[36,168121,168122],{"class":38,"line":191},[36,168123,247],{"emptyLinePlaceholder":246},[36,168125,168126],{"class":38,"line":197},[36,168127,247],{"emptyLinePlaceholder":246},[36,168129,168130,168132,168134,168136,168138,168140],{"class":38,"line":217},[36,168131,30848],{"class":109},[36,168133,166974],{"class":98},[36,168135,1060],{"class":109},[36,168137,12874],{"class":98},[36,168139,1313],{"class":109},[36,168141,30930],{"class":98},[14,168143,168144,168145,101449,168147,168149],{},"这个写法使用 ",[33,168146,166906],{},[33,168148,167021],{}," 接收原函数的所有参数。",[559,168151,168153],{"id":168152},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,168155,123666],{},[571,168157,168158,168161,168164],{},[574,168159,168160],{},"给定一组学生数据。",[574,168162,168163],{},"封装函数，根据传入规则筛选学生。",[574,168165,168166],{},"筛选及格、优秀、未成年学生。",[14,168168,10474],{},[26,168170,168172],{"className":30811,"code":168171,"language":30813,"meta":31,"style":31},"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",[33,168173,168174,168182,168210,168238,168266,168270,168274,168278,168288,168296,168306,168313,168318,168324,168328,168332,168356,168379,168402,168406,168413,168420],{"__ignoreMap":31},[36,168175,168176,168178,168180],{"class":38,"line":39},[36,168177,160090],{"class":98},[36,168179,176],{"class":163},[36,168181,55879],{"class":98},[36,168183,168184,168186,168188,168190,168192,168194,168196,168198,168200,168202,168204,168206,168208],{"class":38,"line":46},[36,168185,148759],{"class":98},[36,168187,63111],{"class":59},[36,168189,51869],{"class":98},[36,168191,150262],{"class":59},[36,168193,12874],{"class":98},[36,168195,69556],{"class":59},[36,168197,51869],{"class":98},[36,168199,1264],{"class":109},[36,168201,12874],{"class":98},[36,168203,151846],{"class":59},[36,168205,51869],{"class":98},[36,168207,1600],{"class":109},[36,168209,5381],{"class":98},[36,168211,168212,168214,168216,168218,168220,168222,168224,168226,168228,168230,168232,168234,168236],{"class":38,"line":52},[36,168213,148759],{"class":98},[36,168215,63111],{"class":59},[36,168217,51869],{"class":98},[36,168219,151310],{"class":59},[36,168221,12874],{"class":98},[36,168223,69556],{"class":59},[36,168225,51869],{"class":98},[36,168227,1239],{"class":109},[36,168229,12874],{"class":98},[36,168231,151846],{"class":59},[36,168233,51869],{"class":98},[36,168235,1424],{"class":109},[36,168237,5381],{"class":98},[36,168239,168240,168242,168244,168246,168248,168250,168252,168254,168256,168258,168260,168262,168264],{"class":38,"line":66},[36,168241,148759],{"class":98},[36,168243,63111],{"class":59},[36,168245,51869],{"class":98},[36,168247,160105],{"class":59},[36,168249,12874],{"class":98},[36,168251,69556],{"class":59},[36,168253,51869],{"class":98},[36,168255,1288],{"class":109},[36,168257,12874],{"class":98},[36,168259,151846],{"class":59},[36,168261,51869],{"class":98},[36,168263,1495],{"class":109},[36,168265,5381],{"class":98},[36,168267,168268],{"class":38,"line":72},[36,168269,33679],{"class":98},[36,168271,168272],{"class":38,"line":82},[36,168273,247],{"emptyLinePlaceholder":246},[36,168275,168276],{"class":38,"line":88},[36,168277,247],{"emptyLinePlaceholder":246},[36,168279,168280,168282,168285],{"class":38,"line":113},[36,168281,32380],{"class":163},[36,168283,168284],{"class":55}," filter_students",[36,168286,168287],{"class":98},"(students, condition):\n",[36,168289,168290,168292,168294],{"class":38,"line":119},[36,168291,161597],{"class":98},[36,168293,176],{"class":163},[36,168295,52270],{"class":98},[36,168297,168298,168300,168302,168304],{"class":38,"line":131},[36,168299,3652],{"class":163},[36,168301,152511],{"class":98},[36,168303,26480],{"class":163},[36,168305,152516],{"class":98},[36,168307,168308,168310],{"class":38,"line":137},[36,168309,2955],{"class":163},[36,168311,168312],{"class":98}," condition(student):\n",[36,168314,168315],{"class":38,"line":147},[36,168316,168317],{"class":98},"            result.append(student)\n",[36,168319,168320,168322],{"class":38,"line":153},[36,168321,4541],{"class":163},[36,168323,168079],{"class":98},[36,168325,168326],{"class":38,"line":191},[36,168327,247],{"emptyLinePlaceholder":246},[36,168329,168330],{"class":38,"line":197},[36,168331,247],{"emptyLinePlaceholder":246},[36,168333,168334,168336,168338,168341,168343,168346,168348,168350,168352,168354],{"class":38,"line":217},[36,168335,166075],{"class":98},[36,168337,176],{"class":163},[36,168339,168340],{"class":98}," filter_students(students, ",[36,168342,167260],{"class":163},[36,168344,168345],{"class":98}," s: s[",[36,168347,151846],{"class":59},[36,168349,4894],{"class":98},[36,168351,2178],{"class":163},[36,168353,158211],{"class":109},[36,168355,627],{"class":98},[36,168357,168358,168361,168363,168365,168367,168369,168371,168373,168375,168377],{"class":38,"line":223},[36,168359,168360],{"class":98},"excellent ",[36,168362,176],{"class":163},[36,168364,168340],{"class":98},[36,168366,167260],{"class":163},[36,168368,168345],{"class":98},[36,168370,151846],{"class":59},[36,168372,4894],{"class":98},[36,168374,2178],{"class":163},[36,168376,158162],{"class":109},[36,168378,627],{"class":98},[36,168380,168381,168384,168386,168388,168390,168392,168394,168396,168398,168400],{"class":38,"line":243},[36,168382,168383],{"class":98},"under_age ",[36,168385,176],{"class":163},[36,168387,168340],{"class":98},[36,168389,167260],{"class":163},[36,168391,168345],{"class":98},[36,168393,69556],{"class":59},[36,168395,4894],{"class":98},[36,168397,179],{"class":163},[36,168399,156659],{"class":109},[36,168401,627],{"class":98},[36,168403,168404],{"class":38,"line":250},[36,168405,247],{"emptyLinePlaceholder":246},[36,168407,168408,168410],{"class":38,"line":256},[36,168409,30848],{"class":109},[36,168411,168412],{"class":98},"(passed)\n",[36,168414,168415,168417],{"class":38,"line":273},[36,168416,30848],{"class":109},[36,168418,168419],{"class":98},"(excellent)\n",[36,168421,168422,168424],{"class":38,"line":278},[36,168423,30848],{"class":109},[36,168425,168426],{"class":98},"(under_age)\n",[559,168428,168430],{"id":168429},"_715-易错点","7.15 易错点",[571,168432,168433,168436,168444,168449,168460],{},[574,168434,168435],{},"默认参数不要写可变对象。",[574,168437,168438,168440,168441,168443],{},[33,168439,166906],{}," 是元组，",[33,168442,167021],{}," 是字典。",[574,168445,168446,168448],{},[33,168447,167260],{}," 只适合简单表达式。",[574,168450,168451,101449,168453,168455,168456,168459],{},[33,168452,74476],{},[33,168454,80483],{}," 的结果是迭代器，常用 ",[33,168457,168458],{},"list()"," 转换查看。",[574,168461,168462],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[559,168464,168466],{"id":168465},"_716-本章练习","7.16 本章练习",[571,168468,168469,168476,168482,168487,168492],{},[574,168470,168471,168472,168475],{},"写函数 ",[33,168473,168474],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[574,168477,168471,168478,168481],{},[33,168479,168480],{},"print_user(**kwargs)","，输出用户所有字段。",[574,168483,104797,168484,168486],{},[33,168485,167260],{}," 对学生列表按年龄排序。",[574,168488,104797,168489,168491],{},[33,168490,80483],{}," 找出成绩不及格的学生。",[574,168493,168494],{},"写一个装饰器，统计函数执行前后的提示信息。",[537,168496,168497],{},"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":31,"searchDepth":46,"depth":46,"links":168499},[168500,168501,168502,168503,168504,168505,168509,168510,168511,168512,168517,168518,168519,168520,168521,168522],{"id":166358,"depth":46,"text":166359},{"id":166472,"depth":46,"text":166473},{"id":166561,"depth":46,"text":166562},{"id":166623,"depth":46,"text":166624},{"id":166769,"depth":46,"text":166770},{"id":166896,"depth":46,"text":166897,"children":168506},[168507,168508],{"id":166900,"depth":52,"text":166901},{"id":167015,"depth":52,"text":167016},{"id":167096,"depth":46,"text":167097},{"id":167254,"depth":46,"text":167255},{"id":167422,"depth":46,"text":167423},{"id":167504,"depth":46,"text":167505,"children":168513},[168514,168515,168516],{"id":167508,"depth":52,"text":167509},{"id":167579,"depth":52,"text":167580},{"id":167656,"depth":52,"text":167657},{"id":167781,"depth":46,"text":167782},{"id":167871,"depth":46,"text":167872},{"id":168002,"depth":46,"text":168003},{"id":168152,"depth":46,"text":168153},{"id":168429,"depth":46,"text":168430},{"id":168465,"depth":46,"text":168466},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166350,"description":542},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168529,"title":168530,"body":168531,"description":542,"extension":543,"meta":171050,"navigation":246,"path":171051,"seo":171052,"stem":171053,"__hash__":171054},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168532,"toc":171025},[168533,168536,168540,168543,168546,168577,168581,168585,168588,168615,168619,168622,168673,168676,168691,168694,168729,168733,168735,168759,168762,168822,168826,168830,168833,168890,168893,168913,168917,168920,168983,168987,168990,169046,169053,169077,169081,169084,169147,169151,169156,169207,169210,169214,169219,169286,169289,169371,169375,169380,169431,169434,169438,169441,169444,169452,169455,169501,169504,169550,169554,169560,169604,169607,169653,169656,169696,169699,169760,169764,169767,169857,169860,170002,170005,170072,170076,170079,170082,170223,170226,170304,170307,170483,170487,170489,170500,170502,170701,170705,170949,170953,170987,170991,171022],[10,168534,168530],{"id":168535},"_8-文件操作",[559,168537,168539],{"id":168538},"_81-文件操作的意义","8.1 文件操作的意义",[14,168541,168542],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,168544,168545],{},"常见文件类型：",[571,168547,168548,168554,168560,168566,168572],{},[574,168549,168550,168553],{},[33,168551,168552],{},".txt","：普通文本。",[574,168555,168556,168559],{},[33,168557,168558],{},".csv","：表格文本。",[574,168561,168562,168565],{},[33,168563,168564],{},".json","：结构化数据。",[574,168567,168568,168571],{},[33,168569,168570],{},".log","：日志文件。",[574,168573,168574,168576],{},[33,168575,146726],{},"：Python 源代码。",[559,168578,168580],{"id":168579},"_82-路径","8.2 路径",[588,168582,168584],{"id":168583},"_821-相对路径","8.2.1 相对路径",[14,168586,168587],{},"相对当前运行目录：",[26,168589,168591],{"className":30811,"code":168590,"language":30813,"meta":31,"style":31},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[33,168592,168593],{"__ignoreMap":31},[36,168594,168595,168597,168599,168601,168603,168605,168607,168609,168611,168613],{"class":38,"line":39},[36,168596,87347],{"class":109},[36,168598,621],{"class":98},[36,168600,147170],{"class":59},[36,168602,12874],{"class":98},[36,168604,147175],{"class":59},[36,168606,12874],{"class":98},[36,168608,147180],{"class":5667},[36,168610,176],{"class":163},[36,168612,147185],{"class":59},[36,168614,627],{"class":98},[588,168616,168618],{"id":168617},"_822-绝对路径","8.2.2 绝对路径",[14,168620,168621],{},"从根目录或盘符开始：",[26,168623,168625],{"className":30811,"code":168624,"language":30813,"meta":31,"style":31},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[33,168626,168627,168650],{"__ignoreMap":31},[36,168628,168629,168631,168633,168636,168638,168640,168642,168644,168646,168648],{"class":38,"line":39},[36,168630,87347],{"class":109},[36,168632,621],{"class":98},[36,168634,168635],{"class":59},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[36,168637,12874],{"class":98},[36,168639,147175],{"class":59},[36,168641,12874],{"class":98},[36,168643,147180],{"class":5667},[36,168645,176],{"class":163},[36,168647,147185],{"class":59},[36,168649,627],{"class":98},[36,168651,168652,168654,168656,168659,168661,168663,168665,168667,168669,168671],{"class":38,"line":46},[36,168653,87347],{"class":109},[36,168655,621],{"class":98},[36,168657,168658],{"class":59},"\"D:\u002Fdata\u002Fdata.txt\"",[36,168660,12874],{"class":98},[36,168662,147175],{"class":59},[36,168664,12874],{"class":98},[36,168666,147180],{"class":5667},[36,168668,176],{"class":163},[36,168670,147185],{"class":59},[36,168672,627],{"class":98},[14,168674,168675],{},"Windows 路径建议写成：",[26,168677,168679],{"className":30811,"code":168678,"language":30813,"meta":31,"style":31},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[33,168680,168681],{"__ignoreMap":31},[36,168682,168683,168686,168688],{"class":38,"line":39},[36,168684,168685],{"class":98},"path ",[36,168687,176],{"class":163},[36,168689,168690],{"class":59}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,168692,168693],{},"或原始字符串：",[26,168695,168697],{"className":30811,"code":168696,"language":30813,"meta":31,"style":31},"path = r\"D:\\data\\data.txt\"\n",[33,168698,168699],{"__ignoreMap":31},[36,168700,168701,168703,168705,168707,168709,168712,168715,168718,168720,168722,168724,168727],{"class":38,"line":39},[36,168702,168685],{"class":98},[36,168704,176],{"class":163},[36,168706,17560],{"class":163},[36,168708,866],{"class":59},[36,168710,168711],{"class":48410},"D:",[36,168713,168714],{"class":109},"\\d",[36,168716,168717],{"class":48410},"ata",[36,168719,168714],{"class":109},[36,168721,168717],{"class":48410},[36,168723,1172],{"class":109},[36,168725,168726],{"class":48410},"txt",[36,168728,25570],{"class":59},[559,168730,168732],{"id":168731},"_83-open函数","8.3 open函数",[14,168734,5632],{},[26,168736,168738],{"className":30811,"code":168737,"language":30813,"meta":31,"style":31},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[33,168739,168740],{"__ignoreMap":31},[36,168741,168742,168744,168746,168748,168751,168753,168755,168757],{"class":38,"line":39},[36,168743,45787],{"class":5667},[36,168745,14003],{"class":163},[36,168747,147165],{"class":109},[36,168749,168750],{"class":98},"(文件路径, 打开模式, ",[36,168752,147180],{"class":5667},[36,168754,176],{"class":163},[36,168756,147185],{"class":59},[36,168758,627],{"class":98},[14,168760,168761],{},"常见模式：",[753,168763,168764,168773],{},[756,168765,168766],{},[759,168767,168768,168771],{},[762,168769,168770],{},"模式",[762,168772,26306],{},[800,168774,168775,168784,168793,168802,168812],{},[759,168776,168777,168781],{},[805,168778,168779],{},[33,168780,185],{},[805,168782,168783],{},"只读，文件不存在会报错",[759,168785,168786,168790],{},[805,168787,168788],{},[33,168789,1408],{},[805,168791,168792],{},"只写，文件不存在会创建，存在会清空",[759,168794,168795,168799],{},[805,168796,168797],{},[33,168798,20],{},[805,168800,168801],{},"追加，文件不存在会创建",[759,168803,168804,168809],{},[805,168805,168806],{},[33,168807,168808],{},"rb",[805,168810,168811],{},"二进制只读",[759,168813,168814,168819],{},[805,168815,168816],{},[33,168817,168818],{},"wb",[805,168820,168821],{},"二进制只写",[559,168823,168825],{"id":168824},"_84-读取文件","8.4 读取文件",[588,168827,168829],{"id":168828},"_841-read","8.4.1 read",[14,168831,168832],{},"一次读取全部内容：",[26,168834,168836],{"className":30811,"code":168835,"language":30813,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[33,168837,168838,168864,168876,168883],{"__ignoreMap":31},[36,168839,168840,168842,168844,168846,168848,168850,168852,168854,168856,168858,168860,168862],{"class":38,"line":39},[36,168841,45787],{"class":5667},[36,168843,14003],{"class":163},[36,168845,147165],{"class":109},[36,168847,621],{"class":98},[36,168849,147170],{"class":59},[36,168851,12874],{"class":98},[36,168853,147175],{"class":59},[36,168855,12874],{"class":98},[36,168857,147180],{"class":5667},[36,168859,176],{"class":163},[36,168861,147185],{"class":59},[36,168863,627],{"class":98},[36,168865,168866,168869,168871,168873],{"class":38,"line":46},[36,168867,168868],{"class":98},"content ",[36,168870,176],{"class":163},[36,168872,148527],{"class":5667},[36,168874,168875],{"class":98},".read()\n",[36,168877,168878,168880],{"class":38,"line":52},[36,168879,30848],{"class":109},[36,168881,168882],{"class":98},"(content)\n",[36,168884,168885,168887],{"class":38,"line":66},[36,168886,45787],{"class":5667},[36,168888,168889],{"class":98},".close()\n",[14,168891,168892],{},"可以指定读取字符数：",[26,168894,168896],{"className":30811,"code":168895,"language":30813,"meta":31,"style":31},"content = file.read(10)\n",[33,168897,168898],{"__ignoreMap":31},[36,168899,168900,168902,168904,168906,168909,168911],{"class":38,"line":39},[36,168901,168868],{"class":98},[36,168903,176],{"class":163},[36,168905,148527],{"class":5667},[36,168907,168908],{"class":98},".read(",[36,168910,1060],{"class":109},[36,168912,627],{"class":98},[588,168914,168916],{"id":168915},"_842-readline","8.4.2 readline",[14,168918,168919],{},"一次读取一行：",[26,168921,168923],{"className":30811,"code":168922,"language":30813,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[33,168924,168925,168951,168955,168966,168973,168977],{"__ignoreMap":31},[36,168926,168927,168929,168931,168933,168935,168937,168939,168941,168943,168945,168947,168949],{"class":38,"line":39},[36,168928,45787],{"class":5667},[36,168930,14003],{"class":163},[36,168932,147165],{"class":109},[36,168934,621],{"class":98},[36,168936,147170],{"class":59},[36,168938,12874],{"class":98},[36,168940,147175],{"class":59},[36,168942,12874],{"class":98},[36,168944,147180],{"class":5667},[36,168946,176],{"class":163},[36,168948,147185],{"class":59},[36,168950,627],{"class":98},[36,168952,168953],{"class":38,"line":46},[36,168954,247],{"emptyLinePlaceholder":246},[36,168956,168957,168959,168961,168963],{"class":38,"line":52},[36,168958,147626],{"class":98},[36,168960,176],{"class":163},[36,168962,148527],{"class":5667},[36,168964,168965],{"class":98},".readline()\n",[36,168967,168968,168970],{"class":38,"line":66},[36,168969,30848],{"class":109},[36,168971,168972],{"class":98},"(line)\n",[36,168974,168975],{"class":38,"line":72},[36,168976,247],{"emptyLinePlaceholder":246},[36,168978,168979,168981],{"class":38,"line":82},[36,168980,45787],{"class":5667},[36,168982,168889],{"class":98},[588,168984,168986],{"id":168985},"_843-readlines","8.4.3 readlines",[14,168988,168989],{},"读取所有行，返回列表：",[26,168991,168993],{"className":30811,"code":168992,"language":30813,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[33,168994,168995,169021,169033,169040],{"__ignoreMap":31},[36,168996,168997,168999,169001,169003,169005,169007,169009,169011,169013,169015,169017,169019],{"class":38,"line":39},[36,168998,45787],{"class":5667},[36,169000,14003],{"class":163},[36,169002,147165],{"class":109},[36,169004,621],{"class":98},[36,169006,147170],{"class":59},[36,169008,12874],{"class":98},[36,169010,147175],{"class":59},[36,169012,12874],{"class":98},[36,169014,147180],{"class":5667},[36,169016,176],{"class":163},[36,169018,147185],{"class":59},[36,169020,627],{"class":98},[36,169022,169023,169026,169028,169030],{"class":38,"line":46},[36,169024,169025],{"class":98},"lines ",[36,169027,176],{"class":163},[36,169029,148527],{"class":5667},[36,169031,169032],{"class":98},".readlines()\n",[36,169034,169035,169037],{"class":38,"line":52},[36,169036,30848],{"class":109},[36,169038,169039],{"class":98},"(lines)\n",[36,169041,169042,169044],{"class":38,"line":66},[36,169043,45787],{"class":5667},[36,169045,168889],{"class":98},[14,169047,169048,169049,169052],{},"每一行通常带有换行符，可以用 ",[33,169050,169051],{},"strip()"," 去掉：",[26,169054,169056],{"className":30811,"code":169055,"language":30813,"meta":31,"style":31},"for line in lines:\n    print(line.strip())\n",[33,169057,169058,169070],{"__ignoreMap":31},[36,169059,169060,169062,169065,169067],{"class":38,"line":39},[36,169061,3476],{"class":163},[36,169063,169064],{"class":98}," line ",[36,169066,26480],{"class":163},[36,169068,169069],{"class":98}," lines:\n",[36,169071,169072,169074],{"class":38,"line":46},[36,169073,31732],{"class":109},[36,169075,169076],{"class":98},"(line.strip())\n",[588,169078,169080],{"id":169079},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,169082,169083],{},"推荐读取大文件时使用：",[26,169085,169087],{"className":30811,"code":169086,"language":30813,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[33,169088,169089,169115,169119,169131,169137,169141],{"__ignoreMap":31},[36,169090,169091,169093,169095,169097,169099,169101,169103,169105,169107,169109,169111,169113],{"class":38,"line":39},[36,169092,45787],{"class":5667},[36,169094,14003],{"class":163},[36,169096,147165],{"class":109},[36,169098,621],{"class":98},[36,169100,147170],{"class":59},[36,169102,12874],{"class":98},[36,169104,147175],{"class":59},[36,169106,12874],{"class":98},[36,169108,147180],{"class":5667},[36,169110,176],{"class":163},[36,169112,147185],{"class":59},[36,169114,627],{"class":98},[36,169116,169117],{"class":38,"line":46},[36,169118,247],{"emptyLinePlaceholder":246},[36,169120,169121,169123,169125,169127,169129],{"class":38,"line":52},[36,169122,3476],{"class":163},[36,169124,169064],{"class":98},[36,169126,26480],{"class":163},[36,169128,148527],{"class":5667},[36,169130,4190],{"class":98},[36,169132,169133,169135],{"class":38,"line":66},[36,169134,31732],{"class":109},[36,169136,169076],{"class":98},[36,169138,169139],{"class":38,"line":72},[36,169140,247],{"emptyLinePlaceholder":246},[36,169142,169143,169145],{"class":38,"line":82},[36,169144,45787],{"class":5667},[36,169146,168889],{"class":98},[559,169148,169150],{"id":169149},"_85-with语句","8.5 with语句",[14,169152,169153,169155],{},[33,169154,108264],{}," 会自动关闭文件，推荐使用。",[26,169157,169159],{"className":30811,"code":169158,"language":30813,"meta":31,"style":31},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[33,169160,169161,169191,169201],{"__ignoreMap":31},[36,169162,169163,169165,169167,169169,169171,169173,169175,169177,169179,169181,169183,169185,169187,169189],{"class":38,"line":39},[36,169164,108264],{"class":163},[36,169166,147165],{"class":109},[36,169168,621],{"class":98},[36,169170,147170],{"class":59},[36,169172,12874],{"class":98},[36,169174,147175],{"class":59},[36,169176,12874],{"class":98},[36,169178,147180],{"class":5667},[36,169180,176],{"class":163},[36,169182,147185],{"class":59},[36,169184,14153],{"class":98},[36,169186,31816],{"class":163},[36,169188,148527],{"class":5667},[36,169190,4190],{"class":98},[36,169192,169193,169195,169197,169199],{"class":38,"line":46},[36,169194,147197],{"class":98},[36,169196,176],{"class":163},[36,169198,148527],{"class":5667},[36,169200,168875],{"class":98},[36,169202,169203,169205],{"class":38,"line":52},[36,169204,31732],{"class":109},[36,169206,168882],{"class":98},[14,169208,169209],{},"等价于打开文件、读取、最后关闭，但更安全。",[559,169211,169213],{"id":169212},"_86-写入文件","8.6 写入文件",[14,169215,169216,169218],{},[33,169217,1408],{}," 模式会清空原文件。",[26,169220,169222],{"className":30811,"code":169221,"language":30813,"meta":31,"style":31},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[33,169223,169224,169254,169271],{"__ignoreMap":31},[36,169225,169226,169228,169230,169232,169234,169236,169238,169240,169242,169244,169246,169248,169250,169252],{"class":38,"line":39},[36,169227,108264],{"class":163},[36,169229,147165],{"class":109},[36,169231,621],{"class":98},[36,169233,147170],{"class":59},[36,169235,12874],{"class":98},[36,169237,152350],{"class":59},[36,169239,12874],{"class":98},[36,169241,147180],{"class":5667},[36,169243,176],{"class":163},[36,169245,147185],{"class":59},[36,169247,14153],{"class":98},[36,169249,31816],{"class":163},[36,169251,148527],{"class":5667},[36,169253,4190],{"class":98},[36,169255,169256,169259,169262,169265,169267,169269],{"class":38,"line":46},[36,169257,169258],{"class":5667},"    file",[36,169260,169261],{"class":98},".write(",[36,169263,169264],{"class":59},"\"hello",[36,169266,156899],{"class":109},[36,169268,866],{"class":59},[36,169270,627],{"class":98},[36,169272,169273,169275,169277,169280,169282,169284],{"class":38,"line":52},[36,169274,169258],{"class":5667},[36,169276,169261],{"class":98},[36,169278,169279],{"class":59},"\"python",[36,169281,156899],{"class":109},[36,169283,866],{"class":59},[36,169285,627],{"class":98},[14,169287,169288],{},"写入多行：",[26,169290,169292],{"className":30811,"code":169291,"language":30813,"meta":31,"style":31},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[33,169293,169294,169329,169333,169364],{"__ignoreMap":31},[36,169295,169296,169298,169300,169302,169305,169307,169309,169311,169314,169316,169318,169320,169323,169325,169327],{"class":38,"line":39},[36,169297,169025],{"class":98},[36,169299,176],{"class":163},[36,169301,52658],{"class":98},[36,169303,169304],{"class":59},"\"小明,18",[36,169306,156899],{"class":109},[36,169308,866],{"class":59},[36,169310,12874],{"class":98},[36,169312,169313],{"class":59},"\"小红,17",[36,169315,156899],{"class":109},[36,169317,866],{"class":59},[36,169319,12874],{"class":98},[36,169321,169322],{"class":59},"\"小刚,19",[36,169324,156899],{"class":109},[36,169326,866],{"class":59},[36,169328,33679],{"class":98},[36,169330,169331],{"class":38,"line":46},[36,169332,247],{"emptyLinePlaceholder":246},[36,169334,169335,169337,169339,169341,169344,169346,169348,169350,169352,169354,169356,169358,169360,169362],{"class":38,"line":52},[36,169336,108264],{"class":163},[36,169338,147165],{"class":109},[36,169340,621],{"class":98},[36,169342,169343],{"class":59},"\"students.txt\"",[36,169345,12874],{"class":98},[36,169347,152350],{"class":59},[36,169349,12874],{"class":98},[36,169351,147180],{"class":5667},[36,169353,176],{"class":163},[36,169355,147185],{"class":59},[36,169357,14153],{"class":98},[36,169359,31816],{"class":163},[36,169361,148527],{"class":5667},[36,169363,4190],{"class":98},[36,169365,169366,169368],{"class":38,"line":66},[36,169367,169258],{"class":5667},[36,169369,169370],{"class":98},".writelines(lines)\n",[559,169372,169374],{"id":169373},"_87-追加文件","8.7 追加文件",[14,169376,169377,169379],{},[33,169378,20],{}," 模式不会清空原内容，而是在末尾追加。",[26,169381,169383],{"className":30811,"code":169382,"language":30813,"meta":31,"style":31},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[33,169384,169385,169416],{"__ignoreMap":31},[36,169386,169387,169389,169391,169393,169396,169398,169400,169402,169404,169406,169408,169410,169412,169414],{"class":38,"line":39},[36,169388,108264],{"class":163},[36,169390,147165],{"class":109},[36,169392,621],{"class":98},[36,169394,169395],{"class":59},"\"log.txt\"",[36,169397,12874],{"class":98},[36,169399,165699],{"class":59},[36,169401,12874],{"class":98},[36,169403,147180],{"class":5667},[36,169405,176],{"class":163},[36,169407,147185],{"class":59},[36,169409,14153],{"class":98},[36,169411,31816],{"class":163},[36,169413,148527],{"class":5667},[36,169415,4190],{"class":98},[36,169417,169418,169420,169422,169425,169427,169429],{"class":38,"line":46},[36,169419,169258],{"class":5667},[36,169421,169261],{"class":98},[36,169423,169424],{"class":59},"\"程序启动",[36,169426,156899],{"class":109},[36,169428,866],{"class":59},[36,169430,627],{"class":98},[14,169432,169433],{},"日志类文件常用追加模式。",[559,169435,169437],{"id":169436},"_88-文件编码","8.8 文件编码",[14,169439,169440],{},"编码决定文字如何保存为字节。",[14,169442,169443],{},"常见编码：",[571,169445,169446,169449],{},[574,169447,169448],{},"UTF-8：推荐。",[574,169450,169451],{},"GBK：部分 Windows 中文文件常见。",[14,169453,169454],{},"读取文件乱码时，可以尝试：",[26,169456,169458],{"className":30811,"code":169457,"language":30813,"meta":31,"style":31},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[33,169459,169460,169491],{"__ignoreMap":31},[36,169461,169462,169464,169466,169468,169470,169472,169474,169476,169478,169480,169483,169485,169487,169489],{"class":38,"line":39},[36,169463,108264],{"class":163},[36,169465,147165],{"class":109},[36,169467,621],{"class":98},[36,169469,147170],{"class":59},[36,169471,12874],{"class":98},[36,169473,147175],{"class":59},[36,169475,12874],{"class":98},[36,169477,147180],{"class":5667},[36,169479,176],{"class":163},[36,169481,169482],{"class":59},"\"gbk\"",[36,169484,14153],{"class":98},[36,169486,31816],{"class":163},[36,169488,148527],{"class":5667},[36,169490,4190],{"class":98},[36,169492,169493,169495,169497,169499],{"class":38,"line":46},[36,169494,147197],{"class":98},[36,169496,176],{"class":163},[36,169498,148527],{"class":5667},[36,169500,168875],{"class":98},[14,169502,169503],{},"写文件时建议统一 UTF-8：",[26,169505,169507],{"className":30811,"code":169506,"language":30813,"meta":31,"style":31},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[33,169508,169509,169539],{"__ignoreMap":31},[36,169510,169511,169513,169515,169517,169519,169521,169523,169525,169527,169529,169531,169533,169535,169537],{"class":38,"line":39},[36,169512,108264],{"class":163},[36,169514,147165],{"class":109},[36,169516,621],{"class":98},[36,169518,147170],{"class":59},[36,169520,12874],{"class":98},[36,169522,152350],{"class":59},[36,169524,12874],{"class":98},[36,169526,147180],{"class":5667},[36,169528,176],{"class":163},[36,169530,147185],{"class":59},[36,169532,14153],{"class":98},[36,169534,31816],{"class":163},[36,169536,148527],{"class":5667},[36,169538,4190],{"class":98},[36,169540,169541,169543,169545,169548],{"class":38,"line":46},[36,169542,169258],{"class":5667},[36,169544,169261],{"class":98},[36,169546,169547],{"class":59},"\"中文内容\"",[36,169549,627],{"class":98},[559,169551,169553],{"id":169552},"_89-pathlib","8.9 pathlib",[14,169555,169556,169559],{},[33,169557,169558],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[26,169561,169563],{"className":30811,"code":169562,"language":30813,"meta":31,"style":31},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[33,169564,169565,169575,169579,169597],{"__ignoreMap":31},[36,169566,169567,169569,169571,169573],{"class":38,"line":39},[36,169568,31170],{"class":163},[36,169570,108742],{"class":98},[36,169572,30825],{"class":163},[36,169574,108747],{"class":98},[36,169576,169577],{"class":38,"line":46},[36,169578,247],{"emptyLinePlaceholder":246},[36,169580,169581,169583,169585,169587,169590,169592,169594],{"class":38,"line":52},[36,169582,168685],{"class":98},[36,169584,176],{"class":163},[36,169586,108976],{"class":98},[36,169588,169589],{"class":59},"\"data\"",[36,169591,14153],{"class":98},[36,169593,1198],{"class":163},[36,169595,169596],{"class":59}," \"students.txt\"\n",[36,169598,169599,169601],{"class":38,"line":66},[36,169600,30848],{"class":109},[36,169602,169603],{"class":98},"(path)\n",[14,169605,169606],{},"创建目录：",[26,169608,169610],{"className":30811,"code":169609,"language":30813,"meta":31,"style":31},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[33,169611,169612,169622,169626,169639],{"__ignoreMap":31},[36,169613,169614,169616,169618,169620],{"class":38,"line":39},[36,169615,31170],{"class":163},[36,169617,108742],{"class":98},[36,169619,30825],{"class":163},[36,169621,108747],{"class":98},[36,169623,169624],{"class":38,"line":46},[36,169625,247],{"emptyLinePlaceholder":246},[36,169627,169628,169631,169633,169635,169637],{"class":38,"line":52},[36,169629,169630],{"class":98},"data_dir ",[36,169632,176],{"class":163},[36,169634,108976],{"class":98},[36,169636,169589],{"class":59},[36,169638,627],{"class":98},[36,169640,169641,169644,169647,169649,169651],{"class":38,"line":66},[36,169642,169643],{"class":98},"data_dir.mkdir(",[36,169645,169646],{"class":5667},"exist_ok",[36,169648,176],{"class":163},[36,169650,31909],{"class":109},[36,169652,627],{"class":98},[14,169654,169655],{},"判断文件是否存在：",[26,169657,169659],{"className":30811,"code":169658,"language":30813,"meta":31,"style":31},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[33,169660,169661,169674,169678,169685],{"__ignoreMap":31},[36,169662,169663,169665,169667,169669,169672],{"class":38,"line":39},[36,169664,168685],{"class":98},[36,169666,176],{"class":163},[36,169668,108976],{"class":98},[36,169670,169671],{"class":59},"\"data\u002Fstudents.txt\"",[36,169673,627],{"class":98},[36,169675,169676],{"class":38,"line":46},[36,169677,247],{"emptyLinePlaceholder":246},[36,169679,169680,169682],{"class":38,"line":52},[36,169681,2010],{"class":163},[36,169683,169684],{"class":98}," path.exists():\n",[36,169686,169687,169689,169691,169694],{"class":38,"line":66},[36,169688,31732],{"class":109},[36,169690,621],{"class":98},[36,169692,169693],{"class":59},"\"文件存在\"",[36,169695,627],{"class":98},[14,169697,169698],{},"读写文本：",[26,169700,169702],{"className":30811,"code":169701,"language":30813,"meta":31,"style":31},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[33,169703,169704,169716,169720,169737,169754],{"__ignoreMap":31},[36,169705,169706,169708,169710,169712,169714],{"class":38,"line":39},[36,169707,168685],{"class":98},[36,169709,176],{"class":163},[36,169711,108976],{"class":98},[36,169713,147170],{"class":59},[36,169715,627],{"class":98},[36,169717,169718],{"class":38,"line":46},[36,169719,247],{"emptyLinePlaceholder":246},[36,169721,169722,169725,169727,169729,169731,169733,169735],{"class":38,"line":52},[36,169723,169724],{"class":98},"path.write_text(",[36,169726,146250],{"class":59},[36,169728,12874],{"class":98},[36,169730,147180],{"class":5667},[36,169732,176],{"class":163},[36,169734,147185],{"class":59},[36,169736,627],{"class":98},[36,169738,169739,169741,169743,169746,169748,169750,169752],{"class":38,"line":66},[36,169740,168868],{"class":98},[36,169742,176],{"class":163},[36,169744,169745],{"class":98}," path.read_text(",[36,169747,147180],{"class":5667},[36,169749,176],{"class":163},[36,169751,147185],{"class":59},[36,169753,627],{"class":98},[36,169755,169756,169758],{"class":38,"line":72},[36,169757,30848],{"class":109},[36,169759,168882],{"class":98},[559,169761,169763],{"id":169762},"_810-json文件","8.10 JSON文件",[14,169765,169766],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[26,169768,169770],{"className":30811,"code":169769,"language":30813,"meta":31,"style":31},"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",[33,169771,169772,169778,169782,169790,169800,169810,169818,169822,169826,169851],{"__ignoreMap":31},[36,169773,169774,169776],{"class":38,"line":39},[36,169775,30825],{"class":163},[36,169777,147465],{"class":98},[36,169779,169780],{"class":38,"line":46},[36,169781,247],{"emptyLinePlaceholder":246},[36,169783,169784,169786,169788],{"class":38,"line":52},[36,169785,149855],{"class":98},[36,169787,176],{"class":163},[36,169789,16011],{"class":98},[36,169791,169792,169794,169796,169798],{"class":38,"line":66},[36,169793,147394],{"class":59},[36,169795,51869],{"class":98},[36,169797,150262],{"class":59},[36,169799,31899],{"class":98},[36,169801,169802,169804,169806,169808],{"class":38,"line":72},[36,169803,164911],{"class":59},[36,169805,51869],{"class":98},[36,169807,1264],{"class":109},[36,169809,31899],{"class":98},[36,169811,169812,169814,169816],{"class":38,"line":82},[36,169813,164922],{"class":59},[36,169815,51869],{"class":98},[36,169817,164927],{"class":109},[36,169819,169820],{"class":38,"line":88},[36,169821,2044],{"class":98},[36,169823,169824],{"class":38,"line":113},[36,169825,247],{"emptyLinePlaceholder":246},[36,169827,169828,169830,169832,169835,169837,169839,169841,169843,169845,169847,169849],{"class":38,"line":119},[36,169829,156818],{"class":98},[36,169831,176],{"class":163},[36,169833,169834],{"class":98}," json.dumps(student, ",[36,169836,147511],{"class":5667},[36,169838,176],{"class":163},[36,169840,34420],{"class":109},[36,169842,12874],{"class":98},[36,169844,152386],{"class":5667},[36,169846,176],{"class":163},[36,169848,694],{"class":109},[36,169850,627],{"class":98},[36,169852,169853,169855],{"class":38,"line":131},[36,169854,30848],{"class":109},[36,169856,164445],{"class":98},[14,169858,169859],{},"写入 JSON 文件：",[26,169861,169863],{"className":30811,"code":169862,"language":30813,"meta":31,"style":31},"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",[33,169864,169865,169871,169875,169883,169911,169939,169943,169947,169977],{"__ignoreMap":31},[36,169866,169867,169869],{"class":38,"line":39},[36,169868,30825],{"class":163},[36,169870,147465],{"class":98},[36,169872,169873],{"class":38,"line":46},[36,169874,247],{"emptyLinePlaceholder":246},[36,169876,169877,169879,169881],{"class":38,"line":52},[36,169878,160090],{"class":98},[36,169880,176],{"class":163},[36,169882,55879],{"class":98},[36,169884,169885,169887,169889,169891,169893,169895,169897,169899,169901,169903,169905,169907,169909],{"class":38,"line":66},[36,169886,148759],{"class":98},[36,169888,63111],{"class":59},[36,169890,51869],{"class":98},[36,169892,150262],{"class":59},[36,169894,12874],{"class":98},[36,169896,69556],{"class":59},[36,169898,51869],{"class":98},[36,169900,1264],{"class":109},[36,169902,12874],{"class":98},[36,169904,151846],{"class":59},[36,169906,51869],{"class":98},[36,169908,1600],{"class":109},[36,169910,5381],{"class":98},[36,169912,169913,169915,169917,169919,169921,169923,169925,169927,169929,169931,169933,169935,169937],{"class":38,"line":72},[36,169914,148759],{"class":98},[36,169916,63111],{"class":59},[36,169918,51869],{"class":98},[36,169920,151310],{"class":59},[36,169922,12874],{"class":98},[36,169924,69556],{"class":59},[36,169926,51869],{"class":98},[36,169928,1239],{"class":109},[36,169930,12874],{"class":98},[36,169932,151846],{"class":59},[36,169934,51869],{"class":98},[36,169936,1424],{"class":109},[36,169938,5381],{"class":98},[36,169940,169941],{"class":38,"line":82},[36,169942,33679],{"class":98},[36,169944,169945],{"class":38,"line":88},[36,169946,247],{"emptyLinePlaceholder":246},[36,169948,169949,169951,169953,169955,169957,169959,169961,169963,169965,169967,169969,169971,169973,169975],{"class":38,"line":113},[36,169950,108264],{"class":163},[36,169952,147165],{"class":109},[36,169954,621],{"class":98},[36,169956,152205],{"class":59},[36,169958,12874],{"class":98},[36,169960,152350],{"class":59},[36,169962,12874],{"class":98},[36,169964,147180],{"class":5667},[36,169966,176],{"class":163},[36,169968,147185],{"class":59},[36,169970,14153],{"class":98},[36,169972,31816],{"class":163},[36,169974,148527],{"class":5667},[36,169976,4190],{"class":98},[36,169978,169979,169982,169984,169986,169988,169990,169992,169994,169996,169998,170000],{"class":38,"line":119},[36,169980,169981],{"class":98},"    json.dump(students, ",[36,169983,45787],{"class":5667},[36,169985,12874],{"class":98},[36,169987,147511],{"class":5667},[36,169989,176],{"class":163},[36,169991,34420],{"class":109},[36,169993,12874],{"class":98},[36,169995,152386],{"class":5667},[36,169997,176],{"class":163},[36,169999,694],{"class":109},[36,170001,627],{"class":98},[14,170003,170004],{},"读取 JSON 文件：",[26,170006,170008],{"className":30811,"code":170007,"language":30813,"meta":31,"style":31},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[33,170009,170010,170016,170020,170050,170062,170066],{"__ignoreMap":31},[36,170011,170012,170014],{"class":38,"line":39},[36,170013,30825],{"class":163},[36,170015,147465],{"class":98},[36,170017,170018],{"class":38,"line":46},[36,170019,247],{"emptyLinePlaceholder":246},[36,170021,170022,170024,170026,170028,170030,170032,170034,170036,170038,170040,170042,170044,170046,170048],{"class":38,"line":52},[36,170023,108264],{"class":163},[36,170025,147165],{"class":109},[36,170027,621],{"class":98},[36,170029,152205],{"class":59},[36,170031,12874],{"class":98},[36,170033,147175],{"class":59},[36,170035,12874],{"class":98},[36,170037,147180],{"class":5667},[36,170039,176],{"class":163},[36,170041,147185],{"class":59},[36,170043,14153],{"class":98},[36,170045,31816],{"class":163},[36,170047,148527],{"class":5667},[36,170049,4190],{"class":98},[36,170051,170052,170054,170056,170058,170060],{"class":38,"line":66},[36,170053,153411],{"class":98},[36,170055,176],{"class":163},[36,170057,148538],{"class":98},[36,170059,45787],{"class":5667},[36,170061,627],{"class":98},[36,170063,170064],{"class":38,"line":72},[36,170065,247],{"emptyLinePlaceholder":246},[36,170067,170068,170070],{"class":38,"line":82},[36,170069,30848],{"class":109},[36,170071,165369],{"class":98},[559,170073,170075],{"id":170074},"_811-csv文件","8.11 CSV文件",[14,170077,170078],{},"CSV 是逗号分隔值，常用于表格数据。",[14,170080,170081],{},"写入 CSV：",[26,170083,170085],{"className":30811,"code":170084,"language":30813,"meta":31,"style":31},"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",[33,170086,170087,170094,170098,170106,170124,170140,170156,170160,170164,170204,170218],{"__ignoreMap":31},[36,170088,170089,170091],{"class":38,"line":39},[36,170090,30825],{"class":163},[36,170092,170093],{"class":98}," csv\n",[36,170095,170096],{"class":38,"line":46},[36,170097,247],{"emptyLinePlaceholder":246},[36,170099,170100,170102,170104],{"class":38,"line":52},[36,170101,160090],{"class":98},[36,170103,176],{"class":163},[36,170105,55879],{"class":98},[36,170107,170108,170111,170113,170115,170117,170119,170122],{"class":38,"line":66},[36,170109,170110],{"class":98},"    [",[36,170112,73531],{"class":59},[36,170114,12874],{"class":98},[36,170116,73564],{"class":59},[36,170118,12874],{"class":98},[36,170120,170121],{"class":59},"\"成绩\"",[36,170123,88268],{"class":98},[36,170125,170126,170128,170130,170132,170134,170136,170138],{"class":38,"line":72},[36,170127,170110],{"class":98},[36,170129,150262],{"class":59},[36,170131,12874],{"class":98},[36,170133,1264],{"class":109},[36,170135,12874],{"class":98},[36,170137,1600],{"class":109},[36,170139,88268],{"class":98},[36,170141,170142,170144,170146,170148,170150,170152,170154],{"class":38,"line":82},[36,170143,170110],{"class":98},[36,170145,151310],{"class":59},[36,170147,12874],{"class":98},[36,170149,1239],{"class":109},[36,170151,12874],{"class":98},[36,170153,1424],{"class":109},[36,170155,88268],{"class":98},[36,170157,170158],{"class":38,"line":88},[36,170159,33679],{"class":98},[36,170161,170162],{"class":38,"line":113},[36,170163,247],{"emptyLinePlaceholder":246},[36,170165,170166,170168,170170,170172,170175,170177,170179,170181,170183,170185,170187,170189,170192,170194,170196,170198,170200,170202],{"class":38,"line":119},[36,170167,108264],{"class":163},[36,170169,147165],{"class":109},[36,170171,621],{"class":98},[36,170173,170174],{"class":59},"\"students.csv\"",[36,170176,12874],{"class":98},[36,170178,152350],{"class":59},[36,170180,12874],{"class":98},[36,170182,147180],{"class":5667},[36,170184,176],{"class":163},[36,170186,147185],{"class":59},[36,170188,12874],{"class":98},[36,170190,170191],{"class":5667},"newline",[36,170193,176],{"class":163},[36,170195,8103],{"class":59},[36,170197,14153],{"class":98},[36,170199,31816],{"class":163},[36,170201,148527],{"class":5667},[36,170203,4190],{"class":98},[36,170205,170206,170209,170211,170214,170216],{"class":38,"line":131},[36,170207,170208],{"class":98},"    writer ",[36,170210,176],{"class":163},[36,170212,170213],{"class":98}," csv.writer(",[36,170215,45787],{"class":5667},[36,170217,627],{"class":98},[36,170219,170220],{"class":38,"line":137},[36,170221,170222],{"class":98},"    writer.writerows(students)\n",[14,170224,170225],{},"读取 CSV：",[26,170227,170229],{"className":30811,"code":170228,"language":30813,"meta":31,"style":31},"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",[33,170230,170231,170237,170241,170271,170285,170297],{"__ignoreMap":31},[36,170232,170233,170235],{"class":38,"line":39},[36,170234,30825],{"class":163},[36,170236,170093],{"class":98},[36,170238,170239],{"class":38,"line":46},[36,170240,247],{"emptyLinePlaceholder":246},[36,170242,170243,170245,170247,170249,170251,170253,170255,170257,170259,170261,170263,170265,170267,170269],{"class":38,"line":52},[36,170244,108264],{"class":163},[36,170246,147165],{"class":109},[36,170248,621],{"class":98},[36,170250,170174],{"class":59},[36,170252,12874],{"class":98},[36,170254,147175],{"class":59},[36,170256,12874],{"class":98},[36,170258,147180],{"class":5667},[36,170260,176],{"class":163},[36,170262,147185],{"class":59},[36,170264,14153],{"class":98},[36,170266,31816],{"class":163},[36,170268,148527],{"class":5667},[36,170270,4190],{"class":98},[36,170272,170273,170276,170278,170281,170283],{"class":38,"line":66},[36,170274,170275],{"class":98},"    reader ",[36,170277,176],{"class":163},[36,170279,170280],{"class":98}," csv.reader(",[36,170282,45787],{"class":5667},[36,170284,627],{"class":98},[36,170286,170287,170289,170292,170294],{"class":38,"line":72},[36,170288,3652],{"class":163},[36,170290,170291],{"class":98}," row ",[36,170293,26480],{"class":163},[36,170295,170296],{"class":98}," reader:\n",[36,170298,170299,170301],{"class":38,"line":82},[36,170300,32884],{"class":109},[36,170302,170303],{"class":98},"(row)\n",[14,170305,170306],{},"使用字典写入：",[26,170308,170310],{"className":30811,"code":170309,"language":30813,"meta":31,"style":31},"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",[33,170311,170312,170318,170322,170330,170358,170386,170390,170394,170432,170453,170474,170479],{"__ignoreMap":31},[36,170313,170314,170316],{"class":38,"line":39},[36,170315,30825],{"class":163},[36,170317,170093],{"class":98},[36,170319,170320],{"class":38,"line":46},[36,170321,247],{"emptyLinePlaceholder":246},[36,170323,170324,170326,170328],{"class":38,"line":52},[36,170325,160090],{"class":98},[36,170327,176],{"class":163},[36,170329,55879],{"class":98},[36,170331,170332,170334,170336,170338,170340,170342,170344,170346,170348,170350,170352,170354,170356],{"class":38,"line":66},[36,170333,148759],{"class":98},[36,170335,63111],{"class":59},[36,170337,51869],{"class":98},[36,170339,150262],{"class":59},[36,170341,12874],{"class":98},[36,170343,69556],{"class":59},[36,170345,51869],{"class":98},[36,170347,1264],{"class":109},[36,170349,12874],{"class":98},[36,170351,151846],{"class":59},[36,170353,51869],{"class":98},[36,170355,1600],{"class":109},[36,170357,5381],{"class":98},[36,170359,170360,170362,170364,170366,170368,170370,170372,170374,170376,170378,170380,170382,170384],{"class":38,"line":72},[36,170361,148759],{"class":98},[36,170363,63111],{"class":59},[36,170365,51869],{"class":98},[36,170367,151310],{"class":59},[36,170369,12874],{"class":98},[36,170371,69556],{"class":59},[36,170373,51869],{"class":98},[36,170375,1239],{"class":109},[36,170377,12874],{"class":98},[36,170379,151846],{"class":59},[36,170381,51869],{"class":98},[36,170383,1424],{"class":109},[36,170385,5381],{"class":98},[36,170387,170388],{"class":38,"line":82},[36,170389,33679],{"class":98},[36,170391,170392],{"class":38,"line":88},[36,170393,247],{"emptyLinePlaceholder":246},[36,170395,170396,170398,170400,170402,170404,170406,170408,170410,170412,170414,170416,170418,170420,170422,170424,170426,170428,170430],{"class":38,"line":113},[36,170397,108264],{"class":163},[36,170399,147165],{"class":109},[36,170401,621],{"class":98},[36,170403,170174],{"class":59},[36,170405,12874],{"class":98},[36,170407,152350],{"class":59},[36,170409,12874],{"class":98},[36,170411,147180],{"class":5667},[36,170413,176],{"class":163},[36,170415,147185],{"class":59},[36,170417,12874],{"class":98},[36,170419,170191],{"class":5667},[36,170421,176],{"class":163},[36,170423,8103],{"class":59},[36,170425,14153],{"class":98},[36,170427,31816],{"class":163},[36,170429,148527],{"class":5667},[36,170431,4190],{"class":98},[36,170433,170434,170437,170439,170441,170443,170445,170447,170449,170451],{"class":38,"line":119},[36,170435,170436],{"class":98},"    fieldnames ",[36,170438,176],{"class":163},[36,170440,52658],{"class":98},[36,170442,63111],{"class":59},[36,170444,12874],{"class":98},[36,170446,69556],{"class":59},[36,170448,12874],{"class":98},[36,170450,151846],{"class":59},[36,170452,33679],{"class":98},[36,170454,170455,170457,170459,170462,170464,170466,170469,170471],{"class":38,"line":131},[36,170456,170208],{"class":98},[36,170458,176],{"class":163},[36,170460,170461],{"class":98}," csv.DictWriter(",[36,170463,45787],{"class":5667},[36,170465,12874],{"class":98},[36,170467,170468],{"class":5667},"fieldnames",[36,170470,176],{"class":163},[36,170472,170473],{"class":98},"fieldnames)\n",[36,170475,170476],{"class":38,"line":137},[36,170477,170478],{"class":98},"    writer.writeheader()\n",[36,170480,170481],{"class":38,"line":147},[36,170482,170222],{"class":98},[559,170484,170486],{"id":170485},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,170488,123666],{},[571,170490,170491,170494,170497],{},[574,170492,170493],{},"读取文本文件。",[574,170495,170496],{},"统计每个单词出现次数。",[574,170498,170499],{},"输出出现次数最多的前 10 个单词。",[14,170501,10474],{},[26,170503,170505],{"className":30811,"code":170504,"language":30813,"meta":31,"style":31},"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",[33,170506,170507,170517,170521,170534,170550,170554,170564,170573,170577,170589,170609,170618,170622,170640,170644,170674,170678,170694],{"__ignoreMap":31},[36,170508,170509,170511,170513,170515],{"class":38,"line":39},[36,170510,31170],{"class":163},[36,170512,108742],{"class":98},[36,170514,30825],{"class":163},[36,170516,108747],{"class":98},[36,170518,170519],{"class":38,"line":46},[36,170520,247],{"emptyLinePlaceholder":246},[36,170522,170523,170525,170527,170529,170532],{"class":38,"line":52},[36,170524,168685],{"class":98},[36,170526,176],{"class":163},[36,170528,108976],{"class":98},[36,170530,170531],{"class":59},"\"article.txt\"",[36,170533,627],{"class":98},[36,170535,170536,170538,170540,170542,170544,170546,170548],{"class":38,"line":66},[36,170537,168868],{"class":98},[36,170539,176],{"class":163},[36,170541,169745],{"class":98},[36,170543,147180],{"class":5667},[36,170545,176],{"class":163},[36,170547,147185],{"class":59},[36,170549,627],{"class":98},[36,170551,170552],{"class":38,"line":72},[36,170553,247],{"emptyLinePlaceholder":246},[36,170555,170556,170559,170561],{"class":38,"line":82},[36,170557,170558],{"class":98},"words ",[36,170560,176],{"class":163},[36,170562,170563],{"class":98}," content.lower().split()\n",[36,170565,170566,170569,170571],{"class":38,"line":88},[36,170567,170568],{"class":98},"counter ",[36,170570,176],{"class":163},[36,170572,88300],{"class":98},[36,170574,170575],{"class":38,"line":113},[36,170576,247],{"emptyLinePlaceholder":246},[36,170578,170579,170581,170584,170586],{"class":38,"line":119},[36,170580,3476],{"class":163},[36,170582,170583],{"class":98}," word ",[36,170585,26480],{"class":163},[36,170587,170588],{"class":98}," words:\n",[36,170590,170591,170594,170596,170599,170602,170604,170607],{"class":38,"line":131},[36,170592,170593],{"class":98},"    word ",[36,170595,176],{"class":163},[36,170597,170598],{"class":98}," word.strip(",[36,170600,170601],{"class":59},"\".,!?;:",[36,170603,156869],{"class":109},[36,170605,170606],{"class":59},"'()[]\"",[36,170608,627],{"class":98},[36,170610,170611,170613,170615],{"class":38,"line":137},[36,170612,3552],{"class":163},[36,170614,39363],{"class":163},[36,170616,170617],{"class":98}," word:\n",[36,170619,170620],{"class":38,"line":147},[36,170621,148886],{"class":163},[36,170623,170624,170627,170629,170632,170634,170636,170638],{"class":38,"line":153},[36,170625,170626],{"class":98},"    counter[word] ",[36,170628,176],{"class":163},[36,170630,170631],{"class":98}," counter.get(word, ",[36,170633,807],{"class":109},[36,170635,14153],{"class":98},[36,170637,1095],{"class":163},[36,170639,56131],{"class":109},[36,170641,170642],{"class":38,"line":191},[36,170643,247],{"emptyLinePlaceholder":246},[36,170645,170646,170649,170651,170653,170656,170658,170660,170662,170664,170666,170668,170670,170672],{"class":38,"line":197},[36,170647,170648],{"class":98},"items ",[36,170650,176],{"class":163},[36,170652,163978],{"class":109},[36,170654,170655],{"class":98},"(counter.items(), ",[36,170657,154320],{"class":5667},[36,170659,154323],{"class":163},[36,170661,154326],{"class":98},[36,170663,833],{"class":109},[36,170665,112633],{"class":98},[36,170667,163902],{"class":5667},[36,170669,176],{"class":163},[36,170671,31909],{"class":109},[36,170673,627],{"class":98},[36,170675,170676],{"class":38,"line":217},[36,170677,247],{"emptyLinePlaceholder":246},[36,170679,170680,170682,170685,170687,170690,170692],{"class":38,"line":223},[36,170681,3476],{"class":163},[36,170683,170684],{"class":98}," word, count ",[36,170686,26480],{"class":163},[36,170688,170689],{"class":98}," items[:",[36,170691,1060],{"class":109},[36,170693,166129],{"class":98},[36,170695,170696,170698],{"class":38,"line":243},[36,170697,31732],{"class":109},[36,170699,170700],{"class":98},"(word, count)\n",[559,170702,170704],{"id":170703},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[26,170706,170708],{"className":30811,"code":170707,"language":30813,"meta":31,"style":31},"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",[33,170709,170710,170716,170726,170730,170742,170746,170750,170758,170768,170774,170778,170808,170818,170822,170826,170834,170864,170888,170892,170896,170904,170933,170938],{"__ignoreMap":31},[36,170711,170712,170714],{"class":38,"line":39},[36,170713,30825],{"class":163},[36,170715,147465],{"class":98},[36,170717,170718,170720,170722,170724],{"class":38,"line":46},[36,170719,31170],{"class":163},[36,170721,108742],{"class":98},[36,170723,30825],{"class":163},[36,170725,108747],{"class":98},[36,170727,170728],{"class":38,"line":52},[36,170729,247],{"emptyLinePlaceholder":246},[36,170731,170732,170734,170736,170738,170740],{"class":38,"line":66},[36,170733,152198],{"class":109},[36,170735,14003],{"class":163},[36,170737,108976],{"class":98},[36,170739,152205],{"class":59},[36,170741,627],{"class":98},[36,170743,170744],{"class":38,"line":72},[36,170745,247],{"emptyLinePlaceholder":246},[36,170747,170748],{"class":38,"line":82},[36,170749,247],{"emptyLinePlaceholder":246},[36,170751,170752,170754,170756],{"class":38,"line":88},[36,170753,32380],{"class":163},[36,170755,152222],{"class":55},[36,170757,32386],{"class":98},[36,170759,170760,170762,170764,170766],{"class":38,"line":113},[36,170761,3552],{"class":163},[36,170763,39363],{"class":163},[36,170765,152233],{"class":109},[36,170767,152236],{"class":98},[36,170769,170770,170772],{"class":38,"line":119},[36,170771,15191],{"class":163},[36,170773,52270],{"class":98},[36,170775,170776],{"class":38,"line":131},[36,170777,247],{"emptyLinePlaceholder":246},[36,170779,170780,170782,170784,170786,170788,170790,170792,170794,170796,170798,170800,170802,170804,170806],{"class":38,"line":137},[36,170781,34611],{"class":163},[36,170783,147165],{"class":109},[36,170785,621],{"class":98},[36,170787,152198],{"class":109},[36,170789,12874],{"class":98},[36,170791,147175],{"class":59},[36,170793,12874],{"class":98},[36,170795,147180],{"class":5667},[36,170797,176],{"class":163},[36,170799,147185],{"class":59},[36,170801,14153],{"class":98},[36,170803,31816],{"class":163},[36,170805,148527],{"class":5667},[36,170807,4190],{"class":98},[36,170809,170810,170812,170814,170816],{"class":38,"line":147},[36,170811,15191],{"class":163},[36,170813,148538],{"class":98},[36,170815,45787],{"class":5667},[36,170817,627],{"class":98},[36,170819,170820],{"class":38,"line":153},[36,170821,247],{"emptyLinePlaceholder":246},[36,170823,170824],{"class":38,"line":191},[36,170825,247],{"emptyLinePlaceholder":246},[36,170827,170828,170830,170832],{"class":38,"line":197},[36,170829,32380],{"class":163},[36,170831,152332],{"class":55},[36,170833,152335],{"class":98},[36,170835,170836,170838,170840,170842,170844,170846,170848,170850,170852,170854,170856,170858,170860,170862],{"class":38,"line":217},[36,170837,34611],{"class":163},[36,170839,147165],{"class":109},[36,170841,621],{"class":98},[36,170843,152198],{"class":109},[36,170845,12874],{"class":98},[36,170847,152350],{"class":59},[36,170849,12874],{"class":98},[36,170851,147180],{"class":5667},[36,170853,176],{"class":163},[36,170855,147185],{"class":59},[36,170857,14153],{"class":98},[36,170859,31816],{"class":163},[36,170861,148527],{"class":5667},[36,170863,4190],{"class":98},[36,170865,170866,170868,170870,170872,170874,170876,170878,170880,170882,170884,170886],{"class":38,"line":223},[36,170867,152371],{"class":98},[36,170869,45787],{"class":5667},[36,170871,12874],{"class":98},[36,170873,147511],{"class":5667},[36,170875,176],{"class":163},[36,170877,34420],{"class":109},[36,170879,12874],{"class":98},[36,170881,152386],{"class":5667},[36,170883,176],{"class":163},[36,170885,694],{"class":109},[36,170887,627],{"class":98},[36,170889,170890],{"class":38,"line":243},[36,170891,247],{"emptyLinePlaceholder":246},[36,170893,170894],{"class":38,"line":250},[36,170895,247],{"emptyLinePlaceholder":246},[36,170897,170898,170900,170902],{"class":38,"line":256},[36,170899,160090],{"class":98},[36,170901,176],{"class":163},[36,170903,153416],{"class":98},[36,170905,170906,170909,170911,170913,170915,170917,170919,170921,170923,170925,170927,170929,170931],{"class":38,"line":273},[36,170907,170908],{"class":98},"students.append({",[36,170910,63111],{"class":59},[36,170912,51869],{"class":98},[36,170914,150262],{"class":59},[36,170916,12874],{"class":98},[36,170918,69556],{"class":59},[36,170920,51869],{"class":98},[36,170922,1264],{"class":109},[36,170924,12874],{"class":98},[36,170926,151846],{"class":59},[36,170928,51869],{"class":98},[36,170930,1600],{"class":109},[36,170932,165526],{"class":98},[36,170934,170935],{"class":38,"line":278},[36,170936,170937],{"class":98},"save_students(students)\n",[36,170939,170940,170942,170944,170947],{"class":38,"line":284},[36,170941,30848],{"class":109},[36,170943,621],{"class":98},[36,170945,170946],{"class":59},"\"保存成功\"",[36,170948,627],{"class":98},[559,170950,170952],{"id":170951},"_814-易错点","8.14 易错点",[571,170954,170955,170959,170965,170970,170977,170984],{},[574,170956,170957,169218],{},[33,170958,1408],{},[574,170960,170961,170962,28819],{},"读写中文要指定 ",[33,170963,170964],{},"encoding=\"utf-8\"",[574,170966,170967,170968,28819],{},"打开文件后要关闭，推荐使用 ",[33,170969,108264],{},[574,170971,170972,170973,170976],{},"读取大文件不要直接 ",[33,170974,170975],{},"read()"," 全部内容。",[574,170978,170979,170980,170983],{},"Windows 写 CSV 时建议加 ",[33,170981,170982],{},"newline=\"\"","，避免空行。",[574,170985,170986],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[559,170988,170990],{"id":170989},"_815-本章练习","8.15 本章练习",[571,170992,170993,171000,171005,171008,171011],{},[574,170994,170995,170996,170999],{},"写入一个 ",[33,170997,170998],{},"students.txt","，每行保存一个学生姓名。",[574,171001,104786,171002,171004],{},[33,171003,170998],{}," 并输出所有学生。",[574,171006,171007],{},"把学生列表保存为 JSON 文件。",[574,171009,171010],{},"从 JSON 文件读取学生数据，计算平均分。",[574,171012,171013,171014,171017,171018,171021],{},"写一个日志函数 ",[33,171015,171016],{},"write_log(message)","，每次调用向 ",[33,171019,171020],{},"app.log"," 追加一行。",[537,171023,171024],{},"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":31,"searchDepth":46,"depth":46,"links":171026},[171027,171028,171032,171033,171039,171040,171041,171042,171043,171044,171045,171046,171047,171048,171049],{"id":168538,"depth":46,"text":168539},{"id":168579,"depth":46,"text":168580,"children":171029},[171030,171031],{"id":168583,"depth":52,"text":168584},{"id":168617,"depth":52,"text":168618},{"id":168731,"depth":46,"text":168732},{"id":168824,"depth":46,"text":168825,"children":171034},[171035,171036,171037,171038],{"id":168828,"depth":52,"text":168829},{"id":168915,"depth":52,"text":168916},{"id":168985,"depth":52,"text":168986},{"id":169079,"depth":52,"text":169080},{"id":169149,"depth":46,"text":169150},{"id":169212,"depth":46,"text":169213},{"id":169373,"depth":46,"text":169374},{"id":169436,"depth":46,"text":169437},{"id":169552,"depth":46,"text":169553},{"id":169762,"depth":46,"text":169763},{"id":170074,"depth":46,"text":170075},{"id":170485,"depth":46,"text":170486},{"id":170703,"depth":46,"text":170704},{"id":170951,"depth":46,"text":170952},{"id":170989,"depth":46,"text":170990},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168530,"description":542},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":171056,"title":171057,"body":171058,"description":542,"extension":543,"meta":173244,"navigation":246,"path":173245,"seo":173246,"stem":173247,"__hash__":173248},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":171059,"toc":173211},[171060,171063,171067,171070,171073,171165,171167,171186,171191,171195,171198,171201,171230,171237,171240,171244,171247,171276,171278,171330,171336,171389,171393,171491,171494,171561,171565,171622,171624,171630,171634,171639,171645,171736,171741,171745,171748,171826,171829,171867,171871,171989,171992,171996,171999,172044,172047,172051,172056,172062,172112,172115,172146,172150,172154,172184,172188,172223,172227,172262,172302,172306,172322,172325,172329,172333,172412,172416,172457,172461,172516,172520,172554,172558,172588,172597,172604,172610,172667,172670,172678,172681,172685,172692,172695,172701,172704,172721,172726,172730,172736,172749,172752,172789,172792,172803,172806,172820,172823,172837,172841,172848,172881,172884,172886,172892,172895,172899,172901,172907,172912,173085,173089,173152,173156,173180,173184,173208],[10,171061,171057],{"id":171062},"_9-异常模块与包",[559,171064,171066],{"id":171065},"_91-什么是异常","9.1 什么是异常",[14,171068,171069],{},"异常是程序运行过程中出现的错误。",[14,171071,171072],{},"常见异常：",[753,171074,171075,171084],{},[756,171076,171077],{},[759,171078,171079,171082],{},[762,171080,171081],{},"异常",[762,171083,26306],{},[800,171085,171086,171096,171106,171115,171125,171135,171145,171155],{},[759,171087,171088,171093],{},[805,171089,171090],{},[33,171091,171092],{},"NameError",[805,171094,171095],{},"使用了未定义变量",[759,171097,171098,171103],{},[805,171099,171100],{},[33,171101,171102],{},"TypeError",[805,171104,171105],{},"类型不匹配",[759,171107,171108,171112],{},[805,171109,171110],{},[33,171111,155208],{},[805,171113,171114],{},"值不合法",[759,171116,171117,171122],{},[805,171118,171119],{},[33,171120,171121],{},"IndexError",[805,171123,171124],{},"列表索引越界",[759,171126,171127,171132],{},[805,171128,171129],{},[33,171130,171131],{},"KeyError",[805,171133,171134],{},"字典 key 不存在",[759,171136,171137,171142],{},[805,171138,171139],{},[33,171140,171141],{},"FileNotFoundError",[805,171143,171144],{},"文件不存在",[759,171146,171147,171152],{},[805,171148,171149],{},[33,171150,171151],{},"ZeroDivisionError",[805,171153,171154],{},"除数为 0",[759,171156,171157,171162],{},[805,171158,171159],{},[33,171160,171161],{},"ImportError",[805,171163,171164],{},"导入失败",[14,171166,15574],{},[26,171168,171170],{"className":30811,"code":171169,"language":30813,"meta":31,"style":31},"num = int(\"abc\")\n",[33,171171,171172],{"__ignoreMap":31},[36,171173,171174,171176,171178,171180,171182,171184],{"class":38,"line":39},[36,171175,156161],{"class":98},[36,171177,176],{"class":163},[36,171179,2841],{"class":109},[36,171181,621],{"class":98},[36,171183,156254],{"class":59},[36,171185,627],{"class":98},[14,171187,171188,171189,28819],{},"会触发 ",[33,171190,155208],{},[559,171192,171194],{"id":171193},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,171196,171197],{},"如果不处理异常，程序会直接终止。",[14,171199,171200],{},"例如用户输入年龄：",[26,171202,171204],{"className":30811,"code":171203,"language":30813,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[33,171205,171206,171224],{"__ignoreMap":31},[36,171207,171208,171210,171212,171214,171216,171218,171220,171222],{"class":38,"line":39},[36,171209,146920],{"class":98},[36,171211,176],{"class":163},[36,171213,2841],{"class":109},[36,171215,621],{"class":98},[36,171217,54253],{"class":109},[36,171219,621],{"class":98},[36,171221,152768],{"class":59},[36,171223,30930],{"class":98},[36,171225,171226,171228],{"class":38,"line":46},[36,171227,30848],{"class":109},[36,171229,156135],{"class":98},[14,171231,171232,171233,171236],{},"用户输入 ",[33,171234,171235],{},"abc","，程序就会报错退出。",[14,171238,171239],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[559,171241,171243],{"id":171242},"_93-try-except","9.3 try except",[14,171245,171246],{},"基础语法：",[26,171248,171250],{"className":30811,"code":171249,"language":30813,"meta":31,"style":31},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[33,171251,171252,171259,171264,171271],{"__ignoreMap":31},[36,171253,171254,171257],{"class":38,"line":39},[36,171255,171256],{"class":163},"try",[36,171258,4190],{"class":98},[36,171260,171261],{"class":38,"line":46},[36,171262,171263],{"class":98},"    可能出错的代码\n",[36,171265,171266,171269],{"class":38,"line":52},[36,171267,171268],{"class":163},"except",[36,171270,4190],{"class":98},[36,171272,171273],{"class":38,"line":66},[36,171274,171275],{"class":98},"    出错后的处理代码\n",[14,171277,15574],{},[26,171279,171281],{"className":30811,"code":171280,"language":30813,"meta":31,"style":31},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[33,171282,171283,171289,171307,171313,171319],{"__ignoreMap":31},[36,171284,171285,171287],{"class":38,"line":39},[36,171286,171256],{"class":163},[36,171288,4190],{"class":98},[36,171290,171291,171293,171295,171297,171299,171301,171303,171305],{"class":38,"line":46},[36,171292,152760],{"class":98},[36,171294,176],{"class":163},[36,171296,2841],{"class":109},[36,171298,621],{"class":98},[36,171300,54253],{"class":109},[36,171302,621],{"class":98},[36,171304,152768],{"class":59},[36,171306,30930],{"class":98},[36,171308,171309,171311],{"class":38,"line":52},[36,171310,31732],{"class":109},[36,171312,156135],{"class":98},[36,171314,171315,171317],{"class":38,"line":66},[36,171316,171268],{"class":163},[36,171318,4190],{"class":98},[36,171320,171321,171323,171325,171328],{"class":38,"line":72},[36,171322,31732],{"class":109},[36,171324,621],{"class":98},[36,171326,171327],{"class":59},"\"年龄必须是数字\"",[36,171329,627],{"class":98},[14,171331,171332,171333,171335],{},"不建议裸写 ",[33,171334,171268],{},"，最好指定异常类型。",[26,171337,171339],{"className":30811,"code":171338,"language":30813,"meta":31,"style":31},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[33,171340,171341,171347,171365,171371,171379],{"__ignoreMap":31},[36,171342,171343,171345],{"class":38,"line":39},[36,171344,171256],{"class":163},[36,171346,4190],{"class":98},[36,171348,171349,171351,171353,171355,171357,171359,171361,171363],{"class":38,"line":46},[36,171350,152760],{"class":98},[36,171352,176],{"class":163},[36,171354,2841],{"class":109},[36,171356,621],{"class":98},[36,171358,54253],{"class":109},[36,171360,621],{"class":98},[36,171362,152768],{"class":59},[36,171364,30930],{"class":98},[36,171366,171367,171369],{"class":38,"line":52},[36,171368,31732],{"class":109},[36,171370,156135],{"class":98},[36,171372,171373,171375,171377],{"class":38,"line":66},[36,171374,171268],{"class":163},[36,171376,152600],{"class":109},[36,171378,4190],{"class":98},[36,171380,171381,171383,171385,171387],{"class":38,"line":72},[36,171382,31732],{"class":109},[36,171384,621],{"class":98},[36,171386,171327],{"class":59},[36,171388,627],{"class":98},[559,171390,171392],{"id":171391},"_94-捕获多个异常","9.4 捕获多个异常",[26,171394,171396],{"className":30811,"code":171395,"language":30813,"meta":31,"style":31},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[33,171397,171398,171404,171425,171445,171452,171460,171471,171480],{"__ignoreMap":31},[36,171399,171400,171402],{"class":38,"line":39},[36,171401,171256],{"class":163},[36,171403,4190],{"class":98},[36,171405,171406,171409,171411,171413,171415,171417,171419,171421,171423],{"class":38,"line":46},[36,171407,171408],{"class":98},"    nums ",[36,171410,176],{"class":163},[36,171412,52658],{"class":98},[36,171414,833],{"class":109},[36,171416,12874],{"class":98},[36,171418,694],{"class":109},[36,171420,12874],{"class":98},[36,171422,689],{"class":109},[36,171424,33679],{"class":98},[36,171426,171427,171430,171432,171434,171436,171438,171440,171443],{"class":38,"line":52},[36,171428,171429],{"class":98},"    index ",[36,171431,176],{"class":163},[36,171433,2841],{"class":109},[36,171435,621],{"class":98},[36,171437,54253],{"class":109},[36,171439,621],{"class":98},[36,171441,171442],{"class":59},"\"请输入索引:\"",[36,171444,30930],{"class":98},[36,171446,171447,171449],{"class":38,"line":66},[36,171448,31732],{"class":109},[36,171450,171451],{"class":98},"(nums[index])\n",[36,171453,171454,171456,171458],{"class":38,"line":72},[36,171455,171268],{"class":163},[36,171457,152600],{"class":109},[36,171459,4190],{"class":98},[36,171461,171462,171464,171466,171469],{"class":38,"line":82},[36,171463,31732],{"class":109},[36,171465,621],{"class":98},[36,171467,171468],{"class":59},"\"索引必须是整数\"",[36,171470,627],{"class":98},[36,171472,171473,171475,171478],{"class":38,"line":88},[36,171474,171268],{"class":163},[36,171476,171477],{"class":109}," IndexError",[36,171479,4190],{"class":98},[36,171481,171482,171484,171486,171489],{"class":38,"line":113},[36,171483,31732],{"class":109},[36,171485,621],{"class":98},[36,171487,171488],{"class":59},"\"索引越界\"",[36,171490,627],{"class":98},[14,171492,171493],{},"多个异常使用相同处理逻辑：",[26,171495,171497],{"className":30811,"code":171496,"language":30813,"meta":31,"style":31},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[33,171498,171499,171505,171523,171536,171550],{"__ignoreMap":31},[36,171500,171501,171503],{"class":38,"line":39},[36,171502,171256],{"class":163},[36,171504,4190],{"class":98},[36,171506,171507,171509,171511,171513,171515,171517,171519,171521],{"class":38,"line":46},[36,171508,46026],{"class":98},[36,171510,176],{"class":163},[36,171512,2841],{"class":109},[36,171514,621],{"class":98},[36,171516,54253],{"class":109},[36,171518,621],{"class":98},[36,171520,156170],{"class":59},[36,171522,30930],{"class":98},[36,171524,171525,171527,171529,171531,171533],{"class":38,"line":52},[36,171526,31732],{"class":109},[36,171528,621],{"class":98},[36,171530,1060],{"class":109},[36,171532,156420],{"class":163},[36,171534,171535],{"class":98}," num)\n",[36,171537,171538,171540,171542,171544,171546,171548],{"class":38,"line":66},[36,171539,171268],{"class":163},[36,171541,2130],{"class":98},[36,171543,155208],{"class":109},[36,171545,12874],{"class":98},[36,171547,171151],{"class":109},[36,171549,31219],{"class":98},[36,171551,171552,171554,171556,171559],{"class":38,"line":72},[36,171553,31732],{"class":109},[36,171555,621],{"class":98},[36,171557,171558],{"class":59},"\"输入不合法\"",[36,171560,627],{"class":98},[559,171562,171564],{"id":171563},"_95-获取异常信息","9.5 获取异常信息",[26,171566,171568],{"className":30811,"code":171567,"language":30813,"meta":31,"style":31},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[33,171569,171570,171576,171590,171601],{"__ignoreMap":31},[36,171571,171572,171574],{"class":38,"line":39},[36,171573,171256],{"class":163},[36,171575,4190],{"class":98},[36,171577,171578,171580,171582,171584,171586,171588],{"class":38,"line":46},[36,171579,46026],{"class":98},[36,171581,176],{"class":163},[36,171583,2841],{"class":109},[36,171585,621],{"class":98},[36,171587,156254],{"class":59},[36,171589,627],{"class":98},[36,171591,171592,171594,171596,171598],{"class":38,"line":52},[36,171593,171268],{"class":163},[36,171595,152600],{"class":109},[36,171597,65036],{"class":163},[36,171599,171600],{"class":98}," e:\n",[36,171602,171603,171605,171607,171609,171612,171614,171616,171618,171620],{"class":38,"line":66},[36,171604,31732],{"class":109},[36,171606,621],{"class":98},[36,171608,671],{"class":163},[36,171610,171611],{"class":59},"\"出错了:",[36,171613,1509],{"class":109},[36,171615,170],{"class":98},[36,171617,1558],{"class":109},[36,171619,866],{"class":59},[36,171621,627],{"class":98},[14,171623,146831],{},[26,171625,171628],{"className":171626,"code":171627,"language":5638,"meta":31},[5636],"出错了:invalid literal for int() with base 10: 'abc'\n",[33,171629,171627],{"__ignoreMap":31},[559,171631,171633],{"id":171632},"_96-else和finally","9.6 else和finally",[14,171635,171636,171638],{},[33,171637,2169],{},"：没有异常时执行。",[14,171640,171641,171644],{},[33,171642,171643],{},"finally","：无论是否异常都会执行。",[26,171646,171648],{"className":30811,"code":171647,"language":30813,"meta":31,"style":31},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[33,171649,171650,171656,171674,171682,171692,171698,171719,171725],{"__ignoreMap":31},[36,171651,171652,171654],{"class":38,"line":39},[36,171653,171256],{"class":163},[36,171655,4190],{"class":98},[36,171657,171658,171660,171662,171664,171666,171668,171670,171672],{"class":38,"line":46},[36,171659,46026],{"class":98},[36,171661,176],{"class":163},[36,171663,2841],{"class":109},[36,171665,621],{"class":98},[36,171667,54253],{"class":109},[36,171669,621],{"class":98},[36,171671,156170],{"class":59},[36,171673,30930],{"class":98},[36,171675,171676,171678,171680],{"class":38,"line":52},[36,171677,171268],{"class":163},[36,171679,152600],{"class":109},[36,171681,4190],{"class":98},[36,171683,171684,171686,171688,171690],{"class":38,"line":66},[36,171685,31732],{"class":109},[36,171687,621],{"class":98},[36,171689,153588],{"class":59},[36,171691,627],{"class":98},[36,171693,171694,171696],{"class":38,"line":72},[36,171695,2169],{"class":163},[36,171697,4190],{"class":98},[36,171699,171700,171702,171704,171706,171709,171711,171713,171715,171717],{"class":38,"line":82},[36,171701,31732],{"class":109},[36,171703,621],{"class":98},[36,171705,671],{"class":163},[36,171707,171708],{"class":59},"\"输入正确:",[36,171710,1509],{"class":109},[36,171712,2137],{"class":98},[36,171714,1558],{"class":109},[36,171716,866],{"class":59},[36,171718,627],{"class":98},[36,171720,171721,171723],{"class":38,"line":88},[36,171722,171643],{"class":163},[36,171724,4190],{"class":98},[36,171726,171727,171729,171731,171734],{"class":38,"line":113},[36,171728,31732],{"class":109},[36,171730,621],{"class":98},[36,171732,171733],{"class":59},"\"程序结束\"",[36,171735,627],{"class":98},[14,171737,171738,171740],{},[33,171739,171643],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[559,171742,171744],{"id":171743},"_97-抛出异常","9.7 抛出异常",[14,171746,171747],{},"程序可以主动抛出异常。",[26,171749,171751],{"className":30811,"code":171750,"language":30813,"meta":31,"style":31},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[33,171752,171753,171762,171774,171787,171807,171811,171815],{"__ignoreMap":31},[36,171754,171755,171757,171760],{"class":38,"line":39},[36,171756,32380],{"class":163},[36,171758,171759],{"class":55}," set_age",[36,171761,161789],{"class":98},[36,171763,171764,171766,171768,171770,171772],{"class":38,"line":46},[36,171765,3552],{"class":163},[36,171767,16146],{"class":98},[36,171769,179],{"class":163},[36,171771,4544],{"class":109},[36,171773,4190],{"class":98},[36,171775,171776,171778,171780,171782,171785],{"class":38,"line":52},[36,171777,103863],{"class":163},[36,171779,152600],{"class":109},[36,171781,621],{"class":98},[36,171783,171784],{"class":59},"\"年龄不能为负数\"",[36,171786,627],{"class":98},[36,171788,171789,171791,171793,171795,171797,171799,171801,171803,171805],{"class":38,"line":66},[36,171790,31732],{"class":109},[36,171792,621],{"class":98},[36,171794,671],{"class":163},[36,171796,162357],{"class":59},[36,171798,1509],{"class":109},[36,171800,70653],{"class":98},[36,171802,1558],{"class":109},[36,171804,866],{"class":59},[36,171806,627],{"class":98},[36,171808,171809],{"class":38,"line":72},[36,171810,247],{"emptyLinePlaceholder":246},[36,171812,171813],{"class":38,"line":82},[36,171814,247],{"emptyLinePlaceholder":246},[36,171816,171817,171820,171822,171824],{"class":38,"line":88},[36,171818,171819],{"class":98},"set_age(",[36,171821,1146],{"class":163},[36,171823,833],{"class":109},[36,171825,627],{"class":98},[14,171827,171828],{},"调用者可以捕获：",[26,171830,171832],{"className":30811,"code":171831,"language":30813,"meta":31,"style":31},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[33,171833,171834,171840,171851,171861],{"__ignoreMap":31},[36,171835,171836,171838],{"class":38,"line":39},[36,171837,171256],{"class":163},[36,171839,4190],{"class":98},[36,171841,171842,171845,171847,171849],{"class":38,"line":46},[36,171843,171844],{"class":98},"    set_age(",[36,171846,1146],{"class":163},[36,171848,833],{"class":109},[36,171850,627],{"class":98},[36,171852,171853,171855,171857,171859],{"class":38,"line":52},[36,171854,171268],{"class":163},[36,171856,152600],{"class":109},[36,171858,65036],{"class":163},[36,171860,171600],{"class":98},[36,171862,171863,171865],{"class":38,"line":66},[36,171864,31732],{"class":109},[36,171866,67431],{"class":98},[559,171868,171870],{"id":171869},"_98-自定义异常","9.8 自定义异常",[26,171872,171874],{"className":30811,"code":171873,"language":30813,"meta":31,"style":31},"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",[33,171875,171876,171890,171894,171898,171902,171910,171920,171931,171941,171945,171949,171955,171972,171983],{"__ignoreMap":31},[36,171877,171878,171880,171883,171885,171888],{"class":38,"line":39},[36,171879,15133],{"class":163},[36,171881,171882],{"class":55}," BalanceNotEnoughError",[36,171884,621],{"class":98},[36,171886,171887],{"class":109},"Exception",[36,171889,31219],{"class":98},[36,171891,171892],{"class":38,"line":46},[36,171893,149911],{"class":163},[36,171895,171896],{"class":38,"line":52},[36,171897,247],{"emptyLinePlaceholder":246},[36,171899,171900],{"class":38,"line":66},[36,171901,247],{"emptyLinePlaceholder":246},[36,171903,171904,171906,171908],{"class":38,"line":72},[36,171905,32380],{"class":163},[36,171907,150560],{"class":55},[36,171909,163186],{"class":98},[36,171911,171912,171914,171916,171918],{"class":38,"line":82},[36,171913,3552],{"class":163},[36,171915,150516],{"class":98},[36,171917,173],{"class":163},[36,171919,162963],{"class":98},[36,171921,171922,171924,171927,171929],{"class":38,"line":88},[36,171923,103863],{"class":163},[36,171925,171926],{"class":98}," BalanceNotEnoughError(",[36,171928,150611],{"class":59},[36,171930,627],{"class":98},[36,171932,171933,171935,171937,171939],{"class":38,"line":113},[36,171934,4541],{"class":163},[36,171936,163193],{"class":98},[36,171938,1146],{"class":163},[36,171940,150549],{"class":98},[36,171942,171943],{"class":38,"line":119},[36,171944,247],{"emptyLinePlaceholder":246},[36,171946,171947],{"class":38,"line":131},[36,171948,247],{"emptyLinePlaceholder":246},[36,171950,171951,171953],{"class":38,"line":137},[36,171952,171256],{"class":163},[36,171954,4190],{"class":98},[36,171956,171957,171959,171961,171964,171966,171968,171970],{"class":38,"line":147},[36,171958,162864],{"class":98},[36,171960,176],{"class":163},[36,171962,171963],{"class":98}," withdraw(",[36,171965,926],{"class":109},[36,171967,12874],{"class":98},[36,171969,2190],{"class":109},[36,171971,627],{"class":98},[36,171973,171974,171976,171979,171981],{"class":38,"line":153},[36,171975,171268],{"class":163},[36,171977,171978],{"class":98}," BalanceNotEnoughError ",[36,171980,31816],{"class":163},[36,171982,171600],{"class":98},[36,171984,171985,171987],{"class":38,"line":191},[36,171986,31732],{"class":109},[36,171988,67431],{"class":98},[14,171990,171991],{},"入门阶段大多数情况使用内置异常即可。",[559,171993,171995],{"id":171994},"_99-traceback","9.9 traceback",[14,171997,171998],{},"调试时可以输出完整异常堆栈。",[26,172000,172002],{"className":30811,"code":172001,"language":30813,"meta":31,"style":31},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[33,172003,172004,172011,172015,172021,172031,172039],{"__ignoreMap":31},[36,172005,172006,172008],{"class":38,"line":39},[36,172007,30825],{"class":163},[36,172009,172010],{"class":98}," traceback\n",[36,172012,172013],{"class":38,"line":46},[36,172014,247],{"emptyLinePlaceholder":246},[36,172016,172017,172019],{"class":38,"line":52},[36,172018,171256],{"class":163},[36,172020,4190],{"class":98},[36,172022,172023,172025,172027,172029],{"class":38,"line":66},[36,172024,2444],{"class":109},[36,172026,621],{"class":98},[36,172028,156254],{"class":59},[36,172030,627],{"class":98},[36,172032,172033,172035,172037],{"class":38,"line":72},[36,172034,171268],{"class":163},[36,172036,152600],{"class":109},[36,172038,4190],{"class":98},[36,172040,172041],{"class":38,"line":82},[36,172042,172043],{"class":98},"    traceback.print_exc()\n",[14,172045,172046],{},"日志系统中常把异常堆栈记录到文件。",[559,172048,172050],{"id":172049},"_910-什么是模块","9.10 什么是模块",[14,172052,172053,172054,126357],{},"模块就是一个 ",[33,172055,146726],{},[14,172057,172058,172059,25055],{},"例如创建 ",[33,172060,172061],{},"my_math.py",[26,172063,172065],{"className":30811,"code":172064,"language":30813,"meta":31,"style":31},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[33,172066,172067,172075,172085,172089,172093,172102],{"__ignoreMap":31},[36,172068,172069,172071,172073],{"class":38,"line":39},[36,172070,32380],{"class":163},[36,172072,5660],{"class":55},[36,172074,151467],{"class":98},[36,172076,172077,172079,172081,172083],{"class":38,"line":46},[36,172078,4541],{"class":163},[36,172080,11308],{"class":98},[36,172082,1095],{"class":163},[36,172084,151478],{"class":98},[36,172086,172087],{"class":38,"line":52},[36,172088,247],{"emptyLinePlaceholder":246},[36,172090,172091],{"class":38,"line":66},[36,172092,247],{"emptyLinePlaceholder":246},[36,172094,172095,172097,172100],{"class":38,"line":72},[36,172096,32380],{"class":163},[36,172098,172099],{"class":55}," sub",[36,172101,151467],{"class":98},[36,172103,172104,172106,172108,172110],{"class":38,"line":82},[36,172105,4541],{"class":163},[36,172107,11308],{"class":98},[36,172109,1146],{"class":163},[36,172111,151478],{"class":98},[14,172113,172114],{},"在另一个文件中导入：",[26,172116,172118],{"className":30811,"code":172117,"language":30813,"meta":31,"style":31},"import my_math\n\nprint(my_math.add(1, 2))\n",[33,172119,172120,172127,172131],{"__ignoreMap":31},[36,172121,172122,172124],{"class":38,"line":39},[36,172123,30825],{"class":163},[36,172125,172126],{"class":98}," my_math\n",[36,172128,172129],{"class":38,"line":46},[36,172130,247],{"emptyLinePlaceholder":246},[36,172132,172133,172135,172138,172140,172142,172144],{"class":38,"line":52},[36,172134,30848],{"class":109},[36,172136,172137],{"class":98},"(my_math.add(",[36,172139,833],{"class":109},[36,172141,12874],{"class":98},[36,172143,694],{"class":109},[36,172145,30930],{"class":98},[559,172147,172149],{"id":172148},"_911-import导入","9.11 import导入",[588,172151,172153],{"id":172152},"_9111-导入模块","9.11.1 导入模块",[26,172155,172157],{"className":30811,"code":172156,"language":30813,"meta":31,"style":31},"import random\n\nprint(random.randint(1, 10))\n",[33,172158,172159,172165,172169],{"__ignoreMap":31},[36,172160,172161,172163],{"class":38,"line":39},[36,172162,30825],{"class":163},[36,172164,45761],{"class":98},[36,172166,172167],{"class":38,"line":46},[36,172168,247],{"emptyLinePlaceholder":246},[36,172170,172171,172173,172176,172178,172180,172182],{"class":38,"line":52},[36,172172,30848],{"class":109},[36,172174,172175],{"class":98},"(random.randint(",[36,172177,833],{"class":109},[36,172179,12874],{"class":98},[36,172181,1060],{"class":109},[36,172183,30930],{"class":98},[588,172185,172187],{"id":172186},"_9112-导入指定内容","9.11.2 导入指定内容",[26,172189,172191],{"className":30811,"code":172190,"language":30813,"meta":31,"style":31},"from random import randint\n\nprint(randint(1, 10))\n",[33,172192,172193,172204,172208],{"__ignoreMap":31},[36,172194,172195,172197,172199,172201],{"class":38,"line":39},[36,172196,31170],{"class":163},[36,172198,58228],{"class":98},[36,172200,30825],{"class":163},[36,172202,172203],{"class":98}," randint\n",[36,172205,172206],{"class":38,"line":46},[36,172207,247],{"emptyLinePlaceholder":246},[36,172209,172210,172212,172215,172217,172219,172221],{"class":38,"line":52},[36,172211,30848],{"class":109},[36,172213,172214],{"class":98},"(randint(",[36,172216,833],{"class":109},[36,172218,12874],{"class":98},[36,172220,1060],{"class":109},[36,172222,30930],{"class":98},[588,172224,172226],{"id":172225},"_9113-起别名","9.11.3 起别名",[26,172228,172230],{"className":30811,"code":172229,"language":30813,"meta":31,"style":31},"import random as rd\n\nprint(rd.randint(1, 10))\n",[33,172231,172232,172243,172247],{"__ignoreMap":31},[36,172233,172234,172236,172238,172240],{"class":38,"line":39},[36,172235,30825],{"class":163},[36,172237,58228],{"class":98},[36,172239,31816],{"class":163},[36,172241,172242],{"class":98}," rd\n",[36,172244,172245],{"class":38,"line":46},[36,172246,247],{"emptyLinePlaceholder":246},[36,172248,172249,172251,172254,172256,172258,172260],{"class":38,"line":52},[36,172250,30848],{"class":109},[36,172252,172253],{"class":98},"(rd.randint(",[36,172255,833],{"class":109},[36,172257,12874],{"class":98},[36,172259,1060],{"class":109},[36,172261,30930],{"class":98},[26,172263,172265],{"className":30811,"code":172264,"language":30813,"meta":31,"style":31},"from random import randint as rint\n\nprint(rint(1, 10))\n",[33,172266,172267,172283,172287],{"__ignoreMap":31},[36,172268,172269,172271,172273,172275,172278,172280],{"class":38,"line":39},[36,172270,31170],{"class":163},[36,172272,58228],{"class":98},[36,172274,30825],{"class":163},[36,172276,172277],{"class":98}," randint ",[36,172279,31816],{"class":163},[36,172281,172282],{"class":98}," rint\n",[36,172284,172285],{"class":38,"line":46},[36,172286,247],{"emptyLinePlaceholder":246},[36,172288,172289,172291,172294,172296,172298,172300],{"class":38,"line":52},[36,172290,30848],{"class":109},[36,172292,172293],{"class":98},"(rint(",[36,172295,833],{"class":109},[36,172297,12874],{"class":98},[36,172299,1060],{"class":109},[36,172301,30930],{"class":98},[588,172303,172305],{"id":172304},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[26,172307,172309],{"className":30811,"code":172308,"language":30813,"meta":31,"style":31},"from random import *\n",[33,172310,172311],{"__ignoreMap":31},[36,172312,172313,172315,172317,172319],{"class":38,"line":39},[36,172314,31170],{"class":163},[36,172316,58228],{"class":98},[36,172318,30825],{"class":163},[36,172320,172321],{"class":163}," *\n",[14,172323,172324],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[559,172326,172328],{"id":172327},"_912-常用内置模块","9.12 常用内置模块",[588,172330,172332],{"id":172331},"_9121-random","9.12.1 random",[26,172334,172336],{"className":30811,"code":172335,"language":30813,"meta":31,"style":31},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[33,172337,172338,172344,172348,172362,172381],{"__ignoreMap":31},[36,172339,172340,172342],{"class":38,"line":39},[36,172341,30825],{"class":163},[36,172343,45761],{"class":98},[36,172345,172346],{"class":38,"line":46},[36,172347,247],{"emptyLinePlaceholder":246},[36,172349,172350,172352,172354,172356,172358,172360],{"class":38,"line":52},[36,172351,30848],{"class":109},[36,172353,172175],{"class":98},[36,172355,833],{"class":109},[36,172357,12874],{"class":98},[36,172359,1060],{"class":109},[36,172361,30930],{"class":98},[36,172363,172364,172366,172369,172371,172373,172375,172377,172379],{"class":38,"line":66},[36,172365,30848],{"class":109},[36,172367,172368],{"class":98},"(random.choice([",[36,172370,150262],{"class":59},[36,172372,12874],{"class":98},[36,172374,151310],{"class":59},[36,172376,12874],{"class":98},[36,172378,160105],{"class":59},[36,172380,33576],{"class":98},[36,172382,172383,172385,172388,172390,172392,172394,172396,172398,172400,172402,172404,172406,172408,172410],{"class":38,"line":72},[36,172384,30848],{"class":109},[36,172386,172387],{"class":98},"(random.sample([",[36,172389,833],{"class":109},[36,172391,12874],{"class":98},[36,172393,694],{"class":109},[36,172395,12874],{"class":98},[36,172397,689],{"class":109},[36,172399,12874],{"class":98},[36,172401,908],{"class":109},[36,172403,12874],{"class":98},[36,172405,933],{"class":109},[36,172407,112633],{"class":98},[36,172409,694],{"class":109},[36,172411,30930],{"class":98},[588,172413,172415],{"id":172414},"_9122-time","9.12.2 time",[26,172417,172419],{"className":30811,"code":172418,"language":30813,"meta":31,"style":31},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[33,172420,172421,172427,172431,172438,172446],{"__ignoreMap":31},[36,172422,172423,172425],{"class":38,"line":39},[36,172424,30825],{"class":163},[36,172426,32262],{"class":98},[36,172428,172429],{"class":38,"line":46},[36,172430,247],{"emptyLinePlaceholder":246},[36,172432,172433,172435],{"class":38,"line":52},[36,172434,30848],{"class":109},[36,172436,172437],{"class":98},"(time.time())\n",[36,172439,172440,172442,172444],{"class":38,"line":66},[36,172441,95503],{"class":98},[36,172443,833],{"class":109},[36,172445,627],{"class":98},[36,172447,172448,172450,172452,172455],{"class":38,"line":72},[36,172449,30848],{"class":109},[36,172451,621],{"class":98},[36,172453,172454],{"class":59},"\"1秒后执行\"",[36,172456,627],{"class":98},[588,172458,172460],{"id":172459},"_9123-datetime","9.12.3 datetime",[26,172462,172464],{"className":30811,"code":172463,"language":30813,"meta":31,"style":31},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[33,172465,172466,172478,172482,172492,172499],{"__ignoreMap":31},[36,172467,172468,172470,172473,172475],{"class":38,"line":39},[36,172469,31170],{"class":163},[36,172471,172472],{"class":98}," datetime ",[36,172474,30825],{"class":163},[36,172476,172477],{"class":98}," datetime\n",[36,172479,172480],{"class":38,"line":46},[36,172481,247],{"emptyLinePlaceholder":246},[36,172483,172484,172487,172489],{"class":38,"line":52},[36,172485,172486],{"class":98},"now ",[36,172488,176],{"class":163},[36,172490,172491],{"class":98}," datetime.now()\n",[36,172493,172494,172496],{"class":38,"line":66},[36,172495,30848],{"class":109},[36,172497,172498],{"class":98},"(now)\n",[36,172500,172501,172503,172506,172509,172511,172514],{"class":38,"line":72},[36,172502,30848],{"class":109},[36,172504,172505],{"class":98},"(now.strftime(",[36,172507,172508],{"class":59},"\"%Y-%m-",[36,172510,157065],{"class":109},[36,172512,172513],{"class":59}," %H:%M:%S\"",[36,172515,30930],{"class":98},[588,172517,172519],{"id":172518},"_9124-os","9.12.4 os",[26,172521,172523],{"className":30811,"code":172522,"language":30813,"meta":31,"style":31},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[33,172524,172525,172531,172535,172542],{"__ignoreMap":31},[36,172526,172527,172529],{"class":38,"line":39},[36,172528,30825],{"class":163},[36,172530,45738],{"class":98},[36,172532,172533],{"class":38,"line":46},[36,172534,247],{"emptyLinePlaceholder":246},[36,172536,172537,172539],{"class":38,"line":52},[36,172538,30848],{"class":109},[36,172540,172541],{"class":98},"(os.getcwd())\n",[36,172543,172544,172546,172549,172552],{"class":38,"line":66},[36,172545,30848],{"class":109},[36,172547,172548],{"class":98},"(os.listdir(",[36,172550,172551],{"class":59},"\".\"",[36,172553,30930],{"class":98},[588,172555,172557],{"id":172556},"_9125-sys","9.12.5 sys",[26,172559,172561],{"className":30811,"code":172560,"language":30813,"meta":31,"style":31},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[33,172562,172563,172570,172574,172581],{"__ignoreMap":31},[36,172564,172565,172567],{"class":38,"line":39},[36,172566,30825],{"class":163},[36,172568,172569],{"class":98}," sys\n",[36,172571,172572],{"class":38,"line":46},[36,172573,247],{"emptyLinePlaceholder":246},[36,172575,172576,172578],{"class":38,"line":52},[36,172577,30848],{"class":109},[36,172579,172580],{"class":98},"(sys.version)\n",[36,172582,172583,172585],{"class":38,"line":66},[36,172584,30848],{"class":109},[36,172586,172587],{"class":98},"(sys.path)\n",[559,172589,172591,172592,172594,172595,866],{"id":172590},"_913-if-name-main","9.13 if ",[765,172593,80242],{}," == \"",[765,172596,102489],{},[14,172598,172599,172600,172603],{},"模块被直接运行和被导入时，",[33,172601,172602],{},"__name__"," 的值不同。",[14,172605,172606,172607,25055],{},"创建 ",[33,172608,172609],{},"my_module.py",[26,172611,172613],{"className":30811,"code":172612,"language":30813,"meta":31,"style":31},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[33,172614,172615,172623,172633,172637,172641,172653],{"__ignoreMap":31},[36,172616,172617,172619,172621],{"class":38,"line":39},[36,172618,32380],{"class":163},[36,172620,5660],{"class":55},[36,172622,151467],{"class":98},[36,172624,172625,172627,172629,172631],{"class":38,"line":46},[36,172626,4541],{"class":163},[36,172628,11308],{"class":98},[36,172630,1095],{"class":163},[36,172632,151478],{"class":98},[36,172634,172635],{"class":38,"line":52},[36,172636,247],{"emptyLinePlaceholder":246},[36,172638,172639],{"class":38,"line":66},[36,172640,247],{"emptyLinePlaceholder":246},[36,172642,172643,172645,172647,172649,172651],{"class":38,"line":72},[36,172644,2010],{"class":163},[36,172646,31653],{"class":109},[36,172648,101990],{"class":163},[36,172650,101993],{"class":59},[36,172652,4190],{"class":98},[36,172654,172655,172657,172659,172661,172663,172665],{"class":38,"line":82},[36,172656,31732],{"class":109},[36,172658,166974],{"class":98},[36,172660,833],{"class":109},[36,172662,12874],{"class":98},[36,172664,694],{"class":109},[36,172666,30930],{"class":98},[14,172668,172669],{},"作用：",[571,172671,172672,172675],{},[574,172673,172674],{},"直接运行该文件时，执行测试代码。",[574,172676,172677],{},"被其他文件导入时，不执行测试代码。",[14,172679,172680],{},"这是写模块时很常用的习惯。",[559,172682,172684],{"id":172683},"_914-包","9.14 包",[14,172686,172687,172688,172691],{},"包是包含 ",[33,172689,172690],{},"__init__.py"," 的目录，用于组织多个模块。",[14,172693,172694],{},"目录结构：",[26,172696,172699],{"className":172697,"code":172698,"language":5638,"meta":31},[5636],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[33,172700,172698],{"__ignoreMap":31},[14,172702,172703],{},"导入：",[26,172705,172707],{"className":30811,"code":172706,"language":30813,"meta":31,"style":31},"from utils.file_utils import read_file\n",[33,172708,172709],{"__ignoreMap":31},[36,172710,172711,172713,172716,172718],{"class":38,"line":39},[36,172712,31170],{"class":163},[36,172714,172715],{"class":98}," utils.file_utils ",[36,172717,30825],{"class":163},[36,172719,172720],{"class":98}," read_file\n",[14,172722,172723,172725],{},[33,172724,172690],{}," 可以为空，也可以写包初始化逻辑。",[559,172727,172729],{"id":172728},"_915-第三方包","9.15 第三方包",[14,172731,172732,172733,172735],{},"第三方包通过 ",[33,172734,24270],{}," 安装。",[26,172737,172739],{"className":24261,"code":172738,"language":24263,"meta":31,"style":31},"pip install requests\n",[33,172740,172741],{"__ignoreMap":31},[36,172742,172743,172745,172747],{"class":38,"line":39},[36,172744,24270],{"class":55},[36,172746,160],{"class":59},[36,172748,146472],{"class":59},[14,172750,172751],{},"使用：",[26,172753,172755],{"className":30811,"code":172754,"language":30813,"meta":31,"style":31},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[33,172756,172757,172763,172767,172782],{"__ignoreMap":31},[36,172758,172759,172761],{"class":38,"line":39},[36,172760,30825],{"class":163},[36,172762,146472],{"class":98},[36,172764,172765],{"class":38,"line":46},[36,172766,247],{"emptyLinePlaceholder":246},[36,172768,172769,172772,172774,172777,172780],{"class":38,"line":52},[36,172770,172771],{"class":98},"response ",[36,172773,176],{"class":163},[36,172775,172776],{"class":98}," requests.get(",[36,172778,172779],{"class":59},"\"https:\u002F\u002Fwww.example.com\"",[36,172781,627],{"class":98},[36,172783,172784,172786],{"class":38,"line":66},[36,172785,30848],{"class":109},[36,172787,172788],{"class":98},"(response.status_code)\n",[14,172790,172791],{},"查看已安装包：",[26,172793,172795],{"className":24261,"code":172794,"language":24263,"meta":31,"style":31},"pip list\n",[33,172796,172797],{"__ignoreMap":31},[36,172798,172799,172801],{"class":38,"line":39},[36,172800,24270],{"class":55},[36,172802,119329],{"class":59},[14,172804,172805],{},"导出项目依赖：",[26,172807,172808],{"className":24261,"code":146667,"language":24263,"meta":31,"style":31},[33,172809,172810],{"__ignoreMap":31},[36,172811,172812,172814,172816,172818],{"class":38,"line":39},[36,172813,24270],{"class":55},[36,172815,146676],{"class":59},[36,172817,26657],{"class":163},[36,172819,146681],{"class":59},[14,172821,172822],{},"安装项目依赖：",[26,172824,172825],{"className":24261,"code":146687,"language":24263,"meta":31,"style":31},[33,172826,172827],{"__ignoreMap":31},[36,172828,172829,172831,172833,172835],{"class":38,"line":39},[36,172830,24270],{"class":55},[36,172832,160],{"class":59},[36,172834,120013],{"class":109},[36,172836,146681],{"class":59},[559,172838,172840],{"id":172839},"_916-模块搜索路径","9.16 模块搜索路径",[14,172842,172843,172844,172847],{},"Python 导入模块时会在 ",[33,172845,172846],{},"sys.path"," 中查找。",[26,172849,172851],{"className":30811,"code":172850,"language":30813,"meta":31,"style":31},"import sys\n\nfor path in sys.path:\n    print(path)\n",[33,172852,172853,172859,172863,172875],{"__ignoreMap":31},[36,172854,172855,172857],{"class":38,"line":39},[36,172856,30825],{"class":163},[36,172858,172569],{"class":98},[36,172860,172861],{"class":38,"line":46},[36,172862,247],{"emptyLinePlaceholder":246},[36,172864,172865,172867,172870,172872],{"class":38,"line":52},[36,172866,3476],{"class":163},[36,172868,172869],{"class":98}," path ",[36,172871,26480],{"class":163},[36,172873,172874],{"class":98}," sys.path:\n",[36,172876,172877,172879],{"class":38,"line":66},[36,172878,31732],{"class":109},[36,172880,169603],{"class":98},[14,172882,172883],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,172885,157997],{},[26,172887,172890],{"className":172888,"code":172889,"language":5638,"meta":31},[5636],"random.py\njson.py\ntime.py\n",[33,172891,172889],{"__ignoreMap":31},[14,172893,172894],{},"这些文件名可能导致导入异常。",[559,172896,172898],{"id":172897},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,172900,172694],{},[26,172902,172905],{"className":172903,"code":172904,"language":5638,"meta":31},[5636],"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",[33,172906,172904],{"__ignoreMap":31},[14,172908,172909,25055],{},[33,172910,172911],{},"utils\u002Ffile_utils.py",[26,172913,172915],{"className":30811,"code":172914,"language":30813,"meta":31,"style":31},"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",[33,172916,172917,172923,172933,172937,172941,172951,172961,172969,172975,172979,173006,173016,173020,173024,173034,173060],{"__ignoreMap":31},[36,172918,172919,172921],{"class":38,"line":39},[36,172920,30825],{"class":163},[36,172922,147465],{"class":98},[36,172924,172925,172927,172929,172931],{"class":38,"line":46},[36,172926,31170],{"class":163},[36,172928,108742],{"class":98},[36,172930,30825],{"class":163},[36,172932,108747],{"class":98},[36,172934,172935],{"class":38,"line":52},[36,172936,247],{"emptyLinePlaceholder":246},[36,172938,172939],{"class":38,"line":66},[36,172940,247],{"emptyLinePlaceholder":246},[36,172942,172943,172945,172948],{"class":38,"line":72},[36,172944,32380],{"class":163},[36,172946,172947],{"class":55}," read_json",[36,172949,172950],{"class":98},"(path):\n",[36,172952,172953,172956,172958],{"class":38,"line":82},[36,172954,172955],{"class":98},"    path ",[36,172957,176],{"class":163},[36,172959,172960],{"class":98}," Path(path)\n",[36,172962,172963,172965,172967],{"class":38,"line":88},[36,172964,3552],{"class":163},[36,172966,39363],{"class":163},[36,172968,169684],{"class":98},[36,172970,172971,172973],{"class":38,"line":113},[36,172972,15191],{"class":163},[36,172974,52270],{"class":98},[36,172976,172977],{"class":38,"line":119},[36,172978,247],{"emptyLinePlaceholder":246},[36,172980,172981,172983,172985,172988,172990,172992,172994,172996,172998,173000,173002,173004],{"class":38,"line":131},[36,172982,34611],{"class":163},[36,172984,147165],{"class":109},[36,172986,172987],{"class":98},"(path, ",[36,172989,147175],{"class":59},[36,172991,12874],{"class":98},[36,172993,147180],{"class":5667},[36,172995,176],{"class":163},[36,172997,147185],{"class":59},[36,172999,14153],{"class":98},[36,173001,31816],{"class":163},[36,173003,148527],{"class":5667},[36,173005,4190],{"class":98},[36,173007,173008,173010,173012,173014],{"class":38,"line":137},[36,173009,15191],{"class":163},[36,173011,148538],{"class":98},[36,173013,45787],{"class":5667},[36,173015,627],{"class":98},[36,173017,173018],{"class":38,"line":147},[36,173019,247],{"emptyLinePlaceholder":246},[36,173021,173022],{"class":38,"line":153},[36,173023,247],{"emptyLinePlaceholder":246},[36,173025,173026,173028,173031],{"class":38,"line":191},[36,173027,32380],{"class":163},[36,173029,173030],{"class":55}," write_json",[36,173032,173033],{"class":98},"(path, data):\n",[36,173035,173036,173038,173040,173042,173044,173046,173048,173050,173052,173054,173056,173058],{"class":38,"line":197},[36,173037,34611],{"class":163},[36,173039,147165],{"class":109},[36,173041,172987],{"class":98},[36,173043,152350],{"class":59},[36,173045,12874],{"class":98},[36,173047,147180],{"class":5667},[36,173049,176],{"class":163},[36,173051,147185],{"class":59},[36,173053,14153],{"class":98},[36,173055,31816],{"class":163},[36,173057,148527],{"class":5667},[36,173059,4190],{"class":98},[36,173061,173062,173065,173067,173069,173071,173073,173075,173077,173079,173081,173083],{"class":38,"line":217},[36,173063,173064],{"class":98},"        json.dump(data, ",[36,173066,45787],{"class":5667},[36,173068,12874],{"class":98},[36,173070,147511],{"class":5667},[36,173072,176],{"class":163},[36,173074,34420],{"class":109},[36,173076,12874],{"class":98},[36,173078,152386],{"class":5667},[36,173080,176],{"class":163},[36,173082,694],{"class":109},[36,173084,627],{"class":98},[14,173086,173087,25055],{},[33,173088,154981],{},[26,173090,173092],{"className":30811,"code":173091,"language":30813,"meta":31,"style":31},"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",[33,173093,173094,173105,173109,173122,173142],{"__ignoreMap":31},[36,173095,173096,173098,173100,173102],{"class":38,"line":39},[36,173097,31170],{"class":163},[36,173099,172715],{"class":98},[36,173101,30825],{"class":163},[36,173103,173104],{"class":98}," read_json, write_json\n",[36,173106,173107],{"class":38,"line":46},[36,173108,247],{"emptyLinePlaceholder":246},[36,173110,173111,173113,173115,173118,173120],{"class":38,"line":52},[36,173112,160090],{"class":98},[36,173114,176],{"class":163},[36,173116,173117],{"class":98}," read_json(",[36,173119,152205],{"class":59},[36,173121,627],{"class":98},[36,173123,173124,173126,173128,173130,173132,173134,173136,173138,173140],{"class":38,"line":66},[36,173125,170908],{"class":98},[36,173127,63111],{"class":59},[36,173129,51869],{"class":98},[36,173131,150262],{"class":59},[36,173133,12874],{"class":98},[36,173135,151846],{"class":59},[36,173137,51869],{"class":98},[36,173139,1600],{"class":109},[36,173141,165526],{"class":98},[36,173143,173144,173147,173149],{"class":38,"line":72},[36,173145,173146],{"class":98},"write_json(",[36,173148,152205],{"class":59},[36,173150,173151],{"class":98},", students)\n",[559,173153,173155],{"id":173154},"_918-易错点","9.18 易错点",[571,173157,173158,173161,173166,173171,173174,173177],{},[574,173159,173160],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[574,173162,173163,173164,28819],{},"能指定异常类型就不要裸写 ",[33,173165,171268],{},[574,173167,173168,173170],{},[33,173169,171643],{}," 无论是否出错都会执行。",[574,173172,173173],{},"模块文件名不要和标准库重名。",[574,173175,173176],{},"导入自己写的模块时，要注意运行目录。",[574,173178,173179],{},"第三方包要安装到当前解释器或虚拟环境中。",[559,173181,173183],{"id":173182},"_919-本章练习","9.19 本章练习",[571,173185,173186,173189,173192,173198,173205],{},[574,173187,173188],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[574,173190,173191],{},"写函数读取文件，如果文件不存在则返回空字符串。",[574,173193,172606,173194,173197],{},[33,173195,173196],{},"math_utils.py","，实现加减乘除函数并导入使用。",[574,173199,173200,173201,173204],{},"创建一个 ",[33,173202,173203],{},"utils"," 包，把 JSON 读写函数放进去。",[574,173206,173207],{},"写一个程序，捕获除零异常和输入格式异常。",[537,173209,173210],{},"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":31,"searchDepth":46,"depth":46,"links":173212},[173213,173214,173215,173216,173217,173218,173219,173220,173221,173222,173223,173229,173236,173238,173239,173240,173241,173242,173243],{"id":171065,"depth":46,"text":171066},{"id":171193,"depth":46,"text":171194},{"id":171242,"depth":46,"text":171243},{"id":171391,"depth":46,"text":171392},{"id":171563,"depth":46,"text":171564},{"id":171632,"depth":46,"text":171633},{"id":171743,"depth":46,"text":171744},{"id":171869,"depth":46,"text":171870},{"id":171994,"depth":46,"text":171995},{"id":172049,"depth":46,"text":172050},{"id":172148,"depth":46,"text":172149,"children":173224},[173225,173226,173227,173228],{"id":172152,"depth":52,"text":172153},{"id":172186,"depth":52,"text":172187},{"id":172225,"depth":52,"text":172226},{"id":172304,"depth":52,"text":172305},{"id":172327,"depth":46,"text":172328,"children":173230},[173231,173232,173233,173234,173235],{"id":172331,"depth":52,"text":172332},{"id":172414,"depth":52,"text":172415},{"id":172459,"depth":52,"text":172460},{"id":172518,"depth":52,"text":172519},{"id":172556,"depth":52,"text":172557},{"id":172590,"depth":46,"text":173237},"9.13 if name == \"main\"",{"id":172683,"depth":46,"text":172684},{"id":172728,"depth":46,"text":172729},{"id":172839,"depth":46,"text":172840},{"id":172897,"depth":46,"text":172898},{"id":173154,"depth":46,"text":173155},{"id":173182,"depth":46,"text":173183},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":171057,"description":542},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173250,"title":173251,"body":173252,"description":173415,"extension":543,"meta":173416,"navigation":246,"path":173417,"seo":173418,"stem":173419,"__hash__":173420},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173253,"toc":173410},[173254,173257,173260,173263,173274,173276,173350,173353,173356,173359,173362,173365,173368,173371,173374,173377,173380],[10,173255,173251],{"id":173256},"python教程",[14,173258,173259],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,173261,173262],{},"建议学习环境：",[571,173264,173265,173268,173271],{},[574,173266,173267],{},"Python 版本：Python 3.10 及以上。",[574,173269,173270],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[574,173272,173273],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[559,173275,117509],{"id":117509},[571,173277,173278,173284,173290,173296,173302,173308,173314,173320,173326,173332,173338,173344],{},[574,173279,173280],{},[20,173281,173283],{"href":173282},".\u002Fch1-Python","Python环境与第一个程序",[574,173285,173286],{},[20,173287,173289],{"href":173288},".\u002Fch2","基础语法、变量与字符串",[574,173291,173292],{},[20,173293,173295],{"href":173294},".\u002Fch3","判断语句",[574,173297,173298],{},[20,173299,173301],{"href":173300},".\u002Fch4","循环语句",[574,173303,173304],{},[20,173305,173307],{"href":173306},".\u002Fch5","函数基础",[574,173309,173310],{},[20,173311,173313],{"href":173312},".\u002Fch6","数据容器",[574,173315,173316],{},[20,173317,173319],{"href":173318},".\u002Fch7","函数进阶",[574,173321,173322],{},[20,173323,173325],{"href":173324},".\u002Fch8","文件操作",[574,173327,173328],{},[20,173329,173331],{"href":173330},".\u002Fch9","异常、模块与包",[574,173333,173334],{},[20,173335,173337],{"href":173336},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[574,173339,173340],{},[20,173341,173343],{"href":173342},".\u002Fch11","面向对象基础",[574,173345,173346],{},[20,173347,173349],{"href":173348},".\u002Fch12","综合案例与复习路线",[559,173351,173352],{"id":173352},"学习路线",[14,173354,173355],{},"第一阶段：能运行程序。",[14,173357,173358],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,173360,173361],{},"第二阶段：能组织数据。",[14,173363,173364],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,173366,173367],{},"第三阶段：能封装逻辑。",[14,173369,173370],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,173372,173373],{},"第四阶段：能做小项目。",[14,173375,173376],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[559,173378,173379],{"id":173379},"参考资料",[571,173381,173382,173389,173396,173403],{},[574,173383,173384,173385],{},"黑马程序员 Python 入门教程推荐：",[20,173386,173387],{"href":173387,"rel":173388},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24],[574,173390,173391,173392],{},"Python 官方中文教程：",[20,173393,173394],{"href":173394,"rel":173395},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24],[574,173397,173398,173399],{},"Python 标准库文档：",[20,173400,173401],{"href":173401,"rel":173402},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24],[574,173404,173405,173406],{},"pyecharts 文档：",[20,173407,173408],{"href":173408,"rel":173409},"https:\u002F\u002Fpyecharts.org\u002F",[24],{"title":31,"searchDepth":46,"depth":46,"links":173411},[173412,173413,173414],{"id":117509,"depth":46,"text":117509},{"id":173352,"depth":46,"text":173352},{"id":173379,"depth":46,"text":173379},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23817},"\u002Fwiki\u002F2024-10-10-python",{"title":173251,"description":173415},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331462157]