[{"data":1,"prerenderedAt":173244},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-11-03-cnn-ji-chu\u002Fch1-yan-zheng-shen-du-xue-xi-huan-jing":3,"wiki-doc-nav":355},{"id":4,"title":5,"body":6,"description":347,"extension":348,"meta":349,"navigation":350,"path":351,"seo":352,"stem":353,"__hash__":354},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":8,"toc":345},"minimark",[9,13,24,41,48,111,114,120,333,338,341],[10,11,5],"h1",{"id":12},"_1验证深度学习环境",[14,15,16,17],"p",{},"关于环境的安装，看",[18,19,23],"a",{"href":20,"rel":21},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[22],"nofollow","Pytorch-->深度学习",[14,25,26,27,31,32,36,37,40],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[28,29,30],"code",{},"pytorch-cuda=12.4"," 是一个“ ",[33,34,35],"strong",{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[33,38,39],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,42,43],{},[44,45],"img",{"alt":46,"src":47},"","\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",[49,50,54],"pre",{"className":51,"code":52,"language":53,"meta":46,"style":46},"language-bash shiki shiki-themes github-light github-dark","# 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","bash",[28,55,56,65],{"__ignoreMap":46},[57,58,61],"span",{"class":59,"line":60},"line",1,[57,62,64],{"class":63},"sJ8bj","# CUDA 12.4\n",[57,66,68,72,76,79,83,86,89,92,94,97,100,103,106,108],{"class":59,"line":67},2,[57,69,71],{"class":70},"sScJk","conda",[57,73,75],{"class":74},"sZZnC"," install",[57,77,78],{"class":74}," pytorch==",[57,80,82],{"class":81},"sj4cs","2.5.1",[57,84,85],{"class":74}," torchvision==",[57,87,88],{"class":81},"0.20.1",[57,90,91],{"class":74}," torchaudio==",[57,93,82],{"class":81},[57,95,96],{"class":74}," pytorch-cuda=",[57,98,99],{"class":81},"12.4",[57,101,102],{"class":81}," -c",[57,104,105],{"class":74}," pytorch",[57,107,102],{"class":81},[57,109,110],{"class":74}," nvidia\n",[14,112,113],{},"）：",[14,115,116],{},[18,117,118],{"href":118,"rel":119},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[22],[49,121,125],{"className":122,"code":123,"language":124,"meta":46,"style":46},"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",[28,126,127,132,142,148,160,178,184,195,239,247,260,279,285,296,309,320],{"__ignoreMap":46},[57,128,129],{"class":59,"line":60},[57,130,131],{"class":63},"# 对深度学习环境进行测试\n",[57,133,134,138],{"class":59,"line":67},[57,135,137],{"class":136},"szBVR","import",[57,139,141],{"class":140},"sVt8B"," torch\n",[57,143,145],{"class":59,"line":144},3,[57,146,147],{"class":63},"# 查看cuda是否被激活\n",[57,149,151,154,157],{"class":59,"line":150},4,[57,152,153],{"class":140},"flag",[57,155,156],{"class":136},"=",[57,158,159],{"class":140},"torch.cuda.is_available()\n",[57,161,163,166,169,172,175],{"class":59,"line":162},5,[57,164,165],{"class":81},"print",[57,167,168],{"class":140},"(",[57,170,171],{"class":74},"\"cuda:\"",[57,173,174],{"class":140},", flag)   ",[57,176,177],{"class":63},"#返回true的话说明被激活\n",[57,179,181],{"class":59,"line":180},6,[57,182,183],{"class":63},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[57,185,187,190,192],{"class":59,"line":186},7,[57,188,189],{"class":140},"ngpu",[57,191,156],{"class":136},[57,193,194],{"class":81},"1\n",[57,196,198,201,203,206,209,212,215,218,221,224,227,230,233,236],{"class":59,"line":197},8,[57,199,200],{"class":140},"device",[57,202,156],{"class":136},[57,204,205],{"class":140},"torch.device(",[57,207,208],{"class":74},"\"cuda:0\"",[57,210,211],{"class":136}," if",[57,213,214],{"class":140},"(torch.cuda.is_available() ",[57,216,217],{"class":136},"and",[57,219,220],{"class":140}," ngpu",[57,222,223],{"class":136},">",[57,225,226],{"class":81},"0",[57,228,229],{"class":140},") ",[57,231,232],{"class":136},"else",[57,234,235],{"class":74}," \"cpu\"",[57,237,238],{"class":140},")\n",[57,240,242,244],{"class":59,"line":241},9,[57,243,165],{"class":81},[57,245,246],{"class":140},"(device)\n",[57,248,250,252,255,257],{"class":59,"line":249},10,[57,251,165],{"class":81},[57,253,254],{"class":140},"(torch.cuda.get_device_name(",[57,256,226],{"class":81},[57,258,259],{"class":140},"))\n",[57,261,263,265,268,271,274,276],{"class":59,"line":262},11,[57,264,165],{"class":81},[57,266,267],{"class":140},"(torch.rand(",[57,269,270],{"class":81},"3",[57,272,273],{"class":140},",",[57,275,270],{"class":81},[57,277,278],{"class":140},").cuda())\n",[57,280,282],{"class":59,"line":281},12,[57,283,284],{"class":63},"# 查看cuda和cudnn的版本\n",[57,286,288,291,293],{"class":59,"line":287},13,[57,289,290],{"class":140},"cuda_version",[57,292,156],{"class":136},[57,294,295],{"class":140},"torch.version.cuda\n",[57,297,299,301,303,306],{"class":59,"line":298},14,[57,300,165],{"class":81},[57,302,168],{"class":140},[57,304,305],{"class":74},"\"cuda version\"",[57,307,308],{"class":140},",cuda_version)\n",[57,310,312,315,317],{"class":59,"line":311},15,[57,313,314],{"class":140},"cudnn_version",[57,316,156],{"class":136},[57,318,319],{"class":140},"torch.backends.cudnn.version()\n",[57,321,323,325,327,330],{"class":59,"line":322},16,[57,324,165],{"class":81},[57,326,168],{"class":140},[57,328,329],{"class":74},"\"cudnn version\"",[57,331,332],{"class":140},",cudnn_version)\n",[14,334,335],{},[44,336],{"alt":46,"src":337},"\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,339,340],{},"cuda:0 指的是一块显卡",[342,343,344],"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 .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":46,"searchDepth":67,"depth":67,"links":346},[],null,"md",{},true,"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":5,"description":347},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",[356,5435,6543,7963,10952,12303,13792,14880,23643,23655,24250,24276,24400,24641,24706,24724,24737,24784,24908,25077,25276,25456,25661,25797,25892,25929,25942,26252,26993,27701,27722,28742,30373,30524,30537,30549,30778,50590,50605,50622,50655,53527,76875,93020,93041,93154,93275,94045,94708,95069,95107,95213,95313,95356,95382,95443,97097,97198,97223,97714,98214,99294,99577,100319,100821,100833,102849,104513,106016,107714,109631,111550,113572,117042,117474,117937,118686,121630,121978,122000,122356,125663,125675,126078,126101,126248,126415,126620,126921,127478,128135,130066,131664,132313,133807,135238,136473,138167,139919,142329,142445,143380,143591,144476,145711,145939,145952,147107,149519,151887,155208,157685,159329,161106,163119,166171,168351,170878,173072],{"id":357,"title":358,"body":359,"description":46,"extension":348,"meta":5430,"navigation":350,"path":5431,"seo":5432,"stem":5433,"__hash__":5434},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":360,"toc":5402},[361,364,369,372,376,389,393,398,401,404,407,410,413,439,443,446,449,452,455,504,508,526,528,542,545,553,556,1414,1421,1438,1442,1528,1532,1538,1624,1628,1666,1670,1734,1738,1742,1748,1759,1763,1768,1772,1777,1781,1786,1790,1794,1799,2061,2066,2204,2209,2465,2468,2476,2480,2485,2588,2591,2897,2906,3007,3010,3013,3016,3019,3279,3284,3424,3427,3606,3609,3737,3740,3892,3896,3901,3904,3915,3923,3926,4033,4037,4041,4046,4096,4101,4106,4130,4135,4188,4191,4196,4373,4378,4663,4668,5065,5069,5074,5131,5136,5144,5147,5287,5290,5399],[10,362,358],{"id":363},"_1基础入门",[365,366,368],"h2",{"id":367},"_11注释","1.1注释",[14,370,371],{},"\u002F\u002F或者\u002F* *\u002F",[365,373,375],{"id":374},"_12命名","1.2命名",[377,378,379,383,386],"ol",{},[380,381,382],"li",{},"字母数字下划线",[380,384,385],{},"开头必须是字母或_",[380,387,388],{},"不能使用关键词",[365,390,392],{"id":391},"_13数据类型","1.3数据类型",[394,395,397],"h3",{"id":396},"_131整形","1.3.1整形",[14,399,400],{},"short 短整形 2",[14,402,403],{},"int 整形 4",[14,405,406],{},"long 长整形 win4 linux32位4 linux64位8",[14,408,409],{},"long long 长长整形 8",[14,411,412],{},"利用sizeof可以求数据类型占用的内存空间大小",[49,414,418],{"className":415,"code":416,"language":417,"meta":46,"style":46},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[28,419,420,432],{"__ignoreMap":46},[57,421,422,425,427,430],{"class":59,"line":60},[57,423,424],{"class":136},"sizeof",[57,426,168],{"class":140},[57,428,429],{"class":136},"int",[57,431,238],{"class":140},[57,433,434,436],{"class":59,"line":67},[57,435,424],{"class":136},[57,437,438],{"class":140},"(num)\n",[394,440,442],{"id":441},"_132浮点型","1.3.2浮点型",[14,444,445],{},"float 单精度 4节 7位有效数字",[14,447,448],{},"double 双精度 8节 15-16有效数字",[14,450,451],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,453,454],{},"注意点：",[49,456,458],{"className":415,"code":457,"language":417,"meta":46,"style":46},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[28,459,460,482],{"__ignoreMap":46},[57,461,462,465,468,470,473,476,479],{"class":59,"line":60},[57,463,464],{"class":136},"float",[57,466,467],{"class":140}," f1",[57,469,156],{"class":136},[57,471,472],{"class":81},"3.14",[57,474,475],{"class":136},"f",[57,477,478],{"class":140},";",[57,480,481],{"class":63}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[57,483,484,486,489,491,493,496,499,501],{"class":59,"line":67},[57,485,464],{"class":136},[57,487,488],{"class":140}," f2",[57,490,156],{"class":136},[57,492,270],{"class":81},[57,494,495],{"class":136},"e",[57,497,498],{"class":81},"2",[57,500,478],{"class":140},[57,502,503],{"class":63}," \u002F\u002F科学记数法\n",[394,505,507],{"id":506},"_133字符型","1.3.3字符型",[49,509,511],{"className":415,"code":510,"language":417,"meta":46,"style":46},"char ch='a'\n",[28,512,513],{"__ignoreMap":46},[57,514,515,518,521,523],{"class":59,"line":60},[57,516,517],{"class":136},"char",[57,519,520],{"class":140}," ch",[57,522,156],{"class":136},[57,524,525],{"class":74},"'a'\n",[14,527,454],{},[377,529,530,533,536,539],{},[380,531,532],{},"在显示字符型变量时，只能单引号，双引号x",[380,534,535],{},"单引号内只能一个字符，不能字符串",[380,537,538],{},"c和c++字符型变量只占用一个字符",[380,540,541],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,543,544],{},"ASCII码大致由以下两部分组成：",[377,546,547,550],{},[380,548,549],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[380,551,552],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,554,555],{},"ASCII码表格：",[557,558,559,602],"table",{},[560,561,562],"thead",{},[563,564,565,572,577,581,586,590,594,598],"tr",{},[566,567,568,571],"th",{},[33,569,570],{},"ASCII","值",[566,573,574],{},[33,575,576],{},"控制字符",[566,578,579,571],{},[33,580,570],{},[566,582,583],{},[33,584,585],{},"字符",[566,587,588,571],{},[33,589,570],{},[566,591,592],{},[33,593,585],{},[566,595,596,571],{},[33,597,570],{},[566,599,600],{},[33,601,585],{},[603,604,605,631,656,681,706,732,757,782,807,832,858,884,910,935,961,987,1013,1037,1062,1087,1112,1137,1162,1187,1212,1237,1262,1288,1313,1338,1363,1388],"tbody",{},[563,606,607,610,613,616,619,622,625,628],{},[608,609,226],"td",{},[608,611,612],{},"NUT",[608,614,615],{},"32",[608,617,618],{},"(space)",[608,620,621],{},"64",[608,623,624],{},"@",[608,626,627],{},"96",[608,629,630],{},"、",[563,632,633,636,639,642,645,648,651,654],{},[608,634,635],{},"1",[608,637,638],{},"SOH",[608,640,641],{},"33",[608,643,644],{},"!",[608,646,647],{},"65",[608,649,650],{},"A",[608,652,653],{},"97",[608,655,18],{},[563,657,658,660,663,666,669,672,675,678],{},[608,659,498],{},[608,661,662],{},"STX",[608,664,665],{},"34",[608,667,668],{},"\"",[608,670,671],{},"66",[608,673,674],{},"B",[608,676,677],{},"98",[608,679,680],{},"b",[563,682,683,685,688,691,694,697,700,703],{},[608,684,270],{},[608,686,687],{},"ETX",[608,689,690],{},"35",[608,692,693],{},"#",[608,695,696],{},"67",[608,698,699],{},"C",[608,701,702],{},"99",[608,704,705],{},"c",[563,707,708,711,714,717,720,723,726,729],{},[608,709,710],{},"4",[608,712,713],{},"EOT",[608,715,716],{},"36",[608,718,719],{},"$",[608,721,722],{},"68",[608,724,725],{},"D",[608,727,728],{},"100",[608,730,731],{},"d",[563,733,734,737,740,743,746,749,752,755],{},[608,735,736],{},"5",[608,738,739],{},"ENQ",[608,741,742],{},"37",[608,744,745],{},"%",[608,747,748],{},"69",[608,750,751],{},"E",[608,753,754],{},"101",[608,756,495],{},[563,758,759,762,765,768,771,774,777,780],{},[608,760,761],{},"6",[608,763,764],{},"ACK",[608,766,767],{},"38",[608,769,770],{},"&",[608,772,773],{},"70",[608,775,776],{},"F",[608,778,779],{},"102",[608,781,475],{},[563,783,784,787,790,793,795,798,801,804],{},[608,785,786],{},"7",[608,788,789],{},"BEL",[608,791,792],{},"39",[608,794,273],{},[608,796,797],{},"71",[608,799,800],{},"G",[608,802,803],{},"103",[608,805,806],{},"g",[563,808,809,812,815,818,820,823,826,829],{},[608,810,811],{},"8",[608,813,814],{},"BS",[608,816,817],{},"40",[608,819,168],{},[608,821,822],{},"72",[608,824,825],{},"H",[608,827,828],{},"104",[608,830,831],{},"h",[563,833,834,837,840,843,846,849,852,855],{},[608,835,836],{},"9",[608,838,839],{},"HT",[608,841,842],{},"41",[608,844,845],{},")",[608,847,848],{},"73",[608,850,851],{},"I",[608,853,854],{},"105",[608,856,857],{},"i",[563,859,860,863,866,869,872,875,878,881],{},[608,861,862],{},"10",[608,864,865],{},"LF",[608,867,868],{},"42",[608,870,871],{},"*",[608,873,874],{},"74",[608,876,877],{},"J",[608,879,880],{},"106",[608,882,883],{},"j",[563,885,886,889,892,895,898,901,904,907],{},[608,887,888],{},"11",[608,890,891],{},"VT",[608,893,894],{},"43",[608,896,897],{},"+",[608,899,900],{},"75",[608,902,903],{},"K",[608,905,906],{},"107",[608,908,909],{},"k",[563,911,912,915,918,921,923,926,929,932],{},[608,913,914],{},"12",[608,916,917],{},"FF",[608,919,920],{},"44",[608,922,273],{},[608,924,925],{},"76",[608,927,928],{},"L",[608,930,931],{},"108",[608,933,934],{},"l",[563,936,937,940,943,946,949,952,955,958],{},[608,938,939],{},"13",[608,941,942],{},"CR",[608,944,945],{},"45",[608,947,948],{},"-",[608,950,951],{},"77",[608,953,954],{},"M",[608,956,957],{},"109",[608,959,960],{},"m",[563,962,963,966,969,972,975,978,981,984],{},[608,964,965],{},"14",[608,967,968],{},"SO",[608,970,971],{},"46",[608,973,974],{},".",[608,976,977],{},"78",[608,979,980],{},"N",[608,982,983],{},"110",[608,985,986],{},"n",[563,988,989,992,995,998,1001,1004,1007,1010],{},[608,990,991],{},"15",[608,993,994],{},"SI",[608,996,997],{},"47",[608,999,1000],{},"\u002F",[608,1002,1003],{},"79",[608,1005,1006],{},"O",[608,1008,1009],{},"111",[608,1011,1012],{},"o",[563,1014,1015,1018,1021,1024,1026,1029,1032,1035],{},[608,1016,1017],{},"16",[608,1019,1020],{},"DLE",[608,1022,1023],{},"48",[608,1025,226],{},[608,1027,1028],{},"80",[608,1030,1031],{},"P",[608,1033,1034],{},"112",[608,1036,14],{},[563,1038,1039,1042,1045,1048,1050,1053,1056,1059],{},[608,1040,1041],{},"17",[608,1043,1044],{},"DCI",[608,1046,1047],{},"49",[608,1049,635],{},[608,1051,1052],{},"81",[608,1054,1055],{},"Q",[608,1057,1058],{},"113",[608,1060,1061],{},"q",[563,1063,1064,1067,1070,1073,1075,1078,1081,1084],{},[608,1065,1066],{},"18",[608,1068,1069],{},"DC2",[608,1071,1072],{},"50",[608,1074,498],{},[608,1076,1077],{},"82",[608,1079,1080],{},"R",[608,1082,1083],{},"114",[608,1085,1086],{},"r",[563,1088,1089,1092,1095,1098,1100,1103,1106,1109],{},[608,1090,1091],{},"19",[608,1093,1094],{},"DC3",[608,1096,1097],{},"51",[608,1099,270],{},[608,1101,1102],{},"83",[608,1104,1105],{},"S",[608,1107,1108],{},"115",[608,1110,1111],{},"s",[563,1113,1114,1117,1120,1123,1125,1128,1131,1134],{},[608,1115,1116],{},"20",[608,1118,1119],{},"DC4",[608,1121,1122],{},"52",[608,1124,710],{},[608,1126,1127],{},"84",[608,1129,1130],{},"T",[608,1132,1133],{},"116",[608,1135,1136],{},"t",[563,1138,1139,1142,1145,1148,1150,1153,1156,1159],{},[608,1140,1141],{},"21",[608,1143,1144],{},"NAK",[608,1146,1147],{},"53",[608,1149,736],{},[608,1151,1152],{},"85",[608,1154,1155],{},"U",[608,1157,1158],{},"117",[608,1160,1161],{},"u",[563,1163,1164,1167,1170,1173,1175,1178,1181,1184],{},[608,1165,1166],{},"22",[608,1168,1169],{},"SYN",[608,1171,1172],{},"54",[608,1174,761],{},[608,1176,1177],{},"86",[608,1179,1180],{},"V",[608,1182,1183],{},"118",[608,1185,1186],{},"v",[563,1188,1189,1192,1195,1198,1200,1203,1206,1209],{},[608,1190,1191],{},"23",[608,1193,1194],{},"TB",[608,1196,1197],{},"55",[608,1199,786],{},[608,1201,1202],{},"87",[608,1204,1205],{},"W",[608,1207,1208],{},"119",[608,1210,1211],{},"w",[563,1213,1214,1217,1220,1223,1225,1228,1231,1234],{},[608,1215,1216],{},"24",[608,1218,1219],{},"CAN",[608,1221,1222],{},"56",[608,1224,811],{},[608,1226,1227],{},"88",[608,1229,1230],{},"X",[608,1232,1233],{},"120",[608,1235,1236],{},"x",[563,1238,1239,1242,1245,1248,1250,1253,1256,1259],{},[608,1240,1241],{},"25",[608,1243,1244],{},"EM",[608,1246,1247],{},"57",[608,1249,836],{},[608,1251,1252],{},"89",[608,1254,1255],{},"Y",[608,1257,1258],{},"121",[608,1260,1261],{},"y",[563,1263,1264,1267,1270,1273,1276,1279,1282,1285],{},[608,1265,1266],{},"26",[608,1268,1269],{},"SUB",[608,1271,1272],{},"58",[608,1274,1275],{},":",[608,1277,1278],{},"90",[608,1280,1281],{},"Z",[608,1283,1284],{},"122",[608,1286,1287],{},"z",[563,1289,1290,1293,1296,1299,1301,1304,1307,1310],{},[608,1291,1292],{},"27",[608,1294,1295],{},"ESC",[608,1297,1298],{},"59",[608,1300,478],{},[608,1302,1303],{},"91",[608,1305,1306],{},"[",[608,1308,1309],{},"123",[608,1311,1312],{},"{",[563,1314,1315,1318,1321,1324,1327,1330,1332,1335],{},[608,1316,1317],{},"28",[608,1319,1320],{},"FS",[608,1322,1323],{},"60",[608,1325,1326],{},"\u003C",[608,1328,1329],{},"92",[608,1331,1000],{},[608,1333,1334],{},"124",[608,1336,1337],{},"|",[563,1339,1340,1343,1346,1349,1351,1354,1357,1360],{},[608,1341,1342],{},"29",[608,1344,1345],{},"GS",[608,1347,1348],{},"61",[608,1350,156],{},[608,1352,1353],{},"93",[608,1355,1356],{},"]",[608,1358,1359],{},"125",[608,1361,1362],{},"}",[563,1364,1365,1368,1371,1374,1376,1379,1382,1385],{},[608,1366,1367],{},"30",[608,1369,1370],{},"RS",[608,1372,1373],{},"62",[608,1375,223],{},[608,1377,1378],{},"94",[608,1380,1381],{},"^",[608,1383,1384],{},"126",[608,1386,1387],{},"`",[563,1389,1390,1393,1396,1399,1402,1405,1408,1411],{},[608,1391,1392],{},"31",[608,1394,1395],{},"US",[608,1397,1398],{},"63",[608,1400,1401],{},"?",[608,1403,1404],{},"95",[608,1406,1407],{},"_",[608,1409,1410],{},"127",[608,1412,1413],{},"DEL",[14,1415,1416,1417,1420],{},"ASCII 码大致由以下",[33,1418,1419],{},"两部分组","成：",[1422,1423,1424,1431],"ul",{},[380,1425,1426,1427,1430],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[33,1428,1429],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[380,1432,1433,1434,1437],{},"ASCII 打印字符：数字 ",[33,1435,1436],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[394,1439,1441],{"id":1440},"_134转义字符","1.3.4转义字符",[49,1443,1445],{"className":415,"code":1444,"language":417,"meta":46,"style":46},"\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",[28,1446,1447,1452,1468,1482,1487,1500,1505],{"__ignoreMap":46},[57,1448,1449],{"class":59,"line":60},[57,1450,1451],{"class":63},"\u002F\u002F换行符\n",[57,1453,1454,1457,1460,1463,1465],{"class":59,"line":67},[57,1455,1456],{"class":140},"cout ",[57,1458,1459],{"class":136},"\u003C\u003C",[57,1461,1462],{"class":74},"\"hello world\u002Fn\"",[57,1464,478],{"class":140},[57,1466,1467],{"class":63}," \u002F\u002F就等同于如下：\n",[57,1469,1470,1472,1474,1477,1479],{"class":59,"line":144},[57,1471,1456],{"class":140},[57,1473,1459],{"class":136},[57,1475,1476],{"class":74},"\"hello world\"",[57,1478,1459],{"class":136},[57,1480,1481],{"class":140},"endl;\n",[57,1483,1484],{"class":59,"line":150},[57,1485,1486],{"class":63},"\u002F\u002F反斜杠\n",[57,1488,1489,1491,1493,1496,1498],{"class":59,"line":162},[57,1490,1456],{"class":140},[57,1492,1459],{"class":136},[57,1494,1495],{"class":74},"\"\u002F\u002F\"",[57,1497,1459],{"class":136},[57,1499,1481],{"class":140},[57,1501,1502],{"class":59,"line":180},[57,1503,1504],{"class":63},"\u002F\u002F水平制表符\n",[57,1506,1507,1509,1511,1514,1517,1520,1522,1525],{"class":59,"line":186},[57,1508,1456],{"class":140},[57,1510,1459],{"class":136},[57,1512,1513],{"class":74},"\"aaaa",[57,1515,1516],{"class":81},"\\t",[57,1518,1519],{"class":74},"helloworld\"",[57,1521,1459],{"class":136},[57,1523,1524],{"class":140},"endl;",[57,1526,1527],{"class":63}," \u002F\u002F输出窗口时有对齐效果\n",[394,1529,1531],{"id":1530},"_135字符串型","1.3.5字符串型",[14,1533,1534,1535,1537],{},"char 变量名",[57,1536],{},"=\"字符串值\"",[49,1539,1541],{"className":415,"code":1540,"language":417,"meta":46,"style":46},"\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",[28,1542,1543,1548,1553,1558,1563,1577,1590,1595,1600,1611],{"__ignoreMap":46},[57,1544,1545],{"class":59,"line":60},[57,1546,1547],{"class":63},"\u002F\u002Fc风格字符串\n",[57,1549,1550],{"class":59,"line":67},[57,1551,1552],{"class":63},"\u002F\u002F注意事项：\n",[57,1554,1555],{"class":59,"line":144},[57,1556,1557],{"class":63},"\u002F\u002F1.char字符串名[]\n",[57,1559,1560],{"class":59,"line":150},[57,1561,1562],{"class":63},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[57,1564,1565,1567,1570,1572,1574],{"class":59,"line":162},[57,1566,517],{"class":136},[57,1568,1569],{"class":140}," str[]",[57,1571,156],{"class":136},[57,1573,1476],{"class":74},[57,1575,1576],{"class":140},";\n",[57,1578,1579,1581,1583,1586,1588],{"class":59,"line":180},[57,1580,1456],{"class":140},[57,1582,1459],{"class":136},[57,1584,1585],{"class":140},"str",[57,1587,1459],{"class":136},[57,1589,1481],{"class":140},[57,1591,1592],{"class":59,"line":186},[57,1593,1594],{"class":63},"\u002F\u002Fc++风格字符串\n",[57,1596,1597],{"class":59,"line":197},[57,1598,1599],{"class":63},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[57,1601,1602,1605,1607,1609],{"class":59,"line":241},[57,1603,1604],{"class":140},"string str2",[57,1606,156],{"class":136},[57,1608,1476],{"class":74},[57,1610,1576],{"class":140},[57,1612,1613,1615,1617,1620,1622],{"class":59,"line":249},[57,1614,1456],{"class":140},[57,1616,1459],{"class":136},[57,1618,1619],{"class":140},"str2",[57,1621,1459],{"class":136},[57,1623,1481],{"class":140},[394,1625,1627],{"id":1626},"_136布尔类型bool","1.3.6布尔类型bool",[49,1629,1631],{"className":415,"code":1630,"language":417,"meta":46,"style":46},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[28,1632,1633,1648],{"__ignoreMap":46},[57,1634,1635,1638,1641,1643,1646],{"class":59,"line":60},[57,1636,1637],{"class":136},"bool",[57,1639,1640],{"class":140}," flag",[57,1642,156],{"class":136},[57,1644,1645],{"class":81},"true",[57,1647,1576],{"class":140},[57,1649,1650,1653,1656,1659,1661,1663],{"class":59,"line":67},[57,1651,1652],{"class":140},"cout",[57,1654,1655],{"class":136},"\u003C\u003Csizeof",[57,1657,1658],{"class":140},"(flag)",[57,1660,1459],{"class":136},[57,1662,1524],{"class":140},[57,1664,1665],{"class":63}," \u002F\u002F查看布尔占内存空间\n",[365,1667,1669],{"id":1668},"_14键盘输入cin","1.4键盘输入cin",[49,1671,1673],{"className":415,"code":1672,"language":417,"meta":46,"style":46},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[28,1674,1675,1688,1705,1716],{"__ignoreMap":46},[57,1676,1677,1679,1682,1684,1686],{"class":59,"line":60},[57,1678,429],{"class":136},[57,1680,1681],{"class":140}," a",[57,1683,156],{"class":136},[57,1685,226],{"class":81},[57,1687,1576],{"class":140},[57,1689,1690,1692,1694,1697,1699,1701,1703],{"class":59,"line":67},[57,1691,1652],{"class":140},[57,1693,1459],{"class":136},[57,1695,1696],{"class":74},"\"请给整型变量a赋值\"",[57,1698,1459],{"class":136},[57,1700,18],{"class":140},[57,1702,1459],{"class":136},[57,1704,1481],{"class":140},[57,1706,1707,1710,1713],{"class":59,"line":144},[57,1708,1709],{"class":140},"cin ",[57,1711,1712],{"class":136},">>",[57,1714,1715],{"class":140}," a;\n",[57,1717,1718,1720,1722,1725,1728,1730,1732],{"class":59,"line":150},[57,1719,1456],{"class":140},[57,1721,1459],{"class":136},[57,1723,1724],{"class":74}," \"整型变量a=\"",[57,1726,1727],{"class":136}," \u003C\u003C",[57,1729,18],{"class":140},[57,1731,1459],{"class":136},[57,1733,1481],{"class":140},[365,1735,1737],{"id":1736},"_15运算符","1.5运算符",[394,1739,1741],{"id":1740},"_151算术运算符","1.5.1算术运算符",[14,1743,1744,1747],{},[44,1745],{"alt":46,"src":1746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[377,1749,1750,1753,1756],{},[380,1751,1752],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[380,1754,1755],{},"两个小数不可以做取模运算",[380,1757,1758],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[394,1760,1762],{"id":1761},"_152赋值运算符","1.5.2赋值运算符",[14,1764,1765],{},[44,1766],{"alt":46,"src":1767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[394,1769,1771],{"id":1770},"_153比较运算符","1.5.3比较运算符",[14,1773,1774],{},[44,1775],{"alt":46,"src":1776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[394,1778,1780],{"id":1779},"_154逻辑运算符","1.5.4逻辑运算符",[14,1782,1783],{},[44,1784],{"alt":46,"src":1785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[365,1787,1789],{"id":1788},"_16程序流程结构","1.6程序流程结构",[394,1791,1793],{"id":1792},"_161选择结构","1.6.1选择结构",[377,1795,1796],{},[380,1797,1798],{},"if语句\n单行、多行、多条件if语句",[49,1800,1802],{"className":415,"code":1801,"language":417,"meta":46,"style":46},"\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",[28,1803,1804,1809,1824,1829,1843,1848,1853,1862,1875,1879,1892,1896,1901,1905,1918,1922,1927,1948,1953,1967,1972,1999,2004,2021,2026,2031,2036,2050,2055],{"__ignoreMap":46},[57,1805,1806],{"class":59,"line":60},[57,1807,1808],{"class":63},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[57,1810,1811,1814,1817,1819,1822],{"class":59,"line":67},[57,1812,1813],{"class":136},"if",[57,1815,1816],{"class":140},"(score",[57,1818,223],{"class":136},[57,1820,1821],{"class":81},"600",[57,1823,238],{"class":140},[57,1825,1826],{"class":59,"line":144},[57,1827,1828],{"class":140},"{\n",[57,1830,1831,1834,1836,1839,1841],{"class":59,"line":150},[57,1832,1833],{"class":140},"    cout",[57,1835,1459],{"class":136},[57,1837,1838],{"class":74},"'这是单行if语句'",[57,1840,1459],{"class":136},[57,1842,1481],{"class":140},[57,1844,1845],{"class":59,"line":162},[57,1846,1847],{"class":140},"}\n",[57,1849,1850],{"class":59,"line":180},[57,1851,1852],{"class":63},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[57,1854,1855,1857,1859],{"class":59,"line":186},[57,1856,1709],{"class":140},[57,1858,1712],{"class":136},[57,1860,1861],{"class":140}," score\n",[57,1863,1864,1866,1868,1871,1873],{"class":59,"line":197},[57,1865,1813],{"class":136},[57,1867,1816],{"class":140},[57,1869,1870],{"class":136},"\u003C=",[57,1872,1821],{"class":81},[57,1874,238],{"class":140},[57,1876,1877],{"class":59,"line":241},[57,1878,1828],{"class":140},[57,1880,1881,1883,1885,1888,1890],{"class":59,"line":249},[57,1882,1833],{"class":140},[57,1884,1712],{"class":136},[57,1886,1887],{"class":74},"\"小于等于600\"",[57,1889,1459],{"class":136},[57,1891,1481],{"class":140},[57,1893,1894],{"class":59,"line":262},[57,1895,1847],{"class":140},[57,1897,1898],{"class":59,"line":281},[57,1899,1900],{"class":136},"else\n",[57,1902,1903],{"class":59,"line":287},[57,1904,1828],{"class":140},[57,1906,1907,1909,1911,1914,1916],{"class":59,"line":298},[57,1908,1833],{"class":140},[57,1910,1712],{"class":136},[57,1912,1913],{"class":74},"\"大于600\"",[57,1915,1712],{"class":136},[57,1917,1481],{"class":140},[57,1919,1920],{"class":59,"line":311},[57,1921,1847],{"class":140},[57,1923,1924],{"class":59,"line":322},[57,1925,1926],{"class":63},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[57,1928,1930,1932,1935,1937,1939,1942,1944,1946],{"class":59,"line":1929},17,[57,1931,1813],{"class":136},[57,1933,1934],{"class":140}," (",[57,1936,226],{"class":81},[57,1938,1326],{"class":136},[57,1940,1941],{"class":140},"num",[57,1943,1326],{"class":136},[57,1945,728],{"class":81},[57,1947,238],{"class":140},[57,1949,1951],{"class":59,"line":1950},18,[57,1952,1828],{"class":140},[57,1954,1956,1958,1960,1963,1965],{"class":59,"line":1955},19,[57,1957,1833],{"class":140},[57,1959,1459],{"class":136},[57,1961,1962],{"class":74},"\"小于100\"",[57,1964,1459],{"class":136},[57,1966,1481],{"class":140},[57,1968,1970],{"class":59,"line":1969},20,[57,1971,1847],{"class":140},[57,1973,1975,1977,1979,1982,1985,1987,1990,1992,1994,1997],{"class":59,"line":1974},21,[57,1976,232],{"class":136},[57,1978,211],{"class":136},[57,1980,1981],{"class":140}," (nmu",[57,1983,1984],{"class":136},">=",[57,1986,728],{"class":81},[57,1988,1989],{"class":136},"&&",[57,1991,1941],{"class":140},[57,1993,1326],{"class":136},[57,1995,1996],{"class":81},"200",[57,1998,238],{"class":140},[57,2000,2002],{"class":59,"line":2001},22,[57,2003,1828],{"class":140},[57,2005,2007,2009,2011,2014,2016,2018],{"class":59,"line":2006},23,[57,2008,1833],{"class":140},[57,2010,1459],{"class":136},[57,2012,2013],{"class":74},"\"不小于100且小于200\"",[57,2015,1459],{"class":136},[57,2017,1524],{"class":140},[57,2019,2020],{"class":63}," \u002F\u002F可以无限else if,python中是elif：\n",[57,2022,2024],{"class":59,"line":2023},24,[57,2025,1847],{"class":140},[57,2027,2029],{"class":59,"line":2028},25,[57,2030,1900],{"class":136},[57,2032,2034],{"class":59,"line":2033},26,[57,2035,1828],{"class":140},[57,2037,2039,2041,2043,2046,2048],{"class":59,"line":2038},27,[57,2040,1833],{"class":140},[57,2042,1459],{"class":136},[57,2044,2045],{"class":74},"\"不小于200\"",[57,2047,1459],{"class":136},[57,2049,1481],{"class":140},[57,2051,2053],{"class":59,"line":2052},28,[57,2054,1847],{"class":140},[57,2056,2058],{"class":59,"line":2057},29,[57,2059,2060],{"class":63},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[377,2062,2063],{"start":67},[380,2064,2065],{},"三目运算符",[49,2067,2069],{"className":415,"code":2068,"language":417,"meta":46,"style":46},"\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",[28,2070,2071,2076,2081,2107,2129,2146,2151,2174,2189],{"__ignoreMap":46},[57,2072,2073],{"class":59,"line":60},[57,2074,2075],{"class":63},"\u002F\u002F创建三个变量a,b,c\n",[57,2077,2078],{"class":59,"line":67},[57,2079,2080],{"class":63},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[57,2082,2083,2085,2087,2089,2091,2094,2096,2098,2101,2103,2105],{"class":59,"line":144},[57,2084,429],{"class":136},[57,2086,1681],{"class":140},[57,2088,156],{"class":136},[57,2090,1116],{"class":81},[57,2092,2093],{"class":140},",b",[57,2095,156],{"class":136},[57,2097,862],{"class":81},[57,2099,2100],{"class":140},",c",[57,2102,156],{"class":136},[57,2104,226],{"class":81},[57,2106,1576],{"class":140},[57,2108,2109,2111,2113,2116,2118,2120,2122,2124,2126],{"class":59,"line":150},[57,2110,705],{"class":140},[57,2112,156],{"class":136},[57,2114,2115],{"class":140},"(a",[57,2117,223],{"class":136},[57,2119,680],{"class":140},[57,2121,1401],{"class":136},[57,2123,18],{"class":140},[57,2125,1275],{"class":136},[57,2127,2128],{"class":140},"b)\n",[57,2130,2131,2133,2135,2138,2140,2142,2144],{"class":59,"line":162},[57,2132,1652],{"class":140},[57,2134,1459],{"class":136},[57,2136,2137],{"class":74},"\"c=\"",[57,2139,1459],{"class":136},[57,2141,705],{"class":140},[57,2143,1459],{"class":136},[57,2145,1481],{"class":140},[57,2147,2148],{"class":59,"line":180},[57,2149,2150],{"class":63},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[57,2152,2153,2155,2157,2159,2161,2163,2165,2168,2170,2172],{"class":59,"line":186},[57,2154,2115],{"class":140},[57,2156,223],{"class":136},[57,2158,680],{"class":140},[57,2160,1401],{"class":136},[57,2162,18],{"class":140},[57,2164,1275],{"class":136},[57,2166,2167],{"class":140},"b)",[57,2169,156],{"class":136},[57,2171,728],{"class":81},[57,2173,1576],{"class":140},[57,2175,2176,2178,2180,2182,2184,2186],{"class":59,"line":197},[57,2177,1652],{"class":140},[57,2179,1459],{"class":136},[57,2181,18],{"class":140},[57,2183,1459],{"class":136},[57,2185,1524],{"class":140},[57,2187,2188],{"class":63}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[57,2190,2191,2193,2195,2197,2199,2201],{"class":59,"line":241},[57,2192,1652],{"class":140},[57,2194,1459],{"class":136},[57,2196,680],{"class":140},[57,2198,1459],{"class":136},[57,2200,1524],{"class":140},[57,2202,2203],{"class":63}," \u002F\u002F10   a>b,b还是原值\n",[377,2205,2206],{"start":144},[380,2207,2208],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[49,2210,2212],{"className":415,"code":2211,"language":417,"meta":46,"style":46},"\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",[28,2213,2214,2219,2227,2240,2250,2254,2268,2281,2291,2299,2304,2329,2350,2372,2393,2415,2436,2456,2461],{"__ignoreMap":46},[57,2215,2216],{"class":59,"line":60},[57,2217,2218],{"class":63},"\u002F\u002F案例-电影打分\n",[57,2220,2221,2224],{"class":59,"line":67},[57,2222,2223],{"class":136},"#include",[57,2225,2226],{"class":74},"\u003Ciostream>\n",[57,2228,2229,2232,2235,2238],{"class":59,"line":144},[57,2230,2231],{"class":136},"using",[57,2233,2234],{"class":136}," namespace",[57,2236,2237],{"class":70}," std",[57,2239,1576],{"class":140},[57,2241,2242,2244,2247],{"class":59,"line":150},[57,2243,429],{"class":136},[57,2245,2246],{"class":70}," main",[57,2248,2249],{"class":140},"()\n",[57,2251,2252],{"class":59,"line":162},[57,2253,1828],{"class":140},[57,2255,2256,2259,2262,2264,2266],{"class":59,"line":180},[57,2257,2258],{"class":136},"    int",[57,2260,2261],{"class":140}," score",[57,2263,156],{"class":136},[57,2265,226],{"class":81},[57,2267,1576],{"class":140},[57,2269,2270,2272,2274,2277,2279],{"class":59,"line":186},[57,2271,1833],{"class":140},[57,2273,1459],{"class":136},[57,2275,2276],{"class":74},"\"电影打分：\"",[57,2278,1459],{"class":136},[57,2280,1481],{"class":140},[57,2282,2283,2286,2288],{"class":59,"line":197},[57,2284,2285],{"class":140},"    cin",[57,2287,1712],{"class":136},[57,2289,2290],{"class":140},"score;\n",[57,2292,2293,2296],{"class":59,"line":241},[57,2294,2295],{"class":136},"    switch",[57,2297,2298],{"class":140},"(score)\n",[57,2300,2301],{"class":59,"line":249},[57,2302,2303],{"class":140},"    {\n",[57,2305,2306,2309,2312,2315,2317,2320,2322,2324,2327],{"class":59,"line":262},[57,2307,2308],{"class":136},"        case",[57,2310,2311],{"class":81}," 10",[57,2313,2314],{"class":140},":cout",[57,2316,1459],{"class":136},[57,2318,2319],{"class":74},"\"经典\"",[57,2321,1459],{"class":136},[57,2323,1524],{"class":140},[57,2325,2326],{"class":136},"break",[57,2328,1576],{"class":140},[57,2330,2331,2333,2336,2338,2340,2342,2344,2346,2348],{"class":59,"line":281},[57,2332,2308],{"class":136},[57,2334,2335],{"class":81}," 9",[57,2337,2314],{"class":140},[57,2339,1459],{"class":136},[57,2341,2319],{"class":74},[57,2343,1459],{"class":136},[57,2345,1524],{"class":140},[57,2347,2326],{"class":136},[57,2349,1576],{"class":140},[57,2351,2352,2354,2357,2359,2361,2364,2366,2368,2370],{"class":59,"line":287},[57,2353,2308],{"class":136},[57,2355,2356],{"class":81}," 8",[57,2358,2314],{"class":140},[57,2360,1459],{"class":136},[57,2362,2363],{"class":74},"\"非常好\"",[57,2365,1459],{"class":136},[57,2367,1524],{"class":140},[57,2369,2326],{"class":136},[57,2371,1576],{"class":140},[57,2373,2374,2376,2379,2381,2383,2385,2387,2389,2391],{"class":59,"line":298},[57,2375,2308],{"class":136},[57,2377,2378],{"class":81}," 7",[57,2380,2314],{"class":140},[57,2382,1459],{"class":136},[57,2384,2363],{"class":74},[57,2386,1459],{"class":136},[57,2388,1524],{"class":140},[57,2390,2326],{"class":136},[57,2392,1576],{"class":140},[57,2394,2395,2397,2400,2402,2404,2407,2409,2411,2413],{"class":59,"line":311},[57,2396,2308],{"class":136},[57,2398,2399],{"class":81}," 6",[57,2401,2314],{"class":140},[57,2403,1459],{"class":136},[57,2405,2406],{"class":74},"\"一般\"",[57,2408,1459],{"class":136},[57,2410,1524],{"class":140},[57,2412,2326],{"class":136},[57,2414,1576],{"class":140},[57,2416,2417,2419,2422,2424,2426,2428,2430,2432,2434],{"class":59,"line":322},[57,2418,2308],{"class":136},[57,2420,2421],{"class":81}," 5",[57,2423,2314],{"class":140},[57,2425,1459],{"class":136},[57,2427,2406],{"class":74},[57,2429,1459],{"class":136},[57,2431,1524],{"class":140},[57,2433,2326],{"class":136},[57,2435,1576],{"class":140},[57,2437,2438,2441,2443,2445,2448,2450,2452,2454],{"class":59,"line":1929},[57,2439,2440],{"class":136},"        default",[57,2442,2314],{"class":140},[57,2444,1459],{"class":136},[57,2446,2447],{"class":74},"\"烂片\"",[57,2449,1459],{"class":136},[57,2451,1524],{"class":140},[57,2453,2326],{"class":136},[57,2455,1576],{"class":140},[57,2457,2458],{"class":59,"line":1950},[57,2459,2460],{"class":140},"    }\n",[57,2462,2463],{"class":59,"line":1955},[57,2464,1847],{"class":140},[14,2466,2467],{},"if和switch区别：",[1422,2469,2470,2473],{},[380,2471,2472],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[380,2474,2475],{},"switch优点：结构清晰，执行效率高",[394,2477,2479],{"id":2478},"_162循环结构","1.6.2循环结构",[377,2481,2482],{},[380,2483,2484],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[49,2486,2488],{"className":415,"code":2487,"language":417,"meta":46,"style":46},"\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",[28,2489,2490,2495,2503,2507,2520,2534,2538,2558,2568,2572,2584],{"__ignoreMap":46},[57,2491,2492],{"class":59,"line":60},[57,2493,2494],{"class":63},"\u002F\u002F打印0-9数字\n",[57,2496,2497,2499,2501],{"class":59,"line":67},[57,2498,429],{"class":136},[57,2500,2246],{"class":70},[57,2502,2249],{"class":140},[57,2504,2505],{"class":59,"line":144},[57,2506,1828],{"class":140},[57,2508,2509,2511,2514,2516,2518],{"class":59,"line":150},[57,2510,2258],{"class":136},[57,2512,2513],{"class":140}," num",[57,2515,156],{"class":136},[57,2517,226],{"class":81},[57,2519,1576],{"class":140},[57,2521,2522,2525,2528,2530,2532],{"class":59,"line":162},[57,2523,2524],{"class":136},"    while",[57,2526,2527],{"class":140},"(num",[57,2529,1326],{"class":136},[57,2531,862],{"class":81},[57,2533,238],{"class":140},[57,2535,2536],{"class":59,"line":180},[57,2537,2303],{"class":140},[57,2539,2540,2543,2546,2548,2550,2552,2555],{"class":59,"line":186},[57,2541,2542],{"class":70},"       std",[57,2544,2545],{"class":140},"::cout",[57,2547,1459],{"class":136},[57,2549,1941],{"class":140},[57,2551,1459],{"class":136},[57,2553,2554],{"class":70},"std",[57,2556,2557],{"class":140},"::endl;\n",[57,2559,2560,2563,2566],{"class":59,"line":197},[57,2561,2562],{"class":140},"        num",[57,2564,2565],{"class":136},"++",[57,2567,1576],{"class":140},[57,2569,2570],{"class":59,"line":241},[57,2571,2460],{"class":140},[57,2573,2574,2577,2579,2582],{"class":59,"line":249},[57,2575,2576],{"class":70},"    system",[57,2578,168],{"class":140},[57,2580,2581],{"class":74},"\"pause\"",[57,2583,238],{"class":140},[57,2585,2586],{"class":59,"line":262},[57,2587,1847],{"class":140},[14,2589,2590],{},"注意：写好循环条件，避免死循环情况",[49,2592,2594],{"className":415,"code":2593,"language":417,"meta":46,"style":46},"\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",[28,2595,2596,2601,2608,2615,2625,2633,2637,2642,2669,2674,2679,2687,2714,2719,2724,2737,2747,2751,2761,2766,2779,2784,2798,2803,2818,2822,2835,2839,2844,2848,2862,2870,2875,2881,2887,2892],{"__ignoreMap":46},[57,2597,2598],{"class":59,"line":60},[57,2599,2600],{"class":63},"\u002F\u002F循环结构-猜数字\n",[57,2602,2603,2605],{"class":59,"line":67},[57,2604,2223],{"class":136},[57,2606,2607],{"class":74}," \u003Ciostream>\n",[57,2609,2610,2612],{"class":59,"line":144},[57,2611,2223],{"class":136},[57,2613,2614],{"class":74}," \u003Cctime>\n",[57,2616,2617,2619,2621,2623],{"class":59,"line":150},[57,2618,2231],{"class":136},[57,2620,2234],{"class":136},[57,2622,2237],{"class":70},[57,2624,1576],{"class":140},[57,2626,2627,2629,2631],{"class":59,"line":162},[57,2628,429],{"class":136},[57,2630,2246],{"class":70},[57,2632,2249],{"class":140},[57,2634,2635],{"class":59,"line":180},[57,2636,1828],{"class":140},[57,2638,2639],{"class":59,"line":186},[57,2640,2641],{"class":63},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[57,2643,2644,2647,2650,2653,2656,2658,2661,2663,2666],{"class":59,"line":197},[57,2645,2646],{"class":70},"    srand",[57,2648,2649],{"class":140},"((",[57,2651,2652],{"class":136},"unsigned",[57,2654,2655],{"class":136}," int",[57,2657,845],{"class":140},[57,2659,2660],{"class":70},"time",[57,2662,168],{"class":140},[57,2664,2665],{"class":81},"NULL",[57,2667,2668],{"class":140},"));\n",[57,2670,2671],{"class":59,"line":241},[57,2672,2673],{"emptyLinePlaceholder":350},"\n",[57,2675,2676],{"class":59,"line":249},[57,2677,2678],{"class":63},"    \u002F\u002F1.系统生成随机数\n",[57,2680,2681,2684],{"class":59,"line":262},[57,2682,2683],{"class":63},"    \u002F\u002Frand()%100",[57,2685,2686],{"class":63}," \u002F\u002F生成0-99的随机数\n",[57,2688,2689,2691,2693,2695,2698,2701,2703,2705,2707,2709,2711],{"class":59,"line":281},[57,2690,2258],{"class":136},[57,2692,2513],{"class":140},[57,2694,156],{"class":136},[57,2696,2697],{"class":70},"rand",[57,2699,2700],{"class":140},"()",[57,2702,745],{"class":136},[57,2704,728],{"class":81},[57,2706,897],{"class":136},[57,2708,635],{"class":81},[57,2710,478],{"class":140},[57,2712,2713],{"class":63}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[57,2715,2716],{"class":59,"line":287},[57,2717,2718],{"class":63},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[57,2720,2721],{"class":59,"line":298},[57,2722,2723],{"class":63},"    \u002F\u002F2.玩家猜测\n",[57,2725,2726,2728,2731,2733,2735],{"class":59,"line":311},[57,2727,2258],{"class":136},[57,2729,2730],{"class":140}," val",[57,2732,156],{"class":136},[57,2734,226],{"class":81},[57,2736,1576],{"class":140},[57,2738,2739,2741,2743,2745],{"class":59,"line":322},[57,2740,2524],{"class":136},[57,2742,1934],{"class":140},[57,2744,635],{"class":81},[57,2746,238],{"class":140},[57,2748,2749],{"class":59,"line":1929},[57,2750,2303],{"class":140},[57,2752,2753,2756,2758],{"class":59,"line":1950},[57,2754,2755],{"class":140},"        cin",[57,2757,1712],{"class":136},[57,2759,2760],{"class":140},"val;\n",[57,2762,2763],{"class":59,"line":1955},[57,2764,2765],{"class":63},"        \u002F\u002F3.判断玩家猜测\n",[57,2767,2768,2771,2774,2776],{"class":59,"line":1969},[57,2769,2770],{"class":136},"        if",[57,2772,2773],{"class":140},"(val",[57,2775,1326],{"class":136},[57,2777,2778],{"class":140},"num) \n",[57,2780,2781],{"class":59,"line":1974},[57,2782,2783],{"class":140},"        {\n",[57,2785,2786,2789,2791,2794,2796],{"class":59,"line":2001},[57,2787,2788],{"class":140},"            cout",[57,2790,1459],{"class":136},[57,2792,2793],{"class":74},"\"猜小了！\"",[57,2795,1459],{"class":136},[57,2797,1481],{"class":140},[57,2799,2800],{"class":59,"line":2006},[57,2801,2802],{"class":140},"        }\n",[57,2804,2805,2808,2810,2813,2815],{"class":59,"line":2023},[57,2806,2807],{"class":136},"        else",[57,2809,211],{"class":136},[57,2811,2812],{"class":140}," (val",[57,2814,223],{"class":136},[57,2816,2817],{"class":140},"num)\n",[57,2819,2820],{"class":59,"line":2028},[57,2821,2783],{"class":140},[57,2823,2824,2826,2828,2831,2833],{"class":59,"line":2033},[57,2825,2788],{"class":140},[57,2827,1459],{"class":136},[57,2829,2830],{"class":74},"\"猜大了！\"",[57,2832,1459],{"class":136},[57,2834,1481],{"class":140},[57,2836,2837],{"class":59,"line":2038},[57,2838,2802],{"class":140},[57,2840,2841],{"class":59,"line":2052},[57,2842,2843],{"class":136},"        else\n",[57,2845,2846],{"class":59,"line":2057},[57,2847,2783],{"class":140},[57,2849,2851,2853,2855,2858,2860],{"class":59,"line":2850},30,[57,2852,2788],{"class":140},[57,2854,1459],{"class":136},[57,2856,2857],{"class":74},"\"猜对了！\"",[57,2859,1459],{"class":136},[57,2861,1481],{"class":140},[57,2863,2865,2868],{"class":59,"line":2864},31,[57,2866,2867],{"class":136},"            break",[57,2869,1576],{"class":140},[57,2871,2873],{"class":59,"line":2872},32,[57,2874,2802],{"class":140},[57,2876,2878],{"class":59,"line":2877},33,[57,2879,2880],{"class":63},"        \u002F\u002F猜对 退出游戏\n",[57,2882,2884],{"class":59,"line":2883},34,[57,2885,2886],{"class":63},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[57,2888,2890],{"class":59,"line":2889},35,[57,2891,2460],{"class":140},[57,2893,2895],{"class":59,"line":2894},36,[57,2896,1847],{"class":140},[377,2898,2899],{"start":67},[380,2900,2901,2902,2905],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[33,2903,2904],{},"do...while会先执行一次循环语句","，在判断循环语句",[49,2907,2909],{"className":415,"code":2908,"language":417,"meta":46,"style":46},"\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",[28,2910,2911,2916,2924,2928,2940,2948,2952,2969,2976,2980,2993,3003],{"__ignoreMap":46},[57,2912,2913],{"class":59,"line":60},[57,2914,2915],{"class":63},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[57,2917,2918,2920,2922],{"class":59,"line":67},[57,2919,429],{"class":136},[57,2921,2246],{"class":70},[57,2923,2249],{"class":140},[57,2925,2926],{"class":59,"line":144},[57,2927,1828],{"class":140},[57,2929,2930,2932,2934,2936,2938],{"class":59,"line":150},[57,2931,2258],{"class":136},[57,2933,2513],{"class":140},[57,2935,156],{"class":136},[57,2937,226],{"class":81},[57,2939,1576],{"class":140},[57,2941,2942,2945],{"class":59,"line":162},[57,2943,2944],{"class":136},"    do",[57,2946,2947],{"class":140}," \n",[57,2949,2950],{"class":59,"line":180},[57,2951,2303],{"class":140},[57,2953,2954,2957,2959,2961,2963,2965,2967],{"class":59,"line":186},[57,2955,2956],{"class":70},"        std",[57,2958,2545],{"class":140},[57,2960,1459],{"class":136},[57,2962,1941],{"class":140},[57,2964,1459],{"class":136},[57,2966,2554],{"class":70},[57,2968,2557],{"class":140},[57,2970,2971,2973],{"class":59,"line":197},[57,2972,2562],{"class":140},[57,2974,2975],{"class":136},"++\n",[57,2977,2978],{"class":59,"line":241},[57,2979,2460],{"class":140},[57,2981,2982,2984,2986,2988,2990],{"class":59,"line":249},[57,2983,2524],{"class":136},[57,2985,2527],{"class":140},[57,2987,1326],{"class":136},[57,2989,862],{"class":81},[57,2991,2992],{"class":140},");\n",[57,2994,2995,2997,2999,3001],{"class":59,"line":262},[57,2996,2576],{"class":70},[57,2998,168],{"class":140},[57,3000,2581],{"class":74},[57,3002,2992],{"class":140},[57,3004,3005],{"class":59,"line":281},[57,3006,1847],{"class":140},[14,3008,3009],{},"案例-水仙花数",[14,3011,3012],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,3014,3015],{},"例如：1^3+5^3+3^3=153",[14,3017,3018],{},"请用do...while语句，求出所有3位数的水仙花数",[49,3020,3022],{"className":415,"code":3021,"language":417,"meta":46,"style":46},"#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",[28,3023,3024,3030,3040,3048,3052,3057,3069,3075,3079,3084,3100,3116,3132,3147,3166,3181,3229,3233,3245,3249,3257,3261,3275],{"__ignoreMap":46},[57,3025,3026,3028],{"class":59,"line":60},[57,3027,2223],{"class":136},[57,3029,2607],{"class":74},[57,3031,3032,3034,3036,3038],{"class":59,"line":67},[57,3033,2231],{"class":136},[57,3035,2234],{"class":136},[57,3037,2237],{"class":70},[57,3039,1576],{"class":140},[57,3041,3042,3044,3046],{"class":59,"line":144},[57,3043,429],{"class":136},[57,3045,2246],{"class":70},[57,3047,2249],{"class":140},[57,3049,3050],{"class":59,"line":150},[57,3051,1828],{"class":140},[57,3053,3054],{"class":59,"line":162},[57,3055,3056],{"class":63},"    \u002F\u002F1.先打印所有三位数字\n",[57,3058,3059,3061,3063,3065,3067],{"class":59,"line":180},[57,3060,2258],{"class":136},[57,3062,2513],{"class":140},[57,3064,156],{"class":136},[57,3066,728],{"class":81},[57,3068,1576],{"class":140},[57,3070,3071,3073],{"class":59,"line":186},[57,3072,2944],{"class":136},[57,3074,2947],{"class":140},[57,3076,3077],{"class":59,"line":197},[57,3078,2303],{"class":140},[57,3080,3081],{"class":59,"line":241},[57,3082,3083],{"class":63},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[57,3085,3086,3089,3091,3093,3095,3097],{"class":59,"line":249},[57,3087,3088],{"class":136},"        int",[57,3090,1681],{"class":140},[57,3092,156],{"class":136},[57,3094,226],{"class":81},[57,3096,478],{"class":140},[57,3098,3099],{"class":63}," \u002F\u002F个位\n",[57,3101,3102,3104,3107,3109,3111,3113],{"class":59,"line":262},[57,3103,3088],{"class":136},[57,3105,3106],{"class":140}," b",[57,3108,156],{"class":136},[57,3110,226],{"class":81},[57,3112,478],{"class":140},[57,3114,3115],{"class":63}," \u002F\u002F十位\n",[57,3117,3118,3120,3123,3125,3127,3129],{"class":59,"line":281},[57,3119,3088],{"class":136},[57,3121,3122],{"class":140}," c",[57,3124,156],{"class":136},[57,3126,226],{"class":81},[57,3128,478],{"class":140},[57,3130,3131],{"class":63}," \u002F\u002F百位\n",[57,3133,3134,3137,3139,3141,3143,3145],{"class":59,"line":287},[57,3135,3136],{"class":140},"        a",[57,3138,156],{"class":136},[57,3140,1941],{"class":140},[57,3142,745],{"class":136},[57,3144,862],{"class":81},[57,3146,1576],{"class":140},[57,3148,3149,3152,3154,3156,3158,3160,3162,3164],{"class":59,"line":298},[57,3150,3151],{"class":140},"        b",[57,3153,156],{"class":136},[57,3155,1941],{"class":140},[57,3157,1000],{"class":136},[57,3159,862],{"class":81},[57,3161,745],{"class":136},[57,3163,862],{"class":81},[57,3165,1576],{"class":140},[57,3167,3168,3171,3173,3175,3177,3179],{"class":59,"line":311},[57,3169,3170],{"class":140},"        c",[57,3172,156],{"class":136},[57,3174,1941],{"class":140},[57,3176,1000],{"class":136},[57,3178,728],{"class":81},[57,3180,1576],{"class":140},[57,3182,3183,3185,3187,3189,3191,3193,3195,3197,3199,3201,3203,3205,3207,3209,3211,3213,3215,3217,3220,3223,3226],{"class":59,"line":322},[57,3184,2770],{"class":136},[57,3186,2115],{"class":140},[57,3188,871],{"class":136},[57,3190,18],{"class":140},[57,3192,871],{"class":136},[57,3194,18],{"class":140},[57,3196,897],{"class":136},[57,3198,680],{"class":140},[57,3200,871],{"class":136},[57,3202,680],{"class":140},[57,3204,871],{"class":136},[57,3206,680],{"class":140},[57,3208,897],{"class":136},[57,3210,705],{"class":140},[57,3212,871],{"class":136},[57,3214,705],{"class":140},[57,3216,871],{"class":136},[57,3218,3219],{"class":140},"c ",[57,3221,3222],{"class":136},"==",[57,3224,3225],{"class":140}," num)",[57,3227,3228],{"class":63}," \u002F\u002F如果是水仙花数，才打印\n",[57,3230,3231],{"class":59,"line":1929},[57,3232,2783],{"class":140},[57,3234,3235,3237,3239,3241,3243],{"class":59,"line":1950},[57,3236,2788],{"class":140},[57,3238,1459],{"class":136},[57,3240,1941],{"class":140},[57,3242,1459],{"class":136},[57,3244,1481],{"class":140},[57,3246,3247],{"class":59,"line":1955},[57,3248,2802],{"class":140},[57,3250,3251,3253,3255],{"class":59,"line":1969},[57,3252,2562],{"class":140},[57,3254,2565],{"class":136},[57,3256,1576],{"class":140},[57,3258,3259],{"class":59,"line":1974},[57,3260,2460],{"class":140},[57,3262,3263,3265,3268,3270,3273],{"class":59,"line":2001},[57,3264,2524],{"class":136},[57,3266,3267],{"class":140}," (num ",[57,3269,1326],{"class":136},[57,3271,3272],{"class":81}," 1000",[57,3274,2992],{"class":140},[57,3276,3277],{"class":59,"line":2006},[57,3278,1847],{"class":140},[377,3280,3281],{"start":144},[380,3282,3283],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[49,3285,3287],{"className":415,"code":3286,"language":417,"meta":46,"style":46},"\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",[28,3288,3289,3294,3323,3327,3339,3343,3348,3359,3366,3370,3384,3388,3395,3399,3411,3420],{"__ignoreMap":46},[57,3290,3291],{"class":59,"line":60},[57,3292,3293],{"class":63},"\u002F\u002F从数字0-9打印\n",[57,3295,3296,3299,3301,3303,3306,3308,3310,3313,3315,3317,3319,3321],{"class":59,"line":67},[57,3297,3298],{"class":136},"for",[57,3300,168],{"class":140},[57,3302,429],{"class":136},[57,3304,3305],{"class":140}," i",[57,3307,156],{"class":136},[57,3309,226],{"class":81},[57,3311,3312],{"class":140},";i",[57,3314,1326],{"class":136},[57,3316,862],{"class":81},[57,3318,3312],{"class":140},[57,3320,2565],{"class":136},[57,3322,238],{"class":140},[57,3324,3325],{"class":59,"line":144},[57,3326,1828],{"class":140},[57,3328,3329,3331,3333,3335,3337],{"class":59,"line":150},[57,3330,1833],{"class":140},[57,3332,1459],{"class":136},[57,3334,857],{"class":140},[57,3336,1459],{"class":136},[57,3338,1481],{"class":140},[57,3340,3341],{"class":59,"line":162},[57,3342,1847],{"class":140},[57,3344,3345],{"class":59,"line":180},[57,3346,3347],{"class":63},"\u002F\u002F上式可以进行拆分\n",[57,3349,3350,3352,3354,3356],{"class":59,"line":186},[57,3351,429],{"class":136},[57,3353,3305],{"class":140},[57,3355,156],{"class":136},[57,3357,3358],{"class":81},"0\n",[57,3360,3361,3363],{"class":59,"line":197},[57,3362,3298],{"class":136},[57,3364,3365],{"class":140},"(;;;)\n",[57,3367,3368],{"class":59,"line":241},[57,3369,1828],{"class":140},[57,3371,3372,3375,3378,3380,3382],{"class":59,"line":249},[57,3373,3374],{"class":136},"    if",[57,3376,3377],{"class":140},"(i",[57,3379,1984],{"class":136},[57,3381,862],{"class":81},[57,3383,238],{"class":140},[57,3385,3386],{"class":59,"line":262},[57,3387,2303],{"class":140},[57,3389,3390,3393],{"class":59,"line":281},[57,3391,3392],{"class":136},"        break",[57,3394,1576],{"class":140},[57,3396,3397],{"class":59,"line":287},[57,3398,2460],{"class":140},[57,3400,3401,3403,3405,3407,3409],{"class":59,"line":298},[57,3402,1833],{"class":140},[57,3404,1459],{"class":136},[57,3406,857],{"class":140},[57,3408,1459],{"class":136},[57,3410,1481],{"class":140},[57,3412,3413,3416,3418],{"class":59,"line":311},[57,3414,3415],{"class":140},"    i",[57,3417,2565],{"class":136},[57,3419,1576],{"class":140},[57,3421,3422],{"class":59,"line":322},[57,3423,1847],{"class":140},[14,3425,3426],{},"小练习",[49,3428,3430],{"className":415,"code":3429,"language":417,"meta":46,"style":46},"#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",[28,3431,3432,3438,3448,3456,3460,3465,3470,3498,3502,3507,3512,3553,3557,3570,3574,3578,3582,3594,3598,3602],{"__ignoreMap":46},[57,3433,3434,3436],{"class":59,"line":60},[57,3435,2223],{"class":136},[57,3437,2226],{"class":74},[57,3439,3440,3442,3444,3446],{"class":59,"line":67},[57,3441,2231],{"class":136},[57,3443,2234],{"class":136},[57,3445,2237],{"class":70},[57,3447,1576],{"class":140},[57,3449,3450,3452,3454],{"class":59,"line":144},[57,3451,429],{"class":136},[57,3453,2246],{"class":70},[57,3455,2249],{"class":140},[57,3457,3458],{"class":59,"line":150},[57,3459,1828],{"class":140},[57,3461,3462],{"class":59,"line":162},[57,3463,3464],{"class":63},"    \u002F\u002F敲桌子案例\n",[57,3466,3467],{"class":59,"line":180},[57,3468,3469],{"class":63},"    \u002F\u002F1.先输出1-100的数字\n",[57,3471,3472,3475,3477,3479,3481,3483,3485,3488,3490,3492,3494,3496],{"class":59,"line":186},[57,3473,3474],{"class":136},"    for",[57,3476,168],{"class":140},[57,3478,429],{"class":136},[57,3480,3305],{"class":140},[57,3482,156],{"class":136},[57,3484,635],{"class":81},[57,3486,3487],{"class":140},"; i",[57,3489,1870],{"class":136},[57,3491,728],{"class":81},[57,3493,3487],{"class":140},[57,3495,2565],{"class":136},[57,3497,238],{"class":140},[57,3499,3500],{"class":59,"line":197},[57,3501,2303],{"class":140},[57,3503,3504],{"class":59,"line":241},[57,3505,3506],{"class":63},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[57,3508,3509],{"class":59,"line":249},[57,3510,3511],{"class":63},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[57,3513,3514,3516,3518,3520,3522,3524,3526,3529,3531,3533,3535,3537,3539,3541,3543,3545,3547,3549,3551],{"class":59,"line":262},[57,3515,2770],{"class":136},[57,3517,3377],{"class":140},[57,3519,745],{"class":136},[57,3521,786],{"class":81},[57,3523,3222],{"class":136},[57,3525,226],{"class":81},[57,3527,3528],{"class":136}," ||",[57,3530,3305],{"class":140},[57,3532,745],{"class":136},[57,3534,862],{"class":81},[57,3536,3222],{"class":136},[57,3538,786],{"class":81},[57,3540,3528],{"class":136},[57,3542,3305],{"class":140},[57,3544,1000],{"class":136},[57,3546,862],{"class":81},[57,3548,3222],{"class":136},[57,3550,786],{"class":81},[57,3552,238],{"class":140},[57,3554,3555],{"class":59,"line":281},[57,3556,2783],{"class":140},[57,3558,3559,3561,3563,3566,3568],{"class":59,"line":287},[57,3560,2788],{"class":140},[57,3562,1459],{"class":136},[57,3564,3565],{"class":74},"\"敲桌子\"",[57,3567,1459],{"class":136},[57,3569,1481],{"class":140},[57,3571,3572],{"class":59,"line":298},[57,3573,2802],{"class":140},[57,3575,3576],{"class":59,"line":311},[57,3577,2843],{"class":136},[57,3579,3580],{"class":59,"line":322},[57,3581,2783],{"class":140},[57,3583,3584,3586,3588,3590,3592],{"class":59,"line":1929},[57,3585,2788],{"class":140},[57,3587,1459],{"class":136},[57,3589,857],{"class":140},[57,3591,1459],{"class":136},[57,3593,1481],{"class":140},[57,3595,3596],{"class":59,"line":1950},[57,3597,2802],{"class":140},[57,3599,3600],{"class":59,"line":1955},[57,3601,2460],{"class":140},[57,3603,3604],{"class":59,"line":1969},[57,3605,1847],{"class":140},[14,3607,3608],{},"嵌套实现星图",[49,3610,3612],{"className":415,"code":3611,"language":417,"meta":46,"style":46},"#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",[28,3613,3614,3620,3630,3638,3642,3668,3672,3701,3705,3716,3720,3729,3733],{"__ignoreMap":46},[57,3615,3616,3618],{"class":59,"line":60},[57,3617,2223],{"class":136},[57,3619,2226],{"class":74},[57,3621,3622,3624,3626,3628],{"class":59,"line":67},[57,3623,2231],{"class":136},[57,3625,2234],{"class":136},[57,3627,2237],{"class":70},[57,3629,1576],{"class":140},[57,3631,3632,3634,3636],{"class":59,"line":144},[57,3633,429],{"class":136},[57,3635,2246],{"class":70},[57,3637,2249],{"class":140},[57,3639,3640],{"class":59,"line":150},[57,3641,1828],{"class":140},[57,3643,3644,3646,3648,3650,3652,3654,3656,3658,3660,3662,3664,3666],{"class":59,"line":162},[57,3645,3474],{"class":136},[57,3647,1934],{"class":140},[57,3649,429],{"class":136},[57,3651,3305],{"class":140},[57,3653,156],{"class":136},[57,3655,226],{"class":81},[57,3657,3312],{"class":140},[57,3659,1326],{"class":136},[57,3661,862],{"class":81},[57,3663,3312],{"class":140},[57,3665,2565],{"class":136},[57,3667,238],{"class":140},[57,3669,3670],{"class":59,"line":180},[57,3671,2303],{"class":140},[57,3673,3674,3677,3679,3681,3684,3686,3688,3691,3693,3695,3697,3699],{"class":59,"line":186},[57,3675,3676],{"class":136},"        for",[57,3678,1934],{"class":140},[57,3680,429],{"class":136},[57,3682,3683],{"class":140}," j",[57,3685,156],{"class":136},[57,3687,226],{"class":81},[57,3689,3690],{"class":140},";j",[57,3692,1326],{"class":136},[57,3694,862],{"class":81},[57,3696,3690],{"class":140},[57,3698,2565],{"class":136},[57,3700,238],{"class":140},[57,3702,3703],{"class":59,"line":197},[57,3704,2783],{"class":140},[57,3706,3707,3709,3711,3714],{"class":59,"line":241},[57,3708,2788],{"class":140},[57,3710,1459],{"class":136},[57,3712,3713],{"class":74},"\"*\"",[57,3715,1576],{"class":140},[57,3717,3718],{"class":59,"line":249},[57,3719,2802],{"class":140},[57,3721,3722,3725,3727],{"class":59,"line":262},[57,3723,3724],{"class":140},"        cout",[57,3726,1459],{"class":136},[57,3728,1481],{"class":140},[57,3730,3731],{"class":59,"line":281},[57,3732,2460],{"class":140},[57,3734,3735],{"class":59,"line":287},[57,3736,1847],{"class":140},[14,3738,3739],{},"乘法口诀表",[49,3741,3743],{"className":415,"code":3742,"language":417,"meta":46,"style":46},"#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",[28,3744,3745,3751,3761,3769,3773,3799,3803,3828,3832,3872,3876,3884,3888],{"__ignoreMap":46},[57,3746,3747,3749],{"class":59,"line":60},[57,3748,2223],{"class":136},[57,3750,2607],{"class":74},[57,3752,3753,3755,3757,3759],{"class":59,"line":67},[57,3754,2231],{"class":136},[57,3756,2234],{"class":136},[57,3758,2237],{"class":70},[57,3760,1576],{"class":140},[57,3762,3763,3765,3767],{"class":59,"line":144},[57,3764,429],{"class":136},[57,3766,2246],{"class":70},[57,3768,2249],{"class":140},[57,3770,3771],{"class":59,"line":150},[57,3772,1828],{"class":140},[57,3774,3775,3777,3779,3781,3783,3785,3787,3789,3791,3793,3795,3797],{"class":59,"line":162},[57,3776,3474],{"class":136},[57,3778,168],{"class":140},[57,3780,429],{"class":136},[57,3782,3305],{"class":140},[57,3784,156],{"class":136},[57,3786,635],{"class":81},[57,3788,3312],{"class":140},[57,3790,1326],{"class":136},[57,3792,862],{"class":81},[57,3794,3312],{"class":140},[57,3796,2565],{"class":136},[57,3798,238],{"class":140},[57,3800,3801],{"class":59,"line":180},[57,3802,2303],{"class":140},[57,3804,3805,3807,3809,3811,3813,3815,3817,3819,3821,3824,3826],{"class":59,"line":186},[57,3806,3676],{"class":136},[57,3808,168],{"class":140},[57,3810,429],{"class":136},[57,3812,3683],{"class":140},[57,3814,156],{"class":136},[57,3816,635],{"class":81},[57,3818,3690],{"class":140},[57,3820,1870],{"class":136},[57,3822,3823],{"class":140},"i;j",[57,3825,2565],{"class":136},[57,3827,238],{"class":140},[57,3829,3830],{"class":59,"line":197},[57,3831,2783],{"class":140},[57,3833,3834,3836,3838,3840,3842,3844,3846,3848,3850,3853,3855,3857,3859,3861,3863,3866,3868,3870],{"class":59,"line":241},[57,3835,2788],{"class":140},[57,3837,1459],{"class":136},[57,3839,883],{"class":140},[57,3841,1459],{"class":136},[57,3843,3713],{"class":74},[57,3845,1459],{"class":136},[57,3847,857],{"class":140},[57,3849,1459],{"class":136},[57,3851,3852],{"class":74},"\"=\"",[57,3854,1459],{"class":136},[57,3856,857],{"class":140},[57,3858,871],{"class":136},[57,3860,883],{"class":140},[57,3862,1459],{"class":136},[57,3864,3865],{"class":74},"'",[57,3867,1516],{"class":81},[57,3869,3865],{"class":74},[57,3871,1576],{"class":140},[57,3873,3874],{"class":59,"line":249},[57,3875,2802],{"class":140},[57,3877,3878,3880,3882],{"class":59,"line":262},[57,3879,3724],{"class":140},[57,3881,1459],{"class":136},[57,3883,1481],{"class":140},[57,3885,3886],{"class":59,"line":281},[57,3887,2460],{"class":140},[57,3889,3890],{"class":59,"line":287},[57,3891,1847],{"class":140},[394,3893,3895],{"id":3894},"_163跳出语句","1.6.3跳出语句",[377,3897,3898],{},[380,3899,3900],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,3902,3903],{},"break使用时机：",[1422,3905,3906,3909,3912],{},[380,3907,3908],{},"出现在switch条件语句中，作用是终止case并跳出switch",[380,3910,3911],{},"出现在循环结构中，作用是跳出当前的循环结构",[380,3913,3914],{},"出现在嵌套循环中，跳出最近的内层循环语句",[377,3916,3917,3920],{"start":67},[380,3918,3919],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[380,3921,3922],{},"goto语句\n语法：goto 标记;",[14,3924,3925],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[49,3927,3929],{"className":415,"code":3928,"language":417,"meta":46,"style":46},"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",[28,3930,3931,3939,3943,3956,3966,3979,3992,4005,4013,4029],{"__ignoreMap":46},[57,3932,3933,3935,3937],{"class":59,"line":60},[57,3934,429],{"class":136},[57,3936,2246],{"class":70},[57,3938,2249],{"class":140},[57,3940,3941],{"class":59,"line":67},[57,3942,1828],{"class":140},[57,3944,3945,3947,3949,3952,3954],{"class":59,"line":144},[57,3946,1833],{"class":140},[57,3948,1459],{"class":136},[57,3950,3951],{"class":74},"\"1\"",[57,3953,1459],{"class":136},[57,3955,1481],{"class":140},[57,3957,3958,3961,3964],{"class":59,"line":150},[57,3959,3960],{"class":136},"    goto",[57,3962,3963],{"class":70}," FLAG",[57,3965,1576],{"class":140},[57,3967,3968,3970,3972,3975,3977],{"class":59,"line":162},[57,3969,1833],{"class":140},[57,3971,1459],{"class":136},[57,3973,3974],{"class":74},"\"2\"",[57,3976,1459],{"class":136},[57,3978,1481],{"class":140},[57,3980,3981,3983,3985,3988,3990],{"class":59,"line":180},[57,3982,1833],{"class":140},[57,3984,1459],{"class":136},[57,3986,3987],{"class":74},"\"3\"",[57,3989,1459],{"class":136},[57,3991,1481],{"class":140},[57,3993,3994,3996,3998,4001,4003],{"class":59,"line":186},[57,3995,1833],{"class":140},[57,3997,1459],{"class":136},[57,3999,4000],{"class":74},"\"4\"",[57,4002,1459],{"class":136},[57,4004,1481],{"class":140},[57,4006,4007,4010],{"class":59,"line":197},[57,4008,4009],{"class":70},"    FLAG",[57,4011,4012],{"class":140},":\n",[57,4014,4015,4017,4019,4022,4024,4026],{"class":59,"line":241},[57,4016,1833],{"class":140},[57,4018,1459],{"class":136},[57,4020,4021],{"class":74},"\"5\"",[57,4023,1459],{"class":136},[57,4025,1524],{"class":140},[57,4027,4028],{"class":63},"\u002F\u002F跳过了2,3,4,直接到5\n",[57,4030,4031],{"class":59,"line":249},[57,4032,1847],{"class":140},[365,4034,4036],{"id":4035},"_17数组","1.7数组",[394,4038,4040],{"id":4039},"_171一维数组","1.7.1一维数组",[377,4042,4043],{},[380,4044,4045],{},"一维数组定义方式",[557,4047,4048,4058],{},[560,4049,4050],{},[563,4051,4052,4055],{},[566,4053,4054],{},"方式",[566,4056,4057],{},"注意事项",[603,4059,4060,4074,4084],{},[563,4061,4062,4068],{},[608,4063,4064,4065,478],{},"数据类型 数组名",[57,4066,4067],{},"数组长度",[608,4069,4070,4071,4073],{},"这种方式是先定义再arr",[57,4072,857],{},"赋值",[563,4075,4076,4081],{},[608,4077,4064,4078,4080],{},[57,4079,4067],{},"={值1,值2....};",[608,4082,4083],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[563,4085,4086,4090],{},[608,4087,4064,4088,4080],{},[57,4089],{},[608,4091,4092,4093,4095],{},"int arr",[57,4094],{},";这是不正确的，按照这样的方式定义必须有初始长度",[377,4097,4098],{"start":67},[380,4099,4100],{},"一维数组数组名\n用途：",[1422,4102,4103],{},[380,4104,4105],{},"1.可以统计整个数组在内存中的长度：",[49,4107,4109],{"className":415,"code":4108,"language":417,"meta":46,"style":46},"sizeof(arr);\nsizeof(arr[0]);\n",[28,4110,4111,4118],{"__ignoreMap":46},[57,4112,4113,4115],{"class":59,"line":60},[57,4114,424],{"class":136},[57,4116,4117],{"class":140},"(arr);\n",[57,4119,4120,4122,4125,4127],{"class":59,"line":67},[57,4121,424],{"class":136},[57,4123,4124],{"class":140},"(arr[",[57,4126,226],{"class":81},[57,4128,4129],{"class":140},"]);\n",[1422,4131,4132],{},[380,4133,4134],{},"2.可以获取数组在内存中的首地址:",[49,4136,4138],{"className":415,"code":4137,"language":417,"meta":46,"style":46},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[28,4139,4140,4145,4158,4163],{"__ignoreMap":46},[57,4141,4142],{"class":59,"line":60},[57,4143,4144],{"class":63},"\u002F\u002F查看16进制的首地址\n",[57,4146,4147,4149,4151,4154,4156],{"class":59,"line":67},[57,4148,1652],{"class":140},[57,4150,1459],{"class":136},[57,4152,4153],{"class":140},"arr",[57,4155,1459],{"class":136},[57,4157,1481],{"class":140},[57,4159,4160],{"class":59,"line":144},[57,4161,4162],{"class":63},"\u002F\u002F看10进制数\n",[57,4164,4165,4167,4169,4171,4173,4175,4177,4180,4182,4184,4186],{"class":59,"line":150},[57,4166,1652],{"class":140},[57,4168,1459],{"class":136},[57,4170,168],{"class":140},[57,4172,429],{"class":136},[57,4174,845],{"class":140},[57,4176,770],{"class":136},[57,4178,4179],{"class":140},"arr[",[57,4181,226],{"class":81},[57,4183,1356],{"class":140},[57,4185,1459],{"class":136},[57,4187,1481],{"class":140},[14,4189,4190],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1422,4192,4193],{},[380,4194,4195],{},"1️⃣五只小猪称体重",[49,4197,4199],{"className":415,"code":4198,"language":417,"meta":46,"style":46},"#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",[28,4200,4201,4207,4217,4225,4229,4269,4282,4308,4312,4324,4328,4338,4342,4346,4359,4369],{"__ignoreMap":46},[57,4202,4203,4205],{"class":59,"line":60},[57,4204,2223],{"class":136},[57,4206,2226],{"class":74},[57,4208,4209,4211,4213,4215],{"class":59,"line":67},[57,4210,2231],{"class":136},[57,4212,2234],{"class":136},[57,4214,2237],{"class":70},[57,4216,1576],{"class":140},[57,4218,4219,4221,4223],{"class":59,"line":144},[57,4220,429],{"class":136},[57,4222,2246],{"class":70},[57,4224,2249],{"class":140},[57,4226,4227],{"class":59,"line":150},[57,4228,1828],{"class":140},[57,4230,4231,4233,4236,4238,4240,4242,4244,4247,4249,4252,4254,4256,4258,4261,4263,4266],{"class":59,"line":162},[57,4232,2258],{"class":136},[57,4234,4235],{"class":140}," arr[",[57,4237,736],{"class":81},[57,4239,1356],{"class":140},[57,4241,156],{"class":136},[57,4243,1312],{"class":140},[57,4245,4246],{"class":81},"300",[57,4248,273],{"class":140},[57,4250,4251],{"class":81},"350",[57,4253,273],{"class":140},[57,4255,1996],{"class":81},[57,4257,273],{"class":140},[57,4259,4260],{"class":81},"400",[57,4262,273],{"class":140},[57,4264,4265],{"class":81},"250",[57,4267,4268],{"class":140},"};\n",[57,4270,4271,4273,4276,4278,4280],{"class":59,"line":180},[57,4272,2258],{"class":136},[57,4274,4275],{"class":140}," tmp",[57,4277,156],{"class":136},[57,4279,226],{"class":81},[57,4281,1576],{"class":140},[57,4283,4284,4286,4288,4290,4292,4294,4296,4298,4300,4302,4304,4306],{"class":59,"line":186},[57,4285,3474],{"class":136},[57,4287,1934],{"class":140},[57,4289,429],{"class":136},[57,4291,3305],{"class":140},[57,4293,156],{"class":136},[57,4295,226],{"class":81},[57,4297,3312],{"class":140},[57,4299,1326],{"class":136},[57,4301,736],{"class":81},[57,4303,3312],{"class":140},[57,4305,2565],{"class":136},[57,4307,238],{"class":140},[57,4309,4310],{"class":59,"line":197},[57,4311,2303],{"class":140},[57,4313,4314,4316,4319,4321],{"class":59,"line":241},[57,4315,2770],{"class":136},[57,4317,4318],{"class":140},"(tmp",[57,4320,1326],{"class":136},[57,4322,4323],{"class":140},"arr[i])\n",[57,4325,4326],{"class":59,"line":249},[57,4327,2783],{"class":140},[57,4329,4330,4333,4335],{"class":59,"line":262},[57,4331,4332],{"class":140},"            tmp",[57,4334,156],{"class":136},[57,4336,4337],{"class":140},"arr[i];\n",[57,4339,4340],{"class":59,"line":281},[57,4341,2802],{"class":140},[57,4343,4344],{"class":59,"line":287},[57,4345,2460],{"class":140},[57,4347,4348,4350,4352,4355,4357],{"class":59,"line":298},[57,4349,1833],{"class":140},[57,4351,1459],{"class":136},[57,4353,4354],{"class":140},"tmp",[57,4356,1459],{"class":136},[57,4358,1481],{"class":140},[57,4360,4361,4364,4367],{"class":59,"line":311},[57,4362,4363],{"class":136},"    return",[57,4365,4366],{"class":81}," 0",[57,4368,1576],{"class":140},[57,4370,4371],{"class":59,"line":322},[57,4372,1847],{"class":140},[1422,4374,4375],{},[380,4376,4377],{},"2️⃣数组元素逆置",[49,4379,4381],{"className":415,"code":4380,"language":417,"meta":46,"style":46},"\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",[28,4382,4383,4388,4394,4404,4412,4416,4451,4467,4499,4512,4517,4522,4534,4544,4554,4559,4568,4578,4583,4588,4615,4619,4635,4639,4650,4659],{"__ignoreMap":46},[57,4384,4385],{"class":59,"line":60},[57,4386,4387],{"class":63},"\u002F\u002F元素逆置\n",[57,4389,4390,4392],{"class":59,"line":67},[57,4391,2223],{"class":136},[57,4393,2226],{"class":74},[57,4395,4396,4398,4400,4402],{"class":59,"line":144},[57,4397,2231],{"class":136},[57,4399,2234],{"class":136},[57,4401,2237],{"class":70},[57,4403,1576],{"class":140},[57,4405,4406,4408,4410],{"class":59,"line":150},[57,4407,429],{"class":136},[57,4409,2246],{"class":70},[57,4411,2249],{"class":140},[57,4413,4414],{"class":59,"line":162},[57,4415,1828],{"class":140},[57,4417,4418,4421,4423,4425,4427,4429,4431,4433,4435,4437,4439,4441,4443,4445,4447,4449],{"class":59,"line":180},[57,4419,4420],{"class":136},"   int",[57,4422,4235],{"class":140},[57,4424,736],{"class":81},[57,4426,1356],{"class":140},[57,4428,156],{"class":136},[57,4430,1312],{"class":140},[57,4432,635],{"class":81},[57,4434,273],{"class":140},[57,4436,498],{"class":81},[57,4438,273],{"class":140},[57,4440,270],{"class":81},[57,4442,273],{"class":140},[57,4444,710],{"class":81},[57,4446,273],{"class":140},[57,4448,736],{"class":81},[57,4450,4268],{"class":140},[57,4452,4453,4455,4458,4460,4462,4464],{"class":59,"line":186},[57,4454,4420],{"class":136},[57,4456,4457],{"class":140}," start",[57,4459,156],{"class":136},[57,4461,226],{"class":81},[57,4463,478],{"class":140},[57,4465,4466],{"class":63},"\u002F\u002F起始下标\n",[57,4468,4469,4471,4474,4477,4480,4483,4485,4487,4490,4492,4494,4496],{"class":59,"line":197},[57,4470,4420],{"class":136},[57,4472,4473],{"class":140}," end",[57,4475,4476],{"class":136},"=sizeof",[57,4478,4479],{"class":140},"(arr)",[57,4481,4482],{"class":136},"\u002Fsizeof",[57,4484,4124],{"class":140},[57,4486,226],{"class":81},[57,4488,4489],{"class":140},"])",[57,4491,948],{"class":136},[57,4493,635],{"class":81},[57,4495,478],{"class":140},[57,4497,4498],{"class":63},"\u002F\u002F结束下标\n",[57,4500,4501,4504,4507,4509],{"class":59,"line":241},[57,4502,4503],{"class":136},"   while",[57,4505,4506],{"class":140}," (start",[57,4508,1326],{"class":136},[57,4510,4511],{"class":140},"end)\n",[57,4513,4514],{"class":59,"line":249},[57,4515,4516],{"class":140},"   {\n",[57,4518,4519],{"class":59,"line":262},[57,4520,4521],{"class":63},"    \u002F\u002F实现元素互换代码\n",[57,4523,4524,4526,4529,4531],{"class":59,"line":281},[57,4525,2258],{"class":136},[57,4527,4528],{"class":140}," temp",[57,4530,156],{"class":136},[57,4532,4533],{"class":140},"arr[start];\n",[57,4535,4536,4539,4541],{"class":59,"line":287},[57,4537,4538],{"class":140},"    arr[start]",[57,4540,156],{"class":136},[57,4542,4543],{"class":140},"arr[end];\n",[57,4545,4546,4549,4551],{"class":59,"line":298},[57,4547,4548],{"class":140},"    arr[end]",[57,4550,156],{"class":136},[57,4552,4553],{"class":140},"temp;\n",[57,4555,4556],{"class":59,"line":311},[57,4557,4558],{"class":63},"    \u002F\u002F下标更新\n",[57,4560,4561,4564,4566],{"class":59,"line":322},[57,4562,4563],{"class":140},"    start",[57,4565,2565],{"class":136},[57,4567,1576],{"class":140},[57,4569,4570,4573,4576],{"class":59,"line":1929},[57,4571,4572],{"class":140},"    end",[57,4574,4575],{"class":136},"--",[57,4577,1576],{"class":140},[57,4579,4580],{"class":59,"line":1950},[57,4581,4582],{"class":140},"   }\n",[57,4584,4585],{"class":59,"line":1955},[57,4586,4587],{"class":63},"   \u002F\u002F输出逆置后的数组\n",[57,4589,4590,4593,4595,4597,4599,4601,4603,4605,4607,4609,4611,4613],{"class":59,"line":1969},[57,4591,4592],{"class":136},"   for",[57,4594,1934],{"class":140},[57,4596,429],{"class":136},[57,4598,3305],{"class":140},[57,4600,156],{"class":136},[57,4602,226],{"class":81},[57,4604,3312],{"class":140},[57,4606,1326],{"class":136},[57,4608,736],{"class":81},[57,4610,3312],{"class":140},[57,4612,2565],{"class":136},[57,4614,238],{"class":140},[57,4616,4617],{"class":59,"line":1974},[57,4618,4516],{"class":140},[57,4620,4621,4623,4625,4628,4630,4633],{"class":59,"line":2001},[57,4622,1833],{"class":140},[57,4624,1459],{"class":136},[57,4626,4627],{"class":140},"arr[i]",[57,4629,1459],{"class":136},[57,4631,4632],{"class":74},"\" \"",[57,4634,1576],{"class":140},[57,4636,4637],{"class":59,"line":2006},[57,4638,4582],{"class":140},[57,4640,4641,4644,4646,4648],{"class":59,"line":2023},[57,4642,4643],{"class":70},"   system",[57,4645,168],{"class":140},[57,4647,2581],{"class":74},[57,4649,2992],{"class":140},[57,4651,4652,4655,4657],{"class":59,"line":2028},[57,4653,4654],{"class":136},"   return",[57,4656,4366],{"class":81},[57,4658,1576],{"class":140},[57,4660,4661],{"class":59,"line":2033},[57,4662,1847],{"class":140},[1422,4664,4665],{},[380,4666,4667],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[49,4669,4671],{"className":415,"code":4670,"language":417,"meta":46,"style":46},"\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",[28,4672,4673,4678,4684,4694,4702,4706,4758,4771,4797,4801,4815,4819,4824,4829,4859,4863,4868,4902,4906,4911,4931,4936,4948,4964,4979,4984,4988,4992,5005,5031,5035,5049,5053,5061],{"__ignoreMap":46},[57,4674,4675],{"class":59,"line":60},[57,4676,4677],{"class":63},"\u002F\u002F冒泡排序,升序\n",[57,4679,4680,4682],{"class":59,"line":67},[57,4681,2223],{"class":136},[57,4683,2226],{"class":74},[57,4685,4686,4688,4690,4692],{"class":59,"line":144},[57,4687,2231],{"class":136},[57,4689,2234],{"class":136},[57,4691,2237],{"class":70},[57,4693,1576],{"class":140},[57,4695,4696,4698,4700],{"class":59,"line":150},[57,4697,429],{"class":136},[57,4699,2246],{"class":70},[57,4701,2249],{"class":140},[57,4703,4704],{"class":59,"line":162},[57,4705,1828],{"class":140},[57,4707,4708,4710,4712,4714,4717,4719,4722,4724,4726,4728,4730,4732,4734,4736,4738,4740,4742,4744,4746,4748,4750,4752,4754,4756],{"class":59,"line":180},[57,4709,2258],{"class":136},[57,4711,4235],{"class":140},[57,4713,836],{"class":81},[57,4715,4716],{"class":140},"] ",[57,4718,156],{"class":136},[57,4720,4721],{"class":140}," {",[57,4723,710],{"class":81},[57,4725,273],{"class":140},[57,4727,498],{"class":81},[57,4729,273],{"class":140},[57,4731,811],{"class":81},[57,4733,273],{"class":140},[57,4735,226],{"class":81},[57,4737,273],{"class":140},[57,4739,736],{"class":81},[57,4741,273],{"class":140},[57,4743,786],{"class":81},[57,4745,273],{"class":140},[57,4747,635],{"class":81},[57,4749,273],{"class":140},[57,4751,270],{"class":81},[57,4753,273],{"class":140},[57,4755,836],{"class":81},[57,4757,4268],{"class":140},[57,4759,4760,4762,4764,4767,4769],{"class":59,"line":186},[57,4761,1833],{"class":140},[57,4763,1459],{"class":136},[57,4765,4766],{"class":74},"\"排序前：\"",[57,4768,1459],{"class":136},[57,4770,1481],{"class":140},[57,4772,4773,4775,4777,4779,4781,4783,4785,4787,4789,4791,4793,4795],{"class":59,"line":197},[57,4774,3474],{"class":136},[57,4776,1934],{"class":140},[57,4778,429],{"class":136},[57,4780,3305],{"class":140},[57,4782,156],{"class":136},[57,4784,226],{"class":81},[57,4786,3312],{"class":140},[57,4788,1326],{"class":136},[57,4790,836],{"class":81},[57,4792,3312],{"class":140},[57,4794,2565],{"class":136},[57,4796,238],{"class":140},[57,4798,4799],{"class":59,"line":241},[57,4800,2303],{"class":140},[57,4802,4803,4805,4807,4809,4811,4813],{"class":59,"line":249},[57,4804,3724],{"class":140},[57,4806,1459],{"class":136},[57,4808,4627],{"class":140},[57,4810,1459],{"class":136},[57,4812,4632],{"class":74},[57,4814,1576],{"class":140},[57,4816,4817],{"class":59,"line":262},[57,4818,2460],{"class":140},[57,4820,4821],{"class":59,"line":281},[57,4822,4823],{"class":63},"    \u002F\u002F开始冒泡排序\n",[57,4825,4826],{"class":59,"line":287},[57,4827,4828],{"class":63},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[57,4830,4831,4833,4835,4837,4839,4841,4843,4845,4847,4849,4851,4853,4855,4857],{"class":59,"line":298},[57,4832,3474],{"class":136},[57,4834,1934],{"class":140},[57,4836,429],{"class":136},[57,4838,3305],{"class":140},[57,4840,156],{"class":136},[57,4842,226],{"class":81},[57,4844,3312],{"class":140},[57,4846,1326],{"class":136},[57,4848,836],{"class":81},[57,4850,948],{"class":136},[57,4852,635],{"class":81},[57,4854,3312],{"class":140},[57,4856,2565],{"class":136},[57,4858,238],{"class":140},[57,4860,4861],{"class":59,"line":311},[57,4862,2303],{"class":140},[57,4864,4865],{"class":59,"line":322},[57,4866,4867],{"class":63},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[57,4869,4870,4872,4874,4876,4878,4880,4882,4884,4886,4888,4890,4892,4894,4896,4898,4900],{"class":59,"line":1929},[57,4871,3676],{"class":136},[57,4873,1934],{"class":140},[57,4875,429],{"class":136},[57,4877,3683],{"class":140},[57,4879,156],{"class":136},[57,4881,226],{"class":81},[57,4883,3690],{"class":140},[57,4885,1326],{"class":136},[57,4887,836],{"class":81},[57,4889,948],{"class":136},[57,4891,857],{"class":140},[57,4893,948],{"class":136},[57,4895,635],{"class":81},[57,4897,3690],{"class":140},[57,4899,2565],{"class":136},[57,4901,238],{"class":140},[57,4903,4904],{"class":59,"line":1950},[57,4905,2783],{"class":140},[57,4907,4908],{"class":59,"line":1955},[57,4909,4910],{"class":63},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[57,4912,4913,4916,4919,4921,4924,4926,4928],{"class":59,"line":1969},[57,4914,4915],{"class":136},"            if",[57,4917,4918],{"class":140},"(arr[j]",[57,4920,223],{"class":136},[57,4922,4923],{"class":140},"arr[j",[57,4925,897],{"class":136},[57,4927,635],{"class":81},[57,4929,4930],{"class":140},"])\n",[57,4932,4933],{"class":59,"line":1974},[57,4934,4935],{"class":140},"            {\n",[57,4937,4938,4941,4943,4945],{"class":59,"line":2001},[57,4939,4940],{"class":136},"                int",[57,4942,4528],{"class":140},[57,4944,156],{"class":136},[57,4946,4947],{"class":140},"arr[j];\n",[57,4949,4950,4953,4955,4957,4959,4961],{"class":59,"line":2006},[57,4951,4952],{"class":140},"                arr[j]",[57,4954,156],{"class":136},[57,4956,4923],{"class":140},[57,4958,897],{"class":136},[57,4960,635],{"class":81},[57,4962,4963],{"class":140},"];\n",[57,4965,4966,4969,4971,4973,4975,4977],{"class":59,"line":2023},[57,4967,4968],{"class":140},"                arr[j",[57,4970,897],{"class":136},[57,4972,635],{"class":81},[57,4974,1356],{"class":140},[57,4976,156],{"class":136},[57,4978,4553],{"class":140},[57,4980,4981],{"class":59,"line":2028},[57,4982,4983],{"class":140},"            }\n",[57,4985,4986],{"class":59,"line":2033},[57,4987,2802],{"class":140},[57,4989,4990],{"class":59,"line":2038},[57,4991,2460],{"class":140},[57,4993,4994,4996,4998,5001,5003],{"class":59,"line":2052},[57,4995,1833],{"class":140},[57,4997,1459],{"class":136},[57,4999,5000],{"class":74},"\"排序后：\"",[57,5002,1459],{"class":136},[57,5004,1481],{"class":140},[57,5006,5007,5009,5011,5013,5015,5017,5019,5021,5023,5025,5027,5029],{"class":59,"line":2057},[57,5008,3474],{"class":136},[57,5010,1934],{"class":140},[57,5012,429],{"class":136},[57,5014,3305],{"class":140},[57,5016,156],{"class":136},[57,5018,226],{"class":81},[57,5020,3312],{"class":140},[57,5022,1326],{"class":136},[57,5024,836],{"class":81},[57,5026,3312],{"class":140},[57,5028,2565],{"class":136},[57,5030,238],{"class":140},[57,5032,5033],{"class":59,"line":2850},[57,5034,2303],{"class":140},[57,5036,5037,5039,5041,5043,5045,5047],{"class":59,"line":2864},[57,5038,3724],{"class":140},[57,5040,1459],{"class":136},[57,5042,4627],{"class":140},[57,5044,1459],{"class":136},[57,5046,4632],{"class":74},[57,5048,1576],{"class":140},[57,5050,5051],{"class":59,"line":2872},[57,5052,2460],{"class":140},[57,5054,5055,5057,5059],{"class":59,"line":2877},[57,5056,4363],{"class":136},[57,5058,4366],{"class":81},[57,5060,1576],{"class":140},[57,5062,5063],{"class":59,"line":2883},[57,5064,1847],{"class":140},[394,5066,5068],{"id":5067},"_172二维数组","1.7.2二维数组",[377,5070,5071],{},[380,5072,5073],{},"二维数组的四种定义方式",[557,5075,5076,5085],{},[560,5077,5078],{},[563,5079,5080,5083],{},[566,5081,5082],{},"序号",[566,5084,4054],{},[603,5086,5087,5097,5106,5115,5124],{},[563,5088,5089,5091],{},[608,5090,635],{},[608,5092,5093,5094,478],{},"数据类型 数组名[行数]",[57,5095,5096],{},"列数",[563,5098,5099,5101],{},[608,5100,498],{},[608,5102,5093,5103,5105],{},[57,5104,5096],{},"={ {数据1,数据2}，{数据3，数据4}... }",[563,5107,5108,5110],{},[608,5109,270],{},[608,5111,5093,5112,5114],{},[57,5113,5096],{},"={数据1,数据2,数据3...}",[563,5116,5117,5119],{},[608,5118,710],{},[608,5120,5121,5122,5114],{},"数据类型 数组名[]",[57,5123,5096],{},[563,5125,5126,5129],{},[608,5127,5128],{},"注意：不能只省略列数",[608,5130],{},[377,5132,5133],{"start":67},[380,5134,5135],{},"二维数组数组名",[1422,5137,5138,5141],{},[380,5139,5140],{},"1.查看二维数组所占内存空间",[380,5142,5143],{},"2.获取二维数组首地址",[14,5145,5146],{},"已知二维数组，求二维数组的行数与列数",[49,5148,5150],{"className":415,"code":5149,"language":417,"meta":46,"style":46},"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",[28,5151,5152,5160,5164,5182,5186,5204,5220,5225,5250,5283],{"__ignoreMap":46},[57,5153,5154,5156,5158],{"class":59,"line":60},[57,5155,429],{"class":136},[57,5157,2246],{"class":70},[57,5159,2249],{"class":140},[57,5161,5162],{"class":59,"line":67},[57,5163,1828],{"class":140},[57,5165,5166,5168,5170,5172,5175,5177,5179],{"class":59,"line":144},[57,5167,2258],{"class":136},[57,5169,4235],{"class":140},[57,5171,498],{"class":81},[57,5173,5174],{"class":140},"][",[57,5176,270],{"class":81},[57,5178,1356],{"class":140},[57,5180,5181],{"class":136},"=\n",[57,5183,5184],{"class":59,"line":150},[57,5185,2303],{"class":140},[57,5187,5188,5191,5193,5195,5197,5199,5201],{"class":59,"line":162},[57,5189,5190],{"class":140},"        {",[57,5192,635],{"class":81},[57,5194,273],{"class":140},[57,5196,498],{"class":81},[57,5198,273],{"class":140},[57,5200,270],{"class":81},[57,5202,5203],{"class":140},"},\n",[57,5205,5206,5208,5210,5212,5214,5216,5218],{"class":59,"line":180},[57,5207,5190],{"class":140},[57,5209,710],{"class":81},[57,5211,273],{"class":140},[57,5213,736],{"class":81},[57,5215,273],{"class":140},[57,5217,761],{"class":81},[57,5219,1847],{"class":140},[57,5221,5222],{"class":59,"line":186},[57,5223,5224],{"class":140},"    };\n",[57,5226,5227,5229,5231,5234,5236,5238,5240,5242,5244,5246,5248],{"class":59,"line":197},[57,5228,1833],{"class":140},[57,5230,1459],{"class":136},[57,5232,5233],{"class":74},"\"二维数组的行数\"",[57,5235,1655],{"class":136},[57,5237,4479],{"class":140},[57,5239,4482],{"class":136},[57,5241,4124],{"class":140},[57,5243,226],{"class":81},[57,5245,4489],{"class":140},[57,5247,1459],{"class":136},[57,5249,1481],{"class":140},[57,5251,5252,5254,5256,5259,5261,5263,5265,5267,5269,5271,5273,5275,5277,5279,5281],{"class":59,"line":241},[57,5253,1833],{"class":140},[57,5255,1459],{"class":136},[57,5257,5258],{"class":74},"\"二维数组的列数\"",[57,5260,1655],{"class":136},[57,5262,4124],{"class":140},[57,5264,226],{"class":81},[57,5266,4489],{"class":140},[57,5268,4482],{"class":136},[57,5270,4124],{"class":140},[57,5272,226],{"class":81},[57,5274,5174],{"class":140},[57,5276,226],{"class":81},[57,5278,4489],{"class":140},[57,5280,1459],{"class":136},[57,5282,1481],{"class":140},[57,5284,5285],{"class":59,"line":249},[57,5286,1847],{"class":140},[14,5288,5289],{},"查看二维数组首地址",[49,5291,5293],{"className":415,"code":5292,"language":417,"meta":46,"style":46},"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",[28,5294,5295,5312,5338,5363],{"__ignoreMap":46},[57,5296,5297,5299,5301,5304,5306,5308,5310],{"class":59,"line":60},[57,5298,1652],{"class":140},[57,5300,1459],{"class":136},[57,5302,5303],{"class":74},"\"二维数组首地址：\"",[57,5305,1459],{"class":136},[57,5307,4153],{"class":140},[57,5309,1459],{"class":136},[57,5311,1481],{"class":140},[57,5313,5314,5316,5318,5321,5323,5325,5327,5330,5332,5334,5336],{"class":59,"line":67},[57,5315,1652],{"class":140},[57,5317,1459],{"class":136},[57,5319,5320],{"class":74},"\"二维数组第一行的首地址：\"",[57,5322,1459],{"class":136},[57,5324,168],{"class":140},[57,5326,429],{"class":136},[57,5328,5329],{"class":140},")arr[",[57,5331,226],{"class":81},[57,5333,1356],{"class":140},[57,5335,1459],{"class":136},[57,5337,1481],{"class":140},[57,5339,5340,5342,5344,5347,5349,5351,5353,5355,5357,5359,5361],{"class":59,"line":144},[57,5341,1652],{"class":140},[57,5343,1459],{"class":136},[57,5345,5346],{"class":74},"\"二维数组第二行的首地址：\"",[57,5348,1459],{"class":136},[57,5350,168],{"class":140},[57,5352,429],{"class":136},[57,5354,5329],{"class":140},[57,5356,635],{"class":81},[57,5358,1356],{"class":140},[57,5360,1459],{"class":136},[57,5362,1481],{"class":140},[57,5364,5365,5367,5369,5372,5374,5376,5378,5380,5382,5384,5386,5388,5390,5392,5394,5396],{"class":59,"line":150},[57,5366,1652],{"class":140},[57,5368,1459],{"class":136},[57,5370,5371],{"class":74},"\"二维数组第一个元素的首地址:\"",[57,5373,1459],{"class":136},[57,5375,168],{"class":140},[57,5377,429],{"class":136},[57,5379,845],{"class":140},[57,5381,770],{"class":136},[57,5383,4179],{"class":140},[57,5385,226],{"class":81},[57,5387,5174],{"class":140},[57,5389,226],{"class":81},[57,5391,1356],{"class":140},[57,5393,1459],{"class":136},[57,5395,1524],{"class":140},[57,5397,5398],{"class":63},"\u002F\u002F对于数，要加取址符\n",[342,5400,5401],{},"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":46,"searchDepth":67,"depth":67,"links":5403},[5404,5405,5406,5414,5415,5421,5426],{"id":367,"depth":67,"text":368},{"id":374,"depth":67,"text":375},{"id":391,"depth":67,"text":392,"children":5407},[5408,5409,5410,5411,5412,5413],{"id":396,"depth":144,"text":397},{"id":441,"depth":144,"text":442},{"id":506,"depth":144,"text":507},{"id":1440,"depth":144,"text":1441},{"id":1530,"depth":144,"text":1531},{"id":1626,"depth":144,"text":1627},{"id":1668,"depth":67,"text":1669},{"id":1736,"depth":67,"text":1737,"children":5416},[5417,5418,5419,5420],{"id":1740,"depth":144,"text":1741},{"id":1761,"depth":144,"text":1762},{"id":1770,"depth":144,"text":1771},{"id":1779,"depth":144,"text":1780},{"id":1788,"depth":67,"text":1789,"children":5422},[5423,5424,5425],{"id":1792,"depth":144,"text":1793},{"id":2478,"depth":144,"text":2479},{"id":3894,"depth":144,"text":3895},{"id":4035,"depth":67,"text":4036,"children":5427},[5428,5429],{"id":4039,"depth":144,"text":4040},{"id":5067,"depth":144,"text":5068},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":358,"description":46},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5436,"title":5437,"body":5438,"description":46,"extension":348,"meta":6538,"navigation":350,"path":6539,"seo":6540,"stem":6541,"__hash__":6542},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5439,"toc":6530},[5440,5443,5447,5455,5463,5466,5532,5536,5539,5615,5619,5622,5625,5628,5841,5845,5850,5914,5919,5986,5991,6082,6085,6190,6194,6197,6203,6347,6351,6354,6368,6371,6416,6419,6527],[10,5441,5437],{"id":5442},"_2函数",[365,5444,5446],{"id":5445},"_21函数概述","2.1函数概述",[377,5448,5449,5452],{},[380,5450,5451],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[380,5453,5454],{},"语法：",[49,5456,5461],{"className":5457,"code":5459,"language":5460,"meta":46},[5458],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[28,5462,5459],{"__ignoreMap":46},[14,5464,5465],{},"小案例",[49,5467,5469],{"className":415,"code":5468,"language":417,"meta":46,"style":46},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[28,5470,5471,5476,5500,5504,5521,5528],{"__ignoreMap":46},[57,5472,5473],{"class":59,"line":60},[57,5474,5475],{"class":63},"\u002F\u002Fnum1,num2形参\n",[57,5477,5478,5480,5483,5485,5487,5491,5493,5495,5498],{"class":59,"line":67},[57,5479,429],{"class":136},[57,5481,5482],{"class":70}," add",[57,5484,168],{"class":140},[57,5486,429],{"class":136},[57,5488,5490],{"class":5489},"s4XuR"," num1",[57,5492,273],{"class":140},[57,5494,429],{"class":136},[57,5496,5497],{"class":5489}," num2",[57,5499,238],{"class":140},[57,5501,5502],{"class":59,"line":144},[57,5503,1828],{"class":140},[57,5505,5506,5508,5511,5513,5516,5518],{"class":59,"line":150},[57,5507,2258],{"class":136},[57,5509,5510],{"class":140}," sum",[57,5512,156],{"class":136},[57,5514,5515],{"class":140},"num1",[57,5517,897],{"class":136},[57,5519,5520],{"class":140},"num2;\n",[57,5522,5523,5525],{"class":59,"line":162},[57,5524,4363],{"class":136},[57,5526,5527],{"class":140}," sum;\n",[57,5529,5530],{"class":59,"line":180},[57,5531,1847],{"class":140},[365,5533,5535],{"id":5534},"_22函数调用","2.2函数调用",[14,5537,5538],{},"调用刚刚写的求和函数",[49,5540,5542],{"className":415,"code":5541,"language":417,"meta":46,"style":46},"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",[28,5543,5544,5552,5556,5561,5573,5585,5594,5599,5611],{"__ignoreMap":46},[57,5545,5546,5548,5550],{"class":59,"line":60},[57,5547,429],{"class":136},[57,5549,2246],{"class":70},[57,5551,2249],{"class":140},[57,5553,5554],{"class":59,"line":67},[57,5555,1828],{"class":140},[57,5557,5558],{"class":59,"line":144},[57,5559,5560],{"class":63},"    \u002F\u002Fa,b实参\n",[57,5562,5563,5565,5567,5569,5571],{"class":59,"line":150},[57,5564,2258],{"class":136},[57,5566,1681],{"class":140},[57,5568,156],{"class":136},[57,5570,226],{"class":81},[57,5572,1576],{"class":140},[57,5574,5575,5577,5579,5581,5583],{"class":59,"line":162},[57,5576,2258],{"class":136},[57,5578,3106],{"class":140},[57,5580,156],{"class":136},[57,5582,226],{"class":81},[57,5584,1576],{"class":140},[57,5586,5587,5589,5591],{"class":59,"line":180},[57,5588,2285],{"class":140},[57,5590,1712],{"class":136},[57,5592,5593],{"class":140},"a,b;\n",[57,5595,5596],{"class":59,"line":186},[57,5597,5598],{"class":63},"    \u002F\u002F调用函数时，实参值传给了形参\n",[57,5600,5601,5603,5605,5608],{"class":59,"line":197},[57,5602,1833],{"class":140},[57,5604,1459],{"class":136},[57,5606,5607],{"class":70},"add",[57,5609,5610],{"class":140},"(a,b);\n",[57,5612,5613],{"class":59,"line":241},[57,5614,1847],{"class":140},[365,5616,5618],{"id":5617},"_23值传递","2.3值传递",[14,5620,5621],{},"值传递就是函数调用时实参将数值传给形参",[14,5623,5624],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,5626,5627],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[49,5629,5631],{"className":415,"code":5630,"language":417,"meta":46,"style":46},"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",[28,5632,5633,5655,5659,5672,5689,5707,5718,5727,5736,5749,5765,5781,5790,5794,5802,5806,5818,5830,5837],{"__ignoreMap":46},[57,5634,5635,5638,5641,5643,5645,5647,5649,5651,5653],{"class":59,"line":60},[57,5636,5637],{"class":136},"void",[57,5639,5640],{"class":70}," swap",[57,5642,168],{"class":140},[57,5644,429],{"class":136},[57,5646,5490],{"class":5489},[57,5648,273],{"class":140},[57,5650,429],{"class":136},[57,5652,5497],{"class":5489},[57,5654,238],{"class":140},[57,5656,5657],{"class":59,"line":67},[57,5658,1828],{"class":140},[57,5660,5661,5663,5665,5668,5670],{"class":59,"line":144},[57,5662,1833],{"class":140},[57,5664,1459],{"class":136},[57,5666,5667],{"class":74},"\"交换前：\"",[57,5669,1459],{"class":136},[57,5671,1481],{"class":140},[57,5673,5674,5676,5678,5681,5683,5685,5687],{"class":59,"line":150},[57,5675,1833],{"class":140},[57,5677,1459],{"class":136},[57,5679,5680],{"class":74},"\"num1=\"",[57,5682,1459],{"class":136},[57,5684,5515],{"class":140},[57,5686,1459],{"class":136},[57,5688,1481],{"class":140},[57,5690,5691,5693,5695,5698,5700,5703,5705],{"class":59,"line":162},[57,5692,1833],{"class":140},[57,5694,1459],{"class":136},[57,5696,5697],{"class":74},"\"num2=\"",[57,5699,1459],{"class":136},[57,5701,5702],{"class":140},"num2",[57,5704,1459],{"class":136},[57,5706,1481],{"class":140},[57,5708,5709,5711,5713,5715],{"class":59,"line":180},[57,5710,2258],{"class":136},[57,5712,4528],{"class":140},[57,5714,156],{"class":136},[57,5716,5717],{"class":140},"num1;\n",[57,5719,5720,5723,5725],{"class":59,"line":186},[57,5721,5722],{"class":140},"    num1",[57,5724,156],{"class":136},[57,5726,5520],{"class":140},[57,5728,5729,5732,5734],{"class":59,"line":197},[57,5730,5731],{"class":140},"    num2",[57,5733,156],{"class":136},[57,5735,4553],{"class":140},[57,5737,5738,5740,5742,5745,5747],{"class":59,"line":241},[57,5739,1833],{"class":140},[57,5741,1459],{"class":136},[57,5743,5744],{"class":74},"\"交换后：\"",[57,5746,1459],{"class":136},[57,5748,1481],{"class":140},[57,5750,5751,5753,5755,5757,5759,5761,5763],{"class":59,"line":249},[57,5752,1833],{"class":140},[57,5754,1459],{"class":136},[57,5756,5680],{"class":74},[57,5758,1459],{"class":136},[57,5760,5515],{"class":140},[57,5762,1459],{"class":136},[57,5764,1481],{"class":140},[57,5766,5767,5769,5771,5773,5775,5777,5779],{"class":59,"line":262},[57,5768,1833],{"class":140},[57,5770,1459],{"class":136},[57,5772,5697],{"class":74},[57,5774,1459],{"class":136},[57,5776,5702],{"class":140},[57,5778,1459],{"class":136},[57,5780,1481],{"class":140},[57,5782,5783,5785,5787],{"class":59,"line":281},[57,5784,4363],{"class":136},[57,5786,478],{"class":140},[57,5788,5789],{"class":63},"\u002F\u002F或者不写\n",[57,5791,5792],{"class":59,"line":287},[57,5793,1847],{"class":140},[57,5795,5796,5798,5800],{"class":59,"line":298},[57,5797,429],{"class":136},[57,5799,2246],{"class":70},[57,5801,2249],{"class":140},[57,5803,5804],{"class":59,"line":311},[57,5805,1828],{"class":140},[57,5807,5808,5810,5812,5814,5816],{"class":59,"line":322},[57,5809,2258],{"class":136},[57,5811,1681],{"class":140},[57,5813,156],{"class":136},[57,5815,862],{"class":81},[57,5817,1576],{"class":140},[57,5819,5820,5822,5824,5826,5828],{"class":59,"line":1929},[57,5821,2258],{"class":136},[57,5823,3106],{"class":140},[57,5825,156],{"class":136},[57,5827,1116],{"class":81},[57,5829,1576],{"class":140},[57,5831,5832,5835],{"class":59,"line":1950},[57,5833,5834],{"class":70},"    swap",[57,5836,5610],{"class":140},[57,5838,5839],{"class":59,"line":1955},[57,5840,1847],{"class":140},[365,5842,5844],{"id":5843},"_24函数的常见形式","2.4函数的常见形式",[377,5846,5847],{},[380,5848,5849],{},"无参无返",[49,5851,5853],{"className":415,"code":5852,"language":417,"meta":46,"style":46},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[28,5854,5855,5864,5868,5881,5885,5893,5897,5902,5910],{"__ignoreMap":46},[57,5856,5857,5859,5862],{"class":59,"line":60},[57,5858,5637],{"class":136},[57,5860,5861],{"class":70}," test01",[57,5863,2249],{"class":140},[57,5865,5866],{"class":59,"line":67},[57,5867,1828],{"class":140},[57,5869,5870,5872,5874,5877,5879],{"class":59,"line":144},[57,5871,1833],{"class":140},[57,5873,1459],{"class":136},[57,5875,5876],{"class":74},"\"你好\"",[57,5878,1459],{"class":136},[57,5880,1481],{"class":140},[57,5882,5883],{"class":59,"line":150},[57,5884,1847],{"class":140},[57,5886,5887,5889,5891],{"class":59,"line":162},[57,5888,429],{"class":136},[57,5890,2246],{"class":70},[57,5892,2249],{"class":140},[57,5894,5895],{"class":59,"line":180},[57,5896,1828],{"class":140},[57,5898,5899],{"class":59,"line":186},[57,5900,5901],{"class":63},"    \u002F\u002F函数调用\n",[57,5903,5904,5907],{"class":59,"line":197},[57,5905,5906],{"class":70},"    test01",[57,5908,5909],{"class":140},"();\n",[57,5911,5912],{"class":59,"line":241},[57,5913,1847],{"class":140},[377,5915,5916],{"start":67},[380,5917,5918],{},"有参无返",[49,5920,5922],{"className":415,"code":5921,"language":417,"meta":46,"style":46},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[28,5923,5924,5939,5943,5955,5959,5967,5971,5982],{"__ignoreMap":46},[57,5925,5926,5928,5931,5933,5935,5937],{"class":59,"line":60},[57,5927,5637],{"class":136},[57,5929,5930],{"class":70}," test02",[57,5932,168],{"class":140},[57,5934,429],{"class":136},[57,5936,1681],{"class":5489},[57,5938,238],{"class":140},[57,5940,5941],{"class":59,"line":67},[57,5942,1828],{"class":140},[57,5944,5945,5947,5949,5951,5953],{"class":59,"line":144},[57,5946,1833],{"class":140},[57,5948,1459],{"class":136},[57,5950,5876],{"class":74},[57,5952,1459],{"class":136},[57,5954,1481],{"class":140},[57,5956,5957],{"class":59,"line":150},[57,5958,1847],{"class":140},[57,5960,5961,5963,5965],{"class":59,"line":162},[57,5962,429],{"class":136},[57,5964,2246],{"class":70},[57,5966,2249],{"class":140},[57,5968,5969],{"class":59,"line":180},[57,5970,1828],{"class":140},[57,5972,5973,5976,5978,5980],{"class":59,"line":186},[57,5974,5975],{"class":70},"    test02",[57,5977,168],{"class":140},[57,5979,728],{"class":81},[57,5981,2992],{"class":140},[57,5983,5984],{"class":59,"line":197},[57,5985,1847],{"class":140},[377,5987,5988],{"start":144},[380,5989,5990],{},"无参有返",[49,5992,5994],{"className":415,"code":5993,"language":417,"meta":46,"style":46},"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",[28,5995,5996,6005,6009,6021,6030,6034,6042,6046,6059,6078],{"__ignoreMap":46},[57,5997,5998,6000,6003],{"class":59,"line":60},[57,5999,429],{"class":136},[57,6001,6002],{"class":70}," test03",[57,6004,2249],{"class":140},[57,6006,6007],{"class":59,"line":67},[57,6008,1828],{"class":140},[57,6010,6011,6013,6015,6017,6019],{"class":59,"line":144},[57,6012,1833],{"class":140},[57,6014,1459],{"class":136},[57,6016,5876],{"class":74},[57,6018,1459],{"class":136},[57,6020,1481],{"class":140},[57,6022,6023,6025,6028],{"class":59,"line":150},[57,6024,4363],{"class":136},[57,6026,6027],{"class":81}," 100",[57,6029,1576],{"class":140},[57,6031,6032],{"class":59,"line":162},[57,6033,1847],{"class":140},[57,6035,6036,6038,6040],{"class":59,"line":180},[57,6037,429],{"class":136},[57,6039,2246],{"class":70},[57,6041,2249],{"class":140},[57,6043,6044],{"class":59,"line":186},[57,6045,1828],{"class":140},[57,6047,6048,6050,6052,6054,6057],{"class":59,"line":197},[57,6049,2258],{"class":136},[57,6051,5490],{"class":140},[57,6053,156],{"class":136},[57,6055,6056],{"class":70},"test03",[57,6058,5909],{"class":140},[57,6060,6061,6063,6065,6067,6069,6071,6073,6075],{"class":59,"line":241},[57,6062,1833],{"class":140},[57,6064,1459],{"class":136},[57,6066,5680],{"class":74},[57,6068,1459],{"class":136},[57,6070,5515],{"class":140},[57,6072,1459],{"class":136},[57,6074,1524],{"class":140},[57,6076,6077],{"class":63}," \u002F\u002F100\n",[57,6079,6080],{"class":59,"line":249},[57,6081,1847],{"class":140},[14,6083,6084],{},"4.有参有返",[49,6086,6088],{"className":415,"code":6087,"language":417,"meta":46,"style":46},"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",[28,6089,6090,6105,6109,6122,6128,6132,6141,6145,6157,6171,6186],{"__ignoreMap":46},[57,6091,6092,6094,6097,6099,6101,6103],{"class":59,"line":60},[57,6093,429],{"class":136},[57,6095,6096],{"class":70}," test04",[57,6098,168],{"class":140},[57,6100,429],{"class":136},[57,6102,1681],{"class":5489},[57,6104,238],{"class":140},[57,6106,6107],{"class":59,"line":67},[57,6108,1828],{"class":140},[57,6110,6111,6113,6115,6118,6120],{"class":59,"line":144},[57,6112,1833],{"class":140},[57,6114,1459],{"class":136},[57,6116,6117],{"class":74},"\"hello\"",[57,6119,1459],{"class":136},[57,6121,1481],{"class":140},[57,6123,6124,6126],{"class":59,"line":150},[57,6125,4363],{"class":136},[57,6127,1715],{"class":140},[57,6129,6130],{"class":59,"line":162},[57,6131,1847],{"class":140},[57,6133,6134,6136,6139],{"class":59,"line":180},[57,6135,429],{"class":136},[57,6137,6138],{"class":70}," mian",[57,6140,2249],{"class":140},[57,6142,6143],{"class":59,"line":186},[57,6144,1828],{"class":140},[57,6146,6147,6149,6151,6153,6155],{"class":59,"line":197},[57,6148,2258],{"class":136},[57,6150,3106],{"class":140},[57,6152,156],{"class":136},[57,6154,635],{"class":81},[57,6156,1576],{"class":140},[57,6158,6159,6161,6163,6165,6168],{"class":59,"line":241},[57,6160,2258],{"class":136},[57,6162,3122],{"class":140},[57,6164,156],{"class":136},[57,6166,6167],{"class":70},"test04",[57,6169,6170],{"class":140},"(b);\n",[57,6172,6173,6175,6177,6179,6181,6183],{"class":59,"line":249},[57,6174,1833],{"class":140},[57,6176,1459],{"class":136},[57,6178,705],{"class":140},[57,6180,1459],{"class":136},[57,6182,1524],{"class":140},[57,6184,6185],{"class":63}," \u002F\u002F1\n",[57,6187,6188],{"class":59,"line":262},[57,6189,1847],{"class":140},[365,6191,6193],{"id":6192},"_25函数的声明","2.5函数的声明",[14,6195,6196],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,6198,6199,6200],{},"函数的",[33,6201,6202],{},"声明可以多次，但是函数的定义只能有一次",[49,6204,6206],{"className":415,"code":6205,"language":417,"meta":46,"style":46},"\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",[28,6207,6208,6213,6218,6243,6252,6256,6268,6280,6296,6300,6320,6324,6343],{"__ignoreMap":46},[57,6209,6210],{"class":59,"line":60},[57,6211,6212],{"class":63},"\u002F\u002F函数声明\n",[57,6214,6215],{"class":59,"line":67},[57,6216,6217],{"class":63},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[57,6219,6220,6222,6225,6227,6229,6231,6233,6235,6237,6240],{"class":59,"line":144},[57,6221,429],{"class":136},[57,6223,6224],{"class":70}," max",[57,6226,168],{"class":140},[57,6228,429],{"class":136},[57,6230,1681],{"class":5489},[57,6232,273],{"class":140},[57,6234,429],{"class":136},[57,6236,3106],{"class":5489},[57,6238,6239],{"class":140},");",[57,6241,6242],{"class":63},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[57,6244,6245,6247,6249],{"class":59,"line":150},[57,6246,429],{"class":136},[57,6248,2246],{"class":70},[57,6250,6251],{"class":140},"() \n",[57,6253,6254],{"class":59,"line":162},[57,6255,1828],{"class":140},[57,6257,6258,6260,6262,6264,6266],{"class":59,"line":180},[57,6259,2258],{"class":136},[57,6261,1681],{"class":140},[57,6263,156],{"class":136},[57,6265,862],{"class":81},[57,6267,1576],{"class":140},[57,6269,6270,6272,6274,6276,6278],{"class":59,"line":186},[57,6271,2258],{"class":136},[57,6273,3106],{"class":140},[57,6275,156],{"class":136},[57,6277,1116],{"class":81},[57,6279,1576],{"class":140},[57,6281,6282,6284,6286,6289,6292,6294],{"class":59,"line":197},[57,6283,1833],{"class":140},[57,6285,1459],{"class":136},[57,6287,6288],{"class":70},"max",[57,6290,6291],{"class":140},"(a,b)",[57,6293,1459],{"class":136},[57,6295,1481],{"class":140},[57,6297,6298],{"class":59,"line":241},[57,6299,1847],{"class":140},[57,6301,6302,6304,6306,6308,6310,6312,6314,6316,6318],{"class":59,"line":249},[57,6303,429],{"class":136},[57,6305,6224],{"class":70},[57,6307,168],{"class":140},[57,6309,429],{"class":136},[57,6311,1681],{"class":5489},[57,6313,273],{"class":140},[57,6315,429],{"class":136},[57,6317,3106],{"class":5489},[57,6319,238],{"class":140},[57,6321,6322],{"class":59,"line":262},[57,6323,1828],{"class":140},[57,6325,6326,6328,6330,6332,6334,6336,6338,6340],{"class":59,"line":281},[57,6327,4363],{"class":136},[57,6329,1681],{"class":140},[57,6331,223],{"class":136},[57,6333,680],{"class":140},[57,6335,1401],{"class":136},[57,6337,18],{"class":140},[57,6339,1275],{"class":136},[57,6341,6342],{"class":140},"b;\n",[57,6344,6345],{"class":59,"line":287},[57,6346,1847],{"class":140},[365,6348,6350],{"id":6349},"_26函数的分文件编写","2.6函数的分文件编写",[14,6352,6353],{},"4个步骤：",[1422,6355,6356,6359,6362,6365],{},[380,6357,6358],{},"1.创建后缀名为.h的头文件",[380,6360,6361],{},"2.创建后缀名为.cpp的源文件",[380,6363,6364],{},"3.在头文件中写函数的定义",[380,6366,6367],{},"4.在源文件中写函数的定义\n示例：",[14,6369,6370],{},"头文件：swap.h",[49,6372,6374],{"className":415,"code":6373,"language":417,"meta":46,"style":46},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[28,6375,6376,6382,6392,6396],{"__ignoreMap":46},[57,6377,6378,6380],{"class":59,"line":60},[57,6379,2223],{"class":136},[57,6381,2226],{"class":74},[57,6383,6384,6386,6388,6390],{"class":59,"line":67},[57,6385,2231],{"class":136},[57,6387,2234],{"class":136},[57,6389,2237],{"class":70},[57,6391,1576],{"class":140},[57,6393,6394],{"class":59,"line":144},[57,6395,6212],{"class":63},[57,6397,6398,6400,6402,6404,6406,6408,6410,6412,6414],{"class":59,"line":150},[57,6399,5637],{"class":136},[57,6401,5640],{"class":70},[57,6403,168],{"class":140},[57,6405,429],{"class":136},[57,6407,1681],{"class":5489},[57,6409,273],{"class":140},[57,6411,429],{"class":136},[57,6413,3106],{"class":5489},[57,6415,2992],{"class":140},[14,6417,6418],{},"源文件：swap.cpp",[49,6420,6422],{"className":415,"code":6421,"language":417,"meta":46,"style":46},"#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",[28,6423,6424,6431,6436,6456,6460,6471,6480,6489,6506,6523],{"__ignoreMap":46},[57,6425,6426,6428],{"class":59,"line":60},[57,6427,2223],{"class":136},[57,6429,6430],{"class":74}," \"swap.h\"\n",[57,6432,6433],{"class":59,"line":67},[57,6434,6435],{"class":63},"\u002F\u002F函数的定义\n",[57,6437,6438,6440,6442,6444,6446,6448,6450,6452,6454],{"class":59,"line":144},[57,6439,5637],{"class":136},[57,6441,5640],{"class":70},[57,6443,168],{"class":140},[57,6445,429],{"class":136},[57,6447,1681],{"class":5489},[57,6449,273],{"class":140},[57,6451,429],{"class":136},[57,6453,3106],{"class":5489},[57,6455,238],{"class":140},[57,6457,6458],{"class":59,"line":150},[57,6459,1828],{"class":140},[57,6461,6462,6464,6466,6468],{"class":59,"line":162},[57,6463,2258],{"class":136},[57,6465,4528],{"class":140},[57,6467,156],{"class":136},[57,6469,6470],{"class":140},"a;\n",[57,6472,6473,6476,6478],{"class":59,"line":180},[57,6474,6475],{"class":140},"    a",[57,6477,156],{"class":136},[57,6479,6342],{"class":140},[57,6481,6482,6485,6487],{"class":59,"line":186},[57,6483,6484],{"class":140},"    b",[57,6486,156],{"class":136},[57,6488,4553],{"class":140},[57,6490,6491,6493,6495,6498,6500,6502,6504],{"class":59,"line":197},[57,6492,1833],{"class":140},[57,6494,1459],{"class":136},[57,6496,6497],{"class":74},"\"a=\"",[57,6499,1459],{"class":136},[57,6501,18],{"class":140},[57,6503,1459],{"class":136},[57,6505,1481],{"class":140},[57,6507,6508,6510,6512,6515,6517,6519,6521],{"class":59,"line":241},[57,6509,1833],{"class":140},[57,6511,1459],{"class":136},[57,6513,6514],{"class":74},"\"b=\"",[57,6516,1459],{"class":136},[57,6518,680],{"class":140},[57,6520,1459],{"class":136},[57,6522,1481],{"class":140},[57,6524,6525],{"class":59,"line":249},[57,6526,1847],{"class":140},[342,6528,6529],{},"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":46,"searchDepth":67,"depth":67,"links":6531},[6532,6533,6534,6535,6536,6537],{"id":5445,"depth":67,"text":5446},{"id":5534,"depth":67,"text":5535},{"id":5617,"depth":67,"text":5618},{"id":5843,"depth":67,"text":5844},{"id":6192,"depth":67,"text":6193},{"id":6349,"depth":67,"text":6350},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5437,"description":46},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6544,"title":6545,"body":6546,"description":6553,"extension":348,"meta":7958,"navigation":350,"path":7959,"seo":7960,"stem":7961,"__hash__":7962},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6547,"toc":7948},[6548,6551,6554,6558,6720,6724,6727,6730,6733,6736,6876,6880,6883,6886,6889,6954,6958,6963,7030,7033,7037,7040,7051,7056,7076,7079,7084,7103,7106,7110,7129,7132,7136,7371,7375,7378,7381,7384,7546,7549,7553,7556,7562,7945],[10,6549,6545],{"id":6550},"_3指针",[14,6552,6553],{},"通过指针保存一个地址，指针就是个地址",[365,6555,6557],{"id":6556},"_31定义指针","3.1定义指针",[49,6559,6561],{"className":415,"code":6560,"language":417,"meta":46,"style":46},"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",[28,6562,6563,6571,6575,6580,6592,6597,6605,6615,6633,6653,6657,6662,6667,6672,6686,6702,6716],{"__ignoreMap":46},[57,6564,6565,6567,6569],{"class":59,"line":60},[57,6566,429],{"class":136},[57,6568,2246],{"class":70},[57,6570,2249],{"class":140},[57,6572,6573],{"class":59,"line":67},[57,6574,1828],{"class":140},[57,6576,6577],{"class":59,"line":144},[57,6578,6579],{"class":63},"    \u002F\u002F1.定义指针\n",[57,6581,6582,6584,6586,6588,6590],{"class":59,"line":150},[57,6583,2258],{"class":136},[57,6585,1681],{"class":140},[57,6587,156],{"class":136},[57,6589,862],{"class":81},[57,6591,1576],{"class":140},[57,6593,6594],{"class":59,"line":162},[57,6595,6596],{"class":63},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[57,6598,6599,6602],{"class":59,"line":180},[57,6600,6601],{"class":136},"    int*",[57,6603,6604],{"class":140},"p;\n",[57,6606,6607,6610,6613],{"class":59,"line":186},[57,6608,6609],{"class":140},"    p",[57,6611,6612],{"class":136},"=&",[57,6614,6470],{"class":140},[57,6616,6617,6619,6621,6624,6627,6629,6631],{"class":59,"line":197},[57,6618,1833],{"class":140},[57,6620,1459],{"class":136},[57,6622,6623],{"class":74},"\"a的地址为：\"",[57,6625,6626],{"class":136},"\u003C\u003C&",[57,6628,18],{"class":140},[57,6630,1459],{"class":136},[57,6632,1481],{"class":140},[57,6634,6635,6637,6639,6642,6644,6646,6648,6650],{"class":59,"line":241},[57,6636,1833],{"class":140},[57,6638,1459],{"class":136},[57,6640,6641],{"class":74},"\"指针p为：\"",[57,6643,1459],{"class":136},[57,6645,14],{"class":140},[57,6647,1459],{"class":136},[57,6649,1524],{"class":140},[57,6651,6652],{"class":63},"\u002F\u002F指针p表示的就是a的地址\n",[57,6654,6655],{"class":59,"line":249},[57,6656,2673],{"emptyLinePlaceholder":350},[57,6658,6659],{"class":59,"line":262},[57,6660,6661],{"class":63},"    \u002F\u002F2.使用指针\n",[57,6663,6664],{"class":59,"line":281},[57,6665,6666],{"class":63},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[57,6668,6669],{"class":59,"line":287},[57,6670,6671],{"class":63},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[57,6673,6674,6677,6679,6681,6684],{"class":59,"line":298},[57,6675,6676],{"class":136},"    *",[57,6678,14],{"class":140},[57,6680,156],{"class":136},[57,6682,6683],{"class":81},"1000",[57,6685,1576],{"class":140},[57,6687,6688,6690,6693,6695,6697,6699],{"class":59,"line":311},[57,6689,1833],{"class":140},[57,6691,6692],{"class":136},"\u003C\u003C*",[57,6694,14],{"class":140},[57,6696,1459],{"class":136},[57,6698,1524],{"class":140},[57,6700,6701],{"class":63},"\u002F\u002F1000\n",[57,6703,6704,6706,6708,6710,6712,6714],{"class":59,"line":322},[57,6705,1833],{"class":140},[57,6707,1459],{"class":136},[57,6709,18],{"class":140},[57,6711,1459],{"class":136},[57,6713,1524],{"class":140},[57,6715,6701],{"class":63},[57,6717,6718],{"class":59,"line":1929},[57,6719,1847],{"class":140},[365,6721,6723],{"id":6722},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,6725,6726],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,6728,6729],{},"在32位操作系统下：占用4个字节空间",[14,6731,6732],{},"在64位操作系统下：占用8个字节空间",[14,6734,6735],{},"上方是不管啥数据类型的",[49,6737,6739],{"className":415,"code":6738,"language":417,"meta":46,"style":46},"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",[28,6740,6741,6749,6753,6758,6770,6775,6780,6785,6798,6820,6846,6872],{"__ignoreMap":46},[57,6742,6743,6745,6747],{"class":59,"line":60},[57,6744,429],{"class":136},[57,6746,2246],{"class":70},[57,6748,2249],{"class":140},[57,6750,6751],{"class":59,"line":67},[57,6752,1828],{"class":140},[57,6754,6755],{"class":59,"line":144},[57,6756,6757],{"class":63},"    \u002F\u002F指针所占内存空间\n",[57,6759,6760,6762,6764,6766,6768],{"class":59,"line":150},[57,6761,2258],{"class":136},[57,6763,1681],{"class":140},[57,6765,156],{"class":136},[57,6767,862],{"class":81},[57,6769,1576],{"class":140},[57,6771,6772],{"class":59,"line":162},[57,6773,6774],{"class":63},"    \u002F\u002Fint *p;\n",[57,6776,6777],{"class":59,"line":180},[57,6778,6779],{"class":63},"    \u002F\u002Fp=&a;\n",[57,6781,6782],{"class":59,"line":186},[57,6783,6784],{"class":63},"    \u002F\u002F上述可以写为以下：\n",[57,6786,6787,6789,6792,6794,6796],{"class":59,"line":197},[57,6788,2258],{"class":136},[57,6790,6791],{"class":136}," *",[57,6793,14],{"class":140},[57,6795,6612],{"class":136},[57,6797,6470],{"class":140},[57,6799,6800,6803,6805,6808,6810,6813,6815,6817],{"class":59,"line":241},[57,6801,6802],{"class":140},"    cout ",[57,6804,1459],{"class":136},[57,6806,6807],{"class":74},"\"sizeof(int *)\"",[57,6809,1655],{"class":136},[57,6811,6812],{"class":140},"(p)",[57,6814,1459],{"class":136},[57,6816,1524],{"class":140},[57,6818,6819],{"class":63},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[57,6821,6822,6824,6826,6828,6830,6832,6834,6836,6838,6840,6843],{"class":59,"line":249},[57,6823,6802],{"class":140},[57,6825,1459],{"class":136},[57,6827,6807],{"class":74},[57,6829,1655],{"class":136},[57,6831,168],{"class":140},[57,6833,429],{"class":136},[57,6835,6791],{"class":136},[57,6837,845],{"class":140},[57,6839,1459],{"class":136},[57,6841,6842],{"class":140},"endl",[57,6844,6845],{"class":63},"  \u002F\u002F4字节(32位的话)\n",[57,6847,6848,6850,6852,6855,6857,6859,6861,6863,6865,6867,6869],{"class":59,"line":262},[57,6849,6802],{"class":140},[57,6851,1459],{"class":136},[57,6853,6854],{"class":74},"\"sizeof(char *)\"",[57,6856,1655],{"class":136},[57,6858,168],{"class":140},[57,6860,517],{"class":136},[57,6862,6791],{"class":136},[57,6864,845],{"class":140},[57,6866,1459],{"class":136},[57,6868,1524],{"class":140},[57,6870,6871],{"class":63}," \u002F\u002F4字节(32位的话)\n",[57,6873,6874],{"class":59,"line":281},[57,6875,1847],{"class":140},[365,6877,6879],{"id":6878},"_33空指针","3.3空指针",[14,6881,6882],{},"空指针：指针变量指向内存中编号为0的空间",[14,6884,6885],{},"用途：初始化指针变量",[14,6887,6888],{},"注意：空指针指向的内存是不可以访问的",[49,6890,6892],{"className":415,"code":6891,"language":417,"meta":46,"style":46},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[28,6893,6894,6902,6906,6911,6925,6930,6945,6950],{"__ignoreMap":46},[57,6895,6896,6898,6900],{"class":59,"line":60},[57,6897,429],{"class":136},[57,6899,2246],{"class":70},[57,6901,2249],{"class":140},[57,6903,6904],{"class":59,"line":67},[57,6905,1828],{"class":140},[57,6907,6908],{"class":59,"line":144},[57,6909,6910],{"class":63},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[57,6912,6913,6915,6917,6919,6921,6923],{"class":59,"line":150},[57,6914,2258],{"class":136},[57,6916,6791],{"class":136},[57,6918,14],{"class":140},[57,6920,156],{"class":136},[57,6922,2665],{"class":81},[57,6924,1576],{"class":140},[57,6926,6927],{"class":59,"line":162},[57,6928,6929],{"class":63},"    \u002F\u002F2.空指针不能进行访问\n",[57,6931,6932,6934,6936,6938,6940,6942],{"class":59,"line":180},[57,6933,6676],{"class":136},[57,6935,14],{"class":140},[57,6937,156],{"class":136},[57,6939,728],{"class":81},[57,6941,478],{"class":140},[57,6943,6944],{"class":63},"\u002F\u002F直接报错，压根不能访问\n",[57,6946,6947],{"class":59,"line":186},[57,6948,6949],{"class":63},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[57,6951,6952],{"class":59,"line":197},[57,6953,1847],{"class":140},[365,6955,6957],{"id":6956},"_34野指针","3.4野指针",[14,6959,6960],{},[33,6961,6962],{},"指针变量指向非法的内存空间",[49,6964,6966],{"className":415,"code":6965,"language":417,"meta":46,"style":46},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[28,6967,6968,6976,6980,7009,7014,7026],{"__ignoreMap":46},[57,6969,6970,6972,6974],{"class":59,"line":60},[57,6971,429],{"class":136},[57,6973,2246],{"class":70},[57,6975,2249],{"class":140},[57,6977,6978],{"class":59,"line":67},[57,6979,1828],{"class":140},[57,6981,6982,6984,6986,6988,6990,6992,6994,6996,6998,7001,7004,7006],{"class":59,"line":144},[57,6983,2258],{"class":136},[57,6985,6791],{"class":136},[57,6987,14],{"class":140},[57,6989,156],{"class":136},[57,6991,168],{"class":140},[57,6993,429],{"class":136},[57,6995,6791],{"class":136},[57,6997,845],{"class":140},[57,6999,7000],{"class":136},"0x",[57,7002,7003],{"class":81},"1100",[57,7005,478],{"class":140},[57,7007,7008],{"class":63}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[57,7010,7011],{"class":59,"line":150},[57,7012,7013],{"class":63},"    \u002F\u002F访问野指针报错\n",[57,7015,7016,7018,7020,7022,7024],{"class":59,"line":162},[57,7017,1833],{"class":140},[57,7019,6692],{"class":136},[57,7021,14],{"class":140},[57,7023,1459],{"class":136},[57,7025,1481],{"class":140},[57,7027,7028],{"class":59,"line":180},[57,7029,1847],{"class":140},[14,7031,7032],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[365,7034,7036],{"id":7035},"_35const修饰指针","3.5const修饰指针",[14,7038,7039],{},"三种情况：",[1422,7041,7042,7045,7048],{},[380,7043,7044],{},"const修饰指针 常量指针",[380,7046,7047],{},"const修饰常量 指针常量",[380,7049,7050],{},"const即修饰指针，又修饰常量",[377,7052,7053],{},[380,7054,7055],{},"常量指针",[49,7057,7059],{"className":415,"code":7058,"language":417,"meta":46,"style":46},"const int *p=&a;\n",[28,7060,7061],{"__ignoreMap":46},[57,7062,7063,7066,7068,7070,7072,7074],{"class":59,"line":60},[57,7064,7065],{"class":136},"const",[57,7067,2655],{"class":136},[57,7069,6791],{"class":136},[57,7071,14],{"class":140},[57,7073,6612],{"class":136},[57,7075,6470],{"class":140},[14,7077,7078],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[377,7080,7081],{"start":67},[380,7082,7083],{},"指针常量",[49,7085,7087],{"className":415,"code":7086,"language":417,"meta":46,"style":46},"int *const p=&a;\n",[28,7088,7089],{"__ignoreMap":46},[57,7090,7091,7093,7096,7099,7101],{"class":59,"line":60},[57,7092,429],{"class":136},[57,7094,7095],{"class":136}," *const",[57,7097,7098],{"class":140}," p",[57,7100,6612],{"class":136},[57,7102,6470],{"class":140},[14,7104,7105],{},"指针的指向不可以改，指针指向的值可以改",[377,7107,7108],{"start":144},[380,7109,7050],{},[49,7111,7113],{"className":415,"code":7112,"language":417,"meta":46,"style":46},"const int *const p=&a;\n",[28,7114,7115],{"__ignoreMap":46},[57,7116,7117,7119,7121,7123,7125,7127],{"class":59,"line":60},[57,7118,7065],{"class":136},[57,7120,2655],{"class":136},[57,7122,7095],{"class":136},[57,7124,7098],{"class":140},[57,7126,6612],{"class":136},[57,7128,6470],{"class":140},[14,7130,7131],{},"指针的指向和指针指向的值都不可以改变",[365,7133,7135],{"id":7134},"_36指针和数组","3.6指针和数组",[49,7137,7139],{"className":415,"code":7138,"language":417,"meta":46,"style":46},"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",[28,7140,7141,7149,7153,7158,7212,7233,7249,7265,7276,7293,7298,7312,7338,7342,7354,7363,7367],{"__ignoreMap":46},[57,7142,7143,7145,7147],{"class":59,"line":60},[57,7144,429],{"class":136},[57,7146,2246],{"class":70},[57,7148,2249],{"class":140},[57,7150,7151],{"class":59,"line":67},[57,7152,1828],{"class":140},[57,7154,7155],{"class":59,"line":144},[57,7156,7157],{"class":63},"    \u002F\u002F利用指针访问数组中的元素\n",[57,7159,7160,7162,7164,7166,7168,7170,7172,7174,7176,7178,7180,7182,7184,7186,7188,7190,7192,7194,7196,7198,7200,7202,7204,7206,7208,7210],{"class":59,"line":150},[57,7161,2258],{"class":136},[57,7163,4235],{"class":140},[57,7165,862],{"class":81},[57,7167,1356],{"class":140},[57,7169,156],{"class":136},[57,7171,1312],{"class":140},[57,7173,635],{"class":81},[57,7175,273],{"class":140},[57,7177,498],{"class":81},[57,7179,273],{"class":140},[57,7181,270],{"class":81},[57,7183,273],{"class":140},[57,7185,710],{"class":81},[57,7187,273],{"class":140},[57,7189,736],{"class":81},[57,7191,273],{"class":140},[57,7193,761],{"class":81},[57,7195,273],{"class":140},[57,7197,786],{"class":81},[57,7199,273],{"class":140},[57,7201,811],{"class":81},[57,7203,273],{"class":140},[57,7205,836],{"class":81},[57,7207,273],{"class":140},[57,7209,862],{"class":81},[57,7211,4268],{"class":140},[57,7213,7214,7216,7218,7221,7223,7225,7227,7229,7231],{"class":59,"line":162},[57,7215,1833],{"class":140},[57,7217,1459],{"class":136},[57,7219,7220],{"class":74},"\"数组的第一个元素为：\"",[57,7222,1459],{"class":136},[57,7224,4179],{"class":140},[57,7226,226],{"class":81},[57,7228,1356],{"class":140},[57,7230,1459],{"class":136},[57,7232,1481],{"class":140},[57,7234,7235,7237,7239,7241,7243,7246],{"class":59,"line":180},[57,7236,2258],{"class":136},[57,7238,6791],{"class":136},[57,7240,14],{"class":140},[57,7242,156],{"class":136},[57,7244,7245],{"class":140},"arr;",[57,7247,7248],{"class":63},"\u002F\u002F注意数才要加取地址符号&\n",[57,7250,7251,7253,7255,7257,7259,7261,7263],{"class":59,"line":186},[57,7252,1833],{"class":140},[57,7254,1459],{"class":136},[57,7256,7220],{"class":74},[57,7258,6692],{"class":136},[57,7260,14],{"class":140},[57,7262,1459],{"class":136},[57,7264,1481],{"class":140},[57,7266,7267,7269,7271,7273],{"class":59,"line":197},[57,7268,6609],{"class":140},[57,7270,2565],{"class":136},[57,7272,478],{"class":140},[57,7274,7275],{"class":63}," \u002F\u002F让指针向后偏移4个字节\n",[57,7277,7278,7280,7282,7285,7287,7289,7291],{"class":59,"line":241},[57,7279,1833],{"class":140},[57,7281,1459],{"class":136},[57,7283,7284],{"class":74},"\"数组的第二个元素为：\"",[57,7286,6692],{"class":136},[57,7288,14],{"class":140},[57,7290,1459],{"class":136},[57,7292,1481],{"class":140},[57,7294,7295],{"class":59,"line":249},[57,7296,7297],{"class":63},"    \u002F\u002F利用指针遍历数组\n",[57,7299,7300,7302,7304,7307,7309],{"class":59,"line":262},[57,7301,2258],{"class":136},[57,7303,6791],{"class":136},[57,7305,7306],{"class":140},"p2",[57,7308,156],{"class":136},[57,7310,7311],{"class":140},"arr;\n",[57,7313,7314,7316,7318,7320,7322,7324,7326,7328,7330,7332,7334,7336],{"class":59,"line":281},[57,7315,3474],{"class":136},[57,7317,1934],{"class":140},[57,7319,429],{"class":136},[57,7321,3305],{"class":140},[57,7323,156],{"class":136},[57,7325,226],{"class":81},[57,7327,3312],{"class":140},[57,7329,1326],{"class":136},[57,7331,862],{"class":81},[57,7333,3312],{"class":140},[57,7335,2565],{"class":136},[57,7337,238],{"class":140},[57,7339,7340],{"class":59,"line":287},[57,7341,2303],{"class":140},[57,7343,7344,7346,7348,7350,7352],{"class":59,"line":298},[57,7345,3724],{"class":140},[57,7347,6692],{"class":136},[57,7349,7306],{"class":140},[57,7351,1459],{"class":136},[57,7353,1481],{"class":140},[57,7355,7356,7359,7361],{"class":59,"line":311},[57,7357,7358],{"class":140},"        p2",[57,7360,2565],{"class":136},[57,7362,1576],{"class":140},[57,7364,7365],{"class":59,"line":322},[57,7366,2460],{"class":140},[57,7368,7369],{"class":59,"line":1929},[57,7370,1847],{"class":140},[365,7372,7374],{"id":7373},"_37指针和函数","3.7指针和函数",[14,7376,7377],{},"利用指针做函数参数，可以修改实参的值",[14,7379,7380],{},"值传递：只改变形参，不改变实参",[14,7382,7383],{},"地址传递：",[49,7385,7387],{"className":415,"code":7386,"language":417,"meta":46,"style":46},"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",[28,7388,7389,7414,7418,7430,7441,7451,7455,7463,7467,7479,7491,7496,7512,7527,7542],{"__ignoreMap":46},[57,7390,7391,7393,7395,7397,7399,7401,7404,7406,7408,7410,7412],{"class":59,"line":60},[57,7392,5637],{"class":136},[57,7394,5640],{"class":70},[57,7396,168],{"class":140},[57,7398,429],{"class":136},[57,7400,6791],{"class":136},[57,7402,7403],{"class":5489},"p1",[57,7405,273],{"class":140},[57,7407,429],{"class":136},[57,7409,6791],{"class":136},[57,7411,7306],{"class":5489},[57,7413,238],{"class":140},[57,7415,7416],{"class":59,"line":67},[57,7417,1828],{"class":140},[57,7419,7420,7422,7424,7427],{"class":59,"line":144},[57,7421,2258],{"class":136},[57,7423,4528],{"class":140},[57,7425,7426],{"class":136},"=*",[57,7428,7429],{"class":140},"p1;\n",[57,7431,7432,7434,7436,7438],{"class":59,"line":150},[57,7433,6676],{"class":136},[57,7435,7403],{"class":140},[57,7437,7426],{"class":136},[57,7439,7440],{"class":140},"p2;\n",[57,7442,7443,7445,7447,7449],{"class":59,"line":162},[57,7444,6676],{"class":136},[57,7446,7306],{"class":140},[57,7448,156],{"class":136},[57,7450,4553],{"class":140},[57,7452,7453],{"class":59,"line":180},[57,7454,1847],{"class":140},[57,7456,7457,7459,7461],{"class":59,"line":186},[57,7458,429],{"class":136},[57,7460,2246],{"class":70},[57,7462,2249],{"class":140},[57,7464,7465],{"class":59,"line":197},[57,7466,1828],{"class":140},[57,7468,7469,7471,7473,7475,7477],{"class":59,"line":241},[57,7470,2258],{"class":136},[57,7472,1681],{"class":140},[57,7474,156],{"class":136},[57,7476,862],{"class":81},[57,7478,1576],{"class":140},[57,7480,7481,7483,7485,7487,7489],{"class":59,"line":249},[57,7482,2258],{"class":136},[57,7484,3106],{"class":140},[57,7486,156],{"class":136},[57,7488,1116],{"class":81},[57,7490,1576],{"class":140},[57,7492,7493],{"class":59,"line":262},[57,7494,7495],{"class":63},"    \u002F\u002F地址传递\n",[57,7497,7498,7500,7502,7504,7507,7509],{"class":59,"line":281},[57,7499,5834],{"class":70},[57,7501,168],{"class":140},[57,7503,770],{"class":136},[57,7505,7506],{"class":140},"a,",[57,7508,770],{"class":136},[57,7510,7511],{"class":140},"b);\n",[57,7513,7514,7516,7518,7520,7522,7524],{"class":59,"line":287},[57,7515,1833],{"class":140},[57,7517,1459],{"class":136},[57,7519,18],{"class":140},[57,7521,1459],{"class":136},[57,7523,1524],{"class":140},[57,7525,7526],{"class":63},"\u002F\u002F20\n",[57,7528,7529,7531,7533,7535,7537,7539],{"class":59,"line":298},[57,7530,1833],{"class":140},[57,7532,1459],{"class":136},[57,7534,680],{"class":140},[57,7536,1459],{"class":136},[57,7538,1524],{"class":140},[57,7540,7541],{"class":63},"\u002F\u002F10\n",[57,7543,7544],{"class":59,"line":311},[57,7545,1847],{"class":140},[14,7547,7548],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[365,7550,7552],{"id":7551},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,7554,7555],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,7557,7558,7559,7561],{},"例如数组：int arr",[57,7560,862],{},"={4,3,6,9,1,2,10,8,7,5}",[49,7563,7565],{"className":415,"code":7564,"language":417,"meta":46,"style":46},"#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",[28,7566,7567,7573,7583,7607,7611,7642,7646,7680,7684,7702,7706,7717,7732,7747,7751,7755,7759,7763,7767,7775,7779,7784,7838,7850,7862,7867,7875,7879,7884,7909,7913,7928,7937,7941],{"__ignoreMap":46},[57,7568,7569,7571],{"class":59,"line":60},[57,7570,2223],{"class":136},[57,7572,2226],{"class":74},[57,7574,7575,7577,7579,7581],{"class":59,"line":67},[57,7576,2231],{"class":136},[57,7578,2234],{"class":136},[57,7580,2237],{"class":70},[57,7582,1576],{"class":140},[57,7584,7585,7587,7590,7592,7594,7596,7598,7600,7602,7605],{"class":59,"line":144},[57,7586,5637],{"class":136},[57,7588,7589],{"class":70}," bubbleSort",[57,7591,168],{"class":140},[57,7593,429],{"class":136},[57,7595,6791],{"class":136},[57,7597,14],{"class":5489},[57,7599,273],{"class":140},[57,7601,429],{"class":136},[57,7603,7604],{"class":5489}," len",[57,7606,238],{"class":140},[57,7608,7609],{"class":59,"line":150},[57,7610,1828],{"class":140},[57,7612,7613,7615,7617,7619,7621,7623,7625,7627,7629,7632,7634,7636,7638,7640],{"class":59,"line":162},[57,7614,3474],{"class":136},[57,7616,168],{"class":140},[57,7618,429],{"class":136},[57,7620,3305],{"class":140},[57,7622,156],{"class":136},[57,7624,226],{"class":81},[57,7626,3312],{"class":140},[57,7628,1326],{"class":136},[57,7630,7631],{"class":140},"len",[57,7633,948],{"class":136},[57,7635,635],{"class":81},[57,7637,3312],{"class":140},[57,7639,2565],{"class":136},[57,7641,238],{"class":140},[57,7643,7644],{"class":59,"line":180},[57,7645,2303],{"class":140},[57,7647,7648,7650,7652,7654,7656,7658,7660,7662,7664,7666,7668,7670,7672,7674,7676,7678],{"class":59,"line":186},[57,7649,3676],{"class":136},[57,7651,168],{"class":140},[57,7653,429],{"class":136},[57,7655,3683],{"class":140},[57,7657,156],{"class":136},[57,7659,226],{"class":81},[57,7661,3690],{"class":140},[57,7663,1326],{"class":136},[57,7665,7631],{"class":140},[57,7667,948],{"class":136},[57,7669,857],{"class":140},[57,7671,948],{"class":136},[57,7673,635],{"class":81},[57,7675,3690],{"class":140},[57,7677,2565],{"class":136},[57,7679,238],{"class":140},[57,7681,7682],{"class":59,"line":197},[57,7683,2783],{"class":140},[57,7685,7686,7688,7691,7693,7696,7698,7700],{"class":59,"line":241},[57,7687,4915],{"class":136},[57,7689,7690],{"class":140},"(p[j]",[57,7692,223],{"class":136},[57,7694,7695],{"class":140},"p[j",[57,7697,897],{"class":136},[57,7699,635],{"class":81},[57,7701,4930],{"class":140},[57,7703,7704],{"class":59,"line":249},[57,7705,4935],{"class":140},[57,7707,7708,7710,7712,7714],{"class":59,"line":262},[57,7709,4940],{"class":136},[57,7711,4528],{"class":140},[57,7713,156],{"class":136},[57,7715,7716],{"class":140},"p[j];\n",[57,7718,7719,7722,7724,7726,7728,7730],{"class":59,"line":281},[57,7720,7721],{"class":140},"                p[j]",[57,7723,156],{"class":136},[57,7725,7695],{"class":140},[57,7727,897],{"class":136},[57,7729,635],{"class":81},[57,7731,4963],{"class":140},[57,7733,7734,7737,7739,7741,7743,7745],{"class":59,"line":287},[57,7735,7736],{"class":140},"                p[j",[57,7738,897],{"class":136},[57,7740,635],{"class":81},[57,7742,1356],{"class":140},[57,7744,156],{"class":136},[57,7746,4553],{"class":140},[57,7748,7749],{"class":59,"line":298},[57,7750,4983],{"class":140},[57,7752,7753],{"class":59,"line":311},[57,7754,2802],{"class":140},[57,7756,7757],{"class":59,"line":322},[57,7758,2460],{"class":140},[57,7760,7761],{"class":59,"line":1929},[57,7762,1847],{"class":140},[57,7764,7765],{"class":59,"line":1950},[57,7766,2673],{"emptyLinePlaceholder":350},[57,7768,7769,7771,7773],{"class":59,"line":1955},[57,7770,429],{"class":136},[57,7772,2246],{"class":70},[57,7774,2249],{"class":140},[57,7776,7777],{"class":59,"line":1969},[57,7778,1828],{"class":140},[57,7780,7781],{"class":59,"line":1974},[57,7782,7783],{"class":63},"    \u002F\u002F 1.创建数组\n",[57,7785,7786,7788,7790,7792,7794,7796,7798,7800,7802,7804,7806,7808,7810,7812,7814,7816,7818,7820,7822,7824,7826,7828,7830,7832,7834,7836],{"class":59,"line":2001},[57,7787,2258],{"class":136},[57,7789,4235],{"class":140},[57,7791,862],{"class":81},[57,7793,1356],{"class":140},[57,7795,156],{"class":136},[57,7797,1312],{"class":140},[57,7799,710],{"class":81},[57,7801,273],{"class":140},[57,7803,270],{"class":81},[57,7805,273],{"class":140},[57,7807,761],{"class":81},[57,7809,273],{"class":140},[57,7811,836],{"class":81},[57,7813,273],{"class":140},[57,7815,635],{"class":81},[57,7817,273],{"class":140},[57,7819,498],{"class":81},[57,7821,273],{"class":140},[57,7823,862],{"class":81},[57,7825,273],{"class":140},[57,7827,811],{"class":81},[57,7829,273],{"class":140},[57,7831,786],{"class":81},[57,7833,273],{"class":140},[57,7835,736],{"class":81},[57,7837,4268],{"class":140},[57,7839,7840,7842,7844,7846,7848],{"class":59,"line":2006},[57,7841,2258],{"class":136},[57,7843,7604],{"class":140},[57,7845,156],{"class":136},[57,7847,862],{"class":81},[57,7849,1576],{"class":140},[57,7851,7852,7854,7856,7858,7860],{"class":59,"line":2023},[57,7853,2258],{"class":136},[57,7855,6791],{"class":136},[57,7857,14],{"class":140},[57,7859,156],{"class":136},[57,7861,7311],{"class":140},[57,7863,7864],{"class":59,"line":2028},[57,7865,7866],{"class":63},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[57,7868,7869,7872],{"class":59,"line":2033},[57,7870,7871],{"class":70},"    bubbleSort",[57,7873,7874],{"class":140},"(p,len);\n",[57,7876,7877],{"class":59,"line":2038},[57,7878,2673],{"emptyLinePlaceholder":350},[57,7880,7881],{"class":59,"line":2052},[57,7882,7883],{"class":63},"    \u002F\u002F 3.打印排序后的数组\n",[57,7885,7886,7888,7890,7892,7894,7896,7898,7900,7902,7905,7907],{"class":59,"line":2057},[57,7887,3474],{"class":136},[57,7889,1934],{"class":140},[57,7891,429],{"class":136},[57,7893,3305],{"class":140},[57,7895,156],{"class":136},[57,7897,226],{"class":81},[57,7899,3487],{"class":140},[57,7901,1326],{"class":136},[57,7903,7904],{"class":140},"len; i",[57,7906,2565],{"class":136},[57,7908,238],{"class":140},[57,7910,7911],{"class":59,"line":2850},[57,7912,2303],{"class":140},[57,7914,7915,7917,7919,7921,7923,7926],{"class":59,"line":2864},[57,7916,3724],{"class":140},[57,7918,6692],{"class":136},[57,7920,14],{"class":140},[57,7922,1459],{"class":136},[57,7924,7925],{"class":74},"\"\"",[57,7927,1576],{"class":140},[57,7929,7930,7933,7935],{"class":59,"line":2872},[57,7931,7932],{"class":140},"        p",[57,7934,2565],{"class":136},[57,7936,1576],{"class":140},[57,7938,7939],{"class":59,"line":2877},[57,7940,2460],{"class":140},[57,7942,7943],{"class":59,"line":2883},[57,7944,1847],{"class":140},[342,7946,7947],{},"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":46,"searchDepth":67,"depth":67,"links":7949},[7950,7951,7952,7953,7954,7955,7956,7957],{"id":6556,"depth":67,"text":6557},{"id":6722,"depth":67,"text":6723},{"id":6878,"depth":67,"text":6879},{"id":6956,"depth":67,"text":6957},{"id":7035,"depth":67,"text":7036},{"id":7134,"depth":67,"text":7135},{"id":7373,"depth":67,"text":7374},{"id":7551,"depth":67,"text":7552},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6545,"description":6553},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7964,"title":7965,"body":7966,"description":7973,"extension":348,"meta":10947,"navigation":350,"path":10948,"seo":10949,"stem":10950,"__hash__":10951},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7967,"toc":10938},[7968,7971,7974,7978,7981,7984,7995,8333,8336,8340,8343,8350,8605,8609,8612,8615,8770,8774,8777,8780,8986,8990,8993,9296,9299,9307,9311,9314,9465,9467,9478,9535,9539,9544,10201,10209,10212,10306,10309,10929,10935],[10,7969,7965],{"id":7970},"_4结构体",[14,7972,7973],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[365,7975,7977],{"id":7976},"_41结构体定义与使用","4.1结构体定义与使用",[14,7979,7980],{},"语法：struct 结构体名 {结构体成员列表}；",[14,7982,7983],{},"通过结构体创建变量的方式：",[1422,7985,7986,7989,7992],{},[380,7987,7988],{},"struct 结构体名 变量名",[380,7990,7991],{},"struct 结构体名 变量名={成员1值，成员2值...}",[380,7993,7994],{},"定义结构体时顺便创建变量",[49,7996,7998],{"className":415,"code":7997,"language":417,"meta":46,"style":46},"#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",[28,7999,8000,8006,8016,8023,8028,8036,8040,8045,8049,8054,8059,8064,8071,8076,8083,8087,8094,8098,8102,8106,8110,8114,8118,8124,8128,8134,8142,8150,8154,8159,8164,8175,8180,8192,8203,8214,8219,8243,8248,8254,8281,8286,8292,8304,8316,8328],{"__ignoreMap":46},[57,8001,8002,8004],{"class":59,"line":60},[57,8003,2223],{"class":136},[57,8005,2226],{"class":74},[57,8007,8008,8010,8012,8014],{"class":59,"line":67},[57,8009,2231],{"class":136},[57,8011,2234],{"class":136},[57,8013,2237],{"class":70},[57,8015,1576],{"class":140},[57,8017,8018,8020],{"class":59,"line":144},[57,8019,2223],{"class":136},[57,8021,8022],{"class":74},"\u003Cstring>\n",[57,8024,8025],{"class":59,"line":150},[57,8026,8027],{"class":63},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[57,8029,8030,8033],{"class":59,"line":162},[57,8031,8032],{"class":136},"struct",[57,8034,8035],{"class":70}," Student\n",[57,8037,8038],{"class":59,"line":180},[57,8039,1828],{"class":140},[57,8041,8042],{"class":59,"line":186},[57,8043,8044],{"class":63},"    \u002F\u002F成员列表\n",[57,8046,8047],{"class":59,"line":197},[57,8048,2673],{"emptyLinePlaceholder":350},[57,8050,8051],{"class":59,"line":241},[57,8052,8053],{"class":63},"    \u002F\u002F姓名\n",[57,8055,8056],{"class":59,"line":249},[57,8057,8058],{"class":140},"    string name;\n",[57,8060,8061],{"class":59,"line":262},[57,8062,8063],{"class":63},"    \u002F\u002F年龄\n",[57,8065,8066,8068],{"class":59,"line":281},[57,8067,2258],{"class":136},[57,8069,8070],{"class":140}," age;\n",[57,8072,8073],{"class":59,"line":287},[57,8074,8075],{"class":63},"    \u002F\u002F分数\n",[57,8077,8078,8080],{"class":59,"line":298},[57,8079,2258],{"class":136},[57,8081,8082],{"class":140}," score;\n",[57,8084,8085],{"class":59,"line":311},[57,8086,4268],{"class":140},[57,8088,8089,8091],{"class":59,"line":322},[57,8090,8032],{"class":136},[57,8092,8093],{"class":70}," School\n",[57,8095,8096],{"class":59,"line":1929},[57,8097,1828],{"class":140},[57,8099,8100],{"class":59,"line":1950},[57,8101,8044],{"class":63},[57,8103,8104],{"class":59,"line":1955},[57,8105,2673],{"emptyLinePlaceholder":350},[57,8107,8108],{"class":59,"line":1969},[57,8109,8053],{"class":63},[57,8111,8112],{"class":59,"line":1974},[57,8113,8058],{"class":140},[57,8115,8116],{"class":59,"line":2001},[57,8117,8063],{"class":63},[57,8119,8120,8122],{"class":59,"line":2006},[57,8121,2258],{"class":136},[57,8123,8070],{"class":140},[57,8125,8126],{"class":59,"line":2023},[57,8127,8075],{"class":63},[57,8129,8130,8132],{"class":59,"line":2028},[57,8131,2258],{"class":136},[57,8133,8082],{"class":140},[57,8135,8136,8139],{"class":59,"line":2033},[57,8137,8138],{"class":140},"} s3;",[57,8140,8141],{"class":63}," \u002F\u002F创建结构体时就创建了变量\n",[57,8143,8144,8146,8148],{"class":59,"line":2038},[57,8145,429],{"class":136},[57,8147,2246],{"class":70},[57,8149,2249],{"class":140},[57,8151,8152],{"class":59,"line":2052},[57,8153,1828],{"class":140},[57,8155,8156],{"class":59,"line":2057},[57,8157,8158],{"class":63},"    \u002F\u002F2.通过学生类型创建具体学生\n",[57,8160,8161],{"class":59,"line":2850},[57,8162,8163],{"class":63},"    \u002F\u002F2.1 struct Student s1;\n",[57,8165,8166,8169,8172],{"class":59,"line":2864},[57,8167,8168],{"class":136},"    struct",[57,8170,8171],{"class":70}," Student",[57,8173,8174],{"class":140}," s1;\n",[57,8176,8177],{"class":59,"line":2872},[57,8178,8179],{"class":63},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[57,8181,8182,8185,8187,8190],{"class":59,"line":2877},[57,8183,8184],{"class":140},"    s1.name",[57,8186,156],{"class":136},[57,8188,8189],{"class":74},"\"张三\"",[57,8191,1576],{"class":140},[57,8193,8194,8197,8199,8201],{"class":59,"line":2883},[57,8195,8196],{"class":140},"    s1.age",[57,8198,156],{"class":136},[57,8200,1066],{"class":81},[57,8202,1576],{"class":140},[57,8204,8205,8208,8210,8212],{"class":59,"line":2889},[57,8206,8207],{"class":140},"    s1.score",[57,8209,156],{"class":136},[57,8211,671],{"class":81},[57,8213,1576],{"class":140},[57,8215,8216],{"class":59,"line":2894},[57,8217,8218],{"class":63},"    \u002F\u002F输出结果\n",[57,8220,8222,8224,8226,8229,8231,8234,8236,8239,8241],{"class":59,"line":8221},37,[57,8223,1833],{"class":140},[57,8225,1459],{"class":136},[57,8227,8228],{"class":140},"s1.name",[57,8230,1459],{"class":136},[57,8232,8233],{"class":140},"s1.age",[57,8235,1459],{"class":136},[57,8237,8238],{"class":140},"s1.score",[57,8240,1459],{"class":136},[57,8242,1481],{"class":140},[57,8244,8246],{"class":59,"line":8245},38,[57,8247,2673],{"emptyLinePlaceholder":350},[57,8249,8251],{"class":59,"line":8250},39,[57,8252,8253],{"class":63},"    \u002F\u002F2.2 struct Student s2={...}\n",[57,8255,8257,8259,8261,8264,8266,8268,8271,8273,8275,8277,8279],{"class":59,"line":8256},40,[57,8258,8168],{"class":136},[57,8260,8171],{"class":70},[57,8262,8263],{"class":140}," s2",[57,8265,156],{"class":136},[57,8267,1312],{"class":140},[57,8269,8270],{"class":74},"\"王五\"",[57,8272,273],{"class":140},[57,8274,1066],{"class":81},[57,8276,273],{"class":140},[57,8278,671],{"class":81},[57,8280,4268],{"class":140},[57,8282,8284],{"class":59,"line":8283},41,[57,8285,2673],{"emptyLinePlaceholder":350},[57,8287,8289],{"class":59,"line":8288},42,[57,8290,8291],{"class":63},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[57,8293,8295,8298,8300,8302],{"class":59,"line":8294},43,[57,8296,8297],{"class":140},"    s3.name",[57,8299,156],{"class":136},[57,8301,3951],{"class":74},[57,8303,1576],{"class":140},[57,8305,8307,8310,8312,8314],{"class":59,"line":8306},44,[57,8308,8309],{"class":140},"    s3.age",[57,8311,156],{"class":136},[57,8313,1066],{"class":81},[57,8315,1576],{"class":140},[57,8317,8319,8322,8324,8326],{"class":59,"line":8318},45,[57,8320,8321],{"class":140},"    s3.score",[57,8323,156],{"class":136},[57,8325,1116],{"class":81},[57,8327,1576],{"class":140},[57,8329,8331],{"class":59,"line":8330},46,[57,8332,1847],{"class":140},[14,8334,8335],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[365,8337,8339],{"id":8338},"_42结构体数组","4.2结构体数组",[14,8341,8342],{},"将自定义的结构体放入到数组中方便维护",[14,8344,8345,8346,8349],{},"语法：struct 结构体名 数组名",[57,8347,8348],{},"元素个数","={ {}，{},...{} };",[49,8351,8353],{"className":415,"code":8352,"language":417,"meta":46,"style":46},"#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",[28,8354,8355,8361,8371,8377,8382,8388,8392,8396,8402,8408,8412,8416,8424,8428,8433,8448,8452,8468,8484,8488,8493,8509,8524,8539,8544,8570,8574,8597,8601],{"__ignoreMap":46},[57,8356,8357,8359],{"class":59,"line":60},[57,8358,2223],{"class":136},[57,8360,2226],{"class":74},[57,8362,8363,8365,8367,8369],{"class":59,"line":67},[57,8364,2231],{"class":136},[57,8366,2234],{"class":136},[57,8368,2237],{"class":70},[57,8370,1576],{"class":140},[57,8372,8373,8375],{"class":59,"line":144},[57,8374,2223],{"class":136},[57,8376,8022],{"class":74},[57,8378,8379],{"class":59,"line":150},[57,8380,8381],{"class":63},"\u002F\u002F1.定义结构体\n",[57,8383,8384,8386],{"class":59,"line":162},[57,8385,8032],{"class":136},[57,8387,8035],{"class":70},[57,8389,8390],{"class":59,"line":180},[57,8391,1828],{"class":140},[57,8393,8394],{"class":59,"line":186},[57,8395,8058],{"class":140},[57,8397,8398,8400],{"class":59,"line":197},[57,8399,2258],{"class":136},[57,8401,8070],{"class":140},[57,8403,8404,8406],{"class":59,"line":241},[57,8405,2258],{"class":136},[57,8407,8082],{"class":140},[57,8409,8410],{"class":59,"line":249},[57,8411,2673],{"emptyLinePlaceholder":350},[57,8413,8414],{"class":59,"line":262},[57,8415,4268],{"class":140},[57,8417,8418,8420,8422],{"class":59,"line":281},[57,8419,429],{"class":136},[57,8421,2246],{"class":70},[57,8423,2249],{"class":140},[57,8425,8426],{"class":59,"line":287},[57,8427,1828],{"class":140},[57,8429,8430],{"class":59,"line":298},[57,8431,8432],{"class":63},"    \u002F\u002F2.创建结构体数组\n",[57,8434,8435,8437,8439,8442,8444,8446],{"class":59,"line":311},[57,8436,8168],{"class":136},[57,8438,8171],{"class":70},[57,8440,8441],{"class":140}," stuArray[",[57,8443,498],{"class":81},[57,8445,1356],{"class":140},[57,8447,5181],{"class":136},[57,8449,8450],{"class":59,"line":322},[57,8451,2303],{"class":140},[57,8453,8454,8456,8458,8460,8462,8464,8466],{"class":59,"line":1929},[57,8455,5190],{"class":140},[57,8457,8189],{"class":74},[57,8459,273],{"class":140},[57,8461,1066],{"class":81},[57,8463,273],{"class":140},[57,8465,728],{"class":81},[57,8467,5203],{"class":140},[57,8469,8470,8472,8474,8476,8478,8480,8482],{"class":59,"line":1950},[57,8471,5190],{"class":140},[57,8473,3951],{"class":74},[57,8475,273],{"class":140},[57,8477,991],{"class":81},[57,8479,273],{"class":140},[57,8481,991],{"class":81},[57,8483,1847],{"class":140},[57,8485,8486],{"class":59,"line":1955},[57,8487,2460],{"class":140},[57,8489,8490],{"class":59,"line":1969},[57,8491,8492],{"class":63},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[57,8494,8495,8498,8500,8503,8505,8507],{"class":59,"line":1974},[57,8496,8497],{"class":140},"    stuArray[",[57,8499,635],{"class":81},[57,8501,8502],{"class":140},"].name",[57,8504,156],{"class":136},[57,8506,3974],{"class":74},[57,8508,1576],{"class":140},[57,8510,8511,8513,8515,8518,8520,8522],{"class":59,"line":2001},[57,8512,8497],{"class":140},[57,8514,635],{"class":81},[57,8516,8517],{"class":140},"].age",[57,8519,156],{"class":136},[57,8521,498],{"class":81},[57,8523,1576],{"class":140},[57,8525,8526,8528,8530,8533,8535,8537],{"class":59,"line":2006},[57,8527,8497],{"class":140},[57,8529,635],{"class":81},[57,8531,8532],{"class":140},"].score",[57,8534,156],{"class":136},[57,8536,498],{"class":81},[57,8538,1576],{"class":140},[57,8540,8541],{"class":59,"line":2023},[57,8542,8543],{"class":63},"    \u002F\u002F4.遍历结构体数组\n",[57,8545,8546,8548,8550,8552,8554,8556,8558,8560,8562,8564,8566,8568],{"class":59,"line":2028},[57,8547,3474],{"class":136},[57,8549,1934],{"class":140},[57,8551,429],{"class":136},[57,8553,3305],{"class":140},[57,8555,156],{"class":136},[57,8557,226],{"class":81},[57,8559,3312],{"class":140},[57,8561,1326],{"class":136},[57,8563,498],{"class":81},[57,8565,3312],{"class":140},[57,8567,2565],{"class":136},[57,8569,238],{"class":140},[57,8571,8572],{"class":59,"line":2033},[57,8573,2303],{"class":140},[57,8575,8576,8578,8580,8583,8585,8588,8590,8593,8595],{"class":59,"line":2038},[57,8577,3724],{"class":140},[57,8579,1459],{"class":136},[57,8581,8582],{"class":140},"stuArray[i].name",[57,8584,1459],{"class":136},[57,8586,8587],{"class":140},"stuArray[i].age",[57,8589,1459],{"class":136},[57,8591,8592],{"class":140},"stuArray[i].score",[57,8594,1459],{"class":136},[57,8596,1481],{"class":140},[57,8598,8599],{"class":59,"line":2052},[57,8600,2460],{"class":140},[57,8602,8603],{"class":59,"line":2057},[57,8604,1847],{"class":140},[365,8606,8608],{"id":8607},"_43结构体指针","4.3结构体指针",[14,8610,8611],{},"作用：通过指针访问结构体中的成员",[14,8613,8614],{},"利用操作符->可以通过结构体指针访问结构体属性",[49,8616,8618],{"className":415,"code":8617,"language":417,"meta":46,"style":46},"#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",[28,8619,8620,8626,8636,8642,8646,8652,8656,8660,8666,8672,8676,8684,8688,8693,8718,8723,8738,8743,8766],{"__ignoreMap":46},[57,8621,8622,8624],{"class":59,"line":60},[57,8623,2223],{"class":136},[57,8625,2226],{"class":74},[57,8627,8628,8630,8632,8634],{"class":59,"line":67},[57,8629,2231],{"class":136},[57,8631,2234],{"class":136},[57,8633,2237],{"class":70},[57,8635,1576],{"class":140},[57,8637,8638,8640],{"class":59,"line":144},[57,8639,2223],{"class":136},[57,8641,8022],{"class":74},[57,8643,8644],{"class":59,"line":150},[57,8645,8381],{"class":63},[57,8647,8648,8650],{"class":59,"line":162},[57,8649,8032],{"class":136},[57,8651,8035],{"class":70},[57,8653,8654],{"class":59,"line":180},[57,8655,1828],{"class":140},[57,8657,8658],{"class":59,"line":186},[57,8659,8058],{"class":140},[57,8661,8662,8664],{"class":59,"line":197},[57,8663,2258],{"class":136},[57,8665,8070],{"class":140},[57,8667,8668,8670],{"class":59,"line":241},[57,8669,2258],{"class":136},[57,8671,8082],{"class":140},[57,8673,8674],{"class":59,"line":249},[57,8675,4268],{"class":140},[57,8677,8678,8680,8682],{"class":59,"line":262},[57,8679,429],{"class":136},[57,8681,2246],{"class":70},[57,8683,2249],{"class":140},[57,8685,8686],{"class":59,"line":281},[57,8687,1828],{"class":140},[57,8689,8690],{"class":59,"line":287},[57,8691,8692],{"class":63},"    \u002F\u002F创建学生结构体变量\n",[57,8694,8695,8697,8699,8702,8704,8706,8708,8710,8712,8714,8716],{"class":59,"line":298},[57,8696,8168],{"class":136},[57,8698,8171],{"class":70},[57,8700,8701],{"class":140}," s",[57,8703,156],{"class":136},[57,8705,1312],{"class":140},[57,8707,8189],{"class":74},[57,8709,273],{"class":140},[57,8711,1066],{"class":81},[57,8713,273],{"class":140},[57,8715,1996],{"class":81},[57,8717,4268],{"class":140},[57,8719,8720],{"class":59,"line":311},[57,8721,8722],{"class":63},"    \u002F\u002F通过指针指向结构体变量\n",[57,8724,8725,8727,8729,8731,8733,8735],{"class":59,"line":322},[57,8726,8168],{"class":136},[57,8728,8171],{"class":70},[57,8730,6791],{"class":136},[57,8732,14],{"class":140},[57,8734,6612],{"class":136},[57,8736,8737],{"class":140},"s\n",[57,8739,8740],{"class":59,"line":1929},[57,8741,8742],{"class":63},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[57,8744,8745,8747,8749,8752,8754,8757,8759,8762,8764],{"class":59,"line":1950},[57,8746,1833],{"class":140},[57,8748,1459],{"class":136},[57,8750,8751],{"class":140},"p->name",[57,8753,1459],{"class":136},[57,8755,8756],{"class":140},"p->age",[57,8758,1459],{"class":136},[57,8760,8761],{"class":140},"p->score",[57,8763,1459],{"class":136},[57,8765,1481],{"class":140},[57,8767,8768],{"class":59,"line":1955},[57,8769,1847],{"class":140},[365,8771,8773],{"id":8772},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,8775,8776],{},"作用：结构体中的成员可以是另一个结构体",[14,8778,8779],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[49,8781,8783],{"className":415,"code":8782,"language":417,"meta":46,"style":46},"#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",[28,8784,8785,8791,8801,8807,8812,8820,8824,8828,8834,8840,8844,8849,8856,8860,8867,8871,8877,8882,8886,8894,8898,8903,8908,8913,8924,8936,8947,8960,8971,8982],{"__ignoreMap":46},[57,8786,8787,8789],{"class":59,"line":60},[57,8788,2223],{"class":136},[57,8790,2226],{"class":74},[57,8792,8793,8795,8797,8799],{"class":59,"line":67},[57,8794,2231],{"class":136},[57,8796,2234],{"class":136},[57,8798,2237],{"class":70},[57,8800,1576],{"class":140},[57,8802,8803,8805],{"class":59,"line":144},[57,8804,2223],{"class":136},[57,8806,8022],{"class":74},[57,8808,8809],{"class":59,"line":150},[57,8810,8811],{"class":63},"\u002F\u002F定义学生结构体\n",[57,8813,8814,8816,8818],{"class":59,"line":162},[57,8815,8032],{"class":136},[57,8817,8171],{"class":70},[57,8819,2947],{"class":140},[57,8821,8822],{"class":59,"line":180},[57,8823,1828],{"class":140},[57,8825,8826],{"class":59,"line":186},[57,8827,8058],{"class":140},[57,8829,8830,8832],{"class":59,"line":197},[57,8831,2258],{"class":136},[57,8833,8070],{"class":140},[57,8835,8836,8838],{"class":59,"line":241},[57,8837,2258],{"class":136},[57,8839,8082],{"class":140},[57,8841,8842],{"class":59,"line":249},[57,8843,1847],{"class":140},[57,8845,8846],{"class":59,"line":262},[57,8847,8848],{"class":63},"\u002F\u002F定义老师结构体\n",[57,8850,8851,8853],{"class":59,"line":281},[57,8852,8032],{"class":136},[57,8854,8855],{"class":70}," Teacher\n",[57,8857,8858],{"class":59,"line":287},[57,8859,1828],{"class":140},[57,8861,8862,8864],{"class":59,"line":298},[57,8863,2258],{"class":136},[57,8865,8866],{"class":140}," id;\n",[57,8868,8869],{"class":59,"line":311},[57,8870,8058],{"class":140},[57,8872,8873,8875],{"class":59,"line":322},[57,8874,2258],{"class":136},[57,8876,8070],{"class":140},[57,8878,8879],{"class":59,"line":1929},[57,8880,8881],{"class":140},"    Student stu;\n",[57,8883,8884],{"class":59,"line":1950},[57,8885,1847],{"class":140},[57,8887,8888,8890,8892],{"class":59,"line":1955},[57,8889,429],{"class":136},[57,8891,2246],{"class":70},[57,8893,6251],{"class":140},[57,8895,8896],{"class":59,"line":1969},[57,8897,1828],{"class":140},[57,8899,8900],{"class":59,"line":1974},[57,8901,8902],{"class":63},"    \u002F\u002F结构体嵌套结构体\n",[57,8904,8905],{"class":59,"line":2001},[57,8906,8907],{"class":63},"    \u002F\u002F创建老师\n",[57,8909,8910],{"class":59,"line":2006},[57,8911,8912],{"class":140},"    Teacher t;\n",[57,8914,8915,8918,8920,8922],{"class":59,"line":2023},[57,8916,8917],{"class":140},"    t.id",[57,8919,156],{"class":136},[57,8921,728],{"class":81},[57,8923,1576],{"class":140},[57,8925,8926,8929,8931,8934],{"class":59,"line":2028},[57,8927,8928],{"class":140},"    t.name",[57,8930,156],{"class":136},[57,8932,8933],{"class":74},"\"老王\"",[57,8935,1576],{"class":140},[57,8937,8938,8941,8943,8945],{"class":59,"line":2033},[57,8939,8940],{"class":140},"    t.age",[57,8942,156],{"class":136},[57,8944,1066],{"class":81},[57,8946,1576],{"class":140},[57,8948,8949,8952,8954,8957],{"class":59,"line":2038},[57,8950,8951],{"class":140},"    t.stu.name",[57,8953,156],{"class":136},[57,8955,8956],{"class":74},"\"小王\"",[57,8958,8959],{"class":140},"；\n",[57,8961,8962,8965,8967,8969],{"class":59,"line":2052},[57,8963,8964],{"class":140},"    t.stu.age",[57,8966,156],{"class":136},[57,8968,1116],{"class":81},[57,8970,1576],{"class":140},[57,8972,8973,8976,8978,8980],{"class":59,"line":2057},[57,8974,8975],{"class":140},"    t.stu.score",[57,8977,156],{"class":136},[57,8979,761],{"class":81},[57,8981,1576],{"class":140},[57,8983,8984],{"class":59,"line":2850},[57,8985,1847],{"class":140},[365,8987,8989],{"id":8988},"_45结构体做函数参数","4.5结构体做函数参数",[14,8991,8992],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[49,8994,8996],{"className":415,"code":8995,"language":417,"meta":46,"style":46},"#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",[28,8997,8998,9004,9014,9020,9026,9030,9034,9040,9046,9050,9055,9060,9077,9081,9114,9118,9123,9142,9146,9177,9181,9189,9193,9202,9214,9226,9238,9251,9259,9272,9284,9292],{"__ignoreMap":46},[57,8999,9000,9002],{"class":59,"line":60},[57,9001,2223],{"class":136},[57,9003,2226],{"class":74},[57,9005,9006,9008,9010,9012],{"class":59,"line":67},[57,9007,2231],{"class":136},[57,9009,2234],{"class":136},[57,9011,2237],{"class":70},[57,9013,1576],{"class":140},[57,9015,9016,9018],{"class":59,"line":144},[57,9017,2223],{"class":136},[57,9019,8022],{"class":74},[57,9021,9022,9024],{"class":59,"line":150},[57,9023,8032],{"class":136},[57,9025,8035],{"class":70},[57,9027,9028],{"class":59,"line":162},[57,9029,1828],{"class":140},[57,9031,9032],{"class":59,"line":180},[57,9033,8058],{"class":140},[57,9035,9036,9038],{"class":59,"line":186},[57,9037,2258],{"class":136},[57,9039,8070],{"class":140},[57,9041,9042,9044],{"class":59,"line":197},[57,9043,2258],{"class":136},[57,9045,8082],{"class":140},[57,9047,9048],{"class":59,"line":241},[57,9049,4268],{"class":140},[57,9051,9052],{"class":59,"line":249},[57,9053,9054],{"class":63},"\u002F\u002F打印学生信息的函数\n",[57,9056,9057],{"class":59,"line":262},[57,9058,9059],{"class":63},"\u002F\u002F值传递\n",[57,9061,9062,9064,9067,9069,9071,9073,9075],{"class":59,"line":281},[57,9063,5637],{"class":136},[57,9065,9066],{"class":70}," printStudent1",[57,9068,168],{"class":140},[57,9070,8032],{"class":136},[57,9072,8171],{"class":70},[57,9074,8701],{"class":5489},[57,9076,238],{"class":140},[57,9078,9079],{"class":59,"line":287},[57,9080,1828],{"class":140},[57,9082,9083,9085,9087,9090,9092,9095,9097,9100,9102,9104,9106,9109,9111],{"class":59,"line":298},[57,9084,6802],{"class":140},[57,9086,1459],{"class":136},[57,9088,9089],{"class":140}," s.name ",[57,9091,1459],{"class":136},[57,9093,9094],{"class":74}," \" \"",[57,9096,1727],{"class":136},[57,9098,9099],{"class":140}," s.age ",[57,9101,1459],{"class":136},[57,9103,9094],{"class":74},[57,9105,1727],{"class":136},[57,9107,9108],{"class":140}," s.score ",[57,9110,1459],{"class":136},[57,9112,9113],{"class":140}," endl;\n",[57,9115,9116],{"class":59,"line":311},[57,9117,1847],{"class":140},[57,9119,9120],{"class":59,"line":322},[57,9121,9122],{"class":63},"\u002F\u002F地址传递\n",[57,9124,9125,9127,9130,9132,9134,9136,9138,9140],{"class":59,"line":1929},[57,9126,5637],{"class":136},[57,9128,9129],{"class":70}," printStudent2",[57,9131,168],{"class":140},[57,9133,8032],{"class":136},[57,9135,8171],{"class":70},[57,9137,6791],{"class":136},[57,9139,1111],{"class":5489},[57,9141,238],{"class":140},[57,9143,9144],{"class":59,"line":1950},[57,9145,1828],{"class":140},[57,9147,9148,9150,9152,9155,9157,9159,9161,9164,9166,9168,9170,9173,9175],{"class":59,"line":1955},[57,9149,6802],{"class":140},[57,9151,1459],{"class":136},[57,9153,9154],{"class":140}," s->name ",[57,9156,1459],{"class":136},[57,9158,9094],{"class":74},[57,9160,1727],{"class":136},[57,9162,9163],{"class":140}," s->age ",[57,9165,1459],{"class":136},[57,9167,9094],{"class":74},[57,9169,1727],{"class":136},[57,9171,9172],{"class":140}," s->score ",[57,9174,1459],{"class":136},[57,9176,9113],{"class":140},[57,9178,9179],{"class":59,"line":1969},[57,9180,1847],{"class":140},[57,9182,9183,9185,9187],{"class":59,"line":1974},[57,9184,429],{"class":136},[57,9186,2246],{"class":70},[57,9188,2249],{"class":140},[57,9190,9191],{"class":59,"line":2001},[57,9192,1828],{"class":140},[57,9194,9195,9197,9199],{"class":59,"line":2006},[57,9196,8168],{"class":136},[57,9198,8171],{"class":70},[57,9200,9201],{"class":140}," s;\n",[57,9203,9204,9207,9209,9212],{"class":59,"line":2023},[57,9205,9206],{"class":140},"    s.name ",[57,9208,156],{"class":136},[57,9210,9211],{"class":74}," \"张三\"",[57,9213,1576],{"class":140},[57,9215,9216,9219,9221,9224],{"class":59,"line":2028},[57,9217,9218],{"class":140},"    s.age ",[57,9220,156],{"class":136},[57,9222,9223],{"class":81}," 20",[57,9225,1576],{"class":140},[57,9227,9228,9231,9233,9236],{"class":59,"line":2033},[57,9229,9230],{"class":140},"    s.score ",[57,9232,156],{"class":136},[57,9234,9235],{"class":81}," 85",[57,9237,1576],{"class":140},[57,9239,9240,9242,9244,9247,9249],{"class":59,"line":2038},[57,9241,1833],{"class":140},[57,9243,1459],{"class":136},[57,9245,9246],{"class":74},"\"值传递:\"",[57,9248,1459],{"class":136},[57,9250,1481],{"class":140},[57,9252,9253,9256],{"class":59,"line":2052},[57,9254,9255],{"class":70},"    printStudent1",[57,9257,9258],{"class":140},"(s);\n",[57,9260,9261,9263,9265,9268,9270],{"class":59,"line":2057},[57,9262,1833],{"class":140},[57,9264,1459],{"class":136},[57,9266,9267],{"class":74},"\"地址传递:\"",[57,9269,1459],{"class":136},[57,9271,1481],{"class":140},[57,9273,9274,9277,9279,9281],{"class":59,"line":2850},[57,9275,9276],{"class":70},"    printStudent2",[57,9278,168],{"class":140},[57,9280,770],{"class":136},[57,9282,9283],{"class":140},"s); \n",[57,9285,9286,9288,9290],{"class":59,"line":2864},[57,9287,4363],{"class":136},[57,9289,4366],{"class":81},[57,9291,1576],{"class":140},[57,9293,9294],{"class":59,"line":2872},[57,9295,1847],{"class":140},[14,9297,9298],{},"注意：",[1422,9300,9301,9304],{},[380,9302,9303],{},"1.先定义结构体，不要在函数中写结构体的定义",[380,9305,9306],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[365,9308,9310],{"id":9309},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,9312,9313],{},"用const防止误操作",[49,9315,9317],{"className":415,"code":9316,"language":417,"meta":46,"style":46},"#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",[28,9318,9319,9325,9335,9341,9346,9350,9354,9360,9366,9370,9386,9390,9413,9417,9425,9429,9450,9457,9461],{"__ignoreMap":46},[57,9320,9321,9323],{"class":59,"line":60},[57,9322,2223],{"class":136},[57,9324,2226],{"class":74},[57,9326,9327,9329,9331,9333],{"class":59,"line":67},[57,9328,2231],{"class":136},[57,9330,2234],{"class":136},[57,9332,2237],{"class":70},[57,9334,1576],{"class":140},[57,9336,9337,9339],{"class":59,"line":144},[57,9338,2223],{"class":136},[57,9340,8022],{"class":74},[57,9342,9343],{"class":59,"line":150},[57,9344,9345],{"class":140},"sctuct Student\n",[57,9347,9348],{"class":59,"line":162},[57,9349,1828],{"class":140},[57,9351,9352],{"class":59,"line":180},[57,9353,8058],{"class":140},[57,9355,9356,9358],{"class":59,"line":186},[57,9357,2258],{"class":136},[57,9359,8070],{"class":140},[57,9361,9362,9364],{"class":59,"line":197},[57,9363,2258],{"class":136},[57,9365,8082],{"class":140},[57,9367,9368],{"class":59,"line":241},[57,9369,4268],{"class":140},[57,9371,9372,9374,9377,9379,9382,9384],{"class":59,"line":249},[57,9373,5637],{"class":136},[57,9375,9376],{"class":70}," printStudents",[57,9378,168],{"class":140},[57,9380,9381],{"class":70},"student",[57,9383,8701],{"class":5489},[57,9385,238],{"class":140},[57,9387,9388],{"class":59,"line":262},[57,9389,1828],{"class":140},[57,9391,9392,9394,9396,9399,9401,9404,9406,9409,9411],{"class":59,"line":281},[57,9393,1833],{"class":140},[57,9395,1459],{"class":136},[57,9397,9398],{"class":140},"s.name",[57,9400,1459],{"class":136},[57,9402,9403],{"class":140},"s.age",[57,9405,1459],{"class":136},[57,9407,9408],{"class":140},"s.score",[57,9410,1459],{"class":136},[57,9412,1481],{"class":140},[57,9414,9415],{"class":59,"line":287},[57,9416,1847],{"class":140},[57,9418,9419,9421,9423],{"class":59,"line":298},[57,9420,429],{"class":136},[57,9422,2246],{"class":70},[57,9424,6251],{"class":140},[57,9426,9427],{"class":59,"line":311},[57,9428,1828],{"class":140},[57,9430,9431,9434,9436,9438,9440,9442,9444,9446,9448],{"class":59,"line":322},[57,9432,9433],{"class":140},"    Student s",[57,9435,156],{"class":136},[57,9437,1312],{"class":140},[57,9439,8189],{"class":74},[57,9441,273],{"class":140},[57,9443,1066],{"class":81},[57,9445,273],{"class":140},[57,9447,1066],{"class":81},[57,9449,4268],{"class":140},[57,9451,9452,9455],{"class":59,"line":1929},[57,9453,9454],{"class":70},"    printStudent",[57,9456,9258],{"class":140},[57,9458,9459],{"class":59,"line":1950},[57,9460,2673],{"emptyLinePlaceholder":350},[57,9462,9463],{"class":59,"line":1955},[57,9464,1847],{"class":140},[14,9466,9298],{},[1422,9468,9469,9472,9475],{},[380,9470,9471],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[380,9473,9474],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[380,9476,9477],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[49,9479,9481],{"className":415,"code":9480,"language":417,"meta":46,"style":46},"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",[28,9482,9483,9502,9506,9511,9531],{"__ignoreMap":46},[57,9484,9485,9487,9489,9491,9493,9496,9498,9500],{"class":59,"line":60},[57,9486,5637],{"class":136},[57,9488,9376],{"class":70},[57,9490,168],{"class":140},[57,9492,7065],{"class":136},[57,9494,9495],{"class":70}," student",[57,9497,6791],{"class":136},[57,9499,1111],{"class":5489},[57,9501,238],{"class":140},[57,9503,9504],{"class":59,"line":67},[57,9505,1828],{"class":140},[57,9507,9508],{"class":59,"line":144},[57,9509,9510],{"class":63},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[57,9512,9513,9515,9517,9519,9521,9523,9525,9527,9529],{"class":59,"line":150},[57,9514,1833],{"class":140},[57,9516,1459],{"class":136},[57,9518,9398],{"class":140},[57,9520,1459],{"class":136},[57,9522,9403],{"class":140},[57,9524,1459],{"class":136},[57,9526,9408],{"class":140},[57,9528,1459],{"class":136},[57,9530,1481],{"class":140},[57,9532,9533],{"class":59,"line":162},[57,9534,1847],{"class":140},[365,9536,9538],{"id":9537},"_47案例","4.7案例",[377,9540,9541],{},[380,9542,9543],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[49,9545,9547],{"className":415,"code":9546,"language":417,"meta":46,"style":46},"#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",[28,9548,9549,9555,9565,9571,9578,9582,9588,9592,9597,9603,9609,9613,9617,9623,9627,9632,9637,9650,9654,9659,9685,9689,9701,9728,9732,9744,9754,9758,9763,9792,9796,9808,9817,9844,9855,9865,9869,9873,9877,9882,9906,9910,9934,9938,9957,9983,9987,10012,10035,10059,10064,10069,10074,10083,10088,10094,10115,10121,10135,10141,10168,10177,10183,10191,10196],{"__ignoreMap":46},[57,9550,9551,9553],{"class":59,"line":60},[57,9552,2223],{"class":136},[57,9554,2226],{"class":74},[57,9556,9557,9559,9561,9563],{"class":59,"line":67},[57,9558,2231],{"class":136},[57,9560,2234],{"class":136},[57,9562,2237],{"class":70},[57,9564,1576],{"class":140},[57,9566,9567,9569],{"class":59,"line":144},[57,9568,2223],{"class":136},[57,9570,8022],{"class":74},[57,9572,9573,9575],{"class":59,"line":150},[57,9574,2223],{"class":136},[57,9576,9577],{"class":74},"\u003Cctime>\n",[57,9579,9580],{"class":59,"line":162},[57,9581,8811],{"class":63},[57,9583,9584,9586],{"class":59,"line":180},[57,9585,8032],{"class":136},[57,9587,8035],{"class":70},[57,9589,9590],{"class":59,"line":186},[57,9591,1828],{"class":140},[57,9593,9594],{"class":59,"line":197},[57,9595,9596],{"class":140},"    string sName;\n",[57,9598,9599,9601],{"class":59,"line":241},[57,9600,2258],{"class":136},[57,9602,8070],{"class":140},[57,9604,9605,9607],{"class":59,"line":249},[57,9606,2258],{"class":136},[57,9608,8082],{"class":140},[57,9610,9611],{"class":59,"line":262},[57,9612,4268],{"class":140},[57,9614,9615],{"class":59,"line":281},[57,9616,8848],{"class":63},[57,9618,9619,9621],{"class":59,"line":287},[57,9620,8032],{"class":136},[57,9622,8855],{"class":70},[57,9624,9625],{"class":59,"line":298},[57,9626,1828],{"class":140},[57,9628,9629],{"class":59,"line":311},[57,9630,9631],{"class":140},"    string tName;\n",[57,9633,9634],{"class":59,"line":322},[57,9635,9636],{"class":63},"    \u002F\u002F学生数组\n",[57,9638,9639,9641,9643,9646,9648],{"class":59,"line":1929},[57,9640,8168],{"class":136},[57,9642,8171],{"class":70},[57,9644,9645],{"class":140}," sArray[",[57,9647,736],{"class":81},[57,9649,4963],{"class":140},[57,9651,9652],{"class":59,"line":1950},[57,9653,4268],{"class":140},[57,9655,9656],{"class":59,"line":1955},[57,9657,9658],{"class":63},"\u002F\u002F给老师和学生赋值的函数\n",[57,9660,9661,9663,9666,9668,9670,9673,9676,9679,9681,9683],{"class":59,"line":1969},[57,9662,5637],{"class":136},[57,9664,9665],{"class":70}," allocateSpace",[57,9667,168],{"class":140},[57,9669,8032],{"class":136},[57,9671,9672],{"class":70}," Teacher",[57,9674,9675],{"class":5489}," tArray",[57,9677,9678],{"class":140},"[],",[57,9680,429],{"class":136},[57,9682,7604],{"class":5489},[57,9684,238],{"class":140},[57,9686,9687],{"class":59,"line":1974},[57,9688,1828],{"class":140},[57,9690,9691,9694,9696,9699],{"class":59,"line":2001},[57,9692,9693],{"class":140},"    string nameSeed",[57,9695,156],{"class":136},[57,9697,9698],{"class":74},"\"ABCDE\"",[57,9700,1576],{"class":140},[57,9702,9703,9705,9707,9709,9712,9714,9716,9719,9721,9724,9726],{"class":59,"line":2006},[57,9704,3474],{"class":136},[57,9706,1934],{"class":140},[57,9708,429],{"class":136},[57,9710,9711],{"class":140}," i ",[57,9713,156],{"class":136},[57,9715,4366],{"class":81},[57,9717,9718],{"class":140},"; i ",[57,9720,1326],{"class":136},[57,9722,9723],{"class":140}," len; i",[57,9725,2565],{"class":136},[57,9727,238],{"class":140},[57,9729,9730],{"class":59,"line":2023},[57,9731,2303],{"class":140},[57,9733,9734,9737,9739,9742],{"class":59,"line":2028},[57,9735,9736],{"class":140},"        tArray[i].tName ",[57,9738,156],{"class":136},[57,9740,9741],{"class":74}," \"Teacher_\"",[57,9743,1576],{"class":140},[57,9745,9746,9748,9751],{"class":59,"line":2033},[57,9747,9736],{"class":140},[57,9749,9750],{"class":136},"+=",[57,9752,9753],{"class":140},"nameSeed[i];\n",[57,9755,9756],{"class":59,"line":2038},[57,9757,2673],{"emptyLinePlaceholder":350},[57,9759,9760],{"class":59,"line":2052},[57,9761,9762],{"class":63},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[57,9764,9765,9767,9769,9771,9774,9776,9778,9781,9783,9785,9788,9790],{"class":59,"line":2057},[57,9766,3676],{"class":136},[57,9768,1934],{"class":140},[57,9770,429],{"class":136},[57,9772,9773],{"class":140}," j ",[57,9775,156],{"class":136},[57,9777,4366],{"class":81},[57,9779,9780],{"class":140},"; j ",[57,9782,1326],{"class":136},[57,9784,2421],{"class":81},[57,9786,9787],{"class":140},"; j",[57,9789,2565],{"class":136},[57,9791,238],{"class":140},[57,9793,9794],{"class":59,"line":2850},[57,9795,2783],{"class":140},[57,9797,9798,9801,9803,9806],{"class":59,"line":2864},[57,9799,9800],{"class":140},"            tArray[i].sArray[j].sName ",[57,9802,156],{"class":136},[57,9804,9805],{"class":74}," \"Student_\"",[57,9807,1576],{"class":140},[57,9809,9810,9812,9814],{"class":59,"line":2872},[57,9811,9800],{"class":140},[57,9813,9750],{"class":136},[57,9815,9816],{"class":140}," nameSeed[j];\n",[57,9818,9819,9822,9825,9827,9829,9831,9833,9835,9837,9839,9841],{"class":59,"line":2877},[57,9820,9821],{"class":136},"            int",[57,9823,9824],{"class":140}," random",[57,9826,156],{"class":136},[57,9828,2697],{"class":70},[57,9830,2700],{"class":140},[57,9832,745],{"class":136},[57,9834,1323],{"class":81},[57,9836,897],{"class":136},[57,9838,817],{"class":81},[57,9840,478],{"class":140},[57,9842,9843],{"class":63},"\u002F\u002F40~99\n",[57,9845,9846,9849,9851,9853],{"class":59,"line":2883},[57,9847,9848],{"class":140},"            tArray[i].sArray[j].age ",[57,9850,156],{"class":136},[57,9852,9223],{"class":81},[57,9854,1576],{"class":140},[57,9856,9857,9860,9862],{"class":59,"line":2889},[57,9858,9859],{"class":140},"            tArray[i].sArray[j].score ",[57,9861,156],{"class":136},[57,9863,9864],{"class":140}," random;\n",[57,9866,9867],{"class":59,"line":2894},[57,9868,2802],{"class":140},[57,9870,9871],{"class":59,"line":8221},[57,9872,2460],{"class":140},[57,9874,9875],{"class":59,"line":8245},[57,9876,1847],{"class":140},[57,9878,9879],{"class":59,"line":8250},[57,9880,9881],{"class":63},"\u002F\u002F打印所有信息的函数\n",[57,9883,9884,9886,9889,9891,9893,9895,9897,9900,9902,9904],{"class":59,"line":8256},[57,9885,5637],{"class":136},[57,9887,9888],{"class":70}," printInfo",[57,9890,168],{"class":140},[57,9892,8032],{"class":136},[57,9894,9672],{"class":70},[57,9896,9675],{"class":5489},[57,9898,9899],{"class":140},"[], ",[57,9901,429],{"class":136},[57,9903,7604],{"class":5489},[57,9905,238],{"class":140},[57,9907,9908],{"class":59,"line":8283},[57,9909,1828],{"class":140},[57,9911,9912,9914,9916,9918,9920,9922,9924,9926,9928,9930,9932],{"class":59,"line":8288},[57,9913,3474],{"class":136},[57,9915,1934],{"class":140},[57,9917,429],{"class":136},[57,9919,9711],{"class":140},[57,9921,156],{"class":136},[57,9923,4366],{"class":81},[57,9925,9718],{"class":140},[57,9927,1326],{"class":136},[57,9929,9723],{"class":140},[57,9931,2565],{"class":136},[57,9933,238],{"class":140},[57,9935,9936],{"class":59,"line":8294},[57,9937,2303],{"class":140},[57,9939,9940,9943,9945,9948,9950,9953,9955],{"class":59,"line":8306},[57,9941,9942],{"class":140},"        cout ",[57,9944,1459],{"class":136},[57,9946,9947],{"class":74}," \"Teacher: \"",[57,9949,1727],{"class":136},[57,9951,9952],{"class":140}," tArray[i].tName ",[57,9954,1459],{"class":136},[57,9956,9113],{"class":140},[57,9958,9959,9961,9963,9965,9967,9969,9971,9973,9975,9977,9979,9981],{"class":59,"line":8318},[57,9960,3676],{"class":136},[57,9962,1934],{"class":140},[57,9964,429],{"class":136},[57,9966,9773],{"class":140},[57,9968,156],{"class":136},[57,9970,4366],{"class":81},[57,9972,9780],{"class":140},[57,9974,1326],{"class":136},[57,9976,2421],{"class":81},[57,9978,9787],{"class":140},[57,9980,2565],{"class":136},[57,9982,238],{"class":140},[57,9984,9985],{"class":59,"line":8330},[57,9986,2783],{"class":140},[57,9988,9990,9993,9995,9998,10000,10003,10005,10008,10010],{"class":59,"line":9989},47,[57,9991,9992],{"class":140},"            cout ",[57,9994,1459],{"class":136},[57,9996,9997],{"class":74}," \"",[57,9999,1516],{"class":81},[57,10001,10002],{"class":74},"Student: \"",[57,10004,1727],{"class":136},[57,10006,10007],{"class":140}," tArray[i].sArray[j].sName",[57,10009,1459],{"class":136},[57,10011,1481],{"class":140},[57,10013,10015,10017,10019,10021,10023,10026,10028,10031,10033],{"class":59,"line":10014},48,[57,10016,9992],{"class":140},[57,10018,1459],{"class":136},[57,10020,9997],{"class":74},[57,10022,1516],{"class":81},[57,10024,10025],{"class":74},"Age: \"",[57,10027,1727],{"class":136},[57,10029,10030],{"class":140}," tArray[i].sArray[j].age ",[57,10032,1459],{"class":136},[57,10034,9113],{"class":140},[57,10036,10038,10040,10042,10044,10046,10049,10051,10054,10056],{"class":59,"line":10037},49,[57,10039,9992],{"class":140},[57,10041,1459],{"class":136},[57,10043,9997],{"class":74},[57,10045,1516],{"class":81},[57,10047,10048],{"class":74},"Score: \"",[57,10050,1727],{"class":136},[57,10052,10053],{"class":140}," tArray[i].sArray[j].score ",[57,10055,1459],{"class":136},[57,10057,10058],{"class":140}," endl;   \n",[57,10060,10062],{"class":59,"line":10061},50,[57,10063,2802],{"class":140},[57,10065,10067],{"class":59,"line":10066},51,[57,10068,2460],{"class":140},[57,10070,10072],{"class":59,"line":10071},52,[57,10073,1847],{"class":140},[57,10075,10077,10079,10081],{"class":59,"line":10076},53,[57,10078,429],{"class":136},[57,10080,2246],{"class":70},[57,10082,2249],{"class":140},[57,10084,10086],{"class":59,"line":10085},54,[57,10087,1828],{"class":140},[57,10089,10091],{"class":59,"line":10090},55,[57,10092,10093],{"class":63},"    \u002F\u002F随机数种子\n",[57,10095,10097,10099,10101,10103,10105,10107,10109,10111,10113],{"class":59,"line":10096},56,[57,10098,2646],{"class":70},[57,10100,2649],{"class":140},[57,10102,2652],{"class":136},[57,10104,2655],{"class":136},[57,10106,845],{"class":140},[57,10108,2660],{"class":70},[57,10110,168],{"class":140},[57,10112,2665],{"class":81},[57,10114,2668],{"class":140},[57,10116,10118],{"class":59,"line":10117},57,[57,10119,10120],{"class":63},"    \u002F\u002F1.创建3名老师的数组\n",[57,10122,10124,10126,10128,10131,10133],{"class":59,"line":10123},58,[57,10125,8168],{"class":136},[57,10127,9672],{"class":70},[57,10129,10130],{"class":140}," tArray[",[57,10132,270],{"class":81},[57,10134,4963],{"class":140},[57,10136,10138],{"class":59,"line":10137},59,[57,10139,10140],{"class":63},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[57,10142,10144,10146,10149,10151,10154,10157,10159,10161,10164,10166],{"class":59,"line":10143},60,[57,10145,2258],{"class":136},[57,10147,10148],{"class":140}," len ",[57,10150,156],{"class":136},[57,10152,10153],{"class":136}," sizeof",[57,10155,10156],{"class":140},"(tArray) ",[57,10158,1000],{"class":136},[57,10160,10153],{"class":136},[57,10162,10163],{"class":140},"(tArray[",[57,10165,226],{"class":81},[57,10167,4129],{"class":140},[57,10169,10171,10174],{"class":59,"line":10170},61,[57,10172,10173],{"class":70},"    allocateSpace",[57,10175,10176],{"class":140},"(tArray, len);\n",[57,10178,10180],{"class":59,"line":10179},62,[57,10181,10182],{"class":63},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[57,10184,10186,10189],{"class":59,"line":10185},63,[57,10187,10188],{"class":70},"    printInfo",[57,10190,10176],{"class":140},[57,10192,10194],{"class":59,"line":10193},64,[57,10195,2673],{"emptyLinePlaceholder":350},[57,10197,10199],{"class":59,"line":10198},65,[57,10200,1847],{"class":140},[377,10202,10203],{"start":67},[380,10204,10205,10208],{},[33,10206,10207],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,10210,10211],{},"五名英雄信息如下：",[49,10213,10217],{"className":10214,"code":10215,"language":10216,"meta":46,"style":46},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[28,10218,10219,10237,10254,10271,10288],{"__ignoreMap":46},[57,10220,10221,10223,10226,10228,10230,10232,10235],{"class":59,"line":60},[57,10222,5190],{"class":140},[57,10224,10225],{"class":74},"\"刘备\"",[57,10227,273],{"class":140},[57,10229,1191],{"class":81},[57,10231,273],{"class":140},[57,10233,10234],{"class":74},"\"男\"",[57,10236,5203],{"class":140},[57,10238,10239,10241,10244,10246,10248,10250,10252],{"class":59,"line":67},[57,10240,5190],{"class":140},[57,10242,10243],{"class":74},"\"关羽\"",[57,10245,273],{"class":140},[57,10247,1166],{"class":81},[57,10249,273],{"class":140},[57,10251,10234],{"class":74},[57,10253,5203],{"class":140},[57,10255,10256,10258,10261,10263,10265,10267,10269],{"class":59,"line":144},[57,10257,5190],{"class":140},[57,10259,10260],{"class":74},"\"张飞\"",[57,10262,273],{"class":140},[57,10264,1116],{"class":81},[57,10266,273],{"class":140},[57,10268,10234],{"class":74},[57,10270,5203],{"class":140},[57,10272,10273,10275,10278,10280,10282,10284,10286],{"class":59,"line":150},[57,10274,5190],{"class":140},[57,10276,10277],{"class":74},"\"赵云\"",[57,10279,273],{"class":140},[57,10281,1141],{"class":81},[57,10283,273],{"class":140},[57,10285,10234],{"class":74},[57,10287,5203],{"class":140},[57,10289,10290,10292,10295,10297,10299,10301,10304],{"class":59,"line":162},[57,10291,5190],{"class":140},[57,10293,10294],{"class":74},"\"貂蝉\"",[57,10296,273],{"class":140},[57,10298,1091],{"class":81},[57,10300,273],{"class":140},[57,10302,10303],{"class":74},"\"女\"",[57,10305,5203],{"class":140},[14,10307,10308],{},"代码：",[49,10310,10312],{"className":415,"code":10311,"language":417,"meta":46,"style":46},"#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",[28,10313,10314,10320,10330,10336,10343,10347,10351,10357,10362,10366,10371,10394,10398,10423,10427,10460,10465,10494,10499,10514,10540,10560,10565,10570,10574,10578,10583,10605,10609,10633,10637,10699,10703,10707,10715,10719,10724,10735,10739,10755,10771,10787,10803,10819,10823,10843,10865,10870,10883,10890,10895,10901,10906,10919,10925],{"__ignoreMap":46},[57,10315,10316,10318],{"class":59,"line":60},[57,10317,2223],{"class":136},[57,10319,2226],{"class":74},[57,10321,10322,10324,10326,10328],{"class":59,"line":67},[57,10323,2231],{"class":136},[57,10325,2234],{"class":136},[57,10327,2237],{"class":70},[57,10329,1576],{"class":140},[57,10331,10332,10334],{"class":59,"line":144},[57,10333,2223],{"class":136},[57,10335,8022],{"class":74},[57,10337,10338,10340],{"class":59,"line":150},[57,10339,8032],{"class":136},[57,10341,10342],{"class":70}," Sanguo\n",[57,10344,10345],{"class":59,"line":162},[57,10346,1828],{"class":140},[57,10348,10349],{"class":59,"line":180},[57,10350,8058],{"class":140},[57,10352,10353,10355],{"class":59,"line":186},[57,10354,2258],{"class":136},[57,10356,8070],{"class":140},[57,10358,10359],{"class":59,"line":197},[57,10360,10361],{"class":140},"    string gender;\n",[57,10363,10364],{"class":59,"line":241},[57,10365,4268],{"class":140},[57,10367,10368],{"class":59,"line":249},[57,10369,10370],{"class":63},"\u002F\u002F定义排序函数\n",[57,10372,10373,10375,10377,10379,10382,10384,10386,10388,10390,10392],{"class":59,"line":262},[57,10374,5637],{"class":136},[57,10376,7589],{"class":70},[57,10378,168],{"class":140},[57,10380,10381],{"class":70},"Sanguo",[57,10383,6791],{"class":136},[57,10385,1111],{"class":5489},[57,10387,273],{"class":140},[57,10389,429],{"class":136},[57,10391,7604],{"class":5489},[57,10393,238],{"class":140},[57,10395,10396],{"class":59,"line":281},[57,10397,1828],{"class":140},[57,10399,10400,10402,10404,10406,10408,10410,10412,10414,10416,10419,10421],{"class":59,"line":287},[57,10401,3474],{"class":136},[57,10403,168],{"class":140},[57,10405,429],{"class":136},[57,10407,3305],{"class":140},[57,10409,156],{"class":136},[57,10411,226],{"class":81},[57,10413,3312],{"class":140},[57,10415,1326],{"class":136},[57,10417,10418],{"class":140},"len;i",[57,10420,2565],{"class":136},[57,10422,238],{"class":140},[57,10424,10425],{"class":59,"line":298},[57,10426,2303],{"class":140},[57,10428,10429,10432,10434,10436,10438,10440,10442,10444,10446,10448,10450,10452,10454,10456,10458],{"class":59,"line":311},[57,10430,10431],{"class":136},"     for",[57,10433,1934],{"class":140},[57,10435,429],{"class":136},[57,10437,3683],{"class":140},[57,10439,156],{"class":136},[57,10441,226],{"class":81},[57,10443,3690],{"class":140},[57,10445,1326],{"class":136},[57,10447,7631],{"class":140},[57,10449,948],{"class":136},[57,10451,635],{"class":81},[57,10453,948],{"class":136},[57,10455,3823],{"class":140},[57,10457,2565],{"class":136},[57,10459,238],{"class":140},[57,10461,10462],{"class":59,"line":322},[57,10463,10464],{"class":140},"     {\n",[57,10466,10467,10470,10473,10475,10478,10480,10483,10485,10487,10489,10491],{"class":59,"line":1929},[57,10468,10469],{"class":136},"         if",[57,10471,10472],{"class":140}," ((s",[57,10474,897],{"class":136},[57,10476,10477],{"class":140},"j)->age ",[57,10479,223],{"class":136},[57,10481,10482],{"class":140}," (s",[57,10484,897],{"class":136},[57,10486,883],{"class":140},[57,10488,897],{"class":136},[57,10490,635],{"class":81},[57,10492,10493],{"class":140},")->age)\n",[57,10495,10496],{"class":59,"line":1950},[57,10497,10498],{"class":140},"         {\n",[57,10500,10501,10504,10506,10509,10511],{"class":59,"line":1955},[57,10502,10503],{"class":140},"             Sanguo temp",[57,10505,7426],{"class":136},[57,10507,10508],{"class":140},"(s",[57,10510,897],{"class":136},[57,10512,10513],{"class":140},"j);\n",[57,10515,10516,10519,10521,10523,10526,10528,10530,10532,10534,10536,10538],{"class":59,"line":1969},[57,10517,10518],{"class":136},"             *",[57,10520,10508],{"class":140},[57,10522,897],{"class":136},[57,10524,10525],{"class":140},"j)",[57,10527,7426],{"class":136},[57,10529,10508],{"class":140},[57,10531,897],{"class":136},[57,10533,883],{"class":140},[57,10535,897],{"class":136},[57,10537,635],{"class":81},[57,10539,2992],{"class":140},[57,10541,10542,10544,10546,10548,10550,10552,10554,10556,10558],{"class":59,"line":1974},[57,10543,10518],{"class":136},[57,10545,10508],{"class":140},[57,10547,897],{"class":136},[57,10549,883],{"class":140},[57,10551,897],{"class":136},[57,10553,635],{"class":81},[57,10555,845],{"class":140},[57,10557,156],{"class":136},[57,10559,4553],{"class":140},[57,10561,10562],{"class":59,"line":2001},[57,10563,10564],{"class":140},"         }\n",[57,10566,10567],{"class":59,"line":2006},[57,10568,10569],{"class":140},"     }\n",[57,10571,10572],{"class":59,"line":2023},[57,10573,2460],{"class":140},[57,10575,10576],{"class":59,"line":2028},[57,10577,1847],{"class":140},[57,10579,10580],{"class":59,"line":2033},[57,10581,10582],{"class":63},"\u002F\u002F定义打印函数\n",[57,10584,10585,10587,10589,10591,10593,10595,10597,10599,10601,10603],{"class":59,"line":2038},[57,10586,5637],{"class":136},[57,10588,9888],{"class":70},[57,10590,168],{"class":140},[57,10592,10381],{"class":70},[57,10594,6791],{"class":136},[57,10596,1111],{"class":5489},[57,10598,273],{"class":140},[57,10600,429],{"class":136},[57,10602,7604],{"class":5489},[57,10604,238],{"class":140},[57,10606,10607],{"class":59,"line":2052},[57,10608,1828],{"class":140},[57,10610,10611,10613,10615,10617,10619,10621,10623,10625,10627,10629,10631],{"class":59,"line":2057},[57,10612,3474],{"class":136},[57,10614,1934],{"class":140},[57,10616,429],{"class":136},[57,10618,3305],{"class":140},[57,10620,156],{"class":136},[57,10622,226],{"class":81},[57,10624,3312],{"class":140},[57,10626,1326],{"class":136},[57,10628,10418],{"class":140},[57,10630,2565],{"class":136},[57,10632,238],{"class":140},[57,10634,10635],{"class":59,"line":2850},[57,10636,2303],{"class":140},[57,10638,10639,10641,10643,10645,10647,10650,10652,10654,10656,10659,10661,10663,10665,10668,10670,10672,10674,10677,10679,10681,10683,10686,10688,10690,10692,10695,10697],{"class":59,"line":2864},[57,10640,3724],{"class":140},[57,10642,1459],{"class":136},[57,10644,668],{"class":74},[57,10646,1516],{"class":81},[57,10648,10649],{"class":74},"姓名：\"",[57,10651,1459],{"class":136},[57,10653,10508],{"class":140},[57,10655,897],{"class":136},[57,10657,10658],{"class":140},"i)->name",[57,10660,1459],{"class":136},[57,10662,668],{"class":74},[57,10664,1516],{"class":81},[57,10666,10667],{"class":74},"年龄：\"",[57,10669,1459],{"class":136},[57,10671,10508],{"class":140},[57,10673,897],{"class":136},[57,10675,10676],{"class":140},"i)->age",[57,10678,1459],{"class":136},[57,10680,668],{"class":74},[57,10682,1516],{"class":81},[57,10684,10685],{"class":74},"性别：\"",[57,10687,1459],{"class":136},[57,10689,10508],{"class":140},[57,10691,897],{"class":136},[57,10693,10694],{"class":140},"i)->gender",[57,10696,1459],{"class":136},[57,10698,1481],{"class":140},[57,10700,10701],{"class":59,"line":2872},[57,10702,2460],{"class":140},[57,10704,10705],{"class":59,"line":2877},[57,10706,1847],{"class":140},[57,10708,10709,10711,10713],{"class":59,"line":2883},[57,10710,429],{"class":136},[57,10712,2246],{"class":70},[57,10714,2249],{"class":140},[57,10716,10717],{"class":59,"line":2889},[57,10718,1828],{"class":140},[57,10720,10721],{"class":59,"line":2894},[57,10722,10723],{"class":63},"    \u002F\u002F定义结构体变量\n",[57,10725,10726,10729,10731,10733],{"class":59,"line":8221},[57,10727,10728],{"class":140},"    Sanguo s1[",[57,10730,736],{"class":81},[57,10732,1356],{"class":140},[57,10734,5181],{"class":136},[57,10736,10737],{"class":59,"line":8245},[57,10738,2303],{"class":140},[57,10740,10741,10743,10745,10747,10749,10751,10753],{"class":59,"line":8250},[57,10742,5190],{"class":140},[57,10744,10225],{"class":74},[57,10746,273],{"class":140},[57,10748,1191],{"class":81},[57,10750,273],{"class":140},[57,10752,10234],{"class":74},[57,10754,5203],{"class":140},[57,10756,10757,10759,10761,10763,10765,10767,10769],{"class":59,"line":8256},[57,10758,5190],{"class":140},[57,10760,10243],{"class":74},[57,10762,273],{"class":140},[57,10764,1166],{"class":81},[57,10766,273],{"class":140},[57,10768,10234],{"class":74},[57,10770,5203],{"class":140},[57,10772,10773,10775,10777,10779,10781,10783,10785],{"class":59,"line":8283},[57,10774,5190],{"class":140},[57,10776,10260],{"class":74},[57,10778,273],{"class":140},[57,10780,1116],{"class":81},[57,10782,273],{"class":140},[57,10784,10234],{"class":74},[57,10786,5203],{"class":140},[57,10788,10789,10791,10793,10795,10797,10799,10801],{"class":59,"line":8288},[57,10790,5190],{"class":140},[57,10792,10277],{"class":74},[57,10794,273],{"class":140},[57,10796,1141],{"class":81},[57,10798,273],{"class":140},[57,10800,10234],{"class":74},[57,10802,5203],{"class":140},[57,10804,10805,10807,10809,10811,10813,10815,10817],{"class":59,"line":8294},[57,10806,5190],{"class":140},[57,10808,10294],{"class":74},[57,10810,273],{"class":140},[57,10812,1091],{"class":81},[57,10814,273],{"class":140},[57,10816,10303],{"class":74},[57,10818,5203],{"class":140},[57,10820,10821],{"class":59,"line":8306},[57,10822,5224],{"class":140},[57,10824,10825,10827,10829,10831,10834,10836,10839,10841],{"class":59,"line":8318},[57,10826,2258],{"class":136},[57,10828,7604],{"class":140},[57,10830,4476],{"class":136},[57,10832,10833],{"class":140},"(s1)",[57,10835,4482],{"class":136},[57,10837,10838],{"class":140},"(s1[",[57,10840,226],{"class":81},[57,10842,4129],{"class":140},[57,10844,10845,10848,10850,10853,10855,10858,10861,10863],{"class":59,"line":8330},[57,10846,10847],{"class":140},"    Sanguo ",[57,10849,871],{"class":136},[57,10851,10852],{"class":140},"s ",[57,10854,156],{"class":136},[57,10856,10857],{"class":136}," &",[57,10859,10860],{"class":140},"s1[",[57,10862,226],{"class":81},[57,10864,4963],{"class":140},[57,10866,10867],{"class":59,"line":9989},[57,10868,10869],{"class":63},"    \u002F\u002F排序前：\n",[57,10871,10872,10874,10876,10879,10881],{"class":59,"line":10014},[57,10873,6802],{"class":140},[57,10875,1459],{"class":136},[57,10877,10878],{"class":74}," \"排序前：\"",[57,10880,1727],{"class":136},[57,10882,9113],{"class":140},[57,10884,10885,10887],{"class":59,"line":10037},[57,10886,10188],{"class":70},[57,10888,10889],{"class":140},"(s,len);\n",[57,10891,10892],{"class":59,"line":10061},[57,10893,10894],{"class":63},"    \u002F\u002F调用排序函数\n",[57,10896,10897,10899],{"class":59,"line":10066},[57,10898,7871],{"class":70},[57,10900,10889],{"class":140},[57,10902,10903],{"class":59,"line":10071},[57,10904,10905],{"class":63},"    \u002F\u002F排序后\n",[57,10907,10908,10910,10912,10915,10917],{"class":59,"line":10076},[57,10909,6802],{"class":140},[57,10911,1459],{"class":136},[57,10913,10914],{"class":74}," \"排序后：\"",[57,10916,1727],{"class":136},[57,10918,9113],{"class":140},[57,10920,10921,10923],{"class":59,"line":10085},[57,10922,10188],{"class":70},[57,10924,10889],{"class":140},[57,10926,10927],{"class":59,"line":10090},[57,10928,1847],{"class":140},[14,10930,10931,10932,10934],{},"注意：使用指针时直接用传首地址**&s",[57,10933,226],{},"**",[342,10936,10937],{},"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":46,"searchDepth":67,"depth":67,"links":10939},[10940,10941,10942,10943,10944,10945,10946],{"id":7976,"depth":67,"text":7977},{"id":8338,"depth":67,"text":8339},{"id":8607,"depth":67,"text":8608},{"id":8772,"depth":67,"text":8773},{"id":8988,"depth":67,"text":8989},{"id":9309,"depth":67,"text":9310},{"id":9537,"depth":67,"text":9538},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7965,"description":7973},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10953,"title":10954,"body":10955,"description":46,"extension":348,"meta":12298,"navigation":350,"path":12299,"seo":12300,"stem":12301,"__hash__":12302},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10956,"toc":12292},[10957,10960,10964,10970,10984,10989,10992,10996,11003,11009,11012,11019,11025,11030,11033,11036,11039,11603,11606,11620,11624,11629,11645,11785,11788,11794,11797,11802,11810,11918,11921,11926,11929,11934,11937,11943,11946,12289],[10,10958,10954],{"id":10959},"_5程序内存模型",[365,10961,10963],{"id":10962},"_51内存分区模型","5.1内存分区模型",[14,10965,10966,10967],{},"C++程序在执行时，将内存大方向划分为",[33,10968,10969],{},"4个区域",[1422,10971,10972,10975,10978,10981],{},[380,10973,10974],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[380,10976,10977],{},"全局区：存放全局变量和静态变量以及常量",[380,10979,10980],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[380,10982,10983],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,10985,10986],{},[33,10987,10988],{},"内存四区意义：",[14,10990,10991],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[394,10993,10995],{"id":10994},"_511程序运行前","5.1.1程序运行前",[14,10997,10998,10999,11002],{},"​\t在程序编译后，生成了exe可执行程序，",[33,11000,11001],{},"未执行该程序前","分为两个区域",[14,11004,11005,11006],{},"​\t",[33,11007,11008],{},"代码区：",[14,11010,11011],{},"​\t\t存放 CPU 执行的机器指令",[14,11013,11014,11015,11018],{},"​\t\t代码区是",[33,11016,11017],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,11020,11014,11021,11024],{},[33,11022,11023],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,11026,11005,11027],{},[33,11028,11029],{},"全局区：",[14,11031,11032],{},"​\t\t全局变量和静态变量存放在此.",[14,11034,11035],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,11037,11038],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[49,11040,11042],{"className":415,"code":11041,"language":417,"meta":46,"style":46},"\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",[28,11043,11044,11049,11062,11075,11079,11084,11099,11114,11118,11127,11131,11136,11149,11162,11166,11171,11197,11223,11227,11254,11280,11284,11289,11305,11320,11324,11350,11376,11380,11405,11430,11434,11460,11486,11490,11506,11521,11547,11573,11577,11587,11591,11599],{"__ignoreMap":46},[57,11045,11046],{"class":59,"line":60},[57,11047,11048],{"class":63},"\u002F\u002F全局变量\n",[57,11050,11051,11053,11056,11058,11060],{"class":59,"line":67},[57,11052,429],{"class":136},[57,11054,11055],{"class":140}," g_a ",[57,11057,156],{"class":136},[57,11059,2311],{"class":81},[57,11061,1576],{"class":140},[57,11063,11064,11066,11069,11071,11073],{"class":59,"line":144},[57,11065,429],{"class":136},[57,11067,11068],{"class":140}," g_b ",[57,11070,156],{"class":136},[57,11072,2311],{"class":81},[57,11074,1576],{"class":140},[57,11076,11077],{"class":59,"line":150},[57,11078,2673],{"emptyLinePlaceholder":350},[57,11080,11081],{"class":59,"line":162},[57,11082,11083],{"class":63},"\u002F\u002F全局常量\n",[57,11085,11086,11088,11090,11093,11095,11097],{"class":59,"line":180},[57,11087,7065],{"class":136},[57,11089,2655],{"class":136},[57,11091,11092],{"class":140}," c_g_a ",[57,11094,156],{"class":136},[57,11096,2311],{"class":81},[57,11098,1576],{"class":140},[57,11100,11101,11103,11105,11108,11110,11112],{"class":59,"line":186},[57,11102,7065],{"class":136},[57,11104,2655],{"class":136},[57,11106,11107],{"class":140}," c_g_b ",[57,11109,156],{"class":136},[57,11111,2311],{"class":81},[57,11113,1576],{"class":140},[57,11115,11116],{"class":59,"line":197},[57,11117,2673],{"emptyLinePlaceholder":350},[57,11119,11120,11122,11124],{"class":59,"line":241},[57,11121,429],{"class":136},[57,11123,2246],{"class":70},[57,11125,11126],{"class":140},"() {\n",[57,11128,11129],{"class":59,"line":249},[57,11130,2673],{"emptyLinePlaceholder":350},[57,11132,11133],{"class":59,"line":262},[57,11134,11135],{"class":63},"    \u002F\u002F局部变量\n",[57,11137,11138,11140,11143,11145,11147],{"class":59,"line":281},[57,11139,2258],{"class":136},[57,11141,11142],{"class":140}," a ",[57,11144,156],{"class":136},[57,11146,2311],{"class":81},[57,11148,1576],{"class":140},[57,11150,11151,11153,11156,11158,11160],{"class":59,"line":287},[57,11152,2258],{"class":136},[57,11154,11155],{"class":140}," b ",[57,11157,156],{"class":136},[57,11159,2311],{"class":81},[57,11161,1576],{"class":140},[57,11163,11164],{"class":59,"line":298},[57,11165,2673],{"emptyLinePlaceholder":350},[57,11167,11168],{"class":59,"line":311},[57,11169,11170],{"class":63},"    \u002F\u002F打印地址\n",[57,11172,11173,11175,11177,11180,11182,11184,11186,11188,11190,11193,11195],{"class":59,"line":322},[57,11174,6802],{"class":140},[57,11176,1459],{"class":136},[57,11178,11179],{"class":74}," \"局部变量a地址为： \"",[57,11181,1727],{"class":136},[57,11183,1934],{"class":140},[57,11185,429],{"class":136},[57,11187,845],{"class":140},[57,11189,770],{"class":136},[57,11191,11192],{"class":140},"a ",[57,11194,1459],{"class":136},[57,11196,9113],{"class":140},[57,11198,11199,11201,11203,11206,11208,11210,11212,11214,11216,11219,11221],{"class":59,"line":1929},[57,11200,6802],{"class":140},[57,11202,1459],{"class":136},[57,11204,11205],{"class":74}," \"局部变量b地址为： \"",[57,11207,1727],{"class":136},[57,11209,1934],{"class":140},[57,11211,429],{"class":136},[57,11213,845],{"class":140},[57,11215,770],{"class":136},[57,11217,11218],{"class":140},"b ",[57,11220,1459],{"class":136},[57,11222,9113],{"class":140},[57,11224,11225],{"class":59,"line":1950},[57,11226,2673],{"emptyLinePlaceholder":350},[57,11228,11229,11231,11233,11236,11238,11241,11243,11245,11247,11250,11252],{"class":59,"line":1955},[57,11230,6802],{"class":140},[57,11232,1459],{"class":136},[57,11234,11235],{"class":74}," \"全局变量g_a地址为： \"",[57,11237,1727],{"class":136},[57,11239,11240],{"class":140},"  (",[57,11242,429],{"class":136},[57,11244,845],{"class":140},[57,11246,770],{"class":136},[57,11248,11249],{"class":140},"g_a ",[57,11251,1459],{"class":136},[57,11253,9113],{"class":140},[57,11255,11256,11258,11260,11263,11265,11267,11269,11271,11273,11276,11278],{"class":59,"line":1969},[57,11257,6802],{"class":140},[57,11259,1459],{"class":136},[57,11261,11262],{"class":74}," \"全局变量g_b地址为： \"",[57,11264,1727],{"class":136},[57,11266,11240],{"class":140},[57,11268,429],{"class":136},[57,11270,845],{"class":140},[57,11272,770],{"class":136},[57,11274,11275],{"class":140},"g_b ",[57,11277,1459],{"class":136},[57,11279,9113],{"class":140},[57,11281,11282],{"class":59,"line":1974},[57,11283,2673],{"emptyLinePlaceholder":350},[57,11285,11286],{"class":59,"line":2001},[57,11287,11288],{"class":63},"    \u002F\u002F静态变量\n",[57,11290,11291,11294,11296,11299,11301,11303],{"class":59,"line":2006},[57,11292,11293],{"class":136},"    static",[57,11295,2655],{"class":136},[57,11297,11298],{"class":140}," s_a ",[57,11300,156],{"class":136},[57,11302,2311],{"class":81},[57,11304,1576],{"class":140},[57,11306,11307,11309,11311,11314,11316,11318],{"class":59,"line":2023},[57,11308,11293],{"class":136},[57,11310,2655],{"class":136},[57,11312,11313],{"class":140}," s_b ",[57,11315,156],{"class":136},[57,11317,2311],{"class":81},[57,11319,1576],{"class":140},[57,11321,11322],{"class":59,"line":2028},[57,11323,2673],{"emptyLinePlaceholder":350},[57,11325,11326,11328,11330,11333,11335,11337,11339,11341,11343,11346,11348],{"class":59,"line":2033},[57,11327,6802],{"class":140},[57,11329,1459],{"class":136},[57,11331,11332],{"class":74}," \"静态变量s_a地址为： \"",[57,11334,1727],{"class":136},[57,11336,1934],{"class":140},[57,11338,429],{"class":136},[57,11340,845],{"class":140},[57,11342,770],{"class":136},[57,11344,11345],{"class":140},"s_a ",[57,11347,1459],{"class":136},[57,11349,9113],{"class":140},[57,11351,11352,11354,11356,11359,11361,11363,11365,11367,11369,11372,11374],{"class":59,"line":2038},[57,11353,6802],{"class":140},[57,11355,1459],{"class":136},[57,11357,11358],{"class":74}," \"静态变量s_b地址为： \"",[57,11360,1727],{"class":136},[57,11362,1934],{"class":140},[57,11364,429],{"class":136},[57,11366,845],{"class":140},[57,11368,770],{"class":136},[57,11370,11371],{"class":140},"s_b ",[57,11373,1459],{"class":136},[57,11375,9113],{"class":140},[57,11377,11378],{"class":59,"line":2052},[57,11379,2673],{"emptyLinePlaceholder":350},[57,11381,11382,11384,11386,11389,11391,11393,11395,11397,11399,11401,11403],{"class":59,"line":2057},[57,11383,6802],{"class":140},[57,11385,1459],{"class":136},[57,11387,11388],{"class":74}," \"字符串常量地址为： \"",[57,11390,1727],{"class":136},[57,11392,1934],{"class":140},[57,11394,429],{"class":136},[57,11396,845],{"class":140},[57,11398,770],{"class":136},[57,11400,1476],{"class":74},[57,11402,1727],{"class":136},[57,11404,9113],{"class":140},[57,11406,11407,11409,11411,11413,11415,11417,11419,11421,11423,11426,11428],{"class":59,"line":2850},[57,11408,6802],{"class":140},[57,11410,1459],{"class":136},[57,11412,11388],{"class":74},[57,11414,1727],{"class":136},[57,11416,1934],{"class":140},[57,11418,429],{"class":136},[57,11420,845],{"class":140},[57,11422,770],{"class":136},[57,11424,11425],{"class":74},"\"hello world1\"",[57,11427,1727],{"class":136},[57,11429,9113],{"class":140},[57,11431,11432],{"class":59,"line":2864},[57,11433,2673],{"emptyLinePlaceholder":350},[57,11435,11436,11438,11440,11443,11445,11447,11449,11451,11453,11456,11458],{"class":59,"line":2872},[57,11437,6802],{"class":140},[57,11439,1459],{"class":136},[57,11441,11442],{"class":74}," \"全局常量c_g_a地址为： \"",[57,11444,1727],{"class":136},[57,11446,1934],{"class":140},[57,11448,429],{"class":136},[57,11450,845],{"class":140},[57,11452,770],{"class":136},[57,11454,11455],{"class":140},"c_g_a ",[57,11457,1459],{"class":136},[57,11459,9113],{"class":140},[57,11461,11462,11464,11466,11469,11471,11473,11475,11477,11479,11482,11484],{"class":59,"line":2877},[57,11463,6802],{"class":140},[57,11465,1459],{"class":136},[57,11467,11468],{"class":74}," \"全局常量c_g_b地址为： \"",[57,11470,1727],{"class":136},[57,11472,1934],{"class":140},[57,11474,429],{"class":136},[57,11476,845],{"class":140},[57,11478,770],{"class":136},[57,11480,11481],{"class":140},"c_g_b ",[57,11483,1459],{"class":136},[57,11485,9113],{"class":140},[57,11487,11488],{"class":59,"line":2883},[57,11489,2673],{"emptyLinePlaceholder":350},[57,11491,11492,11495,11497,11500,11502,11504],{"class":59,"line":2889},[57,11493,11494],{"class":136},"    const",[57,11496,2655],{"class":136},[57,11498,11499],{"class":140}," c_l_a ",[57,11501,156],{"class":136},[57,11503,2311],{"class":81},[57,11505,1576],{"class":140},[57,11507,11508,11510,11512,11515,11517,11519],{"class":59,"line":2894},[57,11509,11494],{"class":136},[57,11511,2655],{"class":136},[57,11513,11514],{"class":140}," c_l_b ",[57,11516,156],{"class":136},[57,11518,2311],{"class":81},[57,11520,1576],{"class":140},[57,11522,11523,11525,11527,11530,11532,11534,11536,11538,11540,11543,11545],{"class":59,"line":8221},[57,11524,6802],{"class":140},[57,11526,1459],{"class":136},[57,11528,11529],{"class":74}," \"局部常量c_l_a地址为： \"",[57,11531,1727],{"class":136},[57,11533,1934],{"class":140},[57,11535,429],{"class":136},[57,11537,845],{"class":140},[57,11539,770],{"class":136},[57,11541,11542],{"class":140},"c_l_a ",[57,11544,1459],{"class":136},[57,11546,9113],{"class":140},[57,11548,11549,11551,11553,11556,11558,11560,11562,11564,11566,11569,11571],{"class":59,"line":8245},[57,11550,6802],{"class":140},[57,11552,1459],{"class":136},[57,11554,11555],{"class":74}," \"局部常量c_l_b地址为： \"",[57,11557,1727],{"class":136},[57,11559,1934],{"class":140},[57,11561,429],{"class":136},[57,11563,845],{"class":140},[57,11565,770],{"class":136},[57,11567,11568],{"class":140},"c_l_b ",[57,11570,1459],{"class":136},[57,11572,9113],{"class":140},[57,11574,11575],{"class":59,"line":8250},[57,11576,2673],{"emptyLinePlaceholder":350},[57,11578,11579,11581,11583,11585],{"class":59,"line":8256},[57,11580,2576],{"class":70},[57,11582,168],{"class":140},[57,11584,2581],{"class":74},[57,11586,2992],{"class":140},[57,11588,11589],{"class":59,"line":8283},[57,11590,2673],{"emptyLinePlaceholder":350},[57,11592,11593,11595,11597],{"class":59,"line":8288},[57,11594,4363],{"class":136},[57,11596,4366],{"class":81},[57,11598,1576],{"class":140},[57,11600,11601],{"class":59,"line":8294},[57,11602,1847],{"class":140},[14,11604,11605],{},"总结：",[1422,11607,11608,11611,11614,11617],{},[380,11609,11610],{},"c++中程序运行前分为全局区和代码区",[380,11612,11613],{},"代码区特点是共享和只读",[380,11615,11616],{},"全局区中存放全局变量、静态变量、常量",[380,11618,11619],{},"常量区中存放const修饰的全局常量和字符串常量",[394,11621,11623],{"id":11622},"_512程序运行后","5.1.2程序运行后",[377,11625,11626],{},[380,11627,11628],{},"栈区：",[1422,11630,11631,11638],{},[380,11632,11633,11634,11637],{},"由编译器自动分配释放, 存放",[33,11635,11636],{},"函数的参数值,局部变量","等",[380,11639,11640,11641,11644],{},"注意事项：",[33,11642,11643],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[49,11646,11648],{"className":415,"code":11647,"language":417,"meta":46,"style":46},"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",[28,11649,11650,11661,11665,11680,11692,11696,11700,11708,11713,11728,11746,11763,11773,11781],{"__ignoreMap":46},[57,11651,11652,11654,11656,11659],{"class":59,"line":60},[57,11653,429],{"class":136},[57,11655,6791],{"class":136},[57,11657,11658],{"class":70}," func",[57,11660,2249],{"class":140},[57,11662,11663],{"class":59,"line":67},[57,11664,1828],{"class":140},[57,11666,11667,11669,11671,11673,11675,11677],{"class":59,"line":144},[57,11668,2258],{"class":136},[57,11670,11142],{"class":140},[57,11672,156],{"class":136},[57,11674,2311],{"class":81},[57,11676,478],{"class":140},[57,11678,11679],{"class":63}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[57,11681,11682,11684,11686,11689],{"class":59,"line":150},[57,11683,4363],{"class":136},[57,11685,10857],{"class":136},[57,11687,11688],{"class":140},"a;",[57,11690,11691],{"class":63}," \u002F\u002F放回局部变量的地址\n",[57,11693,11694],{"class":59,"line":162},[57,11695,1847],{"class":140},[57,11697,11698],{"class":59,"line":180},[57,11699,2673],{"emptyLinePlaceholder":350},[57,11701,11702,11704,11706],{"class":59,"line":186},[57,11703,429],{"class":136},[57,11705,2246],{"class":70},[57,11707,11126],{"class":140},[57,11709,11710],{"class":59,"line":197},[57,11711,11712],{"class":63},"    \u002F\u002F接受func的返回值\n",[57,11714,11715,11717,11719,11722,11724,11726],{"class":59,"line":241},[57,11716,2258],{"class":136},[57,11718,6791],{"class":136},[57,11720,11721],{"class":140},"p ",[57,11723,156],{"class":136},[57,11725,11658],{"class":70},[57,11727,5909],{"class":140},[57,11729,11730,11732,11734,11736,11738,11740,11743],{"class":59,"line":249},[57,11731,6802],{"class":140},[57,11733,1459],{"class":136},[57,11735,6791],{"class":136},[57,11737,11721],{"class":140},[57,11739,1459],{"class":136},[57,11741,11742],{"class":140}," endl;",[57,11744,11745],{"class":63}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[57,11747,11748,11750,11752,11754,11756,11758,11760],{"class":59,"line":262},[57,11749,6802],{"class":140},[57,11751,1459],{"class":136},[57,11753,6791],{"class":136},[57,11755,11721],{"class":140},[57,11757,1459],{"class":136},[57,11759,11742],{"class":140},[57,11761,11762],{"class":63}," \u002F\u002F第二次这个数据不再保留\n",[57,11764,11765,11767,11769,11771],{"class":59,"line":281},[57,11766,2576],{"class":70},[57,11768,168],{"class":140},[57,11770,2581],{"class":74},[57,11772,2992],{"class":140},[57,11774,11775,11777,11779],{"class":59,"line":287},[57,11776,4363],{"class":136},[57,11778,4366],{"class":81},[57,11780,1576],{"class":140},[57,11782,11783],{"class":59,"line":298},[57,11784,1847],{"class":140},[14,11786,11787],{},"输出结果：",[14,11789,11790],{},[44,11791],{"alt":11792,"src":11793},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,11795,11796],{},"总结：不要返回局部变量的地址",[377,11798,11799],{"start":67},[380,11800,11801],{},"堆区",[1422,11803,11804,11807],{},[380,11805,11806],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[380,11808,11809],{},"在c++中主要利用new在堆区开辟内存",[49,11811,11813],{"className":415,"code":11812,"language":417,"meta":46,"style":46},"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",[28,11814,11815,11830,11834,11839,11860,11867,11871,11879,11883,11888,11902,11914],{"__ignoreMap":46},[57,11816,11817,11819,11822,11825,11827],{"class":59,"line":60},[57,11818,429],{"class":136},[57,11820,11821],{"class":136},"  *",[57,11823,11824],{"class":70},"func",[57,11826,2700],{"class":140},[57,11828,11829],{"class":63},"  \u002F\u002F函数返回指针\n",[57,11831,11832],{"class":59,"line":67},[57,11833,1828],{"class":140},[57,11835,11836],{"class":59,"line":144},[57,11837,11838],{"class":63},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[57,11840,11841,11843,11845,11847,11849,11852,11854,11856,11858],{"class":59,"line":150},[57,11842,4420],{"class":136},[57,11844,6791],{"class":136},[57,11846,14],{"class":140},[57,11848,156],{"class":136},[57,11850,11851],{"class":136}," new",[57,11853,2655],{"class":136},[57,11855,168],{"class":140},[57,11857,862],{"class":81},[57,11859,2992],{"class":140},[57,11861,11862,11864],{"class":59,"line":162},[57,11863,4654],{"class":136},[57,11865,11866],{"class":140}," p;\n",[57,11868,11869],{"class":59,"line":180},[57,11870,1847],{"class":140},[57,11872,11873,11875,11877],{"class":59,"line":186},[57,11874,429],{"class":136},[57,11876,2246],{"class":70},[57,11878,2249],{"class":140},[57,11880,11881],{"class":59,"line":197},[57,11882,1828],{"class":140},[57,11884,11885],{"class":59,"line":241},[57,11886,11887],{"class":63},"    \u002F\u002F在堆区开辟数据\n",[57,11889,11890,11892,11894,11896,11898,11900],{"class":59,"line":249},[57,11891,2258],{"class":136},[57,11893,6791],{"class":136},[57,11895,14],{"class":140},[57,11897,156],{"class":136},[57,11899,11824],{"class":70},[57,11901,5909],{"class":140},[57,11903,11904,11906,11908,11910,11912],{"class":59,"line":262},[57,11905,1833],{"class":140},[57,11907,6692],{"class":136},[57,11909,14],{"class":140},[57,11911,1459],{"class":136},[57,11913,1481],{"class":140},[57,11915,11916],{"class":59,"line":281},[57,11917,1847],{"class":140},[14,11919,11920],{},"图片展示：",[14,11922,11923],{},[44,11924],{"alt":11792,"src":11925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,11927,11928],{},"堆区内存由程序员管生死！！！",[377,11930,11931],{"start":144},[380,11932,11933],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,11935,11936],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,11938,11939,11940],{},"​语法：",[28,11941,11942],{}," new 数据类型",[14,11944,11945],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[49,11947,11949],{"className":415,"code":11948,"language":417,"meta":46,"style":46},"\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",[28,11950,11951,11956,11966,11970,11975,11980,12002,12006,12014,12018,12032,12044,12056,12068,12073,12078,12089,12093,12098,12106,12110,12115,12137,12163,12167,12185,12189,12215,12219,12231,12235,12240,12245,12253,12257,12261,12269,12273,12279,12285],{"__ignoreMap":46},[57,11952,11953],{"class":59,"line":60},[57,11954,11955],{"class":63},"\u002F\u002F1.new的基本语法\n",[57,11957,11958,11960,11962,11964],{"class":59,"line":67},[57,11959,429],{"class":136},[57,11961,6791],{"class":136},[57,11963,11824],{"class":70},[57,11965,2249],{"class":140},[57,11967,11968],{"class":59,"line":144},[57,11969,1828],{"class":140},[57,11971,11972],{"class":59,"line":150},[57,11973,11974],{"class":63},"    \u002F\u002F在堆区创建整型数据\n",[57,11976,11977],{"class":59,"line":162},[57,11978,11979],{"class":63},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[57,11981,11982,11984,11986,11988,11991,11993,11995,11997,11999],{"class":59,"line":180},[57,11983,2258],{"class":136},[57,11985,6791],{"class":136},[57,11987,14],{"class":140},[57,11989,11990],{"class":136},"=new",[57,11992,2655],{"class":136},[57,11994,168],{"class":140},[57,11996,862],{"class":81},[57,11998,6239],{"class":140},[57,12000,12001],{"class":63},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[57,12003,12004],{"class":59,"line":186},[57,12005,1847],{"class":140},[57,12007,12008,12010,12012],{"class":59,"line":197},[57,12009,5637],{"class":136},[57,12011,5861],{"class":70},[57,12013,2249],{"class":140},[57,12015,12016],{"class":59,"line":241},[57,12017,1828],{"class":140},[57,12019,12020,12022,12024,12026,12028,12030],{"class":59,"line":249},[57,12021,2258],{"class":136},[57,12023,6791],{"class":136},[57,12025,14],{"class":140},[57,12027,156],{"class":136},[57,12029,11824],{"class":70},[57,12031,5909],{"class":140},[57,12033,12034,12036,12038,12040,12042],{"class":59,"line":262},[57,12035,1833],{"class":140},[57,12037,6692],{"class":136},[57,12039,14],{"class":140},[57,12041,1459],{"class":136},[57,12043,1481],{"class":140},[57,12045,12046,12048,12050,12052,12054],{"class":59,"line":281},[57,12047,1833],{"class":140},[57,12049,6692],{"class":136},[57,12051,14],{"class":140},[57,12053,1459],{"class":136},[57,12055,1481],{"class":140},[57,12057,12058,12060,12062,12064,12066],{"class":59,"line":287},[57,12059,1833],{"class":140},[57,12061,6692],{"class":136},[57,12063,14],{"class":140},[57,12065,1459],{"class":136},[57,12067,1481],{"class":140},[57,12069,12070],{"class":59,"line":298},[57,12071,12072],{"class":63},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[57,12074,12075],{"class":59,"line":311},[57,12076,12077],{"class":63},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[57,12079,12080,12083,12086],{"class":59,"line":322},[57,12081,12082],{"class":136},"    delete",[57,12084,12085],{"class":140}," p;",[57,12087,12088],{"class":63},"\u002F\u002F删除这块地址\n",[57,12090,12091],{"class":59,"line":1929},[57,12092,1847],{"class":140},[57,12094,12095],{"class":59,"line":1950},[57,12096,12097],{"class":63},"\u002F\u002F2.在堆区利用new开辟数组\n",[57,12099,12100,12102,12104],{"class":59,"line":1955},[57,12101,5637],{"class":136},[57,12103,5930],{"class":70},[57,12105,2249],{"class":140},[57,12107,12108],{"class":59,"line":1969},[57,12109,1828],{"class":140},[57,12111,12112],{"class":59,"line":1974},[57,12113,12114],{"class":63},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[57,12116,12117,12119,12121,12123,12125,12127,12129,12131,12134],{"class":59,"line":2001},[57,12118,2258],{"class":136},[57,12120,6791],{"class":136},[57,12122,4153],{"class":140},[57,12124,11990],{"class":136},[57,12126,2655],{"class":136},[57,12128,1306],{"class":140},[57,12130,862],{"class":81},[57,12132,12133],{"class":140},"];",[57,12135,12136],{"class":63},"\u002F\u002F10代表数组有10个元素\n",[57,12138,12139,12141,12143,12145,12147,12149,12151,12153,12155,12157,12159,12161],{"class":59,"line":2006},[57,12140,3474],{"class":136},[57,12142,1934],{"class":140},[57,12144,429],{"class":136},[57,12146,3305],{"class":140},[57,12148,156],{"class":136},[57,12150,226],{"class":81},[57,12152,3312],{"class":140},[57,12154,1326],{"class":136},[57,12156,862],{"class":81},[57,12158,3312],{"class":140},[57,12160,2565],{"class":136},[57,12162,238],{"class":140},[57,12164,12165],{"class":59,"line":2023},[57,12166,2303],{"class":140},[57,12168,12169,12172,12174,12176,12178,12180,12182],{"class":59,"line":2028},[57,12170,12171],{"class":140},"        arr[i]",[57,12173,156],{"class":136},[57,12175,857],{"class":140},[57,12177,897],{"class":136},[57,12179,728],{"class":81},[57,12181,478],{"class":140},[57,12183,12184],{"class":63},"\u002F\u002F给10个元素赋值100～109\n",[57,12186,12187],{"class":59,"line":2033},[57,12188,2460],{"class":140},[57,12190,12191,12193,12195,12197,12199,12201,12203,12205,12207,12209,12211,12213],{"class":59,"line":2038},[57,12192,3474],{"class":136},[57,12194,1934],{"class":140},[57,12196,429],{"class":136},[57,12198,3305],{"class":140},[57,12200,156],{"class":136},[57,12202,226],{"class":81},[57,12204,3312],{"class":140},[57,12206,1326],{"class":136},[57,12208,862],{"class":81},[57,12210,3312],{"class":140},[57,12212,2565],{"class":136},[57,12214,238],{"class":140},[57,12216,12217],{"class":59,"line":2052},[57,12218,2303],{"class":140},[57,12220,12221,12223,12225,12227,12229],{"class":59,"line":2057},[57,12222,3724],{"class":140},[57,12224,1459],{"class":136},[57,12226,4627],{"class":140},[57,12228,1459],{"class":136},[57,12230,1481],{"class":140},[57,12232,12233],{"class":59,"line":2850},[57,12234,2460],{"class":140},[57,12236,12237],{"class":59,"line":2864},[57,12238,12239],{"class":63},"    \u002F\u002F释放堆区数组\n",[57,12241,12242],{"class":59,"line":2872},[57,12243,12244],{"class":63},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[57,12246,12247,12250],{"class":59,"line":2877},[57,12248,12249],{"class":136},"    delete[]",[57,12251,12252],{"class":140}," arr;\n",[57,12254,12255],{"class":59,"line":2883},[57,12256,1847],{"class":140},[57,12258,12259],{"class":59,"line":2889},[57,12260,2673],{"emptyLinePlaceholder":350},[57,12262,12263,12265,12267],{"class":59,"line":2894},[57,12264,429],{"class":136},[57,12266,2246],{"class":70},[57,12268,2249],{"class":140},[57,12270,12271],{"class":59,"line":8221},[57,12272,1828],{"class":140},[57,12274,12275,12277],{"class":59,"line":8245},[57,12276,5906],{"class":70},[57,12278,5909],{"class":140},[57,12280,12281,12283],{"class":59,"line":8250},[57,12282,5975],{"class":70},[57,12284,5909],{"class":140},[57,12286,12287],{"class":59,"line":8256},[57,12288,1847],{"class":140},[342,12290,12291],{},"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":46,"searchDepth":67,"depth":67,"links":12293},[12294],{"id":10962,"depth":67,"text":10963,"children":12295},[12296,12297],{"id":10994,"depth":144,"text":10995},{"id":11622,"depth":144,"text":11623},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10954,"description":46},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12304,"title":12305,"body":12306,"description":46,"extension":348,"meta":13787,"navigation":350,"path":13788,"seo":13789,"stem":13790,"__hash__":13791},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12307,"toc":13779},[12308,12311,12315,12318,12321,12490,12494,12499,12516,12521,12673,12677,12680,12683,13077,13081,13084,13089,13092,13404,13408,13414,13574,13576,13584,13588,13591,13598,13776],[10,12309,12305],{"id":12310},"_6引用",[365,12312,12314],{"id":12313},"_61引用基本用法","6.1引用基本用法",[14,12316,12317],{},"引用的本质：给变量起别名",[14,12319,12320],{},"语法：数据类型 &别名=原名",[49,12322,12324],{"className":415,"code":12323,"language":417,"meta":46,"style":46},"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",[28,12325,12326,12334,12338,12350,12362,12366,12385,12404,12408,12419,12423,12442,12460,12464,12474,12478,12486],{"__ignoreMap":46},[57,12327,12328,12330,12332],{"class":59,"line":60},[57,12329,429],{"class":136},[57,12331,2246],{"class":70},[57,12333,11126],{"class":140},[57,12335,12336],{"class":59,"line":67},[57,12337,2673],{"emptyLinePlaceholder":350},[57,12339,12340,12342,12344,12346,12348],{"class":59,"line":144},[57,12341,2258],{"class":136},[57,12343,11142],{"class":140},[57,12345,156],{"class":136},[57,12347,2311],{"class":81},[57,12349,1576],{"class":140},[57,12351,12352,12354,12356,12358,12360],{"class":59,"line":150},[57,12353,2258],{"class":136},[57,12355,10857],{"class":136},[57,12357,11218],{"class":140},[57,12359,156],{"class":136},[57,12361,1715],{"class":140},[57,12363,12364],{"class":59,"line":162},[57,12365,2673],{"emptyLinePlaceholder":350},[57,12367,12368,12370,12372,12375,12377,12379,12381,12383],{"class":59,"line":180},[57,12369,6802],{"class":140},[57,12371,1459],{"class":136},[57,12373,12374],{"class":74}," \"a = \"",[57,12376,1727],{"class":136},[57,12378,11142],{"class":140},[57,12380,1459],{"class":136},[57,12382,11742],{"class":140},[57,12384,7541],{"class":63},[57,12386,12387,12389,12391,12394,12396,12398,12400,12402],{"class":59,"line":186},[57,12388,6802],{"class":140},[57,12390,1459],{"class":136},[57,12392,12393],{"class":74}," \"b = \"",[57,12395,1727],{"class":136},[57,12397,11155],{"class":140},[57,12399,1459],{"class":136},[57,12401,11742],{"class":140},[57,12403,7541],{"class":63},[57,12405,12406],{"class":59,"line":197},[57,12407,2673],{"emptyLinePlaceholder":350},[57,12409,12410,12413,12415,12417],{"class":59,"line":241},[57,12411,12412],{"class":140},"    b ",[57,12414,156],{"class":136},[57,12416,6027],{"class":81},[57,12418,1576],{"class":140},[57,12420,12421],{"class":59,"line":249},[57,12422,2673],{"emptyLinePlaceholder":350},[57,12424,12425,12427,12429,12431,12433,12435,12437,12439],{"class":59,"line":262},[57,12426,6802],{"class":140},[57,12428,1459],{"class":136},[57,12430,12374],{"class":74},[57,12432,1727],{"class":136},[57,12434,11142],{"class":140},[57,12436,1459],{"class":136},[57,12438,11742],{"class":140},[57,12440,12441],{"class":63},"\u002F\u002F100\n",[57,12443,12444,12446,12448,12450,12452,12454,12456,12458],{"class":59,"line":281},[57,12445,6802],{"class":140},[57,12447,1459],{"class":136},[57,12449,12393],{"class":74},[57,12451,1727],{"class":136},[57,12453,11155],{"class":140},[57,12455,1459],{"class":136},[57,12457,11742],{"class":140},[57,12459,12441],{"class":63},[57,12461,12462],{"class":59,"line":287},[57,12463,2673],{"emptyLinePlaceholder":350},[57,12465,12466,12468,12470,12472],{"class":59,"line":298},[57,12467,2576],{"class":70},[57,12469,168],{"class":140},[57,12471,2581],{"class":74},[57,12473,2992],{"class":140},[57,12475,12476],{"class":59,"line":311},[57,12477,2673],{"emptyLinePlaceholder":350},[57,12479,12480,12482,12484],{"class":59,"line":322},[57,12481,4363],{"class":136},[57,12483,4366],{"class":81},[57,12485,1576],{"class":140},[57,12487,12488],{"class":59,"line":1929},[57,12489,1847],{"class":140},[365,12491,12493],{"id":12492},"_62引用的注意事项","6.2引用的注意事项",[377,12495,12496],{},[380,12497,12498],{},"引用必须要初始化",[49,12500,12502],{"className":415,"code":12501,"language":417,"meta":46,"style":46},"int &b;\u002F\u002F非常错误！\n",[28,12503,12504],{"__ignoreMap":46},[57,12505,12506,12508,12510,12513],{"class":59,"line":60},[57,12507,429],{"class":136},[57,12509,10857],{"class":136},[57,12511,12512],{"class":140},"b;",[57,12514,12515],{"class":63},"\u002F\u002F非常错误！\n",[377,12517,12518],{"start":67},[380,12519,12520],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[49,12522,12524],{"className":415,"code":12523,"language":417,"meta":46,"style":46},"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",[28,12525,12526,12534,12546,12558,12566,12582,12595,12613,12631,12651,12661,12669],{"__ignoreMap":46},[57,12527,12528,12530,12532],{"class":59,"line":60},[57,12529,429],{"class":136},[57,12531,2246],{"class":70},[57,12533,11126],{"class":140},[57,12535,12536,12538,12540,12542,12544],{"class":59,"line":67},[57,12537,2258],{"class":136},[57,12539,11142],{"class":140},[57,12541,156],{"class":136},[57,12543,2311],{"class":81},[57,12545,1576],{"class":140},[57,12547,12548,12550,12552,12554,12556],{"class":59,"line":144},[57,12549,2258],{"class":136},[57,12551,11155],{"class":140},[57,12553,156],{"class":136},[57,12555,9223],{"class":81},[57,12557,1576],{"class":140},[57,12559,12560,12563],{"class":59,"line":150},[57,12561,12562],{"class":63},"    \u002F\u002Fint &c;",[57,12564,12565],{"class":63}," \u002F\u002F错误，引用必须初始化\n",[57,12567,12568,12570,12572,12574,12576,12579],{"class":59,"line":162},[57,12569,2258],{"class":136},[57,12571,10857],{"class":136},[57,12573,3219],{"class":140},[57,12575,156],{"class":136},[57,12577,12578],{"class":140}," a;",[57,12580,12581],{"class":63}," \u002F\u002F一旦初始化后，就不可以更改\n",[57,12583,12584,12587,12589,12592],{"class":59,"line":180},[57,12585,12586],{"class":140},"    c ",[57,12588,156],{"class":136},[57,12590,12591],{"class":140}," b;",[57,12593,12594],{"class":63}," \u002F\u002F这是赋值操作，不是更改引用\n",[57,12596,12597,12599,12601,12603,12605,12607,12609,12611],{"class":59,"line":186},[57,12598,6802],{"class":140},[57,12600,1459],{"class":136},[57,12602,12374],{"class":74},[57,12604,1727],{"class":136},[57,12606,11142],{"class":140},[57,12608,1459],{"class":136},[57,12610,11742],{"class":140},[57,12612,7526],{"class":63},[57,12614,12615,12617,12619,12621,12623,12625,12627,12629],{"class":59,"line":197},[57,12616,6802],{"class":140},[57,12618,1459],{"class":136},[57,12620,12393],{"class":74},[57,12622,1727],{"class":136},[57,12624,11155],{"class":140},[57,12626,1459],{"class":136},[57,12628,11742],{"class":140},[57,12630,7526],{"class":63},[57,12632,12633,12635,12637,12640,12642,12645,12647,12649],{"class":59,"line":241},[57,12634,6802],{"class":140},[57,12636,1459],{"class":136},[57,12638,12639],{"class":74}," \"c = \"",[57,12641,1727],{"class":136},[57,12643,12644],{"class":140}," c ",[57,12646,1459],{"class":136},[57,12648,11742],{"class":140},[57,12650,7526],{"class":63},[57,12652,12653,12655,12657,12659],{"class":59,"line":249},[57,12654,2576],{"class":70},[57,12656,168],{"class":140},[57,12658,2581],{"class":74},[57,12660,2992],{"class":140},[57,12662,12663,12665,12667],{"class":59,"line":262},[57,12664,4363],{"class":136},[57,12666,4366],{"class":81},[57,12668,1576],{"class":140},[57,12670,12671],{"class":59,"line":281},[57,12672,1847],{"class":140},[365,12674,12676],{"id":12675},"_63引用做函数参数","6.3引用做函数参数",[14,12678,12679],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,12681,12682],{},"优点：可以简化指针修改实参",[49,12684,12686],{"className":415,"code":12685,"language":417,"meta":46,"style":46},"\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",[28,12687,12688,12693,12716,12727,12737,12746,12750,12754,12759,12781,12793,12805,12815,12819,12823,12828,12850,12860,12868,12876,12880,12884,12892,12896,12908,12920,12924,12935,12961,12965,12985,13009,13013,13023,13047,13051,13061,13065,13073],{"__ignoreMap":46},[57,12689,12690],{"class":59,"line":60},[57,12691,12692],{"class":63},"\u002F\u002F1. 值传递\n",[57,12694,12695,12697,12700,12702,12704,12706,12709,12711,12713],{"class":59,"line":67},[57,12696,5637],{"class":136},[57,12698,12699],{"class":70}," mySwap01",[57,12701,168],{"class":140},[57,12703,429],{"class":136},[57,12705,1681],{"class":5489},[57,12707,12708],{"class":140},", ",[57,12710,429],{"class":136},[57,12712,3106],{"class":5489},[57,12714,12715],{"class":140},") {\n",[57,12717,12718,12720,12723,12725],{"class":59,"line":144},[57,12719,2258],{"class":136},[57,12721,12722],{"class":140}," temp ",[57,12724,156],{"class":136},[57,12726,1715],{"class":140},[57,12728,12729,12732,12734],{"class":59,"line":150},[57,12730,12731],{"class":140},"    a ",[57,12733,156],{"class":136},[57,12735,12736],{"class":140}," b;\n",[57,12738,12739,12741,12743],{"class":59,"line":162},[57,12740,12412],{"class":140},[57,12742,156],{"class":136},[57,12744,12745],{"class":140}," temp;\n",[57,12747,12748],{"class":59,"line":180},[57,12749,1847],{"class":140},[57,12751,12752],{"class":59,"line":186},[57,12753,2673],{"emptyLinePlaceholder":350},[57,12755,12756],{"class":59,"line":197},[57,12757,12758],{"class":63},"\u002F\u002F2. 地址传递\n",[57,12760,12761,12763,12766,12768,12771,12773,12775,12777,12779],{"class":59,"line":241},[57,12762,5637],{"class":136},[57,12764,12765],{"class":70}," mySwap02",[57,12767,168],{"class":140},[57,12769,12770],{"class":136},"int*",[57,12772,1681],{"class":5489},[57,12774,12708],{"class":140},[57,12776,12770],{"class":136},[57,12778,3106],{"class":5489},[57,12780,12715],{"class":140},[57,12782,12783,12785,12787,12789,12791],{"class":59,"line":249},[57,12784,2258],{"class":136},[57,12786,12722],{"class":140},[57,12788,156],{"class":136},[57,12790,6791],{"class":136},[57,12792,6470],{"class":140},[57,12794,12795,12797,12799,12801,12803],{"class":59,"line":262},[57,12796,6676],{"class":136},[57,12798,11192],{"class":140},[57,12800,156],{"class":136},[57,12802,6791],{"class":136},[57,12804,6342],{"class":140},[57,12806,12807,12809,12811,12813],{"class":59,"line":281},[57,12808,6676],{"class":136},[57,12810,11218],{"class":140},[57,12812,156],{"class":136},[57,12814,12745],{"class":140},[57,12816,12817],{"class":59,"line":287},[57,12818,1847],{"class":140},[57,12820,12821],{"class":59,"line":298},[57,12822,2673],{"emptyLinePlaceholder":350},[57,12824,12825],{"class":59,"line":311},[57,12826,12827],{"class":63},"\u002F\u002F3. 引用传递\n",[57,12829,12830,12832,12835,12837,12840,12842,12844,12846,12848],{"class":59,"line":322},[57,12831,5637],{"class":136},[57,12833,12834],{"class":70}," mySwap03",[57,12836,168],{"class":140},[57,12838,12839],{"class":136},"int&",[57,12841,1681],{"class":5489},[57,12843,12708],{"class":140},[57,12845,12839],{"class":136},[57,12847,3106],{"class":5489},[57,12849,12715],{"class":140},[57,12851,12852,12854,12856,12858],{"class":59,"line":1929},[57,12853,2258],{"class":136},[57,12855,12722],{"class":140},[57,12857,156],{"class":136},[57,12859,1715],{"class":140},[57,12861,12862,12864,12866],{"class":59,"line":1950},[57,12863,12731],{"class":140},[57,12865,156],{"class":136},[57,12867,12736],{"class":140},[57,12869,12870,12872,12874],{"class":59,"line":1955},[57,12871,12412],{"class":140},[57,12873,156],{"class":136},[57,12875,12745],{"class":140},[57,12877,12878],{"class":59,"line":1969},[57,12879,1847],{"class":140},[57,12881,12882],{"class":59,"line":1974},[57,12883,2673],{"emptyLinePlaceholder":350},[57,12885,12886,12888,12890],{"class":59,"line":2001},[57,12887,429],{"class":136},[57,12889,2246],{"class":70},[57,12891,11126],{"class":140},[57,12893,12894],{"class":59,"line":2006},[57,12895,2673],{"emptyLinePlaceholder":350},[57,12897,12898,12900,12902,12904,12906],{"class":59,"line":2023},[57,12899,2258],{"class":136},[57,12901,11142],{"class":140},[57,12903,156],{"class":136},[57,12905,2311],{"class":81},[57,12907,1576],{"class":140},[57,12909,12910,12912,12914,12916,12918],{"class":59,"line":2028},[57,12911,2258],{"class":136},[57,12913,11155],{"class":140},[57,12915,156],{"class":136},[57,12917,9223],{"class":81},[57,12919,1576],{"class":140},[57,12921,12922],{"class":59,"line":2033},[57,12923,2673],{"emptyLinePlaceholder":350},[57,12925,12926,12929,12932],{"class":59,"line":2038},[57,12927,12928],{"class":70},"    mySwap01",[57,12930,12931],{"class":140},"(a, b);",[57,12933,12934],{"class":63},"\u002F\u002F值传递，形参不会修饰实参\n",[57,12936,12937,12939,12941,12944,12946,12948,12950,12953,12955,12957,12959],{"class":59,"line":2052},[57,12938,6802],{"class":140},[57,12940,1459],{"class":136},[57,12942,12943],{"class":74}," \"a:\"",[57,12945,1727],{"class":136},[57,12947,11142],{"class":140},[57,12949,1459],{"class":136},[57,12951,12952],{"class":74}," \" b:\"",[57,12954,1727],{"class":136},[57,12956,11155],{"class":140},[57,12958,1459],{"class":136},[57,12960,9113],{"class":140},[57,12962,12963],{"class":59,"line":2057},[57,12964,2673],{"emptyLinePlaceholder":350},[57,12966,12967,12970,12972,12974,12977,12979,12982],{"class":59,"line":2850},[57,12968,12969],{"class":70},"    mySwap02",[57,12971,168],{"class":140},[57,12973,770],{"class":136},[57,12975,12976],{"class":140},"a, ",[57,12978,770],{"class":136},[57,12980,12981],{"class":140},"b);",[57,12983,12984],{"class":63},"\u002F\u002F地址传递，形参会修饰实参\n",[57,12986,12987,12989,12991,12993,12995,12997,12999,13001,13003,13005,13007],{"class":59,"line":2864},[57,12988,6802],{"class":140},[57,12990,1459],{"class":136},[57,12992,12943],{"class":74},[57,12994,1727],{"class":136},[57,12996,11142],{"class":140},[57,12998,1459],{"class":136},[57,13000,12952],{"class":74},[57,13002,1727],{"class":136},[57,13004,11155],{"class":140},[57,13006,1459],{"class":136},[57,13008,9113],{"class":140},[57,13010,13011],{"class":59,"line":2872},[57,13012,2673],{"emptyLinePlaceholder":350},[57,13014,13015,13018,13020],{"class":59,"line":2877},[57,13016,13017],{"class":70},"    mySwap03",[57,13019,12931],{"class":140},[57,13021,13022],{"class":63},"\u002F\u002F引用传递，形参会修饰实参\n",[57,13024,13025,13027,13029,13031,13033,13035,13037,13039,13041,13043,13045],{"class":59,"line":2883},[57,13026,6802],{"class":140},[57,13028,1459],{"class":136},[57,13030,12943],{"class":74},[57,13032,1727],{"class":136},[57,13034,11142],{"class":140},[57,13036,1459],{"class":136},[57,13038,12952],{"class":74},[57,13040,1727],{"class":136},[57,13042,11155],{"class":140},[57,13044,1459],{"class":136},[57,13046,9113],{"class":140},[57,13048,13049],{"class":59,"line":2889},[57,13050,2673],{"emptyLinePlaceholder":350},[57,13052,13053,13055,13057,13059],{"class":59,"line":2894},[57,13054,2576],{"class":70},[57,13056,168],{"class":140},[57,13058,2581],{"class":74},[57,13060,2992],{"class":140},[57,13062,13063],{"class":59,"line":8221},[57,13064,2673],{"emptyLinePlaceholder":350},[57,13066,13067,13069,13071],{"class":59,"line":8245},[57,13068,4363],{"class":136},[57,13070,4366],{"class":81},[57,13072,1576],{"class":140},[57,13074,13075],{"class":59,"line":8250},[57,13076,1847],{"class":140},[365,13078,13080],{"id":13079},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,13082,13083],{},"作用：引用是可以作为函数的返回值存在的",[14,13085,9298,13086],{},[33,13087,13088],{},"不要返回局部变量引用",[14,13090,13091],{},"用法：函数调用作为左值",[49,13093,13095],{"className":10214,"code":13094,"language":10216,"meta":46,"style":46},"\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",[28,13096,13097,13102,13110,13125,13131,13135,13139,13144,13152,13169,13175,13179,13183,13191,13195,13200,13214,13234,13253,13257,13262,13275,13295,13313,13317,13333,13337,13356,13374,13378,13388,13392,13400],{"__ignoreMap":46},[57,13098,13099],{"class":59,"line":60},[57,13100,13101],{"class":63},"\u002F\u002F返回局部变量引用\n",[57,13103,13104,13106,13108],{"class":59,"line":67},[57,13105,12839],{"class":136},[57,13107,5861],{"class":70},[57,13109,11126],{"class":140},[57,13111,13112,13114,13116,13118,13120,13122],{"class":59,"line":144},[57,13113,2258],{"class":136},[57,13115,11142],{"class":140},[57,13117,156],{"class":136},[57,13119,2311],{"class":81},[57,13121,478],{"class":140},[57,13123,13124],{"class":63}," \u002F\u002F局部变量\n",[57,13126,13127,13129],{"class":59,"line":150},[57,13128,4363],{"class":136},[57,13130,1715],{"class":140},[57,13132,13133],{"class":59,"line":162},[57,13134,1847],{"class":140},[57,13136,13137],{"class":59,"line":180},[57,13138,2673],{"emptyLinePlaceholder":350},[57,13140,13141],{"class":59,"line":186},[57,13142,13143],{"class":63},"\u002F\u002F返回静态变量引用\n",[57,13145,13146,13148,13150],{"class":59,"line":197},[57,13147,12839],{"class":136},[57,13149,5930],{"class":70},[57,13151,11126],{"class":140},[57,13153,13154,13156,13158,13160,13162,13164,13166],{"class":59,"line":241},[57,13155,11293],{"class":136},[57,13157,2655],{"class":136},[57,13159,11142],{"class":140},[57,13161,156],{"class":136},[57,13163,9223],{"class":81},[57,13165,478],{"class":140},[57,13167,13168],{"class":63},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[57,13170,13171,13173],{"class":59,"line":249},[57,13172,4363],{"class":136},[57,13174,1715],{"class":140},[57,13176,13177],{"class":59,"line":262},[57,13178,1847],{"class":140},[57,13180,13181],{"class":59,"line":281},[57,13182,2673],{"emptyLinePlaceholder":350},[57,13184,13185,13187,13189],{"class":59,"line":287},[57,13186,429],{"class":136},[57,13188,2246],{"class":70},[57,13190,11126],{"class":140},[57,13192,13193],{"class":59,"line":298},[57,13194,2673],{"emptyLinePlaceholder":350},[57,13196,13197],{"class":59,"line":311},[57,13198,13199],{"class":63},"    \u002F\u002F不能返回局部变量的引用\n",[57,13201,13202,13205,13208,13210,13212],{"class":59,"line":322},[57,13203,13204],{"class":136},"    int&",[57,13206,13207],{"class":140}," ref ",[57,13209,156],{"class":136},[57,13211,5861],{"class":70},[57,13213,5909],{"class":140},[57,13215,13216,13218,13220,13223,13225,13227,13229,13231],{"class":59,"line":1929},[57,13217,6802],{"class":140},[57,13219,1459],{"class":136},[57,13221,13222],{"class":74}," \"ref = \"",[57,13224,1727],{"class":136},[57,13226,13207],{"class":140},[57,13228,1459],{"class":136},[57,13230,11742],{"class":140},[57,13232,13233],{"class":63},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[57,13235,13236,13238,13240,13242,13244,13246,13248,13250],{"class":59,"line":1950},[57,13237,6802],{"class":140},[57,13239,1459],{"class":136},[57,13241,13222],{"class":74},[57,13243,1727],{"class":136},[57,13245,13207],{"class":140},[57,13247,1459],{"class":136},[57,13249,11742],{"class":140},[57,13251,13252],{"class":63},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[57,13254,13255],{"class":59,"line":1955},[57,13256,2673],{"emptyLinePlaceholder":350},[57,13258,13259],{"class":59,"line":1969},[57,13260,13261],{"class":63},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[57,13263,13264,13266,13269,13271,13273],{"class":59,"line":1974},[57,13265,13204],{"class":136},[57,13267,13268],{"class":140}," ref2 ",[57,13270,156],{"class":136},[57,13272,5930],{"class":70},[57,13274,5909],{"class":140},[57,13276,13277,13279,13281,13284,13286,13288,13290,13292],{"class":59,"line":2001},[57,13278,6802],{"class":140},[57,13280,1459],{"class":136},[57,13282,13283],{"class":74}," \"ref2 = \"",[57,13285,1727],{"class":136},[57,13287,13268],{"class":140},[57,13289,1459],{"class":136},[57,13291,11742],{"class":140},[57,13293,13294],{"class":63}," \u002F\u002F20\n",[57,13296,13297,13299,13301,13303,13305,13307,13309,13311],{"class":59,"line":2006},[57,13298,6802],{"class":140},[57,13300,1459],{"class":136},[57,13302,13283],{"class":74},[57,13304,1727],{"class":136},[57,13306,13268],{"class":140},[57,13308,1459],{"class":136},[57,13310,11742],{"class":140},[57,13312,13294],{"class":63},[57,13314,13315],{"class":59,"line":2023},[57,13316,2673],{"emptyLinePlaceholder":350},[57,13318,13319,13321,13324,13326,13328,13330],{"class":59,"line":2028},[57,13320,5975],{"class":70},[57,13322,13323],{"class":140},"() ",[57,13325,156],{"class":136},[57,13327,3272],{"class":81},[57,13329,478],{"class":140},[57,13331,13332],{"class":63},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[57,13334,13335],{"class":59,"line":2033},[57,13336,2673],{"emptyLinePlaceholder":350},[57,13338,13339,13341,13343,13345,13347,13349,13351,13353],{"class":59,"line":2038},[57,13340,6802],{"class":140},[57,13342,1459],{"class":136},[57,13344,13283],{"class":74},[57,13346,1727],{"class":136},[57,13348,13268],{"class":140},[57,13350,1459],{"class":136},[57,13352,11742],{"class":140},[57,13354,13355],{"class":63}," \u002F\u002F1000\n",[57,13357,13358,13360,13362,13364,13366,13368,13370,13372],{"class":59,"line":2052},[57,13359,6802],{"class":140},[57,13361,1459],{"class":136},[57,13363,13283],{"class":74},[57,13365,1727],{"class":136},[57,13367,13268],{"class":140},[57,13369,1459],{"class":136},[57,13371,11742],{"class":140},[57,13373,13355],{"class":63},[57,13375,13376],{"class":59,"line":2057},[57,13377,2673],{"emptyLinePlaceholder":350},[57,13379,13380,13382,13384,13386],{"class":59,"line":2850},[57,13381,2576],{"class":70},[57,13383,168],{"class":140},[57,13385,2581],{"class":74},[57,13387,2992],{"class":140},[57,13389,13390],{"class":59,"line":2864},[57,13391,2673],{"emptyLinePlaceholder":350},[57,13393,13394,13396,13398],{"class":59,"line":2872},[57,13395,4363],{"class":136},[57,13397,4366],{"class":81},[57,13399,1576],{"class":140},[57,13401,13402],{"class":59,"line":2877},[57,13403,1847],{"class":140},[365,13405,13407],{"id":13406},"_65引用的本质","6.5引用的本质",[14,13409,13410,13411],{},"本质：",[33,13412,13413],{},"引用的本质在c++内部实现是一个指针常量.",[49,13415,13417],{"className":415,"code":13416,"language":417,"meta":46,"style":46},"\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",[28,13418,13419,13424,13440,13454,13458,13467,13479,13484,13489,13500,13513,13517,13533,13550,13554,13562,13570],{"__ignoreMap":46},[57,13420,13421],{"class":59,"line":60},[57,13422,13423],{"class":63},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[57,13425,13426,13428,13430,13432,13434,13437],{"class":59,"line":67},[57,13427,5637],{"class":136},[57,13429,11658],{"class":70},[57,13431,168],{"class":140},[57,13433,12839],{"class":136},[57,13435,13436],{"class":5489}," ref",[57,13438,13439],{"class":140},"){\n",[57,13441,13442,13445,13447,13449,13451],{"class":59,"line":144},[57,13443,13444],{"class":140},"    ref ",[57,13446,156],{"class":136},[57,13448,6027],{"class":81},[57,13450,478],{"class":140},[57,13452,13453],{"class":63}," \u002F\u002F ref是引用，转换为*ref = 100\n",[57,13455,13456],{"class":59,"line":150},[57,13457,1847],{"class":140},[57,13459,13460,13462,13464],{"class":59,"line":162},[57,13461,429],{"class":136},[57,13463,2246],{"class":70},[57,13465,13466],{"class":140},"(){\n",[57,13468,13469,13471,13473,13475,13477],{"class":59,"line":180},[57,13470,2258],{"class":136},[57,13472,11142],{"class":140},[57,13474,156],{"class":136},[57,13476,2311],{"class":81},[57,13478,1576],{"class":140},[57,13480,13481],{"class":59,"line":186},[57,13482,13483],{"class":140},"    \n",[57,13485,13486],{"class":59,"line":197},[57,13487,13488],{"class":63},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[57,13490,13491,13493,13495,13497],{"class":59,"line":241},[57,13492,13204],{"class":136},[57,13494,13207],{"class":140},[57,13496,156],{"class":136},[57,13498,13499],{"class":140}," a; \n",[57,13501,13502,13504,13506,13508,13510],{"class":59,"line":249},[57,13503,13444],{"class":140},[57,13505,156],{"class":136},[57,13507,9223],{"class":81},[57,13509,478],{"class":140},[57,13511,13512],{"class":63}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[57,13514,13515],{"class":59,"line":262},[57,13516,13483],{"class":140},[57,13518,13519,13521,13523,13525,13527,13529,13531],{"class":59,"line":281},[57,13520,6802],{"class":140},[57,13522,1459],{"class":136},[57,13524,12943],{"class":74},[57,13526,1727],{"class":136},[57,13528,11142],{"class":140},[57,13530,1459],{"class":136},[57,13532,9113],{"class":140},[57,13534,13535,13537,13539,13542,13544,13546,13548],{"class":59,"line":287},[57,13536,6802],{"class":140},[57,13538,1459],{"class":136},[57,13540,13541],{"class":74}," \"ref:\"",[57,13543,1727],{"class":136},[57,13545,13207],{"class":140},[57,13547,1459],{"class":136},[57,13549,9113],{"class":140},[57,13551,13552],{"class":59,"line":298},[57,13553,13483],{"class":140},[57,13555,13556,13559],{"class":59,"line":311},[57,13557,13558],{"class":70},"    func",[57,13560,13561],{"class":140},"(a);\n",[57,13563,13564,13566,13568],{"class":59,"line":322},[57,13565,4363],{"class":136},[57,13567,4366],{"class":81},[57,13569,1576],{"class":140},[57,13571,13572],{"class":59,"line":1929},[57,13573,1847],{"class":140},[14,13575,11605],{},[377,13577,13578,13581],{},[380,13579,13580],{},"引用的本质，就是一个指针常量",[380,13582,13583],{},"引用一旦初始化，就不可以发生改变",[365,13585,13587],{"id":13586},"_66常量引用","6.6常量引用",[14,13589,13590],{},"作用：常量引用主要用来修饰形参",[14,13592,13593,13594,13597],{},"在函数形参列表中，可以加",[33,13595,13596],{},"const修饰形参","，防止形参改变实参",[49,13599,13601],{"className":415,"code":13600,"language":417,"meta":46,"style":46},"\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",[28,13602,13603,13608,13613,13632,13637,13650,13654,13658,13666,13670,13675,13680,13694,13698,13706,13718,13722,13727,13739,13746,13750,13760,13764,13772],{"__ignoreMap":46},[57,13604,13605],{"class":59,"line":60},[57,13606,13607],{"class":63},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[57,13609,13610],{"class":59,"line":67},[57,13611,13612],{"class":63},"\u002F\u002F加上const就不能修改实参的\n",[57,13614,13615,13617,13620,13622,13624,13627,13630],{"class":59,"line":144},[57,13616,5637],{"class":136},[57,13618,13619],{"class":70}," showValue",[57,13621,168],{"class":140},[57,13623,7065],{"class":136},[57,13625,13626],{"class":136}," int&",[57,13628,13629],{"class":5489}," v",[57,13631,12715],{"class":140},[57,13633,13634],{"class":59,"line":150},[57,13635,13636],{"class":63},"    \u002F\u002Fv += 100;\n",[57,13638,13639,13641,13643,13646,13648],{"class":59,"line":162},[57,13640,6802],{"class":140},[57,13642,1459],{"class":136},[57,13644,13645],{"class":140}," v ",[57,13647,1459],{"class":136},[57,13649,9113],{"class":140},[57,13651,13652],{"class":59,"line":180},[57,13653,1847],{"class":140},[57,13655,13656],{"class":59,"line":186},[57,13657,2673],{"emptyLinePlaceholder":350},[57,13659,13660,13662,13664],{"class":59,"line":197},[57,13661,429],{"class":136},[57,13663,2246],{"class":70},[57,13665,11126],{"class":140},[57,13667,13668],{"class":59,"line":241},[57,13669,2673],{"emptyLinePlaceholder":350},[57,13671,13672],{"class":59,"line":249},[57,13673,13674],{"class":63},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[57,13676,13677],{"class":59,"line":262},[57,13678,13679],{"class":63},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[57,13681,13682,13684,13686,13688,13690,13692],{"class":59,"line":281},[57,13683,11494],{"class":136},[57,13685,13626],{"class":136},[57,13687,13207],{"class":140},[57,13689,156],{"class":136},[57,13691,2311],{"class":81},[57,13693,1576],{"class":140},[57,13695,13696],{"class":59,"line":287},[57,13697,2673],{"emptyLinePlaceholder":350},[57,13699,13700,13703],{"class":59,"line":298},[57,13701,13702],{"class":63},"    \u002F\u002Fref = 100;",[57,13704,13705],{"class":63},"  \u002F\u002F加入const后不可以修改变量\n",[57,13707,13708,13710,13712,13714,13716],{"class":59,"line":311},[57,13709,6802],{"class":140},[57,13711,1459],{"class":136},[57,13713,13207],{"class":140},[57,13715,1459],{"class":136},[57,13717,9113],{"class":140},[57,13719,13720],{"class":59,"line":322},[57,13721,2673],{"emptyLinePlaceholder":350},[57,13723,13724],{"class":59,"line":1929},[57,13725,13726],{"class":63},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[57,13728,13729,13731,13733,13735,13737],{"class":59,"line":1950},[57,13730,2258],{"class":136},[57,13732,11142],{"class":140},[57,13734,156],{"class":136},[57,13736,2311],{"class":81},[57,13738,1576],{"class":140},[57,13740,13741,13744],{"class":59,"line":1955},[57,13742,13743],{"class":70},"    showValue",[57,13745,13561],{"class":140},[57,13747,13748],{"class":59,"line":1969},[57,13749,2673],{"emptyLinePlaceholder":350},[57,13751,13752,13754,13756,13758],{"class":59,"line":1974},[57,13753,2576],{"class":70},[57,13755,168],{"class":140},[57,13757,2581],{"class":74},[57,13759,2992],{"class":140},[57,13761,13762],{"class":59,"line":2001},[57,13763,2673],{"emptyLinePlaceholder":350},[57,13765,13766,13768,13770],{"class":59,"line":2006},[57,13767,4363],{"class":136},[57,13769,4366],{"class":81},[57,13771,1576],{"class":140},[57,13773,13774],{"class":59,"line":2023},[57,13775,1847],{"class":140},[342,13777,13778],{},"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":46,"searchDepth":67,"depth":67,"links":13780},[13781,13782,13783,13784,13785,13786],{"id":12313,"depth":67,"text":12314},{"id":12492,"depth":67,"text":12493},{"id":12675,"depth":67,"text":12676},{"id":13079,"depth":67,"text":13080},{"id":13406,"depth":67,"text":13407},{"id":13586,"depth":67,"text":13587},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12305,"description":46},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13793,"title":13794,"body":13795,"description":46,"extension":348,"meta":14875,"navigation":350,"path":14876,"seo":14877,"stem":14878,"__hash__":14879},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13796,"toc":14867},[13797,13800,13804,13807,13812,14043,14045,14056,14060,14063,14071,14175,14178,14182,14185,14189,14192,14197,14219,14225,14552,14555,14559,14567,14864],[10,13798,13794],{"id":13799},"_7函数高级部分",[365,13801,13803],{"id":13802},"_71函数默认参数","7.1函数默认参数",[14,13805,13806],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,13808,5454,13809],{},[28,13810,13811],{}," 返回值类型  函数名 （参数= 默认值）{}",[49,13813,13815],{"className":415,"code":13814,"language":417,"meta":46,"style":46},"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",[28,13816,13817,13852,13867,13871,13875,13880,13885,13914,13934,13944,13948,13952,13960,13964,13991,14013,14017,14027,14031,14039],{"__ignoreMap":46},[57,13818,13819,13821,13823,13825,13827,13829,13831,13833,13835,13838,13840,13842,13844,13846,13848,13850],{"class":59,"line":60},[57,13820,429],{"class":136},[57,13822,11658],{"class":70},[57,13824,168],{"class":140},[57,13826,429],{"class":136},[57,13828,1681],{"class":5489},[57,13830,12708],{"class":140},[57,13832,429],{"class":136},[57,13834,3106],{"class":5489},[57,13836,13837],{"class":136}," =",[57,13839,2311],{"class":81},[57,13841,12708],{"class":140},[57,13843,429],{"class":136},[57,13845,3122],{"class":5489},[57,13847,13837],{"class":136},[57,13849,2311],{"class":81},[57,13851,12715],{"class":140},[57,13853,13854,13856,13858,13860,13862,13864],{"class":59,"line":67},[57,13855,4363],{"class":136},[57,13857,11142],{"class":140},[57,13859,897],{"class":136},[57,13861,11155],{"class":140},[57,13863,897],{"class":136},[57,13865,13866],{"class":140}," c;\n",[57,13868,13869],{"class":59,"line":144},[57,13870,1847],{"class":140},[57,13872,13873],{"class":59,"line":150},[57,13874,2673],{"emptyLinePlaceholder":350},[57,13876,13877],{"class":59,"line":162},[57,13878,13879],{"class":63},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[57,13881,13882],{"class":59,"line":180},[57,13883,13884],{"class":63},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[57,13886,13887,13889,13892,13894,13896,13898,13900,13902,13904,13906,13908,13910,13912],{"class":59,"line":186},[57,13888,429],{"class":136},[57,13890,13891],{"class":70}," func2",[57,13893,168],{"class":140},[57,13895,429],{"class":136},[57,13897,1681],{"class":5489},[57,13899,13837],{"class":136},[57,13901,2311],{"class":81},[57,13903,12708],{"class":140},[57,13905,429],{"class":136},[57,13907,3106],{"class":5489},[57,13909,13837],{"class":136},[57,13911,2311],{"class":81},[57,13913,2992],{"class":140},[57,13915,13916,13918,13920,13922,13924,13926,13928,13930,13932],{"class":59,"line":197},[57,13917,429],{"class":136},[57,13919,13891],{"class":70},[57,13921,168],{"class":140},[57,13923,429],{"class":136},[57,13925,1681],{"class":5489},[57,13927,12708],{"class":140},[57,13929,429],{"class":136},[57,13931,3106],{"class":5489},[57,13933,12715],{"class":140},[57,13935,13936,13938,13940,13942],{"class":59,"line":241},[57,13937,4363],{"class":136},[57,13939,11142],{"class":140},[57,13941,897],{"class":136},[57,13943,12736],{"class":140},[57,13945,13946],{"class":59,"line":249},[57,13947,1847],{"class":140},[57,13949,13950],{"class":59,"line":262},[57,13951,2673],{"emptyLinePlaceholder":350},[57,13953,13954,13956,13958],{"class":59,"line":281},[57,13955,429],{"class":136},[57,13957,2246],{"class":70},[57,13959,11126],{"class":140},[57,13961,13962],{"class":59,"line":287},[57,13963,2673],{"emptyLinePlaceholder":350},[57,13965,13966,13968,13970,13973,13975,13977,13979,13981,13983,13985,13987,13989],{"class":59,"line":298},[57,13967,6802],{"class":140},[57,13969,1459],{"class":136},[57,13971,13972],{"class":74}," \"ret = \"",[57,13974,1727],{"class":136},[57,13976,11658],{"class":70},[57,13978,168],{"class":140},[57,13980,1116],{"class":81},[57,13982,12708],{"class":140},[57,13984,1116],{"class":81},[57,13986,229],{"class":140},[57,13988,1459],{"class":136},[57,13990,9113],{"class":140},[57,13992,13993,13995,13997,13999,14001,14003,14005,14007,14009,14011],{"class":59,"line":311},[57,13994,6802],{"class":140},[57,13996,1459],{"class":136},[57,13998,13972],{"class":74},[57,14000,1727],{"class":136},[57,14002,11658],{"class":70},[57,14004,168],{"class":140},[57,14006,728],{"class":81},[57,14008,229],{"class":140},[57,14010,1459],{"class":136},[57,14012,9113],{"class":140},[57,14014,14015],{"class":59,"line":322},[57,14016,2673],{"emptyLinePlaceholder":350},[57,14018,14019,14021,14023,14025],{"class":59,"line":1929},[57,14020,2576],{"class":70},[57,14022,168],{"class":140},[57,14024,2581],{"class":74},[57,14026,2992],{"class":140},[57,14028,14029],{"class":59,"line":1950},[57,14030,2673],{"emptyLinePlaceholder":350},[57,14032,14033,14035,14037],{"class":59,"line":1955},[57,14034,4363],{"class":136},[57,14036,4366],{"class":81},[57,14038,1576],{"class":140},[57,14040,14041],{"class":59,"line":1969},[57,14042,1847],{"class":140},[14,14044,11605],{},[377,14046,14047,14050,14053],{},[380,14048,14049],{},"我传就用我；没传就用你",[380,14051,14052],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[380,14054,14055],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[365,14057,14059],{"id":14058},"_72函数的占位参数","7.2函数的占位参数",[14,14061,14062],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,14064,14065,14067,14068],{},[33,14066,5454],{}," ",[28,14069,14070],{},"返回值类型 函数名 (数据类型){}",[49,14072,14074],{"className":415,"code":14073,"language":417,"meta":46,"style":46},"\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",[28,14075,14076,14081,14099,14112,14116,14124,14128,14145,14149,14159,14163,14171],{"__ignoreMap":46},[57,14077,14078],{"class":59,"line":60},[57,14079,14080],{"class":63},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[57,14082,14083,14085,14087,14089,14091,14093,14095,14097],{"class":59,"line":67},[57,14084,5637],{"class":136},[57,14086,11658],{"class":70},[57,14088,168],{"class":140},[57,14090,429],{"class":136},[57,14092,1681],{"class":5489},[57,14094,12708],{"class":140},[57,14096,429],{"class":136},[57,14098,12715],{"class":140},[57,14100,14101,14103,14105,14108,14110],{"class":59,"line":144},[57,14102,6802],{"class":140},[57,14104,1459],{"class":136},[57,14106,14107],{"class":74}," \"this is func\"",[57,14109,1727],{"class":136},[57,14111,9113],{"class":140},[57,14113,14114],{"class":59,"line":150},[57,14115,1847],{"class":140},[57,14117,14118,14120,14122],{"class":59,"line":162},[57,14119,429],{"class":136},[57,14121,2246],{"class":70},[57,14123,11126],{"class":140},[57,14125,14126],{"class":59,"line":180},[57,14127,2673],{"emptyLinePlaceholder":350},[57,14129,14130,14132,14134,14136,14138,14140,14142],{"class":59,"line":186},[57,14131,13558],{"class":70},[57,14133,168],{"class":140},[57,14135,862],{"class":81},[57,14137,273],{"class":140},[57,14139,862],{"class":81},[57,14141,6239],{"class":140},[57,14143,14144],{"class":63}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[57,14146,14147],{"class":59,"line":197},[57,14148,2673],{"emptyLinePlaceholder":350},[57,14150,14151,14153,14155,14157],{"class":59,"line":241},[57,14152,2576],{"class":70},[57,14154,168],{"class":140},[57,14156,2581],{"class":74},[57,14158,2992],{"class":140},[57,14160,14161],{"class":59,"line":249},[57,14162,2673],{"emptyLinePlaceholder":350},[57,14164,14165,14167,14169],{"class":59,"line":262},[57,14166,4363],{"class":136},[57,14168,4366],{"class":81},[57,14170,1576],{"class":140},[57,14172,14173],{"class":59,"line":281},[57,14174,1847],{"class":140},[14,14176,14177],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[365,14179,14181],{"id":14180},"_73函数重载","7.3函数重载",[14,14183,14184],{},"意思是函数名是可以相同的",[394,14186,14188],{"id":14187},"_731基本语法","7.3.1基本语法",[14,14190,14191],{},"作用：函数名可以相同，提高复用性",[14,14193,14194],{},[33,14195,14196],{},"函数重载满足条件：",[1422,14198,14199,14202,14205],{},[380,14200,14201],{},"同一个作用域下",[380,14203,14204],{},"函数名称相同",[380,14206,14207,14208,14211,14212,14215,14216],{},"函数参数",[33,14209,14210],{},"类型不同","  或者 ",[33,14213,14214],{},"个数不同"," 或者 ",[33,14217,14218],{},"顺序不同",[14,14220,14221,14224],{},[33,14222,14223],{},"注意:","  函数的返回值不可以作为函数重载的条件",[49,14226,14228],{"className":10214,"code":14227,"language":10216,"meta":46,"style":46},"\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",[28,14229,14230,14235,14243,14247,14260,14264,14278,14282,14295,14299,14314,14318,14331,14335,14356,14360,14373,14377,14397,14401,14414,14418,14422,14427,14432,14437,14442,14447,14451,14455,14463,14467,14473,14483,14493,14507,14522,14526,14536,14540,14548],{"__ignoreMap":46},[57,14231,14232],{"class":59,"line":60},[57,14233,14234],{"class":63},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[57,14236,14237,14239,14241],{"class":59,"line":67},[57,14238,5637],{"class":136},[57,14240,11658],{"class":70},[57,14242,2249],{"class":140},[57,14244,14245],{"class":59,"line":144},[57,14246,1828],{"class":140},[57,14248,14249,14251,14253,14256,14258],{"class":59,"line":150},[57,14250,6802],{"class":140},[57,14252,1459],{"class":136},[57,14254,14255],{"class":74}," \"func 的调用！\"",[57,14257,1727],{"class":136},[57,14259,9113],{"class":140},[57,14261,14262],{"class":59,"line":162},[57,14263,1847],{"class":140},[57,14265,14266,14268,14270,14272,14274,14276],{"class":59,"line":180},[57,14267,5637],{"class":136},[57,14269,11658],{"class":70},[57,14271,168],{"class":140},[57,14273,429],{"class":136},[57,14275,1681],{"class":5489},[57,14277,238],{"class":140},[57,14279,14280],{"class":59,"line":186},[57,14281,1828],{"class":140},[57,14283,14284,14286,14288,14291,14293],{"class":59,"line":197},[57,14285,6802],{"class":140},[57,14287,1459],{"class":136},[57,14289,14290],{"class":74}," \"func (int a) 的调用！\"",[57,14292,1727],{"class":136},[57,14294,9113],{"class":140},[57,14296,14297],{"class":59,"line":241},[57,14298,1847],{"class":140},[57,14300,14301,14303,14305,14307,14310,14312],{"class":59,"line":249},[57,14302,5637],{"class":136},[57,14304,11658],{"class":70},[57,14306,168],{"class":140},[57,14308,14309],{"class":136},"double",[57,14311,1681],{"class":5489},[57,14313,238],{"class":140},[57,14315,14316],{"class":59,"line":262},[57,14317,1828],{"class":140},[57,14319,14320,14322,14324,14327,14329],{"class":59,"line":281},[57,14321,6802],{"class":140},[57,14323,1459],{"class":136},[57,14325,14326],{"class":74}," \"func (double a)的调用！\"",[57,14328,1727],{"class":136},[57,14330,9113],{"class":140},[57,14332,14333],{"class":59,"line":287},[57,14334,1847],{"class":140},[57,14336,14337,14339,14341,14343,14345,14347,14350,14352,14354],{"class":59,"line":298},[57,14338,5637],{"class":136},[57,14340,11658],{"class":70},[57,14342,168],{"class":140},[57,14344,429],{"class":136},[57,14346,1681],{"class":5489},[57,14348,14349],{"class":140}," ,",[57,14351,14309],{"class":136},[57,14353,3106],{"class":5489},[57,14355,238],{"class":140},[57,14357,14358],{"class":59,"line":311},[57,14359,1828],{"class":140},[57,14361,14362,14364,14366,14369,14371],{"class":59,"line":322},[57,14363,6802],{"class":140},[57,14365,1459],{"class":136},[57,14367,14368],{"class":74}," \"func (int a ,double b) 的调用！\"",[57,14370,1727],{"class":136},[57,14372,9113],{"class":140},[57,14374,14375],{"class":59,"line":1929},[57,14376,1847],{"class":140},[57,14378,14379,14381,14383,14385,14387,14389,14391,14393,14395],{"class":59,"line":1950},[57,14380,5637],{"class":136},[57,14382,11658],{"class":70},[57,14384,168],{"class":140},[57,14386,14309],{"class":136},[57,14388,1681],{"class":5489},[57,14390,14349],{"class":140},[57,14392,429],{"class":136},[57,14394,3106],{"class":5489},[57,14396,238],{"class":140},[57,14398,14399],{"class":59,"line":1955},[57,14400,1828],{"class":140},[57,14402,14403,14405,14407,14410,14412],{"class":59,"line":1969},[57,14404,6802],{"class":140},[57,14406,1459],{"class":136},[57,14408,14409],{"class":74}," \"func (double a ,int b)的调用！\"",[57,14411,1727],{"class":136},[57,14413,9113],{"class":140},[57,14415,14416],{"class":59,"line":1974},[57,14417,1847],{"class":140},[57,14419,14420],{"class":59,"line":2001},[57,14421,2673],{"emptyLinePlaceholder":350},[57,14423,14424],{"class":59,"line":2006},[57,14425,14426],{"class":63},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[57,14428,14429],{"class":59,"line":2023},[57,14430,14431],{"class":63},"\u002F\u002Fint func(double a, int b)\n",[57,14433,14434],{"class":59,"line":2028},[57,14435,14436],{"class":63},"\u002F\u002F{\n",[57,14438,14439],{"class":59,"line":2033},[57,14440,14441],{"class":63},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[57,14443,14444],{"class":59,"line":2038},[57,14445,14446],{"class":63},"\u002F\u002F}\n",[57,14448,14449],{"class":59,"line":2052},[57,14450,2673],{"emptyLinePlaceholder":350},[57,14452,14453],{"class":59,"line":2057},[57,14454,2673],{"emptyLinePlaceholder":350},[57,14456,14457,14459,14461],{"class":59,"line":2850},[57,14458,429],{"class":136},[57,14460,2246],{"class":70},[57,14462,11126],{"class":140},[57,14464,14465],{"class":59,"line":2864},[57,14466,2673],{"emptyLinePlaceholder":350},[57,14468,14469,14471],{"class":59,"line":2872},[57,14470,13558],{"class":70},[57,14472,5909],{"class":140},[57,14474,14475,14477,14479,14481],{"class":59,"line":2877},[57,14476,13558],{"class":70},[57,14478,168],{"class":140},[57,14480,862],{"class":81},[57,14482,2992],{"class":140},[57,14484,14485,14487,14489,14491],{"class":59,"line":2883},[57,14486,13558],{"class":70},[57,14488,168],{"class":140},[57,14490,472],{"class":81},[57,14492,2992],{"class":140},[57,14494,14495,14497,14499,14501,14503,14505],{"class":59,"line":2889},[57,14496,13558],{"class":70},[57,14498,168],{"class":140},[57,14500,862],{"class":81},[57,14502,273],{"class":140},[57,14504,472],{"class":81},[57,14506,2992],{"class":140},[57,14508,14509,14511,14513,14515,14518,14520],{"class":59,"line":2894},[57,14510,13558],{"class":70},[57,14512,168],{"class":140},[57,14514,472],{"class":81},[57,14516,14517],{"class":140}," , ",[57,14519,862],{"class":81},[57,14521,2992],{"class":140},[57,14523,14524],{"class":59,"line":8221},[57,14525,13483],{"class":140},[57,14527,14528,14530,14532,14534],{"class":59,"line":8245},[57,14529,2576],{"class":70},[57,14531,168],{"class":140},[57,14533,2581],{"class":74},[57,14535,2992],{"class":140},[57,14537,14538],{"class":59,"line":8250},[57,14539,2673],{"emptyLinePlaceholder":350},[57,14541,14542,14544,14546],{"class":59,"line":8256},[57,14543,4363],{"class":136},[57,14545,4366],{"class":81},[57,14547,1576],{"class":140},[57,14549,14550],{"class":59,"line":8283},[57,14551,1847],{"class":140},[14,14553,14554],{},"重点：函数返回值不可以作为函数重载条件！",[394,14556,14558],{"id":14557},"_732注意事项","7.3.2注意事项",[1422,14560,14561,14564],{},[380,14562,14563],{},"引用作为重载条件!!!",[380,14565,14566],{},"函数重载碰到函数默认参数",[49,14568,14570],{"className":415,"code":14569,"language":417,"meta":46,"style":46},"\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",[28,14571,14572,14577,14582,14586,14602,14606,14619,14623,14627,14645,14649,14662,14666,14670,14674,14679,14683,14707,14711,14724,14728,14732,14746,14750,14763,14767,14771,14779,14783,14795,14805,14818,14822,14826,14834,14838,14848,14852,14860],{"__ignoreMap":46},[57,14573,14574],{"class":59,"line":60},[57,14575,14576],{"class":63},"\u002F\u002F函数重载注意事项\n",[57,14578,14579],{"class":59,"line":67},[57,14580,14581],{"class":63},"\u002F\u002F1、引用作为重载条件\n",[57,14583,14584],{"class":59,"line":144},[57,14585,2673],{"emptyLinePlaceholder":350},[57,14587,14588,14590,14592,14594,14596,14598,14600],{"class":59,"line":150},[57,14589,5637],{"class":136},[57,14591,11658],{"class":70},[57,14593,168],{"class":140},[57,14595,429],{"class":136},[57,14597,10857],{"class":136},[57,14599,18],{"class":5489},[57,14601,238],{"class":140},[57,14603,14604],{"class":59,"line":162},[57,14605,1828],{"class":140},[57,14607,14608,14610,14612,14615,14617],{"class":59,"line":180},[57,14609,6802],{"class":140},[57,14611,1459],{"class":136},[57,14613,14614],{"class":74}," \"func (int &a) 调用 \"",[57,14616,1727],{"class":136},[57,14618,9113],{"class":140},[57,14620,14621],{"class":59,"line":186},[57,14622,1847],{"class":140},[57,14624,14625],{"class":59,"line":197},[57,14626,2673],{"emptyLinePlaceholder":350},[57,14628,14629,14631,14633,14635,14637,14639,14641,14643],{"class":59,"line":241},[57,14630,5637],{"class":136},[57,14632,11658],{"class":70},[57,14634,168],{"class":140},[57,14636,7065],{"class":136},[57,14638,2655],{"class":136},[57,14640,10857],{"class":136},[57,14642,18],{"class":5489},[57,14644,238],{"class":140},[57,14646,14647],{"class":59,"line":249},[57,14648,1828],{"class":140},[57,14650,14651,14653,14655,14658,14660],{"class":59,"line":262},[57,14652,6802],{"class":140},[57,14654,1459],{"class":136},[57,14656,14657],{"class":74}," \"func (const int &a) 调用 \"",[57,14659,1727],{"class":136},[57,14661,9113],{"class":140},[57,14663,14664],{"class":59,"line":281},[57,14665,1847],{"class":140},[57,14667,14668],{"class":59,"line":287},[57,14669,2673],{"emptyLinePlaceholder":350},[57,14671,14672],{"class":59,"line":298},[57,14673,2673],{"emptyLinePlaceholder":350},[57,14675,14676],{"class":59,"line":311},[57,14677,14678],{"class":63},"\u002F\u002F2、函数重载碰到函数默认参数\n",[57,14680,14681],{"class":59,"line":322},[57,14682,2673],{"emptyLinePlaceholder":350},[57,14684,14685,14687,14689,14691,14693,14695,14697,14699,14701,14703,14705],{"class":59,"line":1929},[57,14686,5637],{"class":136},[57,14688,13891],{"class":70},[57,14690,168],{"class":140},[57,14692,429],{"class":136},[57,14694,1681],{"class":5489},[57,14696,12708],{"class":140},[57,14698,429],{"class":136},[57,14700,3106],{"class":5489},[57,14702,13837],{"class":136},[57,14704,2311],{"class":81},[57,14706,238],{"class":140},[57,14708,14709],{"class":59,"line":1950},[57,14710,1828],{"class":140},[57,14712,14713,14715,14717,14720,14722],{"class":59,"line":1955},[57,14714,6802],{"class":140},[57,14716,1459],{"class":136},[57,14718,14719],{"class":74}," \"func2(int a, int b = 10) 调用\"",[57,14721,1727],{"class":136},[57,14723,9113],{"class":140},[57,14725,14726],{"class":59,"line":1969},[57,14727,1847],{"class":140},[57,14729,14730],{"class":59,"line":1974},[57,14731,2673],{"emptyLinePlaceholder":350},[57,14733,14734,14736,14738,14740,14742,14744],{"class":59,"line":2001},[57,14735,5637],{"class":136},[57,14737,13891],{"class":70},[57,14739,168],{"class":140},[57,14741,429],{"class":136},[57,14743,1681],{"class":5489},[57,14745,238],{"class":140},[57,14747,14748],{"class":59,"line":2006},[57,14749,1828],{"class":140},[57,14751,14752,14754,14756,14759,14761],{"class":59,"line":2023},[57,14753,6802],{"class":140},[57,14755,1459],{"class":136},[57,14757,14758],{"class":74}," \"func2(int a) 调用\"",[57,14760,1727],{"class":136},[57,14762,9113],{"class":140},[57,14764,14765],{"class":59,"line":2028},[57,14766,1847],{"class":140},[57,14768,14769],{"class":59,"line":2033},[57,14770,2673],{"emptyLinePlaceholder":350},[57,14772,14773,14775,14777],{"class":59,"line":2038},[57,14774,429],{"class":136},[57,14776,2246],{"class":70},[57,14778,11126],{"class":140},[57,14780,14781],{"class":59,"line":2052},[57,14782,13483],{"class":140},[57,14784,14785,14787,14789,14791,14793],{"class":59,"line":2057},[57,14786,2258],{"class":136},[57,14788,11142],{"class":140},[57,14790,156],{"class":136},[57,14792,2311],{"class":81},[57,14794,1576],{"class":140},[57,14796,14797,14799,14802],{"class":59,"line":2850},[57,14798,13558],{"class":70},[57,14800,14801],{"class":140},"(a);",[57,14803,14804],{"class":63}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[57,14806,14807,14809,14811,14813,14815],{"class":59,"line":2864},[57,14808,13558],{"class":70},[57,14810,168],{"class":140},[57,14812,862],{"class":81},[57,14814,6239],{"class":140},[57,14816,14817],{"class":63},"\u002F\u002F调用有const   10是个常量\n",[57,14819,14820],{"class":59,"line":2872},[57,14821,2673],{"emptyLinePlaceholder":350},[57,14823,14824],{"class":59,"line":2877},[57,14825,2673],{"emptyLinePlaceholder":350},[57,14827,14828,14831],{"class":59,"line":2883},[57,14829,14830],{"class":63},"    \u002F\u002Ffunc2(10);",[57,14832,14833],{"class":63}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[57,14835,14836],{"class":59,"line":2889},[57,14837,2673],{"emptyLinePlaceholder":350},[57,14839,14840,14842,14844,14846],{"class":59,"line":2894},[57,14841,2576],{"class":70},[57,14843,168],{"class":140},[57,14845,2581],{"class":74},[57,14847,2992],{"class":140},[57,14849,14850],{"class":59,"line":8221},[57,14851,2673],{"emptyLinePlaceholder":350},[57,14853,14854,14856,14858],{"class":59,"line":8245},[57,14855,4363],{"class":136},[57,14857,4366],{"class":81},[57,14859,1576],{"class":140},[57,14861,14862],{"class":59,"line":8250},[57,14863,1847],{"class":140},[342,14865,14866],{},"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":46,"searchDepth":67,"depth":67,"links":14868},[14869,14870,14871],{"id":13802,"depth":67,"text":13803},{"id":14058,"depth":67,"text":14059},{"id":14180,"depth":67,"text":14181,"children":14872},[14873,14874],{"id":14187,"depth":144,"text":14188},{"id":14557,"depth":144,"text":14558},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13794,"description":46},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14881,"title":14882,"body":14883,"description":23637,"extension":348,"meta":23638,"navigation":350,"path":23639,"seo":23640,"stem":23641,"__hash__":23642},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14884,"toc":23618},[14885,14888,14894,14901,14906,14909,14912,14915,14919,14923,14926,14929,14937,14942,14945,14952,14957,15116,15119,15372,15375,15378,15381,15386,15389,15392,15403,15408,15644,15648,15658,15661,15669,15816,15820,15823,15826,15830,16275,16279,16287,16295,17207,17214,17219,17847,17850,17853,17856,17975,17978,18065,18068,18194,18197,18291,18294,18647,18651,18659,18663,18670,18673,18676,18687,18693,18698,18710,18718,18738,18746,18763,18949,18952,18956,18959,18962,18965,18968,18971,18974,18977,19437,19443,19447,19450,19461,20048,20051,20540,20544,20547,20550,20553,20556,20559,20567,20963,20967,20970,20973,21420,21423,21426,21431,21434,21439,21442,21446,21449,21451,21457,21460,21766,21776,21817,21821,21824,21826,21859,21862,22169,22171,22186,22189,22212,22221,22227,22230,22234,22237,22240,22245,22256,22261,22269,22274,22404,22407,22410,22585,22590,22802,22806,22809,22923,22928,23167,23171,23175,23178,23181,23186,23291,23294,23297,23300,23304,23415,23418,23421,23426,23478,23481,23484,23489,23535,23538,23543,23611,23613,23616],[10,14886,14882],{"id":14887},"_8类和对象",[14,14889,14890,14891],{},"C++面向对象的三大特性为",[33,14892,14893],{},"封装、继承、多态",[14,14895,14896,14897,14900],{},"C++认为",[33,14898,14899],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,14902,14903],{},[33,14904,14905],{},"例如：",[14,14907,14908],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,14910,14911],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,14913,14914],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[365,14916,14918],{"id":14917},"_81封装","8.1封装",[394,14920,14922],{"id":14921},"_811封装的意义","8.1.1封装的意义",[14,14924,14925],{},"封装是C++面向对象三大特性之一",[14,14927,14928],{},"封装的意义：",[1422,14930,14931,14934],{},[380,14932,14933],{},"将属性和行为作为一个整体，表现生活中的事物",[380,14935,14936],{},"将属性和行为加以权限控制",[14,14938,14939],{},[33,14940,14941],{},"封装意义一：",[14,14943,14944],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,14946,14947,14067,14949],{},[33,14948,5454],{},[28,14950,14951],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[377,14953,14954],{},[380,14955,14956],{},"**示例1：**设计一个圆类，求圆的周长",[49,14958,14960],{"className":415,"code":14959,"language":417,"meta":46,"style":46},"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",[28,14961,14962,14970,14974,14979,14984,14989,14994,15001,15006,15016,15020,15038,15042,15046,15054,15058,15063,15068,15073,15078,15089,15112],{"__ignoreMap":46},[57,14963,14964,14967],{"class":59,"line":60},[57,14965,14966],{"class":136},"class",[57,14968,14969],{"class":70}," Circle\n",[57,14971,14972],{"class":59,"line":67},[57,14973,1828],{"class":140},[57,14975,14976],{"class":59,"line":144},[57,14977,14978],{"class":63},"    \u002F\u002F访问权限\n",[57,14980,14981],{"class":59,"line":150},[57,14982,14983],{"class":63},"    \u002F\u002F公共权限\n",[57,14985,14986],{"class":59,"line":162},[57,14987,14988],{"class":136},"public:\n",[57,14990,14991],{"class":59,"line":180},[57,14992,14993],{"class":63},"    \u002F\u002F属性\n",[57,14995,14996,14998],{"class":59,"line":186},[57,14997,2258],{"class":136},[57,14999,15000],{"class":140}," m_r;\n",[57,15002,15003],{"class":59,"line":197},[57,15004,15005],{"class":63},"    \u002F\u002F行为\n",[57,15007,15008,15011,15014],{"class":59,"line":241},[57,15009,15010],{"class":136},"    double",[57,15012,15013],{"class":70}," calculateZC",[57,15015,2249],{"class":140},[57,15017,15018],{"class":59,"line":249},[57,15019,2303],{"class":140},[57,15021,15022,15025,15028,15030,15033,15035],{"class":59,"line":262},[57,15023,15024],{"class":136},"        return",[57,15026,15027],{"class":81}," 2",[57,15029,871],{"class":136},[57,15031,15032],{"class":140},"PI",[57,15034,871],{"class":136},[57,15036,15037],{"class":140},"m_r;\n",[57,15039,15040],{"class":59,"line":281},[57,15041,2460],{"class":140},[57,15043,15044],{"class":59,"line":287},[57,15045,4268],{"class":140},[57,15047,15048,15050,15052],{"class":59,"line":298},[57,15049,429],{"class":136},[57,15051,2246],{"class":70},[57,15053,2249],{"class":140},[57,15055,15056],{"class":59,"line":311},[57,15057,1828],{"class":140},[57,15059,15060],{"class":59,"line":322},[57,15061,15062],{"class":63},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[57,15064,15065],{"class":59,"line":1929},[57,15066,15067],{"class":63},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[57,15069,15070],{"class":59,"line":1950},[57,15071,15072],{"class":140},"    Circle c1;\n",[57,15074,15075],{"class":59,"line":1955},[57,15076,15077],{"class":63},"    \u002F\u002F给圆对象 的属性进行赋值\n",[57,15079,15080,15083,15085,15087],{"class":59,"line":1969},[57,15081,15082],{"class":140},"    c1.m_r",[57,15084,156],{"class":136},[57,15086,862],{"class":81},[57,15088,1576],{"class":140},[57,15090,15091,15093,15095,15098,15100,15103,15106,15108,15110],{"class":59,"line":1974},[57,15092,1833],{"class":140},[57,15094,1459],{"class":136},[57,15096,15097],{"class":74},"\"圆的周长\"",[57,15099,1459],{"class":136},[57,15101,15102],{"class":140},"c1.",[57,15104,15105],{"class":70},"calculateZC",[57,15107,2700],{"class":140},[57,15109,1459],{"class":136},[57,15111,1481],{"class":140},[57,15113,15114],{"class":59,"line":2001},[57,15115,1847],{"class":140},[14,15117,15118],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[49,15120,15122],{"className":415,"code":15121,"language":417,"meta":46,"style":46},"#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",[28,15123,15124,15130,15140,15146,15152,15156,15160,15165,15172,15177,15195,15199,15209,15213,15218,15234,15238,15248,15252,15257,15265,15269,15301,15305,15309,15317,15321,15326,15331,15345,15359,15368],{"__ignoreMap":46},[57,15125,15126,15128],{"class":59,"line":60},[57,15127,2223],{"class":136},[57,15129,2226],{"class":74},[57,15131,15132,15134,15136,15138],{"class":59,"line":67},[57,15133,2231],{"class":136},[57,15135,2234],{"class":136},[57,15137,2237],{"class":70},[57,15139,1576],{"class":140},[57,15141,15142,15144],{"class":59,"line":144},[57,15143,2223],{"class":136},[57,15145,8022],{"class":74},[57,15147,15148,15150],{"class":59,"line":150},[57,15149,14966],{"class":136},[57,15151,8035],{"class":70},[57,15153,15154],{"class":59,"line":162},[57,15155,1828],{"class":140},[57,15157,15158],{"class":59,"line":180},[57,15159,14988],{"class":136},[57,15161,15162],{"class":59,"line":186},[57,15163,15164],{"class":140},"    string m_name;\n",[57,15166,15167,15169],{"class":59,"line":197},[57,15168,2258],{"class":136},[57,15170,15171],{"class":140}," m_id;\n",[57,15173,15174],{"class":59,"line":241},[57,15175,15176],{"class":63},"    \u002F\u002F赋值姓名\n",[57,15178,15179,15182,15185,15187,15190,15193],{"class":59,"line":249},[57,15180,15181],{"class":136},"    void",[57,15183,15184],{"class":70}," setName",[57,15186,168],{"class":140},[57,15188,15189],{"class":70},"string",[57,15191,15192],{"class":5489}," name",[57,15194,238],{"class":140},[57,15196,15197],{"class":59,"line":262},[57,15198,2303],{"class":140},[57,15200,15201,15204,15206],{"class":59,"line":281},[57,15202,15203],{"class":140},"        m_name",[57,15205,156],{"class":136},[57,15207,15208],{"class":140},"name;\n",[57,15210,15211],{"class":59,"line":287},[57,15212,2460],{"class":140},[57,15214,15215],{"class":59,"line":298},[57,15216,15217],{"class":63},"    \u002F\u002F赋值学号\n",[57,15219,15220,15222,15225,15227,15229,15232],{"class":59,"line":311},[57,15221,15181],{"class":136},[57,15223,15224],{"class":70}," setId",[57,15226,168],{"class":140},[57,15228,429],{"class":136},[57,15230,15231],{"class":5489}," id",[57,15233,238],{"class":140},[57,15235,15236],{"class":59,"line":322},[57,15237,2303],{"class":140},[57,15239,15240,15243,15245],{"class":59,"line":1929},[57,15241,15242],{"class":140},"        m_id",[57,15244,156],{"class":136},[57,15246,15247],{"class":140},"id;\n",[57,15249,15250],{"class":59,"line":1950},[57,15251,2460],{"class":140},[57,15253,15254],{"class":59,"line":1955},[57,15255,15256],{"class":63},"    \u002F\u002F打印学生信息\n",[57,15258,15259,15261,15263],{"class":59,"line":1969},[57,15260,15181],{"class":136},[57,15262,9888],{"class":70},[57,15264,2249],{"class":140},[57,15266,15267],{"class":59,"line":1974},[57,15268,2303],{"class":140},[57,15270,15271,15273,15275,15278,15280,15283,15285,15287,15289,15292,15294,15297,15299],{"class":59,"line":2001},[57,15272,3724],{"class":140},[57,15274,1459],{"class":136},[57,15276,15277],{"class":74},"\"姓名：\"",[57,15279,1459],{"class":136},[57,15281,15282],{"class":140},"m_name",[57,15284,1459],{"class":136},[57,15286,4632],{"class":74},[57,15288,1459],{"class":136},[57,15290,15291],{"class":74},"\"学号：\"",[57,15293,1459],{"class":136},[57,15295,15296],{"class":140},"m_id",[57,15298,1459],{"class":136},[57,15300,1481],{"class":140},[57,15302,15303],{"class":59,"line":2006},[57,15304,2460],{"class":140},[57,15306,15307],{"class":59,"line":2023},[57,15308,4268],{"class":140},[57,15310,15311,15313,15315],{"class":59,"line":2028},[57,15312,429],{"class":136},[57,15314,2246],{"class":70},[57,15316,2249],{"class":140},[57,15318,15319],{"class":59,"line":2033},[57,15320,1828],{"class":140},[57,15322,15323],{"class":59,"line":2038},[57,15324,15325],{"class":63},"    \u002F\u002F实例化\n",[57,15327,15328],{"class":59,"line":2052},[57,15329,15330],{"class":140},"    Student s1;\n",[57,15332,15333,15336,15339,15341,15343],{"class":59,"line":2057},[57,15334,15335],{"class":140},"    s1.",[57,15337,15338],{"class":70},"setName",[57,15340,168],{"class":140},[57,15342,8189],{"class":74},[57,15344,2992],{"class":140},[57,15346,15347,15349,15352,15354,15357],{"class":59,"line":2850},[57,15348,15335],{"class":140},[57,15350,15351],{"class":70},"setId",[57,15353,168],{"class":140},[57,15355,15356],{"class":81},"123456",[57,15358,2992],{"class":140},[57,15360,15361,15363,15366],{"class":59,"line":2864},[57,15362,15335],{"class":140},[57,15364,15365],{"class":70},"printInfo",[57,15367,5909],{"class":140},[57,15369,15370],{"class":59,"line":2872},[57,15371,1847],{"class":140},[14,15373,15374],{},"类中的属性和行为统称为成员",[14,15376,15377],{},"属性：成员属性(成员变量)",[14,15379,15380],{},"方法：成员函数(成员方法)",[14,15382,15383],{},[33,15384,15385],{},"封装意义二：",[14,15387,15388],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,15390,15391],{},"访问权限有三种：",[377,15393,15394,15397,15400],{},[380,15395,15396],{},"public        公共权限",[380,15398,15399],{},"protected 保护权限",[380,15401,15402],{},"private      私有权限",[14,15404,15405],{},[33,15406,15407],{},"示例：",[49,15409,15411],{"className":10214,"code":15410,"language":10216,"meta":46,"style":46},"\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",[28,15412,15413,15418,15423,15428,15433,15437,15444,15448,15453,15457,15462,15466,15471,15476,15481,15485,15490,15495,15502,15506,15510,15518,15522,15533,15545,15557,15561,15565,15569,15577,15581,15586,15598,15606,15614,15618,15628,15632,15640],{"__ignoreMap":46},[57,15414,15415],{"class":59,"line":60},[57,15416,15417],{"class":63},"\u002F\u002F三种权限\n",[57,15419,15420],{"class":59,"line":67},[57,15421,15422],{"class":63},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[57,15424,15425],{"class":59,"line":144},[57,15426,15427],{"class":63},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[57,15429,15430],{"class":59,"line":150},[57,15431,15432],{"class":63},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[57,15434,15435],{"class":59,"line":162},[57,15436,2673],{"emptyLinePlaceholder":350},[57,15438,15439,15441],{"class":59,"line":180},[57,15440,14966],{"class":136},[57,15442,15443],{"class":70}," Person\n",[57,15445,15446],{"class":59,"line":186},[57,15447,1828],{"class":140},[57,15449,15450],{"class":59,"line":197},[57,15451,15452],{"class":63},"    \u002F\u002F姓名  公共权限\n",[57,15454,15455],{"class":59,"line":241},[57,15456,14988],{"class":136},[57,15458,15459],{"class":59,"line":249},[57,15460,15461],{"class":140},"    string m_Name;\n",[57,15463,15464],{"class":59,"line":262},[57,15465,2673],{"emptyLinePlaceholder":350},[57,15467,15468],{"class":59,"line":281},[57,15469,15470],{"class":63},"    \u002F\u002F汽车  保护权限\n",[57,15472,15473],{"class":59,"line":287},[57,15474,15475],{"class":136},"protected:\n",[57,15477,15478],{"class":59,"line":298},[57,15479,15480],{"class":140},"    string m_Car;\n",[57,15482,15483],{"class":59,"line":311},[57,15484,2673],{"emptyLinePlaceholder":350},[57,15486,15487],{"class":59,"line":322},[57,15488,15489],{"class":63},"    \u002F\u002F银行卡密码  私有权限\n",[57,15491,15492],{"class":59,"line":1929},[57,15493,15494],{"class":136},"private:\n",[57,15496,15497,15499],{"class":59,"line":1950},[57,15498,2258],{"class":136},[57,15500,15501],{"class":140}," m_Password;\n",[57,15503,15504],{"class":59,"line":1955},[57,15505,2673],{"emptyLinePlaceholder":350},[57,15507,15508],{"class":59,"line":1969},[57,15509,14988],{"class":136},[57,15511,15512,15514,15516],{"class":59,"line":1974},[57,15513,15181],{"class":136},[57,15515,11658],{"class":70},[57,15517,2249],{"class":140},[57,15519,15520],{"class":59,"line":2001},[57,15521,2303],{"class":140},[57,15523,15524,15527,15529,15531],{"class":59,"line":2006},[57,15525,15526],{"class":140},"        m_Name ",[57,15528,156],{"class":136},[57,15530,9211],{"class":74},[57,15532,1576],{"class":140},[57,15534,15535,15538,15540,15543],{"class":59,"line":2023},[57,15536,15537],{"class":140},"        m_Car ",[57,15539,156],{"class":136},[57,15541,15542],{"class":74}," \"拖拉机\"",[57,15544,1576],{"class":140},[57,15546,15547,15550,15552,15555],{"class":59,"line":2028},[57,15548,15549],{"class":140},"        m_Password ",[57,15551,156],{"class":136},[57,15553,15554],{"class":81}," 123456",[57,15556,1576],{"class":140},[57,15558,15559],{"class":59,"line":2033},[57,15560,2460],{"class":140},[57,15562,15563],{"class":59,"line":2038},[57,15564,4268],{"class":140},[57,15566,15567],{"class":59,"line":2052},[57,15568,2673],{"emptyLinePlaceholder":350},[57,15570,15571,15573,15575],{"class":59,"line":2057},[57,15572,429],{"class":136},[57,15574,2246],{"class":70},[57,15576,11126],{"class":140},[57,15578,15579],{"class":59,"line":2850},[57,15580,2673],{"emptyLinePlaceholder":350},[57,15582,15583],{"class":59,"line":2864},[57,15584,15585],{"class":140},"    Person p;\n",[57,15587,15588,15591,15593,15596],{"class":59,"line":2872},[57,15589,15590],{"class":140},"    p.m_Name ",[57,15592,156],{"class":136},[57,15594,15595],{"class":74}," \"李四\"",[57,15597,1576],{"class":140},[57,15599,15600,15603],{"class":59,"line":2877},[57,15601,15602],{"class":63},"    \u002F\u002Fp.m_Car = \"奔驰\";",[57,15604,15605],{"class":63},"  \u002F\u002F保护权限类外访问不到\n",[57,15607,15608,15611],{"class":59,"line":2883},[57,15609,15610],{"class":63},"    \u002F\u002Fp.m_Password = 123;",[57,15612,15613],{"class":63}," \u002F\u002F私有权限类外访问不到\n",[57,15615,15616],{"class":59,"line":2889},[57,15617,2673],{"emptyLinePlaceholder":350},[57,15619,15620,15622,15624,15626],{"class":59,"line":2894},[57,15621,2576],{"class":70},[57,15623,168],{"class":140},[57,15625,2581],{"class":74},[57,15627,2992],{"class":140},[57,15629,15630],{"class":59,"line":8221},[57,15631,2673],{"emptyLinePlaceholder":350},[57,15633,15634,15636,15638],{"class":59,"line":8245},[57,15635,4363],{"class":136},[57,15637,4366],{"class":81},[57,15639,1576],{"class":140},[57,15641,15642],{"class":59,"line":8250},[57,15643,1847],{"class":140},[394,15645,15647],{"id":15646},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,15649,15650,15651,15654,15655],{},"在C++中 struct和class唯一的",[33,15652,15653],{},"区别","就在于 ",[33,15656,15657],{},"默认的访问权限不同",[14,15659,15660],{},"区别：",[1422,15662,15663,15666],{},[380,15664,15665],{},"struct 默认权限为公共",[380,15667,15668],{},"class   默认权限为私有",[49,15670,15672],{"className":10214,"code":15671,"language":10216,"meta":46,"style":46},"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",[28,15673,15674,15681,15685,15695,15699,15703,15710,15714,15724,15728,15732,15740,15744,15749,15763,15767,15772,15786,15790,15800,15804,15812],{"__ignoreMap":46},[57,15675,15676,15678],{"class":59,"line":60},[57,15677,14966],{"class":136},[57,15679,15680],{"class":70}," C1\n",[57,15682,15683],{"class":59,"line":67},[57,15684,1828],{"class":140},[57,15686,15687,15689,15692],{"class":59,"line":144},[57,15688,2258],{"class":136},[57,15690,15691],{"class":140},"  m_A;",[57,15693,15694],{"class":63}," \u002F\u002F默认是私有权限\n",[57,15696,15697],{"class":59,"line":150},[57,15698,4268],{"class":140},[57,15700,15701],{"class":59,"line":162},[57,15702,2673],{"emptyLinePlaceholder":350},[57,15704,15705,15707],{"class":59,"line":180},[57,15706,8032],{"class":136},[57,15708,15709],{"class":70}," C2\n",[57,15711,15712],{"class":59,"line":186},[57,15713,1828],{"class":140},[57,15715,15716,15718,15721],{"class":59,"line":197},[57,15717,2258],{"class":136},[57,15719,15720],{"class":140}," m_A;",[57,15722,15723],{"class":63},"  \u002F\u002F默认是公共权限\n",[57,15725,15726],{"class":59,"line":241},[57,15727,4268],{"class":140},[57,15729,15730],{"class":59,"line":249},[57,15731,2673],{"emptyLinePlaceholder":350},[57,15733,15734,15736,15738],{"class":59,"line":262},[57,15735,429],{"class":136},[57,15737,2246],{"class":70},[57,15739,11126],{"class":140},[57,15741,15742],{"class":59,"line":281},[57,15743,2673],{"emptyLinePlaceholder":350},[57,15745,15746],{"class":59,"line":287},[57,15747,15748],{"class":140},"    C1 c1;\n",[57,15750,15751,15754,15756,15758,15760],{"class":59,"line":298},[57,15752,15753],{"class":140},"    c1.m_A ",[57,15755,156],{"class":136},[57,15757,2311],{"class":81},[57,15759,478],{"class":140},[57,15761,15762],{"class":63}," \u002F\u002F错误，访问权限是私有\n",[57,15764,15765],{"class":59,"line":311},[57,15766,2673],{"emptyLinePlaceholder":350},[57,15768,15769],{"class":59,"line":322},[57,15770,15771],{"class":140},"    C2 c2;\n",[57,15773,15774,15777,15779,15781,15783],{"class":59,"line":1929},[57,15775,15776],{"class":140},"    c2.m_A ",[57,15778,156],{"class":136},[57,15780,2311],{"class":81},[57,15782,478],{"class":140},[57,15784,15785],{"class":63}," \u002F\u002F正确，访问权限是公共\n",[57,15787,15788],{"class":59,"line":1950},[57,15789,2673],{"emptyLinePlaceholder":350},[57,15791,15792,15794,15796,15798],{"class":59,"line":1955},[57,15793,2576],{"class":70},[57,15795,168],{"class":140},[57,15797,2581],{"class":74},[57,15799,2992],{"class":140},[57,15801,15802],{"class":59,"line":1969},[57,15803,2673],{"emptyLinePlaceholder":350},[57,15805,15806,15808,15810],{"class":59,"line":1974},[57,15807,4363],{"class":136},[57,15809,4366],{"class":81},[57,15811,1576],{"class":140},[57,15813,15814],{"class":59,"line":2001},[57,15815,1847],{"class":140},[394,15817,15819],{"id":15818},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,15821,15822],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,15824,15825],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,15827,15828],{},[33,15829,15407],{},[49,15831,15833],{"className":10214,"code":15832,"language":10216,"meta":46,"style":46},"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",[28,15834,15835,15845,15849,15853,15858,15872,15881,15885,15895,15899,15906,15910,15914,15918,15923,15932,15939,15943,15948,15964,15987,16000,16007,16011,16020,16024,16028,16033,16049,16059,16063,16067,16071,16079,16083,16093,16097,16105,16109,16113,16121,16125,16129,16134,16147,16170,16174,16179,16192,16214,16218,16223,16237,16245,16249,16259,16263,16271],{"__ignoreMap":46},[57,15836,15837,15839,15842],{"class":59,"line":60},[57,15838,14966],{"class":136},[57,15840,15841],{"class":70}," Person",[57,15843,15844],{"class":140}," {\n",[57,15846,15847],{"class":59,"line":67},[57,15848,14988],{"class":136},[57,15850,15851],{"class":59,"line":144},[57,15852,2673],{"emptyLinePlaceholder":350},[57,15854,15855],{"class":59,"line":150},[57,15856,15857],{"class":63},"    \u002F\u002F姓名设置可读可写\n",[57,15859,15860,15862,15864,15866,15868,15870],{"class":59,"line":162},[57,15861,15181],{"class":136},[57,15863,15184],{"class":70},[57,15865,168],{"class":140},[57,15867,15189],{"class":70},[57,15869,15192],{"class":5489},[57,15871,12715],{"class":140},[57,15873,15874,15876,15878],{"class":59,"line":180},[57,15875,15526],{"class":140},[57,15877,156],{"class":136},[57,15879,15880],{"class":140}," name;\n",[57,15882,15883],{"class":59,"line":186},[57,15884,2460],{"class":140},[57,15886,15887,15890,15893],{"class":59,"line":197},[57,15888,15889],{"class":70},"    string",[57,15891,15892],{"class":70}," getName",[57,15894,2249],{"class":140},[57,15896,15897],{"class":59,"line":241},[57,15898,2303],{"class":140},[57,15900,15901,15903],{"class":59,"line":249},[57,15902,15024],{"class":136},[57,15904,15905],{"class":140}," m_Name;\n",[57,15907,15908],{"class":59,"line":262},[57,15909,2460],{"class":140},[57,15911,15912],{"class":59,"line":281},[57,15913,2673],{"emptyLinePlaceholder":350},[57,15915,15916],{"class":59,"line":287},[57,15917,2673],{"emptyLinePlaceholder":350},[57,15919,15920],{"class":59,"line":298},[57,15921,15922],{"class":63},"    \u002F\u002F获取年龄 \n",[57,15924,15925,15927,15930],{"class":59,"line":311},[57,15926,2258],{"class":136},[57,15928,15929],{"class":70}," getAge",[57,15931,11126],{"class":140},[57,15933,15934,15936],{"class":59,"line":322},[57,15935,15024],{"class":136},[57,15937,15938],{"class":140}," m_Age;\n",[57,15940,15941],{"class":59,"line":1929},[57,15942,2460],{"class":140},[57,15944,15945],{"class":59,"line":1950},[57,15946,15947],{"class":63},"    \u002F\u002F设置年龄\n",[57,15949,15950,15952,15955,15957,15959,15962],{"class":59,"line":1955},[57,15951,15181],{"class":136},[57,15953,15954],{"class":70}," setAge",[57,15956,168],{"class":140},[57,15958,429],{"class":136},[57,15960,15961],{"class":5489}," age",[57,15963,12715],{"class":140},[57,15965,15966,15968,15971,15973,15975,15977,15980,15982,15985],{"class":59,"line":1969},[57,15967,2770],{"class":136},[57,15969,15970],{"class":140}," (age ",[57,15972,1326],{"class":136},[57,15974,4366],{"class":81},[57,15976,3528],{"class":136},[57,15978,15979],{"class":140}," age ",[57,15981,223],{"class":136},[57,15983,15984],{"class":81}," 150",[57,15986,12715],{"class":140},[57,15988,15989,15991,15993,15996,15998],{"class":59,"line":1974},[57,15990,9992],{"class":140},[57,15992,1459],{"class":136},[57,15994,15995],{"class":74}," \"你个老妖精!\"",[57,15997,1727],{"class":136},[57,15999,9113],{"class":140},[57,16001,16002,16005],{"class":59,"line":2001},[57,16003,16004],{"class":136},"            return",[57,16006,1576],{"class":140},[57,16008,16009],{"class":59,"line":2006},[57,16010,2802],{"class":140},[57,16012,16013,16016,16018],{"class":59,"line":2023},[57,16014,16015],{"class":140},"        m_Age ",[57,16017,156],{"class":136},[57,16019,8070],{"class":140},[57,16021,16022],{"class":59,"line":2028},[57,16023,2460],{"class":140},[57,16025,16026],{"class":59,"line":2033},[57,16027,2673],{"emptyLinePlaceholder":350},[57,16029,16030],{"class":59,"line":2038},[57,16031,16032],{"class":63},"    \u002F\u002F情人设置为只写\n",[57,16034,16035,16037,16040,16042,16044,16047],{"class":59,"line":2052},[57,16036,15181],{"class":136},[57,16038,16039],{"class":70}," setLover",[57,16041,168],{"class":140},[57,16043,15189],{"class":70},[57,16045,16046],{"class":5489}," lover",[57,16048,12715],{"class":140},[57,16050,16051,16054,16056],{"class":59,"line":2057},[57,16052,16053],{"class":140},"        m_Lover ",[57,16055,156],{"class":136},[57,16057,16058],{"class":140}," lover;\n",[57,16060,16061],{"class":59,"line":2850},[57,16062,2460],{"class":140},[57,16064,16065],{"class":59,"line":2864},[57,16066,2673],{"emptyLinePlaceholder":350},[57,16068,16069],{"class":59,"line":2872},[57,16070,15494],{"class":136},[57,16072,16073,16076],{"class":59,"line":2877},[57,16074,16075],{"class":140},"    string m_Name;",[57,16077,16078],{"class":63}," \u002F\u002F可读可写  姓名\n",[57,16080,16081],{"class":59,"line":2883},[57,16082,13483],{"class":140},[57,16084,16085,16087,16090],{"class":59,"line":2889},[57,16086,2258],{"class":136},[57,16088,16089],{"class":140}," m_Age;",[57,16091,16092],{"class":63}," \u002F\u002F只读  年龄\n",[57,16094,16095],{"class":59,"line":2894},[57,16096,2673],{"emptyLinePlaceholder":350},[57,16098,16099,16102],{"class":59,"line":8221},[57,16100,16101],{"class":140},"    string m_Lover;",[57,16103,16104],{"class":63}," \u002F\u002F只写  情人\n",[57,16106,16107],{"class":59,"line":8245},[57,16108,4268],{"class":140},[57,16110,16111],{"class":59,"line":8250},[57,16112,2673],{"emptyLinePlaceholder":350},[57,16114,16115,16117,16119],{"class":59,"line":8256},[57,16116,429],{"class":136},[57,16118,2246],{"class":70},[57,16120,11126],{"class":140},[57,16122,16123],{"class":59,"line":8283},[57,16124,2673],{"emptyLinePlaceholder":350},[57,16126,16127],{"class":59,"line":8288},[57,16128,15585],{"class":140},[57,16130,16131],{"class":59,"line":8294},[57,16132,16133],{"class":63},"    \u002F\u002F姓名设置\n",[57,16135,16136,16139,16141,16143,16145],{"class":59,"line":8306},[57,16137,16138],{"class":140},"    p.",[57,16140,15338],{"class":70},[57,16142,168],{"class":140},[57,16144,8189],{"class":74},[57,16146,2992],{"class":140},[57,16148,16149,16151,16153,16156,16158,16161,16164,16166,16168],{"class":59,"line":8318},[57,16150,6802],{"class":140},[57,16152,1459],{"class":136},[57,16154,16155],{"class":74}," \"姓名： \"",[57,16157,1727],{"class":136},[57,16159,16160],{"class":140}," p.",[57,16162,16163],{"class":70},"getName",[57,16165,13323],{"class":140},[57,16167,1459],{"class":136},[57,16169,9113],{"class":140},[57,16171,16172],{"class":59,"line":8330},[57,16173,2673],{"emptyLinePlaceholder":350},[57,16175,16176],{"class":59,"line":9989},[57,16177,16178],{"class":63},"    \u002F\u002F年龄设置\n",[57,16180,16181,16183,16186,16188,16190],{"class":59,"line":10014},[57,16182,16138],{"class":140},[57,16184,16185],{"class":70},"setAge",[57,16187,168],{"class":140},[57,16189,1072],{"class":81},[57,16191,2992],{"class":140},[57,16193,16194,16196,16198,16201,16203,16205,16208,16210,16212],{"class":59,"line":10037},[57,16195,6802],{"class":140},[57,16197,1459],{"class":136},[57,16199,16200],{"class":74}," \"年龄： \"",[57,16202,1727],{"class":136},[57,16204,16160],{"class":140},[57,16206,16207],{"class":70},"getAge",[57,16209,13323],{"class":140},[57,16211,1459],{"class":136},[57,16213,9113],{"class":140},[57,16215,16216],{"class":59,"line":10061},[57,16217,2673],{"emptyLinePlaceholder":350},[57,16219,16220],{"class":59,"line":10066},[57,16221,16222],{"class":63},"    \u002F\u002F情人设置\n",[57,16224,16225,16227,16230,16232,16235],{"class":59,"line":10071},[57,16226,16138],{"class":140},[57,16228,16229],{"class":70},"setLover",[57,16231,168],{"class":140},[57,16233,16234],{"class":74},"\"苍井\"",[57,16236,2992],{"class":140},[57,16238,16239,16242],{"class":59,"line":10076},[57,16240,16241],{"class":63},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[57,16243,16244],{"class":63},"  \u002F\u002F只写属性，不可以读取\n",[57,16246,16247],{"class":59,"line":10085},[57,16248,2673],{"emptyLinePlaceholder":350},[57,16250,16251,16253,16255,16257],{"class":59,"line":10090},[57,16252,2576],{"class":70},[57,16254,168],{"class":140},[57,16256,2581],{"class":74},[57,16258,2992],{"class":140},[57,16260,16261],{"class":59,"line":10096},[57,16262,2673],{"emptyLinePlaceholder":350},[57,16264,16265,16267,16269],{"class":59,"line":10117},[57,16266,4363],{"class":136},[57,16268,4366],{"class":81},[57,16270,1576],{"class":140},[57,16272,16273],{"class":59,"line":10123},[57,16274,1847],{"class":140},[394,16276,16278],{"id":16277},"_814封装案例","8.1.4封装案例",[377,16280,16281],{},[380,16282,16283,16286],{},[33,16284,16285],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1422,16288,16289,16292],{},[380,16290,16291],{},"求出立方体的面积和体积",[380,16293,16294],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[49,16296,16298],{"className":415,"code":16297,"language":417,"meta":46,"style":46},"#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",[28,16299,16300,16306,16316,16323,16327,16331,16336,16366,16370,16380,16390,16400,16404,16413,16417,16453,16457,16466,16470,16486,16490,16495,16504,16508,16515,16519,16528,16532,16539,16543,16552,16556,16563,16567,16572,16589,16593,16639,16643,16652,16656,16660,16664,16673,16677,16681,16686,16690,16696,16702,16708,16712,16716,16721,16743,16747,16801,16805,16813,16817,16822,16827,16840,16847,16863,16874,16880,16903,16909,16932,16946,16966,16972,16983,17006,17028,17033,17039,17053,17066,17071,17085,17090,17096,17101,17115,17120,17125,17139,17151,17156,17169,17174,17179,17184,17197,17202],{"__ignoreMap":46},[57,16301,16302,16304],{"class":59,"line":60},[57,16303,2223],{"class":136},[57,16305,2226],{"class":74},[57,16307,16308,16310,16312,16314],{"class":59,"line":67},[57,16309,2231],{"class":136},[57,16311,2234],{"class":136},[57,16313,2237],{"class":70},[57,16315,1576],{"class":140},[57,16317,16318,16320],{"class":59,"line":144},[57,16319,14966],{"class":136},[57,16321,16322],{"class":70}," Cube\n",[57,16324,16325],{"class":59,"line":150},[57,16326,1828],{"class":140},[57,16328,16329],{"class":59,"line":162},[57,16330,14988],{"class":136},[57,16332,16333],{"class":59,"line":180},[57,16334,16335],{"class":63},"    \u002F\u002F输入长宽高\n",[57,16337,16338,16340,16343,16345,16347,16350,16352,16354,16357,16359,16361,16364],{"class":59,"line":186},[57,16339,15181],{"class":136},[57,16341,16342],{"class":70}," setLwh",[57,16344,168],{"class":140},[57,16346,429],{"class":136},[57,16348,16349],{"class":5489}," l",[57,16351,273],{"class":140},[57,16353,429],{"class":136},[57,16355,16356],{"class":5489}," w",[57,16358,273],{"class":140},[57,16360,429],{"class":136},[57,16362,16363],{"class":5489}," h",[57,16365,238],{"class":140},[57,16367,16368],{"class":59,"line":197},[57,16369,2303],{"class":140},[57,16371,16372,16375,16377],{"class":59,"line":241},[57,16373,16374],{"class":140},"        m_L",[57,16376,156],{"class":136},[57,16378,16379],{"class":140},"l;\n",[57,16381,16382,16385,16387],{"class":59,"line":249},[57,16383,16384],{"class":140},"        m_W",[57,16386,156],{"class":136},[57,16388,16389],{"class":140},"w;\n",[57,16391,16392,16395,16397],{"class":59,"line":262},[57,16393,16394],{"class":140},"        m_H",[57,16396,156],{"class":136},[57,16398,16399],{"class":140},"h;\n",[57,16401,16402],{"class":59,"line":281},[57,16403,2460],{"class":140},[57,16405,16406,16408,16411],{"class":59,"line":287},[57,16407,2258],{"class":136},[57,16409,16410],{"class":70}," mianji",[57,16412,2249],{"class":140},[57,16414,16415],{"class":59,"line":298},[57,16416,2303],{"class":140},[57,16418,16419,16421,16423,16425,16428,16430,16433,16435,16438,16440,16443,16445,16448,16450],{"class":59,"line":311},[57,16420,15024],{"class":136},[57,16422,15027],{"class":81},[57,16424,871],{"class":136},[57,16426,16427],{"class":140},"(m_L",[57,16429,871],{"class":136},[57,16431,16432],{"class":140},"m_W ",[57,16434,897],{"class":136},[57,16436,16437],{"class":140}," m_L",[57,16439,871],{"class":136},[57,16441,16442],{"class":140},"m_H ",[57,16444,897],{"class":136},[57,16446,16447],{"class":140}," m_W",[57,16449,871],{"class":136},[57,16451,16452],{"class":140},"m_H);\n",[57,16454,16455],{"class":59,"line":322},[57,16456,2460],{"class":140},[57,16458,16459,16461,16464],{"class":59,"line":1929},[57,16460,2258],{"class":136},[57,16462,16463],{"class":70}," tiji",[57,16465,2249],{"class":140},[57,16467,16468],{"class":59,"line":1950},[57,16469,2303],{"class":140},[57,16471,16472,16474,16476,16478,16481,16483],{"class":59,"line":1955},[57,16473,15024],{"class":136},[57,16475,16437],{"class":140},[57,16477,871],{"class":136},[57,16479,16480],{"class":140},"m_W",[57,16482,871],{"class":136},[57,16484,16485],{"class":140},"m_H;\n",[57,16487,16488],{"class":59,"line":1969},[57,16489,2460],{"class":140},[57,16491,16492],{"class":59,"line":1974},[57,16493,16494],{"class":63},"    \u002F\u002F获取长宽高\n",[57,16496,16497,16499,16502],{"class":59,"line":2001},[57,16498,2258],{"class":136},[57,16500,16501],{"class":70}," getLength",[57,16503,2249],{"class":140},[57,16505,16506],{"class":59,"line":2006},[57,16507,2303],{"class":140},[57,16509,16510,16512],{"class":59,"line":2023},[57,16511,15024],{"class":136},[57,16513,16514],{"class":140}," m_L;\n",[57,16516,16517],{"class":59,"line":2028},[57,16518,2460],{"class":140},[57,16520,16521,16523,16526],{"class":59,"line":2033},[57,16522,2258],{"class":136},[57,16524,16525],{"class":70}," getWidth",[57,16527,2249],{"class":140},[57,16529,16530],{"class":59,"line":2038},[57,16531,2303],{"class":140},[57,16533,16534,16536],{"class":59,"line":2052},[57,16535,15024],{"class":136},[57,16537,16538],{"class":140}," m_W;\n",[57,16540,16541],{"class":59,"line":2057},[57,16542,2460],{"class":140},[57,16544,16545,16547,16550],{"class":59,"line":2850},[57,16546,2258],{"class":136},[57,16548,16549],{"class":70}," getHeight",[57,16551,2249],{"class":140},[57,16553,16554],{"class":59,"line":2864},[57,16555,2303],{"class":140},[57,16557,16558,16560],{"class":59,"line":2872},[57,16559,15024],{"class":136},[57,16561,16562],{"class":140}," m_H;\n",[57,16564,16565],{"class":59,"line":2877},[57,16566,2460],{"class":140},[57,16568,16569],{"class":59,"line":2883},[57,16570,16571],{"class":63},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[57,16573,16574,16577,16580,16582,16585,16587],{"class":59,"line":2889},[57,16575,16576],{"class":136},"    bool",[57,16578,16579],{"class":70}," isEqual",[57,16581,168],{"class":140},[57,16583,16584],{"class":70},"Cube",[57,16586,3122],{"class":5489},[57,16588,238],{"class":140},[57,16590,16591],{"class":59,"line":2894},[57,16592,2303],{"class":140},[57,16594,16595,16597,16600,16603,16605,16607,16610,16612,16615,16618,16620,16622,16625,16627,16629,16632,16634,16636],{"class":59,"line":8221},[57,16596,2770],{"class":136},[57,16598,16599],{"class":140}," (c.",[57,16601,16602],{"class":70},"getLength",[57,16604,13323],{"class":140},[57,16606,3222],{"class":136},[57,16608,16609],{"class":140}," m_L ",[57,16611,1989],{"class":136},[57,16613,16614],{"class":140}," c.",[57,16616,16617],{"class":70},"getWidth",[57,16619,13323],{"class":140},[57,16621,3222],{"class":136},[57,16623,16624],{"class":140}," m_W ",[57,16626,1989],{"class":136},[57,16628,16614],{"class":140},[57,16630,16631],{"class":70},"getHeight",[57,16633,13323],{"class":140},[57,16635,3222],{"class":136},[57,16637,16638],{"class":140}," m_H)\n",[57,16640,16641],{"class":59,"line":8245},[57,16642,2783],{"class":140},[57,16644,16645,16647,16650],{"class":59,"line":8250},[57,16646,16004],{"class":136},[57,16648,16649],{"class":81}," true",[57,16651,1576],{"class":140},[57,16653,16654],{"class":59,"line":8256},[57,16655,2802],{"class":140},[57,16657,16658],{"class":59,"line":8283},[57,16659,2843],{"class":136},[57,16661,16662],{"class":59,"line":8288},[57,16663,2783],{"class":140},[57,16665,16666,16668,16671],{"class":59,"line":8294},[57,16667,16004],{"class":136},[57,16669,16670],{"class":81}," false",[57,16672,1576],{"class":140},[57,16674,16675],{"class":59,"line":8306},[57,16676,2802],{"class":140},[57,16678,16679],{"class":59,"line":8318},[57,16680,2460],{"class":140},[57,16682,16683],{"class":59,"line":8330},[57,16684,16685],{"class":63},"    \u002F\u002F私有属性\n",[57,16687,16688],{"class":59,"line":9989},[57,16689,15494],{"class":136},[57,16691,16692,16694],{"class":59,"line":10014},[57,16693,2258],{"class":136},[57,16695,16514],{"class":140},[57,16697,16698,16700],{"class":59,"line":10037},[57,16699,2258],{"class":136},[57,16701,16538],{"class":140},[57,16703,16704,16706],{"class":59,"line":10061},[57,16705,2258],{"class":136},[57,16707,16562],{"class":140},[57,16709,16710],{"class":59,"line":10066},[57,16711,2673],{"emptyLinePlaceholder":350},[57,16713,16714],{"class":59,"line":10071},[57,16715,4268],{"class":140},[57,16717,16718],{"class":59,"line":10076},[57,16719,16720],{"class":63},"\u002F\u002F全局函数判断两个立方体是否相等\n",[57,16722,16723,16725,16727,16729,16731,16734,16736,16738,16741],{"class":59,"line":10085},[57,16724,1637],{"class":136},[57,16726,16579],{"class":70},[57,16728,168],{"class":140},[57,16730,16584],{"class":70},[57,16732,16733],{"class":5489}," c1",[57,16735,273],{"class":140},[57,16737,16584],{"class":70},[57,16739,16740],{"class":5489}," c2",[57,16742,238],{"class":140},[57,16744,16745],{"class":59,"line":10090},[57,16746,1828],{"class":140},[57,16748,16749,16751,16754,16756,16758,16760,16763,16765,16768,16770,16772,16774,16776,16778,16780,16782,16784,16786,16788,16790,16792,16794,16796,16798],{"class":59,"line":10096},[57,16750,4363],{"class":136},[57,16752,16753],{"class":140}," (c1.",[57,16755,16602],{"class":70},[57,16757,13323],{"class":140},[57,16759,3222],{"class":136},[57,16761,16762],{"class":140}," c2.",[57,16764,16602],{"class":70},[57,16766,16767],{"class":140},"()) ",[57,16769,1989],{"class":136},[57,16771,16753],{"class":140},[57,16773,16617],{"class":70},[57,16775,13323],{"class":140},[57,16777,3222],{"class":136},[57,16779,16762],{"class":140},[57,16781,16617],{"class":70},[57,16783,16767],{"class":140},[57,16785,1989],{"class":136},[57,16787,16753],{"class":140},[57,16789,16631],{"class":70},[57,16791,13323],{"class":140},[57,16793,3222],{"class":136},[57,16795,16762],{"class":140},[57,16797,16631],{"class":70},[57,16799,16800],{"class":140},"());\n",[57,16802,16803],{"class":59,"line":10117},[57,16804,1847],{"class":140},[57,16806,16807,16809,16811],{"class":59,"line":10123},[57,16808,429],{"class":136},[57,16810,2246],{"class":70},[57,16812,2249],{"class":140},[57,16814,16815],{"class":59,"line":10137},[57,16816,1828],{"class":140},[57,16818,16819],{"class":59,"line":10143},[57,16820,16821],{"class":140},"    Cube c1;\n",[57,16823,16824],{"class":59,"line":10170},[57,16825,16826],{"class":63},"    \u002F\u002F输入立方体的长宽高\n",[57,16828,16829,16831,16833,16836,16838],{"class":59,"line":10179},[57,16830,1833],{"class":140},[57,16832,1459],{"class":136},[57,16834,16835],{"class":74},"\"请输入第一个立方体的长、宽、高：\"",[57,16837,1459],{"class":136},[57,16839,1481],{"class":140},[57,16841,16842,16844],{"class":59,"line":10185},[57,16843,2258],{"class":136},[57,16845,16846],{"class":140}," l,w,h,l1,w1,h1;\n",[57,16848,16849,16851,16853,16855,16857,16859,16861],{"class":59,"line":10193},[57,16850,2285],{"class":140},[57,16852,1712],{"class":136},[57,16854,934],{"class":140},[57,16856,1712],{"class":136},[57,16858,1211],{"class":140},[57,16860,1712],{"class":136},[57,16862,16399],{"class":140},[57,16864,16865,16868,16871],{"class":59,"line":10198},[57,16866,16867],{"class":140},"    c1.",[57,16869,16870],{"class":70},"setLwh",[57,16872,16873],{"class":140},"(l,w,h);\n",[57,16875,16877],{"class":59,"line":16876},66,[57,16878,16879],{"class":63},"    \u002F\u002F面积\n",[57,16881,16883,16885,16887,16890,16892,16894,16897,16899,16901],{"class":59,"line":16882},67,[57,16884,1833],{"class":140},[57,16886,1459],{"class":136},[57,16888,16889],{"class":74},"\"立方体的表面积为：\"",[57,16891,1459],{"class":136},[57,16893,15102],{"class":140},[57,16895,16896],{"class":70},"mianji",[57,16898,2700],{"class":140},[57,16900,1459],{"class":136},[57,16902,1481],{"class":140},[57,16904,16906],{"class":59,"line":16905},68,[57,16907,16908],{"class":63},"    \u002F\u002F体积\n",[57,16910,16912,16914,16916,16919,16921,16923,16926,16928,16930],{"class":59,"line":16911},69,[57,16913,1833],{"class":140},[57,16915,1459],{"class":136},[57,16917,16918],{"class":74},"\"立方体的体积为：\"",[57,16920,1459],{"class":136},[57,16922,15102],{"class":140},[57,16924,16925],{"class":70},"tiji",[57,16927,2700],{"class":140},[57,16929,1459],{"class":136},[57,16931,1481],{"class":140},[57,16933,16935,16937,16939,16942,16944],{"class":59,"line":16934},70,[57,16936,1833],{"class":140},[57,16938,1459],{"class":136},[57,16940,16941],{"class":74},"\"请输入第二个立方体的长、宽、高：\"",[57,16943,1459],{"class":136},[57,16945,1481],{"class":140},[57,16947,16949,16951,16953,16956,16958,16961,16963],{"class":59,"line":16948},71,[57,16950,2285],{"class":140},[57,16952,1712],{"class":136},[57,16954,16955],{"class":140},"l1",[57,16957,1712],{"class":136},[57,16959,16960],{"class":140},"w1",[57,16962,1712],{"class":136},[57,16964,16965],{"class":140},"h1;\n",[57,16967,16969],{"class":59,"line":16968},72,[57,16970,16971],{"class":140},"    Cube c2;\n",[57,16973,16975,16978,16980],{"class":59,"line":16974},73,[57,16976,16977],{"class":140},"    c2.",[57,16979,16870],{"class":70},[57,16981,16982],{"class":140},"(l1,w1,h1);\n",[57,16984,16986,16988,16990,16993,16995,16998,17000,17002,17004],{"class":59,"line":16985},74,[57,16987,1833],{"class":140},[57,16989,1459],{"class":136},[57,16991,16992],{"class":74},"\"第二个立方体的表面积为：\"",[57,16994,1459],{"class":136},[57,16996,16997],{"class":140},"c2.",[57,16999,16896],{"class":70},[57,17001,2700],{"class":140},[57,17003,1459],{"class":136},[57,17005,1481],{"class":140},[57,17007,17009,17011,17013,17016,17018,17020,17022,17024,17026],{"class":59,"line":17008},75,[57,17010,1833],{"class":140},[57,17012,1459],{"class":136},[57,17014,17015],{"class":74},"\"第二个立方体的体积为：\"",[57,17017,1459],{"class":136},[57,17019,16997],{"class":140},[57,17021,16925],{"class":70},[57,17023,2700],{"class":140},[57,17025,1459],{"class":136},[57,17027,1481],{"class":140},[57,17029,17031],{"class":59,"line":17030},76,[57,17032,2673],{"emptyLinePlaceholder":350},[57,17034,17036],{"class":59,"line":17035},77,[57,17037,17038],{"class":63},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[57,17040,17042,17044,17046,17049,17051],{"class":59,"line":17041},78,[57,17043,1833],{"class":140},[57,17045,1459],{"class":136},[57,17047,17048],{"class":74},"\"内部函数判断结果：\"",[57,17050,1459],{"class":136},[57,17052,1481],{"class":140},[57,17054,17056,17058,17060,17063],{"class":59,"line":17055},79,[57,17057,3374],{"class":136},[57,17059,16753],{"class":140},[57,17061,17062],{"class":70},"isEqual",[57,17064,17065],{"class":140},"(c2))\n",[57,17067,17069],{"class":59,"line":17068},80,[57,17070,2303],{"class":140},[57,17072,17074,17076,17078,17081,17083],{"class":59,"line":17073},81,[57,17075,3724],{"class":140},[57,17077,1459],{"class":136},[57,17079,17080],{"class":74},"\"两个立方体相等\"",[57,17082,1459],{"class":136},[57,17084,1481],{"class":140},[57,17086,17088],{"class":59,"line":17087},82,[57,17089,2460],{"class":140},[57,17091,17093],{"class":59,"line":17092},83,[57,17094,17095],{"class":136},"    else\n",[57,17097,17099],{"class":59,"line":17098},84,[57,17100,2303],{"class":140},[57,17102,17104,17106,17108,17111,17113],{"class":59,"line":17103},85,[57,17105,3724],{"class":140},[57,17107,1459],{"class":136},[57,17109,17110],{"class":74},"\"两个立方体不相等\"",[57,17112,1459],{"class":136},[57,17114,1481],{"class":140},[57,17116,17118],{"class":59,"line":17117},86,[57,17119,2460],{"class":140},[57,17121,17123],{"class":59,"line":17122},87,[57,17124,2673],{"emptyLinePlaceholder":350},[57,17126,17128,17130,17132,17135,17137],{"class":59,"line":17127},88,[57,17129,1833],{"class":140},[57,17131,1459],{"class":136},[57,17133,17134],{"class":74},"\"全局函数判断结果：\"",[57,17136,1459],{"class":136},[57,17138,1481],{"class":140},[57,17140,17142,17144,17146,17148],{"class":59,"line":17141},89,[57,17143,3374],{"class":136},[57,17145,1934],{"class":140},[57,17147,17062],{"class":70},[57,17149,17150],{"class":140},"(c1, c2))\n",[57,17152,17154],{"class":59,"line":17153},90,[57,17155,2303],{"class":140},[57,17157,17159,17161,17163,17165,17167],{"class":59,"line":17158},91,[57,17160,3724],{"class":140},[57,17162,1459],{"class":136},[57,17164,17080],{"class":74},[57,17166,1459],{"class":136},[57,17168,1481],{"class":140},[57,17170,17172],{"class":59,"line":17171},92,[57,17173,2460],{"class":140},[57,17175,17177],{"class":59,"line":17176},93,[57,17178,17095],{"class":136},[57,17180,17182],{"class":59,"line":17181},94,[57,17183,2303],{"class":140},[57,17185,17187,17189,17191,17193,17195],{"class":59,"line":17186},95,[57,17188,3724],{"class":140},[57,17190,1459],{"class":136},[57,17192,17110],{"class":74},[57,17194,1459],{"class":136},[57,17196,1481],{"class":140},[57,17198,17200],{"class":59,"line":17199},96,[57,17201,2460],{"class":140},[57,17203,17205],{"class":59,"line":17204},97,[57,17206,1847],{"class":140},[377,17208,17209],{"start":67},[380,17210,17211],{},[33,17212,17213],{},"练习案例2：点和圆的关系",[1422,17215,17216],{},[380,17217,17218],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[49,17220,17222],{"className":415,"code":17221,"language":417,"meta":46,"style":46},"#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",[28,17223,17224,17230,17240,17247,17254,17258,17262,17267,17301,17306,17322,17336,17340,17344,17351,17358,17362,17368,17372,17376,17380,17402,17425,17430,17444,17459,17463,17467,17473,17478,17483,17487,17513,17517,17547,17575,17603,17620,17624,17637,17641,17645,17649,17662,17666,17670,17678,17682,17686,17690,17695,17699,17710,17717,17726,17736,17747,17754,17767,17778,17788,17799,17806,17820,17825,17835,17843],{"__ignoreMap":46},[57,17225,17226,17228],{"class":59,"line":60},[57,17227,2223],{"class":136},[57,17229,2226],{"class":74},[57,17231,17232,17234,17236,17238],{"class":59,"line":67},[57,17233,2231],{"class":136},[57,17235,2234],{"class":136},[57,17237,2237],{"class":70},[57,17239,1576],{"class":140},[57,17241,17242,17244],{"class":59,"line":144},[57,17243,2223],{"class":136},[57,17245,17246],{"class":74},"\u003Ccmath>\n",[57,17248,17249,17251],{"class":59,"line":150},[57,17250,14966],{"class":136},[57,17252,17253],{"class":70}," Point\n",[57,17255,17256],{"class":59,"line":162},[57,17257,1828],{"class":140},[57,17259,17260],{"class":59,"line":180},[57,17261,14988],{"class":136},[57,17263,17264],{"class":59,"line":186},[57,17265,17266],{"class":63},"    \u002F\u002F赋值\n",[57,17268,17269,17271,17274,17276,17278,17281,17283,17285,17288,17291,17293,17296,17298],{"class":59,"line":197},[57,17270,15181],{"class":136},[57,17272,17273],{"class":70}," setPoint",[57,17275,168],{"class":140},[57,17277,14309],{"class":136},[57,17279,17280],{"class":5489}," x",[57,17282,12708],{"class":140},[57,17284,14309],{"class":136},[57,17286,17287],{"class":5489}," y",[57,17289,17290],{"class":140},") { m_x ",[57,17292,156],{"class":136},[57,17294,17295],{"class":140}," x; m_y ",[57,17297,156],{"class":136},[57,17299,17300],{"class":140}," y; }\n",[57,17302,17303],{"class":59,"line":241},[57,17304,17305],{"class":63},"    \u002F\u002F获取坐标\n",[57,17307,17308,17310,17313,17316,17319],{"class":59,"line":249},[57,17309,15010],{"class":136},[57,17311,17312],{"class":70}," getX",[57,17314,17315],{"class":140},"() { ",[57,17317,17318],{"class":136},"return",[57,17320,17321],{"class":140}," m_x; }\n",[57,17323,17324,17326,17329,17331,17333],{"class":59,"line":262},[57,17325,15010],{"class":136},[57,17327,17328],{"class":70}," getY",[57,17330,17315],{"class":140},[57,17332,17318],{"class":136},[57,17334,17335],{"class":140}," m_y; }\n",[57,17337,17338],{"class":59,"line":281},[57,17339,2673],{"emptyLinePlaceholder":350},[57,17341,17342],{"class":59,"line":287},[57,17343,15494],{"class":136},[57,17345,17346,17348],{"class":59,"line":298},[57,17347,15010],{"class":136},[57,17349,17350],{"class":140}," m_x;\n",[57,17352,17353,17355],{"class":59,"line":311},[57,17354,15010],{"class":136},[57,17356,17357],{"class":140}," m_y;\n",[57,17359,17360],{"class":59,"line":322},[57,17361,4268],{"class":140},[57,17363,17364,17366],{"class":59,"line":1929},[57,17365,14966],{"class":136},[57,17367,14969],{"class":70},[57,17369,17370],{"class":59,"line":1950},[57,17371,1828],{"class":140},[57,17373,17374],{"class":59,"line":1955},[57,17375,14988],{"class":136},[57,17377,17378],{"class":59,"line":1969},[57,17379,17266],{"class":63},[57,17381,17382,17384,17387,17389,17391,17394,17397,17399],{"class":59,"line":1974},[57,17383,15181],{"class":136},[57,17385,17386],{"class":70}," setRadius",[57,17388,168],{"class":140},[57,17390,14309],{"class":136},[57,17392,17393],{"class":5489}," r",[57,17395,17396],{"class":140},") { m_r ",[57,17398,156],{"class":136},[57,17400,17401],{"class":140}," r; }\n",[57,17403,17404,17406,17409,17411,17414,17417,17420,17422],{"class":59,"line":2001},[57,17405,15181],{"class":136},[57,17407,17408],{"class":70}," setCenter",[57,17410,168],{"class":140},[57,17412,17413],{"class":70},"Point",[57,17415,17416],{"class":5489}," center",[57,17418,17419],{"class":140},") { m_center ",[57,17421,156],{"class":136},[57,17423,17424],{"class":140}," center; }\n",[57,17426,17427],{"class":59,"line":2006},[57,17428,17429],{"class":63},"    \u002F\u002F获取属性\n",[57,17431,17432,17434,17437,17439,17441],{"class":59,"line":2023},[57,17433,15010],{"class":136},[57,17435,17436],{"class":70}," getRadius",[57,17438,17315],{"class":140},[57,17440,17318],{"class":136},[57,17442,17443],{"class":140}," m_r; }\n",[57,17445,17446,17449,17452,17454,17456],{"class":59,"line":2028},[57,17447,17448],{"class":70},"    Point",[57,17450,17451],{"class":70}," getCenter",[57,17453,17315],{"class":140},[57,17455,17318],{"class":136},[57,17457,17458],{"class":140}," m_center; }\n",[57,17460,17461],{"class":59,"line":2033},[57,17462,2673],{"emptyLinePlaceholder":350},[57,17464,17465],{"class":59,"line":2038},[57,17466,15494],{"class":136},[57,17468,17469,17471],{"class":59,"line":2052},[57,17470,15010],{"class":136},[57,17472,15000],{"class":140},[57,17474,17475],{"class":59,"line":2057},[57,17476,17477],{"class":63},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[57,17479,17480],{"class":59,"line":2850},[57,17481,17482],{"class":140},"    Point m_center;\n",[57,17484,17485],{"class":59,"line":2864},[57,17486,4268],{"class":140},[57,17488,17489,17491,17494,17496,17499,17501,17503,17505,17507,17509,17511],{"class":59,"line":2872},[57,17490,5637],{"class":136},[57,17492,17493],{"class":70}," isInCircle",[57,17495,168],{"class":140},[57,17497,17498],{"class":70},"Circle",[57,17500,10857],{"class":136},[57,17502,705],{"class":5489},[57,17504,273],{"class":140},[57,17506,17413],{"class":70},[57,17508,10857],{"class":136},[57,17510,14],{"class":5489},[57,17512,238],{"class":140},[57,17514,17515],{"class":59,"line":2877},[57,17516,1828],{"class":140},[57,17518,17519,17521,17524,17526,17528,17531,17534,17537,17539,17541,17543,17545],{"class":59,"line":2883},[57,17520,15010],{"class":136},[57,17522,17523],{"class":140}," dx ",[57,17525,156],{"class":136},[57,17527,16614],{"class":140},[57,17529,17530],{"class":70},"getCenter",[57,17532,17533],{"class":140},"().",[57,17535,17536],{"class":70},"getX",[57,17538,13323],{"class":140},[57,17540,948],{"class":136},[57,17542,16160],{"class":140},[57,17544,17536],{"class":70},[57,17546,5909],{"class":140},[57,17548,17549,17551,17554,17556,17558,17560,17562,17565,17567,17569,17571,17573],{"class":59,"line":2889},[57,17550,15010],{"class":136},[57,17552,17553],{"class":140}," dy ",[57,17555,156],{"class":136},[57,17557,16614],{"class":140},[57,17559,17530],{"class":70},[57,17561,17533],{"class":140},[57,17563,17564],{"class":70},"getY",[57,17566,13323],{"class":140},[57,17568,948],{"class":136},[57,17570,16160],{"class":140},[57,17572,17564],{"class":70},[57,17574,5909],{"class":140},[57,17576,17577,17579,17582,17584,17587,17590,17592,17594,17596,17598,17600],{"class":59,"line":2894},[57,17578,15010],{"class":136},[57,17580,17581],{"class":140}," distance ",[57,17583,156],{"class":136},[57,17585,17586],{"class":70}," sqrt",[57,17588,17589],{"class":140},"(dx ",[57,17591,871],{"class":136},[57,17593,17523],{"class":140},[57,17595,897],{"class":136},[57,17597,17553],{"class":140},[57,17599,871],{"class":136},[57,17601,17602],{"class":140}," dy);\n",[57,17604,17605,17607,17610,17612,17614,17617],{"class":59,"line":8221},[57,17606,3374],{"class":136},[57,17608,17609],{"class":140}," (distance ",[57,17611,1326],{"class":136},[57,17613,16614],{"class":140},[57,17615,17616],{"class":70},"getRadius",[57,17618,17619],{"class":140},"())\n",[57,17621,17622],{"class":59,"line":8245},[57,17623,2303],{"class":140},[57,17625,17626,17628,17630,17633,17635],{"class":59,"line":8250},[57,17627,9942],{"class":140},[57,17629,1459],{"class":136},[57,17631,17632],{"class":74}," \"点在圆内\"",[57,17634,1727],{"class":136},[57,17636,9113],{"class":140},[57,17638,17639],{"class":59,"line":8256},[57,17640,2460],{"class":140},[57,17642,17643],{"class":59,"line":8283},[57,17644,17095],{"class":136},[57,17646,17647],{"class":59,"line":8288},[57,17648,2303],{"class":140},[57,17650,17651,17653,17655,17658,17660],{"class":59,"line":8294},[57,17652,9942],{"class":140},[57,17654,1459],{"class":136},[57,17656,17657],{"class":74}," \"点在圆外\"",[57,17659,1727],{"class":136},[57,17661,9113],{"class":140},[57,17663,17664],{"class":59,"line":8306},[57,17665,2460],{"class":140},[57,17667,17668],{"class":59,"line":8318},[57,17669,1847],{"class":140},[57,17671,17672,17674,17676],{"class":59,"line":8330},[57,17673,429],{"class":136},[57,17675,2246],{"class":70},[57,17677,2249],{"class":140},[57,17679,17680],{"class":59,"line":9989},[57,17681,1828],{"class":140},[57,17683,17684],{"class":59,"line":10014},[57,17685,15325],{"class":63},[57,17687,17688],{"class":59,"line":10037},[57,17689,15072],{"class":140},[57,17691,17692],{"class":59,"line":10061},[57,17693,17694],{"class":140},"    Point p1;\n",[57,17696,17697],{"class":59,"line":10066},[57,17698,17266],{"class":63},[57,17700,17701,17703,17705,17708],{"class":59,"line":10071},[57,17702,1833],{"class":140},[57,17704,1459],{"class":136},[57,17706,17707],{"class":74},"\"请输入圆的半径：\"",[57,17709,1576],{"class":140},[57,17711,17712,17714],{"class":59,"line":10076},[57,17713,15010],{"class":136},[57,17715,17716],{"class":140}," r;\n",[57,17718,17719,17721,17723],{"class":59,"line":10085},[57,17720,2285],{"class":140},[57,17722,1712],{"class":136},[57,17724,17725],{"class":140},"r;\n",[57,17727,17728,17730,17733],{"class":59,"line":10090},[57,17729,16867],{"class":140},[57,17731,17732],{"class":70},"setRadius",[57,17734,17735],{"class":140},"(r);\n",[57,17737,17738,17740,17742,17745],{"class":59,"line":10096},[57,17739,1833],{"class":140},[57,17741,1459],{"class":136},[57,17743,17744],{"class":74},"\"请输入圆心坐标：\"",[57,17746,1576],{"class":140},[57,17748,17749,17751],{"class":59,"line":10117},[57,17750,15010],{"class":136},[57,17752,17753],{"class":140}," x, y;\n",[57,17755,17756,17758,17760,17762,17764],{"class":59,"line":10123},[57,17757,2285],{"class":140},[57,17759,1712],{"class":136},[57,17761,1236],{"class":140},[57,17763,1712],{"class":136},[57,17765,17766],{"class":140},"y;\n",[57,17768,17769,17772,17775],{"class":59,"line":10137},[57,17770,17771],{"class":140},"    p1.",[57,17773,17774],{"class":70},"setPoint",[57,17776,17777],{"class":140},"(x, y);\n",[57,17779,17780,17782,17785],{"class":59,"line":10143},[57,17781,16867],{"class":140},[57,17783,17784],{"class":70},"setCenter",[57,17786,17787],{"class":140},"(p1);\n",[57,17789,17790,17792,17794,17797],{"class":59,"line":10170},[57,17791,1833],{"class":140},[57,17793,1459],{"class":136},[57,17795,17796],{"class":74},"\"请输入测试点坐标：\"",[57,17798,1576],{"class":140},[57,17800,17801,17803],{"class":59,"line":10179},[57,17802,15010],{"class":136},[57,17804,17805],{"class":140}," x1, y1;\n",[57,17807,17808,17810,17812,17815,17817],{"class":59,"line":10185},[57,17809,2285],{"class":140},[57,17811,1712],{"class":136},[57,17813,17814],{"class":140},"x1",[57,17816,1712],{"class":136},[57,17818,17819],{"class":140},"y1;\n",[57,17821,17822],{"class":59,"line":10193},[57,17823,17824],{"class":140},"    Point p2;\n",[57,17826,17827,17830,17832],{"class":59,"line":10198},[57,17828,17829],{"class":140},"    p2.",[57,17831,17774],{"class":70},[57,17833,17834],{"class":140},"(x1, y1);\n",[57,17836,17837,17840],{"class":59,"line":16876},[57,17838,17839],{"class":70},"    isInCircle",[57,17841,17842],{"class":140},"(c1, p2);\n",[57,17844,17845],{"class":59,"line":16882},[57,17846,1847],{"class":140},[14,17848,17849],{},"在类中可以让另一个类作为本来的成员",[14,17851,17852],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,17854,17855],{},"创建point.h",[49,17857,17859],{"className":415,"code":17858,"language":417,"meta":46,"style":46},"#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",[28,17860,17861,17872,17878,17888,17894,17898,17903,17907,17911,17931,17935,17943,17951,17955,17959,17965,17971],{"__ignoreMap":46},[57,17862,17863,17866,17869],{"class":59,"line":60},[57,17864,17865],{"class":136},"#pragma",[57,17867,17868],{"class":70}," once",[57,17870,17871],{"class":63}," \u002F\u002F防止头文件重复包含\n",[57,17873,17874,17876],{"class":59,"line":67},[57,17875,2223],{"class":136},[57,17877,2226],{"class":74},[57,17879,17880,17882,17884,17886],{"class":59,"line":144},[57,17881,2231],{"class":136},[57,17883,2234],{"class":136},[57,17885,2237],{"class":70},[57,17887,1576],{"class":140},[57,17889,17890,17892],{"class":59,"line":150},[57,17891,14966],{"class":136},[57,17893,17253],{"class":70},[57,17895,17896],{"class":59,"line":162},[57,17897,1828],{"class":140},[57,17899,17900],{"class":59,"line":180},[57,17901,17902],{"class":63},"\u002F\u002F做好声明与变量定义就可以\n",[57,17904,17905],{"class":59,"line":186},[57,17906,14988],{"class":136},[57,17908,17909],{"class":59,"line":197},[57,17910,17266],{"class":63},[57,17912,17913,17915,17917,17919,17921,17923,17925,17927,17929],{"class":59,"line":241},[57,17914,15181],{"class":136},[57,17916,17273],{"class":70},[57,17918,168],{"class":140},[57,17920,14309],{"class":136},[57,17922,17280],{"class":5489},[57,17924,12708],{"class":140},[57,17926,14309],{"class":136},[57,17928,17287],{"class":5489},[57,17930,2992],{"class":140},[57,17932,17933],{"class":59,"line":249},[57,17934,17305],{"class":63},[57,17936,17937,17939,17941],{"class":59,"line":262},[57,17938,15010],{"class":136},[57,17940,17312],{"class":70},[57,17942,5909],{"class":140},[57,17944,17945,17947,17949],{"class":59,"line":281},[57,17946,15010],{"class":136},[57,17948,17328],{"class":70},[57,17950,5909],{"class":140},[57,17952,17953],{"class":59,"line":287},[57,17954,2673],{"emptyLinePlaceholder":350},[57,17956,17957],{"class":59,"line":298},[57,17958,15494],{"class":136},[57,17960,17961,17963],{"class":59,"line":311},[57,17962,15010],{"class":136},[57,17964,17350],{"class":140},[57,17966,17967,17969],{"class":59,"line":322},[57,17968,15010],{"class":136},[57,17970,17357],{"class":140},[57,17972,17973],{"class":59,"line":1929},[57,17974,4268],{"class":140},[14,17976,17977],{},"创建point.cpp",[49,17979,17981],{"className":415,"code":17980,"language":417,"meta":46,"style":46},"#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",[28,17982,17983,17990,17995,18029,18033,18049],{"__ignoreMap":46},[57,17984,17985,17987],{"class":59,"line":60},[57,17986,2223],{"class":136},[57,17988,17989],{"class":74},"\u003Cpoint.h>\n",[57,17991,17992],{"class":59,"line":67},[57,17993,17994],{"class":63},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[57,17996,17997,17999,18002,18005,18007,18009,18011,18013,18015,18017,18019,18021,18023,18025,18027],{"class":59,"line":144},[57,17998,15181],{"class":136},[57,18000,18001],{"class":70}," Point",[57,18003,18004],{"class":140},"::",[57,18006,17774],{"class":70},[57,18008,168],{"class":140},[57,18010,14309],{"class":136},[57,18012,17280],{"class":5489},[57,18014,12708],{"class":140},[57,18016,14309],{"class":136},[57,18018,17287],{"class":5489},[57,18020,17290],{"class":140},[57,18022,156],{"class":136},[57,18024,17295],{"class":140},[57,18026,156],{"class":136},[57,18028,17300],{"class":140},[57,18030,18031],{"class":59,"line":150},[57,18032,17305],{"class":63},[57,18034,18035,18037,18039,18041,18043,18045,18047],{"class":59,"line":162},[57,18036,15010],{"class":136},[57,18038,18001],{"class":70},[57,18040,18004],{"class":140},[57,18042,17536],{"class":70},[57,18044,17315],{"class":140},[57,18046,17318],{"class":136},[57,18048,17321],{"class":140},[57,18050,18051,18053,18055,18057,18059,18061,18063],{"class":59,"line":180},[57,18052,15010],{"class":136},[57,18054,18001],{"class":70},[57,18056,18004],{"class":140},[57,18058,17564],{"class":70},[57,18060,17315],{"class":140},[57,18062,17318],{"class":136},[57,18064,17335],{"class":140},[14,18066,18067],{},"创建circle.h",[49,18069,18071],{"className":415,"code":18070,"language":417,"meta":46,"style":46},"#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",[28,18072,18073,18080,18086,18096,18102,18108,18112,18116,18120,18134,18148,18152,18160,18168,18172,18176,18182,18186,18190],{"__ignoreMap":46},[57,18074,18075,18077],{"class":59,"line":60},[57,18076,17865],{"class":136},[57,18078,18079],{"class":70}," once\n",[57,18081,18082,18084],{"class":59,"line":67},[57,18083,2223],{"class":136},[57,18085,2226],{"class":74},[57,18087,18088,18090,18092,18094],{"class":59,"line":144},[57,18089,2231],{"class":136},[57,18091,2234],{"class":136},[57,18093,2237],{"class":70},[57,18095,1576],{"class":140},[57,18097,18098,18100],{"class":59,"line":150},[57,18099,2223],{"class":136},[57,18101,17989],{"class":74},[57,18103,18104,18106],{"class":59,"line":162},[57,18105,14966],{"class":136},[57,18107,14969],{"class":70},[57,18109,18110],{"class":59,"line":180},[57,18111,1828],{"class":140},[57,18113,18114],{"class":59,"line":186},[57,18115,14988],{"class":136},[57,18117,18118],{"class":59,"line":197},[57,18119,17266],{"class":63},[57,18121,18122,18124,18126,18128,18130,18132],{"class":59,"line":241},[57,18123,15181],{"class":136},[57,18125,17386],{"class":70},[57,18127,168],{"class":140},[57,18129,14309],{"class":136},[57,18131,17393],{"class":5489},[57,18133,2992],{"class":140},[57,18135,18136,18138,18140,18142,18144,18146],{"class":59,"line":249},[57,18137,15181],{"class":136},[57,18139,17408],{"class":70},[57,18141,168],{"class":140},[57,18143,17413],{"class":70},[57,18145,17416],{"class":5489},[57,18147,2992],{"class":140},[57,18149,18150],{"class":59,"line":262},[57,18151,17429],{"class":63},[57,18153,18154,18156,18158],{"class":59,"line":281},[57,18155,15010],{"class":136},[57,18157,17436],{"class":70},[57,18159,5909],{"class":140},[57,18161,18162,18164,18166],{"class":59,"line":287},[57,18163,17448],{"class":70},[57,18165,17451],{"class":70},[57,18167,5909],{"class":140},[57,18169,18170],{"class":59,"line":298},[57,18171,2673],{"emptyLinePlaceholder":350},[57,18173,18174],{"class":59,"line":311},[57,18175,15494],{"class":136},[57,18177,18178,18180],{"class":59,"line":322},[57,18179,15010],{"class":136},[57,18181,15000],{"class":140},[57,18183,18184],{"class":59,"line":1929},[57,18185,17477],{"class":63},[57,18187,18188],{"class":59,"line":1950},[57,18189,17482],{"class":140},[57,18191,18192],{"class":59,"line":1955},[57,18193,4268],{"class":140},[14,18195,18196],{},"创建circle.cpp",[49,18198,18200],{"className":415,"code":18199,"language":417,"meta":46,"style":46},"#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",[28,18201,18202,18209,18232,18254,18259,18275],{"__ignoreMap":46},[57,18203,18204,18206],{"class":59,"line":60},[57,18205,2223],{"class":136},[57,18207,18208],{"class":74},"\u003Ccircle.h>\n",[57,18210,18211,18213,18216,18218,18220,18222,18224,18226,18228,18230],{"class":59,"line":67},[57,18212,5637],{"class":136},[57,18214,18215],{"class":70}," Circle",[57,18217,18004],{"class":140},[57,18219,17732],{"class":70},[57,18221,168],{"class":140},[57,18223,14309],{"class":136},[57,18225,17393],{"class":5489},[57,18227,17396],{"class":140},[57,18229,156],{"class":136},[57,18231,17401],{"class":140},[57,18233,18234,18236,18238,18240,18242,18244,18246,18248,18250,18252],{"class":59,"line":144},[57,18235,5637],{"class":136},[57,18237,18215],{"class":70},[57,18239,18004],{"class":140},[57,18241,17784],{"class":70},[57,18243,168],{"class":140},[57,18245,17413],{"class":70},[57,18247,17416],{"class":5489},[57,18249,17419],{"class":140},[57,18251,156],{"class":136},[57,18253,17424],{"class":140},[57,18255,18256],{"class":59,"line":150},[57,18257,18258],{"class":63},"\u002F\u002F获取属性\n",[57,18260,18261,18263,18265,18267,18269,18271,18273],{"class":59,"line":162},[57,18262,14309],{"class":136},[57,18264,18215],{"class":70},[57,18266,18004],{"class":140},[57,18268,17616],{"class":70},[57,18270,17315],{"class":140},[57,18272,17318],{"class":136},[57,18274,17443],{"class":140},[57,18276,18277,18279,18281,18283,18285,18287,18289],{"class":59,"line":180},[57,18278,17413],{"class":70},[57,18280,18215],{"class":70},[57,18282,18004],{"class":140},[57,18284,17530],{"class":70},[57,18286,17315],{"class":140},[57,18288,17318],{"class":136},[57,18290,17458],{"class":140},[14,18292,18293],{},"使用封装的类",[49,18295,18297],{"className":415,"code":18296,"language":417,"meta":46,"style":46},"#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",[28,18298,18299,18305,18315,18321,18327,18351,18355,18381,18407,18431,18445,18449,18461,18465,18469,18473,18485,18489,18493,18501,18505,18509,18513,18517,18521,18531,18537,18545,18553,18563,18569,18581,18589,18597,18607,18613,18625,18629,18637,18643],{"__ignoreMap":46},[57,18300,18301,18303],{"class":59,"line":60},[57,18302,2223],{"class":136},[57,18304,2226],{"class":74},[57,18306,18307,18309,18311,18313],{"class":59,"line":67},[57,18308,2231],{"class":136},[57,18310,2234],{"class":136},[57,18312,2237],{"class":70},[57,18314,1576],{"class":140},[57,18316,18317,18319],{"class":59,"line":144},[57,18318,2223],{"class":136},[57,18320,18208],{"class":74},[57,18322,18323,18325],{"class":59,"line":150},[57,18324,2223],{"class":136},[57,18326,17989],{"class":74},[57,18328,18329,18331,18333,18335,18337,18339,18341,18343,18345,18347,18349],{"class":59,"line":162},[57,18330,5637],{"class":136},[57,18332,17493],{"class":70},[57,18334,168],{"class":140},[57,18336,17498],{"class":70},[57,18338,10857],{"class":136},[57,18340,705],{"class":5489},[57,18342,273],{"class":140},[57,18344,17413],{"class":70},[57,18346,10857],{"class":136},[57,18348,14],{"class":5489},[57,18350,238],{"class":140},[57,18352,18353],{"class":59,"line":180},[57,18354,1828],{"class":140},[57,18356,18357,18359,18361,18363,18365,18367,18369,18371,18373,18375,18377,18379],{"class":59,"line":186},[57,18358,15010],{"class":136},[57,18360,17523],{"class":140},[57,18362,156],{"class":136},[57,18364,16614],{"class":140},[57,18366,17530],{"class":70},[57,18368,17533],{"class":140},[57,18370,17536],{"class":70},[57,18372,13323],{"class":140},[57,18374,948],{"class":136},[57,18376,16160],{"class":140},[57,18378,17536],{"class":70},[57,18380,5909],{"class":140},[57,18382,18383,18385,18387,18389,18391,18393,18395,18397,18399,18401,18403,18405],{"class":59,"line":197},[57,18384,15010],{"class":136},[57,18386,17553],{"class":140},[57,18388,156],{"class":136},[57,18390,16614],{"class":140},[57,18392,17530],{"class":70},[57,18394,17533],{"class":140},[57,18396,17564],{"class":70},[57,18398,13323],{"class":140},[57,18400,948],{"class":136},[57,18402,16160],{"class":140},[57,18404,17564],{"class":70},[57,18406,5909],{"class":140},[57,18408,18409,18411,18413,18415,18417,18419,18421,18423,18425,18427,18429],{"class":59,"line":241},[57,18410,15010],{"class":136},[57,18412,17581],{"class":140},[57,18414,156],{"class":136},[57,18416,17586],{"class":70},[57,18418,17589],{"class":140},[57,18420,871],{"class":136},[57,18422,17523],{"class":140},[57,18424,897],{"class":136},[57,18426,17553],{"class":140},[57,18428,871],{"class":136},[57,18430,17602],{"class":140},[57,18432,18433,18435,18437,18439,18441,18443],{"class":59,"line":249},[57,18434,3374],{"class":136},[57,18436,17609],{"class":140},[57,18438,1326],{"class":136},[57,18440,16614],{"class":140},[57,18442,17616],{"class":70},[57,18444,17619],{"class":140},[57,18446,18447],{"class":59,"line":262},[57,18448,2303],{"class":140},[57,18450,18451,18453,18455,18457,18459],{"class":59,"line":281},[57,18452,9942],{"class":140},[57,18454,1459],{"class":136},[57,18456,17632],{"class":74},[57,18458,1727],{"class":136},[57,18460,9113],{"class":140},[57,18462,18463],{"class":59,"line":287},[57,18464,2460],{"class":140},[57,18466,18467],{"class":59,"line":298},[57,18468,17095],{"class":136},[57,18470,18471],{"class":59,"line":311},[57,18472,2303],{"class":140},[57,18474,18475,18477,18479,18481,18483],{"class":59,"line":322},[57,18476,9942],{"class":140},[57,18478,1459],{"class":136},[57,18480,17657],{"class":74},[57,18482,1727],{"class":136},[57,18484,9113],{"class":140},[57,18486,18487],{"class":59,"line":1929},[57,18488,2460],{"class":140},[57,18490,18491],{"class":59,"line":1950},[57,18492,1847],{"class":140},[57,18494,18495,18497,18499],{"class":59,"line":1955},[57,18496,429],{"class":136},[57,18498,2246],{"class":70},[57,18500,2249],{"class":140},[57,18502,18503],{"class":59,"line":1969},[57,18504,1828],{"class":140},[57,18506,18507],{"class":59,"line":1974},[57,18508,15325],{"class":63},[57,18510,18511],{"class":59,"line":2001},[57,18512,15072],{"class":140},[57,18514,18515],{"class":59,"line":2006},[57,18516,17694],{"class":140},[57,18518,18519],{"class":59,"line":2023},[57,18520,17266],{"class":63},[57,18522,18523,18525,18527,18529],{"class":59,"line":2028},[57,18524,1833],{"class":140},[57,18526,1459],{"class":136},[57,18528,17707],{"class":74},[57,18530,1576],{"class":140},[57,18532,18533,18535],{"class":59,"line":2033},[57,18534,15010],{"class":136},[57,18536,17716],{"class":140},[57,18538,18539,18541,18543],{"class":59,"line":2038},[57,18540,2285],{"class":140},[57,18542,1712],{"class":136},[57,18544,17725],{"class":140},[57,18546,18547,18549,18551],{"class":59,"line":2052},[57,18548,16867],{"class":140},[57,18550,17732],{"class":70},[57,18552,17735],{"class":140},[57,18554,18555,18557,18559,18561],{"class":59,"line":2057},[57,18556,1833],{"class":140},[57,18558,1459],{"class":136},[57,18560,17744],{"class":74},[57,18562,1576],{"class":140},[57,18564,18565,18567],{"class":59,"line":2850},[57,18566,15010],{"class":136},[57,18568,17753],{"class":140},[57,18570,18571,18573,18575,18577,18579],{"class":59,"line":2864},[57,18572,2285],{"class":140},[57,18574,1712],{"class":136},[57,18576,1236],{"class":140},[57,18578,1712],{"class":136},[57,18580,17766],{"class":140},[57,18582,18583,18585,18587],{"class":59,"line":2872},[57,18584,17771],{"class":140},[57,18586,17774],{"class":70},[57,18588,17777],{"class":140},[57,18590,18591,18593,18595],{"class":59,"line":2877},[57,18592,16867],{"class":140},[57,18594,17784],{"class":70},[57,18596,17787],{"class":140},[57,18598,18599,18601,18603,18605],{"class":59,"line":2883},[57,18600,1833],{"class":140},[57,18602,1459],{"class":136},[57,18604,17796],{"class":74},[57,18606,1576],{"class":140},[57,18608,18609,18611],{"class":59,"line":2889},[57,18610,15010],{"class":136},[57,18612,17805],{"class":140},[57,18614,18615,18617,18619,18621,18623],{"class":59,"line":2894},[57,18616,2285],{"class":140},[57,18618,1712],{"class":136},[57,18620,17814],{"class":140},[57,18622,1712],{"class":136},[57,18624,17819],{"class":140},[57,18626,18627],{"class":59,"line":8221},[57,18628,17824],{"class":140},[57,18630,18631,18633,18635],{"class":59,"line":8245},[57,18632,17829],{"class":140},[57,18634,17774],{"class":70},[57,18636,17834],{"class":140},[57,18638,18639,18641],{"class":59,"line":8250},[57,18640,17839],{"class":70},[57,18642,17842],{"class":140},[57,18644,18645],{"class":59,"line":8256},[57,18646,1847],{"class":140},[365,18648,18650],{"id":18649},"_82对象的初始化清理","8.2对象的初始化清理",[1422,18652,18653,18656],{},[380,18654,18655],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[380,18657,18658],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[394,18660,18662],{"id":18661},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,18664,18665,18666,18669],{},"对象的",[33,18667,18668],{},"初始化和清理","也是两个非常重要的安全问题",[14,18671,18672],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,18674,18675],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,18677,18678,18679,18682,18683,18686],{},"c++利用了",[33,18680,18681],{},"构造函数","和",[33,18684,18685],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,18688,18689,18690],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[33,18691,18692],{},"我们不提供构造和析构，编译器会提供",[14,18694,18695],{},[33,18696,18697],{},"编译器提供的构造函数和析构函数是空实现。",[1422,18699,18700,18703],{},[380,18701,18702],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[380,18704,18705,18706,18709],{},"析构函数：主要作用在于对象",[33,18707,18708],{},"销毁前","系统自动调用，执行一些清理工作。",[14,18711,18712,18715],{},[33,18713,18714],{},"构造函数语法：",[28,18716,18717],{},"类名(){}",[377,18719,18720,18723,18726,18729,18732],{},[380,18721,18722],{},"构造函数，没有返回值也不写void",[380,18724,18725],{},"函数名称与类名相同",[380,18727,18728],{},"构造函数可以有参数，因此可以发生重载",[380,18730,18731],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[380,18733,18734,18735,845],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[28,18736,18737],{},"Person(){}",[14,18739,18740,14067,18743],{},[33,18741,18742],{},"析构函数语法：",[28,18744,18745],{},"~类名(){}",[377,18747,18748,18751,18754,18760],{},[380,18749,18750],{},"析构函数，没有返回值也不写void",[380,18752,18753],{},"函数名称与类名相同,在名称前加上符号  ~",[380,18755,18756,18757],{},"析构函数不可以有参数，因此",[33,18758,18759],{},"不可以发生重载",[380,18761,18762],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[49,18764,18766],{"className":415,"code":18765,"language":417,"meta":46,"style":46},"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",[28,18767,18768,18774,18778,18782,18787,18794,18798,18811,18815,18820,18827,18831,18844,18848,18852,18856,18860,18868,18872,18880,18884,18888,18896,18900,18905,18909,18916,18920,18933,18937,18945],{"__ignoreMap":46},[57,18769,18770,18772],{"class":59,"line":60},[57,18771,14966],{"class":136},[57,18773,15443],{"class":70},[57,18775,18776],{"class":59,"line":67},[57,18777,1828],{"class":140},[57,18779,18780],{"class":59,"line":144},[57,18781,14988],{"class":136},[57,18783,18784],{"class":59,"line":150},[57,18785,18786],{"class":63},"    \u002F\u002F构造函数\n",[57,18788,18789,18792],{"class":59,"line":162},[57,18790,18791],{"class":70},"    Person",[57,18793,2249],{"class":140},[57,18795,18796],{"class":59,"line":180},[57,18797,2303],{"class":140},[57,18799,18800,18802,18804,18807,18809],{"class":59,"line":186},[57,18801,9942],{"class":140},[57,18803,1459],{"class":136},[57,18805,18806],{"class":74}," \"Person的构造函数调用\"",[57,18808,1727],{"class":136},[57,18810,9113],{"class":140},[57,18812,18813],{"class":59,"line":197},[57,18814,2460],{"class":140},[57,18816,18817],{"class":59,"line":241},[57,18818,18819],{"class":63},"    \u002F\u002F析构函数\n",[57,18821,18822,18825],{"class":59,"line":249},[57,18823,18824],{"class":70},"    ~Person",[57,18826,2249],{"class":140},[57,18828,18829],{"class":59,"line":262},[57,18830,2303],{"class":140},[57,18832,18833,18835,18837,18840,18842],{"class":59,"line":281},[57,18834,9942],{"class":140},[57,18836,1459],{"class":136},[57,18838,18839],{"class":74}," \"Person的析构函数调用\"",[57,18841,1727],{"class":136},[57,18843,9113],{"class":140},[57,18845,18846],{"class":59,"line":287},[57,18847,2460],{"class":140},[57,18849,18850],{"class":59,"line":298},[57,18851,2673],{"emptyLinePlaceholder":350},[57,18853,18854],{"class":59,"line":311},[57,18855,4268],{"class":140},[57,18857,18858],{"class":59,"line":322},[57,18859,2673],{"emptyLinePlaceholder":350},[57,18861,18862,18864,18866],{"class":59,"line":1929},[57,18863,5637],{"class":136},[57,18865,5861],{"class":70},[57,18867,2249],{"class":140},[57,18869,18870],{"class":59,"line":1950},[57,18871,1828],{"class":140},[57,18873,18874,18877],{"class":59,"line":1955},[57,18875,18876],{"class":140},"    Person p;",[57,18878,18879],{"class":63},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[57,18881,18882],{"class":59,"line":1969},[57,18883,1847],{"class":140},[57,18885,18886],{"class":59,"line":1974},[57,18887,2673],{"emptyLinePlaceholder":350},[57,18889,18890,18892,18894],{"class":59,"line":2001},[57,18891,429],{"class":136},[57,18893,2246],{"class":70},[57,18895,11126],{"class":140},[57,18897,18898],{"class":59,"line":2006},[57,18899,13483],{"class":140},[57,18901,18902],{"class":59,"line":2023},[57,18903,18904],{"class":63},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[57,18906,18907],{"class":59,"line":2028},[57,18908,2673],{"emptyLinePlaceholder":350},[57,18910,18911,18913],{"class":59,"line":2033},[57,18912,18876],{"class":140},[57,18914,18915],{"class":63},"\u002F\u002F只有构造函数\n",[57,18917,18918],{"class":59,"line":2038},[57,18919,2673],{"emptyLinePlaceholder":350},[57,18921,18922,18924,18926,18928,18930],{"class":59,"line":2052},[57,18923,2576],{"class":70},[57,18925,168],{"class":140},[57,18927,2581],{"class":74},[57,18929,6239],{"class":140},[57,18931,18932],{"class":63},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[57,18934,18935],{"class":59,"line":2057},[57,18936,2673],{"emptyLinePlaceholder":350},[57,18938,18939,18941,18943],{"class":59,"line":2850},[57,18940,4363],{"class":136},[57,18942,4366],{"class":81},[57,18944,1576],{"class":140},[57,18946,18947],{"class":59,"line":2864},[57,18948,1847],{"class":140},[14,18950,18951],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[394,18953,18955],{"id":18954},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,18957,18958],{},"两种分类方式：",[14,18960,18961],{},"​\t按参数分为： 有参构造和无参构造",[14,18963,18964],{},"​\t按类型分为： 普通构造和拷贝构造",[14,18966,18967],{},"三种调用方式：",[14,18969,18970],{},"​\t括号法",[14,18972,18973],{},"​\t显示法",[14,18975,18976],{},"​\t隐式转换法",[49,18978,18980],{"className":415,"code":18979,"language":417,"meta":46,"style":46},"#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",[28,18981,18982,18988,18998,19003,19008,19013,19018,19022,19030,19034,19038,19042,19048,19052,19065,19069,19081,19085,19094,19107,19111,19115,19121,19125,19138,19142,19147,19163,19167,19172,19181,19194,19198,19204,19208,19213,19221,19225,19230,19234,19242,19246,19251,19256,19261,19266,19271,19275,19280,19285,19290,19295,19299,19304,19309,19325,19337,19342,19346,19351,19356,19361,19365,19370,19384,19397,19401,19409,19413,19419,19425,19433],{"__ignoreMap":46},[57,18983,18984,18986],{"class":59,"line":60},[57,18985,2223],{"class":136},[57,18987,2226],{"class":74},[57,18989,18990,18992,18994,18996],{"class":59,"line":67},[57,18991,2231],{"class":136},[57,18993,2234],{"class":136},[57,18995,2237],{"class":70},[57,18997,1576],{"class":140},[57,18999,19000],{"class":59,"line":144},[57,19001,19002],{"class":63},"\u002F\u002F1.构造函数的分类及调用\n",[57,19004,19005],{"class":59,"line":150},[57,19006,19007],{"class":63},"\u002F\u002F分类\n",[57,19009,19010],{"class":59,"line":162},[57,19011,19012],{"class":63},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[57,19014,19015],{"class":59,"line":180},[57,19016,19017],{"class":63},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[57,19019,19020],{"class":59,"line":186},[57,19021,2673],{"emptyLinePlaceholder":350},[57,19023,19024,19026,19028],{"class":59,"line":197},[57,19025,14966],{"class":136},[57,19027,15841],{"class":70},[57,19029,2947],{"class":140},[57,19031,19032],{"class":59,"line":241},[57,19033,1828],{"class":140},[57,19035,19036],{"class":59,"line":249},[57,19037,14988],{"class":136},[57,19039,19040],{"class":59,"line":262},[57,19041,18786],{"class":63},[57,19043,19044,19046],{"class":59,"line":281},[57,19045,18791],{"class":70},[57,19047,2249],{"class":140},[57,19049,19050],{"class":59,"line":287},[57,19051,2303],{"class":140},[57,19053,19054,19056,19058,19061,19063],{"class":59,"line":298},[57,19055,3724],{"class":140},[57,19057,1459],{"class":136},[57,19059,19060],{"class":74},"\"Person构造函数无参构造\"",[57,19062,1459],{"class":136},[57,19064,1481],{"class":140},[57,19066,19067],{"class":59,"line":311},[57,19068,2460],{"class":140},[57,19070,19071,19073,19075,19077,19079],{"class":59,"line":322},[57,19072,18791],{"class":70},[57,19074,168],{"class":140},[57,19076,429],{"class":136},[57,19078,1681],{"class":5489},[57,19080,238],{"class":140},[57,19082,19083],{"class":59,"line":1929},[57,19084,2303],{"class":140},[57,19086,19087,19090,19092],{"class":59,"line":1950},[57,19088,19089],{"class":140},"        age",[57,19091,156],{"class":136},[57,19093,6470],{"class":140},[57,19095,19096,19098,19100,19103,19105],{"class":59,"line":1955},[57,19097,3724],{"class":140},[57,19099,1459],{"class":136},[57,19101,19102],{"class":74},"\"Person构造函数有参构造\"",[57,19104,1459],{"class":136},[57,19106,1481],{"class":140},[57,19108,19109],{"class":59,"line":1969},[57,19110,2460],{"class":140},[57,19112,19113],{"class":59,"line":1974},[57,19114,18819],{"class":63},[57,19116,19117,19119],{"class":59,"line":2001},[57,19118,18824],{"class":70},[57,19120,2249],{"class":140},[57,19122,19123],{"class":59,"line":2006},[57,19124,2303],{"class":140},[57,19126,19127,19129,19131,19134,19136],{"class":59,"line":2023},[57,19128,3724],{"class":140},[57,19130,1459],{"class":136},[57,19132,19133],{"class":74},"\"Person析构函数被调用\"",[57,19135,1459],{"class":136},[57,19137,1481],{"class":140},[57,19139,19140],{"class":59,"line":2028},[57,19141,2460],{"class":140},[57,19143,19144],{"class":59,"line":2033},[57,19145,19146],{"class":63},"    \u002F\u002F拷贝构造函数\n",[57,19148,19149,19151,19153,19155,19157,19159,19161],{"class":59,"line":2038},[57,19150,18791],{"class":70},[57,19152,168],{"class":140},[57,19154,7065],{"class":136},[57,19156,15841],{"class":70},[57,19158,10857],{"class":136},[57,19160,14],{"class":5489},[57,19162,238],{"class":140},[57,19164,19165],{"class":59,"line":2052},[57,19166,2303],{"class":140},[57,19168,19169],{"class":59,"line":2057},[57,19170,19171],{"class":63},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[57,19173,19174,19176,19178],{"class":59,"line":2850},[57,19175,19089],{"class":140},[57,19177,156],{"class":136},[57,19179,19180],{"class":140},"p.age;\n",[57,19182,19183,19185,19187,19190,19192],{"class":59,"line":2864},[57,19184,3724],{"class":140},[57,19186,1459],{"class":136},[57,19188,19189],{"class":74},"\"Person拷贝构造函数被调用\"",[57,19191,1459],{"class":136},[57,19193,1481],{"class":140},[57,19195,19196],{"class":59,"line":2872},[57,19197,2460],{"class":140},[57,19199,19200,19202],{"class":59,"line":2877},[57,19201,2258],{"class":136},[57,19203,8070],{"class":140},[57,19205,19206],{"class":59,"line":2883},[57,19207,4268],{"class":140},[57,19209,19210],{"class":59,"line":2889},[57,19211,19212],{"class":63},"\u002F\u002F调用\n",[57,19214,19215,19217,19219],{"class":59,"line":2894},[57,19216,5637],{"class":136},[57,19218,5861],{"class":70},[57,19220,2249],{"class":140},[57,19222,19223],{"class":59,"line":8221},[57,19224,1828],{"class":140},[57,19226,19227],{"class":59,"line":8245},[57,19228,19229],{"class":63},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[57,19231,19232],{"class":59,"line":8250},[57,19233,1847],{"class":140},[57,19235,19236,19238,19240],{"class":59,"line":8256},[57,19237,5637],{"class":136},[57,19239,5930],{"class":70},[57,19241,2249],{"class":140},[57,19243,19244],{"class":59,"line":8283},[57,19245,1828],{"class":140},[57,19247,19248],{"class":59,"line":8288},[57,19249,19250],{"class":63},"    \u002F\u002F1.括号法\n",[57,19252,19253],{"class":59,"line":8294},[57,19254,19255],{"class":63},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[57,19257,19258],{"class":59,"line":8306},[57,19259,19260],{"class":63},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[57,19262,19263],{"class":59,"line":8318},[57,19264,19265],{"class":63},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[57,19267,19268],{"class":59,"line":8330},[57,19269,19270],{"class":63},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[57,19272,19273],{"class":59,"line":9989},[57,19274,2673],{"emptyLinePlaceholder":350},[57,19276,19277],{"class":59,"line":10014},[57,19278,19279],{"class":63},"    \u002F\u002F注意事项\n",[57,19281,19282],{"class":59,"line":10037},[57,19283,19284],{"class":63},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[57,19286,19287],{"class":59,"line":10061},[57,19288,19289],{"class":63},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[57,19291,19292],{"class":59,"line":10066},[57,19293,19294],{"class":63},"    \u002F\u002F Person p4();\n",[57,19296,19297],{"class":59,"line":10071},[57,19298,2673],{"emptyLinePlaceholder":350},[57,19300,19301],{"class":59,"line":10076},[57,19302,19303],{"class":63},"    \u002F\u002F2.显示法\n",[57,19305,19306],{"class":59,"line":10085},[57,19307,19308],{"class":140},"    Person p1;\n",[57,19310,19311,19314,19316,19319,19321,19323],{"class":59,"line":10090},[57,19312,19313],{"class":140},"    Person p2",[57,19315,156],{"class":136},[57,19317,19318],{"class":70},"Person",[57,19320,168],{"class":140},[57,19322,862],{"class":81},[57,19324,2992],{"class":140},[57,19326,19327,19330,19332,19334],{"class":59,"line":10096},[57,19328,19329],{"class":140},"    Person p3",[57,19331,156],{"class":136},[57,19333,19318],{"class":70},[57,19335,19336],{"class":140},"(p2);\n",[57,19338,19339],{"class":59,"line":10117},[57,19340,19341],{"class":63},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[57,19343,19344],{"class":59,"line":10123},[57,19345,2673],{"emptyLinePlaceholder":350},[57,19347,19348],{"class":59,"line":10137},[57,19349,19350],{"class":63},"    \u002F\u002F 注意事项2\n",[57,19352,19353],{"class":59,"line":10143},[57,19354,19355],{"class":63},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[57,19357,19358],{"class":59,"line":10170},[57,19359,19360],{"class":63},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[57,19362,19363],{"class":59,"line":10179},[57,19364,2673],{"emptyLinePlaceholder":350},[57,19366,19367],{"class":59,"line":10185},[57,19368,19369],{"class":63},"    \u002F\u002F3.隐士转换法\n",[57,19371,19372,19375,19377,19379,19381],{"class":59,"line":10193},[57,19373,19374],{"class":140},"    Person p4",[57,19376,156],{"class":136},[57,19378,862],{"class":81},[57,19380,478],{"class":140},[57,19382,19383],{"class":63},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[57,19385,19386,19389,19391,19394],{"class":59,"line":10198},[57,19387,19388],{"class":140},"    Person p5",[57,19390,156],{"class":136},[57,19392,19393],{"class":140},"p4;",[57,19395,19396],{"class":63}," \u002F\u002F 这里会调用拷贝构造函数\n",[57,19398,19399],{"class":59,"line":16876},[57,19400,1847],{"class":140},[57,19402,19403,19405,19407],{"class":59,"line":16882},[57,19404,429],{"class":136},[57,19406,2246],{"class":70},[57,19408,2249],{"class":140},[57,19410,19411],{"class":59,"line":16905},[57,19412,1828],{"class":140},[57,19414,19415,19417],{"class":59,"line":16911},[57,19416,5906],{"class":70},[57,19418,5909],{"class":140},[57,19420,19421,19423],{"class":59,"line":16934},[57,19422,5975],{"class":70},[57,19424,5909],{"class":140},[57,19426,19427,19429,19431],{"class":59,"line":16948},[57,19428,4363],{"class":136},[57,19430,4366],{"class":81},[57,19432,1576],{"class":140},[57,19434,19435],{"class":59,"line":16968},[57,19436,1847],{"class":140},[14,19438,19439,19442],{},[33,19440,19441],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[394,19444,19446],{"id":19445},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,19448,19449],{},"C++中拷贝构造函数调用时机通常有三种情况",[1422,19451,19452,19455,19458],{},[380,19453,19454],{},"使用一个已经创建完毕的对象来初始化一个新对象",[380,19456,19457],{},"值传递的方式给函数参数传值",[380,19459,19460],{},"以值方式返回局部对象",[49,19462,19464],{"className":415,"code":19463,"language":417,"meta":46,"style":46},"#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",[28,19465,19466,19472,19482,19486,19491,19495,19500,19505,19510,19516,19520,19524,19530,19534,19547,19551,19556,19568,19572,19580,19593,19597,19601,19617,19621,19630,19643,19647,19653,19657,19669,19673,19679,19683,19687,19695,19699,19712,19720,19738,19742,19747,19752,19767,19771,19784,19788,19796,19800,19804,19812,19816,19821,19830,19834,19838,19863,19873,19877,19885,19889,19900,19925,19929,19933,19937,19945,19949,19954,19959,19966,19971,19976,19981,19986,19990,19995,19999,20004,20008,20013,20018,20022,20026,20031,20036,20044],{"__ignoreMap":46},[57,19467,19468,19470],{"class":59,"line":60},[57,19469,2223],{"class":136},[57,19471,2226],{"class":74},[57,19473,19474,19476,19478,19480],{"class":59,"line":67},[57,19475,2231],{"class":136},[57,19477,2234],{"class":136},[57,19479,2237],{"class":70},[57,19481,1576],{"class":140},[57,19483,19484],{"class":59,"line":144},[57,19485,2673],{"emptyLinePlaceholder":350},[57,19487,19488],{"class":59,"line":150},[57,19489,19490],{"class":63},"\u002F\u002F拷贝构造函数调用时机\n",[57,19492,19493],{"class":59,"line":162},[57,19494,2673],{"emptyLinePlaceholder":350},[57,19496,19497],{"class":59,"line":180},[57,19498,19499],{"class":63},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[57,19501,19502],{"class":59,"line":186},[57,19503,19504],{"class":63},"\u002F\u002F2.值传递的方式给函数参数传值\n",[57,19506,19507],{"class":59,"line":197},[57,19508,19509],{"class":63},"\u002F\u002F3.以值方式返回局部对象\n",[57,19511,19512,19514],{"class":59,"line":241},[57,19513,14966],{"class":136},[57,19515,15443],{"class":70},[57,19517,19518],{"class":59,"line":249},[57,19519,1828],{"class":140},[57,19521,19522],{"class":59,"line":262},[57,19523,14988],{"class":136},[57,19525,19526,19528],{"class":59,"line":281},[57,19527,18791],{"class":70},[57,19529,2249],{"class":140},[57,19531,19532],{"class":59,"line":287},[57,19533,2303],{"class":140},[57,19535,19536,19538,19540,19543,19545],{"class":59,"line":298},[57,19537,9942],{"class":140},[57,19539,1459],{"class":136},[57,19541,19542],{"class":74}," \"Person的默认构造函数调用\"",[57,19544,1727],{"class":136},[57,19546,9113],{"class":140},[57,19548,19549],{"class":59,"line":311},[57,19550,2460],{"class":140},[57,19552,19553],{"class":59,"line":322},[57,19554,19555],{"class":63},"    \u002F\u002F有参构造\n",[57,19557,19558,19560,19562,19564,19566],{"class":59,"line":1929},[57,19559,18791],{"class":70},[57,19561,168],{"class":140},[57,19563,429],{"class":136},[57,19565,15961],{"class":5489},[57,19567,238],{"class":140},[57,19569,19570],{"class":59,"line":1950},[57,19571,2303],{"class":140},[57,19573,19574,19576,19578],{"class":59,"line":1955},[57,19575,16015],{"class":140},[57,19577,156],{"class":136},[57,19579,8070],{"class":140},[57,19581,19582,19584,19586,19589,19591],{"class":59,"line":1969},[57,19583,9942],{"class":140},[57,19585,1459],{"class":136},[57,19587,19588],{"class":74}," \"Person的有参构造函数调用\"",[57,19590,1727],{"class":136},[57,19592,9113],{"class":140},[57,19594,19595],{"class":59,"line":1974},[57,19596,2460],{"class":140},[57,19598,19599],{"class":59,"line":2001},[57,19600,19146],{"class":63},[57,19602,19603,19605,19607,19609,19611,19613,19615],{"class":59,"line":2006},[57,19604,18791],{"class":70},[57,19606,168],{"class":140},[57,19608,7065],{"class":136},[57,19610,15841],{"class":70},[57,19612,10857],{"class":136},[57,19614,14],{"class":5489},[57,19616,238],{"class":140},[57,19618,19619],{"class":59,"line":2023},[57,19620,2303],{"class":140},[57,19622,19623,19625,19627],{"class":59,"line":2028},[57,19624,16015],{"class":140},[57,19626,156],{"class":136},[57,19628,19629],{"class":140}," p.m_Age;\n",[57,19631,19632,19634,19636,19639,19641],{"class":59,"line":2033},[57,19633,9942],{"class":140},[57,19635,1459],{"class":136},[57,19637,19638],{"class":74}," \"Person的拷贝构造函数调用\"",[57,19640,1727],{"class":136},[57,19642,9113],{"class":140},[57,19644,19645],{"class":59,"line":2038},[57,19646,2460],{"class":140},[57,19648,19649,19651],{"class":59,"line":2052},[57,19650,18824],{"class":70},[57,19652,2249],{"class":140},[57,19654,19655],{"class":59,"line":2057},[57,19656,2303],{"class":140},[57,19658,19659,19661,19663,19665,19667],{"class":59,"line":2850},[57,19660,9942],{"class":140},[57,19662,1459],{"class":136},[57,19664,18839],{"class":74},[57,19666,1727],{"class":136},[57,19668,9113],{"class":140},[57,19670,19671],{"class":59,"line":2864},[57,19672,2460],{"class":140},[57,19674,19675,19677],{"class":59,"line":2872},[57,19676,2258],{"class":136},[57,19678,15938],{"class":140},[57,19680,19681],{"class":59,"line":2877},[57,19682,4268],{"class":140},[57,19684,19685],{"class":59,"line":2883},[57,19686,19499],{"class":63},[57,19688,19689,19691,19693],{"class":59,"line":2889},[57,19690,5637],{"class":136},[57,19692,5861],{"class":70},[57,19694,2249],{"class":140},[57,19696,19697],{"class":59,"line":2894},[57,19698,1828],{"class":140},[57,19700,19701,19704,19706,19708,19710],{"class":59,"line":8221},[57,19702,19703],{"class":140},"    Person ",[57,19705,7403],{"class":70},[57,19707,168],{"class":140},[57,19709,1116],{"class":81},[57,19711,2992],{"class":140},[57,19713,19714,19716,19718],{"class":59,"line":8245},[57,19715,19703],{"class":140},[57,19717,7306],{"class":70},[57,19719,17787],{"class":140},[57,19721,19722,19724,19726,19729,19731,19734,19736],{"class":59,"line":8250},[57,19723,1833],{"class":140},[57,19725,1459],{"class":136},[57,19727,19728],{"class":74},"\"P2的年龄为：\"",[57,19730,1459],{"class":136},[57,19732,19733],{"class":140},"p2.m_Age",[57,19735,1459],{"class":136},[57,19737,1481],{"class":140},[57,19739,19740],{"class":59,"line":8256},[57,19741,1847],{"class":140},[57,19743,19744],{"class":59,"line":8283},[57,19745,19746],{"class":63},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[57,19748,19749],{"class":59,"line":8288},[57,19750,19751],{"class":63},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[57,19753,19754,19756,19759,19761,19763,19765],{"class":59,"line":8294},[57,19755,5637],{"class":136},[57,19757,19758],{"class":70}," doWork",[57,19760,168],{"class":140},[57,19762,19318],{"class":70},[57,19764,7098],{"class":5489},[57,19766,238],{"class":140},[57,19768,19769],{"class":59,"line":8306},[57,19770,1828],{"class":140},[57,19772,19773,19775,19777,19780,19782],{"class":59,"line":8318},[57,19774,6802],{"class":140},[57,19776,1459],{"class":136},[57,19778,19779],{"class":74}," \"doWork函数调用\"",[57,19781,1727],{"class":136},[57,19783,9113],{"class":140},[57,19785,19786],{"class":59,"line":8330},[57,19787,1847],{"class":140},[57,19789,19790,19792,19794],{"class":59,"line":9989},[57,19791,5637],{"class":136},[57,19793,5930],{"class":70},[57,19795,2249],{"class":140},[57,19797,19798],{"class":59,"line":10014},[57,19799,1828],{"class":140},[57,19801,19802],{"class":59,"line":10037},[57,19803,15585],{"class":140},[57,19805,19806,19809],{"class":59,"line":10061},[57,19807,19808],{"class":70},"    doWork",[57,19810,19811],{"class":140},"(p);\n",[57,19813,19814],{"class":59,"line":10066},[57,19815,1847],{"class":140},[57,19817,19818],{"class":59,"line":10071},[57,19819,19820],{"class":63},"\u002F\u002F 3.以值方式返回局部对象\n",[57,19822,19823,19825,19828],{"class":59,"line":10076},[57,19824,19318],{"class":70},[57,19826,19827],{"class":70}," doWork2",[57,19829,2249],{"class":140},[57,19831,19832],{"class":59,"line":10085},[57,19833,1828],{"class":140},[57,19835,19836],{"class":59,"line":10090},[57,19837,19308],{"class":140},[57,19839,19840,19842,19844,19846,19848,19850,19852,19854,19856,19858,19860],{"class":59,"line":10096},[57,19841,1833],{"class":140},[57,19843,1459],{"class":136},[57,19845,168],{"class":140},[57,19847,429],{"class":136},[57,19849,6791],{"class":136},[57,19851,845],{"class":140},[57,19853,770],{"class":136},[57,19855,7403],{"class":140},[57,19857,1459],{"class":136},[57,19859,1524],{"class":140},[57,19861,19862],{"class":63},"\u002F\u002F打印p1的地址\n",[57,19864,19865,19867,19870],{"class":59,"line":10117},[57,19866,4363],{"class":136},[57,19868,19869],{"class":140}," p1;",[57,19871,19872],{"class":63},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[57,19874,19875],{"class":59,"line":10123},[57,19876,1847],{"class":140},[57,19878,19879,19881,19883],{"class":59,"line":10137},[57,19880,5637],{"class":136},[57,19882,6002],{"class":70},[57,19884,2249],{"class":140},[57,19886,19887],{"class":59,"line":10143},[57,19888,1828],{"class":140},[57,19890,19891,19894,19896,19898],{"class":59,"line":10170},[57,19892,19893],{"class":140},"    Person p ",[57,19895,156],{"class":136},[57,19897,19827],{"class":70},[57,19899,5909],{"class":140},[57,19901,19902,19904,19906,19908,19910,19912,19914,19916,19918,19920,19922],{"class":59,"line":10179},[57,19903,1833],{"class":140},[57,19905,1459],{"class":136},[57,19907,168],{"class":140},[57,19909,429],{"class":136},[57,19911,6791],{"class":136},[57,19913,845],{"class":140},[57,19915,770],{"class":136},[57,19917,14],{"class":140},[57,19919,1459],{"class":136},[57,19921,1524],{"class":140},[57,19923,19924],{"class":63},"\u002F\u002F打印p的地址\n",[57,19926,19927],{"class":59,"line":10185},[57,19928,1847],{"class":140},[57,19930,19931],{"class":59,"line":10193},[57,19932,2673],{"emptyLinePlaceholder":350},[57,19934,19935],{"class":59,"line":10198},[57,19936,2673],{"emptyLinePlaceholder":350},[57,19938,19939,19941,19943],{"class":59,"line":16876},[57,19940,429],{"class":136},[57,19942,2246],{"class":70},[57,19944,2249],{"class":140},[57,19946,19947],{"class":59,"line":16882},[57,19948,1828],{"class":140},[57,19950,19951],{"class":59,"line":16905},[57,19952,19953],{"class":63},"    \u002F\u002F test01();\n",[57,19955,19956],{"class":59,"line":16911},[57,19957,19958],{"class":63},"    \u002F\u002F test02();\n",[57,19960,19961,19964],{"class":59,"line":16934},[57,19962,19963],{"class":70},"    test03",[57,19965,5909],{"class":140},[57,19967,19968],{"class":59,"line":16948},[57,19969,19970],{"class":63},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[57,19972,19973],{"class":59,"line":16968},[57,19974,19975],{"class":63},"\u002F\u002F 输出结果如下：\n",[57,19977,19978],{"class":59,"line":16974},[57,19979,19980],{"class":63},"\u002F\u002F Person的默认构造函数调用\n",[57,19982,19983],{"class":59,"line":16985},[57,19984,19985],{"class":63},"\u002F\u002F 0x7fffffffceec\n",[57,19987,19988],{"class":59,"line":17008},[57,19989,19985],{"class":63},[57,19991,19992],{"class":59,"line":17030},[57,19993,19994],{"class":63},"\u002F\u002F Person的析构函数调用\n",[57,19996,19997],{"class":59,"line":17035},[57,19998,2673],{"emptyLinePlaceholder":350},[57,20000,20001],{"class":59,"line":17041},[57,20002,20003],{"class":63},"\u002F\u002F 之前的输出结果如下：\n",[57,20005,20006],{"class":59,"line":17055},[57,20007,19980],{"class":63},[57,20009,20010],{"class":59,"line":17068},[57,20011,20012],{"class":63},"\u002F\u002F 地址\n",[57,20014,20015],{"class":59,"line":17073},[57,20016,20017],{"class":63},"\u002F\u002F Person的拷贝构造函数调用\n",[57,20019,20020],{"class":59,"line":17087},[57,20021,19994],{"class":63},[57,20023,20024],{"class":59,"line":17092},[57,20025,20012],{"class":63},[57,20027,20028],{"class":59,"line":17098},[57,20029,20030],{"class":63},"\u002F\u002F (这两次输出的地址也是不同的) \n",[57,20032,20033],{"class":59,"line":17103},[57,20034,20035],{"class":63},"\u002F\u002F Person的析构函数调用     \n",[57,20037,20038,20040,20042],{"class":59,"line":17117},[57,20039,4363],{"class":136},[57,20041,4366],{"class":81},[57,20043,1576],{"class":140},[57,20045,20046],{"class":59,"line":17122},[57,20047,1847],{"class":140},[14,20049,20050],{},"简化版理解",[49,20052,20054],{"className":415,"code":20053,"language":417,"meta":46,"style":46},"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",[28,20055,20056,20064,20068,20074,20087,20098,20102,20114,20127,20135,20139,20155,20168,20177,20181,20186,20192,20205,20209,20213,20220,20224,20228,20233,20241,20245,20261,20274,20287,20291,20296,20304,20308,20312,20317,20322,20338,20346,20353,20359,20363,20367,20372,20380,20384,20388,20411,20418,20422,20426,20434,20438,20448,20470,20474,20478,20482,20490,20494,20499,20504,20510,20514,20524,20528,20536],{"__ignoreMap":46},[57,20057,20058,20060,20062],{"class":59,"line":60},[57,20059,14966],{"class":136},[57,20061,15841],{"class":70},[57,20063,15844],{"class":140},[57,20065,20066],{"class":59,"line":67},[57,20067,14988],{"class":136},[57,20069,20070,20072],{"class":59,"line":144},[57,20071,18791],{"class":70},[57,20073,11126],{"class":140},[57,20075,20076,20078,20080,20083,20085],{"class":59,"line":150},[57,20077,9942],{"class":140},[57,20079,1459],{"class":136},[57,20081,20082],{"class":74}," \"无参构造函数!\"",[57,20084,1727],{"class":136},[57,20086,9113],{"class":140},[57,20088,20089,20092,20094,20096],{"class":59,"line":162},[57,20090,20091],{"class":140},"        mAge ",[57,20093,156],{"class":136},[57,20095,4366],{"class":81},[57,20097,1576],{"class":140},[57,20099,20100],{"class":59,"line":180},[57,20101,2460],{"class":140},[57,20103,20104,20106,20108,20110,20112],{"class":59,"line":186},[57,20105,18791],{"class":70},[57,20107,168],{"class":140},[57,20109,429],{"class":136},[57,20111,15961],{"class":5489},[57,20113,12715],{"class":140},[57,20115,20116,20118,20120,20123,20125],{"class":59,"line":197},[57,20117,9942],{"class":140},[57,20119,1459],{"class":136},[57,20121,20122],{"class":74}," \"有参构造函数!\"",[57,20124,1727],{"class":136},[57,20126,9113],{"class":140},[57,20128,20129,20131,20133],{"class":59,"line":241},[57,20130,20091],{"class":140},[57,20132,156],{"class":136},[57,20134,8070],{"class":140},[57,20136,20137],{"class":59,"line":249},[57,20138,2460],{"class":140},[57,20140,20141,20143,20145,20147,20149,20151,20153],{"class":59,"line":262},[57,20142,18791],{"class":70},[57,20144,168],{"class":140},[57,20146,7065],{"class":136},[57,20148,15841],{"class":70},[57,20150,770],{"class":136},[57,20152,7098],{"class":5489},[57,20154,12715],{"class":140},[57,20156,20157,20159,20161,20164,20166],{"class":59,"line":281},[57,20158,9942],{"class":140},[57,20160,1459],{"class":136},[57,20162,20163],{"class":74}," \"拷贝构造函数!\"",[57,20165,1727],{"class":136},[57,20167,9113],{"class":140},[57,20169,20170,20172,20174],{"class":59,"line":287},[57,20171,20091],{"class":140},[57,20173,156],{"class":136},[57,20175,20176],{"class":140}," p.mAge;\n",[57,20178,20179],{"class":59,"line":298},[57,20180,2460],{"class":140},[57,20182,20183],{"class":59,"line":311},[57,20184,20185],{"class":63},"    \u002F\u002F析构函数在释放内存之前调用\n",[57,20187,20188,20190],{"class":59,"line":322},[57,20189,18824],{"class":70},[57,20191,11126],{"class":140},[57,20193,20194,20196,20198,20201,20203],{"class":59,"line":1929},[57,20195,9942],{"class":140},[57,20197,1459],{"class":136},[57,20199,20200],{"class":74}," \"析构函数!\"",[57,20202,1727],{"class":136},[57,20204,9113],{"class":140},[57,20206,20207],{"class":59,"line":1950},[57,20208,2460],{"class":140},[57,20210,20211],{"class":59,"line":1955},[57,20212,14988],{"class":136},[57,20214,20215,20217],{"class":59,"line":1969},[57,20216,2258],{"class":136},[57,20218,20219],{"class":140}," mAge;\n",[57,20221,20222],{"class":59,"line":1974},[57,20223,4268],{"class":140},[57,20225,20226],{"class":59,"line":2001},[57,20227,2673],{"emptyLinePlaceholder":350},[57,20229,20230],{"class":59,"line":2006},[57,20231,20232],{"class":63},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[57,20234,20235,20237,20239],{"class":59,"line":2023},[57,20236,5637],{"class":136},[57,20238,5861],{"class":70},[57,20240,11126],{"class":140},[57,20242,20243],{"class":59,"line":2028},[57,20244,2673],{"emptyLinePlaceholder":350},[57,20246,20247,20249,20252,20254,20256,20258],{"class":59,"line":2033},[57,20248,19703],{"class":140},[57,20250,20251],{"class":70},"man",[57,20253,168],{"class":140},[57,20255,728],{"class":81},[57,20257,6239],{"class":140},[57,20259,20260],{"class":63}," \u002F\u002Fp对象已经创建完毕\n",[57,20262,20263,20265,20268,20271],{"class":59,"line":2038},[57,20264,19703],{"class":140},[57,20266,20267],{"class":70},"newman",[57,20269,20270],{"class":140},"(man);",[57,20272,20273],{"class":63}," \u002F\u002F调用拷贝构造函数\n",[57,20275,20276,20279,20281,20284],{"class":59,"line":2052},[57,20277,20278],{"class":140},"    Person newman2 ",[57,20280,156],{"class":136},[57,20282,20283],{"class":140}," man;",[57,20285,20286],{"class":63}," \u002F\u002F拷贝构造\n",[57,20288,20289],{"class":59,"line":2057},[57,20290,2673],{"emptyLinePlaceholder":350},[57,20292,20293],{"class":59,"line":2850},[57,20294,20295],{"class":63},"    \u002F\u002FPerson newman3;\n",[57,20297,20298,20301],{"class":59,"line":2864},[57,20299,20300],{"class":63},"    \u002F\u002Fnewman3 = man;",[57,20302,20303],{"class":63}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[57,20305,20306],{"class":59,"line":2872},[57,20307,1847],{"class":140},[57,20309,20310],{"class":59,"line":2877},[57,20311,2673],{"emptyLinePlaceholder":350},[57,20313,20314],{"class":59,"line":2883},[57,20315,20316],{"class":63},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[57,20318,20319],{"class":59,"line":2889},[57,20320,20321],{"class":63},"\u002F\u002F相当于Person p1 = p;\n",[57,20323,20324,20326,20328,20330,20332,20335],{"class":59,"line":2894},[57,20325,5637],{"class":136},[57,20327,19758],{"class":70},[57,20329,168],{"class":140},[57,20331,19318],{"class":70},[57,20333,20334],{"class":5489}," p1",[57,20336,20337],{"class":140},") {}\n",[57,20339,20340,20342,20344],{"class":59,"line":8221},[57,20341,5637],{"class":136},[57,20343,5930],{"class":70},[57,20345,11126],{"class":140},[57,20347,20348,20350],{"class":59,"line":8245},[57,20349,18876],{"class":140},[57,20351,20352],{"class":63}," \u002F\u002F无参构造函数\n",[57,20354,20355,20357],{"class":59,"line":8250},[57,20356,19808],{"class":70},[57,20358,19811],{"class":140},[57,20360,20361],{"class":59,"line":8256},[57,20362,1847],{"class":140},[57,20364,20365],{"class":59,"line":8283},[57,20366,2673],{"emptyLinePlaceholder":350},[57,20368,20369],{"class":59,"line":8288},[57,20370,20371],{"class":63},"\u002F\u002F3. 以值方式返回局部对象\n",[57,20373,20374,20376,20378],{"class":59,"line":8294},[57,20375,19318],{"class":70},[57,20377,19827],{"class":70},[57,20379,2249],{"class":140},[57,20381,20382],{"class":59,"line":8306},[57,20383,1828],{"class":140},[57,20385,20386],{"class":59,"line":8318},[57,20387,19308],{"class":140},[57,20389,20390,20392,20394,20396,20398,20400,20402,20404,20407,20409],{"class":59,"line":8330},[57,20391,6802],{"class":140},[57,20393,1459],{"class":136},[57,20395,1934],{"class":140},[57,20397,429],{"class":136},[57,20399,6791],{"class":136},[57,20401,845],{"class":140},[57,20403,770],{"class":136},[57,20405,20406],{"class":140},"p1 ",[57,20408,1459],{"class":136},[57,20410,9113],{"class":140},[57,20412,20413,20415],{"class":59,"line":9989},[57,20414,4363],{"class":136},[57,20416,20417],{"class":140}," p1;\n",[57,20419,20420],{"class":59,"line":10014},[57,20421,1847],{"class":140},[57,20423,20424],{"class":59,"line":10037},[57,20425,2673],{"emptyLinePlaceholder":350},[57,20427,20428,20430,20432],{"class":59,"line":10061},[57,20429,5637],{"class":136},[57,20431,6002],{"class":70},[57,20433,2249],{"class":140},[57,20435,20436],{"class":59,"line":10066},[57,20437,1828],{"class":140},[57,20439,20440,20442,20444,20446],{"class":59,"line":10071},[57,20441,19893],{"class":140},[57,20443,156],{"class":136},[57,20445,19827],{"class":70},[57,20447,5909],{"class":140},[57,20449,20450,20452,20454,20456,20458,20460,20462,20464,20466,20468],{"class":59,"line":10076},[57,20451,6802],{"class":140},[57,20453,1459],{"class":136},[57,20455,1934],{"class":140},[57,20457,429],{"class":136},[57,20459,6791],{"class":136},[57,20461,845],{"class":140},[57,20463,770],{"class":136},[57,20465,11721],{"class":140},[57,20467,1459],{"class":136},[57,20469,9113],{"class":140},[57,20471,20472],{"class":59,"line":10085},[57,20473,1847],{"class":140},[57,20475,20476],{"class":59,"line":10090},[57,20477,2673],{"emptyLinePlaceholder":350},[57,20479,20480],{"class":59,"line":10096},[57,20481,2673],{"emptyLinePlaceholder":350},[57,20483,20484,20486,20488],{"class":59,"line":10117},[57,20485,429],{"class":136},[57,20487,2246],{"class":70},[57,20489,11126],{"class":140},[57,20491,20492],{"class":59,"line":10123},[57,20493,2673],{"emptyLinePlaceholder":350},[57,20495,20496],{"class":59,"line":10137},[57,20497,20498],{"class":63},"    \u002F\u002Ftest01();\n",[57,20500,20501],{"class":59,"line":10143},[57,20502,20503],{"class":63},"    \u002F\u002Ftest02();\n",[57,20505,20506,20508],{"class":59,"line":10170},[57,20507,19963],{"class":70},[57,20509,5909],{"class":140},[57,20511,20512],{"class":59,"line":10179},[57,20513,2673],{"emptyLinePlaceholder":350},[57,20515,20516,20518,20520,20522],{"class":59,"line":10185},[57,20517,2576],{"class":70},[57,20519,168],{"class":140},[57,20521,2581],{"class":74},[57,20523,2992],{"class":140},[57,20525,20526],{"class":59,"line":10193},[57,20527,2673],{"emptyLinePlaceholder":350},[57,20529,20530,20532,20534],{"class":59,"line":10198},[57,20531,4363],{"class":136},[57,20533,4366],{"class":81},[57,20535,1576],{"class":140},[57,20537,20538],{"class":59,"line":16876},[57,20539,1847],{"class":140},[394,20541,20543],{"id":20542},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,20545,20546],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,20548,20549],{},"1．默认构造函数(无参，函数体为空)",[14,20551,20552],{},"2．默认析构函数(无参，函数体为空)",[14,20554,20555],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,20557,20558],{},"构造函数调用规则如下：",[1422,20560,20561,20564],{},[380,20562,20563],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[380,20565,20566],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[49,20568,20570],{"className":415,"code":20569,"language":417,"meta":46,"style":46},"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",[28,20571,20572,20580,20584,20589,20595,20607,20611,20616,20628,20637,20649,20653,20657,20673,20682,20694,20698,20702,20708,20720,20724,20728,20734,20738,20742,20750,20754,20766,20771,20779,20783,20801,20805,20809,20817,20821,20826,20834,20849,20862,20866,20871,20878,20894,20907,20911,20915,20923,20927,20933,20937,20947,20951,20959],{"__ignoreMap":46},[57,20573,20574,20576,20578],{"class":59,"line":60},[57,20575,14966],{"class":136},[57,20577,15841],{"class":70},[57,20579,15844],{"class":140},[57,20581,20582],{"class":59,"line":67},[57,20583,14988],{"class":136},[57,20585,20586],{"class":59,"line":144},[57,20587,20588],{"class":63},"    \u002F\u002F无参（默认）构造函数\n",[57,20590,20591,20593],{"class":59,"line":150},[57,20592,18791],{"class":70},[57,20594,11126],{"class":140},[57,20596,20597,20599,20601,20603,20605],{"class":59,"line":162},[57,20598,9942],{"class":140},[57,20600,1459],{"class":136},[57,20602,20082],{"class":74},[57,20604,1727],{"class":136},[57,20606,9113],{"class":140},[57,20608,20609],{"class":59,"line":180},[57,20610,2460],{"class":140},[57,20612,20613],{"class":59,"line":186},[57,20614,20615],{"class":63},"    \u002F\u002F有参构造函数\n",[57,20617,20618,20620,20622,20624,20626],{"class":59,"line":197},[57,20619,18791],{"class":70},[57,20621,168],{"class":140},[57,20623,429],{"class":136},[57,20625,1681],{"class":5489},[57,20627,12715],{"class":140},[57,20629,20630,20633,20635],{"class":59,"line":241},[57,20631,20632],{"class":140},"        age ",[57,20634,156],{"class":136},[57,20636,1715],{"class":140},[57,20638,20639,20641,20643,20645,20647],{"class":59,"line":249},[57,20640,9942],{"class":140},[57,20642,1459],{"class":136},[57,20644,20122],{"class":74},[57,20646,1727],{"class":136},[57,20648,9113],{"class":140},[57,20650,20651],{"class":59,"line":262},[57,20652,2460],{"class":140},[57,20654,20655],{"class":59,"line":281},[57,20656,19146],{"class":63},[57,20658,20659,20661,20663,20665,20667,20669,20671],{"class":59,"line":287},[57,20660,18791],{"class":70},[57,20662,168],{"class":140},[57,20664,7065],{"class":136},[57,20666,15841],{"class":70},[57,20668,770],{"class":136},[57,20670,7098],{"class":5489},[57,20672,12715],{"class":140},[57,20674,20675,20677,20679],{"class":59,"line":298},[57,20676,20632],{"class":140},[57,20678,156],{"class":136},[57,20680,20681],{"class":140}," p.age;\n",[57,20683,20684,20686,20688,20690,20692],{"class":59,"line":311},[57,20685,9942],{"class":140},[57,20687,1459],{"class":136},[57,20689,20163],{"class":74},[57,20691,1727],{"class":136},[57,20693,9113],{"class":140},[57,20695,20696],{"class":59,"line":322},[57,20697,2460],{"class":140},[57,20699,20700],{"class":59,"line":1929},[57,20701,18819],{"class":63},[57,20703,20704,20706],{"class":59,"line":1950},[57,20705,18824],{"class":70},[57,20707,11126],{"class":140},[57,20709,20710,20712,20714,20716,20718],{"class":59,"line":1955},[57,20711,9942],{"class":140},[57,20713,1459],{"class":136},[57,20715,20200],{"class":74},[57,20717,1727],{"class":136},[57,20719,9113],{"class":140},[57,20721,20722],{"class":59,"line":1969},[57,20723,2460],{"class":140},[57,20725,20726],{"class":59,"line":1974},[57,20727,14988],{"class":136},[57,20729,20730,20732],{"class":59,"line":2001},[57,20731,2258],{"class":136},[57,20733,8070],{"class":140},[57,20735,20736],{"class":59,"line":2006},[57,20737,4268],{"class":140},[57,20739,20740],{"class":59,"line":2023},[57,20741,2673],{"emptyLinePlaceholder":350},[57,20743,20744,20746,20748],{"class":59,"line":2028},[57,20745,5637],{"class":136},[57,20747,5861],{"class":70},[57,20749,2249],{"class":140},[57,20751,20752],{"class":59,"line":2033},[57,20753,1828],{"class":140},[57,20755,20756,20758,20760,20762,20764],{"class":59,"line":2038},[57,20757,19703],{"class":140},[57,20759,7403],{"class":70},[57,20761,168],{"class":140},[57,20763,1066],{"class":81},[57,20765,2992],{"class":140},[57,20767,20768],{"class":59,"line":2052},[57,20769,20770],{"class":63},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[57,20772,20773,20775,20777],{"class":59,"line":2057},[57,20774,19703],{"class":140},[57,20776,7306],{"class":70},[57,20778,17787],{"class":140},[57,20780,20781],{"class":59,"line":2850},[57,20782,2673],{"emptyLinePlaceholder":350},[57,20784,20785,20787,20789,20792,20794,20797,20799],{"class":59,"line":2864},[57,20786,6802],{"class":140},[57,20788,1459],{"class":136},[57,20790,20791],{"class":74}," \"p2的年龄为： \"",[57,20793,1727],{"class":136},[57,20795,20796],{"class":140}," p2.age ",[57,20798,1459],{"class":136},[57,20800,9113],{"class":140},[57,20802,20803],{"class":59,"line":2872},[57,20804,1847],{"class":140},[57,20806,20807],{"class":59,"line":2877},[57,20808,2673],{"emptyLinePlaceholder":350},[57,20810,20811,20813,20815],{"class":59,"line":2883},[57,20812,5637],{"class":136},[57,20814,5930],{"class":70},[57,20816,2249],{"class":140},[57,20818,20819],{"class":59,"line":2889},[57,20820,1828],{"class":140},[57,20822,20823],{"class":59,"line":2894},[57,20824,20825],{"class":63},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[57,20827,20828,20831],{"class":59,"line":8221},[57,20829,20830],{"class":140},"    Person p1;",[57,20832,20833],{"class":63}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[57,20835,20836,20838,20840,20842,20844,20846],{"class":59,"line":8245},[57,20837,19703],{"class":140},[57,20839,7306],{"class":70},[57,20841,168],{"class":140},[57,20843,862],{"class":81},[57,20845,6239],{"class":140},[57,20847,20848],{"class":63}," \u002F\u002F用户提供的有参\n",[57,20850,20851,20853,20856,20859],{"class":59,"line":8250},[57,20852,19703],{"class":140},[57,20854,20855],{"class":70},"p3",[57,20857,20858],{"class":140},"(p2);",[57,20860,20861],{"class":63}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[57,20863,20864],{"class":59,"line":8256},[57,20865,2673],{"emptyLinePlaceholder":350},[57,20867,20868],{"class":59,"line":8283},[57,20869,20870],{"class":63},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[57,20872,20873,20876],{"class":59,"line":8288},[57,20874,20875],{"class":140},"    Person p4;",[57,20877,20833],{"class":63},[57,20879,20880,20882,20885,20887,20889,20891],{"class":59,"line":8294},[57,20881,19703],{"class":140},[57,20883,20884],{"class":70},"p5",[57,20886,168],{"class":140},[57,20888,862],{"class":81},[57,20890,6239],{"class":140},[57,20892,20893],{"class":63}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[57,20895,20896,20898,20901,20904],{"class":59,"line":8306},[57,20897,19703],{"class":140},[57,20899,20900],{"class":70},"p6",[57,20902,20903],{"class":140},"(p5);",[57,20905,20906],{"class":63}," \u002F\u002F用户自己提供拷贝构造\n",[57,20908,20909],{"class":59,"line":8318},[57,20910,1847],{"class":140},[57,20912,20913],{"class":59,"line":8330},[57,20914,2673],{"emptyLinePlaceholder":350},[57,20916,20917,20919,20921],{"class":59,"line":9989},[57,20918,429],{"class":136},[57,20920,2246],{"class":70},[57,20922,11126],{"class":140},[57,20924,20925],{"class":59,"line":10014},[57,20926,2673],{"emptyLinePlaceholder":350},[57,20928,20929,20931],{"class":59,"line":10037},[57,20930,5906],{"class":70},[57,20932,5909],{"class":140},[57,20934,20935],{"class":59,"line":10061},[57,20936,2673],{"emptyLinePlaceholder":350},[57,20938,20939,20941,20943,20945],{"class":59,"line":10066},[57,20940,2576],{"class":70},[57,20942,168],{"class":140},[57,20944,2581],{"class":74},[57,20946,2992],{"class":140},[57,20948,20949],{"class":59,"line":10071},[57,20950,2673],{"emptyLinePlaceholder":350},[57,20952,20953,20955,20957],{"class":59,"line":10076},[57,20954,4363],{"class":136},[57,20956,4366],{"class":81},[57,20958,1576],{"class":140},[57,20960,20961],{"class":59,"line":10085},[57,20962,1847],{"class":140},[394,20964,20966],{"id":20965},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,20968,20969],{},"浅拷贝：简单的赋值拷贝操作",[14,20971,20972],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[49,20974,20976],{"className":415,"code":20975,"language":417,"meta":46,"style":46},"#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",[28,20977,20978,20984,20994,21000,21004,21008,21013,21019,21023,21036,21040,21044,21051,21055,21065,21080,21093,21097,21102,21107,21123,21127,21140,21145,21150,21155,21164,21169,21184,21188,21192,21196,21202,21206,21211,21226,21230,21241,21255,21259,21268,21272,21278,21290,21294,21302,21306,21323,21354,21362,21390,21394,21398,21406,21410,21416],{"__ignoreMap":46},[57,20979,20980,20982],{"class":59,"line":60},[57,20981,2223],{"class":136},[57,20983,2226],{"class":74},[57,20985,20986,20988,20990,20992],{"class":59,"line":67},[57,20987,2231],{"class":136},[57,20989,2234],{"class":136},[57,20991,2237],{"class":70},[57,20993,1576],{"class":140},[57,20995,20996,20998],{"class":59,"line":144},[57,20997,14966],{"class":136},[57,20999,15443],{"class":70},[57,21001,21002],{"class":59,"line":150},[57,21003,1828],{"class":140},[57,21005,21006],{"class":59,"line":162},[57,21007,14988],{"class":136},[57,21009,21010],{"class":59,"line":180},[57,21011,21012],{"class":63},"    \u002F\u002F默认构造函数\n",[57,21014,21015,21017],{"class":59,"line":186},[57,21016,18791],{"class":70},[57,21018,2249],{"class":140},[57,21020,21021],{"class":59,"line":197},[57,21022,2303],{"class":140},[57,21024,21025,21027,21029,21032,21034],{"class":59,"line":241},[57,21026,3724],{"class":140},[57,21028,1459],{"class":136},[57,21030,21031],{"class":74},"\"默认构造函数\"",[57,21033,1459],{"class":136},[57,21035,1481],{"class":140},[57,21037,21038],{"class":59,"line":249},[57,21039,2460],{"class":140},[57,21041,21042],{"class":59,"line":262},[57,21043,20615],{"class":63},[57,21045,21046,21048],{"class":59,"line":281},[57,21047,18824],{"class":70},[57,21049,21050],{"class":140},"(int age,int height)\n",[57,21052,21053],{"class":59,"line":287},[57,21054,2303],{"class":140},[57,21056,21057,21060,21062],{"class":59,"line":298},[57,21058,21059],{"class":140},"        m_Age",[57,21061,156],{"class":136},[57,21063,21064],{"class":140},"age;\n",[57,21066,21067,21070,21072,21074,21077],{"class":59,"line":311},[57,21068,21069],{"class":140},"        m_Height",[57,21071,11990],{"class":136},[57,21073,2655],{"class":136},[57,21075,21076],{"class":140},"(height);",[57,21078,21079],{"class":63},"\u002F\u002F放到堆区\n",[57,21081,21082,21084,21086,21089,21091],{"class":59,"line":322},[57,21083,3724],{"class":140},[57,21085,1459],{"class":136},[57,21087,21088],{"class":74},"\"有参构造函数\"",[57,21090,1459],{"class":136},[57,21092,1481],{"class":140},[57,21094,21095],{"class":59,"line":1929},[57,21096,2460],{"class":140},[57,21098,21099],{"class":59,"line":1950},[57,21100,21101],{"class":63},"    \u002F\u002F深拷贝解决上述问题\n",[57,21103,21104],{"class":59,"line":1955},[57,21105,21106],{"class":63},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[57,21108,21109,21111,21113,21115,21117,21119,21121],{"class":59,"line":1969},[57,21110,18791],{"class":70},[57,21112,168],{"class":140},[57,21114,7065],{"class":136},[57,21116,15841],{"class":70},[57,21118,10857],{"class":136},[57,21120,14],{"class":5489},[57,21122,238],{"class":140},[57,21124,21125],{"class":59,"line":1974},[57,21126,2303],{"class":140},[57,21128,21129,21131,21133,21136,21138],{"class":59,"line":2001},[57,21130,3724],{"class":140},[57,21132,1459],{"class":136},[57,21134,21135],{"class":74},"\"拷贝构造函数\"",[57,21137,1459],{"class":136},[57,21139,1481],{"class":140},[57,21141,21142],{"class":59,"line":2006},[57,21143,21144],{"class":63},"        \u002F\u002F编译器默认的写如下注释部分\n",[57,21146,21147],{"class":59,"line":2023},[57,21148,21149],{"class":63},"        \u002F\u002Fm_Age=p.m_Age;\n",[57,21151,21152],{"class":59,"line":2028},[57,21153,21154],{"class":63},"        \u002F\u002Fm_Height=p.m_Height;\n",[57,21156,21157,21159,21161],{"class":59,"line":2033},[57,21158,21059],{"class":140},[57,21160,156],{"class":136},[57,21162,21163],{"class":140},"p.m_Age;\n",[57,21165,21166],{"class":59,"line":2038},[57,21167,21168],{"class":63},"        \u002F\u002F深拷贝操作\n",[57,21170,21171,21173,21175,21177,21179,21181],{"class":59,"line":2052},[57,21172,21069],{"class":140},[57,21174,11990],{"class":136},[57,21176,2655],{"class":136},[57,21178,168],{"class":140},[57,21180,871],{"class":136},[57,21182,21183],{"class":140},"p.m_Height);\n",[57,21185,21186],{"class":59,"line":2057},[57,21187,2460],{"class":140},[57,21189,21190],{"class":59,"line":2850},[57,21191,2673],{"emptyLinePlaceholder":350},[57,21193,21194],{"class":59,"line":2864},[57,21195,18819],{"class":63},[57,21197,21198,21200],{"class":59,"line":2872},[57,21199,18824],{"class":70},[57,21201,2249],{"class":140},[57,21203,21204],{"class":59,"line":2877},[57,21205,2303],{"class":140},[57,21207,21208],{"class":59,"line":2883},[57,21209,21210],{"class":63},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[57,21212,21213,21215,21218,21221,21224],{"class":59,"line":2889},[57,21214,2770],{"class":136},[57,21216,21217],{"class":140},"(m_Height ",[57,21219,21220],{"class":136},"!=",[57,21222,21223],{"class":81}," NULL",[57,21225,238],{"class":140},[57,21227,21228],{"class":59,"line":2894},[57,21229,2783],{"class":140},[57,21231,21232,21235,21238],{"class":59,"line":8221},[57,21233,21234],{"class":136},"            delete",[57,21236,21237],{"class":140}," m_Height;",[57,21239,21240],{"class":63}," \u002F\u002F释放堆区内存\n",[57,21242,21243,21246,21248,21250,21252],{"class":59,"line":8245},[57,21244,21245],{"class":140},"            m_Height",[57,21247,156],{"class":136},[57,21249,2665],{"class":81},[57,21251,478],{"class":140},[57,21253,21254],{"class":63}," \u002F\u002F防止野指针\n",[57,21256,21257],{"class":59,"line":8250},[57,21258,2802],{"class":140},[57,21260,21261,21263,21265],{"class":59,"line":8256},[57,21262,3724],{"class":140},[57,21264,1459],{"class":136},[57,21266,21267],{"class":74},"\"Person的析构函数调用\"\n",[57,21269,21270],{"class":59,"line":8283},[57,21271,2460],{"class":140},[57,21273,21274,21276],{"class":59,"line":8288},[57,21275,2258],{"class":136},[57,21277,15938],{"class":140},[57,21279,21280,21282,21284,21287],{"class":59,"line":8294},[57,21281,2258],{"class":136},[57,21283,6791],{"class":136},[57,21285,21286],{"class":140},"m_Height;",[57,21288,21289],{"class":63}," \u002F\u002F定义一个指针，指向身高\n",[57,21291,21292],{"class":59,"line":8306},[57,21293,4268],{"class":140},[57,21295,21296,21298,21300],{"class":59,"line":8318},[57,21297,5637],{"class":136},[57,21299,5861],{"class":70},[57,21301,2249],{"class":140},[57,21303,21304],{"class":59,"line":8330},[57,21305,1828],{"class":140},[57,21307,21308,21310,21312,21314,21316,21318,21321],{"class":59,"line":9989},[57,21309,19703],{"class":140},[57,21311,7403],{"class":70},[57,21313,168],{"class":140},[57,21315,1066],{"class":81},[57,21317,273],{"class":140},[57,21319,21320],{"class":81},"160",[57,21322,2992],{"class":140},[57,21324,21325,21327,21329,21332,21334,21337,21339,21342,21344,21347,21349,21351],{"class":59,"line":10014},[57,21326,1833],{"class":140},[57,21328,1459],{"class":136},[57,21330,21331],{"class":74},"\"p1的年龄为:\"",[57,21333,1459],{"class":136},[57,21335,21336],{"class":140},"p1.m_Age",[57,21338,1459],{"class":136},[57,21340,21341],{"class":74},"\"身高为：\"",[57,21343,6692],{"class":136},[57,21345,21346],{"class":140},"p1.m_Height",[57,21348,1459],{"class":136},[57,21350,1524],{"class":140},[57,21352,21353],{"class":63},"  \u002F\u002F18\n",[57,21355,21356,21358,21360],{"class":59,"line":10037},[57,21357,19703],{"class":140},[57,21359,7306],{"class":70},[57,21361,17787],{"class":140},[57,21363,21364,21366,21368,21371,21373,21375,21377,21379,21381,21384,21386,21388],{"class":59,"line":10061},[57,21365,1833],{"class":140},[57,21367,1459],{"class":136},[57,21369,21370],{"class":74},"\"p2的年龄为：\"",[57,21372,1459],{"class":136},[57,21374,19733],{"class":140},[57,21376,1459],{"class":136},[57,21378,21341],{"class":74},[57,21380,6692],{"class":136},[57,21382,21383],{"class":140},"p2.m_Height",[57,21385,1459],{"class":136},[57,21387,1524],{"class":140},[57,21389,21353],{"class":63},[57,21391,21392],{"class":59,"line":10066},[57,21393,13483],{"class":140},[57,21395,21396],{"class":59,"line":10071},[57,21397,1847],{"class":140},[57,21399,21400,21402,21404],{"class":59,"line":10076},[57,21401,429],{"class":136},[57,21403,2246],{"class":70},[57,21405,2249],{"class":140},[57,21407,21408],{"class":59,"line":10085},[57,21409,1828],{"class":140},[57,21411,21412,21414],{"class":59,"line":10090},[57,21413,5906],{"class":70},[57,21415,5909],{"class":140},[57,21417,21418],{"class":59,"line":10096},[57,21419,1847],{"class":140},[14,21421,21422],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,21424,21425],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,21427,21428],{},[44,21429],{"alt":46,"src":21430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,21432,21433],{},"浅拷贝问题要使用深拷贝来解决",[14,21435,21436],{},[44,21437],{"alt":46,"src":21438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,21440,21441],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[394,21443,21445],{"id":21444},"_826初始化列表","8.2.6初始化列表",[14,21447,21448],{},"作用：初始化属性",[14,21450,5454],{},[49,21452,21455],{"className":21453,"code":21454,"language":5460},[5458],"构造函数():属性1(值1),属性2(值2).....{}\n",[28,21456,21454],{"__ignoreMap":46},[14,21458,21459],{},"例子",[49,21461,21463],{"className":415,"code":21462,"language":417,"meta":46,"style":46},"#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",[28,21464,21465,21471,21481,21487,21491,21496,21500,21505,21510,21515,21520,21525,21530,21534,21539,21544,21587,21596,21614,21632,21650,21654,21658,21665,21672,21679,21683,21687,21695,21699,21703,21723,21732,21736,21740,21750,21754,21762],{"__ignoreMap":46},[57,21466,21467,21469],{"class":59,"line":60},[57,21468,2223],{"class":136},[57,21470,2226],{"class":74},[57,21472,21473,21475,21477,21479],{"class":59,"line":67},[57,21474,2231],{"class":136},[57,21476,2234],{"class":136},[57,21478,2237],{"class":70},[57,21480,1576],{"class":140},[57,21482,21483,21485],{"class":59,"line":144},[57,21484,14966],{"class":136},[57,21486,15443],{"class":70},[57,21488,21489],{"class":59,"line":150},[57,21490,1828],{"class":140},[57,21492,21493],{"class":59,"line":162},[57,21494,21495],{"class":136},"    public:\n",[57,21497,21498],{"class":59,"line":180},[57,21499,2673],{"emptyLinePlaceholder":350},[57,21501,21502],{"class":59,"line":186},[57,21503,21504],{"class":63},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[57,21506,21507],{"class":59,"line":197},[57,21508,21509],{"class":63},"    \u002F\u002FPerson(int a, int b, int c) {\n",[57,21511,21512],{"class":59,"line":241},[57,21513,21514],{"class":63},"    \u002F\u002F  m_A = a;\n",[57,21516,21517],{"class":59,"line":249},[57,21518,21519],{"class":63},"    \u002F\u002F  m_B = b;\n",[57,21521,21522],{"class":59,"line":262},[57,21523,21524],{"class":63},"    \u002F\u002F  m_C = c;\n",[57,21526,21527],{"class":59,"line":281},[57,21528,21529],{"class":63},"    \u002F\u002F}\n",[57,21531,21532],{"class":59,"line":287},[57,21533,2673],{"emptyLinePlaceholder":350},[57,21535,21536],{"class":59,"line":298},[57,21537,21538],{"class":63},"    \u002F\u002F初始化列表方式初始化\n",[57,21540,21541],{"class":59,"line":311},[57,21542,21543],{"class":63},"    \u002F\u002F使用有参构造函数\n",[57,21545,21546,21548,21550,21552,21554,21556,21558,21560,21562,21564,21566,21569,21572,21575,21578,21581,21584],{"class":59,"line":322},[57,21547,18791],{"class":70},[57,21549,168],{"class":140},[57,21551,429],{"class":136},[57,21553,1681],{"class":5489},[57,21555,12708],{"class":140},[57,21557,429],{"class":136},[57,21559,3106],{"class":5489},[57,21561,12708],{"class":140},[57,21563,429],{"class":136},[57,21565,3122],{"class":5489},[57,21567,21568],{"class":140},") :",[57,21570,21571],{"class":70},"m_A",[57,21573,21574],{"class":140},"(a), ",[57,21576,21577],{"class":70},"m_B",[57,21579,21580],{"class":140},"(b), ",[57,21582,21583],{"class":70},"m_C",[57,21585,21586],{"class":140},"(c) {}\n",[57,21588,21589,21591,21594],{"class":59,"line":1929},[57,21590,15181],{"class":136},[57,21592,21593],{"class":70}," PrintPerson",[57,21595,11126],{"class":140},[57,21597,21598,21600,21602,21605,21607,21610,21612],{"class":59,"line":1950},[57,21599,9942],{"class":140},[57,21601,1459],{"class":136},[57,21603,21604],{"class":74}," \"mA:\"",[57,21606,1727],{"class":136},[57,21608,21609],{"class":140}," m_A ",[57,21611,1459],{"class":136},[57,21613,9113],{"class":140},[57,21615,21616,21618,21620,21623,21625,21628,21630],{"class":59,"line":1955},[57,21617,9942],{"class":140},[57,21619,1459],{"class":136},[57,21621,21622],{"class":74}," \"mB:\"",[57,21624,1727],{"class":136},[57,21626,21627],{"class":140}," m_B ",[57,21629,1459],{"class":136},[57,21631,9113],{"class":140},[57,21633,21634,21636,21638,21641,21643,21646,21648],{"class":59,"line":1969},[57,21635,9942],{"class":140},[57,21637,1459],{"class":136},[57,21639,21640],{"class":74}," \"mC:\"",[57,21642,1727],{"class":136},[57,21644,21645],{"class":140}," m_C ",[57,21647,1459],{"class":136},[57,21649,9113],{"class":140},[57,21651,21652],{"class":59,"line":1974},[57,21653,2460],{"class":140},[57,21655,21656],{"class":59,"line":2001},[57,21657,15494],{"class":136},[57,21659,21660,21662],{"class":59,"line":2006},[57,21661,2258],{"class":136},[57,21663,21664],{"class":140}," m_A;\n",[57,21666,21667,21669],{"class":59,"line":2023},[57,21668,2258],{"class":136},[57,21670,21671],{"class":140}," m_B;\n",[57,21673,21674,21676],{"class":59,"line":2028},[57,21675,2258],{"class":136},[57,21677,21678],{"class":140}," m_C;\n",[57,21680,21681],{"class":59,"line":2033},[57,21682,4268],{"class":140},[57,21684,21685],{"class":59,"line":2038},[57,21686,2673],{"emptyLinePlaceholder":350},[57,21688,21689,21691,21693],{"class":59,"line":2052},[57,21690,429],{"class":136},[57,21692,2246],{"class":70},[57,21694,6251],{"class":140},[57,21696,21697],{"class":59,"line":2057},[57,21698,1828],{"class":140},[57,21700,21701],{"class":59,"line":2850},[57,21702,2673],{"emptyLinePlaceholder":350},[57,21704,21705,21707,21709,21711,21713,21715,21717,21719,21721],{"class":59,"line":2864},[57,21706,19703],{"class":140},[57,21708,14],{"class":70},[57,21710,168],{"class":140},[57,21712,635],{"class":81},[57,21714,12708],{"class":140},[57,21716,498],{"class":81},[57,21718,12708],{"class":140},[57,21720,270],{"class":81},[57,21722,2992],{"class":140},[57,21724,21725,21727,21730],{"class":59,"line":2872},[57,21726,16138],{"class":140},[57,21728,21729],{"class":70},"PrintPerson",[57,21731,5909],{"class":140},[57,21733,21734],{"class":59,"line":2877},[57,21735,2673],{"emptyLinePlaceholder":350},[57,21737,21738],{"class":59,"line":2883},[57,21739,2673],{"emptyLinePlaceholder":350},[57,21741,21742,21744,21746,21748],{"class":59,"line":2889},[57,21743,2576],{"class":70},[57,21745,168],{"class":140},[57,21747,2581],{"class":74},[57,21749,2992],{"class":140},[57,21751,21752],{"class":59,"line":2894},[57,21753,2673],{"emptyLinePlaceholder":350},[57,21755,21756,21758,21760],{"class":59,"line":8221},[57,21757,4363],{"class":136},[57,21759,4366],{"class":81},[57,21761,1576],{"class":140},[57,21763,21764],{"class":59,"line":8245},[57,21765,1847],{"class":140},[14,21767,21768,21769,21772,21773],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[33,21770,21771],{},"参数名就是定义的对象属性","，",[33,21774,21775],{},"属性后面的值为有参构造函数的形参",[49,21777,21779],{"className":415,"code":21778,"language":417,"meta":46,"style":46},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[28,21780,21781],{"__ignoreMap":46},[57,21782,21783,21785,21787,21789,21792,21794,21797,21799,21802,21804,21807,21809,21812,21814],{"class":59,"line":60},[57,21784,19318],{"class":70},[57,21786,168],{"class":140},[57,21788,429],{"class":136},[57,21790,21791],{"class":140}," a.",[57,21793,429],{"class":136},[57,21795,21796],{"class":140}," b,",[57,21798,429],{"class":136},[57,21800,21801],{"class":140}," b):",[57,21803,21571],{"class":70},[57,21805,21806],{"class":140},"(a),",[57,21808,21577],{"class":70},[57,21810,21811],{"class":140},"(c),",[57,21813,21583],{"class":70},[57,21815,21816],{"class":140},"(b) {}\n",[394,21818,21820],{"id":21819},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,21822,21823],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,21825,14905],{},[49,21827,21829],{"className":415,"code":21828,"language":417,"meta":46,"style":46},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[28,21830,21831,21836,21841,21845,21850,21854],{"__ignoreMap":46},[57,21832,21833],{"class":59,"line":60},[57,21834,21835],{"class":140},"A{};\n",[57,21837,21838],{"class":59,"line":67},[57,21839,21840],{"class":140},"B\n",[57,21842,21843],{"class":59,"line":144},[57,21844,1828],{"class":140},[57,21846,21847],{"class":59,"line":150},[57,21848,21849],{"class":140},"    A a;\n",[57,21851,21852],{"class":59,"line":162},[57,21853,1847],{"class":140},[57,21855,21856],{"class":59,"line":180},[57,21857,21858],{"class":63},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,21860,21861],{},"案例",[49,21863,21865],{"className":415,"code":21864,"language":417,"meta":46,"style":46},"\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",[28,21866,21867,21872,21879,21883,21888,21893,21907,21911,21921,21932,21936,21943,21947,21960,21964,21969,21974,21978,21984,21988,21992,21996,22027,22031,22042,22046,22052,22056,22069,22073,22077,22081,22086,22091,22095,22103,22107,22124,22143,22147,22155,22159,22165],{"__ignoreMap":46},[57,21868,21869],{"class":59,"line":60},[57,21870,21871],{"class":63},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[57,21873,21874,21876],{"class":59,"line":67},[57,21875,14966],{"class":136},[57,21877,21878],{"class":70}," Phone\n",[57,21880,21881],{"class":59,"line":144},[57,21882,1828],{"class":140},[57,21884,21885],{"class":59,"line":150},[57,21886,21887],{"class":140},"public：\n",[57,21889,21890],{"class":59,"line":162},[57,21891,21892],{"class":63},"    \u002F\u002F 赋值(构造函数)\n",[57,21894,21895,21898,21900,21902,21905],{"class":59,"line":180},[57,21896,21897],{"class":70},"    Phone",[57,21899,168],{"class":140},[57,21901,15189],{"class":70},[57,21903,21904],{"class":5489}," pName",[57,21906,238],{"class":140},[57,21908,21909],{"class":59,"line":186},[57,21910,2303],{"class":140},[57,21912,21913,21916,21918],{"class":59,"line":197},[57,21914,21915],{"class":140},"        m_pName",[57,21917,156],{"class":136},[57,21919,21920],{"class":140},"pName;\n",[57,21922,21923,21925,21927,21930],{"class":59,"line":241},[57,21924,3724],{"class":140},[57,21926,1459],{"class":136},[57,21928,21929],{"class":74},"\"Phone的构造函数调用\"",[57,21931,1576],{"class":140},[57,21933,21934],{"class":59,"line":249},[57,21935,2460],{"class":140},[57,21937,21938,21941],{"class":59,"line":262},[57,21939,21940],{"class":70},"    ~Phone",[57,21942,2249],{"class":140},[57,21944,21945],{"class":59,"line":281},[57,21946,2303],{"class":140},[57,21948,21949,21951,21953,21956,21958],{"class":59,"line":287},[57,21950,3724],{"class":140},[57,21952,1459],{"class":136},[57,21954,21955],{"class":74},"\"Phone析构函数调用\"",[57,21957,1459],{"class":136},[57,21959,1481],{"class":140},[57,21961,21962],{"class":59,"line":298},[57,21963,2460],{"class":140},[57,21965,21966],{"class":59,"line":311},[57,21967,21968],{"class":63},"    \u002F\u002F\n",[57,21970,21971],{"class":59,"line":322},[57,21972,21973],{"class":140},"    string m_PName;\n",[57,21975,21976],{"class":59,"line":1929},[57,21977,4268],{"class":140},[57,21979,21980,21982],{"class":59,"line":1950},[57,21981,14966],{"class":136},[57,21983,15443],{"class":70},[57,21985,21986],{"class":59,"line":1955},[57,21987,1828],{"class":140},[57,21989,21990],{"class":59,"line":1969},[57,21991,14988],{"class":136},[57,21993,21994],{"class":59,"line":1974},[57,21995,17266],{"class":63},[57,21997,21998,22000,22002,22004,22006,22008,22010,22013,22016,22018,22021,22024],{"class":59,"line":2001},[57,21999,18791],{"class":70},[57,22001,168],{"class":140},[57,22003,15189],{"class":70},[57,22005,15192],{"class":5489},[57,22007,273],{"class":140},[57,22009,15189],{"class":70},[57,22011,22012],{"class":5489}," pname",[57,22014,22015],{"class":140},"):",[57,22017,15282],{"class":70},[57,22019,22020],{"class":140},"(name),m_phone.",[57,22022,22023],{"class":70},"m_PName",[57,22025,22026],{"class":140},"(pname) \n",[57,22028,22029],{"class":59,"line":2006},[57,22030,2303],{"class":140},[57,22032,22033,22035,22037,22040],{"class":59,"line":2023},[57,22034,3724],{"class":140},[57,22036,1459],{"class":136},[57,22038,22039],{"class":74},"\"Person的构造函数调用\"",[57,22041,1576],{"class":140},[57,22043,22044],{"class":59,"line":2028},[57,22045,2460],{"class":140},[57,22047,22048,22050],{"class":59,"line":2033},[57,22049,18824],{"class":70},[57,22051,2249],{"class":140},[57,22053,22054],{"class":59,"line":2038},[57,22055,2303],{"class":140},[57,22057,22058,22060,22062,22065,22067],{"class":59,"line":2052},[57,22059,3724],{"class":140},[57,22061,1459],{"class":136},[57,22063,22064],{"class":74},"\"Person析构函数调用\"",[57,22066,1459],{"class":136},[57,22068,1481],{"class":140},[57,22070,22071],{"class":59,"line":2057},[57,22072,2460],{"class":140},[57,22074,22075],{"class":59,"line":2850},[57,22076,8053],{"class":63},[57,22078,22079],{"class":59,"line":2864},[57,22080,15164],{"class":140},[57,22082,22083],{"class":59,"line":2872},[57,22084,22085],{"class":63},"    \u002F\u002F手机\n",[57,22087,22088],{"class":59,"line":2877},[57,22089,22090],{"class":140},"    Phone m_Phone;\n",[57,22092,22093],{"class":59,"line":2883},[57,22094,4268],{"class":140},[57,22096,22097,22099,22101],{"class":59,"line":2889},[57,22098,5637],{"class":136},[57,22100,5861],{"class":70},[57,22102,2249],{"class":140},[57,22104,22105],{"class":59,"line":2894},[57,22106,1828],{"class":140},[57,22108,22109,22111,22113,22115,22117,22119,22122],{"class":59,"line":8221},[57,22110,19703],{"class":140},[57,22112,14],{"class":70},[57,22114,168],{"class":140},[57,22116,8189],{"class":74},[57,22118,273],{"class":140},[57,22120,22121],{"class":74},"\"安卓\"",[57,22123,2992],{"class":140},[57,22125,22126,22128,22130,22133,22135,22138,22140],{"class":59,"line":8245},[57,22127,1833],{"class":140},[57,22129,1459],{"class":136},[57,22131,22132],{"class":140},"p.Name",[57,22134,1459],{"class":136},[57,22136,22137],{"class":74},"\"拿着：\"",[57,22139,1459],{"class":136},[57,22141,22142],{"class":140},"p.m_phone.m_PName;\n",[57,22144,22145],{"class":59,"line":8250},[57,22146,1847],{"class":140},[57,22148,22149,22151,22153],{"class":59,"line":8256},[57,22150,429],{"class":136},[57,22152,2246],{"class":70},[57,22154,2249],{"class":140},[57,22156,22157],{"class":59,"line":8283},[57,22158,1828],{"class":140},[57,22160,22161,22163],{"class":59,"line":8288},[57,22162,5906],{"class":70},[57,22164,5909],{"class":140},[57,22166,22167],{"class":59,"line":8294},[57,22168,1847],{"class":140},[14,22170,9298],{},[49,22172,22174],{"className":415,"code":22173,"language":417,"meta":46,"style":46},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[28,22175,22176,22181],{"__ignoreMap":46},[57,22177,22178],{"class":59,"line":60},[57,22179,22180],{"class":63},"    \u002F\u002F不需要写这个：\n",[57,22182,22183],{"class":59,"line":67},[57,22184,22185],{"class":63},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,22187,22188],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[49,22190,22192],{"className":415,"code":22191,"language":417,"meta":46,"style":46},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[28,22193,22194],{"__ignoreMap":46},[57,22195,22196,22198,22201,22203,22206,22209],{"class":59,"line":60},[57,22197,19318],{"class":70},[57,22199,22200],{"class":140},"(string name.string pname):",[57,22202,15282],{"class":70},[57,22204,22205],{"class":140},"(name),",[57,22207,22208],{"class":70},"m_phone",[57,22210,22211],{"class":140},"(pname) {}\n",[14,22213,22214,22215,156,22218],{},"采用的是隐式转换法，实际为如下：\n",[28,22216,22217],{},"m_phone(pname)",[28,22219,22220],{},"Phone m_phone=pname",[14,22222,22223,22226],{},[33,22224,22225],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,22228,22229],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[394,22231,22233],{"id":22232},"_828静态对象","8.2.8静态对象",[14,22235,22236],{},"静态对象在成员对象前static，称为静态对象",[14,22238,22239],{},"静态对象分为两类：",[377,22241,22242],{},[380,22243,22244],{},"静态成员变量",[1422,22246,22247,22250,22253],{},[380,22248,22249],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[380,22251,22252],{},"②在编译阶段分配内存",[380,22254,22255],{},"③类内声明，类外初始化",[377,22257,22258],{"start":67},[380,22259,22260],{},"静态成员函数",[1422,22262,22263,22266],{},[380,22264,22265],{},"①所有对象共享同一个函数",[380,22267,22268],{},"②静态成员函数只能访问静态成员变量",[22270,22271,22273],"h4",{"id":22272},"_8281静态成员变量","8.2.8.1静态成员变量",[49,22275,22277],{"className":415,"code":22276,"language":417,"meta":46,"style":46},"#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",[28,22278,22279,22285,22295,22301,22305,22309,22314,22319,22324,22332,22336,22340,22344,22352,22356,22360,22365,22378,22382,22390,22394,22400],{"__ignoreMap":46},[57,22280,22281,22283],{"class":59,"line":60},[57,22282,2223],{"class":136},[57,22284,2226],{"class":74},[57,22286,22287,22289,22291,22293],{"class":59,"line":67},[57,22288,2231],{"class":136},[57,22290,2234],{"class":136},[57,22292,2237],{"class":70},[57,22294,1576],{"class":140},[57,22296,22297,22299],{"class":59,"line":144},[57,22298,14966],{"class":136},[57,22300,15443],{"class":70},[57,22302,22303],{"class":59,"line":150},[57,22304,1828],{"class":140},[57,22306,22307],{"class":59,"line":162},[57,22308,14988],{"class":136},[57,22310,22311],{"class":59,"line":180},[57,22312,22313],{"class":63},"    \u002F\u002F非静态成员变量\n",[57,22315,22316],{"class":59,"line":186},[57,22317,22318],{"class":63},"    \u002F\u002F int m_A;\n",[57,22320,22321],{"class":59,"line":197},[57,22322,22323],{"class":63},"    \u002F\u002F定义静态成员变量\n",[57,22325,22326,22328,22330],{"class":59,"line":241},[57,22327,11293],{"class":136},[57,22329,2655],{"class":136},[57,22331,21664],{"class":140},[57,22333,22334],{"class":59,"line":249},[57,22335,2673],{"emptyLinePlaceholder":350},[57,22337,22338],{"class":59,"line":262},[57,22339,2673],{"emptyLinePlaceholder":350},[57,22341,22342],{"class":59,"line":281},[57,22343,4268],{"class":140},[57,22345,22346,22348,22350],{"class":59,"line":287},[57,22347,5637],{"class":136},[57,22349,5861],{"class":70},[57,22351,2249],{"class":140},[57,22353,22354],{"class":59,"line":298},[57,22355,1828],{"class":140},[57,22357,22358],{"class":59,"line":311},[57,22359,15585],{"class":140},[57,22361,22362],{"class":59,"line":322},[57,22363,22364],{"class":63},"    \u002F\u002F输出类成员变量这块内存\n",[57,22366,22367,22369,22371,22374,22376],{"class":59,"line":1929},[57,22368,1833],{"class":140},[57,22370,1459],{"class":136},[57,22372,22373],{"class":140},"p.m_A",[57,22375,1459],{"class":136},[57,22377,1481],{"class":140},[57,22379,22380],{"class":59,"line":1950},[57,22381,1847],{"class":140},[57,22383,22384,22386,22388],{"class":59,"line":1955},[57,22385,429],{"class":136},[57,22387,2246],{"class":70},[57,22389,2249],{"class":140},[57,22391,22392],{"class":59,"line":1969},[57,22393,1828],{"class":140},[57,22395,22396,22398],{"class":59,"line":1974},[57,22397,5906],{"class":70},[57,22399,2249],{"class":140},[57,22401,22402],{"class":59,"line":2001},[57,22403,1847],{"class":140},[14,22405,22406],{},"此时输出是报错的：无法解析外部命令",[14,22408,22409],{},"解决这一问题：必须用到类内声明，类外初始化操作",[49,22411,22413],{"className":415,"code":22412,"language":417,"meta":46,"style":46},"#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",[28,22414,22415,22421,22431,22437,22441,22445,22450,22458,22462,22467,22482,22490,22494,22498,22503,22508,22520,22525,22536,22541,22546,22559,22563,22571,22575,22581],{"__ignoreMap":46},[57,22416,22417,22419],{"class":59,"line":60},[57,22418,2223],{"class":136},[57,22420,2226],{"class":74},[57,22422,22423,22425,22427,22429],{"class":59,"line":67},[57,22424,2231],{"class":136},[57,22426,2234],{"class":136},[57,22428,2237],{"class":70},[57,22430,1576],{"class":140},[57,22432,22433,22435],{"class":59,"line":144},[57,22434,14966],{"class":136},[57,22436,15443],{"class":70},[57,22438,22439],{"class":59,"line":150},[57,22440,1828],{"class":140},[57,22442,22443],{"class":59,"line":162},[57,22444,14988],{"class":136},[57,22446,22447],{"class":59,"line":180},[57,22448,22449],{"class":63},"    \u002F\u002F类内声明\n",[57,22451,22452,22454,22456],{"class":59,"line":186},[57,22453,11293],{"class":136},[57,22455,2655],{"class":136},[57,22457,21664],{"class":140},[57,22459,22460],{"class":59,"line":197},[57,22461,4268],{"class":140},[57,22463,22464],{"class":59,"line":241},[57,22465,22466],{"class":63},"\u002F\u002F类外初始化\n",[57,22468,22469,22471,22473,22476,22478,22480],{"class":59,"line":249},[57,22470,429],{"class":136},[57,22472,15841],{"class":70},[57,22474,22475],{"class":140},"::m_A",[57,22477,156],{"class":136},[57,22479,862],{"class":81},[57,22481,1576],{"class":140},[57,22483,22484,22486,22488],{"class":59,"line":262},[57,22485,5637],{"class":136},[57,22487,5861],{"class":70},[57,22489,2249],{"class":140},[57,22491,22492],{"class":59,"line":281},[57,22493,1828],{"class":140},[57,22495,22496],{"class":59,"line":287},[57,22497,15585],{"class":140},[57,22499,22500],{"class":59,"line":298},[57,22501,22502],{"class":63},"    \u002F\u002F访问变量的原内存空间\n",[57,22504,22505],{"class":59,"line":311},[57,22506,22507],{"class":63},"    \u002F\u002F100\n",[57,22509,22510,22512,22514,22516,22518],{"class":59,"line":322},[57,22511,1833],{"class":140},[57,22513,1459],{"class":136},[57,22515,22373],{"class":140},[57,22517,1459],{"class":136},[57,22519,1481],{"class":140},[57,22521,22522],{"class":59,"line":1929},[57,22523,22524],{"class":140},"    Person p2;\n",[57,22526,22527,22530,22532,22534],{"class":59,"line":1950},[57,22528,22529],{"class":140},"    p2.m_A",[57,22531,156],{"class":136},[57,22533,1996],{"class":81},[57,22535,1576],{"class":140},[57,22537,22538],{"class":59,"line":1955},[57,22539,22540],{"class":63},"    \u002F\u002F继续访问这片空间\n",[57,22542,22543],{"class":59,"line":1969},[57,22544,22545],{"class":63},"    \u002F\u002F200\n",[57,22547,22548,22550,22552,22555,22557],{"class":59,"line":1974},[57,22549,1833],{"class":140},[57,22551,1459],{"class":136},[57,22553,22554],{"class":140},"p2.m_A",[57,22556,1459],{"class":136},[57,22558,1481],{"class":140},[57,22560,22561],{"class":59,"line":2001},[57,22562,1847],{"class":140},[57,22564,22565,22567,22569],{"class":59,"line":2006},[57,22566,429],{"class":136},[57,22568,2246],{"class":70},[57,22570,2249],{"class":140},[57,22572,22573],{"class":59,"line":2023},[57,22574,1828],{"class":140},[57,22576,22577,22579],{"class":59,"line":2028},[57,22578,5906],{"class":70},[57,22580,5909],{"class":140},[57,22582,22583],{"class":59,"line":2033},[57,22584,1847],{"class":140},[14,22586,22587],{},[33,22588,22589],{},"静态变量的访问",[49,22591,22593],{"className":415,"code":22592,"language":417,"meta":46,"style":46},"#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",[28,22594,22595,22601,22611,22617,22621,22625,22629,22637,22641,22646,22654,22658,22662,22676,22691,22699,22703,22708,22713,22718,22723,22735,22740,22745,22759,22776,22780,22788,22792,22798],{"__ignoreMap":46},[57,22596,22597,22599],{"class":59,"line":60},[57,22598,2223],{"class":136},[57,22600,2226],{"class":74},[57,22602,22603,22605,22607,22609],{"class":59,"line":67},[57,22604,2231],{"class":136},[57,22606,2234],{"class":136},[57,22608,2237],{"class":70},[57,22610,1576],{"class":140},[57,22612,22613,22615],{"class":59,"line":144},[57,22614,14966],{"class":136},[57,22616,15443],{"class":70},[57,22618,22619],{"class":59,"line":150},[57,22620,1828],{"class":140},[57,22622,22623],{"class":59,"line":162},[57,22624,14988],{"class":136},[57,22626,22627],{"class":59,"line":180},[57,22628,22449],{"class":63},[57,22630,22631,22633,22635],{"class":59,"line":186},[57,22632,11293],{"class":136},[57,22634,2655],{"class":136},[57,22636,21664],{"class":140},[57,22638,22639],{"class":59,"line":197},[57,22640,15494],{"class":136},[57,22642,22643],{"class":59,"line":241},[57,22644,22645],{"class":63},"    \u002F\u002F静态成员变量也是有访问权限的\n",[57,22647,22648,22650,22652],{"class":59,"line":249},[57,22649,11293],{"class":136},[57,22651,2655],{"class":136},[57,22653,21671],{"class":140},[57,22655,22656],{"class":59,"line":262},[57,22657,4268],{"class":140},[57,22659,22660],{"class":59,"line":281},[57,22661,22466],{"class":63},[57,22663,22664,22666,22668,22670,22672,22674],{"class":59,"line":287},[57,22665,429],{"class":136},[57,22667,15841],{"class":70},[57,22669,22475],{"class":140},[57,22671,156],{"class":136},[57,22673,862],{"class":81},[57,22675,1576],{"class":140},[57,22677,22678,22680,22682,22685,22687,22689],{"class":59,"line":298},[57,22679,429],{"class":136},[57,22681,15841],{"class":70},[57,22683,22684],{"class":140},"::m_B",[57,22686,156],{"class":136},[57,22688,1116],{"class":81},[57,22690,1576],{"class":140},[57,22692,22693,22695,22697],{"class":59,"line":311},[57,22694,5637],{"class":136},[57,22696,5930],{"class":70},[57,22698,2249],{"class":140},[57,22700,22701],{"class":59,"line":322},[57,22702,1828],{"class":140},[57,22704,22705],{"class":59,"line":1929},[57,22706,22707],{"class":63},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[57,22709,22710],{"class":59,"line":1950},[57,22711,22712],{"class":63},"    \u002F\u002F静态成员变量有两种访问方式：\n",[57,22714,22715],{"class":59,"line":1955},[57,22716,22717],{"class":63},"    \u002F\u002F1.通过对象进行访问\n",[57,22719,22720],{"class":59,"line":1969},[57,22721,22722],{"class":140},"    Person p;  \n",[57,22724,22725,22727,22729,22731,22733],{"class":59,"line":1974},[57,22726,1833],{"class":140},[57,22728,1459],{"class":136},[57,22730,22373],{"class":140},[57,22732,1459],{"class":136},[57,22734,1481],{"class":140},[57,22736,22737],{"class":59,"line":2001},[57,22738,22739],{"class":63},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[57,22741,22742],{"class":59,"line":2006},[57,22743,22744],{"class":63},"    \u002F\u002F2.通过类名进行访问\n",[57,22746,22747,22749,22751,22753,22755,22757],{"class":59,"line":2023},[57,22748,1833],{"class":140},[57,22750,1459],{"class":136},[57,22752,19318],{"class":70},[57,22754,22475],{"class":140},[57,22756,1459],{"class":136},[57,22758,1481],{"class":140},[57,22760,22761,22763,22765,22767,22769,22771,22773],{"class":59,"line":2028},[57,22762,1833],{"class":140},[57,22764,1459],{"class":136},[57,22766,19318],{"class":70},[57,22768,22684],{"class":140},[57,22770,1459],{"class":136},[57,22772,1524],{"class":140},[57,22774,22775],{"class":63}," \u002F\u002F没有访问权限，报错\n",[57,22777,22778],{"class":59,"line":2033},[57,22779,1847],{"class":140},[57,22781,22782,22784,22786],{"class":59,"line":2038},[57,22783,429],{"class":136},[57,22785,2246],{"class":70},[57,22787,2249],{"class":140},[57,22789,22790],{"class":59,"line":2052},[57,22791,1828],{"class":140},[57,22793,22794,22796],{"class":59,"line":2057},[57,22795,5975],{"class":70},[57,22797,5909],{"class":140},[57,22799,22800],{"class":59,"line":2850},[57,22801,1847],{"class":140},[22270,22803,22805],{"id":22804},"_8282静态成员函数","8.2.8.2静态成员函数",[14,22807,22808],{},"1.静态成员函数定义与访问",[49,22810,22812],{"className":415,"code":22811,"language":417,"meta":46,"style":46},"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",[28,22813,22814,22820,22824,22828,22833,22844,22848,22862,22866,22870,22878,22882,22887,22892,22896,22904,22909,22919],{"__ignoreMap":46},[57,22815,22816,22818],{"class":59,"line":60},[57,22817,14966],{"class":136},[57,22819,15443],{"class":70},[57,22821,22822],{"class":59,"line":67},[57,22823,1828],{"class":140},[57,22825,22826],{"class":59,"line":144},[57,22827,14988],{"class":136},[57,22829,22830],{"class":59,"line":150},[57,22831,22832],{"class":63},"    \u002F\u002F在公共权限下定义静态成员函数\n",[57,22834,22835,22837,22840,22842],{"class":59,"line":162},[57,22836,11293],{"class":136},[57,22838,22839],{"class":136}," void",[57,22841,11658],{"class":70},[57,22843,2249],{"class":140},[57,22845,22846],{"class":59,"line":180},[57,22847,2303],{"class":140},[57,22849,22850,22853,22855,22858,22860],{"class":59,"line":186},[57,22851,22852],{"class":140},"        coout",[57,22854,1459],{"class":136},[57,22856,22857],{"class":74},"\"静态成员函数的调用\"",[57,22859,1459],{"class":136},[57,22861,1481],{"class":140},[57,22863,22864],{"class":59,"line":197},[57,22865,2460],{"class":140},[57,22867,22868],{"class":59,"line":241},[57,22869,4268],{"class":140},[57,22871,22872,22874,22876],{"class":59,"line":249},[57,22873,5637],{"class":136},[57,22875,5861],{"class":70},[57,22877,2249],{"class":140},[57,22879,22880],{"class":59,"line":262},[57,22881,1828],{"class":140},[57,22883,22884],{"class":59,"line":281},[57,22885,22886],{"class":63},"    \u002F\u002F静态成员函数的调用方式:\n",[57,22888,22889],{"class":59,"line":287},[57,22890,22891],{"class":63},"    \u002F\u002F1.通过对象访问\n",[57,22893,22894],{"class":59,"line":298},[57,22895,15585],{"class":140},[57,22897,22898,22900,22902],{"class":59,"line":311},[57,22899,16138],{"class":140},[57,22901,11824],{"class":70},[57,22903,5909],{"class":140},[57,22905,22906],{"class":59,"line":322},[57,22907,22908],{"class":63},"    \u002F\u002F2.通过类名访问\n",[57,22910,22911,22913,22915,22917],{"class":59,"line":1929},[57,22912,18791],{"class":70},[57,22914,18004],{"class":140},[57,22916,11824],{"class":70},[57,22918,5909],{"class":140},[57,22920,22921],{"class":59,"line":1950},[57,22922,1847],{"class":140},[377,22924,22925],{"start":67},[380,22926,22927],{},"静态成员函数只能访问静态成员变量",[49,22929,22931],{"className":415,"code":22930,"language":417,"meta":46,"style":46},"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",[28,22932,22933,22939,22943,22947,22951,22961,22965,22979,22984,22996,23000,23011,23021,23025,23029,23033,23043,23047,23060,23064,23068,23072,23076,23090,23098,23102,23106,23110,23114,23122,23126,23136,23141,23145,23153,23157,23163],{"__ignoreMap":46},[57,22934,22935,22937],{"class":59,"line":60},[57,22936,14966],{"class":136},[57,22938,15443],{"class":70},[57,22940,22941],{"class":59,"line":67},[57,22942,1828],{"class":140},[57,22944,22945],{"class":59,"line":144},[57,22946,14988],{"class":136},[57,22948,22949],{"class":59,"line":150},[57,22950,22832],{"class":63},[57,22952,22953,22955,22957,22959],{"class":59,"line":162},[57,22954,11293],{"class":136},[57,22956,22839],{"class":136},[57,22958,11658],{"class":70},[57,22960,2249],{"class":140},[57,22962,22963],{"class":59,"line":180},[57,22964,2303],{"class":140},[57,22966,22967,22970,22972,22974,22976],{"class":59,"line":186},[57,22968,22969],{"class":140},"        m_A",[57,22971,156],{"class":136},[57,22973,728],{"class":81},[57,22975,478],{"class":140},[57,22977,22978],{"class":63}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[57,22980,22981],{"class":59,"line":197},[57,22982,22983],{"class":63},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[57,22985,22986,22988,22990,22992,22994],{"class":59,"line":241},[57,22987,22852],{"class":140},[57,22989,1459],{"class":136},[57,22991,22857],{"class":74},[57,22993,1459],{"class":136},[57,22995,1481],{"class":140},[57,22997,22998],{"class":59,"line":249},[57,22999,2460],{"class":140},[57,23001,23002,23004,23006,23008],{"class":59,"line":262},[57,23003,11293],{"class":136},[57,23005,2655],{"class":136},[57,23007,15720],{"class":140},[57,23009,23010],{"class":63}," \u002F\u002F静态成员变量\n",[57,23012,23013,23015,23018],{"class":59,"line":281},[57,23014,2258],{"class":136},[57,23016,23017],{"class":140}," m_B;",[57,23019,23020],{"class":63}," \u002F\u002F非静态成员变量\n",[57,23022,23023],{"class":59,"line":287},[57,23024,2673],{"emptyLinePlaceholder":350},[57,23026,23027],{"class":59,"line":298},[57,23028,15494],{"class":136},[57,23030,23031],{"class":59,"line":311},[57,23032,22645],{"class":63},[57,23034,23035,23037,23039,23041],{"class":59,"line":322},[57,23036,11293],{"class":136},[57,23038,22839],{"class":136},[57,23040,13891],{"class":70},[57,23042,2249],{"class":140},[57,23044,23045],{"class":59,"line":1929},[57,23046,2303],{"class":140},[57,23048,23049,23051,23053,23056,23058],{"class":59,"line":1950},[57,23050,3724],{"class":140},[57,23052,1459],{"class":136},[57,23054,23055],{"class":74},"\"这是私有权限下的静态函数调用\"",[57,23057,1459],{"class":136},[57,23059,1481],{"class":140},[57,23061,23062],{"class":59,"line":1955},[57,23063,2460],{"class":140},[57,23065,23066],{"class":59,"line":1969},[57,23067,2673],{"emptyLinePlaceholder":350},[57,23069,23070],{"class":59,"line":1974},[57,23071,2673],{"emptyLinePlaceholder":350},[57,23073,23074],{"class":59,"line":2001},[57,23075,4268],{"class":140},[57,23077,23078,23080,23082,23084,23086,23088],{"class":59,"line":2006},[57,23079,429],{"class":136},[57,23081,15841],{"class":70},[57,23083,22475],{"class":140},[57,23085,156],{"class":136},[57,23087,226],{"class":81},[57,23089,1576],{"class":140},[57,23091,23092,23094,23096],{"class":59,"line":2023},[57,23093,5637],{"class":136},[57,23095,5861],{"class":70},[57,23097,2249],{"class":140},[57,23099,23100],{"class":59,"line":2028},[57,23101,1828],{"class":140},[57,23103,23104],{"class":59,"line":2033},[57,23105,22886],{"class":63},[57,23107,23108],{"class":59,"line":2038},[57,23109,22891],{"class":63},[57,23111,23112],{"class":59,"line":2052},[57,23113,15585],{"class":140},[57,23115,23116,23118,23120],{"class":59,"line":2057},[57,23117,16138],{"class":140},[57,23119,11824],{"class":70},[57,23121,5909],{"class":140},[57,23123,23124],{"class":59,"line":2850},[57,23125,22908],{"class":63},[57,23127,23128,23130,23132,23134],{"class":59,"line":2864},[57,23129,18791],{"class":70},[57,23131,18004],{"class":140},[57,23133,11824],{"class":70},[57,23135,5909],{"class":140},[57,23137,23138],{"class":59,"line":2872},[57,23139,23140],{"class":63},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[57,23142,23143],{"class":59,"line":2877},[57,23144,1847],{"class":140},[57,23146,23147,23149,23151],{"class":59,"line":2883},[57,23148,429],{"class":136},[57,23150,2246],{"class":70},[57,23152,2249],{"class":140},[57,23154,23155],{"class":59,"line":2889},[57,23156,1828],{"class":140},[57,23158,23159,23161],{"class":59,"line":2894},[57,23160,5906],{"class":70},[57,23162,5909],{"class":140},[57,23164,23165],{"class":59,"line":8221},[57,23166,1847],{"class":140},[394,23168,23170],{"id":23169},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22270,23172,23174],{"id":23173},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,23176,23177],{},"在c++中，类内的成员变量和成员函数分开存储",[14,23179,23180],{},"只有非静态成员变量才属于类的对象上",[23182,23183,23185],"h5",{"id":23184},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[49,23187,23189],{"className":415,"code":23188,"language":417,"meta":46,"style":46},"#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",[28,23190,23191,23198,23208,23214,23218,23222,23226,23234,23238,23242,23265,23269,23277,23281,23287],{"__ignoreMap":46},[57,23192,23193,23195],{"class":59,"line":60},[57,23194,2223],{"class":136},[57,23196,23197],{"class":74},"\u003Ciostraem>\n",[57,23199,23200,23202,23204,23206],{"class":59,"line":67},[57,23201,2231],{"class":136},[57,23203,2234],{"class":136},[57,23205,2237],{"class":70},[57,23207,1576],{"class":140},[57,23209,23210,23212],{"class":59,"line":144},[57,23211,14966],{"class":136},[57,23213,15443],{"class":70},[57,23215,23216],{"class":59,"line":150},[57,23217,1828],{"class":140},[57,23219,23220],{"class":59,"line":162},[57,23221,2673],{"emptyLinePlaceholder":350},[57,23223,23224],{"class":59,"line":180},[57,23225,4268],{"class":140},[57,23227,23228,23230,23232],{"class":59,"line":186},[57,23229,5637],{"class":136},[57,23231,5861],{"class":70},[57,23233,2249],{"class":140},[57,23235,23236],{"class":59,"line":197},[57,23237,1828],{"class":140},[57,23239,23240],{"class":59,"line":241},[57,23241,15585],{"class":140},[57,23243,23244,23246,23248,23251,23253,23256,23258,23260,23262],{"class":59,"line":249},[57,23245,1833],{"class":140},[57,23247,1459],{"class":136},[57,23249,23250],{"class":74},"\"size of p=\"",[57,23252,1459],{"class":136},[57,23254,23255],{"class":70},"sizeoif",[57,23257,6812],{"class":140},[57,23259,1459],{"class":136},[57,23261,1524],{"class":140},[57,23263,23264],{"class":63}," \u002F\u002F查看这个空类的占用的内存空间\n",[57,23266,23267],{"class":59,"line":262},[57,23268,1847],{"class":140},[57,23270,23271,23273,23275],{"class":59,"line":281},[57,23272,429],{"class":136},[57,23274,2246],{"class":70},[57,23276,2249],{"class":140},[57,23278,23279],{"class":59,"line":287},[57,23280,1828],{"class":140},[57,23282,23283,23285],{"class":59,"line":298},[57,23284,5906],{"class":70},[57,23286,5909],{"class":140},[57,23288,23289],{"class":59,"line":311},[57,23290,1847],{"class":140},[14,23292,23293],{},"输出结果为：size of p=1",[14,23295,23296],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,23298,23299],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23182,23301,23303],{"id":23302},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[49,23305,23307],{"className":415,"code":23306,"language":417,"meta":46,"style":46},"#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",[28,23308,23309,23315,23325,23333,23337,23346,23350,23358,23362,23366,23385,23389,23393,23401,23405,23411],{"__ignoreMap":46},[57,23310,23311,23313],{"class":59,"line":60},[57,23312,2223],{"class":136},[57,23314,2226],{"class":74},[57,23316,23317,23319,23321,23323],{"class":59,"line":67},[57,23318,2231],{"class":136},[57,23320,2234],{"class":136},[57,23322,2237],{"class":70},[57,23324,1576],{"class":140},[57,23326,23327,23329,23331],{"class":59,"line":144},[57,23328,14966],{"class":136},[57,23330,15841],{"class":70},[57,23332,2947],{"class":140},[57,23334,23335],{"class":59,"line":150},[57,23336,1828],{"class":140},[57,23338,23339,23341,23343],{"class":59,"line":162},[57,23340,2258],{"class":136},[57,23342,15720],{"class":140},[57,23344,23345],{"class":63},"\u002F\u002F非静态成员变量\n",[57,23347,23348],{"class":59,"line":180},[57,23349,4268],{"class":140},[57,23351,23352,23354,23356],{"class":59,"line":186},[57,23353,5637],{"class":136},[57,23355,5861],{"class":70},[57,23357,2249],{"class":140},[57,23359,23360],{"class":59,"line":197},[57,23361,1828],{"class":140},[57,23363,23364],{"class":59,"line":241},[57,23365,15585],{"class":140},[57,23367,23368,23370,23372,23374,23376,23378,23380,23382],{"class":59,"line":249},[57,23369,1833],{"class":140},[57,23371,1459],{"class":136},[57,23373,23250],{"class":74},[57,23375,1655],{"class":136},[57,23377,6812],{"class":140},[57,23379,1459],{"class":136},[57,23381,1524],{"class":140},[57,23383,23384],{"class":63}," \u002F\u002F查看不是空对象时占用多少内存\n",[57,23386,23387],{"class":59,"line":262},[57,23388,2673],{"emptyLinePlaceholder":350},[57,23390,23391],{"class":59,"line":281},[57,23392,1847],{"class":140},[57,23394,23395,23397,23399],{"class":59,"line":287},[57,23396,429],{"class":136},[57,23398,2246],{"class":70},[57,23400,2249],{"class":140},[57,23402,23403],{"class":59,"line":298},[57,23404,1828],{"class":140},[57,23406,23407,23409],{"class":59,"line":311},[57,23408,5906],{"class":70},[57,23410,5909],{"class":140},[57,23412,23413],{"class":59,"line":322},[57,23414,1847],{"class":140},[14,23416,23417],{},"输出结果：size of p=4",[14,23419,23420],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[377,23422,23423],{},[380,23424,23425],{},"如果加上非静态成员变量，Person类修改如下",[49,23427,23429],{"className":415,"code":23428,"language":417,"meta":46,"style":46},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[28,23430,23431,23437,23441,23447,23455,23459,23464],{"__ignoreMap":46},[57,23432,23433,23435],{"class":59,"line":60},[57,23434,14966],{"class":136},[57,23436,15443],{"class":70},[57,23438,23439],{"class":59,"line":67},[57,23440,1828],{"class":140},[57,23442,23443,23445],{"class":59,"line":144},[57,23444,2258],{"class":136},[57,23446,21664],{"class":140},[57,23448,23449,23451,23453],{"class":59,"line":150},[57,23450,11293],{"class":136},[57,23452,2655],{"class":136},[57,23454,21671],{"class":140},[57,23456,23457],{"class":59,"line":162},[57,23458,4268],{"class":140},[57,23460,23461],{"class":59,"line":180},[57,23462,23463],{"class":63},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[57,23465,23466,23468,23470,23472,23474,23476],{"class":59,"line":186},[57,23467,429],{"class":136},[57,23469,15841],{"class":70},[57,23471,22684],{"class":140},[57,23473,156],{"class":136},[57,23475,226],{"class":81},[57,23477,1576],{"class":140},[14,23479,23480],{},"输出结果：4",[14,23482,23483],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[377,23485,23486],{"start":67},[380,23487,23488],{},"加上非静态成员函数",[49,23490,23492],{"className":415,"code":23491,"language":417,"meta":46,"style":46},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[28,23493,23494,23501,23505,23511,23519,23523,23527,23531],{"__ignoreMap":46},[57,23495,23496,23498],{"class":59,"line":60},[57,23497,14966],{"class":136},[57,23499,23500],{"class":70},"  Person\n",[57,23502,23503],{"class":59,"line":67},[57,23504,1828],{"class":140},[57,23506,23507,23509],{"class":59,"line":144},[57,23508,2258],{"class":136},[57,23510,21664],{"class":140},[57,23512,23513,23515,23517],{"class":59,"line":150},[57,23514,15181],{"class":136},[57,23516,11658],{"class":70},[57,23518,2249],{"class":140},[57,23520,23521],{"class":59,"line":162},[57,23522,2303],{"class":140},[57,23524,23525],{"class":59,"line":180},[57,23526,2673],{"emptyLinePlaceholder":350},[57,23528,23529],{"class":59,"line":186},[57,23530,2460],{"class":140},[57,23532,23533],{"class":59,"line":197},[57,23534,4268],{"class":140},[14,23536,23537],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[377,23539,23540],{"start":144},[380,23541,23542],{},"加上静态成员函数",[49,23544,23546],{"className":415,"code":23545,"language":417,"meta":46,"style":46},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[28,23547,23548,23554,23558,23564,23572,23576,23580,23584,23595,23599,23603,23607],{"__ignoreMap":46},[57,23549,23550,23552],{"class":59,"line":60},[57,23551,14966],{"class":136},[57,23553,23500],{"class":70},[57,23555,23556],{"class":59,"line":67},[57,23557,1828],{"class":140},[57,23559,23560,23562],{"class":59,"line":144},[57,23561,2258],{"class":136},[57,23563,21664],{"class":140},[57,23565,23566,23568,23570],{"class":59,"line":150},[57,23567,15181],{"class":136},[57,23569,11658],{"class":70},[57,23571,2249],{"class":140},[57,23573,23574],{"class":59,"line":162},[57,23575,2303],{"class":140},[57,23577,23578],{"class":59,"line":180},[57,23579,2673],{"emptyLinePlaceholder":350},[57,23581,23582],{"class":59,"line":186},[57,23583,2460],{"class":140},[57,23585,23586,23588,23590,23593],{"class":59,"line":197},[57,23587,11293],{"class":136},[57,23589,22839],{"class":136},[57,23591,23592],{"class":70}," func1",[57,23594,2249],{"class":140},[57,23596,23597],{"class":59,"line":241},[57,23598,2303],{"class":140},[57,23600,23601],{"class":59,"line":249},[57,23602,2673],{"emptyLinePlaceholder":350},[57,23604,23605],{"class":59,"line":262},[57,23606,2460],{"class":140},[57,23608,23609],{"class":59,"line":281},[57,23610,4268],{"class":140},[14,23612,23480],{},[14,23614,23615],{},"解释：静态成员函数也不属于类上",[342,23617,7947],{},{"title":46,"searchDepth":67,"depth":67,"links":23619},[23620,23626],{"id":14917,"depth":67,"text":14918,"children":23621},[23622,23623,23624,23625],{"id":14921,"depth":144,"text":14922},{"id":15646,"depth":144,"text":15647},{"id":15818,"depth":144,"text":15819},{"id":16277,"depth":144,"text":16278},{"id":18649,"depth":67,"text":18650,"children":23627},[23628,23629,23630,23631,23632,23633,23634,23635,23636],{"id":18661,"depth":144,"text":18662},{"id":18954,"depth":144,"text":18955},{"id":19445,"depth":144,"text":19446},{"id":20542,"depth":144,"text":20543},{"id":20965,"depth":144,"text":20966},{"id":21444,"depth":144,"text":21445},{"id":21819,"depth":144,"text":21820},{"id":22232,"depth":144,"text":22233},{"id":23169,"depth":144,"text":23170},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14882,"description":23637},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23644,"title":417,"body":23645,"description":347,"extension":348,"meta":23649,"navigation":350,"path":23651,"seo":23652,"stem":23653,"__hash__":23654},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23646,"toc":23647},[],{"title":46,"searchDepth":67,"depth":67,"links":23648},[],{"category":23650},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":417,"description":347},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23656,"title":23657,"body":23658,"description":46,"extension":348,"meta":24245,"navigation":350,"path":24246,"seo":24247,"stem":24248,"__hash__":24249},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23659,"toc":24227},[23660,23663,23667,23670,23673,23676,23694,23699,23702,23705,23708,23711,23716,23719,23724,23727,23730,23734,23737,23740,23746,23749,23767,23771,23775,23778,23783,23786,23790,23793,23806,23809,23813,23816,23819,23822,23847,23850,23859,23870,23885,23917,23921,23928,23936,23940,23943,23946,23951,23955,23958,23961,23966,23969,23973,23976,23979,23984,23987,23991,23996,24000,24067,24071,24074,24077,24080,24083,24086,24092,24110,24113,24127,24135,24139,24142,24145,24150,24153,24158,24163,24166,24169,24174,24179,24182,24187,24192,24195,24200,24205,24208,24211,24216,24219,24224],[10,23661,23657],{"id":23662},"_1强化学习基本认识",[365,23664,23666],{"id":23665},"_11什么是强化学习","1.1.什么是强化学习",[14,23668,23669],{},"强化学习有两部分组成：智能体和环境；",[14,23671,23672],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,23674,23675],{},"强化学习与监督学习的区别:",[377,23677,23678,23681,23684,23687],{},[380,23679,23680],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[380,23682,23683],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[380,23685,23686],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[380,23688,23689,23690,23693],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[33,23691,23692],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,23695,23696],{},[44,23697],{"alt":46,"src":23698},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,23700,23701],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,23703,23704],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,23706,23707],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,23709,23710],{},"获取奖励",[14,23712,23713],{},[44,23714],{"alt":46,"src":23715},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,23717,23718],{},"强化学习可以分成标准强化学习和深度强化学习",[14,23720,23721],{},[44,23722],{"alt":46,"src":23723},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,23725,23726],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,23728,23729],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[365,23731,23733],{"id":23732},"_12强化学习应用场景","1.2.强化学习应用场景",[14,23735,23736],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,23738,23739],{},"具身智能中的应用",[14,23741,23742,23745],{},[33,23743,23744],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,23747,23748],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,23750,23751,23752,23755,23756,23759,23760,23763,23764],{},"机器人是",[33,23753,23754],{},"躯体","，深度学习是",[33,23757,23758],{},"神经元****网络","，VLA是",[33,23761,23762],{},"通用的行为逻辑","，而强化学习是",[33,23765,23766],{},"教练",[365,23768,23770],{"id":23769},"_13序列决策","1.3.序列决策",[394,23772,23774],{"id":23773},"_131智能体与环境","1.3.1.智能体与环境",[14,23776,23777],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,23779,23780],{},[44,23781],{"alt":46,"src":23782},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,23784,23785],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[394,23787,23789],{"id":23788},"_132奖励","1.3.2.奖励",[14,23791,23792],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,23794,23795,23796,23805],{},"取某个策略的表现如何。强化学习的目的就是",[33,23797,23798,23799,23804],{},"最大化",[33,23800,23801],{},[33,23802,23803],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,23807,23808],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[394,23810,23812],{"id":23811},"_133序列决策","1.3.3.序列决策",[14,23814,23815],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,23817,23818],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,23820,23821],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,23823,23824,23828,23829,23831,23832,23834,23835,23837,23838,14067,23841,14067,23844],{},[23825,23826,23827],"em",{},"Ht"," = ",[23825,23830,1012],{},"1*, a",[23825,23833,635],{},", r",[23825,23836,635],{},", . . . ,* ",[23825,23839,23840],{},"ot",[23825,23842,23843],{},", at ,",[23825,23845,23846],{},"rt",[14,23848,23849],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,23851,23852,23828,23855,1934,23857,845],{},[23825,23853,23854],{},"st",[23825,23856,475],{},[23825,23858,23827],{},[14,23860,23861,23862,23865,23866,23869],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[33,23863,23864],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[33,23867,23868],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,23871,23872,23873,23876,23877,23880,23881,23884],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[33,23874,23875],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[33,23878,23879],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23825,23882,23883],{},"S, A, T, R, Ω, O, γ",")。",[14,23886,23887,23888,23890,23891,23893,23894,168,23896,23899,23900,23902,23903,168,23906,23909,23910,23912,23913,23916],{},"其中 ",[23825,23889,1105],{}," 表示状态空间，为隐变量，",[23825,23892,650],{}," 为动作空间，",[23825,23895,1130],{},[23825,23897,23898],{},"s ′ |s, a",") 为状态转移概率，",[23825,23901,1080],{}," 为奖励函数，",[23825,23904,23905],{},"Ω",[23825,23907,23908],{},"o|s, a",") 为观测概率，",[23825,23911,1006],{}," 为观测空间，",[23825,23914,23915],{},"γ"," 为折扣因子。",[365,23918,23920],{"id":23919},"_14动作空间","1.4.动作空间",[14,23922,23923,23924,23927],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[33,23925,23926],{},"动作空间"," ，动作空间分为:",[377,23929,23930,23933],{},[380,23931,23932],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[380,23934,23935],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[365,23937,23939],{"id":23938},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,23941,23942],{},"由策略、价值函数、模型三部分组成",[14,23944,23945],{},"这三者组成马尔可夫决策过程",[14,23947,23948],{},[44,23949],{"alt":46,"src":23950},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[394,23952,23954],{"id":23953},"_151策略","1.5.1.策略",[14,23956,23957],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,23959,23960],{},"策略可分为两种：",[14,23962,23963],{},[44,23964],{"alt":46,"src":23965},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,23967,23968],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[394,23970,23972],{"id":23971},"_152价值函数","1.5.2.价值函数",[14,23974,23975],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,23977,23978],{},"价值函数中有一个折扣因子，类似于存款利息",[14,23980,23981],{},[44,23982],{"alt":46,"src":23983},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,23985,23986],{},"进入某个状态采取的最优动作可以通过Q函数得到",[394,23988,23990],{"id":23989},"_153模型","1.5.3.模型",[14,23992,23993],{},[44,23994],{"alt":46,"src":23995},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[365,23997,23999],{"id":23998},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[557,24001,24002,24013],{},[560,24003,24004],{},[563,24005,24006,24010],{},[566,24007,24009],{"align":24008},"left","类型",[566,24011,24012],{"align":24008},"特点",[603,24014,24015,24025,24035,24045,24057],{},[563,24016,24017,24022],{},[608,24018,24019],{"align":24008},[33,24020,24021],{},"基于价值的智能体",[608,24023,24024],{"align":24008},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[563,24026,24027,24032],{},[608,24028,24029],{"align":24008},[33,24030,24031],{},"基于策略的智能体",[608,24033,24034],{"align":24008},"直接学习策略，没有学习价值函数",[563,24036,24037,24042],{},[608,24038,24039],{"align":24008},[33,24040,24041],{},"演员-评论员智能体",[608,24043,24044],{"align":24008},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[563,24046,24047,24052],{},[608,24048,24049],{"align":24008},[33,24050,24051],{},"有模型强化学习智能体",[608,24053,24054],{"align":24008},[44,24055],{"alt":46,"src":24056},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[563,24058,24059,24064],{},[608,24060,24061],{"align":24008},[33,24062,24063],{},"免模型强化学习智能体",[608,24065,24066],{"align":24008},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[365,24068,24070],{"id":24069},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,24072,24073],{},"学习和规划是序列决策的两个基本问题",[14,24075,24076],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,24078,24079],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,24081,24082],{},"强化学习用到的库：Gym",[14,24084,24085],{},"Gym可以检验强化学习算法的优劣",[14,24087,24088,24091],{},[33,24089,24090],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[49,24093,24095],{"className":51,"code":24094,"language":53,"meta":46,"style":46},"pip install gym==0.25.2\n",[28,24096,24097],{"__ignoreMap":46},[57,24098,24099,24102,24104,24107],{"class":59,"line":60},[57,24100,24101],{"class":70},"pip",[57,24103,75],{"class":74},[57,24105,24106],{"class":74}," gym==",[57,24108,24109],{"class":81},"0.25.2\n",[14,24111,24112],{},"显示图形界面需要",[49,24114,24116],{"className":51,"code":24115,"language":53,"meta":46,"style":46},"pip install pygame\n",[28,24117,24118],{"__ignoreMap":46},[57,24119,24120,24122,24124],{"class":59,"line":60},[57,24121,24101],{"class":70},[57,24123,75],{"class":74},[57,24125,24126],{"class":74}," pygame\n",[14,24128,24129,24130],{},"有关Gym库的相关文档介绍：",[18,24131,24134],{"href":24132,"rel":24133},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[22],"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[365,24136,24138],{"id":24137},"_18一些补充基础概念","1.8.一些补充基础概念",[14,24140,24141],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,24143,24144],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,24146,24147],{},[44,24148],{"alt":46,"src":24149},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,24151,24152],{},"折扣率需要自己来设定",[14,24154,24155],{},[44,24156],{"alt":46,"src":24157},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[377,24159,24160],{},[380,24161,24162],{},"状态转移函数：",[14,24164,24165],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,24167,24168],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,24170,24171],{},[44,24172],{"alt":46,"src":24173},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[377,24175,24176],{"start":67},[380,24177,24178],{},"动作价值函数：",[14,24180,24181],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,24183,24184],{},[44,24185],{"alt":46,"src":24186},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[377,24188,24189],{"start":144},[380,24190,24191],{},"最优动作价值函数：",[14,24193,24194],{},"这个函数是对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,24196,24197],{},[44,24198],{"alt":46,"src":24199},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[377,24201,24202],{"start":150},[380,24203,24204],{},"状态价值函数:",[14,24206,24207],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,24209,24210],{},"它衡量的是“一个具体动作”的长期价值",[14,24212,24213],{},[44,24214],{"alt":46,"src":24215},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,24217,24218],{},"几个价值函数之间的比较：",[14,24220,24221],{},[44,24222],{"alt":46,"src":24223},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[342,24225,24226],{},"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":46,"searchDepth":67,"depth":67,"links":24228},[24229,24230,24231,24236,24237,24242,24243,24244],{"id":23665,"depth":67,"text":23666},{"id":23732,"depth":67,"text":23733},{"id":23769,"depth":67,"text":23770,"children":24232},[24233,24234,24235],{"id":23773,"depth":144,"text":23774},{"id":23788,"depth":144,"text":23789},{"id":23811,"depth":144,"text":23812},{"id":23919,"depth":67,"text":23920},{"id":23938,"depth":67,"text":23939,"children":24238},[24239,24240,24241],{"id":23953,"depth":144,"text":23954},{"id":23971,"depth":144,"text":23972},{"id":23989,"depth":144,"text":23990},{"id":23998,"depth":67,"text":23999},{"id":24069,"depth":67,"text":24070},{"id":24137,"depth":67,"text":24138},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23657,"description":46},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24251,"title":24252,"body":24253,"description":24260,"extension":348,"meta":24271,"navigation":350,"path":24272,"seo":24273,"stem":24274,"__hash__":24275},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24254,"toc":24269},[24255,24258,24261,24266],[10,24256,24252],{"id":24257},"_2马尔可夫决策过程",[14,24259,24260],{},"这是强化学习的基本框架",[14,24262,24263],{},[44,24264],{"alt":46,"src":24265},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,24267,24268],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":46,"searchDepth":67,"depth":67,"links":24270},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24252,"description":24260},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24277,"title":24278,"body":24279,"description":46,"extension":348,"meta":24395,"navigation":350,"path":24396,"seo":24397,"stem":24398,"__hash__":24399},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24280,"toc":24390},[24281,24284,24288,24291,24296,24301,24304,24309,24312,24317,24320,24324,24329,24332,24337,24342,24347,24350,24354,24359,24362,24367,24372,24377,24382,24385],[10,24282,24278],{"id":24283},"_3动作价值函数",[365,24285,24287],{"id":24286},"_31dqn","3.1.DQN",[14,24289,24290],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,24292,24293],{},[44,24294],{"alt":46,"src":24295},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,24297,24298],{},[44,24299],{"alt":46,"src":24300},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,24302,24303],{},"DQN算法的描述：",[14,24305,24306],{},[44,24307],{"alt":46,"src":24308},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,24310,24311],{},"这里的Dense指的是全连接层",[14,24313,24314],{},[44,24315],{"alt":46,"src":24316},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,24318,24319],{},"当前观测的状态为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算法",[365,24321,24323],{"id":24322},"_32dqn的举例","3.2.DQN的举例",[14,24325,24326],{},[44,24327],{"alt":46,"src":24328},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,24330,24331],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,24333,24334],{},[44,24335],{"alt":46,"src":24336},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,24338,24339],{},[44,24340],{"alt":46,"src":24341},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,24343,24344],{},[44,24345],{"alt":46,"src":24346},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,24348,24349],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[365,24351,24353],{"id":24352},"_33td算法","3.3.TD算法",[14,24355,24356],{},[44,24357],{"alt":46,"src":24358},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,24360,24361],{},"强化学习TD算法公式的粗略解释：",[14,24363,24364],{},[44,24365],{"alt":46,"src":24366},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,24368,24369],{},[44,24370],{"alt":46,"src":24371},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,24373,24374],{},[44,24375],{"alt":46,"src":24376},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,24378,24379],{},[44,24380],{"alt":46,"src":24381},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,24383,24384],{},"TD算法总结：",[14,24386,24387],{},[44,24388],{"alt":46,"src":24389},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":46,"searchDepth":67,"depth":67,"links":24391},[24392,24393,24394],{"id":24286,"depth":67,"text":24287},{"id":24322,"depth":67,"text":24323},{"id":24352,"depth":67,"text":24353},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24278,"description":46},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24401,"title":24402,"body":24403,"description":46,"extension":348,"meta":24636,"navigation":350,"path":24637,"seo":24638,"stem":24639,"__hash__":24640},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24404,"toc":24632},[24405,24408,24412,24415,24418,24423,24428,24431,24436,24441,24444,24449,24452,24457,24460,24465,24468,24473,24476,24481,24486,24489,24494,24497,24500,24505,24508,24513,24518,24522,24525,24528,24533,24538,24541,24546,24551,24554,24559,24562,24565,24570,24573,24578,24581,24586,24591,24594,24599,24604,24607,24612,24615,24620,24623],[10,24406,24402],{"id":24407},"_4策略学习",[365,24409,24411],{"id":24410},"_41概念描述","4.1.概念描述",[14,24413,24414],{},"用神经网络（策略网络）近似策略函数",[14,24416,24417],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,24419,24420],{},[44,24421],{"alt":46,"src":24422},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,24424,24425],{},[44,24426],{"alt":46,"src":24427},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,24429,24430],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,24432,24433],{},[44,24434],{"alt":46,"src":24435},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,24437,24438],{},[44,24439],{"alt":46,"src":24440},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,24442,24443],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,24445,24446],{},[44,24447],{"alt":46,"src":24448},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,24450,24451],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,24453,24454],{},[44,24455],{"alt":46,"src":24456},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,24458,24459],{},"改进theta要用到策略梯度算法",[14,24461,24462],{},[44,24463],{"alt":46,"src":24464},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,24466,24467],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,24469,24470],{},[44,24471],{"alt":46,"src":24472},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,24474,24475],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,24477,24478],{},[44,24479],{"alt":46,"src":24480},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,24482,24483],{},[44,24484],{"alt":46,"src":24485},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,24487,24488],{},"梯度公式总结：",[14,24490,24491],{},[44,24492],{"alt":46,"src":24493},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,24495,24496],{},"两个公式的分别应用场景：",[14,24498,24499],{},"对于离散的动作：",[14,24501,24502],{},[44,24503],{"alt":46,"src":24504},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,24506,24507],{},"对于连续的动作：",[14,24509,24510],{},[44,24511],{"alt":46,"src":24512},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,24514,24515],{},[44,24516],{"alt":46,"src":24517},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[365,24519,24521],{"id":24520},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,24523,24524],{},"使用蒙特卡洛来近似计算策略梯度",[14,24526,24527],{},"蒙特卡洛法的解释如下：",[14,24529,24530],{},[44,24531],{"alt":46,"src":24532},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,24534,24535],{},[44,24536],{"alt":46,"src":24537},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,24539,24540],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[377,24542,24543],{},[380,24544,24545],{},"方法一：reinforce算法",[14,24547,24548],{},[44,24549],{"alt":46,"src":24550},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,24552,24553],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[377,24555,24556],{"start":67},[380,24557,24558],{},"方法二：actor-critic算法",[14,24560,24561],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,24563,24564],{},"两个网络的构建：",[14,24566,24567],{},[44,24568],{"alt":46,"src":24569},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,24571,24572],{},"actor网路：",[14,24574,24575],{},[44,24576],{"alt":46,"src":24577},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,24579,24580],{},"critic网络",[14,24582,24583],{},[44,24584],{"alt":46,"src":24585},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[377,24587,24588],{"start":144},[380,24589,24590],{},"网络的训练",[14,24592,24593],{},"网络描述",[14,24595,24596],{},[44,24597],{"alt":46,"src":24598},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,24600,24601],{},[44,24602],{"alt":46,"src":24603},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,24605,24606],{},"TD算法更新梯度：",[14,24608,24609],{},[44,24610],{"alt":46,"src":24611},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,24613,24614],{},"策略网络更新梯度：",[14,24616,24617],{},[44,24618],{"alt":46,"src":24619},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,24621,24622],{},"训练整个流程的具体描述：",[14,24624,24625,24628,24629],{},[44,24626],{"alt":46,"src":24627},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[44,24630],{"alt":46,"src":24631},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":46,"searchDepth":67,"depth":67,"links":24633},[24634,24635],{"id":24410,"depth":67,"text":24411},{"id":24520,"depth":67,"text":24521},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24402,"description":46},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24642,"title":24643,"body":24644,"description":24651,"extension":348,"meta":24701,"navigation":350,"path":24702,"seo":24703,"stem":24704,"__hash__":24705},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24645,"toc":24697},[24646,24649,24652,24656,24659,24664,24668,24671,24676,24679,24684,24689,24692],[10,24647,24643],{"id":24648},"_5alphago算法",[14,24650,24651],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[365,24653,24655],{"id":24654},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,24657,24658],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,24660,24661],{},[44,24662],{"alt":46,"src":24663},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[365,24665,24667],{"id":24666},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,24669,24670],{},"采用强化学习的方式训练策略网络",[14,24672,24673],{},[44,24674],{"alt":46,"src":24675},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,24677,24678],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,24680,24681],{},[44,24682],{"alt":46,"src":24683},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,24685,24686],{},[44,24687],{"alt":46,"src":24688},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,24690,24691],{},"强化学习训练策略网络的总结：",[14,24693,24694],{},[44,24695],{"alt":46,"src":24696},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":46,"searchDepth":67,"depth":67,"links":24698},[24699,24700],{"id":24654,"depth":67,"text":24655},{"id":24666,"depth":67,"text":24667},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24643,"description":24651},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24707,"title":24708,"body":24709,"description":24716,"extension":348,"meta":24719,"navigation":350,"path":24720,"seo":24721,"stem":24722,"__hash__":24723},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24710,"toc":24717},[24711,24714],[10,24712,24708],{"id":24713},"_6价值网络",[14,24715,24716],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":46,"searchDepth":67,"depth":67,"links":24718},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24708,"description":24716},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24725,"title":24726,"body":24727,"description":24731,"extension":348,"meta":24732,"navigation":350,"path":24733,"seo":24734,"stem":24735,"__hash__":24736},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24728,"toc":24729},[],{"title":46,"searchDepth":67,"depth":67,"links":24730},[],"记录自己的强化学习笔记。",{"category":23650},"\u002Fwiki\u002F2025-12-04",{"title":24726,"description":24731},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24738,"title":24739,"body":24740,"description":347,"extension":348,"meta":24779,"navigation":350,"path":24780,"seo":24781,"stem":24782,"__hash__":24783},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24741,"toc":24777},[24742,24745,24748,24754,24757,24763,24766,24771,24774],[10,24743,24739],{"id":24744},"_1-项目概览与官方资源",[14,24746,24747],{},"官方文档：",[14,24749,24750],{},[18,24751,24752],{"href":24752,"rel":24753},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[22],[14,24755,24756],{},"官方代码仓库：",[14,24758,24759],{},[18,24760,24761],{"href":24761,"rel":24762},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[22],[14,24764,24765],{},"复现大体流程：",[14,24767,24768],{},[44,24769],{"alt":46,"src":24770},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,24772,24773],{},"本教程的目标是打通这条链路：",[14,24775,24776],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":46,"searchDepth":67,"depth":67,"links":24778},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24739,"description":347},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24785,"title":24786,"body":24787,"description":347,"extension":348,"meta":24903,"navigation":350,"path":24904,"seo":24905,"stem":24906,"__hash__":24907},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24788,"toc":24898},[24789,24792,24796,24799,24806,24810,24813,24822,24832,24836,24866,24869,24895],[10,24790,24786],{"id":24791},"_2-环境准备与设备连接",[365,24793,24795],{"id":24794},"_21-系统与环境","2.1 系统与环境",[14,24797,24798],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,24800,24801,24802,24805],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[28,24803,24804],{},"lerobot"," 依赖。",[365,24807,24809],{"id":24808},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,24811,24812],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[49,24814,24816],{"className":51,"code":24815,"language":53,"meta":46,"style":46},"lerobot-find-out\n",[28,24817,24818],{"__ignoreMap":46},[57,24819,24820],{"class":59,"line":60},[57,24821,24815],{"class":70},[14,24823,24824,24825,630,24828,24831],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[28,24826,24827],{},"\u002Fdev\u002FttyACM0",[28,24829,24830],{},"\u002Fdev\u002FttyACM1","）。",[365,24833,24835],{"id":24834},"_23-串口授权","2.3 串口授权",[49,24837,24839],{"className":51,"code":24838,"language":53,"meta":46,"style":46},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[28,24840,24841,24855],{"__ignoreMap":46},[57,24842,24843,24846,24849,24852],{"class":59,"line":60},[57,24844,24845],{"class":70},"sudo",[57,24847,24848],{"class":74}," chmod",[57,24850,24851],{"class":81}," 666",[57,24853,24854],{"class":74}," \u002Fdev\u002FttyACM0\n",[57,24856,24857,24859,24861,24863],{"class":59,"line":67},[57,24858,24845],{"class":70},[57,24860,24848],{"class":74},[57,24862,24851],{"class":81},[57,24864,24865],{"class":74}," \u002Fdev\u002FttyACM1\n",[14,24867,24868],{},"说明：",[1422,24870,24871,24876,24882,24892],{},[380,24872,24873,24875],{},[28,24874,24845],{},"：以 root 权限执行命令。",[380,24877,24878,24881],{},[28,24879,24880],{},"chmod","：修改设备节点权限。",[380,24883,24884,24887,24888,24891],{},[28,24885,24886],{},"666","：",[28,24889,24890],{},"rw-rw-rw-","，所有用户可读写。",[380,24893,24894],{},"串口号必须替换为你机器上的真实端口。",[342,24896,24897],{},"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":46,"searchDepth":67,"depth":67,"links":24899},[24900,24901,24902],{"id":24794,"depth":67,"text":24795},{"id":24808,"depth":67,"text":24809},{"id":24834,"depth":67,"text":24835},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24786,"description":347},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24909,"title":24910,"body":24911,"description":347,"extension":348,"meta":25072,"navigation":350,"path":25073,"seo":25074,"stem":25075,"__hash__":25076},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24912,"toc":25068},[24913,24917,24921,24927,24930,24987,24990,24994,24997,25065],[10,24914,24916],{"id":24915},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[365,24918,24920],{"id":24919},"_31-配置电机-id","3.1 配置电机 ID",[14,24922,24923,24924,24926],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[28,24925,635],{},"，需要改成机械臂链路里不冲突的编号。",[14,24928,24929],{},"方式一：用 LeRobot 命令逐步写入。",[49,24931,24933],{"className":51,"code":24932,"language":53,"meta":46,"style":46},"# 主臂舵机配置 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",[28,24934,24935,24940,24948,24955,24960,24964,24969,24975,24982],{"__ignoreMap":46},[57,24936,24937],{"class":59,"line":60},[57,24938,24939],{"class":63},"# 主臂舵机配置 ID\n",[57,24941,24942,24945],{"class":59,"line":67},[57,24943,24944],{"class":70},"lerobot-setup-motors",[57,24946,24947],{"class":81}," \\\n",[57,24949,24950,24953],{"class":59,"line":144},[57,24951,24952],{"class":81},"  --teleop.type=so101_leader",[57,24954,24947],{"class":81},[57,24956,24957],{"class":59,"line":150},[57,24958,24959],{"class":81},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[57,24961,24962],{"class":59,"line":162},[57,24963,2673],{"emptyLinePlaceholder":350},[57,24965,24966],{"class":59,"line":180},[57,24967,24968],{"class":63},"# 从臂舵机配置 ID\n",[57,24970,24971,24973],{"class":59,"line":186},[57,24972,24944],{"class":70},[57,24974,24947],{"class":81},[57,24976,24977,24980],{"class":59,"line":197},[57,24978,24979],{"class":81},"  --robot.type=so101_follower",[57,24981,24947],{"class":81},[57,24983,24984],{"class":59,"line":241},[57,24985,24986],{"class":81},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,24988,24989],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[365,24991,24993],{"id":24992},"_32-机械臂校准","3.2 机械臂校准",[14,24995,24996],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[49,24998,25000],{"className":51,"code":24999,"language":53,"meta":46,"style":46},"# 主臂校准\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",[28,25001,25002,25007,25014,25020,25027,25032,25036,25041,25047,25053,25060],{"__ignoreMap":46},[57,25003,25004],{"class":59,"line":60},[57,25005,25006],{"class":63},"# 主臂校准\n",[57,25008,25009,25012],{"class":59,"line":67},[57,25010,25011],{"class":70},"lerobot-calibrate",[57,25013,24947],{"class":81},[57,25015,25016,25018],{"class":59,"line":144},[57,25017,24952],{"class":81},[57,25019,24947],{"class":81},[57,25021,25022,25025],{"class":59,"line":150},[57,25023,25024],{"class":81},"  --teleop.port=\u002Fdev\u002FttyACM0",[57,25026,24947],{"class":81},[57,25028,25029],{"class":59,"line":162},[57,25030,25031],{"class":81},"  --teleop.id=my_awesome_leader_arm\n",[57,25033,25034],{"class":59,"line":180},[57,25035,2673],{"emptyLinePlaceholder":350},[57,25037,25038],{"class":59,"line":186},[57,25039,25040],{"class":63},"# 从臂校准\n",[57,25042,25043,25045],{"class":59,"line":197},[57,25044,25011],{"class":70},[57,25046,24947],{"class":81},[57,25048,25049,25051],{"class":59,"line":241},[57,25050,24979],{"class":81},[57,25052,24947],{"class":81},[57,25054,25055,25058],{"class":59,"line":249},[57,25056,25057],{"class":81},"  --robot.port=\u002Fdev\u002FttyACM1",[57,25059,24947],{"class":81},[57,25061,25062],{"class":59,"line":262},[57,25063,25064],{"class":81},"  --robot.id=my_awesome_follower_arm\n",[342,25066,25067],{},"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":46,"searchDepth":67,"depth":67,"links":25069},[25070,25071],{"id":24919,"depth":67,"text":24920},{"id":24992,"depth":67,"text":24993},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24910,"description":347},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25078,"title":25079,"body":25080,"description":347,"extension":348,"meta":25271,"navigation":350,"path":25272,"seo":25273,"stem":25274,"__hash__":25275},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25081,"toc":25267},[25082,25085,25089,25136,25140,25153,25216,25219,25264],[10,25083,25079],{"id":25084},"_4-遥操与相机接入",[365,25086,25088],{"id":25087},"_41-不带相机遥操","4.1 不带相机遥操",[49,25090,25092],{"className":51,"code":25091,"language":53,"meta":46,"style":46},"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",[28,25093,25094,25101,25107,25113,25120,25126,25132],{"__ignoreMap":46},[57,25095,25096,25099],{"class":59,"line":60},[57,25097,25098],{"class":70},"lerobot-teleoperate",[57,25100,24947],{"class":81},[57,25102,25103,25105],{"class":59,"line":67},[57,25104,24979],{"class":81},[57,25106,24947],{"class":81},[57,25108,25109,25111],{"class":59,"line":144},[57,25110,25057],{"class":81},[57,25112,24947],{"class":81},[57,25114,25115,25118],{"class":59,"line":150},[57,25116,25117],{"class":81},"  --robot.id=my_awesome_follower_arm",[57,25119,24947],{"class":81},[57,25121,25122,25124],{"class":59,"line":162},[57,25123,24952],{"class":81},[57,25125,24947],{"class":81},[57,25127,25128,25130],{"class":59,"line":180},[57,25129,25024],{"class":81},[57,25131,24947],{"class":81},[57,25133,25134],{"class":59,"line":186},[57,25135,25031],{"class":81},[365,25137,25139],{"id":25138},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[49,25141,25143],{"className":51,"code":25142,"language":53,"meta":46,"style":46},"lerobot-find-cameras opencv\n",[28,25144,25145],{"__ignoreMap":46},[57,25146,25147,25150],{"class":59,"line":60},[57,25148,25149],{"class":70},"lerobot-find-cameras",[57,25151,25152],{"class":74}," opencv\n",[49,25154,25156],{"className":51,"code":25155,"language":53,"meta":46,"style":46},"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",[28,25157,25158,25164,25170,25176,25182,25192,25198,25204,25211],{"__ignoreMap":46},[57,25159,25160,25162],{"class":59,"line":60},[57,25161,25098],{"class":70},[57,25163,24947],{"class":81},[57,25165,25166,25168],{"class":59,"line":67},[57,25167,24979],{"class":81},[57,25169,24947],{"class":81},[57,25171,25172,25174],{"class":59,"line":144},[57,25173,25057],{"class":81},[57,25175,24947],{"class":81},[57,25177,25178,25180],{"class":59,"line":150},[57,25179,25117],{"class":81},[57,25181,24947],{"class":81},[57,25183,25184,25187,25190],{"class":59,"line":162},[57,25185,25186],{"class":81},"  --robot.cameras=",[57,25188,25189],{"class":74},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[57,25191,24947],{"class":81},[57,25193,25194,25196],{"class":59,"line":180},[57,25195,24952],{"class":81},[57,25197,24947],{"class":81},[57,25199,25200,25202],{"class":59,"line":186},[57,25201,25024],{"class":81},[57,25203,24947],{"class":81},[57,25205,25206,25209],{"class":59,"line":197},[57,25207,25208],{"class":81},"  --teleop.id=my_awesome_leader_arm",[57,25210,24947],{"class":81},[57,25212,25213],{"class":59,"line":241},[57,25214,25215],{"class":81},"  --display_data=true\n",[14,25217,25218],{},"相机参数说明：",[1422,25220,25221,25227,25233,25242,25252,25258],{},[380,25222,25223,25226],{},[28,25224,25225],{},"front","：相机名称。",[380,25228,25229,25232],{},[28,25230,25231],{},"type: opencv","：相机驱动类型。",[380,25234,25235,25238,25239,24831],{},[28,25236,25237],{},"index_or_path","：设备编号或设备路径（如 ",[28,25240,25241],{},"\u002Fdev\u002Fvideo4",[380,25243,25244,25247,25248,25251],{},[28,25245,25246],{},"width"," \u002F ",[28,25249,25250],{},"height","：图像分辨率。",[380,25253,25254,25257],{},[28,25255,25256],{},"fps","：采样帧率。",[380,25259,25260,25263],{},[28,25261,25262],{},"--display_data=true","：启用实时可视化。",[342,25265,25266],{},"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":46,"searchDepth":67,"depth":67,"links":25268},[25269,25270],{"id":25087,"depth":67,"text":25088},{"id":25138,"depth":67,"text":25139},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25079,"description":347},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25277,"title":25278,"body":25279,"description":347,"extension":348,"meta":25451,"navigation":350,"path":25452,"seo":25453,"stem":25454,"__hash__":25455},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25280,"toc":25446},[25281,25285,25289,25294,25299,25302,25344,25350,25354,25403,25408,25412,25415,25423,25428,25433,25438,25443],[10,25282,25284],{"id":25283},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[365,25286,25288],{"id":25287},"_51-生成访问令牌","5.1 生成访问令牌",[14,25290,25291],{},[44,25292],{"alt":46,"src":25293},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,25295,25296],{},[44,25297],{"alt":46,"src":25298},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,25300,25301],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[49,25303,25305],{"className":51,"code":25304,"language":53,"meta":46,"style":46},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[28,25306,25307,25320],{"__ignoreMap":46},[57,25308,25309,25312,25315,25317],{"class":59,"line":60},[57,25310,25311],{"class":136},"export",[57,25313,25314],{"class":140}," HF_TOKEN",[57,25316,156],{"class":136},[57,25318,25319],{"class":74},"\"your_huggingface_token\"\n",[57,25321,25322,25325,25328,25331,25334,25336,25339,25341],{"class":59,"line":67},[57,25323,25324],{"class":70},"hf",[57,25326,25327],{"class":74}," auth",[57,25329,25330],{"class":74}," login",[57,25332,25333],{"class":81}," --token",[57,25335,9997],{"class":74},[57,25337,25338],{"class":140},"$HF_TOKEN",[57,25340,668],{"class":74},[57,25342,25343],{"class":81}," --add-to-git-credential\n",[14,25345,25346,25349],{},[28,25347,25348],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[365,25351,25353],{"id":25352},"_52-验证登录","5.2 验证登录",[49,25355,25357],{"className":51,"code":25356,"language":53,"meta":46,"style":46},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[28,25358,25359,25390],{"__ignoreMap":46},[57,25360,25361,25364,25366,25369,25371,25373,25376,25379,25382,25385,25388],{"class":59,"line":60},[57,25362,25363],{"class":140},"HF_USER",[57,25365,156],{"class":136},[57,25367,25368],{"class":140},"$(",[57,25370,25324],{"class":70},[57,25372,25327],{"class":74},[57,25374,25375],{"class":74}," whoami",[57,25377,25378],{"class":136}," |",[57,25380,25381],{"class":70}," head",[57,25383,25384],{"class":81}," -n",[57,25386,25387],{"class":81}," 1",[57,25389,238],{"class":140},[57,25391,25392,25395,25397,25400],{"class":59,"line":67},[57,25393,25394],{"class":81},"echo",[57,25396,9997],{"class":74},[57,25398,25399],{"class":140},"$HF_USER",[57,25401,25402],{"class":74},"\"\n",[14,25404,25405],{},[44,25406],{"alt":46,"src":25407},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[365,25409,25411],{"id":25410},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,25413,25414],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1422,25416,25417,25420],{},[380,25418,25419],{},"Dataset Repo（用于上传演示数据）",[380,25421,25422],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,25424,25425],{},[44,25426],{"alt":46,"src":25427},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,25429,25430],{},[44,25431],{"alt":46,"src":25432},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,25434,25435],{},[44,25436],{"alt":46,"src":25437},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,25439,25440],{},[44,25441],{"alt":46,"src":25442},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[342,25444,25445],{},"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":46,"searchDepth":67,"depth":67,"links":25447},[25448,25449,25450],{"id":25287,"depth":67,"text":25288},{"id":25352,"depth":67,"text":25353},{"id":25410,"depth":67,"text":25411},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25278,"description":347},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25457,"title":25458,"body":25459,"description":347,"extension":348,"meta":25656,"navigation":350,"path":25657,"seo":25658,"stem":25659,"__hash__":25660},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25460,"toc":25651},[25461,25465,25469,25565,25573,25578,25582,25598,25601,25605,25648],[10,25462,25464],{"id":25463},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[365,25466,25468],{"id":25467},"_61-录制示教数据","6.1 录制示教数据",[49,25470,25472],{"className":51,"code":25471,"language":53,"meta":46,"style":46},"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",[28,25473,25474,25481,25487,25493,25499,25508,25514,25520,25526,25533,25543,25550,25560],{"__ignoreMap":46},[57,25475,25476,25479],{"class":59,"line":60},[57,25477,25478],{"class":70},"lerobot-record",[57,25480,24947],{"class":81},[57,25482,25483,25485],{"class":59,"line":67},[57,25484,24979],{"class":81},[57,25486,24947],{"class":81},[57,25488,25489,25491],{"class":59,"line":144},[57,25490,25057],{"class":81},[57,25492,24947],{"class":81},[57,25494,25495,25497],{"class":59,"line":150},[57,25496,25117],{"class":81},[57,25498,24947],{"class":81},[57,25500,25501,25503,25506],{"class":59,"line":162},[57,25502,25186],{"class":81},[57,25504,25505],{"class":74},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[57,25507,24947],{"class":81},[57,25509,25510,25512],{"class":59,"line":180},[57,25511,24952],{"class":81},[57,25513,24947],{"class":81},[57,25515,25516,25518],{"class":59,"line":186},[57,25517,25024],{"class":81},[57,25519,24947],{"class":81},[57,25521,25522,25524],{"class":59,"line":197},[57,25523,25208],{"class":81},[57,25525,24947],{"class":81},[57,25527,25528,25531],{"class":59,"line":241},[57,25529,25530],{"class":81},"  --display_data=true",[57,25532,24947],{"class":81},[57,25534,25535,25538,25541],{"class":59,"line":249},[57,25536,25537],{"class":81},"  --dataset.repo_id=",[57,25539,25540],{"class":74},"\"Embodied-AI-6\u002Fso101_test\"",[57,25542,24947],{"class":81},[57,25544,25545,25548],{"class":59,"line":262},[57,25546,25547],{"class":81},"  --dataset.num_episodes=10",[57,25549,24947],{"class":81},[57,25551,25552,25555,25558],{"class":59,"line":281},[57,25553,25554],{"class":81},"  --dataset.single_task=",[57,25556,25557],{"class":74},"\"Grab the green cube\"",[57,25559,24947],{"class":81},[57,25561,25562],{"class":59,"line":287},[57,25563,25564],{"class":81},"  --resume=true\n",[1422,25566,25567],{},[380,25568,25569,25572],{},[28,25570,25571],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,25574,25575],{},[44,25576],{"alt":46,"src":25577},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[365,25579,25581],{"id":25580},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[49,25583,25585],{"className":51,"code":25584,"language":53,"meta":46,"style":46},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[28,25586,25587],{"__ignoreMap":46},[57,25588,25589,25592,25595],{"class":59,"line":60},[57,25590,25591],{"class":70},"rm",[57,25593,25594],{"class":81}," -rf",[57,25596,25597],{"class":74}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,25599,25600],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[365,25602,25604],{"id":25603},"_63-回放指定-episode","6.3 回放指定 episode",[49,25606,25608],{"className":51,"code":25607,"language":53,"meta":46,"style":46},"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",[28,25609,25610,25617,25623,25629,25635,25643],{"__ignoreMap":46},[57,25611,25612,25615],{"class":59,"line":60},[57,25613,25614],{"class":70},"lerobot-replay",[57,25616,24947],{"class":81},[57,25618,25619,25621],{"class":59,"line":67},[57,25620,24979],{"class":81},[57,25622,24947],{"class":81},[57,25624,25625,25627],{"class":59,"line":144},[57,25626,25057],{"class":81},[57,25628,24947],{"class":81},[57,25630,25631,25633],{"class":59,"line":150},[57,25632,25117],{"class":81},[57,25634,24947],{"class":81},[57,25636,25637,25639,25641],{"class":59,"line":162},[57,25638,25537],{"class":81},[57,25640,25540],{"class":74},[57,25642,24947],{"class":81},[57,25644,25645],{"class":59,"line":180},[57,25646,25647],{"class":81},"  --dataset.episode=0\n",[342,25649,25650],{},"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":46,"searchDepth":67,"depth":67,"links":25652},[25653,25654,25655],{"id":25467,"depth":67,"text":25468},{"id":25580,"depth":67,"text":25581},{"id":25603,"depth":67,"text":25604},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25458,"description":347},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25662,"title":25663,"body":25664,"description":347,"extension":348,"meta":25792,"navigation":350,"path":25793,"seo":25794,"stem":25795,"__hash__":25796},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25665,"toc":25790},[25666,25670,25733,25736,25783,25788],[10,25667,25669],{"id":25668},"_7-act-模型训练","7. ACT 模型训练",[49,25671,25673],{"className":51,"code":25672,"language":53,"meta":46,"style":46},"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",[28,25674,25675,25682,25690,25697,25704,25711,25718,25725],{"__ignoreMap":46},[57,25676,25677,25680],{"class":59,"line":60},[57,25678,25679],{"class":70},"lerobot-train",[57,25681,24947],{"class":81},[57,25683,25684,25686,25688],{"class":59,"line":67},[57,25685,25537],{"class":81},[57,25687,25540],{"class":74},[57,25689,24947],{"class":81},[57,25691,25692,25695],{"class":59,"line":144},[57,25693,25694],{"class":81},"  --policy.type=act",[57,25696,24947],{"class":81},[57,25698,25699,25702],{"class":59,"line":150},[57,25700,25701],{"class":81},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[57,25703,24947],{"class":81},[57,25705,25706,25709],{"class":59,"line":162},[57,25707,25708],{"class":81},"  --job_name=act_so101_test",[57,25710,24947],{"class":81},[57,25712,25713,25716],{"class":59,"line":180},[57,25714,25715],{"class":81},"  --policy.device=cuda",[57,25717,24947],{"class":81},[57,25719,25720,25723],{"class":59,"line":186},[57,25721,25722],{"class":81},"  --wandb.enable=false",[57,25724,24947],{"class":81},[57,25726,25727,25730],{"class":59,"line":197},[57,25728,25729],{"class":81},"  --policy.repo_id=",[57,25731,25732],{"class":74},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,25734,25735],{},"参数说明：",[1422,25737,25738,25744,25750,25756,25762,25771,25777],{},[380,25739,25740,25743],{},[28,25741,25742],{},"--dataset.repo_id","：训练数据集仓库。",[380,25745,25746,25749],{},[28,25747,25748],{},"--policy.type=act","：策略模型类型为 ACT。",[380,25751,25752,25755],{},[28,25753,25754],{},"--output_dir","：本地训练输出目录。",[380,25757,25758,25761],{},[28,25759,25760],{},"--job_name","：训练任务名称。",[380,25763,25764,25767,25768,24831],{},[28,25765,25766],{},"--policy.device","：训练设备（如 ",[28,25769,25770],{},"cuda",[380,25772,25773,25776],{},[28,25774,25775],{},"--wandb.enable","：是否启用 WandB 可视化。",[380,25778,25779,25782],{},[28,25780,25781],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,25784,25785],{},[44,25786],{"alt":46,"src":25787},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[342,25789,25650],{},{"title":46,"searchDepth":67,"depth":67,"links":25791},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25663,"description":347},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25798,"title":25799,"body":25800,"description":347,"extension":348,"meta":25887,"navigation":350,"path":25888,"seo":25889,"stem":25890,"__hash__":25891},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25801,"toc":25885},[25802,25805,25808,25875,25883],[10,25803,25799],{"id":25804},"_8-策略部署与自动采集",[14,25806,25807],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[49,25809,25811],{"className":51,"code":25810,"language":53,"meta":46,"style":46},"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",[28,25812,25813,25819,25825,25831,25839,25845,25852,25860,25868],{"__ignoreMap":46},[57,25814,25815,25817],{"class":59,"line":60},[57,25816,25478],{"class":70},[57,25818,24947],{"class":81},[57,25820,25821,25823],{"class":59,"line":67},[57,25822,24979],{"class":81},[57,25824,24947],{"class":81},[57,25826,25827,25829],{"class":59,"line":144},[57,25828,25057],{"class":81},[57,25830,24947],{"class":81},[57,25832,25833,25835,25837],{"class":59,"line":150},[57,25834,25186],{"class":81},[57,25836,25505],{"class":74},[57,25838,24947],{"class":81},[57,25840,25841,25843],{"class":59,"line":162},[57,25842,25117],{"class":81},[57,25844,24947],{"class":81},[57,25846,25847,25850],{"class":59,"line":180},[57,25848,25849],{"class":81},"  --display_data=false",[57,25851,24947],{"class":81},[57,25853,25854,25856,25858],{"class":59,"line":186},[57,25855,25537],{"class":81},[57,25857,25540],{"class":74},[57,25859,24947],{"class":81},[57,25861,25862,25864,25866],{"class":59,"line":197},[57,25863,25554],{"class":81},[57,25865,25557],{"class":74},[57,25867,24947],{"class":81},[57,25869,25870,25873],{"class":59,"line":241},[57,25871,25872],{"class":81},"  --policy.path=",[57,25874,25732],{"class":74},[1422,25876,25877],{},[380,25878,25879,25882],{},[28,25880,25881],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[342,25884,25650],{},{"title":46,"searchDepth":67,"depth":67,"links":25886},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25799,"description":347},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25893,"title":25894,"body":25895,"description":347,"extension":348,"meta":25924,"navigation":350,"path":25925,"seo":25926,"stem":25927,"__hash__":25928},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25896,"toc":25922},[25897,25901,25904,25910,25913,25919],[10,25898,25900],{"id":25899},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,25902,25903],{},"项目地址：",[14,25905,25906],{},[18,25907,25908],{"href":25908,"rel":25909},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[22],[14,25911,25912],{},"参考教程：",[14,25914,25915],{},[18,25916,25917],{"href":25917,"rel":25918},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[22],[14,25920,25921],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":46,"searchDepth":67,"depth":67,"links":25923},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25894,"description":347},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25930,"title":25931,"body":25932,"description":25936,"extension":348,"meta":25937,"navigation":350,"path":25938,"seo":25939,"stem":25940,"__hash__":25941},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25933,"toc":25934},[],{"title":46,"searchDepth":67,"depth":67,"links":25935},[],"act复现",{"category":23650},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25931,"description":25936},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25943,"title":25944,"body":25945,"description":46,"extension":348,"meta":26247,"navigation":350,"path":26248,"seo":26249,"stem":26250,"__hash__":26251},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25946,"toc":26239},[25947,25950,25954,25964,25971,25978,25981,25988,25991,25994,25998,26010,26014,26060,26063,26066,26069,26072,26075,26079,26117,26123,26127,26181,26186,26189,26192,26197,26200,26205,26208,26211,26215,26218,26221,26225],[10,25948,25944],{"id":25949},"_1简介",[394,25951,25953],{"id":25952},"_11什么是-docker","1.1什么是 Docker？",[14,25955,25956,25957,25960,25961],{},"Docker 是一个开源的 ",[33,25958,25959],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[33,25962,25963],{},"一次构建，到处运行。",[14,25965,25966,25967,25970],{},"“ ",[33,25968,25969],{},"一次构建，到处运行"," ”也就是说：",[377,25972,25973],{},[380,25974,25975],{},[33,25976,25977],{},"之前：",[14,25979,25980],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[377,25982,25983],{},[380,25984,25985],{},[33,25986,25987],{},"使用docker后：",[14,25989,25990],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,25992,25993],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[394,25995,25997],{"id":25996},"_12它是怎么工作的","1.2.它是怎么工作的？",[1422,25999,26000,26003],{},[380,26001,26002],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[380,26004,26005,26006,26009],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[33,26007,26008],{},"无论在哪运行都一样稳定"," 。",[394,26011,26013],{"id":26012},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[557,26015,26016,26026],{},[560,26017,26018],{},[563,26019,26020,26023],{},[566,26021,26022],{"align":24008},"概念",[566,26024,26025],{"align":24008},"解释",[603,26027,26028,26036,26044,26052],{},[563,26029,26030,26033],{},[608,26031,26032],{"align":24008},"镜像",[608,26034,26035],{"align":24008},"Image，运行容器的模板，像是一个应用快照",[563,26037,26038,26041],{},[608,26039,26040],{"align":24008},"容器",[608,26042,26043],{"align":24008},"Container，运行中的镜像实例，有自己的文件系统、网络等",[563,26045,26046,26049],{},[608,26047,26048],{"align":24008},"Dockerfile",[608,26050,26051],{"align":24008},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[563,26053,26054,26057],{},[608,26055,26056],{"align":24008},"仓库",[608,26058,26059],{"align":24008},"Registry，存放镜像的地方，比如 Docker Hub",[14,26061,26062],{},"抽象化理解:",[14,26064,26065],{},"Docker镜像≈C++类",[14,26067,26068],{},"Docker容器≈C++类实例(即对象)",[14,26070,26071],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,26073,26074],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[394,26076,26078],{"id":26077},"_14类比理解","1.4.类比理解",[557,26080,26081,26091],{},[560,26082,26083],{},[563,26084,26085,26088],{},[566,26086,26087],{"align":24008},"传统部署",[566,26089,26090],{"align":24008},"Docker部署",[603,26092,26093,26101,26109],{},[563,26094,26095,26098],{},[608,26096,26097],{"align":24008},"手动安装依赖、调试版本不一致问题",[608,26099,26100],{"align":24008},"一次打包环境和代码",[563,26102,26103,26106],{},[608,26104,26105],{"align":24008},"程序“裸奔”跑在系统上",[608,26107,26108],{"align":24008},"程序“穿着容器”隔离运行",[563,26110,26111,26114],{},[608,26112,26113],{"align":24008},"容易“在我电脑上能跑”",[608,26115,26116],{"align":24008},"保证“无论在哪都能跑”",[14,26118,26119,26120],{},"就像快递包裹： ",[33,26121,26122],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[394,26124,26126],{"id":26125},"_15docker-的核心优势","1.5.Docker 的核心优势",[557,26128,26129,26139],{},[560,26130,26131],{},[563,26132,26133,26136],{},[566,26134,26135],{"align":24008},"优势",[566,26137,26138],{"align":24008},"说明",[603,26140,26141,26149,26157,26165,26173],{},[563,26142,26143,26146],{},[608,26144,26145],{"align":24008},"轻量级",[608,26147,26148],{"align":24008},"基于系统内核共享，启动速度快，占资源少",[563,26150,26151,26154],{},[608,26152,26153],{"align":24008},"跨平台",[608,26155,26156],{"align":24008},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[563,26158,26159,26162],{},[608,26160,26161],{"align":24008},"易于迁移部署",[608,26163,26164],{"align":24008},"应用和环境一起封装，不怕依赖不一致",[563,26166,26167,26170],{},[608,26168,26169],{"align":24008},"易于版本控制",[608,26171,26172],{"align":24008},"镜像版本可控，支持回滚",[563,26174,26175,26178],{},[608,26176,26177],{"align":24008},"生态丰富",[608,26179,26180],{"align":24008},"Docker Hub 上有成千上万的现成镜像可用",[377,26182,26183],{},[380,26184,26185],{},"在Linux上可以几乎实现无性能损失。",[14,26187,26188],{},"docker里的发行版和本机共用Linux内核。",[14,26190,26191],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[377,26193,26194],{},[380,26195,26196],{},"可以快速部署在绝大多数Linux发行版",[14,26198,26199],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[377,26201,26202],{},[380,26203,26204],{},"配置环境简单",[14,26206,26207],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,26209,26210],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[377,26212,26213],{},[380,26214,26177],{},[14,26216,26217],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,26219,26220],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[394,26222,26224],{"id":26223},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1422,26226,26227,26230,26233,26236],{},[380,26228,26229],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[380,26231,26232],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[380,26234,26235],{},"微服务架构：每个服务一个容器，灵活组合",[380,26237,26238],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":46,"searchDepth":67,"depth":67,"links":26240},[26241,26242,26243,26244,26245,26246],{"id":25952,"depth":144,"text":25953},{"id":25996,"depth":144,"text":25997},{"id":26012,"depth":144,"text":26013},{"id":26077,"depth":144,"text":26078},{"id":26125,"depth":144,"text":26126},{"id":26223,"depth":144,"text":26224},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25944,"description":46},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26253,"title":26254,"body":26255,"description":46,"extension":348,"meta":26988,"navigation":350,"path":26989,"seo":26990,"stem":26991,"__hash__":26992},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26256,"toc":26983},[26257,26260,26264,26267,26270,26276,26282,26286,26295,26298,26355,26358,26409,26412,26495,26498,26535,26539,26550,26563,26570,26573,26653,26656,26706,26709,26732,26736,26743,26746,26762,26768,26771,26787,26793,26796,26812,26826,26832,26852,26858,26861,26873,26879,26882,26896,26902,26905,26925,26930,26933,26936,26940,26943,26946,26949,26956,26959,26962,26965,26970,26975,26980],[10,26258,26254],{"id":26259},"_2安装docker",[394,26261,26263],{"id":26262},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,26265,26266],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,26268,26269],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,26271,26272],{},[18,26273,26274],{"href":26274,"rel":26275},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[22],[14,26277,26278],{},[18,26279,26280],{"href":26280,"rel":26281},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[22],[22270,26283,26285],{"id":26284},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,26287,26288,26289,26294],{},"以下内容根据 ",[18,26290,26293],{"href":26291,"rel":26292},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[22],"官方文档"," 修改而来。",[14,26296,26297],{},"如果你过去安装过 docker，先删掉：",[49,26299,26301],{"className":51,"code":26300,"language":53,"meta":46,"style":46},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[28,26302,26303],{"__ignoreMap":46},[57,26304,26305,26307,26310,26313,26316,26319,26322,26325,26328,26331,26334,26337,26340,26343,26346,26349,26352],{"class":59,"line":60},[57,26306,3298],{"class":136},[57,26308,26309],{"class":140}," pkg ",[57,26311,26312],{"class":136},"in",[57,26314,26315],{"class":74}," docker.io",[57,26317,26318],{"class":74}," docker-doc",[57,26320,26321],{"class":74}," docker-compose",[57,26323,26324],{"class":74}," docker-compose-v2",[57,26326,26327],{"class":74}," podman-docker",[57,26329,26330],{"class":74}," containerd",[57,26332,26333],{"class":74}," runc",[57,26335,26336],{"class":140},"; ",[57,26338,26339],{"class":136},"do",[57,26341,26342],{"class":70}," sudo",[57,26344,26345],{"class":74}," apt-get",[57,26347,26348],{"class":74}," remove",[57,26350,26351],{"class":140}," $pkg; ",[57,26353,26354],{"class":136},"done\n",[14,26356,26357],{},"首先安装依赖和GPG：",[49,26359,26363],{"className":26360,"code":26361,"language":26362,"meta":46,"style":46},"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",[28,26364,26365,26370,26375,26380,26385,26390,26395,26399,26404],{"__ignoreMap":46},[57,26366,26367],{"class":59,"line":60},[57,26368,26369],{},"# Add Docker's official GPG key:\n",[57,26371,26372],{"class":59,"line":67},[57,26373,26374],{},"sudo apt-get update\n",[57,26376,26377],{"class":59,"line":144},[57,26378,26379],{},"sudo apt-get install ca-certificates curl\n",[57,26381,26382],{"class":59,"line":150},[57,26383,26384],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[57,26386,26387],{"class":59,"line":162},[57,26388,26389],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[57,26391,26392],{"class":59,"line":180},[57,26393,26394],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[57,26396,26397],{"class":59,"line":186},[57,26398,2673],{"emptyLinePlaceholder":350},[57,26400,26401],{"class":59,"line":197},[57,26402,26403],{},"# 如果上面这行报错就弄下面这行\n",[57,26405,26406],{"class":59,"line":241},[57,26407,26408],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,26410,26411],{},"信任 Docker 的 GPG 公钥并添加仓库：",[49,26413,26415],{"className":51,"code":26414,"language":53,"meta":46,"style":46},"# 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",[28,26416,26417,26422,26428,26445,26478],{"__ignoreMap":46},[57,26418,26419],{"class":59,"line":60},[57,26420,26421],{"class":63},"# Add the repository to Apt sources:\n",[57,26423,26424,26426],{"class":59,"line":67},[57,26425,25394],{"class":81},[57,26427,24947],{"class":81},[57,26429,26430,26433,26436,26439,26442],{"class":59,"line":144},[57,26431,26432],{"class":74},"  \"deb [arch=$(",[57,26434,26435],{"class":70},"dpkg",[57,26437,26438],{"class":81}," --print-architecture",[57,26440,26441],{"class":74},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[57,26443,26444],{"class":81},"\\\n",[57,26446,26447,26450,26452,26454,26457,26460,26462,26464,26467,26469,26471,26474,26476],{"class":59,"line":150},[57,26448,26449],{"class":74},"  \"",[57,26451,25368],{"class":140},[57,26453,974],{"class":81},[57,26455,26456],{"class":74}," \u002Fetc\u002Fos-release",[57,26458,26459],{"class":140}," && ",[57,26461,25394],{"class":81},[57,26463,9997],{"class":74},[57,26465,26466],{"class":140},"$VERSION_CODENAME",[57,26468,668],{"class":74},[57,26470,845],{"class":140},[57,26472,26473],{"class":74},"\" stable\"",[57,26475,25378],{"class":136},[57,26477,24947],{"class":81},[57,26479,26480,26483,26486,26489,26492],{"class":59,"line":162},[57,26481,26482],{"class":70},"  sudo",[57,26484,26485],{"class":74}," tee",[57,26487,26488],{"class":74}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[57,26490,26491],{"class":136}," >",[57,26493,26494],{"class":74}," \u002Fdev\u002Fnull\n",[14,26496,26497],{},"最后安装",[49,26499,26501],{"className":51,"code":26500,"language":53,"meta":46,"style":46},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[28,26502,26503,26512],{"__ignoreMap":46},[57,26504,26505,26507,26509],{"class":59,"line":60},[57,26506,24845],{"class":70},[57,26508,26345],{"class":74},[57,26510,26511],{"class":74}," update\n",[57,26513,26514,26516,26518,26520,26523,26526,26529,26532],{"class":59,"line":67},[57,26515,24845],{"class":70},[57,26517,26345],{"class":74},[57,26519,75],{"class":74},[57,26521,26522],{"class":74}," docker-ce",[57,26524,26525],{"class":74}," docker-ce-cli",[57,26527,26528],{"class":74}," containerd.io",[57,26530,26531],{"class":74}," docker-buildx-plugin",[57,26533,26534],{"class":74}," docker-compose-plugin\n",[22270,26536,26538],{"id":26537},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,26540,26541,26542,26545,26546,26549],{},"查看自己自己包管理工具版本（dnf是 ",[33,26543,26544],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[33,26547,26548],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[49,26551,26553],{"className":51,"code":26552,"language":53,"meta":46,"style":46},"dnf --version\n",[28,26554,26555],{"__ignoreMap":46},[57,26556,26557,26560],{"class":59,"line":60},[57,26558,26559],{"class":70},"dnf",[57,26561,26562],{"class":81}," --version\n",[14,26564,26288,26565,26569],{},[18,26566,26293],{"href":26567,"rel":26568},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[22]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,26571,26572],{},"如果你之前安装过 docker，请先删掉",[49,26574,26576],{"className":51,"code":26575,"language":53,"meta":46,"style":46},"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",[28,26577,26578,26592,26599,26606,26613,26620,26627,26634,26641,26648],{"__ignoreMap":46},[57,26579,26580,26582,26585,26587,26590],{"class":59,"line":60},[57,26581,24845],{"class":70},[57,26583,26584],{"class":74}," dnf",[57,26586,26348],{"class":74},[57,26588,26589],{"class":74}," docker",[57,26591,24947],{"class":81},[57,26593,26594,26597],{"class":59,"line":67},[57,26595,26596],{"class":74},"                  docker-client",[57,26598,24947],{"class":81},[57,26600,26601,26604],{"class":59,"line":144},[57,26602,26603],{"class":74},"                  docker-client-latest",[57,26605,24947],{"class":81},[57,26607,26608,26611],{"class":59,"line":150},[57,26609,26610],{"class":74},"                  docker-common",[57,26612,24947],{"class":81},[57,26614,26615,26618],{"class":59,"line":162},[57,26616,26617],{"class":74},"                  docker-latest",[57,26619,24947],{"class":81},[57,26621,26622,26625],{"class":59,"line":180},[57,26623,26624],{"class":74},"                  docker-latest-logrotate",[57,26626,24947],{"class":81},[57,26628,26629,26632],{"class":59,"line":186},[57,26630,26631],{"class":74},"                  docker-logrotate",[57,26633,24947],{"class":81},[57,26635,26636,26639],{"class":59,"line":197},[57,26637,26638],{"class":74},"                  docker-selinux",[57,26640,24947],{"class":81},[57,26642,26643,26646],{"class":59,"line":241},[57,26644,26645],{"class":74},"                  docker-engine-selinux",[57,26647,24947],{"class":81},[57,26649,26650],{"class":59,"line":249},[57,26651,26652],{"class":74},"                  docker-engine\n",[14,26654,26655],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[49,26657,26659],{"className":51,"code":26658,"language":53,"meta":46,"style":46},"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",[28,26660,26661,26675,26690],{"__ignoreMap":46},[57,26662,26663,26665,26667,26670,26672],{"class":59,"line":60},[57,26664,24845],{"class":70},[57,26666,26584],{"class":74},[57,26668,26669],{"class":81}," -y",[57,26671,75],{"class":74},[57,26673,26674],{"class":74}," dnf-plugins-core\n",[57,26676,26677,26679,26681,26684,26687],{"class":59,"line":67},[57,26678,24845],{"class":70},[57,26680,26584],{"class":74},[57,26682,26683],{"class":74}," config-manager",[57,26685,26686],{"class":74}," addrepo",[57,26688,26689],{"class":81}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[57,26691,26692,26694,26697,26700,26703],{"class":59,"line":144},[57,26693,24845],{"class":70},[57,26695,26696],{"class":74}," sed",[57,26698,26699],{"class":81}," -i",[57,26701,26702],{"class":74}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[57,26704,26705],{"class":74}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,26707,26708],{},"最后安装：",[49,26710,26712],{"className":51,"code":26711,"language":53,"meta":46,"style":46},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[28,26713,26714],{"__ignoreMap":46},[57,26715,26716,26718,26720,26722,26724,26726,26728,26730],{"class":59,"line":60},[57,26717,24845],{"class":70},[57,26719,26584],{"class":74},[57,26721,75],{"class":74},[57,26723,26522],{"class":74},[57,26725,26525],{"class":74},[57,26727,26528],{"class":74},[57,26729,26531],{"class":74},[57,26731,26534],{"class":74},[394,26733,26735],{"id":26734},"_22配置环境","2.2.配置环境",[22270,26737,26739,26742],{"id":26738},"_221检查-docker-服务状态",[33,26740,26741],{},"2.2.1.检查 Docker 服务状态"," ：",[14,26744,26745],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[49,26747,26749],{"className":51,"code":26748,"language":53,"meta":46,"style":46},"systemctl status docker\n",[28,26750,26751],{"__ignoreMap":46},[57,26752,26753,26756,26759],{"class":59,"line":60},[57,26754,26755],{"class":70},"systemctl",[57,26757,26758],{"class":74}," status",[57,26760,26761],{"class":74}," docker\n",[22270,26763,26765,26742],{"id":26764},"_222启动-docker-服务",[33,26766,26767],{},"2.2.2.启动 Docker 服务",[14,26769,26770],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[49,26772,26774],{"className":51,"code":26773,"language":53,"meta":46,"style":46},"sudo systemctl start docker\n",[28,26775,26776],{"__ignoreMap":46},[57,26777,26778,26780,26783,26785],{"class":59,"line":60},[57,26779,24845],{"class":70},[57,26781,26782],{"class":74}," systemctl",[57,26784,4457],{"class":74},[57,26786,26761],{"class":74},[22270,26788,26790,26742],{"id":26789},"_223设置-docker-开机自启",[33,26791,26792],{},"2.2.3.设置 Docker 开机自启",[14,26794,26795],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[49,26797,26799],{"className":51,"code":26798,"language":53,"meta":46,"style":46},"sudo systemctl enable docker\n",[28,26800,26801],{"__ignoreMap":46},[57,26802,26803,26805,26807,26810],{"class":59,"line":60},[57,26804,24845],{"class":70},[57,26806,26782],{"class":74},[57,26808,26809],{"class":74}," enable",[57,26811,26761],{"class":74},[22270,26813,26815,14067,26818,14067,26823,26742],{"id":26814},"_224将用户添加到-docker-组",[33,26816,26817],{},"2.2.4.将用户添加到",[33,26819,26820],{},[28,26821,26822],{},"docker",[33,26824,26825],{},"组",[14,26827,26828,26829,26831],{},"使用以下命令将当前用户添加到 ",[28,26830,26822],{}," 组：",[49,26833,26835],{"className":51,"code":26834,"language":53,"meta":46,"style":46},"sudo usermod -aG docker $USER\n",[28,26836,26837],{"__ignoreMap":46},[57,26838,26839,26841,26844,26847,26849],{"class":59,"line":60},[57,26840,24845],{"class":70},[57,26842,26843],{"class":74}," usermod",[57,26845,26846],{"class":81}," -aG",[57,26848,26589],{"class":74},[57,26850,26851],{"class":140}," $USER\n",[22270,26853,26855,26742],{"id":26854},"_225退出并重新登录",[33,26856,26857],{},"2.2.5.退出并重新登录",[14,26859,26860],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[49,26862,26864],{"className":51,"code":26863,"language":53,"meta":46,"style":46},"newgrp docker\n",[28,26865,26866],{"__ignoreMap":46},[57,26867,26868,26871],{"class":59,"line":60},[57,26869,26870],{"class":70},"newgrp",[57,26872,26761],{"class":74},[22270,26874,26876,26742],{"id":26875},"_226重新启动-docker-服务如果需要",[33,26877,26878],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,26880,26881],{},"确保 Docker 服务正在运行，可以使用以下命令：",[49,26883,26884],{"className":51,"code":26773,"language":53,"meta":46,"style":46},[28,26885,26886],{"__ignoreMap":46},[57,26887,26888,26890,26892,26894],{"class":59,"line":60},[57,26889,24845],{"class":70},[57,26891,26782],{"class":74},[57,26893,4457],{"class":74},[57,26895,26761],{"class":74},[22270,26897,26899,26742],{"id":26898},"_227重启电脑后检查-docker-服务状态",[33,26900,26901],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,26903,26904],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[49,26906,26908],{"className":51,"code":26907,"language":53,"meta":46,"style":46},"sudo reboot\nsystemctl status docker\n",[28,26909,26910,26917],{"__ignoreMap":46},[57,26911,26912,26914],{"class":59,"line":60},[57,26913,24845],{"class":70},[57,26915,26916],{"class":74}," reboot\n",[57,26918,26919,26921,26923],{"class":59,"line":67},[57,26920,26755],{"class":70},[57,26922,26758],{"class":74},[57,26924,26761],{"class":74},[14,26926,26927],{},[44,26928],{"alt":46,"src":26929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,26931,26932],{},"第三行显示enabled说明开机自启动成功",[14,26934,26935],{},"按q退出",[394,26937,26939],{"id":26938},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,26941,26942],{},"优先使用linux来使用docker是比较好的",[14,26944,26945],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,26947,26948],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,26950,26951,26952],{},"官方下载安装:",[18,26953,26954],{"href":26954,"rel":26955},"https:\u002F\u002Fwww.docker.com\u002F",[22],[14,26957,26958],{},"Windows的Docker显卡直通与USB直通:",[14,26960,26961],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,26963,26964],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,26966,26967],{},[44,26968],{"alt":46,"src":26969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,26971,26972],{},[44,26973],{"alt":46,"src":26974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,26976,26977],{},[44,26978],{"alt":46,"src":26979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[342,26981,26982],{},"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":46,"searchDepth":67,"depth":67,"links":26984},[26985,26986,26987],{"id":26262,"depth":144,"text":26263},{"id":26734,"depth":144,"text":26735},{"id":26938,"depth":144,"text":26939},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26254,"description":46},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26994,"title":26995,"body":26996,"description":27003,"extension":348,"meta":27696,"navigation":350,"path":27697,"seo":27698,"stem":27699,"__hash__":27700},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26997,"toc":27690},[26998,27001,27004,27008,27013,27018,27021,27049,27054,27063,27066,27071,27075,27082,27087,27093,27097,27100,27104,27109,27201,27206,27224,27229,27250,27255,27271,27275,27280,27309,27314,27360,27365,27409,27417,27434,27439,27455,27460,27474,27477,27480,27483,27486,27515,27518,27523,27527,27530,27533,27539,27542,27545,27548,27610,27617,27622,27625,27643,27647,27650,27667,27670,27673,27687],[10,26999,26995],{"id":27000},"_3docker直通",[14,27002,27003],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[394,27005,27007],{"id":27006},"_31usb直通","3.1.USB直通",[14,27009,27010],{},[44,27011],{"alt":46,"src":27012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[377,27014,27015],{},[380,27016,27017],{},"方法一(不是很推荐新手)：",[14,27019,27020],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[49,27022,27024],{"className":51,"code":27023,"language":53,"meta":46,"style":46},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[28,27025,27026,27034,27039],{"__ignoreMap":46},[57,27027,27028,27031],{"class":59,"line":60},[57,27029,27030],{"class":70},"ls",[57,27032,27033],{"class":74}," \u002Fdev\n",[57,27035,27036],{"class":59,"line":67},[57,27037,27038],{"class":63},"#例如\n",[57,27040,27041,27044,27046],{"class":59,"line":144},[57,27042,27043],{"class":140},"--device",[57,27045,156],{"class":136},[57,27047,27048],{"class":74},"\u002Fdev\u002Ftty_USB0\n",[377,27050,27051],{"start":67},[380,27052,27053],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[49,27055,27057],{"className":51,"code":27056,"language":53,"meta":46,"style":46},"--privileged\n",[28,27058,27059],{"__ignoreMap":46},[57,27060,27061],{"class":59,"line":60},[57,27062,27056],{"class":70},[14,27064,27065],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,27067,27068],{},[44,27069],{"alt":46,"src":27070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[394,27072,27074],{"id":27073},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,27076,27077,27078,27081],{},"NVIDIA Container Toolkit使用户 ",[33,27079,27080],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,27083,27084],{},[44,27085],{"alt":46,"src":27086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,27088,27089],{},[18,27090,27091],{"href":27091,"rel":27092},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[22],[22270,27094,27096],{"id":27095},"_321安装","3.2.1.安装",[14,27098,27099],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23182,27101,27103],{"id":27102},"_3211ubuntu","3.2.1.1.Ubuntu",[377,27105,27106],{},[380,27107,27108],{},"配置存储库 并更新",[49,27110,27112],{"className":51,"code":27111,"language":53,"meta":46,"style":46},"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",[28,27113,27114,27143,27163,27175,27187,27193],{"__ignoreMap":46},[57,27115,27116,27119,27122,27125,27127,27129,27132,27135,27138,27141],{"class":59,"line":60},[57,27117,27118],{"class":70},"curl",[57,27120,27121],{"class":81}," -fsSL",[57,27123,27124],{"class":74}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[57,27126,25378],{"class":136},[57,27128,26342],{"class":70},[57,27130,27131],{"class":74}," gpg",[57,27133,27134],{"class":81}," --dearmor",[57,27136,27137],{"class":81}," -o",[57,27139,27140],{"class":74}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[57,27142,24947],{"class":81},[57,27144,27145,27148,27150,27153,27156,27159,27161],{"class":59,"line":67},[57,27146,27147],{"class":140},"  && ",[57,27149,27118],{"class":70},[57,27151,27152],{"class":81}," -s",[57,27154,27155],{"class":81}," -L",[57,27157,27158],{"class":74}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[57,27160,25378],{"class":136},[57,27162,24947],{"class":81},[57,27164,27165,27168,27171,27173],{"class":59,"line":144},[57,27166,27167],{"class":70},"    sed",[57,27169,27170],{"class":74}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[57,27172,25378],{"class":136},[57,27174,24947],{"class":81},[57,27176,27177,27180,27182,27185],{"class":59,"line":150},[57,27178,27179],{"class":70},"    sudo",[57,27181,26485],{"class":74},[57,27183,27184],{"class":74}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[57,27186,24947],{"class":81},[57,27188,27189,27191],{"class":59,"line":162},[57,27190,27147],{"class":140},[57,27192,26444],{"class":81},[57,27194,27195,27197,27199],{"class":59,"line":180},[57,27196,27179],{"class":70},[57,27198,26345],{"class":74},[57,27200,26511],{"class":74},[377,27202,27203],{"start":67},[380,27204,27205],{},"安装nvidia-docker2",[49,27207,27209],{"className":51,"code":27208,"language":53,"meta":46,"style":46},"sudo apt-get install -y nvidia-docker2\n",[28,27210,27211],{"__ignoreMap":46},[57,27212,27213,27215,27217,27219,27221],{"class":59,"line":60},[57,27214,24845],{"class":70},[57,27216,26345],{"class":74},[57,27218,75],{"class":74},[57,27220,26669],{"class":81},[57,27222,27223],{"class":74}," nvidia-docker2\n",[377,27225,27226],{"start":144},[380,27227,27228],{},"使用nvidia-ctk命令配置container runtime",[49,27230,27232],{"className":51,"code":27231,"language":53,"meta":46,"style":46},"sudo nvidia-ctk runtime configure --runtime=docker\n",[28,27233,27234],{"__ignoreMap":46},[57,27235,27236,27238,27241,27244,27247],{"class":59,"line":60},[57,27237,24845],{"class":70},[57,27239,27240],{"class":74}," nvidia-ctk",[57,27242,27243],{"class":74}," runtime",[57,27245,27246],{"class":74}," configure",[57,27248,27249],{"class":81}," --runtime=docker\n",[377,27251,27252],{"start":150},[380,27253,27254],{},"重启docker服务:",[49,27256,27258],{"className":51,"code":27257,"language":53,"meta":46,"style":46},"sudo systemctl restart docker\n",[28,27259,27260],{"__ignoreMap":46},[57,27261,27262,27264,27266,27269],{"class":59,"line":60},[57,27263,24845],{"class":70},[57,27265,26782],{"class":74},[57,27267,27268],{"class":74}," restart",[57,27270,26761],{"class":74},[23182,27272,27274],{"id":27273},"_3212fedora","3.2.1.2.Fedora",[377,27276,27277],{},[380,27278,27279],{},"配置存储库",[49,27281,27283],{"className":51,"code":27282,"language":53,"meta":46,"style":46},"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",[28,27284,27285,27300],{"__ignoreMap":46},[57,27286,27287,27289,27291,27293,27296,27298],{"class":59,"line":60},[57,27288,27118],{"class":70},[57,27290,27152],{"class":81},[57,27292,27155],{"class":81},[57,27294,27295],{"class":74}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[57,27297,25378],{"class":136},[57,27299,24947],{"class":81},[57,27301,27302,27304,27306],{"class":59,"line":67},[57,27303,24845],{"class":70},[57,27305,26485],{"class":74},[57,27307,27308],{"class":74}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[377,27310,27311],{"start":67},[380,27312,27313],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[49,27315,27317],{"className":51,"code":27316,"language":53,"meta":46,"style":46},"# 如果是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",[28,27318,27319,27324,27338,27342,27347],{"__ignoreMap":46},[57,27320,27321],{"class":59,"line":60},[57,27322,27323],{"class":63},"# 如果是RHEL或者Rocky（DNF4）\n",[57,27325,27326,27328,27330,27332,27335],{"class":59,"line":67},[57,27327,24845],{"class":70},[57,27329,26584],{"class":74},[57,27331,26683],{"class":74},[57,27333,27334],{"class":81}," --add-repo",[57,27336,27337],{"class":74}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[57,27339,27340],{"class":59,"line":144},[57,27341,2673],{"emptyLinePlaceholder":350},[57,27343,27344],{"class":59,"line":150},[57,27345,27346],{"class":63},"# 如果是Feodra41+（DNF5）\n",[57,27348,27349,27351,27353,27355,27357],{"class":59,"line":162},[57,27350,24845],{"class":70},[57,27352,26584],{"class":74},[57,27354,26683],{"class":74},[57,27356,26686],{"class":74},[57,27358,27359],{"class":81}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[377,27361,27362],{"start":144},[380,27363,27364],{},"安装NVIDIA Container Toolki包",[49,27366,27368],{"className":51,"code":27367,"language":53,"meta":46,"style":46},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[28,27369,27370,27375,27388,27392,27397],{"__ignoreMap":46},[57,27371,27372],{"class":59,"line":60},[57,27373,27374],{"class":63},"# 如果是RHEL或者Rocky\n",[57,27376,27377,27379,27381,27383,27385],{"class":59,"line":67},[57,27378,24845],{"class":70},[57,27380,26584],{"class":74},[57,27382,75],{"class":74},[57,27384,26669],{"class":81},[57,27386,27387],{"class":74}," nvidia-container-toolkit\n",[57,27389,27390],{"class":59,"line":144},[57,27391,2673],{"emptyLinePlaceholder":350},[57,27393,27394],{"class":59,"line":150},[57,27395,27396],{"class":63},"# 如果是Fedora\n",[57,27398,27399,27401,27403,27405,27407],{"class":59,"line":162},[57,27400,24845],{"class":70},[57,27402,26584],{"class":74},[57,27404,75],{"class":74},[57,27406,26669],{"class":81},[57,27408,27387],{"class":74},[377,27410,27411],{"start":150},[380,27412,27413,27414,27416],{},"安装nvidia-docker2 ： 在Fedora上使用",[28,27415,26559],{},"进行安装",[49,27418,27420],{"className":51,"code":27419,"language":53,"meta":46,"style":46},"sudo dnf install -y nvidia-docker2\n",[28,27421,27422],{"__ignoreMap":46},[57,27423,27424,27426,27428,27430,27432],{"class":59,"line":60},[57,27425,24845],{"class":70},[57,27427,26584],{"class":74},[57,27429,75],{"class":74},[57,27431,26669],{"class":81},[57,27433,27223],{"class":74},[377,27435,27436],{"start":162},[380,27437,27438],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[49,27440,27441],{"className":51,"code":27231,"language":53,"meta":46,"style":46},[28,27442,27443],{"__ignoreMap":46},[57,27444,27445,27447,27449,27451,27453],{"class":59,"line":60},[57,27446,24845],{"class":70},[57,27448,27240],{"class":74},[57,27450,27243],{"class":74},[57,27452,27246],{"class":74},[57,27454,27249],{"class":81},[377,27456,27457],{"start":180},[380,27458,27459],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[49,27461,27462],{"className":51,"code":27257,"language":53,"meta":46,"style":46},[28,27463,27464],{"__ignoreMap":46},[57,27465,27466,27468,27470,27472],{"class":59,"line":60},[57,27467,24845],{"class":70},[57,27469,26782],{"class":74},[57,27471,27268],{"class":74},[57,27473,26761],{"class":74},[14,27475,27476],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,27478,27479],{},"方法：",[14,27481,27482],{},"1️⃣nvidia-smi",[14,27484,27485],{},"2️⃣运行nvidia cuda 容器进行测试",[49,27487,27489],{"className":51,"code":27488,"language":53,"meta":46,"style":46},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[28,27490,27491],{"__ignoreMap":46},[57,27492,27493,27495,27497,27500,27503,27506,27509,27512],{"class":59,"line":60},[57,27494,24845],{"class":70},[57,27496,26589],{"class":74},[57,27498,27499],{"class":74}," run",[57,27501,27502],{"class":81}," --rm",[57,27504,27505],{"class":81}," --gpus",[57,27507,27508],{"class":74}," all",[57,27510,27511],{"class":74}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[57,27513,27514],{"class":74}," nvidia-smi\n",[14,27516,27517],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,27519,27520],{},[44,27521],{"alt":46,"src":27522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[394,27524,27526],{"id":27525},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,27528,27529],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,27531,27532],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,27534,27535],{},[18,27536,27537],{"href":27537,"rel":27538},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[22],[14,27540,27541],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,27543,27544],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,27546,27547],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[557,27549,27550,27566],{},[560,27551,27552],{},[563,27553,27554,27557,27560,27563],{},[566,27555,27556],{"align":24008},"镜像类型",[566,27558,27559],{"align":24008},"适用场景",[566,27561,27562],{"align":24008},"示例标签",[566,27564,27565],{"align":24008},"大小",[603,27567,27568,27582,27596],{},[563,27569,27570,27573,27576,27579],{},[608,27571,27572],{"align":24008},"base",[608,27574,27575],{"align":24008},"仅需 CUDA 运行时库",[608,27577,27578],{"align":24008},"12.4.0-base-ubuntu22.04",[608,27580,27581],{"align":24008},"~240MB",[563,27583,27584,27587,27590,27593],{},[608,27585,27586],{"align":24008},"runtime",[608,27588,27589],{"align":24008},"部署编译后的应用（含数学库）",[608,27591,27592],{"align":24008},"12.4.0-runtime-ubuntu22.04",[608,27594,27595],{"align":24008},"~2GB",[563,27597,27598,27601,27604,27607],{},[608,27599,27600],{"align":24008},"devel",[608,27602,27603],{"align":24008},"开发环境（含编译工具）",[608,27605,27606],{"align":24008},"12.4.0-devel-ubuntu22.04",[608,27608,27609],{"align":24008},"~3GB",[14,27611,27612,27613,27616],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[28,27614,27615],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,27618,27619],{},[44,27620],{"alt":46,"src":27621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,27623,27624],{},"在dockerfile里就可以开头这么写：",[49,27626,27628],{"className":51,"code":27627,"language":53,"meta":46,"style":46},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[28,27629,27630,27635],{"__ignoreMap":46},[57,27631,27632],{"class":59,"line":60},[57,27633,27634],{"class":63},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[57,27636,27637,27640],{"class":59,"line":67},[57,27638,27639],{"class":70},"FROM",[57,27641,27642],{"class":74}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[394,27644,27646],{"id":27645},"_34配置以太网","3.4.配置以太网",[14,27648,27649],{},"指定网络模式",[49,27651,27653],{"className":51,"code":27652,"language":53,"meta":46,"style":46},"--net=host \\\n",[28,27654,27655],{"__ignoreMap":46},[57,27656,27657,27660,27662,27665],{"class":59,"line":60},[57,27658,27659],{"class":140},"--net",[57,27661,156],{"class":136},[57,27663,27664],{"class":74},"host",[57,27666,24947],{"class":70},[14,27668,27669],{},"启动参数里加上这行即可。具体在下方",[14,27671,27672],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1422,27674,27675,27678,27681,27684],{},[380,27676,27677],{},"--net=bridge:默认选项，表示连接到默认的网桥",[380,27679,27680],{},"--net=host:容器使用宿主机的网络",[380,27682,27683],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[380,27685,27686],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[342,27688,27689],{},"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":46,"searchDepth":67,"depth":67,"links":27691},[27692,27693,27694,27695],{"id":27006,"depth":144,"text":27007},{"id":27073,"depth":144,"text":27074},{"id":27525,"depth":144,"text":27526},{"id":27645,"depth":144,"text":27646},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26995,"description":27003},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27702,"title":27703,"body":27704,"description":27711,"extension":348,"meta":27717,"navigation":350,"path":27718,"seo":27719,"stem":27720,"__hash__":27721},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27705,"toc":27715},[27706,27709,27712],[10,27707,27703],{"id":27708},"_4dockerhub换源",[14,27710,27711],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,27713,27714],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":46,"searchDepth":67,"depth":67,"links":27716},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27703,"description":27711},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27723,"title":27724,"body":27725,"description":46,"extension":348,"meta":28737,"navigation":350,"path":28738,"seo":28739,"stem":28740,"__hash__":28741},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27726,"toc":28732},[27727,27730,27734,27740,27744,27747,28087,28090,28093,28096,28101,28106,28109,28112,28115,28118,28137,28140,28151,28157,28339,28349,28365,28628,28630,28655,28670,28679,28729],[10,27728,27724],{"id":27729},"_5docker命令学习",[394,27731,27733],{"id":27732},"_51参考文档","5.1.参考文档",[14,27735,27736],{},[18,27737,27738],{"href":27738,"rel":27739},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[22],[394,27741,27743],{"id":27742},"_52常用命令","5.2.常用命令",[14,27745,27746],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[557,27748,27749,27762],{},[560,27750,27751],{},[563,27752,27753,27756,27759],{},[566,27754,27755],{"align":24008},"命令",[566,27757,27758],{"align":24008},"描述",[566,27760,27761],{"align":24008},"示例",[603,27763,27764,27775,27786,27797,27808,27819,27830,27841,27851,27862,27873,27884,27894,27905,27916,27927,27937,27947,27957,27967,27978,27989,28000,28011,28022,28033,28043,28054,28065,28076],{},[563,27765,27766,27769,27772],{},[608,27767,27768],{"align":24008},"docker run",[608,27770,27771],{"align":24008},"创建并启动一个新的容器。",[608,27773,27774],{"align":24008},"docker run -it ubuntu bash",[563,27776,27777,27780,27783],{},[608,27778,27779],{"align":24008},"docker build",[608,27781,27782],{"align":24008},"通过指定的 Dockerfile 创建一个新的镜像。",[608,27784,27785],{"align":24008},"docker build -t myimage .",[563,27787,27788,27791,27794],{},[608,27789,27790],{"align":24008},"docker pull",[608,27792,27793],{"align":24008},"从 Docker 仓库拉取镜像。",[608,27795,27796],{"align":24008},"docker pull ubuntu",[563,27798,27799,27802,27805],{},[608,27800,27801],{"align":24008},"docker push",[608,27803,27804],{"align":24008},"将本地镜像推送到 Docker 仓库。",[608,27806,27807],{"align":24008},"docker push myimage",[563,27809,27810,27813,27816],{},[608,27811,27812],{"align":24008},"docker stop",[608,27814,27815],{"align":24008},"停止一个正在运行的容器。",[608,27817,27818],{"align":24008},"docker stop container_id",[563,27820,27821,27824,27827],{},[608,27822,27823],{"align":24008},"docker start",[608,27825,27826],{"align":24008},"启动一个已经存在的容器。",[608,27828,27829],{"align":24008},"docker start container_id",[563,27831,27832,27835,27838],{},[608,27833,27834],{"align":24008},"docker restart",[608,27836,27837],{"align":24008},"重新启动容器。",[608,27839,27840],{"align":24008},"docker restart container_id",[563,27842,27843,27846,27849],{},[608,27844,27845],{"align":24008},"docker ps",[608,27847,27848],{"align":24008},"列出当前正在运行的容器。",[608,27850,27845],{"align":24008},[563,27852,27853,27856,27859],{},[608,27854,27855],{"align":24008},"docker rm",[608,27857,27858],{"align":24008},"删除一个或多个停止的容器。",[608,27860,27861],{"align":24008},"docker rm container_id",[563,27863,27864,27867,27870],{},[608,27865,27866],{"align":24008},"docker exec",[608,27868,27869],{"align":24008},"在一个正在运行的容器中执行命令。",[608,27871,27872],{"align":24008},"docker exec -it container_id bash",[563,27874,27875,27878,27881],{},[608,27876,27877],{"align":24008},"docker logs",[608,27879,27880],{"align":24008},"查看容器的日志输出。",[608,27882,27883],{"align":24008},"docker logs container_id",[563,27885,27886,27889,27892],{},[608,27887,27888],{"align":24008},"docker images",[608,27890,27891],{"align":24008},"列出本地所有镜像。",[608,27893,27888],{"align":24008},[563,27895,27896,27899,27902],{},[608,27897,27898],{"align":24008},"docker rmi",[608,27900,27901],{"align":24008},"删除一个或多个镜像。",[608,27903,27904],{"align":24008},"docker rmi myimage",[563,27906,27907,27910,27913],{},[608,27908,27909],{"align":24008},"docker network",[608,27911,27912],{"align":24008},"管理 Docker 网络。",[608,27914,27915],{"align":24008},"docker network ls",[563,27917,27918,27921,27924],{},[608,27919,27920],{"align":24008},"docker volume",[608,27922,27923],{"align":24008},"管理 Docker 数据卷。",[608,27925,27926],{"align":24008},"docker volume ls",[563,27928,27929,27932,27935],{},[608,27930,27931],{"align":24008},"docker-compose up",[608,27933,27934],{"align":24008},"启动 docker-compose.yml 中定义的所有服务。",[608,27936,27931],{"align":24008},[563,27938,27939,27942,27945],{},[608,27940,27941],{"align":24008},"docker-compose down",[608,27943,27944],{"align":24008},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[608,27946,27941],{"align":24008},[563,27948,27949,27952,27955],{},[608,27950,27951],{"align":24008},"docker info",[608,27953,27954],{"align":24008},"显示 Docker 系统的详细信息。",[608,27956,27951],{"align":24008},[563,27958,27959,27962,27965],{},[608,27960,27961],{"align":24008},"docker stats",[608,27963,27964],{"align":24008},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[608,27966,27961],{"align":24008},[563,27968,27969,27972,27975],{},[608,27970,27971],{"align":24008},"docker inspect",[608,27973,27974],{"align":24008},"查看容器或镜像的详细信息（JSON 格式）。",[608,27976,27977],{"align":24008},"docker inspect container_id",[563,27979,27980,27983,27986],{},[608,27981,27982],{"align":24008},"docker save",[608,27984,27985],{"align":24008},"将一个镜像保存为 tar 文件。",[608,27987,27988],{"align":24008},"docker save -o myimage.tar myimage",[563,27990,27991,27994,27997],{},[608,27992,27993],{"align":24008},"docker load",[608,27995,27996],{"align":24008},"从 tar 文件中加载镜像。",[608,27998,27999],{"align":24008},"docker load -i myimage.tar",[563,28001,28002,28005,28008],{},[608,28003,28004],{"align":24008},"docker tag",[608,28006,28007],{"align":24008},"为镜像添加标签（tag）。",[608,28009,28010],{"align":24008},"docker tag myimage myimage:v1",[563,28012,28013,28016,28019],{},[608,28014,28015],{"align":24008},"docker buildx build",[608,28017,28018],{"align":24008},"使用 Buildx 构建多架构镜像。",[608,28020,28021],{"align":24008},"docker buildx build -t myimage .",[563,28023,28024,28027,28030],{},[608,28025,28026],{"align":24008},"docker buildx create",[608,28028,28029],{"align":24008},"创建一个新的 Buildx 构建实例。",[608,28031,28032],{"align":24008},"docker buildx create –use",[563,28034,28035,28038,28041],{},[608,28036,28037],{"align":24008},"docker buildx ls",[608,28039,28040],{"align":24008},"列出所有可用的 Buildx 构建实例。",[608,28042,28037],{"align":24008},[563,28044,28045,28048,28051],{},[608,28046,28047],{"align":24008},"docker buildx use",[608,28049,28050],{"align":24008},"设置当前的 Buildx 构建实例。",[608,28052,28053],{"align":24008},"docker buildx use mybuilder",[563,28055,28056,28059,28062],{},[608,28057,28058],{"align":24008},"docker buildx bake",[608,28060,28061],{"align":24008},"使用 Bake 文件批量构建镜像。",[608,28063,28064],{"align":24008},"docker buildx bake -f bake.hcl",[563,28066,28067,28070,28073],{},[608,28068,28069],{"align":24008},"docker buildx build –push",[608,28071,28072],{"align":24008},"构建镜像并推送到镜像仓库。",[608,28074,28075],{"align":24008},"docker buildx build –push -t myimage .",[563,28077,28078,28081,28084],{},[608,28079,28080],{"align":24008},"docker buildx build –platform",[608,28082,28083],{"align":24008},"构建镜像并为多个平台生成支持。",[608,28085,28086],{"align":24008},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,28088,28089],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,28091,28092],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,28094,28095],{},"docker images 可以查看已经下载的镜像",[14,28097,28098],{},[44,28099],{"alt":46,"src":28100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,28102,28103],{},[33,28104,28105],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,28107,28108],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,28110,28111],{},"docker container logs 查看容器日志",[14,28113,28114],{},"docker top 查看容器里的进程",[14,28116,28117],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[49,28119,28121],{"className":51,"code":28120,"language":53,"meta":46,"style":46},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[28,28122,28123],{"__ignoreMap":46},[57,28124,28125,28128,28131,28134],{"class":59,"line":60},[57,28126,28127],{"class":70},"如：docker",[57,28129,28130],{"class":74}," cp",[57,28132,28133],{"class":74}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[57,28135,28136],{"class":74}," \u002Fmydata\u002Fnginx\n",[14,28138,28139],{},"docker run时在启动容器的时候会有几个常用的选项：",[1422,28141,28142,28145,28148],{},[380,28143,28144],{},"-d选项：表示后台运行",[380,28146,28147],{},"-P选项：随机端口映射",[380,28149,28150],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[394,28152,28154],{"id":28153},"_53run命令的参数非常重要",[33,28155,28156],{},"5.3.run命令的参数（非常重要）",[557,28158,28159,28172],{},[560,28160,28161],{},[563,28162,28163,28166,28169],{},[566,28164,28165],{"align":24008},"参数\u002F配置",[566,28167,28168],{"align":24008},"功能说明",[566,28170,28171],{"align":24008},"重要性与参考依据",[603,28173,28174,28185,28196,28207,28218,28229,28240,28251,28262,28273,28284,28295,28306,28317,28328],{},[563,28175,28176,28179,28182],{},[608,28177,28178],{"align":24008},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[608,28180,28181],{"align":24008},"指定容器名称，便于后续管理",[608,28183,28184],{"align":24008},"替代随机生成的容器名。",[563,28186,28187,28190,28193],{},[608,28188,28189],{"align":24008},"–gpus all",[608,28191,28192],{"align":24008},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[608,28194,28195],{"align":24008},"用于CUDA加速等GPU依赖任务。",[563,28197,28198,28201,28204],{},[608,28199,28200],{"align":24008},"-e NVIDIA_DRIVER_CAPABILITIES=all",[608,28202,28203],{"align":24008},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[608,28205,28206],{"align":24008},"确保容器内GPU功能完整67。",[563,28208,28209,28212,28215],{},[608,28210,28211],{"align":24008},"-dit",[608,28213,28214],{"align":24008},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[608,28216,28217],{"align":24008},"允许容器在后台运行并支持交互操作。",[563,28219,28220,28223,28226],{},[608,28221,28222],{"align":24008},"–privileged",[608,28224,28225],{"align":24008},"赋予容器完全主机权限（可访问设备、内核模块等）",[608,28227,28228],{"align":24008},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[563,28230,28231,28234,28237],{},[608,28232,28233],{"align":24008},"–net=host",[608,28235,28236],{"align":24008},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[608,28238,28239],{"align":24008},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[563,28241,28242,28245,28248],{},[608,28243,28244],{"align":24008},"–group-add audio–group-add video–group-add dialout",[608,28246,28247],{"align":24008},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[608,28249,28250],{"align":24008},"避免权限问题（如避免无法调用摄像头、麦克风）。",[563,28252,28253,28256,28259],{},[608,28254,28255],{"align":24008},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[608,28257,28258],{"align":24008},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[608,28260,28261],{"align":24008},"支持容器内运行图形界面应用（如OpenCV可视化）。",[563,28263,28264,28267,28270],{},[608,28265,28266],{"align":24008},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[608,28268,28269],{"align":24008},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[608,28271,28272],{"align":24008},"实现容器内图形显示。",[563,28274,28275,28278,28281],{},[608,28276,28277],{"align":24008},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[608,28279,28280],{"align":24008},"挂载X11认证文件（只读）",[608,28282,28283],{"align":24008},"确保容器有权连接宿主机显示服务。",[563,28285,28286,28289,28292],{},[608,28287,28288],{"align":24008},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[608,28290,28291],{"align":24008},"挂载Wayland显示协议相关目录",[608,28293,28294],{"align":24008},"支持Wayland协议的图形显示。",[563,28296,28297,28300,28303],{},[608,28298,28299],{"align":24008},"–ulimit nofile=1024:524288",[608,28301,28302],{"align":24008},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[608,28304,28305],{"align":24008},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[563,28307,28308,28311,28314],{},[608,28309,28310],{"align":24008},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[608,28312,28313],{"align":24008},"挂载宿主机用户目录到容器内同名路径",[608,28315,28316],{"align":24008},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[563,28318,28319,28322,28325],{},[608,28320,28321],{"align":24008},"-w \u002Fhome\u002Ftungchiahui",[608,28323,28324],{"align":24008},"设置容器启动后的默认工作目录",[608,28326,28327],{"align":24008},"直接进入项目路径，方便执行命令2324。",[563,28329,28330,28333,28336],{},[608,28331,28332],{"align":24008},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[608,28334,28335],{"align":24008},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[608,28337,28338],{"align":24008},"提供预配置的深度学习与机器人开发环境。",[14,28340,28341,28342,28344,28345,28348],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[28,28343,24845],{},"加不加",[28,28346,28347],{},"sudo -E","都无所谓。",[14,28350,28351,28352,28354,28355,28357,28358,28361,28362,28364],{},"用户已经被加到docker组了，不用",[28,28353,24845],{},"也行跑，其次，",[28,28356,24845],{},"运行的话，你的",[28,28359,28360],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[28,28363,28360],{},"更不可能变了。",[49,28366,28368],{"className":51,"code":28367,"language":53,"meta":46,"style":46},"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",[28,28369,28370,28383,28393,28403,28415,28422,28429,28436,28446,28455,28464,28478,28490,28502,28511,28521,28530,28545,28578,28605,28616,28623],{"__ignoreMap":46},[57,28371,28372,28374,28376,28378,28381],{"class":59,"line":60},[57,28373,24845],{"class":70},[57,28375,26589],{"class":74},[57,28377,27499],{"class":74},[57,28379,28380],{"class":81}," --name=ros_opencv_cuda",[57,28382,24947],{"class":81},[57,28384,28385,28388,28391],{"class":59,"line":67},[57,28386,28387],{"class":140},"--gpus ",[57,28389,28390],{"class":74},"all",[57,28392,24947],{"class":81},[57,28394,28395,28398,28401],{"class":59,"line":144},[57,28396,28397],{"class":140},"-e ",[57,28399,28400],{"class":74},"NVIDIA_DRIVER_CAPABILITIES=all",[57,28402,24947],{"class":81},[57,28404,28405,28407,28410,28413],{"class":59,"line":150},[57,28406,28397],{"class":140},[57,28408,28409],{"class":74},"DISPLAY=",[57,28411,28412],{"class":140},"$DISPLAY ",[57,28414,26444],{"class":81},[57,28416,28417,28420],{"class":59,"line":162},[57,28418,28419],{"class":140},"-dit ",[57,28421,26444],{"class":81},[57,28423,28424,28427],{"class":59,"line":180},[57,28425,28426],{"class":140},"--privileged ",[57,28428,26444],{"class":81},[57,28430,28431,28434],{"class":59,"line":186},[57,28432,28433],{"class":140},"--net=host ",[57,28435,26444],{"class":81},[57,28437,28438,28441,28444],{"class":59,"line":197},[57,28439,28440],{"class":140},"--group-add ",[57,28442,28443],{"class":74},"audio",[57,28445,24947],{"class":81},[57,28447,28448,28450,28453],{"class":59,"line":241},[57,28449,28440],{"class":140},[57,28451,28452],{"class":74},"video",[57,28454,24947],{"class":81},[57,28456,28457,28459,28462],{"class":59,"line":249},[57,28458,28440],{"class":140},[57,28460,28461],{"class":74},"dialout",[57,28463,24947],{"class":81},[57,28465,28466,28468,28471,28473,28476],{"class":59,"line":262},[57,28467,28397],{"class":140},[57,28469,28470],{"class":74},"XAUTHORITY=",[57,28472,28360],{"class":140},[57,28474,28475],{"class":74},"\u002F.Xauthority",[57,28477,24947],{"class":81},[57,28479,28480,28482,28485,28488],{"class":59,"line":281},[57,28481,28397],{"class":140},[57,28483,28484],{"class":74},"WAYLAND_DISPLAY=",[57,28486,28487],{"class":140},"$WAYLAND_DISPLAY ",[57,28489,26444],{"class":81},[57,28491,28492,28494,28497,28500],{"class":59,"line":287},[57,28493,28397],{"class":140},[57,28495,28496],{"class":74},"XDG_RUNTIME_DIR=",[57,28498,28499],{"class":140},"$XDG_RUNTIME_DIR ",[57,28501,26444],{"class":81},[57,28503,28504,28506,28509],{"class":59,"line":298},[57,28505,28397],{"class":140},[57,28507,28508],{"class":74},"QT_QPA_PLATFORM=xcb",[57,28510,24947],{"class":81},[57,28512,28513,28516,28519],{"class":59,"line":311},[57,28514,28515],{"class":140},"-v ",[57,28517,28518],{"class":74},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[57,28520,24947],{"class":81},[57,28522,28523,28525,28528],{"class":59,"line":322},[57,28524,28515],{"class":140},[57,28526,28527],{"class":74},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[57,28529,24947],{"class":81},[57,28531,28532,28535,28538,28540,28543],{"class":59,"line":1929},[57,28533,28534],{"class":140},"-v $HOME",[57,28536,28537],{"class":74},"\u002F.Xauthority:",[57,28539,28360],{"class":140},[57,28541,28542],{"class":74},"\u002F.Xauthority:ro",[57,28544,24947],{"class":81},[57,28546,28547,28549,28552,28554,28557,28560,28562,28565,28567,28569,28571,28573,28576],{"class":59,"line":1950},[57,28548,28515],{"class":140},[57,28550,28551],{"class":74},"\u002Frun\u002Fuser\u002F",[57,28553,25368],{"class":140},[57,28555,28556],{"class":70},"id",[57,28558,28559],{"class":81}," -u",[57,28561,845],{"class":140},[57,28563,28564],{"class":74},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[57,28566,25368],{"class":140},[57,28568,28556],{"class":70},[57,28570,28559],{"class":81},[57,28572,845],{"class":140},[57,28574,28575],{"class":74},"\u002Fwayland-0",[57,28577,24947],{"class":81},[57,28579,28580,28582,28584,28586,28588,28590,28592,28595,28597,28599,28601,28603],{"class":59,"line":1955},[57,28581,28515],{"class":140},[57,28583,28551],{"class":74},[57,28585,25368],{"class":140},[57,28587,28556],{"class":70},[57,28589,28559],{"class":81},[57,28591,845],{"class":140},[57,28593,28594],{"class":74},":\u002Frun\u002Fuser\u002F",[57,28596,25368],{"class":140},[57,28598,28556],{"class":70},[57,28600,28559],{"class":81},[57,28602,229],{"class":140},[57,28604,26444],{"class":81},[57,28606,28607,28609,28611,28614],{"class":59,"line":1969},[57,28608,28534],{"class":140},[57,28610,1275],{"class":74},[57,28612,28613],{"class":140},"$HOME ",[57,28615,26444],{"class":81},[57,28617,28618,28621],{"class":59,"line":1974},[57,28619,28620],{"class":140},"-w $HOME ",[57,28622,26444],{"class":81},[57,28624,28625],{"class":59,"line":2001},[57,28626,28627],{"class":140},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,28629,9298],{},[377,28631,28632,28640,28643,28646],{},[380,28633,28634,14067,28636,28639],{},[28,28635,28400],{},[28,28637,28638],{},"--gpus all","没有英伟达显卡请注释。",[380,28641,28642],{},"--name后面请自己为容器起名。",[380,28644,28645],{},"最后一行仓库名称请你自己找对应的镜像填上。",[380,28647,28648,28649,28654],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23825,28650,28651],{},[33,28652,28653],{},"请不要加","。",[49,28656,28658],{"className":51,"code":28657,"language":53,"meta":46,"style":46},"--ulimit nofile=1024:524288 \\\n",[28,28659,28660],{"__ignoreMap":46},[57,28661,28662,28665,28668],{"class":59,"line":60},[57,28663,28664],{"class":70},"--ulimit",[57,28666,28667],{"class":74}," nofile=1024:524288",[57,28669,24947],{"class":81},[14,28671,28672,28673,28678],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23825,28674,28675],{},[33,28676,28677],{},"不建议","**.**",[49,28680,28682],{"className":51,"code":28681,"language":53,"meta":46,"style":46},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[28,28683,28684,28711,28720],{"__ignoreMap":46},[57,28685,28686,28689,28692,28694,28696,28698,28700,28702,28704,28707,28709],{"class":59,"line":60},[57,28687,28688],{"class":70},"--user",[57,28690,28691],{"class":140}," $(",[57,28693,28556],{"class":70},[57,28695,28559],{"class":81},[57,28697,845],{"class":140},[57,28699,1275],{"class":74},[57,28701,25368],{"class":140},[57,28703,28556],{"class":70},[57,28705,28706],{"class":81}," -g",[57,28708,229],{"class":140},[57,28710,26444],{"class":81},[57,28712,28713,28715,28718],{"class":59,"line":67},[57,28714,28515],{"class":140},[57,28716,28717],{"class":74},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[57,28719,24947],{"class":81},[57,28721,28722,28724,28727],{"class":59,"line":144},[57,28723,28515],{"class":140},[57,28725,28726],{"class":74},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[57,28728,24947],{"class":81},[342,28730,28731],{},"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":46,"searchDepth":67,"depth":67,"links":28733},[28734,28735,28736],{"id":27732,"depth":144,"text":27733},{"id":27742,"depth":144,"text":27743},{"id":28153,"depth":144,"text":28156},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27724,"description":46},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28743,"title":28744,"body":28745,"description":46,"extension":348,"meta":30368,"navigation":350,"path":30369,"seo":30370,"stem":30371,"__hash__":30372},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28746,"toc":30363},[28747,28750,28754,28757,28979,28983,28987,28990,29096,29101,29104,29109,29112,29117,29120,29125,29128,29140,29143,29148,29155,29183,29190,29266,29271,29274,29297,29299,29374,29379,29382,29386,29394,29399,29404,29408,29419,29425,29428,29431,29455,29458,29461,29489,29492,29495,29960,29963,29968,29973,29977,30000,30005,30009,30013,30016,30019,30022,30049,30052,30055,30073,30076,30079,30101,30109,30114,30119,30123,30126,30129,30132,30135,30180,30183,30201,30204,30209,30212,30233,30236,30292,30295,30300,30304,30307,30314,30317,30320,30325,30328,30344,30347,30360],[10,28748,28744],{"id":28749},"_6手动创建docker镜像",[394,28751,28753],{"id":28752},"_61dockerfile","6.1.DockerFile",[14,28755,28756],{},"常用命令：",[557,28758,28759,28770],{},[560,28760,28761],{},[563,28762,28763,28766,28768],{},[566,28764,28765],{"align":24008},"指令",[566,28767,26138],{"align":24008},[566,28769,27761],{"align":24008},[603,28771,28772,28782,28798,28809,28820,28831,28842,28853,28864,28878,28892,28903,28917,28928,28939,28953,28968],{},[563,28773,28774,28776,28779],{},[608,28775,27639],{"align":24008},[608,28777,28778],{"align":24008},"指定基础镜像，是 Dockerfile 的起点",[608,28780,28781],{"align":24008},"FROM ubuntu:22.04",[563,28783,28784,28787,28790],{},[608,28785,28786],{"align":24008},"LABEL",[608,28788,28789],{"align":24008},"添加元数据（如作者、版本等）",[608,28791,28792,28793,28797],{"align":24008},"LABEL maintainer=”",[18,28794,28796],{"href":28795},"mailto:you@example.com","you@example.com","”",[563,28799,28800,28803,28806],{},[608,28801,28802],{"align":24008},"ENV",[608,28804,28805],{"align":24008},"设置环境变量",[608,28807,28808],{"align":24008},"ENV PORT=8080",[563,28810,28811,28814,28817],{},[608,28812,28813],{"align":24008},"ARG",[608,28815,28816],{"align":24008},"构建参数，只在构建期间可用",[608,28818,28819],{"align":24008},"ARG VERSION=1.0",[563,28821,28822,28825,28828],{},[608,28823,28824],{"align":24008},"RUN",[608,28826,28827],{"align":24008},"构建镜像时运行命令",[608,28829,28830],{"align":24008},"RUN apt-get update && apt-get install -y curl",[563,28832,28833,28836,28839],{},[608,28834,28835],{"align":24008},"COPY",[608,28837,28838],{"align":24008},"复制文件到镜像中",[608,28840,28841],{"align":24008},"COPY . \u002Fapp",[563,28843,28844,28847,28850],{},[608,28845,28846],{"align":24008},"ADD",[608,28848,28849],{"align":24008},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[608,28851,28852],{"align":24008},"ADD archive.tar.gz \u002Fdata\u002F",[563,28854,28855,28858,28861],{},[608,28856,28857],{"align":24008},"WORKDIR",[608,28859,28860],{"align":24008},"设置工作目录",[608,28862,28863],{"align":24008},"WORKDIR \u002Fopt",[563,28865,28866,28869,28872],{},[608,28867,28868],{"align":24008},"CMD",[608,28870,28871],{"align":24008},"设置容器启动时默认命令（可被 docker run 覆盖）",[608,28873,28874,28875],{"align":24008},"CMD ",[57,28876,28877],{},"“node”, “index.js”",[563,28879,28880,28883,28886],{},[608,28881,28882],{"align":24008},"ENTRYPOINT",[608,28884,28885],{"align":24008},"设置容器启动时固定命令（通常用于 CLI 工具等）",[608,28887,28888,28889],{"align":24008},"ENTRYPOINT ",[57,28890,28891],{},"“python3”",[563,28893,28894,28897,28900],{},[608,28895,28896],{"align":24008},"EXPOSE",[608,28898,28899],{"align":24008},"声明镜像内服务监听的端口（不会自动映射）",[608,28901,28902],{"align":24008},"EXPOSE 80",[563,28904,28905,28908,28911],{},[608,28906,28907],{"align":24008},"VOLUME",[608,28909,28910],{"align":24008},"声明数据卷挂载点",[608,28912,28913,28914],{"align":24008},"VOLUME ",[57,28915,28916],{},"“\u002Fdata”",[563,28918,28919,28922,28925],{},[608,28920,28921],{"align":24008},"USER",[608,28923,28924],{"align":24008},"设置后续命令执行的用户",[608,28926,28927],{"align":24008},"USER appuser",[563,28929,28930,28933,28936],{},[608,28931,28932],{"align":24008},"ONBUILD",[608,28934,28935],{"align":24008},"当镜像作为其他镜像基础镜像时触发的构建指令",[608,28937,28938],{"align":24008},"ONBUILD COPY . \u002Fsrc",[563,28940,28941,28944,28947],{},[608,28942,28943],{"align":24008},"SHELL",[608,28945,28946],{"align":24008},"更改默认 shell，比如将 sh -c 改为 bash -c",[608,28948,28949,28950],{"align":24008},"SHELL ",[57,28951,28952],{},"“\u002Fbin\u002Fbash”, “-c”",[563,28954,28955,28958,28961],{},[608,28956,28957],{"align":24008},"HEALTHCHECK",[608,28959,28960],{"align":24008},"定义容器运行时的健康检查命令",[608,28962,28963,28964],{"align":24008},"`HEALTHCHECK CMD curl –fail ",[18,28965,28966],{"href":28966,"rel":28967},"http:\u002F\u002Flocalhost:8080",[22],[563,28969,28970,28973,28976],{},[608,28971,28972],{"align":24008},"STOPSIGNAL",[608,28974,28975],{"align":24008},"容器停止时发送的信号",[608,28977,28978],{"align":24008},"STOPSIGNAL SIGKILL",[394,28980,28982],{"id":28981},"_62自己创建容器","6.2.自己创建容器",[22270,28984,28986],{"id":28985},"_621手动创建","6.2.1.手动创建",[14,28988,28989],{},"在x86电脑上编译x86的：",[49,28991,28993],{"className":51,"code":28992,"language":53,"meta":46,"style":46},"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",[28,28994,28995,29011,29015,29028,29032,29045,29049,29062,29066,29079,29083],{"__ignoreMap":46},[57,28996,28997,28999,29002,29005,29008],{"class":59,"line":60},[57,28998,26822],{"class":70},[57,29000,29001],{"class":74}," build",[57,29003,29004],{"class":81}," -t",[57,29006,29007],{"class":74}," ros-melodic-cuda118-cudnn8-bionic:latest",[57,29009,29010],{"class":74}," .\n",[57,29012,29013],{"class":59,"line":67},[57,29014,2673],{"emptyLinePlaceholder":350},[57,29016,29017,29019,29021,29023,29026],{"class":59,"line":144},[57,29018,26822],{"class":70},[57,29020,29001],{"class":74},[57,29022,29004],{"class":81},[57,29024,29025],{"class":74}," ros-noetic-focal:latest",[57,29027,29010],{"class":74},[57,29029,29030],{"class":59,"line":150},[57,29031,2673],{"emptyLinePlaceholder":350},[57,29033,29034,29036,29038,29040,29043],{"class":59,"line":162},[57,29035,26822],{"class":70},[57,29037,29001],{"class":74},[57,29039,29004],{"class":81},[57,29041,29042],{"class":74}," ros-humble-jammy:latest",[57,29044,29010],{"class":74},[57,29046,29047],{"class":59,"line":180},[57,29048,2673],{"emptyLinePlaceholder":350},[57,29050,29051,29053,29055,29057,29060],{"class":59,"line":186},[57,29052,26822],{"class":70},[57,29054,29001],{"class":74},[57,29056,29004],{"class":81},[57,29058,29059],{"class":74}," ros-jazzy-noble:latest",[57,29061,29010],{"class":74},[57,29063,29064],{"class":59,"line":197},[57,29065,2673],{"emptyLinePlaceholder":350},[57,29067,29068,29070,29072,29074,29077],{"class":59,"line":241},[57,29069,26822],{"class":70},[57,29071,29001],{"class":74},[57,29073,29004],{"class":81},[57,29075,29076],{"class":74}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[57,29078,29010],{"class":74},[57,29080,29081],{"class":59,"line":249},[57,29082,2673],{"emptyLinePlaceholder":350},[57,29084,29085,29087,29089,29091,29094],{"class":59,"line":262},[57,29086,26822],{"class":70},[57,29088,29001],{"class":74},[57,29090,29004],{"class":81},[57,29092,29093],{"class":74}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[57,29095,29010],{"class":74},[14,29097,29098],{},[44,29099],{"alt":46,"src":29100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,29102,29103],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,29105,29106],{},[44,29107],{"alt":46,"src":29108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,29110,29111],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[377,29113,29114],{},[380,29115,29116],{},"创建 Docker Hub 账户",[14,29118,29119],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[377,29121,29122],{"start":67},[380,29123,29124],{},"登录 Docker Hub",[14,29126,29127],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[49,29129,29131],{"className":51,"code":29130,"language":53,"meta":46,"style":46},"docker login\n",[28,29132,29133],{"__ignoreMap":46},[57,29134,29135,29137],{"class":59,"line":60},[57,29136,26822],{"class":70},[57,29138,29139],{"class":74}," login\n",[14,29141,29142],{},"输入你的 Docker Hub 用户名和密码进行验证。",[377,29144,29145],{},[380,29146,29147],{},"为你的镜像打标签",[14,29149,29150,29151,29154],{},"Docker Hub 使用 ",[28,29152,29153],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[49,29156,29158],{"className":51,"code":29157,"language":53,"meta":46,"style":46},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[28,29159,29160],{"__ignoreMap":46},[57,29161,29162,29164,29167,29169,29172,29175,29178,29180],{"class":59,"line":60},[57,29163,26822],{"class":70},[57,29165,29166],{"class":74}," tag",[57,29168,29059],{"class":74},[57,29170,29171],{"class":136}," \u003C",[57,29173,29174],{"class":74},"你的用户",[57,29176,29177],{"class":140},"名",[57,29179,223],{"class":136},[57,29181,29182],{"class":74},"\u002Fros-jazzy-noble:latest\n",[14,29184,29185,29186,29189],{},"例如，如果你的 Docker Hub 用户名是 ",[28,29187,29188],{},"tungchiahui","，你应该执行：",[49,29191,29193],{"className":51,"code":29192,"language":53,"meta":46,"style":46},"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",[28,29194,29195,29206,29210,29221,29225,29236,29240,29251,29255],{"__ignoreMap":46},[57,29196,29197,29199,29201,29203],{"class":59,"line":60},[57,29198,26822],{"class":70},[57,29200,29166],{"class":74},[57,29202,29025],{"class":74},[57,29204,29205],{"class":74}," tungchiahui\u002Fros-noetic-focal:latest\n",[57,29207,29208],{"class":59,"line":67},[57,29209,2673],{"emptyLinePlaceholder":350},[57,29211,29212,29214,29216,29218],{"class":59,"line":144},[57,29213,26822],{"class":70},[57,29215,29166],{"class":74},[57,29217,29042],{"class":74},[57,29219,29220],{"class":74}," tungchiahui\u002Fros-humble-jammy:latest\n",[57,29222,29223],{"class":59,"line":150},[57,29224,2673],{"emptyLinePlaceholder":350},[57,29226,29227,29229,29231,29233],{"class":59,"line":162},[57,29228,26822],{"class":70},[57,29230,29166],{"class":74},[57,29232,29059],{"class":74},[57,29234,29235],{"class":74}," tungchiahui\u002Fros-jazzy-noble:latest\n",[57,29237,29238],{"class":59,"line":180},[57,29239,2673],{"emptyLinePlaceholder":350},[57,29241,29242,29244,29246,29248],{"class":59,"line":186},[57,29243,26822],{"class":70},[57,29245,29166],{"class":74},[57,29247,29076],{"class":74},[57,29249,29250],{"class":74}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[57,29252,29253],{"class":59,"line":197},[57,29254,2673],{"emptyLinePlaceholder":350},[57,29256,29257,29259,29261,29263],{"class":59,"line":241},[57,29258,26822],{"class":70},[57,29260,29166],{"class":74},[57,29262,29093],{"class":74},[57,29264,29265],{"class":74}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[377,29267,29268],{"start":67},[380,29269,29270],{},"推送镜像到 Docker Hub",[14,29272,29273],{},"使用以下命令将镜像推送到 Docker Hub：",[49,29275,29277],{"className":51,"code":29276,"language":53,"meta":46,"style":46},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[28,29278,29279],{"__ignoreMap":46},[57,29280,29281,29283,29286,29288,29290,29292,29294],{"class":59,"line":60},[57,29282,26822],{"class":70},[57,29284,29285],{"class":74}," push",[57,29287,29171],{"class":136},[57,29289,29174],{"class":74},[57,29291,29177],{"class":140},[57,29293,223],{"class":136},[57,29295,29296],{"class":74},"\u002Fros-noetic-jazzy-noble:latest\n",[14,29298,14905],{},[49,29300,29302],{"className":51,"code":29301,"language":53,"meta":46,"style":46},"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",[28,29303,29304,29312,29316,29324,29328,29336,29340,29349,29353,29361,29365],{"__ignoreMap":46},[57,29305,29306,29308,29310],{"class":59,"line":60},[57,29307,26822],{"class":70},[57,29309,29285],{"class":74},[57,29311,29205],{"class":74},[57,29313,29314],{"class":59,"line":67},[57,29315,2673],{"emptyLinePlaceholder":350},[57,29317,29318,29320,29322],{"class":59,"line":144},[57,29319,26822],{"class":70},[57,29321,29285],{"class":74},[57,29323,29220],{"class":74},[57,29325,29326],{"class":59,"line":150},[57,29327,2673],{"emptyLinePlaceholder":350},[57,29329,29330,29332,29334],{"class":59,"line":162},[57,29331,26822],{"class":70},[57,29333,29285],{"class":74},[57,29335,29235],{"class":74},[57,29337,29338],{"class":59,"line":180},[57,29339,2673],{"emptyLinePlaceholder":350},[57,29341,29342,29344,29346],{"class":59,"line":186},[57,29343,26822],{"class":70},[57,29345,29285],{"class":74},[57,29347,29348],{"class":74}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[57,29350,29351],{"class":59,"line":197},[57,29352,2673],{"emptyLinePlaceholder":350},[57,29354,29355,29357,29359],{"class":59,"line":241},[57,29356,26822],{"class":70},[57,29358,29285],{"class":74},[57,29360,29265],{"class":74},[57,29362,29363],{"class":59,"line":249},[57,29364,2673],{"emptyLinePlaceholder":350},[57,29366,29367,29369,29371],{"class":59,"line":262},[57,29368,26822],{"class":70},[57,29370,29285],{"class":74},[57,29372,29373],{"class":74}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[377,29375,29376],{"start":144},[380,29377,29378],{},"验证推送成功",[14,29380,29381],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,29383,29384],{},[33,29385,4057],{},[1422,29387,29388,29391],{},[380,29389,29390],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[380,29392,29393],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,29395,29396],{},[44,29397],{"alt":46,"src":29398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,29400,29401],{},[44,29402],{"alt":46,"src":29403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22270,29405,29407],{"id":29406},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,29409,29410,29411,29414,29415,29418],{},"如果您想在 ",[33,29412,29413],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[33,29416,29417],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,29420,29421,29422],{},"1. ",[33,29423,29424],{},"启用 Docker 跨平台构建",[14,29426,29427],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,29429,29430],{},"第一步：启用 buildx（只需执行一次）",[49,29432,29434],{"className":51,"code":29433,"language":53,"meta":46,"style":46},"docker buildx create --name multiarch_builder --use\n",[28,29435,29436],{"__ignoreMap":46},[57,29437,29438,29440,29443,29446,29449,29452],{"class":59,"line":60},[57,29439,26822],{"class":70},[57,29441,29442],{"class":74}," buildx",[57,29444,29445],{"class":74}," create",[57,29447,29448],{"class":81}," --name",[57,29450,29451],{"class":74}," multiarch_builder",[57,29453,29454],{"class":81}," --use\n",[14,29456,29457],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,29459,29460],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[49,29462,29464],{"className":51,"code":29463,"language":53,"meta":46,"style":46},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[28,29465,29466],{"__ignoreMap":46},[57,29467,29468,29470,29472,29474,29477,29480,29483,29486],{"class":59,"line":60},[57,29469,26822],{"class":70},[57,29471,27499],{"class":74},[57,29473,27502],{"class":81},[57,29475,29476],{"class":81}," --privileged",[57,29478,29479],{"class":74}," multiarch\u002Fqemu-user-static",[57,29481,29482],{"class":81}," --reset",[57,29484,29485],{"class":81}," -p",[57,29487,29488],{"class":74}," yes\n",[14,29490,29491],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,29493,29494],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[49,29496,29498],{"className":51,"code":29497,"language":53,"meta":46,"style":46},"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",[28,29499,29500,29542,29546,29551,29561,29571,29580,29586,29590,29594,29604,29612,29621,29627,29631,29635,29645,29653,29662,29668,29672,29676,29686,29694,29703,29709,29713,29717,29727,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,29933,29941,29950,29956],{"__ignoreMap":46},[57,29501,29502,29504,29506,29508,29511,29514,29516,29518,29521,29523,29525,29527,29529,29532,29535,29537,29540],{"class":59,"line":60},[57,29503,26822],{"class":70},[57,29505,29442],{"class":74},[57,29507,29001],{"class":74},[57,29509,29510],{"class":81}," --platform",[57,29512,29513],{"class":74}," linux\u002Famd64,linux\u002Farm64",[57,29515,29004],{"class":81},[57,29517,29171],{"class":136},[57,29519,29520],{"class":74},"你的镜像",[57,29522,29177],{"class":140},[57,29524,223],{"class":136},[57,29526,1275],{"class":74},[57,29528,1326],{"class":136},[57,29530,29531],{"class":74},"标",[57,29533,29534],{"class":140},"签",[57,29536,223],{"class":136},[57,29538,29539],{"class":81}," --push",[57,29541,29010],{"class":74},[57,29543,29544],{"class":59,"line":67},[57,29545,2673],{"emptyLinePlaceholder":350},[57,29547,29548],{"class":59,"line":144},[57,29549,29550],{"class":63},"# 例子：\n",[57,29552,29553,29555,29557,29559],{"class":59,"line":150},[57,29554,26822],{"class":70},[57,29556,29442],{"class":74},[57,29558,29001],{"class":74},[57,29560,24947],{"class":81},[57,29562,29563,29566,29569],{"class":59,"line":162},[57,29564,29565],{"class":140},"--platform ",[57,29567,29568],{"class":74},"linux\u002Famd64,linux\u002Farm64",[57,29570,24947],{"class":81},[57,29572,29573,29575,29578],{"class":59,"line":180},[57,29574,29004],{"class":81},[57,29576,29577],{"class":74}," tungchiahui\u002Fros:noetic-focal",[57,29579,24947],{"class":81},[57,29581,29582,29584],{"class":59,"line":186},[57,29583,29539],{"class":81},[57,29585,24947],{"class":81},[57,29587,29588],{"class":59,"line":197},[57,29589,29010],{"class":74},[57,29591,29592],{"class":59,"line":241},[57,29593,2673],{"emptyLinePlaceholder":350},[57,29595,29596,29598,29600,29602],{"class":59,"line":249},[57,29597,26822],{"class":70},[57,29599,29442],{"class":74},[57,29601,29001],{"class":74},[57,29603,24947],{"class":81},[57,29605,29606,29608,29610],{"class":59,"line":262},[57,29607,29565],{"class":140},[57,29609,29568],{"class":74},[57,29611,24947],{"class":81},[57,29613,29614,29616,29619],{"class":59,"line":281},[57,29615,29004],{"class":81},[57,29617,29618],{"class":74}," tungchiahui\u002Fros:humble-jammy",[57,29620,24947],{"class":81},[57,29622,29623,29625],{"class":59,"line":287},[57,29624,29539],{"class":81},[57,29626,24947],{"class":81},[57,29628,29629],{"class":59,"line":298},[57,29630,29010],{"class":74},[57,29632,29633],{"class":59,"line":311},[57,29634,2673],{"emptyLinePlaceholder":350},[57,29636,29637,29639,29641,29643],{"class":59,"line":322},[57,29638,26822],{"class":70},[57,29640,29442],{"class":74},[57,29642,29001],{"class":74},[57,29644,24947],{"class":81},[57,29646,29647,29649,29651],{"class":59,"line":1929},[57,29648,29565],{"class":140},[57,29650,29568],{"class":74},[57,29652,24947],{"class":81},[57,29654,29655,29657,29660],{"class":59,"line":1950},[57,29656,29004],{"class":81},[57,29658,29659],{"class":74}," tungchiahui\u002Fros:jazzy-noble",[57,29661,24947],{"class":81},[57,29663,29664,29666],{"class":59,"line":1955},[57,29665,29539],{"class":81},[57,29667,24947],{"class":81},[57,29669,29670],{"class":59,"line":1969},[57,29671,29010],{"class":74},[57,29673,29674],{"class":59,"line":1974},[57,29675,2673],{"emptyLinePlaceholder":350},[57,29677,29678,29680,29682,29684],{"class":59,"line":2001},[57,29679,26589],{"class":70},[57,29681,29442],{"class":74},[57,29683,29001],{"class":74},[57,29685,24947],{"class":81},[57,29687,29688,29690,29692],{"class":59,"line":2006},[57,29689,29565],{"class":140},[57,29691,29568],{"class":74},[57,29693,24947],{"class":81},[57,29695,29696,29698,29701],{"class":59,"line":2023},[57,29697,29004],{"class":81},[57,29699,29700],{"class":74}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[57,29702,24947],{"class":81},[57,29704,29705,29707],{"class":59,"line":2028},[57,29706,29539],{"class":81},[57,29708,24947],{"class":81},[57,29710,29711],{"class":59,"line":2033},[57,29712,29010],{"class":74},[57,29714,29715],{"class":59,"line":2038},[57,29716,2673],{"emptyLinePlaceholder":350},[57,29718,29719,29721,29723,29725],{"class":59,"line":2052},[57,29720,26822],{"class":70},[57,29722,29442],{"class":74},[57,29724,29001],{"class":74},[57,29726,24947],{"class":81},[57,29728,29729,29731,29733],{"class":59,"line":2057},[57,29730,29565],{"class":140},[57,29732,29568],{"class":74},[57,29734,24947],{"class":81},[57,29736,29737,29739,29742],{"class":59,"line":2850},[57,29738,29004],{"class":81},[57,29740,29741],{"class":74}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[57,29743,24947],{"class":81},[57,29745,29746,29748],{"class":59,"line":2864},[57,29747,29539],{"class":81},[57,29749,24947],{"class":81},[57,29751,29752],{"class":59,"line":2872},[57,29753,29010],{"class":74},[57,29755,29756],{"class":59,"line":2877},[57,29757,2673],{"emptyLinePlaceholder":350},[57,29759,29760,29762,29764,29766],{"class":59,"line":2883},[57,29761,26589],{"class":70},[57,29763,29442],{"class":74},[57,29765,29001],{"class":74},[57,29767,24947],{"class":81},[57,29769,29770,29772,29774],{"class":59,"line":2889},[57,29771,29565],{"class":140},[57,29773,29568],{"class":74},[57,29775,24947],{"class":81},[57,29777,29778,29780,29783],{"class":59,"line":2894},[57,29779,29004],{"class":81},[57,29781,29782],{"class":74}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[57,29784,24947],{"class":81},[57,29786,29787,29789],{"class":59,"line":8221},[57,29788,29539],{"class":81},[57,29790,24947],{"class":81},[57,29792,29793],{"class":59,"line":8245},[57,29794,29010],{"class":74},[57,29796,29797],{"class":59,"line":8250},[57,29798,2673],{"emptyLinePlaceholder":350},[57,29800,29801,29803,29805,29807],{"class":59,"line":8256},[57,29802,26822],{"class":70},[57,29804,29442],{"class":74},[57,29806,29001],{"class":74},[57,29808,24947],{"class":81},[57,29810,29811,29813,29815],{"class":59,"line":8283},[57,29812,29565],{"class":140},[57,29814,29568],{"class":74},[57,29816,24947],{"class":81},[57,29818,29819,29821,29824],{"class":59,"line":8288},[57,29820,29004],{"class":81},[57,29822,29823],{"class":74}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[57,29825,24947],{"class":81},[57,29827,29828,29830],{"class":59,"line":8294},[57,29829,29539],{"class":81},[57,29831,24947],{"class":81},[57,29833,29834],{"class":59,"line":8306},[57,29835,29010],{"class":74},[57,29837,29838],{"class":59,"line":8318},[57,29839,2673],{"emptyLinePlaceholder":350},[57,29841,29842,29844,29846,29848],{"class":59,"line":8330},[57,29843,26822],{"class":70},[57,29845,29442],{"class":74},[57,29847,29001],{"class":74},[57,29849,24947],{"class":81},[57,29851,29852,29854,29856],{"class":59,"line":9989},[57,29853,29565],{"class":140},[57,29855,29568],{"class":74},[57,29857,24947],{"class":81},[57,29859,29860,29862,29865],{"class":59,"line":10014},[57,29861,29004],{"class":81},[57,29863,29864],{"class":74}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[57,29866,24947],{"class":81},[57,29868,29869,29871],{"class":59,"line":10037},[57,29870,29539],{"class":81},[57,29872,24947],{"class":81},[57,29874,29875],{"class":59,"line":10061},[57,29876,29010],{"class":74},[57,29878,29879],{"class":59,"line":10066},[57,29880,2673],{"emptyLinePlaceholder":350},[57,29882,29883,29885,29887,29889],{"class":59,"line":10071},[57,29884,26589],{"class":70},[57,29886,29442],{"class":74},[57,29888,29001],{"class":74},[57,29890,24947],{"class":81},[57,29892,29893,29895,29897],{"class":59,"line":10076},[57,29894,29565],{"class":140},[57,29896,29568],{"class":74},[57,29898,24947],{"class":81},[57,29900,29901,29903,29906],{"class":59,"line":10085},[57,29902,29004],{"class":81},[57,29904,29905],{"class":74}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[57,29907,24947],{"class":81},[57,29909,29910,29912],{"class":59,"line":10090},[57,29911,29539],{"class":81},[57,29913,24947],{"class":81},[57,29915,29916],{"class":59,"line":10096},[57,29917,29010],{"class":74},[57,29919,29920],{"class":59,"line":10117},[57,29921,2673],{"emptyLinePlaceholder":350},[57,29923,29924,29927,29929,29931],{"class":59,"line":10123},[57,29925,29926],{"class":70},"  docker",[57,29928,29442],{"class":74},[57,29930,29001],{"class":74},[57,29932,24947],{"class":81},[57,29934,29935,29937,29939],{"class":59,"line":10137},[57,29936,29565],{"class":140},[57,29938,29568],{"class":74},[57,29940,24947],{"class":81},[57,29942,29943,29945,29948],{"class":59,"line":10143},[57,29944,29004],{"class":81},[57,29946,29947],{"class":74}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[57,29949,24947],{"class":81},[57,29951,29952,29954],{"class":59,"line":10170},[57,29953,29539],{"class":81},[57,29955,24947],{"class":81},[57,29957,29958],{"class":59,"line":10179},[57,29959,29010],{"class":74},[14,29961,29962],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,29964,29965],{},[44,29966],{"alt":46,"src":29967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,29969,29970],{},[44,29971],{"alt":46,"src":29972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22270,29974,29976],{"id":29975},"_623清除构建缓存","6.2.3.清除构建缓存",[49,29978,29980],{"className":51,"code":29979,"language":53,"meta":46,"style":46},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[28,29981,29982,29987],{"__ignoreMap":46},[57,29983,29984],{"class":59,"line":60},[57,29985,29986],{"class":63},"# 清理BuildKit构建缓存\n",[57,29988,29989,29991,29994,29997],{"class":59,"line":67},[57,29990,26822],{"class":70},[57,29992,29993],{"class":74}," builder",[57,29995,29996],{"class":74}," prune",[57,29998,29999],{"class":81}," -f\n",[14,30001,30002],{},[44,30003],{"alt":46,"src":30004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[394,30006,30008],{"id":30007},"_63补充","6.3.补充",[22270,30010,30012],{"id":30011},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,30014,30015],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,30017,30018],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,30020,30021],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[49,30023,30025],{"className":51,"code":30024,"language":53,"meta":46,"style":46},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[28,30026,30027,30034],{"__ignoreMap":46},[57,30028,30029,30031],{"class":59,"line":60},[57,30030,27639],{"class":70},[57,30032,30033],{"class":74}," nginx\n",[57,30035,30036,30038,30041,30044,30046],{"class":59,"line":67},[57,30037,28824],{"class":70},[57,30039,30040],{"class":74}," echo",[57,30042,30043],{"class":74}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[57,30045,26491],{"class":136},[57,30047,30048],{"class":74}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,30050,30051],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,30053,30054],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[49,30056,30058],{"className":51,"code":30057,"language":53,"meta":46,"style":46},"docker build -t nginx:tuling .\n",[28,30059,30060],{"__ignoreMap":46},[57,30061,30062,30064,30066,30068,30071],{"class":59,"line":60},[57,30063,26822],{"class":70},[57,30065,29001],{"class":74},[57,30067,29004],{"class":81},[57,30069,30070],{"class":74}," nginx:tuling",[57,30072,29010],{"class":74},[14,30074,30075],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,30077,30078],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[49,30080,30082],{"className":51,"code":30081,"language":53,"meta":46,"style":46},"docker run -d -p 92:80 nginx:tuling\n",[28,30083,30084],{"__ignoreMap":46},[57,30085,30086,30088,30090,30093,30095,30098],{"class":59,"line":60},[57,30087,26822],{"class":70},[57,30089,27499],{"class":74},[57,30091,30092],{"class":81}," -d",[57,30094,29485],{"class":81},[57,30096,30097],{"class":74}," 92:80",[57,30099,30100],{"class":74}," nginx:tuling\n",[14,30102,30103,30104],{},"4、访问 ",[18,30105,30108],{"href":30106,"rel":30107},"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",[22],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,30110,30111],{},[44,30112],{"alt":46,"src":30113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,30115,30116],{},[44,30117],{"alt":46,"src":30118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22270,30120,30122],{"id":30121},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,30124,30125],{},"只需要知道大体流程即可",[14,30127,30128],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,30130,30131],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,30133,30134],{},"2、在Dockerfile中添加以下内容",[49,30136,30138],{"className":26360,"code":30137,"language":26362,"meta":46,"style":46},"# 基于哪个镜像\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",[28,30139,30140,30145,30150,30155,30160,30165,30170,30175],{"__ignoreMap":46},[57,30141,30142],{"class":59,"line":60},[57,30143,30144],{},"# 基于哪个镜像\n",[57,30146,30147],{"class":59,"line":67},[57,30148,30149],{},"From java:8\n",[57,30151,30152],{"class":59,"line":144},[57,30153,30154],{},"# 复制文件到容器\n",[57,30156,30157],{"class":59,"line":150},[57,30158,30159],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[57,30161,30162],{"class":59,"line":162},[57,30163,30164],{},"# 声明需要暴露的端口\n",[57,30166,30167],{"class":59,"line":180},[57,30168,30169],{},"EXPOSE 8877\n",[57,30171,30172],{"class":59,"line":186},[57,30173,30174],{},"# 配置容器启动后执行的命令\n",[57,30176,30177],{"class":59,"line":197},[57,30178,30179],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,30181,30182],{},"3、使用docker build命令构建镜像",[49,30184,30186],{"className":51,"code":30185,"language":53,"meta":46,"style":46},"docker build -t tulingmall-member:0.0.5 .\n",[28,30187,30188],{"__ignoreMap":46},[57,30189,30190,30192,30194,30196,30199],{"class":59,"line":60},[57,30191,26822],{"class":70},[57,30193,29001],{"class":74},[57,30195,29004],{"class":81},[57,30197,30198],{"class":74}," tulingmall-member:0.0.5",[57,30200,29010],{"class":74},[14,30202,30203],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,30205,30206],{},[44,30207],{"alt":46,"src":30208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,30210,30211],{},"4、启动镜像，加-d可在后台启动",[49,30213,30215],{"className":51,"code":30214,"language":53,"meta":46,"style":46},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[28,30216,30217],{"__ignoreMap":46},[57,30218,30219,30221,30223,30225,30227,30230],{"class":59,"line":60},[57,30220,26822],{"class":70},[57,30222,27499],{"class":74},[57,30224,30092],{"class":81},[57,30226,29485],{"class":81},[57,30228,30229],{"class":74}," 8877:8877",[57,30231,30232],{"class":74}," tulingmall-member:0.0.5\n",[14,30234,30235],{},"加上JVM参数：",[49,30237,30239],{"className":51,"code":30238,"language":53,"meta":46,"style":46},"# --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",[28,30240,30241,30246,30261,30271,30280,30287],{"__ignoreMap":46},[57,30242,30243],{"class":59,"line":60},[57,30244,30245],{"class":63},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[57,30247,30248,30250,30252,30255,30257,30259],{"class":59,"line":67},[57,30249,26822],{"class":70},[57,30251,27499],{"class":74},[57,30253,30254],{"class":81},"  -d",[57,30256,29485],{"class":81},[57,30258,30229],{"class":74},[57,30260,24947],{"class":81},[57,30262,30263,30265,30268],{"class":59,"line":144},[57,30264,28397],{"class":140},[57,30266,30267],{"class":74},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[57,30269,30270],{"class":81},"  \\\n",[57,30272,30273,30275,30278],{"class":59,"line":150},[57,30274,28397],{"class":140},[57,30276,30277],{"class":74},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[57,30279,30270],{"class":81},[57,30281,30282,30285],{"class":59,"line":162},[57,30283,30284],{"class":140},"--cap-add=SYS_PTRACE  ",[57,30286,26444],{"class":81},[57,30288,30289],{"class":59,"line":180},[57,30290,30291],{"class":140},"tulingmall-member:0.0.5\n",[14,30293,30294],{},"5、访问会员服务接口",[14,30296,30297],{},[44,30298],{"alt":46,"src":30299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22270,30301,30303],{"id":30302},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,30305,30306],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,30308,30309,30310],{},"阿里云docker镜像仓库：",[18,30311,30312],{"href":30312,"rel":30313},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[22],[14,30315,30316],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,30318,30319],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,30321,30322],{},[44,30323],{"alt":46,"src":30324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,30326,30327],{},"要把镜像推送到镜像仓库",[49,30329,30331],{"className":51,"code":30330,"language":53,"meta":46,"style":46},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[28,30332,30333],{"__ignoreMap":46},[57,30334,30335,30337,30339,30341],{"class":59,"line":60},[57,30336,26822],{"class":70},[57,30338,29166],{"class":74},[57,30340,30198],{"class":74},[57,30342,30343],{"class":74}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,30345,30346],{},"最后将镜像推送到远程仓库",[49,30348,30350],{"className":51,"code":30349,"language":53,"meta":46,"style":46},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[28,30351,30352],{"__ignoreMap":46},[57,30353,30354,30356,30358],{"class":59,"line":60},[57,30355,26822],{"class":70},[57,30357,29285],{"class":74},[57,30359,30343],{"class":74},[342,30361,30362],{},"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":46,"searchDepth":67,"depth":67,"links":30364},[30365,30366,30367],{"id":28752,"depth":144,"text":28753},{"id":28981,"depth":144,"text":28982},{"id":30007,"depth":144,"text":30008},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28744,"description":46},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30374,"title":30375,"body":30376,"description":46,"extension":348,"meta":30519,"navigation":350,"path":30520,"seo":30521,"stem":30522,"__hash__":30523},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30377,"toc":30517},[30378,30381,30386,30391,30394,30399,30404,30407,30412,30417,30420,30425,30428,30431,30434,30437,30440,30443,30463,30485,30488,30491,30511,30514],[10,30379,30375],{"id":30380},"_7vscode远程开发",[377,30382,30383],{},[380,30384,30385],{},"插件1：微软Docker工具",[14,30387,30388],{},[44,30389],{"alt":46,"src":30390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,30392,30393],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,30395,30396],{},[44,30397],{"alt":46,"src":30398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[377,30400,30401],{"start":67},[380,30402,30403],{},"插件2：微软Docker远程开发工具",[14,30405,30406],{},"下面这是远程开发的插件。",[14,30408,30409],{},[44,30410],{"alt":46,"src":30411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,30413,30414],{},[44,30415],{"alt":46,"src":30416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,30418,30419],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,30421,30422],{},[44,30423],{"alt":46,"src":30424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,30426,30427],{},"安装完拓展之后，vscode进行链接：",[14,30429,30430],{},"1.按ctrl+shift+p",[14,30432,30433],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,30435,30436],{},"3.选择目前运行的容器",[14,30438,30439],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,30441,30442],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[49,30444,30446],{"className":51,"code":30445,"language":53,"meta":46,"style":46},"docker run -v 主机目录:容器目录 image-name\n",[28,30447,30448],{"__ignoreMap":46},[57,30449,30450,30452,30454,30457,30460],{"class":59,"line":60},[57,30451,26822],{"class":70},[57,30453,27499],{"class":74},[57,30455,30456],{"class":81}," -v",[57,30458,30459],{"class":74}," 主机目录:容器目录",[57,30461,30462],{"class":74}," image-name\n",[49,30464,30466],{"className":51,"code":30465,"language":53,"meta":46,"style":46},"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",[28,30467,30468],{"__ignoreMap":46},[57,30469,30470,30472,30474,30477,30479,30482],{"class":59,"line":60},[57,30471,26822],{"class":70},[57,30473,27499],{"class":74},[57,30475,30476],{"class":81}," -it",[57,30478,30456],{"class":81},[57,30480,30481],{"class":74}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[57,30483,30484],{"class":74}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,30486,30487],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,30489,30490],{},"查看挂载情况：",[49,30492,30494],{"className":51,"code":30493,"language":53,"meta":46,"style":46},"mount | grep -i project\n",[28,30495,30496],{"__ignoreMap":46},[57,30497,30498,30501,30503,30506,30508],{"class":59,"line":60},[57,30499,30500],{"class":70},"mount",[57,30502,25378],{"class":136},[57,30504,30505],{"class":70}," grep",[57,30507,26699],{"class":81},[57,30509,30510],{"class":74}," project\n",[14,30512,30513],{},"也可以通过ls来进行查看",[342,30515,30516],{},"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":46,"searchDepth":67,"depth":67,"links":30518},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30375,"description":46},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30525,"title":30526,"body":30527,"description":347,"extension":348,"meta":30531,"navigation":350,"path":30533,"seo":30534,"stem":30535,"__hash__":30536},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30528,"toc":30529},[],{"title":46,"searchDepth":67,"depth":67,"links":30530},[],{"category":30532},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30526,"description":347},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30538,"title":30539,"body":30540,"description":347,"extension":348,"meta":30544,"navigation":350,"path":30545,"seo":30546,"stem":30547,"__hash__":30548},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30541,"toc":30542},[],{"title":46,"searchDepth":67,"depth":67,"links":30543},[],{"category":30532},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30539,"description":347},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":4,"title":5,"body":30550,"description":347,"extension":348,"meta":30776,"navigation":350,"path":351,"seo":30777,"stem":353,"__hash__":354},{"type":7,"value":30551,"toc":30774},[30552,30554,30559,30567,30571,30609,30611,30616,30766,30770,30772],[10,30553,5],{"id":12},[14,30555,16,30556],{},[18,30557,23],{"href":20,"rel":30558},[22],[14,30560,26,30561,31,30563,36,30565,40],{},[28,30562,30],{},[33,30564,35],{},[33,30566,39],{},[14,30568,30569],{},[44,30570],{"alt":46,"src":47},[49,30572,30573],{"className":51,"code":52,"language":53,"meta":46,"style":46},[28,30574,30575,30579],{"__ignoreMap":46},[57,30576,30577],{"class":59,"line":60},[57,30578,64],{"class":63},[57,30580,30581,30583,30585,30587,30589,30591,30593,30595,30597,30599,30601,30603,30605,30607],{"class":59,"line":67},[57,30582,71],{"class":70},[57,30584,75],{"class":74},[57,30586,78],{"class":74},[57,30588,82],{"class":81},[57,30590,85],{"class":74},[57,30592,88],{"class":81},[57,30594,91],{"class":74},[57,30596,82],{"class":81},[57,30598,96],{"class":74},[57,30600,99],{"class":81},[57,30602,102],{"class":81},[57,30604,105],{"class":74},[57,30606,102],{"class":81},[57,30608,110],{"class":74},[14,30610,113],{},[14,30612,30613],{},[18,30614,118],{"href":118,"rel":30615},[22],[49,30617,30618],{"className":122,"code":123,"language":124,"meta":46,"style":46},[28,30619,30620,30624,30630,30634,30642,30654,30658,30666,30696,30702,30712,30726,30730,30738,30748,30756],{"__ignoreMap":46},[57,30621,30622],{"class":59,"line":60},[57,30623,131],{"class":63},[57,30625,30626,30628],{"class":59,"line":67},[57,30627,137],{"class":136},[57,30629,141],{"class":140},[57,30631,30632],{"class":59,"line":144},[57,30633,147],{"class":63},[57,30635,30636,30638,30640],{"class":59,"line":150},[57,30637,153],{"class":140},[57,30639,156],{"class":136},[57,30641,159],{"class":140},[57,30643,30644,30646,30648,30650,30652],{"class":59,"line":162},[57,30645,165],{"class":81},[57,30647,168],{"class":140},[57,30649,171],{"class":74},[57,30651,174],{"class":140},[57,30653,177],{"class":63},[57,30655,30656],{"class":59,"line":180},[57,30657,183],{"class":63},[57,30659,30660,30662,30664],{"class":59,"line":186},[57,30661,189],{"class":140},[57,30663,156],{"class":136},[57,30665,194],{"class":81},[57,30667,30668,30670,30672,30674,30676,30678,30680,30682,30684,30686,30688,30690,30692,30694],{"class":59,"line":197},[57,30669,200],{"class":140},[57,30671,156],{"class":136},[57,30673,205],{"class":140},[57,30675,208],{"class":74},[57,30677,211],{"class":136},[57,30679,214],{"class":140},[57,30681,217],{"class":136},[57,30683,220],{"class":140},[57,30685,223],{"class":136},[57,30687,226],{"class":81},[57,30689,229],{"class":140},[57,30691,232],{"class":136},[57,30693,235],{"class":74},[57,30695,238],{"class":140},[57,30697,30698,30700],{"class":59,"line":241},[57,30699,165],{"class":81},[57,30701,246],{"class":140},[57,30703,30704,30706,30708,30710],{"class":59,"line":249},[57,30705,165],{"class":81},[57,30707,254],{"class":140},[57,30709,226],{"class":81},[57,30711,259],{"class":140},[57,30713,30714,30716,30718,30720,30722,30724],{"class":59,"line":262},[57,30715,165],{"class":81},[57,30717,267],{"class":140},[57,30719,270],{"class":81},[57,30721,273],{"class":140},[57,30723,270],{"class":81},[57,30725,278],{"class":140},[57,30727,30728],{"class":59,"line":281},[57,30729,284],{"class":63},[57,30731,30732,30734,30736],{"class":59,"line":287},[57,30733,290],{"class":140},[57,30735,156],{"class":136},[57,30737,295],{"class":140},[57,30739,30740,30742,30744,30746],{"class":59,"line":298},[57,30741,165],{"class":81},[57,30743,168],{"class":140},[57,30745,305],{"class":74},[57,30747,308],{"class":140},[57,30749,30750,30752,30754],{"class":59,"line":311},[57,30751,314],{"class":140},[57,30753,156],{"class":136},[57,30755,319],{"class":140},[57,30757,30758,30760,30762,30764],{"class":59,"line":322},[57,30759,165],{"class":81},[57,30761,168],{"class":140},[57,30763,329],{"class":74},[57,30765,332],{"class":140},[14,30767,30768],{},[44,30769],{"alt":46,"src":337},[14,30771,340],{},[342,30773,344],{},{"title":46,"searchDepth":67,"depth":67,"links":30775},[],{},{"title":5,"description":347},{"id":30779,"title":30780,"body":30781,"description":347,"extension":348,"meta":50585,"navigation":350,"path":50586,"seo":50587,"stem":50588,"__hash__":50589},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30782,"toc":50579},[30783,30786,30790,30794,30797,30802,30807,30810,30815,30820,30825,30828,30832,30837,30841,30846,30849,30854,30857,30860,30863,30866,30871,30874,30879,30884,30889,30894,30897,30901,30904,30909,31513,31518,31521,31526,31529,31532,31996,31999,32002,32005,32008,34059,34062,34067,34072,34867,34870,34875,35653,35657,37316,37320,38034,38038,38042,38047,38052,38057,38060,38065,38070,38075,38080,38085,38089,38094,39376,39381,39384,39387,39390,39545,39548,39551,40767,40772,41467,41471,41475,41480,41485,41488,41493,41498,41503,41508,41513,41518,41523,41528,41533,41538,41543,41548,41553,41558,41563,41568,41573,41578,41583,41588,41593,41598,41603,41608,41613,41618,41623,41628,41633,41638,41642,41646,41649,43127,43131,44778,44782,45476,45480,45483,45486,46030,46033,46037,46040,47437,47441,47444,48022,49809,49813,49816,50576],[10,30784,30780],{"id":30785},"_2经典神经网络",[394,30787,30789],{"id":30788},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22270,30791,30793],{"id":30792},"_211原理介绍","2.1.1.原理介绍",[14,30795,30796],{},"LeNet-5",[377,30798,30799],{},[380,30800,30801],{},"原理",[14,30803,30804],{},[44,30805],{"alt":46,"src":30806},"\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,30808,30809],{},"B是batch批次；C是channel通道",[377,30811,30812],{"start":67},[380,30813,30814],{},"网络参数详细",[14,30816,30817],{},[44,30818],{"alt":46,"src":30819},"\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,30821,30822],{},[44,30823],{"alt":46,"src":30824},"\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,30826,30827],{},"AlexNet",[377,30829,30830],{},[380,30831,30801],{},[14,30833,30834],{},[44,30835],{"alt":46,"src":30836},"\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",[377,30838,30839],{"start":67},[380,30840,30814],{},[14,30842,30843],{},[44,30844],{"alt":46,"src":30845},"\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,30847,30848],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,30850,30851],{},[44,30852],{"alt":46,"src":30853},"\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,30855,30856],{},"数据处理中的图像增强操作:",[14,30858,30859],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,30861,30862],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,30864,30865],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,30867,30868],{},[44,30869],{"alt":46,"src":30870},"\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,30872,30873],{},"提升网络精确度的方法：LRN正则化",[14,30875,30876],{},[44,30877],{"alt":46,"src":30878},"\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,30880,30881],{},[44,30882],{"alt":46,"src":30883},"\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",[377,30885,30886],{"start":144},[380,30887,30888],{},"AlexNet的总结",[14,30890,30891],{},[44,30892],{"alt":46,"src":30893},"\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,30895,30896],{},"比LeNet模型要深一丢丢",[22270,30898,30900],{"id":30899},"_212代码实现","2.1.2.代码实现",[14,30902,30903],{},"（1）LeNet",[377,30905,30906],{},[380,30907,30908],{},"模型搭建",[49,30910,30912],{"className":122,"code":30911,"language":124,"meta":46,"style":46},"# 导入库\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",[28,30913,30914,30919,30925,30930,30943,30948,30960,30964,30984,30989,30994,31005,31010,31029,31033,31038,31087,31099,31104,31133,31168,31195,31200,31212,31217,31237,31256,31275,31279,31284,31294,31311,31322,31337,31348,31359,31374,31389,31400,31407,31411,31425,31430,31453,31458,31463,31468,31472,31477,31482,31492],{"__ignoreMap":46},[57,30915,30916],{"class":59,"line":60},[57,30917,30918],{"class":63},"# 导入库\n",[57,30920,30921,30923],{"class":59,"line":67},[57,30922,137],{"class":136},[57,30924,141],{"class":140},[57,30926,30927],{"class":59,"line":144},[57,30928,30929],{"class":63},"# 导入神经网络层\n",[57,30931,30932,30935,30938,30940],{"class":59,"line":150},[57,30933,30934],{"class":136},"from",[57,30936,30937],{"class":140}," torch ",[57,30939,137],{"class":136},[57,30941,30942],{"class":140}," nn\n",[57,30944,30945],{"class":59,"line":162},[57,30946,30947],{"class":63},"# 导入展示神经网络参数的包\n",[57,30949,30950,30952,30955,30957],{"class":59,"line":180},[57,30951,30934],{"class":136},[57,30953,30954],{"class":140}," torchsummary ",[57,30956,137],{"class":136},[57,30958,30959],{"class":140}," summary\n",[57,30961,30962],{"class":59,"line":186},[57,30963,2673],{"emptyLinePlaceholder":350},[57,30965,30966,30968,30971,30973,30976,30978,30981],{"class":59,"line":197},[57,30967,14966],{"class":136},[57,30969,30970],{"class":70}," LeNet",[57,30972,168],{"class":140},[57,30974,30975],{"class":70},"nn",[57,30977,974],{"class":140},[57,30979,30980],{"class":70},"Module",[57,30982,30983],{"class":140},"):\n",[57,30985,30986],{"class":59,"line":241},[57,30987,30988],{"class":63},"    # 模型初始化:\n",[57,30990,30991],{"class":59,"line":249},[57,30992,30993],{"class":63},"    # 定义一些网络层和激活函数\n",[57,30995,30996,30999,31002],{"class":59,"line":262},[57,30997,30998],{"class":136},"    def",[57,31000,31001],{"class":81}," __init__",[57,31003,31004],{"class":140},"(self):\n",[57,31006,31007],{"class":59,"line":281},[57,31008,31009],{"class":63},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[57,31011,31012,31015,31018,31021,31024,31027],{"class":59,"line":287},[57,31013,31014],{"class":81},"        super",[57,31016,31017],{"class":140},"(LeNet,",[57,31019,31020],{"class":81},"self",[57,31022,31023],{"class":140},").",[57,31025,31026],{"class":81},"__init__",[57,31028,2249],{"class":140},[57,31030,31031],{"class":59,"line":298},[57,31032,2673],{"emptyLinePlaceholder":350},[57,31034,31035],{"class":59,"line":311},[57,31036,31037],{"class":63},"        # 定义网络层\n",[57,31039,31040,31043,31046,31048,31051,31054,31056,31058,31060,31063,31065,31067,31069,31072,31074,31076,31078,31081,31083,31085],{"class":59,"line":322},[57,31041,31042],{"class":81},"        self",[57,31044,31045],{"class":140},".c1",[57,31047,156],{"class":136},[57,31049,31050],{"class":140},"nn.Conv2d(",[57,31052,31053],{"class":5489},"in_channels",[57,31055,156],{"class":136},[57,31057,635],{"class":81},[57,31059,273],{"class":140},[57,31061,31062],{"class":5489},"out_channels",[57,31064,156],{"class":136},[57,31066,761],{"class":81},[57,31068,273],{"class":140},[57,31070,31071],{"class":5489},"kernel_size",[57,31073,156],{"class":136},[57,31075,736],{"class":81},[57,31077,273],{"class":140},[57,31079,31080],{"class":5489},"padding",[57,31082,156],{"class":136},[57,31084,498],{"class":81},[57,31086,238],{"class":140},[57,31088,31089,31091,31094,31096],{"class":59,"line":1929},[57,31090,31042],{"class":81},[57,31092,31093],{"class":140},".sig",[57,31095,156],{"class":136},[57,31097,31098],{"class":140},"nn.Sigmoid()\n",[57,31100,31101],{"class":59,"line":1950},[57,31102,31103],{"class":63},"        # 定义池化\n",[57,31105,31106,31108,31111,31113,31116,31118,31120,31122,31124,31127,31129,31131],{"class":59,"line":1955},[57,31107,31042],{"class":81},[57,31109,31110],{"class":140},".s2",[57,31112,156],{"class":136},[57,31114,31115],{"class":140},"nn.AvgPool2d(",[57,31117,31071],{"class":5489},[57,31119,156],{"class":136},[57,31121,498],{"class":81},[57,31123,273],{"class":140},[57,31125,31126],{"class":5489},"stride",[57,31128,156],{"class":136},[57,31130,498],{"class":81},[57,31132,238],{"class":140},[57,31134,31135,31137,31140,31142,31144,31146,31148,31150,31152,31154,31156,31158,31160,31162,31164,31166],{"class":59,"line":1969},[57,31136,31042],{"class":81},[57,31138,31139],{"class":140},".c3",[57,31141,156],{"class":136},[57,31143,31050],{"class":140},[57,31145,31053],{"class":5489},[57,31147,156],{"class":136},[57,31149,761],{"class":81},[57,31151,273],{"class":140},[57,31153,31062],{"class":5489},[57,31155,156],{"class":136},[57,31157,1017],{"class":81},[57,31159,273],{"class":140},[57,31161,31071],{"class":5489},[57,31163,156],{"class":136},[57,31165,736],{"class":81},[57,31167,238],{"class":140},[57,31169,31170,31172,31175,31177,31179,31181,31183,31185,31187,31189,31191,31193],{"class":59,"line":1974},[57,31171,31042],{"class":81},[57,31173,31174],{"class":140},".s4",[57,31176,156],{"class":136},[57,31178,31115],{"class":140},[57,31180,31071],{"class":5489},[57,31182,156],{"class":136},[57,31184,498],{"class":81},[57,31186,273],{"class":140},[57,31188,31126],{"class":5489},[57,31190,156],{"class":136},[57,31192,498],{"class":81},[57,31194,238],{"class":140},[57,31196,31197],{"class":59,"line":2001},[57,31198,31199],{"class":63},"        # 定义平展层\n",[57,31201,31202,31204,31207,31209],{"class":59,"line":2006},[57,31203,31042],{"class":81},[57,31205,31206],{"class":140},".flatten",[57,31208,156],{"class":136},[57,31210,31211],{"class":140},"nn.Flatten()\n",[57,31213,31214],{"class":59,"line":2023},[57,31215,31216],{"class":63},"        # 定义全连接层\n",[57,31218,31219,31221,31224,31226,31229,31231,31233,31235],{"class":59,"line":2028},[57,31220,31042],{"class":81},[57,31222,31223],{"class":140},".f5",[57,31225,156],{"class":136},[57,31227,31228],{"class":140},"nn.Linear(",[57,31230,4260],{"class":81},[57,31232,273],{"class":140},[57,31234,1233],{"class":81},[57,31236,238],{"class":140},[57,31238,31239,31241,31244,31246,31248,31250,31252,31254],{"class":59,"line":2033},[57,31240,31042],{"class":81},[57,31242,31243],{"class":140},".f6",[57,31245,156],{"class":136},[57,31247,31228],{"class":140},[57,31249,1233],{"class":81},[57,31251,273],{"class":140},[57,31253,1127],{"class":81},[57,31255,238],{"class":140},[57,31257,31258,31260,31263,31265,31267,31269,31271,31273],{"class":59,"line":2038},[57,31259,31042],{"class":81},[57,31261,31262],{"class":140},".f7",[57,31264,156],{"class":136},[57,31266,31228],{"class":140},[57,31268,1127],{"class":81},[57,31270,273],{"class":140},[57,31272,862],{"class":81},[57,31274,238],{"class":140},[57,31276,31277],{"class":59,"line":2052},[57,31278,2673],{"emptyLinePlaceholder":350},[57,31280,31281],{"class":59,"line":2057},[57,31282,31283],{"class":63},"    # 写工具->写前向传播\n",[57,31285,31286,31288,31291],{"class":59,"line":2850},[57,31287,30998],{"class":136},[57,31289,31290],{"class":70}," forward",[57,31292,31293],{"class":140},"(self,x):\n",[57,31295,31296,31299,31301,31303,31306,31308],{"class":59,"line":2864},[57,31297,31298],{"class":140},"        x",[57,31300,156],{"class":136},[57,31302,31020],{"class":81},[57,31304,31305],{"class":140},".sig(",[57,31307,31020],{"class":81},[57,31309,31310],{"class":140},".c1(x))\n",[57,31312,31313,31315,31317,31319],{"class":59,"line":2872},[57,31314,31298],{"class":140},[57,31316,156],{"class":136},[57,31318,31020],{"class":81},[57,31320,31321],{"class":140},".s2(x)\n",[57,31323,31324,31326,31328,31330,31332,31334],{"class":59,"line":2877},[57,31325,31298],{"class":140},[57,31327,156],{"class":136},[57,31329,31020],{"class":81},[57,31331,31305],{"class":140},[57,31333,31020],{"class":81},[57,31335,31336],{"class":140},".c3(x))\n",[57,31338,31339,31341,31343,31345],{"class":59,"line":2883},[57,31340,31298],{"class":140},[57,31342,156],{"class":136},[57,31344,31020],{"class":81},[57,31346,31347],{"class":140},".s4(x)\n",[57,31349,31350,31352,31354,31356],{"class":59,"line":2889},[57,31351,31298],{"class":140},[57,31353,156],{"class":136},[57,31355,31020],{"class":81},[57,31357,31358],{"class":140},".flatten(x)\n",[57,31360,31361,31363,31365,31367,31369,31371],{"class":59,"line":2894},[57,31362,31298],{"class":140},[57,31364,156],{"class":136},[57,31366,31020],{"class":81},[57,31368,31305],{"class":140},[57,31370,31020],{"class":81},[57,31372,31373],{"class":140},".f5(x))\n",[57,31375,31376,31378,31380,31382,31384,31386],{"class":59,"line":8221},[57,31377,31298],{"class":140},[57,31379,156],{"class":136},[57,31381,31020],{"class":81},[57,31383,31305],{"class":140},[57,31385,31020],{"class":81},[57,31387,31388],{"class":140},".f6(x))\n",[57,31390,31391,31393,31395,31397],{"class":59,"line":8245},[57,31392,31298],{"class":140},[57,31394,156],{"class":136},[57,31396,31020],{"class":81},[57,31398,31399],{"class":140},".f7(x)\n",[57,31401,31402,31404],{"class":59,"line":8250},[57,31403,15024],{"class":136},[57,31405,31406],{"class":140}," x\n",[57,31408,31409],{"class":59,"line":8256},[57,31410,2673],{"emptyLinePlaceholder":350},[57,31412,31413,31415,31418,31420,31423],{"class":59,"line":8283},[57,31414,1813],{"class":136},[57,31416,31417],{"class":81}," __name__",[57,31419,3222],{"class":136},[57,31421,31422],{"class":74},"\"__main__\"",[57,31424,4012],{"class":140},[57,31426,31427],{"class":59,"line":8288},[57,31428,31429],{"class":63},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[57,31431,31432,31435,31437,31439,31442,31444,31447,31449,31451],{"class":59,"line":8294},[57,31433,31434],{"class":140},"    device",[57,31436,156],{"class":136},[57,31438,205],{"class":140},[57,31440,31441],{"class":74},"\"cuda\"",[57,31443,211],{"class":136},[57,31445,31446],{"class":140}," torch.cuda.is_available() ",[57,31448,232],{"class":136},[57,31450,235],{"class":74},[57,31452,238],{"class":140},[57,31454,31455],{"class":59,"line":8306},[57,31456,31457],{"class":63},"    # 如果就是想指定用cpu用下方代码:\n",[57,31459,31460],{"class":59,"line":8318},[57,31461,31462],{"class":63},"    # device=\"cpu\"\n",[57,31464,31465],{"class":59,"line":8330},[57,31466,31467],{"class":63},"    # print(device)\n",[57,31469,31470],{"class":59,"line":9989},[57,31471,2673],{"emptyLinePlaceholder":350},[57,31473,31474],{"class":59,"line":10014},[57,31475,31476],{"class":63},"    # 实例化模型\n",[57,31478,31479],{"class":59,"line":10037},[57,31480,31481],{"class":63},"    # 将模型放到设备中去运行\n",[57,31483,31484,31487,31489],{"class":59,"line":10061},[57,31485,31486],{"class":140},"    model",[57,31488,156],{"class":136},[57,31490,31491],{"class":140},"LeNet().to(device)\n",[57,31493,31494,31497,31500,31502,31504,31506,31508,31510],{"class":59,"line":10066},[57,31495,31496],{"class":81},"    print",[57,31498,31499],{"class":140},"(summary(model,(",[57,31501,635],{"class":81},[57,31503,273],{"class":140},[57,31505,1317],{"class":81},[57,31507,273],{"class":140},[57,31509,1317],{"class":81},[57,31511,31512],{"class":140},")))\n",[14,31514,31515],{},[44,31516],{"alt":46,"src":31517},"\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,31519,31520],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[377,31522,31523],{"start":67},[380,31524,31525],{},"训练",[14,31527,31528],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,31530,31531],{},"在训练之前可以将数据展示看一下",[49,31533,31535],{"className":122,"code":31534,"language":124,"meta":46,"style":46},"# 建立画图的函数，用于展示数据\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",[28,31536,31537,31542,31547,31559,31571,31584,31589,31601,31606,31618,31623,31635,31639,31643,31664,31676,31681,31702,31713,31717,31722,31740,31751,31756,31767,31772,31783,31787,31792,31807,31820,31825,31830,31843,31856,31869,31874,31878,31883,31903,31920,31940,31953,31966,31976,31991],{"__ignoreMap":46},[57,31538,31539],{"class":59,"line":60},[57,31540,31541],{"class":63},"# 建立画图的函数，用于展示数据\n",[57,31543,31544],{"class":59,"line":67},[57,31545,31546],{"class":63},"# torchvision中包含很多内置的数据集\n",[57,31548,31549,31551,31554,31556],{"class":59,"line":144},[57,31550,30934],{"class":136},[57,31552,31553],{"class":140}," sklearn.externals.array_api_compat.torch ",[57,31555,137],{"class":136},[57,31557,31558],{"class":140}," squeeze\n",[57,31560,31561,31563,31566,31568],{"class":59,"line":150},[57,31562,30934],{"class":136},[57,31564,31565],{"class":140}," torchvision.datasets ",[57,31567,137],{"class":136},[57,31569,31570],{"class":140}," FashionMNIST\n",[57,31572,31573,31575,31578,31581],{"class":59,"line":162},[57,31574,137],{"class":136},[57,31576,31577],{"class":140}," numpy ",[57,31579,31580],{"class":136},"as",[57,31582,31583],{"class":140}," np\n",[57,31585,31586],{"class":59,"line":180},[57,31587,31588],{"class":63},"# 引入处理数据集的包\n",[57,31590,31591,31593,31596,31598],{"class":59,"line":186},[57,31592,30934],{"class":136},[57,31594,31595],{"class":140}," torchvision ",[57,31597,137],{"class":136},[57,31599,31600],{"class":140}," transforms\n",[57,31602,31603],{"class":59,"line":197},[57,31604,31605],{"class":63},"# 从torch库中引入数据处理的包\n",[57,31607,31608,31610,31613,31615],{"class":59,"line":241},[57,31609,137],{"class":136},[57,31611,31612],{"class":140}," torch.utils.data ",[57,31614,31580],{"class":136},[57,31616,31617],{"class":140}," Data\n",[57,31619,31620],{"class":59,"line":249},[57,31621,31622],{"class":63},"# 导入画图的库\n",[57,31624,31625,31627,31630,31632],{"class":59,"line":262},[57,31626,137],{"class":136},[57,31628,31629],{"class":140}," matplotlib.pyplot ",[57,31631,31580],{"class":136},[57,31633,31634],{"class":140}," plt\n",[57,31636,31637],{"class":59,"line":281},[57,31638,2673],{"emptyLinePlaceholder":350},[57,31640,31641],{"class":59,"line":287},[57,31642,2673],{"emptyLinePlaceholder":350},[57,31644,31645,31648,31650,31653,31656,31658,31661],{"class":59,"line":298},[57,31646,31647],{"class":140},"train_data",[57,31649,156],{"class":136},[57,31651,31652],{"class":140},"FashionMNIST(",[57,31654,31655],{"class":5489},"root",[57,31657,156],{"class":136},[57,31659,31660],{"class":74},"'.\u002Fdata'",[57,31662,31663],{"class":140},",\n",[57,31665,31666,31669,31671,31674],{"class":59,"line":311},[57,31667,31668],{"class":5489},"                        train",[57,31670,156],{"class":136},[57,31672,31673],{"class":81},"True",[57,31675,31663],{"class":140},[57,31677,31678],{"class":59,"line":322},[57,31679,31680],{"class":63},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[57,31682,31683,31686,31688,31691,31694,31696,31699],{"class":59,"line":1929},[57,31684,31685],{"class":5489},"                        transform",[57,31687,156],{"class":136},[57,31689,31690],{"class":140},"transforms.Compose([transforms.Resize(",[57,31692,31693],{"class":5489},"size",[57,31695,156],{"class":136},[57,31697,31698],{"class":81},"224",[57,31700,31701],{"class":140},"),transforms.ToTensor()]),\n",[57,31703,31704,31707,31709,31711],{"class":59,"line":1950},[57,31705,31706],{"class":5489},"                        download",[57,31708,156],{"class":136},[57,31710,31673],{"class":81},[57,31712,238],{"class":140},[57,31714,31715],{"class":59,"line":1955},[57,31716,2673],{"emptyLinePlaceholder":350},[57,31718,31719],{"class":59,"line":1969},[57,31720,31721],{"class":63},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[57,31723,31724,31727,31729,31732,31735,31737],{"class":59,"line":1974},[57,31725,31726],{"class":140},"train_loader",[57,31728,156],{"class":136},[57,31730,31731],{"class":140},"Data.DataLoader(",[57,31733,31734],{"class":5489},"dataset",[57,31736,156],{"class":136},[57,31738,31739],{"class":140},"train_data,\n",[57,31741,31742,31745,31747,31749],{"class":59,"line":2001},[57,31743,31744],{"class":5489},"                             batch_size",[57,31746,156],{"class":136},[57,31748,621],{"class":81},[57,31750,31663],{"class":140},[57,31752,31753],{"class":59,"line":2006},[57,31754,31755],{"class":63},"                             # 数据是否打乱\n",[57,31757,31758,31761,31763,31765],{"class":59,"line":2023},[57,31759,31760],{"class":5489},"                             shuffle",[57,31762,156],{"class":136},[57,31764,31673],{"class":81},[57,31766,31663],{"class":140},[57,31768,31769],{"class":59,"line":2028},[57,31770,31771],{"class":63},"                             # 规定加载数据的进程\n",[57,31773,31774,31777,31779,31781],{"class":59,"line":2033},[57,31775,31776],{"class":5489},"                             num_workers",[57,31778,156],{"class":136},[57,31780,226],{"class":81},[57,31782,238],{"class":140},[57,31784,31785],{"class":59,"line":2038},[57,31786,2673],{"emptyLinePlaceholder":350},[57,31788,31789],{"class":59,"line":2052},[57,31790,31791],{"class":63},"# 获得一个batch的数据\n",[57,31793,31794,31796,31799,31801,31804],{"class":59,"line":2057},[57,31795,3298],{"class":136},[57,31797,31798],{"class":140}," step,(b_x,b_y) ",[57,31800,26312],{"class":136},[57,31802,31803],{"class":81}," enumerate",[57,31805,31806],{"class":140},"(train_loader):\n",[57,31808,31809,31811,31814,31816,31818],{"class":59,"line":2850},[57,31810,3374],{"class":136},[57,31812,31813],{"class":140}," step ",[57,31815,223],{"class":136},[57,31817,4366],{"class":81},[57,31819,4012],{"class":140},[57,31821,31822],{"class":59,"line":2864},[57,31823,31824],{"class":136},"        break\n",[57,31826,31827],{"class":59,"line":2872},[57,31828,31829],{"class":63},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[57,31831,31832,31835,31837,31840],{"class":59,"line":2877},[57,31833,31834],{"class":140},"batch_x",[57,31836,156],{"class":136},[57,31838,31839],{"class":140},"b_x.squeeze().numpy()  ",[57,31841,31842],{"class":63},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[57,31844,31845,31848,31850,31853],{"class":59,"line":2883},[57,31846,31847],{"class":140},"batch_y",[57,31849,156],{"class":136},[57,31851,31852],{"class":140},"b_y.numpy()   ",[57,31854,31855],{"class":63},"#将张量转换成功numpy数组\n",[57,31857,31858,31861,31863,31866],{"class":59,"line":2889},[57,31859,31860],{"class":140},"class_label",[57,31862,156],{"class":136},[57,31864,31865],{"class":140},"train_data.classes  ",[57,31867,31868],{"class":63},"#训练集标签\n",[57,31870,31871],{"class":59,"line":2894},[57,31872,31873],{"class":63},"# print(class_label)\n",[57,31875,31876],{"class":59,"line":8221},[57,31877,2673],{"emptyLinePlaceholder":350},[57,31879,31880],{"class":59,"line":8245},[57,31881,31882],{"class":63},"# 可视化一个batch的图像\n",[57,31884,31885,31888,31891,31893,31895,31897,31899,31901],{"class":59,"line":8250},[57,31886,31887],{"class":140},"plt.figure(",[57,31889,31890],{"class":5489},"figsize",[57,31892,156],{"class":136},[57,31894,168],{"class":140},[57,31896,914],{"class":81},[57,31898,273],{"class":140},[57,31900,736],{"class":81},[57,31902,259],{"class":140},[57,31904,31905,31907,31910,31912,31915,31917],{"class":59,"line":8256},[57,31906,3298],{"class":136},[57,31908,31909],{"class":140}," ii ",[57,31911,26312],{"class":136},[57,31913,31914],{"class":140}," np.arange(",[57,31916,7631],{"class":81},[57,31918,31919],{"class":140},"(batch_y)):\n",[57,31921,31922,31925,31927,31929,31931,31934,31936,31938],{"class":59,"line":8283},[57,31923,31924],{"class":140},"    plt.subplot(",[57,31926,710],{"class":81},[57,31928,273],{"class":140},[57,31930,1017],{"class":81},[57,31932,31933],{"class":140},",ii ",[57,31935,897],{"class":136},[57,31937,25387],{"class":81},[57,31939,238],{"class":140},[57,31941,31942,31945,31948,31950],{"class":59,"line":8288},[57,31943,31944],{"class":140},"    plt.imshow(batch_x[ii,:,:],",[57,31946,31947],{"class":5489},"cmap",[57,31949,156],{"class":136},[57,31951,31952],{"class":140},"plt.cm.gray)\n",[57,31954,31955,31958,31960,31962,31964],{"class":59,"line":8294},[57,31956,31957],{"class":140},"    plt.title(class_label[batch_y[ii]],",[57,31959,31693],{"class":5489},[57,31961,156],{"class":136},[57,31963,862],{"class":81},[57,31965,238],{"class":140},[57,31967,31968,31971,31974],{"class":59,"line":8306},[57,31969,31970],{"class":140},"    plt.axis(",[57,31972,31973],{"class":74},"\"off\"",[57,31975,238],{"class":140},[57,31977,31978,31981,31984,31986,31989],{"class":59,"line":8318},[57,31979,31980],{"class":140},"    plt.subplots_adjust(",[57,31982,31983],{"class":5489},"wspace",[57,31985,156],{"class":136},[57,31987,31988],{"class":81},"0.05",[57,31990,238],{"class":140},[57,31992,31993],{"class":59,"line":8330},[57,31994,31995],{"class":140},"plt.show()\n",[14,31997,31998],{},"用matplotlib进行展示的过程可以后续再补",[14,32000,32001],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,32003,32004],{},"训练次数就是按照批次过整个训练集数据的次数",[14,32006,32007],{},"模型训练：",[49,32009,32011],{"className":122,"code":32010,"language":124,"meta":46,"style":46},"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",[28,32012,32013,32020,32027,32031,32043,32049,32060,32070,32080,32090,32100,32105,32117,32127,32131,32135,32140,32151,32164,32175,32192,32203,32242,32258,32270,32281,32286,32297,32313,32324,32335,32346,32353,32357,32362,32367,32371,32376,32386,32407,32411,32415,32420,32425,32430,32450,32454,32459,32469,32473,32478,32487,32492,32497,32502,32512,32516,32520,32525,32530,32540,32545,32555,32560,32569,32574,32583,32588,32597,32601,32606,32616,32620,32624,32629,32644,32672,32687,32691,32696,32701,32710,32715,32724,32729,32738,32743,32752,32757,32766,32771,32780,32785,32798,32803,32813,32818,32828,32834,32840,32846,32852,32863,32869,32889,32895,32906,32912,32918,32924,32930,32936,32942,32948,32968,32974,32990,32996,33010,33016,33031,33037,33046,33052,33061,33067,33073,33082,33088,33099,33105,33124,33130,33141,33147,33167,33183,33189,33203,33209,33215,33226,33232,33238,33248,33254,33265,33271,33281,33286,33292,33341,33388,33393,33399,33418,33424,33444,33450,33456,33466,33471,33477,33493,33538,33544,33550,33556,33567,33573,33579,33585,33603,33617,33626,33635,33644,33653,33659,33665,33673,33678,33684,33695,33701,33721,33727,33733,33739,33756,33762,33768,33774,33780,33786,33813,33837,33843,33849,33855,33866,33877,33883,33900,33923,33946,33952,33957,33966,33976,33982,33987,33993,34006,34012,34023,34034,34053],{"__ignoreMap":46},[57,32014,32015,32017],{"class":59,"line":60},[57,32016,137],{"class":136},[57,32018,32019],{"class":140}," copy\n",[57,32021,32022,32024],{"class":59,"line":67},[57,32023,137],{"class":136},[57,32025,32026],{"class":140}," time\n",[57,32028,32029],{"class":59,"line":144},[57,32030,2673],{"emptyLinePlaceholder":350},[57,32032,32033,32035,32038,32040],{"class":59,"line":150},[57,32034,137],{"class":136},[57,32036,32037],{"class":140}," pandas ",[57,32039,31580],{"class":136},[57,32041,32042],{"class":140}," pd\n",[57,32044,32045,32047],{"class":59,"line":162},[57,32046,137],{"class":136},[57,32048,141],{"class":140},[57,32050,32051,32053,32055,32057],{"class":59,"line":180},[57,32052,30934],{"class":136},[57,32054,31612],{"class":140},[57,32056,137],{"class":136},[57,32058,32059],{"class":140}," Dataset\n",[57,32061,32062,32064,32066,32068],{"class":59,"line":186},[57,32063,30934],{"class":136},[57,32065,31565],{"class":140},[57,32067,137],{"class":136},[57,32069,31570],{"class":140},[57,32071,32072,32074,32076,32078],{"class":59,"line":197},[57,32073,30934],{"class":136},[57,32075,31595],{"class":140},[57,32077,137],{"class":136},[57,32079,31600],{"class":140},[57,32081,32082,32084,32086,32088],{"class":59,"line":241},[57,32083,137],{"class":136},[57,32085,31612],{"class":140},[57,32087,31580],{"class":136},[57,32089,31617],{"class":140},[57,32091,32092,32094,32096,32098],{"class":59,"line":249},[57,32093,137],{"class":136},[57,32095,31629],{"class":140},[57,32097,31580],{"class":136},[57,32099,31634],{"class":140},[57,32101,32102],{"class":59,"line":262},[57,32103,32104],{"class":63},"# 导入模型\n",[57,32106,32107,32109,32112,32114],{"class":59,"line":281},[57,32108,30934],{"class":136},[57,32110,32111],{"class":140}," model ",[57,32113,137],{"class":136},[57,32115,32116],{"class":140}," LeNet\n",[57,32118,32119,32121,32123,32125],{"class":59,"line":287},[57,32120,30934],{"class":136},[57,32122,30937],{"class":140},[57,32124,137],{"class":136},[57,32126,30942],{"class":140},[57,32128,32129],{"class":59,"line":298},[57,32130,2673],{"emptyLinePlaceholder":350},[57,32132,32133],{"class":59,"line":311},[57,32134,2673],{"emptyLinePlaceholder":350},[57,32136,32137],{"class":59,"line":322},[57,32138,32139],{"class":63},"# 处理训练集与验证集函数--->划分数据集\n",[57,32141,32142,32145,32148],{"class":59,"line":1929},[57,32143,32144],{"class":136},"def",[57,32146,32147],{"class":70}," train_val_data_process",[57,32149,32150],{"class":140},"():\n",[57,32152,32153,32156,32158,32160,32162],{"class":59,"line":1950},[57,32154,32155],{"class":140},"    train_data",[57,32157,156],{"class":136},[57,32159,31652],{"class":140},[57,32161,31660],{"class":74},[57,32163,31663],{"class":140},[57,32165,32166,32169,32171,32173],{"class":59,"line":1955},[57,32167,32168],{"class":5489},"                            train",[57,32170,156],{"class":136},[57,32172,31673],{"class":81},[57,32174,31663],{"class":140},[57,32176,32177,32180,32182,32184,32186,32188,32190],{"class":59,"line":1969},[57,32178,32179],{"class":5489},"                            transform",[57,32181,156],{"class":136},[57,32183,31690],{"class":140},[57,32185,31693],{"class":5489},[57,32187,156],{"class":136},[57,32189,1317],{"class":81},[57,32191,31701],{"class":140},[57,32193,32194,32197,32199,32201],{"class":59,"line":1974},[57,32195,32196],{"class":5489},"                            download",[57,32198,156],{"class":136},[57,32200,31673],{"class":81},[57,32202,238],{"class":140},[57,32204,32205,32208,32210,32213,32216,32218,32221,32223,32225,32228,32230,32232,32235,32237,32239],{"class":59,"line":2001},[57,32206,32207],{"class":140},"    train_data,val_data",[57,32209,156],{"class":136},[57,32211,32212],{"class":140},"Data.random_split(train_data,[",[57,32214,32215],{"class":81},"round",[57,32217,168],{"class":140},[57,32219,32220],{"class":81},"0.8",[57,32222,871],{"class":136},[57,32224,7631],{"class":81},[57,32226,32227],{"class":140},"(train_data)),",[57,32229,32215],{"class":81},[57,32231,168],{"class":140},[57,32233,32234],{"class":81},"0.2",[57,32236,871],{"class":136},[57,32238,7631],{"class":81},[57,32240,32241],{"class":140},"(train_data))])\n",[57,32243,32244,32247,32249,32252,32254,32256],{"class":59,"line":2006},[57,32245,32246],{"class":140},"    train_dataloader ",[57,32248,156],{"class":136},[57,32250,32251],{"class":140}," Data.DataLoader(",[57,32253,31734],{"class":5489},[57,32255,156],{"class":136},[57,32257,31739],{"class":140},[57,32259,32260,32263,32265,32268],{"class":59,"line":2023},[57,32261,32262],{"class":5489},"                                       batch_size",[57,32264,156],{"class":136},[57,32266,32267],{"class":81},"128",[57,32269,31663],{"class":140},[57,32271,32272,32275,32277,32279],{"class":59,"line":2028},[57,32273,32274],{"class":5489},"                                       shuffle",[57,32276,156],{"class":136},[57,32278,31673],{"class":81},[57,32280,31663],{"class":140},[57,32282,32283],{"class":59,"line":2033},[57,32284,32285],{"class":63},"                                       # 规定8个进程\n",[57,32287,32288,32291,32293,32295],{"class":59,"line":2038},[57,32289,32290],{"class":5489},"                                       num_workers",[57,32292,156],{"class":136},[57,32294,811],{"class":81},[57,32296,238],{"class":140},[57,32298,32299,32302,32304,32306,32308,32310],{"class":59,"line":2052},[57,32300,32301],{"class":140},"    val_dataloader",[57,32303,156],{"class":136},[57,32305,31731],{"class":140},[57,32307,31734],{"class":5489},[57,32309,156],{"class":136},[57,32311,32312],{"class":140},"val_data,\n",[57,32314,32315,32318,32320,32322],{"class":59,"line":2057},[57,32316,32317],{"class":5489},"                                   batch_size",[57,32319,156],{"class":136},[57,32321,32267],{"class":81},[57,32323,31663],{"class":140},[57,32325,32326,32329,32331,32333],{"class":59,"line":2850},[57,32327,32328],{"class":5489},"                                   shuffle",[57,32330,156],{"class":136},[57,32332,31673],{"class":81},[57,32334,31663],{"class":140},[57,32336,32337,32340,32342,32344],{"class":59,"line":2864},[57,32338,32339],{"class":5489},"                                   num_workers",[57,32341,156],{"class":136},[57,32343,811],{"class":81},[57,32345,238],{"class":140},[57,32347,32348,32350],{"class":59,"line":2872},[57,32349,4363],{"class":136},[57,32351,32352],{"class":140}," train_dataloader,val_dataloader\n",[57,32354,32355],{"class":59,"line":2877},[57,32356,2673],{"emptyLinePlaceholder":350},[57,32358,32359],{"class":59,"line":2883},[57,32360,32361],{"class":63},"# 验证是否出错\n",[57,32363,32364],{"class":59,"line":2889},[57,32365,32366],{"class":63},"# train_val_data_process()\n",[57,32368,32369],{"class":59,"line":2894},[57,32370,2673],{"emptyLinePlaceholder":350},[57,32372,32373],{"class":59,"line":8221},[57,32374,32375],{"class":63},"# 定义模型训练函数\n",[57,32377,32378,32380,32383],{"class":59,"line":8245},[57,32379,32144],{"class":136},[57,32381,32382],{"class":70}," train_model_process",[57,32384,32385],{"class":140},"(model,train_dataloader,val_dataloader,num_epochs):\n",[57,32387,32388,32390,32392,32394,32396,32398,32400,32402,32405],{"class":59,"line":8250},[57,32389,31434],{"class":140},[57,32391,156],{"class":136},[57,32393,205],{"class":140},[57,32395,31441],{"class":74},[57,32397,211],{"class":136},[57,32399,31446],{"class":140},[57,32401,232],{"class":136},[57,32403,32404],{"class":74}," 'cpu'",[57,32406,238],{"class":140},[57,32408,32409],{"class":59,"line":8256},[57,32410,2673],{"emptyLinePlaceholder":350},[57,32412,32413],{"class":59,"line":8283},[57,32414,2673],{"emptyLinePlaceholder":350},[57,32416,32417],{"class":59,"line":8288},[57,32418,32419],{"class":63},"    # 定义优化器\n",[57,32421,32422],{"class":59,"line":8294},[57,32423,32424],{"class":63},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[57,32426,32427],{"class":59,"line":8306},[57,32428,32429],{"class":63},"    # lr为学习率\n",[57,32431,32432,32435,32437,32440,32443,32445,32448],{"class":59,"line":8318},[57,32433,32434],{"class":140},"    optimizer",[57,32436,156],{"class":136},[57,32438,32439],{"class":140},"torch.optim.Adam(model.parameters(),",[57,32441,32442],{"class":5489},"lr",[57,32444,156],{"class":136},[57,32446,32447],{"class":81},"0.001",[57,32449,238],{"class":140},[57,32451,32452],{"class":59,"line":8330},[57,32453,2673],{"emptyLinePlaceholder":350},[57,32455,32456],{"class":59,"line":9989},[57,32457,32458],{"class":63},"    # 定义损失函数使用交叉熵损失函数\n",[57,32460,32461,32464,32466],{"class":59,"line":10014},[57,32462,32463],{"class":140},"    criterion",[57,32465,156],{"class":136},[57,32467,32468],{"class":140},"nn.CrossEntropyLoss()\n",[57,32470,32471],{"class":59,"line":10037},[57,32472,2673],{"emptyLinePlaceholder":350},[57,32474,32475],{"class":59,"line":10061},[57,32476,32477],{"class":63},"    # 将模型放到GPU中进行训练\n",[57,32479,32480,32482,32484],{"class":59,"line":10066},[57,32481,31486],{"class":140},[57,32483,156],{"class":136},[57,32485,32486],{"class":140},"model.to(device)\n",[57,32488,32489],{"class":59,"line":10071},[57,32490,32491],{"class":63},"    # 复制当前模型的参数\n",[57,32493,32494],{"class":59,"line":10076},[57,32495,32496],{"class":63},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[57,32498,32499],{"class":59,"line":10085},[57,32500,32501],{"class":63},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[57,32503,32504,32507,32509],{"class":59,"line":10090},[57,32505,32506],{"class":140},"    best_model_wts",[57,32508,156],{"class":136},[57,32510,32511],{"class":140},"copy.deepcopy(model.state_dict())\n",[57,32513,32514],{"class":59,"line":10096},[57,32515,2673],{"emptyLinePlaceholder":350},[57,32517,32518],{"class":59,"line":10117},[57,32519,2673],{"emptyLinePlaceholder":350},[57,32521,32522],{"class":59,"line":10123},[57,32523,32524],{"class":63},"    # 初始化参数\n",[57,32526,32527],{"class":59,"line":10137},[57,32528,32529],{"class":63},"    # 最高准确度\n",[57,32531,32532,32535,32537],{"class":59,"line":10143},[57,32533,32534],{"class":140},"    best_acc",[57,32536,156],{"class":136},[57,32538,32539],{"class":81},"0.0\n",[57,32541,32542],{"class":59,"line":10170},[57,32543,32544],{"class":63},"    # 训练集损失列表\n",[57,32546,32547,32550,32552],{"class":59,"line":10179},[57,32548,32549],{"class":140},"    train_loss_all",[57,32551,156],{"class":136},[57,32553,32554],{"class":140},"[]\n",[57,32556,32557],{"class":59,"line":10185},[57,32558,32559],{"class":63},"    # 验证集函数列表\n",[57,32561,32562,32565,32567],{"class":59,"line":10193},[57,32563,32564],{"class":140},"    val_loss_all",[57,32566,156],{"class":136},[57,32568,32554],{"class":140},[57,32570,32571],{"class":59,"line":10198},[57,32572,32573],{"class":63},"    # 训练集准确度列表\n",[57,32575,32576,32579,32581],{"class":59,"line":16876},[57,32577,32578],{"class":140},"    train_acc_all",[57,32580,156],{"class":136},[57,32582,32554],{"class":140},[57,32584,32585],{"class":59,"line":16882},[57,32586,32587],{"class":63},"    # 验证集准确度列表\n",[57,32589,32590,32593,32595],{"class":59,"line":16905},[57,32591,32592],{"class":140},"    val_acc_all",[57,32594,156],{"class":136},[57,32596,32554],{"class":140},[57,32598,32599],{"class":59,"line":16911},[57,32600,2673],{"emptyLinePlaceholder":350},[57,32602,32603],{"class":59,"line":16934},[57,32604,32605],{"class":63},"    # 保存当前时间--->方便看每轮训练的时间\n",[57,32607,32608,32611,32613],{"class":59,"line":16948},[57,32609,32610],{"class":140},"    since",[57,32612,156],{"class":136},[57,32614,32615],{"class":140},"time.time()\n",[57,32617,32618],{"class":59,"line":16968},[57,32619,2673],{"emptyLinePlaceholder":350},[57,32621,32622],{"class":59,"line":16974},[57,32623,2673],{"emptyLinePlaceholder":350},[57,32625,32626],{"class":59,"line":16985},[57,32627,32628],{"class":63},"    # 准备工作完成--->开始训练模型\n",[57,32630,32631,32633,32636,32638,32641],{"class":59,"line":17008},[57,32632,3474],{"class":136},[57,32634,32635],{"class":140}," epoch ",[57,32637,26312],{"class":136},[57,32639,32640],{"class":81}," range",[57,32642,32643],{"class":140},"(num_epochs):\n",[57,32645,32646,32649,32651,32654,32657,32659,32661,32663,32666,32668,32670],{"class":59,"line":17030},[57,32647,32648],{"class":81},"        print",[57,32650,168],{"class":140},[57,32652,32653],{"class":74},"\"Epoch ",[57,32655,32656],{"class":81},"{}",[57,32658,1000],{"class":74},[57,32660,32656],{"class":81},[57,32662,668],{"class":74},[57,32664,32665],{"class":140},".format(epoch,num_epochs",[57,32667,948],{"class":136},[57,32669,635],{"class":81},[57,32671,259],{"class":140},[57,32673,32674,32676,32678,32681,32683,32685],{"class":59,"line":17035},[57,32675,32648],{"class":81},[57,32677,168],{"class":140},[57,32679,32680],{"class":74},"\"-\"",[57,32682,871],{"class":136},[57,32684,862],{"class":81},[57,32686,238],{"class":140},[57,32688,32689],{"class":59,"line":17041},[57,32690,2673],{"emptyLinePlaceholder":350},[57,32692,32693],{"class":59,"line":17055},[57,32694,32695],{"class":63},"        # 初始化参数\n",[57,32697,32698],{"class":59,"line":17068},[57,32699,32700],{"class":63},"        # 训练集损失函数\n",[57,32702,32703,32706,32708],{"class":59,"line":17073},[57,32704,32705],{"class":140},"        train_loss",[57,32707,156],{"class":136},[57,32709,32539],{"class":81},[57,32711,32712],{"class":59,"line":17087},[57,32713,32714],{"class":63},"        # 训练集准确度\n",[57,32716,32717,32720,32722],{"class":59,"line":17092},[57,32718,32719],{"class":140},"        train_corrects",[57,32721,156],{"class":136},[57,32723,3358],{"class":81},[57,32725,32726],{"class":59,"line":17098},[57,32727,32728],{"class":63},"        # 验证集损失函数\n",[57,32730,32731,32734,32736],{"class":59,"line":17103},[57,32732,32733],{"class":140},"        val_loss",[57,32735,156],{"class":136},[57,32737,32539],{"class":81},[57,32739,32740],{"class":59,"line":17117},[57,32741,32742],{"class":63},"        # 验证集准确度\n",[57,32744,32745,32748,32750],{"class":59,"line":17122},[57,32746,32747],{"class":140},"        val_corrects",[57,32749,156],{"class":136},[57,32751,3358],{"class":81},[57,32753,32754],{"class":59,"line":17127},[57,32755,32756],{"class":63},"        # 训练集样本数量\n",[57,32758,32759,32762,32764],{"class":59,"line":17141},[57,32760,32761],{"class":140},"        train_num",[57,32763,156],{"class":136},[57,32765,3358],{"class":81},[57,32767,32768],{"class":59,"line":17153},[57,32769,32770],{"class":63},"        # 验证集样本数量\n",[57,32772,32773,32776,32778],{"class":59,"line":17158},[57,32774,32775],{"class":140},"        val_num",[57,32777,156],{"class":136},[57,32779,3358],{"class":81},[57,32781,32782],{"class":59,"line":17171},[57,32783,32784],{"class":63},"        # 将数据放到设备,并开始训练\n",[57,32786,32787,32789,32791,32793,32795],{"class":59,"line":17176},[57,32788,3676],{"class":136},[57,32790,31798],{"class":140},[57,32792,26312],{"class":136},[57,32794,31803],{"class":81},[57,32796,32797],{"class":140},"(train_dataloader):\n",[57,32799,32800],{"class":59,"line":17181},[57,32801,32802],{"class":63},"            # 将特征放入到训练设备\n",[57,32804,32805,32808,32810],{"class":59,"line":17186},[57,32806,32807],{"class":140},"            b_x",[57,32809,156],{"class":136},[57,32811,32812],{"class":140},"b_x.to(device)\n",[57,32814,32815],{"class":59,"line":17199},[57,32816,32817],{"class":63},"            # 将标签放入到训练设备当中\n",[57,32819,32820,32823,32825],{"class":59,"line":17204},[57,32821,32822],{"class":140},"            b_y",[57,32824,156],{"class":136},[57,32826,32827],{"class":140},"b_y.to(device)\n",[57,32829,32831],{"class":59,"line":32830},98,[57,32832,32833],{"class":63},"            # 设置模型为训练模式\n",[57,32835,32837],{"class":59,"line":32836},99,[57,32838,32839],{"class":140},"            model.train()\n",[57,32841,32843],{"class":59,"line":32842},100,[57,32844,32845],{"class":63},"            # 将数据放到模型当中,开始前向传播\n",[57,32847,32849],{"class":59,"line":32848},101,[57,32850,32851],{"class":63},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[57,32853,32855,32858,32860],{"class":59,"line":32854},102,[57,32856,32857],{"class":140},"            output",[57,32859,156],{"class":136},[57,32861,32862],{"class":140},"model(b_x)\n",[57,32864,32866],{"class":59,"line":32865},103,[57,32867,32868],{"class":63},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[57,32870,32872,32875,32877,32880,32883,32885,32887],{"class":59,"line":32871},104,[57,32873,32874],{"class":140},"            pre_lab",[57,32876,156],{"class":136},[57,32878,32879],{"class":140},"torch.argmax(output,",[57,32881,32882],{"class":5489},"dim",[57,32884,156],{"class":136},[57,32886,635],{"class":81},[57,32888,238],{"class":140},[57,32890,32892],{"class":59,"line":32891},105,[57,32893,32894],{"class":63},"            # 计算每一个batch的损失函数\n",[57,32896,32898,32901,32903],{"class":59,"line":32897},106,[57,32899,32900],{"class":140},"            loss",[57,32902,156],{"class":136},[57,32904,32905],{"class":140},"criterion(output,b_y)\n",[57,32907,32909],{"class":59,"line":32908},107,[57,32910,32911],{"class":63},"            # 将梯度初始化为0\n",[57,32913,32915],{"class":59,"line":32914},108,[57,32916,32917],{"class":140},"            optimizer.zero_grad()\n",[57,32919,32921],{"class":59,"line":32920},109,[57,32922,32923],{"class":63},"            # 梯度置为0后再进行反向传播\n",[57,32925,32927],{"class":59,"line":32926},110,[57,32928,32929],{"class":140},"            loss.backward()\n",[57,32931,32933],{"class":59,"line":32932},111,[57,32934,32935],{"class":63},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[57,32937,32939],{"class":59,"line":32938},112,[57,32940,32941],{"class":140},"            optimizer.step()\n",[57,32943,32945],{"class":59,"line":32944},113,[57,32946,32947],{"class":63},"            # loss.item()指的是batch的平均损失\n",[57,32949,32951,32954,32956,32959,32961,32964,32966],{"class":59,"line":32950},114,[57,32952,32953],{"class":140},"            train_loss",[57,32955,9750],{"class":136},[57,32957,32958],{"class":140},"loss.item()",[57,32960,871],{"class":136},[57,32962,32963],{"class":140},"b_x.size(",[57,32965,226],{"class":81},[57,32967,238],{"class":140},[57,32969,32971],{"class":59,"line":32970},115,[57,32972,32973],{"class":63},"            # 计算每个批次中正确预测的数量\n",[57,32975,32977,32980,32982,32985,32987],{"class":59,"line":32976},116,[57,32978,32979],{"class":140},"            train_corrects",[57,32981,9750],{"class":136},[57,32983,32984],{"class":140},"torch.sum(pre_lab",[57,32986,3222],{"class":136},[57,32988,32989],{"class":140},"b_y.data)\n",[57,32991,32993],{"class":59,"line":32992},117,[57,32994,32995],{"class":63},"            # 计算目前为止一共处理了多少样本\n",[57,32997,32999,33002,33004,33006,33008],{"class":59,"line":32998},118,[57,33000,33001],{"class":140},"            train_num",[57,33003,9750],{"class":136},[57,33005,32963],{"class":140},[57,33007,226],{"class":81},[57,33009,238],{"class":140},[57,33011,33013],{"class":59,"line":33012},119,[57,33014,33015],{"class":63},"        # 验证数据\n",[57,33017,33019,33021,33024,33026,33028],{"class":59,"line":33018},120,[57,33020,3676],{"class":136},[57,33022,33023],{"class":140}," step ,(b_x,b_y) ",[57,33025,26312],{"class":136},[57,33027,31803],{"class":81},[57,33029,33030],{"class":140},"(val_dataloader):\n",[57,33032,33034],{"class":59,"line":33033},121,[57,33035,33036],{"class":63},"            # 将特征放到验证设备当中\n",[57,33038,33040,33042,33044],{"class":59,"line":33039},122,[57,33041,32807],{"class":140},[57,33043,156],{"class":136},[57,33045,32812],{"class":140},[57,33047,33049],{"class":59,"line":33048},123,[57,33050,33051],{"class":63},"            # 将标签放到放到训练设备当中\n",[57,33053,33055,33057,33059],{"class":59,"line":33054},124,[57,33056,32822],{"class":140},[57,33058,156],{"class":136},[57,33060,32827],{"class":140},[57,33062,33064],{"class":59,"line":33063},125,[57,33065,33066],{"class":63},"            # 开启验证模式，设置模型为评估模式\n",[57,33068,33070],{"class":59,"line":33069},126,[57,33071,33072],{"class":140},"            model.eval()\n",[57,33074,33076,33079],{"class":59,"line":33075},127,[57,33077,33078],{"class":136},"            with",[57,33080,33081],{"class":140}," torch.no_grad():\n",[57,33083,33085],{"class":59,"line":33084},128,[57,33086,33087],{"class":63},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[57,33089,33091,33094,33096],{"class":59,"line":33090},129,[57,33092,33093],{"class":140},"                output ",[57,33095,156],{"class":136},[57,33097,33098],{"class":140}," model(b_x)\n",[57,33100,33102],{"class":59,"line":33101},130,[57,33103,33104],{"class":63},"                # 查找每一行中最大值对应的下标\n",[57,33106,33108,33111,33113,33116,33118,33120,33122],{"class":59,"line":33107},131,[57,33109,33110],{"class":140},"                pre_lab ",[57,33112,156],{"class":136},[57,33114,33115],{"class":140}," torch.argmax(output, ",[57,33117,32882],{"class":5489},[57,33119,156],{"class":136},[57,33121,635],{"class":81},[57,33123,238],{"class":140},[57,33125,33127],{"class":59,"line":33126},132,[57,33128,33129],{"class":63},"                # 计算验证集上的当前 batch 损失\n",[57,33131,33133,33136,33138],{"class":59,"line":33132},133,[57,33134,33135],{"class":140},"                val_batch_loss ",[57,33137,156],{"class":136},[57,33139,33140],{"class":140}," criterion(output, b_y)\n",[57,33142,33144],{"class":59,"line":33143},134,[57,33145,33146],{"class":63},"                # 对损失函数进行累加（按样本数加权）\n",[57,33148,33150,33153,33155,33158,33160,33163,33165],{"class":59,"line":33149},135,[57,33151,33152],{"class":140},"                val_loss ",[57,33154,9750],{"class":136},[57,33156,33157],{"class":140}," val_batch_loss.item() ",[57,33159,871],{"class":136},[57,33161,33162],{"class":140}," b_x.size(",[57,33164,226],{"class":81},[57,33166,238],{"class":140},[57,33168,33170,33173,33175,33178,33180],{"class":59,"line":33169},136,[57,33171,33172],{"class":140},"                val_corrects ",[57,33174,9750],{"class":136},[57,33176,33177],{"class":140}," torch.sum(pre_lab ",[57,33179,3222],{"class":136},[57,33181,33182],{"class":140}," b_y.data)\n",[57,33184,33186],{"class":59,"line":33185},137,[57,33187,33188],{"class":63},"                # 当前用于验证的样本数量\n",[57,33190,33192,33195,33197,33199,33201],{"class":59,"line":33191},138,[57,33193,33194],{"class":140},"            val_num ",[57,33196,9750],{"class":136},[57,33198,33162],{"class":140},[57,33200,226],{"class":81},[57,33202,238],{"class":140},[57,33204,33206],{"class":59,"line":33205},139,[57,33207,33208],{"class":63},"        # 计算并保存每一次迭代的loss值和准确率\n",[57,33210,33212],{"class":59,"line":33211},140,[57,33213,33214],{"class":63},"        # 计算并保存训练集的loss值\n",[57,33216,33218,33221,33223],{"class":59,"line":33217},141,[57,33219,33220],{"class":140},"        train_loss_all.append(train_loss",[57,33222,1000],{"class":136},[57,33224,33225],{"class":140},"train_num)\n",[57,33227,33229],{"class":59,"line":33228},142,[57,33230,33231],{"class":63},"        # 取双精度\n",[57,33233,33235],{"class":59,"line":33234},143,[57,33236,33237],{"class":63},"        # 计算并保存训练集的准确率\n",[57,33239,33241,33244,33246],{"class":59,"line":33240},144,[57,33242,33243],{"class":140},"        train_acc_all.append(train_corrects.double().item()",[57,33245,1000],{"class":136},[57,33247,33225],{"class":140},[57,33249,33251],{"class":59,"line":33250},145,[57,33252,33253],{"class":63},"        # 计算并保存验证集的loss值\n",[57,33255,33257,33260,33262],{"class":59,"line":33256},146,[57,33258,33259],{"class":140},"        val_loss_all.append(val_loss",[57,33261,1000],{"class":136},[57,33263,33264],{"class":140},"val_num)\n",[57,33266,33268],{"class":59,"line":33267},147,[57,33269,33270],{"class":63},"        # 计算并保存验证集的准确率\n",[57,33272,33274,33277,33279],{"class":59,"line":33273},148,[57,33275,33276],{"class":140},"        val_acc_all.append(val_corrects.double().item()",[57,33278,1000],{"class":136},[57,33280,33264],{"class":140},[57,33282,33284],{"class":59,"line":33283},149,[57,33285,2673],{"emptyLinePlaceholder":350},[57,33287,33289],{"class":59,"line":33288},150,[57,33290,33291],{"class":63},"        # 打印训练一轮的loss值和准确率\n",[57,33293,33295,33297,33299,33301,33303,33306,33308,33311,33313,33316,33318,33320,33322,33324,33327,33329,33331,33334,33336,33338],{"class":59,"line":33294},151,[57,33296,32648],{"class":81},[57,33298,168],{"class":140},[57,33300,3865],{"class":74},[57,33302,32656],{"class":81},[57,33304,33305],{"class":74},"train loss:",[57,33307,1312],{"class":81},[57,33309,33310],{"class":136},":.4f",[57,33312,1362],{"class":81},[57,33314,33315],{"class":74}," train acc:",[57,33317,1312],{"class":81},[57,33319,33310],{"class":136},[57,33321,1362],{"class":81},[57,33323,3865],{"class":74},[57,33325,33326],{"class":140},".format(epoch,train_loss_all[",[57,33328,948],{"class":136},[57,33330,635],{"class":81},[57,33332,33333],{"class":140},"],train_acc_all[",[57,33335,948],{"class":136},[57,33337,635],{"class":81},[57,33339,33340],{"class":140},"]))\n",[57,33342,33344,33346,33348,33350,33352,33355,33357,33359,33361,33364,33366,33368,33370,33372,33375,33377,33379,33382,33384,33386],{"class":59,"line":33343},152,[57,33345,32648],{"class":81},[57,33347,168],{"class":140},[57,33349,3865],{"class":74},[57,33351,32656],{"class":81},[57,33353,33354],{"class":74},"val loss:",[57,33356,1312],{"class":81},[57,33358,33310],{"class":136},[57,33360,1362],{"class":81},[57,33362,33363],{"class":74}," val acc:",[57,33365,1312],{"class":81},[57,33367,33310],{"class":136},[57,33369,1362],{"class":81},[57,33371,3865],{"class":74},[57,33373,33374],{"class":140},".format(epoch,val_loss_all[",[57,33376,948],{"class":136},[57,33378,635],{"class":81},[57,33380,33381],{"class":140},"],val_acc_all[",[57,33383,948],{"class":136},[57,33385,635],{"class":81},[57,33387,33340],{"class":140},[57,33389,33391],{"class":59,"line":33390},153,[57,33392,2673],{"emptyLinePlaceholder":350},[57,33394,33396],{"class":59,"line":33395},154,[57,33397,33398],{"class":63},"        # 判断准确度--->保存最优模型\n",[57,33400,33402,33404,33407,33409,33411,33413,33415],{"class":59,"line":33401},155,[57,33403,2770],{"class":136},[57,33405,33406],{"class":140}," val_acc_all[",[57,33408,948],{"class":136},[57,33410,635],{"class":81},[57,33412,1356],{"class":140},[57,33414,223],{"class":136},[57,33416,33417],{"class":140},"best_acc:\n",[57,33419,33421],{"class":59,"line":33420},156,[57,33422,33423],{"class":63},"            # 保存当前模型准确度\n",[57,33425,33427,33430,33432,33434,33437,33439,33441],{"class":59,"line":33426},157,[57,33428,33429],{"class":140},"            best_acc:",[57,33431,464],{"class":81},[57,33433,156],{"class":136},[57,33435,33436],{"class":140},"val_acc_all[",[57,33438,948],{"class":136},[57,33440,635],{"class":81},[57,33442,33443],{"class":140},"]\n",[57,33445,33447],{"class":59,"line":33446},158,[57,33448,33449],{"class":63},"            # 保存当前的准确度\n",[57,33451,33453],{"class":59,"line":33452},159,[57,33454,33455],{"class":63},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[57,33457,33459,33462,33464],{"class":59,"line":33458},160,[57,33460,33461],{"class":140},"            best_model_wts",[57,33463,156],{"class":136},[57,33465,32511],{"class":140},[57,33467,33469],{"class":59,"line":33468},161,[57,33470,2673],{"emptyLinePlaceholder":350},[57,33472,33474],{"class":59,"line":33473},162,[57,33475,33476],{"class":63},"        # 计算耗时\n",[57,33478,33480,33483,33485,33488,33490],{"class":59,"line":33479},163,[57,33481,33482],{"class":140},"        time_use",[57,33484,156],{"class":136},[57,33486,33487],{"class":140},"time.time()",[57,33489,948],{"class":136},[57,33491,33492],{"class":140},"since\n",[57,33494,33496,33498,33500,33503,33505,33508,33510,33512,33514,33516,33518,33521,33524,33527,33529,33532,33534,33536],{"class":59,"line":33495},164,[57,33497,32648],{"class":81},[57,33499,168],{"class":140},[57,33501,33502],{"class":74},"'训练和验证耗费的时间",[57,33504,1312],{"class":81},[57,33506,33507],{"class":136},":.0f",[57,33509,1362],{"class":81},[57,33511,960],{"class":74},[57,33513,1312],{"class":81},[57,33515,33507],{"class":136},[57,33517,1362],{"class":81},[57,33519,33520],{"class":74},"s'",[57,33522,33523],{"class":140},".format(time_use",[57,33525,33526],{"class":136},"\u002F\u002F",[57,33528,1323],{"class":81},[57,33530,33531],{"class":140},",time_use",[57,33533,745],{"class":136},[57,33535,1323],{"class":81},[57,33537,259],{"class":140},[57,33539,33541],{"class":59,"line":33540},165,[57,33542,33543],{"class":63},"    # 选择最优参数\n",[57,33545,33547],{"class":59,"line":33546},166,[57,33548,33549],{"class":63},"    # 加载最高准确率下的模型参数\n",[57,33551,33553],{"class":59,"line":33552},167,[57,33554,33555],{"class":63},"    # model.load_state_dict(best_model_wts)\n",[57,33557,33559,33562,33565],{"class":59,"line":33558},168,[57,33560,33561],{"class":140},"    torch.save(model.state_dict(best_model_wts), ",[57,33563,33564],{"class":74},"'.\u002Fbest_model.pth'",[57,33566,238],{"class":140},[57,33568,33570],{"class":59,"line":33569},169,[57,33571,33572],{"class":63},"    # 或者写成\n",[57,33574,33576],{"class":59,"line":33575},170,[57,33577,33578],{"class":63},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[57,33580,33582],{"class":59,"line":33581},171,[57,33583,33584],{"class":63},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[57,33586,33588,33591,33593,33596,33599,33601],{"class":59,"line":33587},172,[57,33589,33590],{"class":140},"    train_process",[57,33592,156],{"class":136},[57,33594,33595],{"class":140},"pd.DataFrame(",[57,33597,33598],{"class":5489},"data",[57,33600,156],{"class":136},[57,33602,1828],{"class":140},[57,33604,33606,33609,33611,33614],{"class":59,"line":33605},173,[57,33607,33608],{"class":74},"        \"epoch\"",[57,33610,1275],{"class":140},[57,33612,33613],{"class":81},"range",[57,33615,33616],{"class":140},"(num_epochs),\n",[57,33618,33620,33623],{"class":59,"line":33619},174,[57,33621,33622],{"class":74},"        \"train_loss_all\"",[57,33624,33625],{"class":140},":train_loss_all,\n",[57,33627,33629,33632],{"class":59,"line":33628},175,[57,33630,33631],{"class":74},"        \"val_loss_all\"",[57,33633,33634],{"class":140},":val_loss_all,\n",[57,33636,33638,33641],{"class":59,"line":33637},176,[57,33639,33640],{"class":74},"        \"train_acc_all\"",[57,33642,33643],{"class":140},":train_acc_all,\n",[57,33645,33647,33650],{"class":59,"line":33646},177,[57,33648,33649],{"class":74},"        \"val_acc_all\"",[57,33651,33652],{"class":140},":val_acc_all\n",[57,33654,33656],{"class":59,"line":33655},178,[57,33657,33658],{"class":140},"    })\n",[57,33660,33662],{"class":59,"line":33661},179,[57,33663,33664],{"class":63},"    # 返回训练保存的过程\n",[57,33666,33668,33670],{"class":59,"line":33667},180,[57,33669,4363],{"class":136},[57,33671,33672],{"class":140}," train_process\n",[57,33674,33676],{"class":59,"line":33675},181,[57,33677,2673],{"emptyLinePlaceholder":350},[57,33679,33681],{"class":59,"line":33680},182,[57,33682,33683],{"class":63},"# 将loss值和精度按照图片的形式展示出来\n",[57,33685,33687,33689,33692],{"class":59,"line":33686},183,[57,33688,32144],{"class":136},[57,33690,33691],{"class":70}," matplot_acc_loss",[57,33693,33694],{"class":140},"(train_process):\n",[57,33696,33698],{"class":59,"line":33697},184,[57,33699,33700],{"class":63},"    # 设置图的大小\n",[57,33702,33704,33707,33709,33711,33713,33715,33717,33719],{"class":59,"line":33703},185,[57,33705,33706],{"class":140},"    plt.figure(",[57,33708,31890],{"class":5489},[57,33710,156],{"class":136},[57,33712,168],{"class":140},[57,33714,914],{"class":81},[57,33716,273],{"class":140},[57,33718,710],{"class":81},[57,33720,259],{"class":140},[57,33722,33724],{"class":59,"line":33723},186,[57,33725,33726],{"class":63},"    # 设置图中有几张图\n",[57,33728,33730],{"class":59,"line":33729},187,[57,33731,33732],{"class":63},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[57,33734,33736],{"class":59,"line":33735},188,[57,33737,33738],{"class":63},"    # ①loss图\n",[57,33740,33742,33744,33746,33748,33750,33752,33754],{"class":59,"line":33741},189,[57,33743,31924],{"class":140},[57,33745,635],{"class":81},[57,33747,273],{"class":140},[57,33749,498],{"class":81},[57,33751,273],{"class":140},[57,33753,635],{"class":81},[57,33755,238],{"class":140},[57,33757,33759],{"class":59,"line":33758},190,[57,33760,33761],{"class":63},"    # 补充:\n",[57,33763,33765],{"class":59,"line":33764},191,[57,33766,33767],{"class":63},"    # plt.subplot(nrows, ncols, index)\n",[57,33769,33771],{"class":59,"line":33770},192,[57,33772,33773],{"class":63},"    # nrows：行数\n",[57,33775,33777],{"class":59,"line":33776},193,[57,33778,33779],{"class":63},"    # ncols：列数\n",[57,33781,33783],{"class":59,"line":33782},194,[57,33784,33785],{"class":63},"    # index：目前选中第几个子图（从1开始）\n",[57,33787,33789,33792,33795,33798,33801,33803,33806,33808,33811],{"class":59,"line":33788},195,[57,33790,33791],{"class":140},"    plt.plot(train_process[",[57,33793,33794],{"class":74},"\"epoch\"",[57,33796,33797],{"class":140},"],train_process.train_loss_all,",[57,33799,33800],{"class":74},"'ro-'",[57,33802,273],{"class":140},[57,33804,33805],{"class":5489},"label",[57,33807,156],{"class":136},[57,33809,33810],{"class":74},"'train loss'",[57,33812,238],{"class":140},[57,33814,33816,33818,33820,33823,33826,33828,33830,33832,33835],{"class":59,"line":33815},196,[57,33817,33791],{"class":140},[57,33819,33794],{"class":74},[57,33821,33822],{"class":140},"],train_process.val_loss_all,",[57,33824,33825],{"class":74},"'bs--'",[57,33827,273],{"class":140},[57,33829,33805],{"class":5489},[57,33831,156],{"class":136},[57,33833,33834],{"class":74},"'val loss'",[57,33836,238],{"class":140},[57,33838,33840],{"class":59,"line":33839},197,[57,33841,33842],{"class":63},"    # 添加一个图例\n",[57,33844,33846],{"class":59,"line":33845},198,[57,33847,33848],{"class":140},"    plt.legend()\n",[57,33850,33852],{"class":59,"line":33851},199,[57,33853,33854],{"class":63},"    # 给轴添加标签\n",[57,33856,33858,33861,33864],{"class":59,"line":33857},200,[57,33859,33860],{"class":140},"    plt.xlabel(",[57,33862,33863],{"class":74},"'epoch'",[57,33865,238],{"class":140},[57,33867,33869,33872,33875],{"class":59,"line":33868},201,[57,33870,33871],{"class":140},"    plt.ylabel(",[57,33873,33874],{"class":74},"'loss'",[57,33876,238],{"class":140},[57,33878,33880],{"class":59,"line":33879},202,[57,33881,33882],{"class":63},"    # ②准确度图\n",[57,33884,33886,33888,33890,33892,33894,33896,33898],{"class":59,"line":33885},203,[57,33887,31924],{"class":140},[57,33889,635],{"class":81},[57,33891,273],{"class":140},[57,33893,498],{"class":81},[57,33895,273],{"class":140},[57,33897,498],{"class":81},[57,33899,238],{"class":140},[57,33901,33903,33905,33907,33910,33912,33914,33916,33918,33921],{"class":59,"line":33902},204,[57,33904,33791],{"class":140},[57,33906,33794],{"class":74},[57,33908,33909],{"class":140},"],train_process.train_acc_all,",[57,33911,33800],{"class":74},[57,33913,273],{"class":140},[57,33915,33805],{"class":5489},[57,33917,156],{"class":136},[57,33919,33920],{"class":74},"'train acc'",[57,33922,238],{"class":140},[57,33924,33926,33928,33930,33933,33935,33937,33939,33941,33944],{"class":59,"line":33925},205,[57,33927,33791],{"class":140},[57,33929,33794],{"class":74},[57,33931,33932],{"class":140},"],train_process.val_acc_all,",[57,33934,33825],{"class":74},[57,33936,273],{"class":140},[57,33938,33805],{"class":5489},[57,33940,156],{"class":136},[57,33942,33943],{"class":74},"'val acc'",[57,33945,238],{"class":140},[57,33947,33949],{"class":59,"line":33948},206,[57,33950,33951],{"class":63},"    # 添加图例\n",[57,33953,33955],{"class":59,"line":33954},207,[57,33956,33848],{"class":140},[57,33958,33960,33962,33964],{"class":59,"line":33959},208,[57,33961,33860],{"class":140},[57,33963,33794],{"class":74},[57,33965,238],{"class":140},[57,33967,33969,33971,33974],{"class":59,"line":33968},209,[57,33970,33871],{"class":140},[57,33972,33973],{"class":74},"\"acc\"",[57,33975,238],{"class":140},[57,33977,33979],{"class":59,"line":33978},210,[57,33980,33981],{"class":140},"    plt.show()\n",[57,33983,33985],{"class":59,"line":33984},211,[57,33986,2673],{"emptyLinePlaceholder":350},[57,33988,33990],{"class":59,"line":33989},212,[57,33991,33992],{"class":63},"# 正式开始训练:\n",[57,33994,33996,33998,34000,34002,34004],{"class":59,"line":33995},213,[57,33997,1813],{"class":136},[57,33999,31417],{"class":81},[57,34001,3222],{"class":136},[57,34003,31422],{"class":74},[57,34005,4012],{"class":140},[57,34007,34009],{"class":59,"line":34008},214,[57,34010,34011],{"class":63},"    # 将模型实例化\n",[57,34013,34015,34018,34020],{"class":59,"line":34014},215,[57,34016,34017],{"class":140},"    LeNet",[57,34019,156],{"class":136},[57,34021,34022],{"class":140},"LeNet()\n",[57,34024,34026,34029,34031],{"class":59,"line":34025},216,[57,34027,34028],{"class":140},"    train_dataloader,val_dataloader",[57,34030,156],{"class":136},[57,34032,34033],{"class":140},"train_val_data_process()\n",[57,34035,34037,34039,34041,34044,34047,34049,34051],{"class":59,"line":34036},217,[57,34038,33590],{"class":140},[57,34040,156],{"class":136},[57,34042,34043],{"class":140},"train_model_process(LeNet,train_dataloader,val_dataloader,",[57,34045,34046],{"class":5489},"num_epochs",[57,34048,156],{"class":136},[57,34050,1116],{"class":81},[57,34052,238],{"class":140},[57,34054,34056],{"class":59,"line":34055},218,[57,34057,34058],{"class":140},"    matplot_acc_loss(train_process)\n",[14,34060,34061],{},"画图的补充点学习：",[14,34063,34064],{},[44,34065],{"alt":46,"src":34066},"\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",[377,34068,34069],{"start":144},[380,34070,34071],{},"测试",[49,34073,34075],{"className":122,"code":34074,"language":124,"meta":46,"style":46},"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",[28,34076,34077,34083,34093,34105,34115,34120,34130,34140,34144,34149,34158,34175,34187,34204,34215,34231,34236,34247,34258,34269,34276,34280,34285,34295,34300,34317,34325,34329,34334,34343,34352,34356,34361,34366,34371,34378,34383,34395,34405,34415,34420,34424,34429,34438,34443,34459,34464,34469,34474,34488,34493,34507,34511,34516,34531,34536,34548,34552,34557,34569,34574,34582,34587,34592,34602,34607,34616,34621,34626,34630,34635,34640,34656,34664,34669,34674,34733,34739,34744,34755,34763,34771,34775,34780,34784,34789,34797,34802,34818,34823,34833,34843],{"__ignoreMap":46},[57,34078,34079,34081],{"class":59,"line":60},[57,34080,137],{"class":136},[57,34082,141],{"class":140},[57,34084,34085,34087,34089,34091],{"class":59,"line":67},[57,34086,137],{"class":136},[57,34088,31612],{"class":140},[57,34090,31580],{"class":136},[57,34092,31617],{"class":140},[57,34094,34095,34097,34100,34102],{"class":59,"line":144},[57,34096,30934],{"class":136},[57,34098,34099],{"class":140}," jupyter_client.consoleapp ",[57,34101,137],{"class":136},[57,34103,34104],{"class":140}," classes\n",[57,34106,34107,34109,34111,34113],{"class":59,"line":150},[57,34108,30934],{"class":136},[57,34110,31595],{"class":140},[57,34112,137],{"class":136},[57,34114,31600],{"class":140},[57,34116,34117],{"class":59,"line":162},[57,34118,34119],{"class":63},"# 导入数据集\n",[57,34121,34122,34124,34126,34128],{"class":59,"line":180},[57,34123,30934],{"class":136},[57,34125,31565],{"class":140},[57,34127,137],{"class":136},[57,34129,31570],{"class":140},[57,34131,34132,34134,34136,34138],{"class":59,"line":186},[57,34133,30934],{"class":136},[57,34135,32111],{"class":140},[57,34137,137],{"class":136},[57,34139,32116],{"class":140},[57,34141,34142],{"class":59,"line":197},[57,34143,2673],{"emptyLinePlaceholder":350},[57,34145,34146],{"class":59,"line":241},[57,34147,34148],{"class":63},"# 测试数据处理\n",[57,34150,34151,34153,34156],{"class":59,"line":249},[57,34152,32144],{"class":136},[57,34154,34155],{"class":70}," test_data_process",[57,34157,32150],{"class":140},[57,34159,34160,34163,34165,34167,34169,34171,34173],{"class":59,"line":262},[57,34161,34162],{"class":140},"    test_data",[57,34164,156],{"class":136},[57,34166,31652],{"class":140},[57,34168,31655],{"class":5489},[57,34170,156],{"class":136},[57,34172,31660],{"class":74},[57,34174,31663],{"class":140},[57,34176,34177,34180,34182,34185],{"class":59,"line":281},[57,34178,34179],{"class":5489},"                           train",[57,34181,156],{"class":136},[57,34183,34184],{"class":81},"False",[57,34186,31663],{"class":140},[57,34188,34189,34192,34194,34196,34198,34200,34202],{"class":59,"line":287},[57,34190,34191],{"class":5489},"                           transform",[57,34193,156],{"class":136},[57,34195,31690],{"class":140},[57,34197,31693],{"class":5489},[57,34199,156],{"class":136},[57,34201,1317],{"class":81},[57,34203,31701],{"class":140},[57,34205,34206,34209,34211,34213],{"class":59,"line":298},[57,34207,34208],{"class":5489},"                           download",[57,34210,156],{"class":136},[57,34212,31673],{"class":81},[57,34214,238],{"class":140},[57,34216,34217,34220,34222,34224,34226,34228],{"class":59,"line":311},[57,34218,34219],{"class":140},"    test_dataloader",[57,34221,156],{"class":136},[57,34223,31731],{"class":140},[57,34225,31734],{"class":5489},[57,34227,156],{"class":136},[57,34229,34230],{"class":140},"test_data,\n",[57,34232,34233],{"class":59,"line":322},[57,34234,34235],{"class":63},"                                    # 这里是一张一张进行测试\n",[57,34237,34238,34241,34243,34245],{"class":59,"line":1929},[57,34239,34240],{"class":5489},"                                    batch_size",[57,34242,156],{"class":136},[57,34244,635],{"class":81},[57,34246,31663],{"class":140},[57,34248,34249,34252,34254,34256],{"class":59,"line":1950},[57,34250,34251],{"class":5489},"                                    shuffle",[57,34253,156],{"class":136},[57,34255,31673],{"class":81},[57,34257,31663],{"class":140},[57,34259,34260,34263,34265,34267],{"class":59,"line":1955},[57,34261,34262],{"class":5489},"                                    num_workers",[57,34264,156],{"class":136},[57,34266,226],{"class":81},[57,34268,238],{"class":140},[57,34270,34271,34273],{"class":59,"line":1969},[57,34272,4363],{"class":136},[57,34274,34275],{"class":140}," test_dataloader\n",[57,34277,34278],{"class":59,"line":1974},[57,34279,2673],{"emptyLinePlaceholder":350},[57,34281,34282],{"class":59,"line":2001},[57,34283,34284],{"class":63},"# 定义模型测试函数\n",[57,34286,34287,34289,34292],{"class":59,"line":2006},[57,34288,32144],{"class":136},[57,34290,34291],{"class":70}," test_model_process",[57,34293,34294],{"class":140},"(model,test_dataloader):\n",[57,34296,34297],{"class":59,"line":2023},[57,34298,34299],{"class":63},"    # 将模型放到设备当中，先进行判断\n",[57,34301,34302,34304,34306,34308,34310,34312,34314],{"class":59,"line":2028},[57,34303,31434],{"class":140},[57,34305,156],{"class":136},[57,34307,31441],{"class":74},[57,34309,211],{"class":136},[57,34311,31446],{"class":140},[57,34313,232],{"class":136},[57,34315,34316],{"class":74}," \"cpu\"\n",[57,34318,34319,34321,34323],{"class":59,"line":2033},[57,34320,31486],{"class":140},[57,34322,156],{"class":136},[57,34324,32486],{"class":140},[57,34326,34327],{"class":59,"line":2038},[57,34328,2673],{"emptyLinePlaceholder":350},[57,34330,34331],{"class":59,"line":2052},[57,34332,34333],{"class":63},"    # 设置初始化参数\n",[57,34335,34336,34339,34341],{"class":59,"line":2057},[57,34337,34338],{"class":140},"    test_corrects",[57,34340,156],{"class":136},[57,34342,32539],{"class":81},[57,34344,34345,34348,34350],{"class":59,"line":2850},[57,34346,34347],{"class":140},"    test_num",[57,34349,156],{"class":136},[57,34351,3358],{"class":81},[57,34353,34354],{"class":59,"line":2864},[57,34355,2673],{"emptyLinePlaceholder":350},[57,34357,34358],{"class":59,"line":2872},[57,34359,34360],{"class":63},"    # 进行模型测试\n",[57,34362,34363],{"class":59,"line":2877},[57,34364,34365],{"class":63},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[57,34367,34368],{"class":59,"line":2883},[57,34369,34370],{"class":63},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[57,34372,34373,34376],{"class":59,"line":2889},[57,34374,34375],{"class":136},"    with",[57,34377,33081],{"class":140},[57,34379,34380],{"class":59,"line":2894},[57,34381,34382],{"class":63},"        # 从数据中进行\n",[57,34384,34385,34387,34390,34392],{"class":59,"line":8221},[57,34386,3676],{"class":136},[57,34388,34389],{"class":140}," test_data_x,test_data_y ",[57,34391,26312],{"class":136},[57,34393,34394],{"class":140}," test_dataloader:\n",[57,34396,34397,34400,34402],{"class":59,"line":8245},[57,34398,34399],{"class":140},"            test_data_x",[57,34401,156],{"class":136},[57,34403,34404],{"class":140},"test_data_x.to(device)\n",[57,34406,34407,34410,34412],{"class":59,"line":8250},[57,34408,34409],{"class":140},"            test_data_y",[57,34411,156],{"class":136},[57,34413,34414],{"class":140},"test_data_y.to(device)\n",[57,34416,34417],{"class":59,"line":8256},[57,34418,34419],{"class":63},"            # 设置为验证模式\n",[57,34421,34422],{"class":59,"line":8283},[57,34423,33072],{"class":140},[57,34425,34426],{"class":59,"line":8288},[57,34427,34428],{"class":63},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[57,34430,34431,34433,34435],{"class":59,"line":8294},[57,34432,32857],{"class":140},[57,34434,156],{"class":136},[57,34436,34437],{"class":140},"model(test_data_x)\n",[57,34439,34440],{"class":59,"line":8306},[57,34441,34442],{"class":63},"            # 查找每一行中最大值对应的下标\n",[57,34444,34445,34447,34449,34451,34453,34455,34457],{"class":59,"line":8318},[57,34446,32874],{"class":140},[57,34448,156],{"class":136},[57,34450,32879],{"class":140},[57,34452,32882],{"class":5489},[57,34454,156],{"class":136},[57,34456,635],{"class":81},[57,34458,238],{"class":140},[57,34460,34461],{"class":59,"line":8330},[57,34462,34463],{"class":63},"            # 计算正确率\n",[57,34465,34466],{"class":59,"line":9989},[57,34467,34468],{"class":63},"            # .data表示是一个不带梯度信息的tensor\n",[57,34470,34471],{"class":59,"line":10014},[57,34472,34473],{"class":63},"            # 如果预测正确，则准确度test_corrects加1\n",[57,34475,34476,34479,34481,34483,34485],{"class":59,"line":10037},[57,34477,34478],{"class":140},"            test_corrects",[57,34480,9750],{"class":136},[57,34482,32984],{"class":140},[57,34484,3222],{"class":136},[57,34486,34487],{"class":140},"test_data_y.data)\n",[57,34489,34490],{"class":59,"line":10061},[57,34491,34492],{"class":63},"            # 将所有的测试样本进行累计\n",[57,34494,34495,34498,34500,34503,34505],{"class":59,"line":10066},[57,34496,34497],{"class":140},"            test_num",[57,34499,9750],{"class":136},[57,34501,34502],{"class":140},"test_data_x.size(",[57,34504,226],{"class":81},[57,34506,238],{"class":140},[57,34508,34509],{"class":59,"line":10071},[57,34510,2673],{"emptyLinePlaceholder":350},[57,34512,34513],{"class":59,"line":10076},[57,34514,34515],{"class":63},"        # 计算准确度\n",[57,34517,34518,34521,34523,34526,34528],{"class":59,"line":10085},[57,34519,34520],{"class":140},"        test_acc",[57,34522,156],{"class":136},[57,34524,34525],{"class":140},"test_corrects.double().item()",[57,34527,1000],{"class":136},[57,34529,34530],{"class":140},"test_num\n",[57,34532,34533],{"class":59,"line":10090},[57,34534,34535],{"class":63},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[57,34537,34538,34540,34542,34545],{"class":59,"line":10096},[57,34539,32648],{"class":81},[57,34541,168],{"class":140},[57,34543,34544],{"class":74},"\"测试的准确率：\"",[57,34546,34547],{"class":140},",test_acc)\n",[57,34549,34550],{"class":59,"line":10117},[57,34551,2673],{"emptyLinePlaceholder":350},[57,34553,34554],{"class":59,"line":10123},[57,34555,34556],{"class":63},"# 实现模型的测试功能\n",[57,34558,34559,34561,34563,34565,34567],{"class":59,"line":10137},[57,34560,1813],{"class":136},[57,34562,31417],{"class":81},[57,34564,3222],{"class":136},[57,34566,31422],{"class":74},[57,34568,4012],{"class":140},[57,34570,34571],{"class":59,"line":10143},[57,34572,34573],{"class":63},"    # 加载模型\n",[57,34575,34576,34578,34580],{"class":59,"line":10170},[57,34577,31486],{"class":140},[57,34579,156],{"class":136},[57,34581,34022],{"class":140},[57,34583,34584],{"class":59,"line":10179},[57,34585,34586],{"class":63},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[57,34588,34589],{"class":59,"line":10185},[57,34590,34591],{"class":63},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[57,34593,34594,34597,34600],{"class":59,"line":10193},[57,34595,34596],{"class":140},"    model.load_state_dict(torch.load(",[57,34598,34599],{"class":74},"'best_model.pth'",[57,34601,259],{"class":140},[57,34603,34604],{"class":59,"line":10198},[57,34605,34606],{"class":63},"    # 数据加载\n",[57,34608,34609,34611,34613],{"class":59,"line":16876},[57,34610,34219],{"class":140},[57,34612,156],{"class":136},[57,34614,34615],{"class":140},"test_data_process()\n",[57,34617,34618],{"class":59,"line":16882},[57,34619,34620],{"class":63},"    # 加载模型测试的函数\n",[57,34622,34623],{"class":59,"line":16905},[57,34624,34625],{"class":140},"    test_model_process(model,test_dataloader)\n",[57,34627,34628],{"class":59,"line":16911},[57,34629,2673],{"emptyLinePlaceholder":350},[57,34631,34632],{"class":59,"line":16934},[57,34633,34634],{"class":63},"    # 验证集推理实现：\n",[57,34636,34637],{"class":59,"line":16948},[57,34638,34639],{"class":63},"    # 加载数据加载的更详细一些\n",[57,34641,34642,34644,34646,34648,34650,34652,34654],{"class":59,"line":16968},[57,34643,31434],{"class":140},[57,34645,156],{"class":136},[57,34647,31441],{"class":74},[57,34649,211],{"class":136},[57,34651,31446],{"class":140},[57,34653,232],{"class":136},[57,34655,34316],{"class":74},[57,34657,34658,34660,34662],{"class":59,"line":16974},[57,34659,31486],{"class":140},[57,34661,156],{"class":136},[57,34663,32486],{"class":140},[57,34665,34666],{"class":59,"line":16985},[57,34667,34668],{"class":63},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[57,34670,34671],{"class":59,"line":17008},[57,34672,34673],{"class":63},"    # 顺序不可改变\n",[57,34675,34676,34679,34681,34683,34686,34688,34691,34693,34696,34698,34701,34703,34706,34708,34711,34713,34716,34718,34721,34723,34726,34728,34731],{"class":59,"line":17030},[57,34677,34678],{"class":140},"    classes",[57,34680,156],{"class":136},[57,34682,1306],{"class":140},[57,34684,34685],{"class":74},"'T-shirt\u002Ftop'",[57,34687,273],{"class":140},[57,34689,34690],{"class":74},"'Trouser'",[57,34692,273],{"class":140},[57,34694,34695],{"class":74},"'Pullover'",[57,34697,273],{"class":140},[57,34699,34700],{"class":74},"'Dress'",[57,34702,273],{"class":140},[57,34704,34705],{"class":74},"'Coat'",[57,34707,273],{"class":140},[57,34709,34710],{"class":74},"'Sandal'",[57,34712,273],{"class":140},[57,34714,34715],{"class":74},"'Shirt'",[57,34717,273],{"class":140},[57,34719,34720],{"class":74},"'Sneaker'",[57,34722,273],{"class":140},[57,34724,34725],{"class":74},"'Bag'",[57,34727,273],{"class":140},[57,34729,34730],{"class":74},"'Ankle boot'",[57,34732,33443],{"class":140},[57,34734,34735,34737],{"class":59,"line":17035},[57,34736,34375],{"class":136},[57,34738,33081],{"class":140},[57,34740,34741],{"class":59,"line":17041},[57,34742,34743],{"class":63},"        # 将数据和标签都放到设备当中\n",[57,34745,34746,34748,34751,34753],{"class":59,"line":17055},[57,34747,3676],{"class":136},[57,34749,34750],{"class":140}," b_x,b_y ",[57,34752,26312],{"class":136},[57,34754,34394],{"class":140},[57,34756,34757,34759,34761],{"class":59,"line":17068},[57,34758,32807],{"class":140},[57,34760,156],{"class":136},[57,34762,32812],{"class":140},[57,34764,34765,34767,34769],{"class":59,"line":17073},[57,34766,32822],{"class":140},[57,34768,156],{"class":136},[57,34770,32827],{"class":140},[57,34772,34773],{"class":59,"line":17087},[57,34774,2673],{"emptyLinePlaceholder":350},[57,34776,34777],{"class":59,"line":17092},[57,34778,34779],{"class":63},"            # 设置模型为验证模式\n",[57,34781,34782],{"class":59,"line":17098},[57,34783,33072],{"class":140},[57,34785,34786],{"class":59,"line":17103},[57,34787,34788],{"class":63},"            # 模型推理结果\n",[57,34790,34791,34793,34795],{"class":59,"line":17117},[57,34792,32857],{"class":140},[57,34794,156],{"class":136},[57,34796,32862],{"class":140},[57,34798,34799],{"class":59,"line":17122},[57,34800,34801],{"class":63},"            # 获取最大下标，最大下标就是类别号\n",[57,34803,34804,34806,34808,34810,34812,34814,34816],{"class":59,"line":17127},[57,34805,32874],{"class":140},[57,34807,156],{"class":136},[57,34809,32879],{"class":140},[57,34811,32882],{"class":5489},[57,34813,156],{"class":136},[57,34815,635],{"class":81},[57,34817,238],{"class":140},[57,34819,34820],{"class":59,"line":17141},[57,34821,34822],{"class":63},"            # 取出张量中的数值\n",[57,34824,34825,34828,34830],{"class":59,"line":17153},[57,34826,34827],{"class":140},"            result",[57,34829,156],{"class":136},[57,34831,34832],{"class":140},"pre_lab.item()\n",[57,34834,34835,34838,34840],{"class":59,"line":17158},[57,34836,34837],{"class":140},"            label",[57,34839,156],{"class":136},[57,34841,34842],{"class":140},"b_y.item()\n",[57,34844,34845,34848,34850,34853,34856,34859,34861,34864],{"class":59,"line":17171},[57,34846,34847],{"class":81},"            print",[57,34849,168],{"class":140},[57,34851,34852],{"class":74},"\"预测值：\"",[57,34854,34855],{"class":140},",classes[result],",[57,34857,34858],{"class":74},"\"------\"",[57,34860,273],{"class":140},[57,34862,34863],{"class":74},"\"真实值：\"",[57,34865,34866],{"class":140},",classes[label])\n",[14,34868,34869],{},"（2）AlexNet",[377,34871,34872],{},[380,34873,34874],{},"神经网络构建",[49,34876,34878],{"className":122,"code":34877,"language":124,"meta":46,"style":46},"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",[28,34879,34880,34886,34896,34906,34918,34922,34939,34947,34962,34974,35016,35043,35086,35112,35156,35199,35242,35269,35273,35283,35288,35316,35335,35354,35358,35363,35371,35386,35396,35410,35420,35435,35450,35465,35476,35480,35485,35495,35510,35515,35529,35544,35556,35561,35572,35577,35583,35588,35600,35620,35625,35634],{"__ignoreMap":46},[57,34881,34882,34884],{"class":59,"line":60},[57,34883,137],{"class":136},[57,34885,141],{"class":140},[57,34887,34888,34890,34892,34894],{"class":59,"line":67},[57,34889,30934],{"class":136},[57,34891,30937],{"class":140},[57,34893,137],{"class":136},[57,34895,30942],{"class":140},[57,34897,34898,34900,34902,34904],{"class":59,"line":144},[57,34899,30934],{"class":136},[57,34901,30954],{"class":140},[57,34903,137],{"class":136},[57,34905,30959],{"class":140},[57,34907,34908,34910,34913,34915],{"class":59,"line":150},[57,34909,137],{"class":136},[57,34911,34912],{"class":140}," torch.nn.functional ",[57,34914,31580],{"class":136},[57,34916,34917],{"class":140}," F\n",[57,34919,34920],{"class":59,"line":162},[57,34921,2673],{"emptyLinePlaceholder":350},[57,34923,34924,34926,34929,34931,34933,34935,34937],{"class":59,"line":180},[57,34925,14966],{"class":136},[57,34927,34928],{"class":70}," AlexNet",[57,34930,168],{"class":140},[57,34932,30975],{"class":70},[57,34934,974],{"class":140},[57,34936,30980],{"class":70},[57,34938,30983],{"class":140},[57,34940,34941,34943,34945],{"class":59,"line":186},[57,34942,30998],{"class":136},[57,34944,31001],{"class":81},[57,34946,31004],{"class":140},[57,34948,34949,34951,34954,34956,34958,34960],{"class":59,"line":197},[57,34950,31014],{"class":81},[57,34952,34953],{"class":140},"(AlexNet,",[57,34955,31020],{"class":81},[57,34957,31023],{"class":140},[57,34959,31026],{"class":81},[57,34961,2249],{"class":140},[57,34963,34964,34966,34969,34971],{"class":59,"line":241},[57,34965,31042],{"class":81},[57,34967,34968],{"class":140},".ReLu",[57,34970,156],{"class":136},[57,34972,34973],{"class":140},"nn.ReLU()\n",[57,34975,34976,34978,34980,34982,34984,34986,34988,34990,34992,34994,34996,34998,35000,35002,35004,35006,35008,35010,35012,35014],{"class":59,"line":249},[57,34977,31042],{"class":81},[57,34979,31045],{"class":140},[57,34981,156],{"class":136},[57,34983,31050],{"class":140},[57,34985,31053],{"class":5489},[57,34987,156],{"class":136},[57,34989,635],{"class":81},[57,34991,273],{"class":140},[57,34993,31062],{"class":5489},[57,34995,156],{"class":136},[57,34997,627],{"class":81},[57,34999,273],{"class":140},[57,35001,31071],{"class":5489},[57,35003,156],{"class":136},[57,35005,888],{"class":81},[57,35007,273],{"class":140},[57,35009,31126],{"class":5489},[57,35011,156],{"class":136},[57,35013,710],{"class":81},[57,35015,238],{"class":140},[57,35017,35018,35020,35022,35024,35027,35029,35031,35033,35035,35037,35039,35041],{"class":59,"line":262},[57,35019,31042],{"class":81},[57,35021,31110],{"class":140},[57,35023,156],{"class":136},[57,35025,35026],{"class":140},"nn.MaxPool2d(",[57,35028,31071],{"class":5489},[57,35030,156],{"class":136},[57,35032,270],{"class":81},[57,35034,273],{"class":140},[57,35036,31126],{"class":5489},[57,35038,156],{"class":136},[57,35040,498],{"class":81},[57,35042,238],{"class":140},[57,35044,35045,35047,35049,35051,35053,35055,35057,35059,35061,35063,35065,35068,35070,35072,35074,35076,35078,35080,35082,35084],{"class":59,"line":281},[57,35046,31042],{"class":81},[57,35048,31139],{"class":140},[57,35050,156],{"class":136},[57,35052,31050],{"class":140},[57,35054,31053],{"class":5489},[57,35056,156],{"class":136},[57,35058,627],{"class":81},[57,35060,273],{"class":140},[57,35062,31062],{"class":5489},[57,35064,156],{"class":136},[57,35066,35067],{"class":81},"256",[57,35069,273],{"class":140},[57,35071,31071],{"class":5489},[57,35073,156],{"class":136},[57,35075,736],{"class":81},[57,35077,273],{"class":140},[57,35079,31080],{"class":5489},[57,35081,156],{"class":136},[57,35083,498],{"class":81},[57,35085,238],{"class":140},[57,35087,35088,35090,35092,35094,35096,35098,35100,35102,35104,35106,35108,35110],{"class":59,"line":287},[57,35089,31042],{"class":81},[57,35091,31174],{"class":140},[57,35093,156],{"class":136},[57,35095,35026],{"class":140},[57,35097,31071],{"class":5489},[57,35099,156],{"class":136},[57,35101,270],{"class":81},[57,35103,273],{"class":140},[57,35105,31126],{"class":5489},[57,35107,156],{"class":136},[57,35109,498],{"class":81},[57,35111,238],{"class":140},[57,35113,35114,35116,35119,35121,35123,35125,35127,35129,35131,35133,35135,35138,35140,35142,35144,35146,35148,35150,35152,35154],{"class":59,"line":298},[57,35115,31042],{"class":81},[57,35117,35118],{"class":140},".c5",[57,35120,156],{"class":136},[57,35122,31050],{"class":140},[57,35124,31053],{"class":5489},[57,35126,156],{"class":136},[57,35128,35067],{"class":81},[57,35130,273],{"class":140},[57,35132,31062],{"class":5489},[57,35134,156],{"class":136},[57,35136,35137],{"class":81},"384",[57,35139,273],{"class":140},[57,35141,31071],{"class":5489},[57,35143,156],{"class":136},[57,35145,270],{"class":81},[57,35147,273],{"class":140},[57,35149,31080],{"class":5489},[57,35151,156],{"class":136},[57,35153,635],{"class":81},[57,35155,238],{"class":140},[57,35157,35158,35160,35163,35165,35167,35169,35171,35173,35175,35177,35179,35181,35183,35185,35187,35189,35191,35193,35195,35197],{"class":59,"line":311},[57,35159,31042],{"class":81},[57,35161,35162],{"class":140},".c6",[57,35164,156],{"class":136},[57,35166,31050],{"class":140},[57,35168,31053],{"class":5489},[57,35170,156],{"class":136},[57,35172,35137],{"class":81},[57,35174,273],{"class":140},[57,35176,31062],{"class":5489},[57,35178,156],{"class":136},[57,35180,35137],{"class":81},[57,35182,273],{"class":140},[57,35184,31071],{"class":5489},[57,35186,156],{"class":136},[57,35188,270],{"class":81},[57,35190,273],{"class":140},[57,35192,31080],{"class":5489},[57,35194,156],{"class":136},[57,35196,635],{"class":81},[57,35198,238],{"class":140},[57,35200,35201,35203,35206,35208,35210,35212,35214,35216,35218,35220,35222,35224,35226,35228,35230,35232,35234,35236,35238,35240],{"class":59,"line":322},[57,35202,31042],{"class":81},[57,35204,35205],{"class":140},".c7",[57,35207,156],{"class":136},[57,35209,31050],{"class":140},[57,35211,31053],{"class":5489},[57,35213,156],{"class":136},[57,35215,35137],{"class":81},[57,35217,273],{"class":140},[57,35219,31062],{"class":5489},[57,35221,156],{"class":136},[57,35223,35067],{"class":81},[57,35225,273],{"class":140},[57,35227,31071],{"class":5489},[57,35229,156],{"class":136},[57,35231,270],{"class":81},[57,35233,273],{"class":140},[57,35235,31080],{"class":5489},[57,35237,156],{"class":136},[57,35239,635],{"class":81},[57,35241,238],{"class":140},[57,35243,35244,35246,35249,35251,35253,35255,35257,35259,35261,35263,35265,35267],{"class":59,"line":1929},[57,35245,31042],{"class":81},[57,35247,35248],{"class":140},".s8",[57,35250,156],{"class":136},[57,35252,35026],{"class":140},[57,35254,31071],{"class":5489},[57,35256,156],{"class":136},[57,35258,270],{"class":81},[57,35260,273],{"class":140},[57,35262,31126],{"class":5489},[57,35264,156],{"class":136},[57,35266,498],{"class":81},[57,35268,238],{"class":140},[57,35270,35271],{"class":59,"line":1950},[57,35272,31199],{"class":63},[57,35274,35275,35277,35279,35281],{"class":59,"line":1955},[57,35276,31042],{"class":81},[57,35278,31206],{"class":140},[57,35280,156],{"class":136},[57,35282,31211],{"class":140},[57,35284,35285],{"class":59,"line":1969},[57,35286,35287],{"class":63},"       # 定义全连接层\n",[57,35289,35290,35292,35295,35297,35299,35301,35303,35305,35307,35309,35311,35314],{"class":59,"line":1974},[57,35291,31042],{"class":81},[57,35293,35294],{"class":140},".f1",[57,35296,156],{"class":136},[57,35298,31228],{"class":140},[57,35300,761],{"class":81},[57,35302,871],{"class":136},[57,35304,761],{"class":81},[57,35306,871],{"class":136},[57,35308,35067],{"class":81},[57,35310,273],{"class":140},[57,35312,35313],{"class":81},"4096",[57,35315,238],{"class":140},[57,35317,35318,35320,35323,35325,35327,35329,35331,35333],{"class":59,"line":2001},[57,35319,31042],{"class":81},[57,35321,35322],{"class":140},".f2",[57,35324,156],{"class":136},[57,35326,31228],{"class":140},[57,35328,35313],{"class":81},[57,35330,273],{"class":140},[57,35332,35313],{"class":81},[57,35334,238],{"class":140},[57,35336,35337,35339,35342,35344,35346,35348,35350,35352],{"class":59,"line":2006},[57,35338,31042],{"class":81},[57,35340,35341],{"class":140},".f3",[57,35343,156],{"class":136},[57,35345,31228],{"class":140},[57,35347,35313],{"class":81},[57,35349,273],{"class":140},[57,35351,862],{"class":81},[57,35353,238],{"class":140},[57,35355,35356],{"class":59,"line":2023},[57,35357,2673],{"emptyLinePlaceholder":350},[57,35359,35360],{"class":59,"line":2028},[57,35361,35362],{"class":63},"    # 定义前向传播\n",[57,35364,35365,35367,35369],{"class":59,"line":2033},[57,35366,30998],{"class":136},[57,35368,31290],{"class":70},[57,35370,31293],{"class":140},[57,35372,35373,35375,35377,35379,35382,35384],{"class":59,"line":2038},[57,35374,31298],{"class":140},[57,35376,156],{"class":136},[57,35378,31020],{"class":81},[57,35380,35381],{"class":140},".ReLu(",[57,35383,31020],{"class":81},[57,35385,31310],{"class":140},[57,35387,35388,35390,35392,35394],{"class":59,"line":2052},[57,35389,31298],{"class":140},[57,35391,156],{"class":136},[57,35393,31020],{"class":81},[57,35395,31321],{"class":140},[57,35397,35398,35400,35402,35404,35406,35408],{"class":59,"line":2057},[57,35399,31298],{"class":140},[57,35401,156],{"class":136},[57,35403,31020],{"class":81},[57,35405,35381],{"class":140},[57,35407,31020],{"class":81},[57,35409,31336],{"class":140},[57,35411,35412,35414,35416,35418],{"class":59,"line":2850},[57,35413,31298],{"class":140},[57,35415,156],{"class":136},[57,35417,31020],{"class":81},[57,35419,31347],{"class":140},[57,35421,35422,35424,35426,35428,35430,35432],{"class":59,"line":2864},[57,35423,31298],{"class":140},[57,35425,156],{"class":136},[57,35427,31020],{"class":81},[57,35429,35381],{"class":140},[57,35431,31020],{"class":81},[57,35433,35434],{"class":140},".c5(x))\n",[57,35436,35437,35439,35441,35443,35445,35447],{"class":59,"line":2872},[57,35438,31298],{"class":140},[57,35440,156],{"class":136},[57,35442,31020],{"class":81},[57,35444,35381],{"class":140},[57,35446,31020],{"class":81},[57,35448,35449],{"class":140},".c6(x))\n",[57,35451,35452,35454,35456,35458,35460,35462],{"class":59,"line":2877},[57,35453,31298],{"class":140},[57,35455,156],{"class":136},[57,35457,31020],{"class":81},[57,35459,35381],{"class":140},[57,35461,31020],{"class":81},[57,35463,35464],{"class":140},".c7(x))\n",[57,35466,35467,35469,35471,35473],{"class":59,"line":2883},[57,35468,31298],{"class":140},[57,35470,156],{"class":136},[57,35472,31020],{"class":81},[57,35474,35475],{"class":140},".s8(x)\n",[57,35477,35478],{"class":59,"line":2889},[57,35479,2673],{"emptyLinePlaceholder":350},[57,35481,35482],{"class":59,"line":2894},[57,35483,35484],{"class":63},"        # 展平加线性全连接层\n",[57,35486,35487,35489,35491,35493],{"class":59,"line":8221},[57,35488,31298],{"class":140},[57,35490,156],{"class":136},[57,35492,31020],{"class":81},[57,35494,31358],{"class":140},[57,35496,35497,35499,35501,35503,35505,35507],{"class":59,"line":8245},[57,35498,31298],{"class":140},[57,35500,156],{"class":136},[57,35502,31020],{"class":81},[57,35504,35381],{"class":140},[57,35506,31020],{"class":81},[57,35508,35509],{"class":140},".f1(x))\n",[57,35511,35512],{"class":59,"line":8250},[57,35513,35514],{"class":63},"        # 还需要dropout对神经元随机进行失活\n",[57,35516,35517,35519,35521,35524,35527],{"class":59,"line":8256},[57,35518,31298],{"class":140},[57,35520,156],{"class":136},[57,35522,35523],{"class":140},"F.dropout(x,",[57,35525,35526],{"class":81},"0.5",[57,35528,238],{"class":140},[57,35530,35531,35533,35535,35537,35539,35541],{"class":59,"line":8283},[57,35532,31298],{"class":140},[57,35534,156],{"class":136},[57,35536,31020],{"class":81},[57,35538,35381],{"class":140},[57,35540,31020],{"class":81},[57,35542,35543],{"class":140},".f2(x))\n",[57,35545,35546,35548,35550,35552,35554],{"class":59,"line":8288},[57,35547,31298],{"class":140},[57,35549,156],{"class":136},[57,35551,35523],{"class":140},[57,35553,35526],{"class":81},[57,35555,238],{"class":140},[57,35557,35558],{"class":59,"line":8294},[57,35559,35560],{"class":63},"        # 直接输出\n",[57,35562,35563,35565,35567,35569],{"class":59,"line":8306},[57,35564,31298],{"class":140},[57,35566,156],{"class":136},[57,35568,31020],{"class":81},[57,35570,35571],{"class":140},".f3(x)\n",[57,35573,35574],{"class":59,"line":8318},[57,35575,35576],{"class":63},"        # 前向传播输出\n",[57,35578,35579,35581],{"class":59,"line":8330},[57,35580,15024],{"class":136},[57,35582,31406],{"class":140},[57,35584,35585],{"class":59,"line":9989},[57,35586,35587],{"class":63},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[57,35589,35590,35592,35594,35596,35598],{"class":59,"line":10014},[57,35591,1813],{"class":136},[57,35593,31417],{"class":81},[57,35595,3222],{"class":136},[57,35597,31422],{"class":74},[57,35599,4012],{"class":140},[57,35601,35602,35604,35606,35608,35610,35612,35614,35616,35618],{"class":59,"line":10037},[57,35603,31434],{"class":140},[57,35605,156],{"class":136},[57,35607,205],{"class":140},[57,35609,31441],{"class":74},[57,35611,211],{"class":136},[57,35613,31446],{"class":140},[57,35615,232],{"class":136},[57,35617,235],{"class":74},[57,35619,238],{"class":140},[57,35621,35622],{"class":59,"line":10061},[57,35623,35624],{"class":63},"    # 模型实例化，然后将实例化的模型放到设备中\n",[57,35626,35627,35629,35631],{"class":59,"line":10066},[57,35628,31486],{"class":140},[57,35630,156],{"class":136},[57,35632,35633],{"class":140},"AlexNet().to(device)\n",[57,35635,35636,35638,35640,35642,35644,35647,35649,35651],{"class":59,"line":10071},[57,35637,31496],{"class":81},[57,35639,31499],{"class":140},[57,35641,635],{"class":81},[57,35643,273],{"class":140},[57,35645,35646],{"class":81},"227",[57,35648,273],{"class":140},[57,35650,35646],{"class":81},[57,35652,31512],{"class":140},[377,35654,35655],{"start":67},[380,35656,31525],{},[49,35658,35660],{"className":122,"code":35659,"language":124,"meta":46,"style":46},"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",[28,35661,35662,35668,35674,35684,35690,35700,35710,35720,35730,35740,35744,35755,35765,35769,35773,35777,35785,35797,35807,35823,35833,35865,35879,35889,35899,35903,35913,35927,35937,35947,35957,35963,35967,35971,35975,35979,35983,35991,36011,36015,36019,36023,36027,36031,36047,36051,36055,36063,36067,36071,36079,36083,36087,36091,36099,36103,36107,36111,36115,36123,36127,36135,36139,36147,36151,36159,36163,36171,36175,36179,36187,36191,36195,36199,36211,36235,36249,36253,36257,36261,36269,36273,36281,36285,36293,36297,36305,36309,36317,36321,36329,36333,36345,36349,36357,36361,36369,36373,36377,36381,36385,36393,36397,36413,36417,36425,36429,36433,36437,36441,36445,36449,36453,36469,36473,36485,36489,36501,36505,36517,36521,36529,36533,36541,36545,36549,36554,36560,36564,36573,36577,36594,36598,36607,36611,36629,36642,36647,36660,36664,36668,36676,36680,36684,36692,36696,36704,36708,36716,36720,36724,36766,36808,36812,36816,36832,36836,36852,36856,36860,36868,36872,36876,36888,36926,36931,36936,36945,36949,36963,36973,36979,36985,36991,36997,37001,37005,37011,37015,37019,37027,37031,37049,37053,37057,37061,37077,37081,37085,37089,37093,37097,37117,37137,37141,37145,37149,37157,37165,37169,37185,37205,37225,37229,37233,37241,37249,37253,37257,37261,37273,37277,37287,37295,37312],{"__ignoreMap":46},[57,35663,35664,35666],{"class":59,"line":60},[57,35665,137],{"class":136},[57,35667,32019],{"class":140},[57,35669,35670,35672],{"class":59,"line":67},[57,35671,137],{"class":136},[57,35673,32026],{"class":140},[57,35675,35676,35678,35680,35682],{"class":59,"line":144},[57,35677,137],{"class":136},[57,35679,32037],{"class":140},[57,35681,31580],{"class":136},[57,35683,32042],{"class":140},[57,35685,35686,35688],{"class":59,"line":150},[57,35687,137],{"class":136},[57,35689,141],{"class":140},[57,35691,35692,35694,35696,35698],{"class":59,"line":162},[57,35693,30934],{"class":136},[57,35695,31612],{"class":140},[57,35697,137],{"class":136},[57,35699,32059],{"class":140},[57,35701,35702,35704,35706,35708],{"class":59,"line":180},[57,35703,30934],{"class":136},[57,35705,31565],{"class":140},[57,35707,137],{"class":136},[57,35709,31570],{"class":140},[57,35711,35712,35714,35716,35718],{"class":59,"line":186},[57,35713,30934],{"class":136},[57,35715,31595],{"class":140},[57,35717,137],{"class":136},[57,35719,31600],{"class":140},[57,35721,35722,35724,35726,35728],{"class":59,"line":197},[57,35723,137],{"class":136},[57,35725,31612],{"class":140},[57,35727,31580],{"class":136},[57,35729,31617],{"class":140},[57,35731,35732,35734,35736,35738],{"class":59,"line":241},[57,35733,137],{"class":136},[57,35735,31629],{"class":140},[57,35737,31580],{"class":136},[57,35739,31634],{"class":140},[57,35741,35742],{"class":59,"line":249},[57,35743,32104],{"class":63},[57,35745,35746,35748,35750,35752],{"class":59,"line":262},[57,35747,30934],{"class":136},[57,35749,32111],{"class":140},[57,35751,137],{"class":136},[57,35753,35754],{"class":140}," AlexNet\n",[57,35756,35757,35759,35761,35763],{"class":59,"line":281},[57,35758,30934],{"class":136},[57,35760,30937],{"class":140},[57,35762,137],{"class":136},[57,35764,30942],{"class":140},[57,35766,35767],{"class":59,"line":287},[57,35768,2673],{"emptyLinePlaceholder":350},[57,35770,35771],{"class":59,"line":298},[57,35772,2673],{"emptyLinePlaceholder":350},[57,35774,35775],{"class":59,"line":311},[57,35776,32139],{"class":63},[57,35778,35779,35781,35783],{"class":59,"line":322},[57,35780,32144],{"class":136},[57,35782,32147],{"class":70},[57,35784,32150],{"class":140},[57,35786,35787,35789,35791,35793,35795],{"class":59,"line":1929},[57,35788,32155],{"class":140},[57,35790,156],{"class":136},[57,35792,31652],{"class":140},[57,35794,31660],{"class":74},[57,35796,31663],{"class":140},[57,35798,35799,35801,35803,35805],{"class":59,"line":1950},[57,35800,32168],{"class":5489},[57,35802,156],{"class":136},[57,35804,31673],{"class":81},[57,35806,31663],{"class":140},[57,35808,35809,35811,35813,35815,35817,35819,35821],{"class":59,"line":1955},[57,35810,32179],{"class":5489},[57,35812,156],{"class":136},[57,35814,31690],{"class":140},[57,35816,31693],{"class":5489},[57,35818,156],{"class":136},[57,35820,35646],{"class":81},[57,35822,31701],{"class":140},[57,35824,35825,35827,35829,35831],{"class":59,"line":1969},[57,35826,32196],{"class":5489},[57,35828,156],{"class":136},[57,35830,31673],{"class":81},[57,35832,238],{"class":140},[57,35834,35835,35837,35839,35841,35843,35845,35847,35849,35851,35853,35855,35857,35859,35861,35863],{"class":59,"line":1974},[57,35836,32207],{"class":140},[57,35838,156],{"class":136},[57,35840,32212],{"class":140},[57,35842,32215],{"class":81},[57,35844,168],{"class":140},[57,35846,32220],{"class":81},[57,35848,871],{"class":136},[57,35850,7631],{"class":81},[57,35852,32227],{"class":140},[57,35854,32215],{"class":81},[57,35856,168],{"class":140},[57,35858,32234],{"class":81},[57,35860,871],{"class":136},[57,35862,7631],{"class":81},[57,35864,32241],{"class":140},[57,35866,35867,35869,35871,35873,35875,35877],{"class":59,"line":2001},[57,35868,32246],{"class":140},[57,35870,156],{"class":136},[57,35872,32251],{"class":140},[57,35874,31734],{"class":5489},[57,35876,156],{"class":136},[57,35878,31739],{"class":140},[57,35880,35881,35883,35885,35887],{"class":59,"line":2006},[57,35882,32262],{"class":5489},[57,35884,156],{"class":136},[57,35886,32267],{"class":81},[57,35888,31663],{"class":140},[57,35890,35891,35893,35895,35897],{"class":59,"line":2023},[57,35892,32274],{"class":5489},[57,35894,156],{"class":136},[57,35896,31673],{"class":81},[57,35898,31663],{"class":140},[57,35900,35901],{"class":59,"line":2028},[57,35902,32285],{"class":63},[57,35904,35905,35907,35909,35911],{"class":59,"line":2033},[57,35906,32290],{"class":5489},[57,35908,156],{"class":136},[57,35910,811],{"class":81},[57,35912,238],{"class":140},[57,35914,35915,35917,35919,35921,35923,35925],{"class":59,"line":2038},[57,35916,32301],{"class":140},[57,35918,156],{"class":136},[57,35920,31731],{"class":140},[57,35922,31734],{"class":5489},[57,35924,156],{"class":136},[57,35926,32312],{"class":140},[57,35928,35929,35931,35933,35935],{"class":59,"line":2052},[57,35930,32317],{"class":5489},[57,35932,156],{"class":136},[57,35934,32267],{"class":81},[57,35936,31663],{"class":140},[57,35938,35939,35941,35943,35945],{"class":59,"line":2057},[57,35940,32328],{"class":5489},[57,35942,156],{"class":136},[57,35944,31673],{"class":81},[57,35946,31663],{"class":140},[57,35948,35949,35951,35953,35955],{"class":59,"line":2850},[57,35950,32339],{"class":5489},[57,35952,156],{"class":136},[57,35954,811],{"class":81},[57,35956,238],{"class":140},[57,35958,35959,35961],{"class":59,"line":2864},[57,35960,4363],{"class":136},[57,35962,32352],{"class":140},[57,35964,35965],{"class":59,"line":2872},[57,35966,2673],{"emptyLinePlaceholder":350},[57,35968,35969],{"class":59,"line":2877},[57,35970,32361],{"class":63},[57,35972,35973],{"class":59,"line":2883},[57,35974,32366],{"class":63},[57,35976,35977],{"class":59,"line":2889},[57,35978,2673],{"emptyLinePlaceholder":350},[57,35980,35981],{"class":59,"line":2894},[57,35982,32375],{"class":63},[57,35984,35985,35987,35989],{"class":59,"line":8221},[57,35986,32144],{"class":136},[57,35988,32382],{"class":70},[57,35990,32385],{"class":140},[57,35992,35993,35995,35997,35999,36001,36003,36005,36007,36009],{"class":59,"line":8245},[57,35994,31434],{"class":140},[57,35996,156],{"class":136},[57,35998,205],{"class":140},[57,36000,31441],{"class":74},[57,36002,211],{"class":136},[57,36004,31446],{"class":140},[57,36006,232],{"class":136},[57,36008,32404],{"class":74},[57,36010,238],{"class":140},[57,36012,36013],{"class":59,"line":8250},[57,36014,2673],{"emptyLinePlaceholder":350},[57,36016,36017],{"class":59,"line":8256},[57,36018,2673],{"emptyLinePlaceholder":350},[57,36020,36021],{"class":59,"line":8283},[57,36022,32419],{"class":63},[57,36024,36025],{"class":59,"line":8288},[57,36026,32424],{"class":63},[57,36028,36029],{"class":59,"line":8294},[57,36030,32429],{"class":63},[57,36032,36033,36035,36037,36039,36041,36043,36045],{"class":59,"line":8306},[57,36034,32434],{"class":140},[57,36036,156],{"class":136},[57,36038,32439],{"class":140},[57,36040,32442],{"class":5489},[57,36042,156],{"class":136},[57,36044,32447],{"class":81},[57,36046,238],{"class":140},[57,36048,36049],{"class":59,"line":8318},[57,36050,2673],{"emptyLinePlaceholder":350},[57,36052,36053],{"class":59,"line":8330},[57,36054,32458],{"class":63},[57,36056,36057,36059,36061],{"class":59,"line":9989},[57,36058,32463],{"class":140},[57,36060,156],{"class":136},[57,36062,32468],{"class":140},[57,36064,36065],{"class":59,"line":10014},[57,36066,2673],{"emptyLinePlaceholder":350},[57,36068,36069],{"class":59,"line":10037},[57,36070,32477],{"class":63},[57,36072,36073,36075,36077],{"class":59,"line":10061},[57,36074,31486],{"class":140},[57,36076,156],{"class":136},[57,36078,32486],{"class":140},[57,36080,36081],{"class":59,"line":10066},[57,36082,32491],{"class":63},[57,36084,36085],{"class":59,"line":10071},[57,36086,32496],{"class":63},[57,36088,36089],{"class":59,"line":10076},[57,36090,32501],{"class":63},[57,36092,36093,36095,36097],{"class":59,"line":10085},[57,36094,32506],{"class":140},[57,36096,156],{"class":136},[57,36098,32511],{"class":140},[57,36100,36101],{"class":59,"line":10090},[57,36102,2673],{"emptyLinePlaceholder":350},[57,36104,36105],{"class":59,"line":10096},[57,36106,2673],{"emptyLinePlaceholder":350},[57,36108,36109],{"class":59,"line":10117},[57,36110,32524],{"class":63},[57,36112,36113],{"class":59,"line":10123},[57,36114,32529],{"class":63},[57,36116,36117,36119,36121],{"class":59,"line":10137},[57,36118,32534],{"class":140},[57,36120,156],{"class":136},[57,36122,32539],{"class":81},[57,36124,36125],{"class":59,"line":10143},[57,36126,32544],{"class":63},[57,36128,36129,36131,36133],{"class":59,"line":10170},[57,36130,32549],{"class":140},[57,36132,156],{"class":136},[57,36134,32554],{"class":140},[57,36136,36137],{"class":59,"line":10179},[57,36138,32559],{"class":63},[57,36140,36141,36143,36145],{"class":59,"line":10185},[57,36142,32564],{"class":140},[57,36144,156],{"class":136},[57,36146,32554],{"class":140},[57,36148,36149],{"class":59,"line":10193},[57,36150,32573],{"class":63},[57,36152,36153,36155,36157],{"class":59,"line":10198},[57,36154,32578],{"class":140},[57,36156,156],{"class":136},[57,36158,32554],{"class":140},[57,36160,36161],{"class":59,"line":16876},[57,36162,32587],{"class":63},[57,36164,36165,36167,36169],{"class":59,"line":16882},[57,36166,32592],{"class":140},[57,36168,156],{"class":136},[57,36170,32554],{"class":140},[57,36172,36173],{"class":59,"line":16905},[57,36174,2673],{"emptyLinePlaceholder":350},[57,36176,36177],{"class":59,"line":16911},[57,36178,32605],{"class":63},[57,36180,36181,36183,36185],{"class":59,"line":16934},[57,36182,32610],{"class":140},[57,36184,156],{"class":136},[57,36186,32615],{"class":140},[57,36188,36189],{"class":59,"line":16948},[57,36190,2673],{"emptyLinePlaceholder":350},[57,36192,36193],{"class":59,"line":16968},[57,36194,2673],{"emptyLinePlaceholder":350},[57,36196,36197],{"class":59,"line":16974},[57,36198,32628],{"class":63},[57,36200,36201,36203,36205,36207,36209],{"class":59,"line":16985},[57,36202,3474],{"class":136},[57,36204,32635],{"class":140},[57,36206,26312],{"class":136},[57,36208,32640],{"class":81},[57,36210,32643],{"class":140},[57,36212,36213,36215,36217,36219,36221,36223,36225,36227,36229,36231,36233],{"class":59,"line":17008},[57,36214,32648],{"class":81},[57,36216,168],{"class":140},[57,36218,32653],{"class":74},[57,36220,32656],{"class":81},[57,36222,1000],{"class":74},[57,36224,32656],{"class":81},[57,36226,668],{"class":74},[57,36228,32665],{"class":140},[57,36230,948],{"class":136},[57,36232,635],{"class":81},[57,36234,259],{"class":140},[57,36236,36237,36239,36241,36243,36245,36247],{"class":59,"line":17030},[57,36238,32648],{"class":81},[57,36240,168],{"class":140},[57,36242,32680],{"class":74},[57,36244,871],{"class":136},[57,36246,862],{"class":81},[57,36248,238],{"class":140},[57,36250,36251],{"class":59,"line":17035},[57,36252,2673],{"emptyLinePlaceholder":350},[57,36254,36255],{"class":59,"line":17041},[57,36256,32695],{"class":63},[57,36258,36259],{"class":59,"line":17055},[57,36260,32700],{"class":63},[57,36262,36263,36265,36267],{"class":59,"line":17068},[57,36264,32705],{"class":140},[57,36266,156],{"class":136},[57,36268,32539],{"class":81},[57,36270,36271],{"class":59,"line":17073},[57,36272,32714],{"class":63},[57,36274,36275,36277,36279],{"class":59,"line":17087},[57,36276,32719],{"class":140},[57,36278,156],{"class":136},[57,36280,3358],{"class":81},[57,36282,36283],{"class":59,"line":17092},[57,36284,32728],{"class":63},[57,36286,36287,36289,36291],{"class":59,"line":17098},[57,36288,32733],{"class":140},[57,36290,156],{"class":136},[57,36292,32539],{"class":81},[57,36294,36295],{"class":59,"line":17103},[57,36296,32742],{"class":63},[57,36298,36299,36301,36303],{"class":59,"line":17117},[57,36300,32747],{"class":140},[57,36302,156],{"class":136},[57,36304,3358],{"class":81},[57,36306,36307],{"class":59,"line":17122},[57,36308,32756],{"class":63},[57,36310,36311,36313,36315],{"class":59,"line":17127},[57,36312,32761],{"class":140},[57,36314,156],{"class":136},[57,36316,3358],{"class":81},[57,36318,36319],{"class":59,"line":17141},[57,36320,32770],{"class":63},[57,36322,36323,36325,36327],{"class":59,"line":17153},[57,36324,32775],{"class":140},[57,36326,156],{"class":136},[57,36328,3358],{"class":81},[57,36330,36331],{"class":59,"line":17158},[57,36332,32784],{"class":63},[57,36334,36335,36337,36339,36341,36343],{"class":59,"line":17171},[57,36336,3676],{"class":136},[57,36338,31798],{"class":140},[57,36340,26312],{"class":136},[57,36342,31803],{"class":81},[57,36344,32797],{"class":140},[57,36346,36347],{"class":59,"line":17176},[57,36348,32802],{"class":63},[57,36350,36351,36353,36355],{"class":59,"line":17181},[57,36352,32807],{"class":140},[57,36354,156],{"class":136},[57,36356,32812],{"class":140},[57,36358,36359],{"class":59,"line":17186},[57,36360,32817],{"class":63},[57,36362,36363,36365,36367],{"class":59,"line":17199},[57,36364,32822],{"class":140},[57,36366,156],{"class":136},[57,36368,32827],{"class":140},[57,36370,36371],{"class":59,"line":17204},[57,36372,32833],{"class":63},[57,36374,36375],{"class":59,"line":32830},[57,36376,32839],{"class":140},[57,36378,36379],{"class":59,"line":32836},[57,36380,32845],{"class":63},[57,36382,36383],{"class":59,"line":32842},[57,36384,32851],{"class":63},[57,36386,36387,36389,36391],{"class":59,"line":32848},[57,36388,32857],{"class":140},[57,36390,156],{"class":136},[57,36392,32862],{"class":140},[57,36394,36395],{"class":59,"line":32854},[57,36396,32868],{"class":63},[57,36398,36399,36401,36403,36405,36407,36409,36411],{"class":59,"line":32865},[57,36400,32874],{"class":140},[57,36402,156],{"class":136},[57,36404,32879],{"class":140},[57,36406,32882],{"class":5489},[57,36408,156],{"class":136},[57,36410,635],{"class":81},[57,36412,238],{"class":140},[57,36414,36415],{"class":59,"line":32871},[57,36416,32894],{"class":63},[57,36418,36419,36421,36423],{"class":59,"line":32891},[57,36420,32900],{"class":140},[57,36422,156],{"class":136},[57,36424,32905],{"class":140},[57,36426,36427],{"class":59,"line":32897},[57,36428,32911],{"class":63},[57,36430,36431],{"class":59,"line":32908},[57,36432,32917],{"class":140},[57,36434,36435],{"class":59,"line":32914},[57,36436,32923],{"class":63},[57,36438,36439],{"class":59,"line":32920},[57,36440,32929],{"class":140},[57,36442,36443],{"class":59,"line":32926},[57,36444,32935],{"class":63},[57,36446,36447],{"class":59,"line":32932},[57,36448,32941],{"class":140},[57,36450,36451],{"class":59,"line":32938},[57,36452,32947],{"class":63},[57,36454,36455,36457,36459,36461,36463,36465,36467],{"class":59,"line":32944},[57,36456,32953],{"class":140},[57,36458,9750],{"class":136},[57,36460,32958],{"class":140},[57,36462,871],{"class":136},[57,36464,32963],{"class":140},[57,36466,226],{"class":81},[57,36468,238],{"class":140},[57,36470,36471],{"class":59,"line":32950},[57,36472,32973],{"class":63},[57,36474,36475,36477,36479,36481,36483],{"class":59,"line":32970},[57,36476,32979],{"class":140},[57,36478,9750],{"class":136},[57,36480,32984],{"class":140},[57,36482,3222],{"class":136},[57,36484,32989],{"class":140},[57,36486,36487],{"class":59,"line":32976},[57,36488,32995],{"class":63},[57,36490,36491,36493,36495,36497,36499],{"class":59,"line":32992},[57,36492,33001],{"class":140},[57,36494,9750],{"class":136},[57,36496,32963],{"class":140},[57,36498,226],{"class":81},[57,36500,238],{"class":140},[57,36502,36503],{"class":59,"line":32998},[57,36504,33015],{"class":63},[57,36506,36507,36509,36511,36513,36515],{"class":59,"line":33012},[57,36508,3676],{"class":136},[57,36510,33023],{"class":140},[57,36512,26312],{"class":136},[57,36514,31803],{"class":81},[57,36516,33030],{"class":140},[57,36518,36519],{"class":59,"line":33018},[57,36520,33036],{"class":63},[57,36522,36523,36525,36527],{"class":59,"line":33033},[57,36524,32807],{"class":140},[57,36526,156],{"class":136},[57,36528,32812],{"class":140},[57,36530,36531],{"class":59,"line":33039},[57,36532,33051],{"class":63},[57,36534,36535,36537,36539],{"class":59,"line":33048},[57,36536,32822],{"class":140},[57,36538,156],{"class":136},[57,36540,32827],{"class":140},[57,36542,36543],{"class":59,"line":33054},[57,36544,33066],{"class":63},[57,36546,36547],{"class":59,"line":33063},[57,36548,33072],{"class":140},[57,36550,36551],{"class":59,"line":33069},[57,36552,36553],{"class":63},"            # 验证时不计算梯度以节省内存\u002F计算\n",[57,36555,36556,36558],{"class":59,"line":33075},[57,36557,33078],{"class":136},[57,36559,33081],{"class":140},[57,36561,36562],{"class":59,"line":33084},[57,36563,33087],{"class":63},[57,36565,36566,36569,36571],{"class":59,"line":33090},[57,36567,36568],{"class":140},"                output",[57,36570,156],{"class":136},[57,36572,32862],{"class":140},[57,36574,36575],{"class":59,"line":33101},[57,36576,33104],{"class":63},[57,36578,36579,36582,36584,36586,36588,36590,36592],{"class":59,"line":33107},[57,36580,36581],{"class":140},"                pre_lab",[57,36583,156],{"class":136},[57,36585,32879],{"class":140},[57,36587,32882],{"class":5489},[57,36589,156],{"class":136},[57,36591,635],{"class":81},[57,36593,238],{"class":140},[57,36595,36596],{"class":59,"line":33126},[57,36597,33129],{"class":63},[57,36599,36600,36603,36605],{"class":59,"line":33132},[57,36601,36602],{"class":140},"                val_batch_loss",[57,36604,156],{"class":136},[57,36606,32905],{"class":140},[57,36608,36609],{"class":59,"line":33143},[57,36610,33146],{"class":63},[57,36612,36613,36616,36618,36621,36623,36625,36627],{"class":59,"line":33149},[57,36614,36615],{"class":140},"                val_loss",[57,36617,9750],{"class":136},[57,36619,36620],{"class":140},"val_batch_loss.item()",[57,36622,871],{"class":136},[57,36624,32963],{"class":140},[57,36626,226],{"class":81},[57,36628,238],{"class":140},[57,36630,36631,36634,36636,36638,36640],{"class":59,"line":33169},[57,36632,36633],{"class":140},"                val_corrects",[57,36635,9750],{"class":136},[57,36637,32984],{"class":140},[57,36639,3222],{"class":136},[57,36641,32989],{"class":140},[57,36643,36644],{"class":59,"line":33185},[57,36645,36646],{"class":63},"            # 当前用于验证的样本数量\n",[57,36648,36649,36652,36654,36656,36658],{"class":59,"line":33191},[57,36650,36651],{"class":140},"            val_num",[57,36653,9750],{"class":136},[57,36655,32963],{"class":140},[57,36657,226],{"class":81},[57,36659,238],{"class":140},[57,36661,36662],{"class":59,"line":33205},[57,36663,33208],{"class":63},[57,36665,36666],{"class":59,"line":33211},[57,36667,33214],{"class":63},[57,36669,36670,36672,36674],{"class":59,"line":33217},[57,36671,33220],{"class":140},[57,36673,1000],{"class":136},[57,36675,33225],{"class":140},[57,36677,36678],{"class":59,"line":33228},[57,36679,33231],{"class":63},[57,36681,36682],{"class":59,"line":33234},[57,36683,33237],{"class":63},[57,36685,36686,36688,36690],{"class":59,"line":33240},[57,36687,33243],{"class":140},[57,36689,1000],{"class":136},[57,36691,33225],{"class":140},[57,36693,36694],{"class":59,"line":33250},[57,36695,33253],{"class":63},[57,36697,36698,36700,36702],{"class":59,"line":33256},[57,36699,33259],{"class":140},[57,36701,1000],{"class":136},[57,36703,33264],{"class":140},[57,36705,36706],{"class":59,"line":33267},[57,36707,33270],{"class":63},[57,36709,36710,36712,36714],{"class":59,"line":33273},[57,36711,33276],{"class":140},[57,36713,1000],{"class":136},[57,36715,33264],{"class":140},[57,36717,36718],{"class":59,"line":33283},[57,36719,2673],{"emptyLinePlaceholder":350},[57,36721,36722],{"class":59,"line":33288},[57,36723,33291],{"class":63},[57,36725,36726,36728,36730,36732,36734,36736,36738,36740,36742,36744,36746,36748,36750,36752,36754,36756,36758,36760,36762,36764],{"class":59,"line":33294},[57,36727,32648],{"class":81},[57,36729,168],{"class":140},[57,36731,3865],{"class":74},[57,36733,32656],{"class":81},[57,36735,33305],{"class":74},[57,36737,1312],{"class":81},[57,36739,33310],{"class":136},[57,36741,1362],{"class":81},[57,36743,33315],{"class":74},[57,36745,1312],{"class":81},[57,36747,33310],{"class":136},[57,36749,1362],{"class":81},[57,36751,3865],{"class":74},[57,36753,33326],{"class":140},[57,36755,948],{"class":136},[57,36757,635],{"class":81},[57,36759,33333],{"class":140},[57,36761,948],{"class":136},[57,36763,635],{"class":81},[57,36765,33340],{"class":140},[57,36767,36768,36770,36772,36774,36776,36778,36780,36782,36784,36786,36788,36790,36792,36794,36796,36798,36800,36802,36804,36806],{"class":59,"line":33343},[57,36769,32648],{"class":81},[57,36771,168],{"class":140},[57,36773,3865],{"class":74},[57,36775,32656],{"class":81},[57,36777,33354],{"class":74},[57,36779,1312],{"class":81},[57,36781,33310],{"class":136},[57,36783,1362],{"class":81},[57,36785,33363],{"class":74},[57,36787,1312],{"class":81},[57,36789,33310],{"class":136},[57,36791,1362],{"class":81},[57,36793,3865],{"class":74},[57,36795,33374],{"class":140},[57,36797,948],{"class":136},[57,36799,635],{"class":81},[57,36801,33381],{"class":140},[57,36803,948],{"class":136},[57,36805,635],{"class":81},[57,36807,33340],{"class":140},[57,36809,36810],{"class":59,"line":33390},[57,36811,2673],{"emptyLinePlaceholder":350},[57,36813,36814],{"class":59,"line":33395},[57,36815,33398],{"class":63},[57,36817,36818,36820,36822,36824,36826,36828,36830],{"class":59,"line":33401},[57,36819,2770],{"class":136},[57,36821,33406],{"class":140},[57,36823,948],{"class":136},[57,36825,635],{"class":81},[57,36827,1356],{"class":140},[57,36829,223],{"class":136},[57,36831,33417],{"class":140},[57,36833,36834],{"class":59,"line":33420},[57,36835,33423],{"class":63},[57,36837,36838,36840,36842,36844,36846,36848,36850],{"class":59,"line":33426},[57,36839,33429],{"class":140},[57,36841,464],{"class":81},[57,36843,156],{"class":136},[57,36845,33436],{"class":140},[57,36847,948],{"class":136},[57,36849,635],{"class":81},[57,36851,33443],{"class":140},[57,36853,36854],{"class":59,"line":33446},[57,36855,33449],{"class":63},[57,36857,36858],{"class":59,"line":33452},[57,36859,33455],{"class":63},[57,36861,36862,36864,36866],{"class":59,"line":33458},[57,36863,33461],{"class":140},[57,36865,156],{"class":136},[57,36867,32511],{"class":140},[57,36869,36870],{"class":59,"line":33468},[57,36871,2673],{"emptyLinePlaceholder":350},[57,36873,36874],{"class":59,"line":33473},[57,36875,33476],{"class":63},[57,36877,36878,36880,36882,36884,36886],{"class":59,"line":33479},[57,36879,33482],{"class":140},[57,36881,156],{"class":136},[57,36883,33487],{"class":140},[57,36885,948],{"class":136},[57,36887,33492],{"class":140},[57,36889,36890,36892,36894,36896,36898,36900,36902,36904,36906,36908,36910,36912,36914,36916,36918,36920,36922,36924],{"class":59,"line":33495},[57,36891,32648],{"class":81},[57,36893,168],{"class":140},[57,36895,33502],{"class":74},[57,36897,1312],{"class":81},[57,36899,33507],{"class":136},[57,36901,1362],{"class":81},[57,36903,960],{"class":74},[57,36905,1312],{"class":81},[57,36907,33507],{"class":136},[57,36909,1362],{"class":81},[57,36911,33520],{"class":74},[57,36913,33523],{"class":140},[57,36915,33526],{"class":136},[57,36917,1323],{"class":81},[57,36919,33531],{"class":140},[57,36921,745],{"class":136},[57,36923,1323],{"class":81},[57,36925,259],{"class":140},[57,36927,36928],{"class":59,"line":33540},[57,36929,36930],{"class":63},"    # 选择最优参数并保存\n",[57,36932,36933],{"class":59,"line":33546},[57,36934,36935],{"class":63},"    # 保存最佳模型权重字典\n",[57,36937,36938,36941,36943],{"class":59,"line":33552},[57,36939,36940],{"class":140},"    torch.save(best_model_wts,",[57,36942,33564],{"class":74},[57,36944,238],{"class":140},[57,36946,36947],{"class":59,"line":33558},[57,36948,33584],{"class":63},[57,36950,36951,36953,36955,36957,36959,36961],{"class":59,"line":33569},[57,36952,33590],{"class":140},[57,36954,156],{"class":136},[57,36956,33595],{"class":140},[57,36958,33598],{"class":5489},[57,36960,156],{"class":136},[57,36962,1828],{"class":140},[57,36964,36965,36967,36969,36971],{"class":59,"line":33575},[57,36966,33608],{"class":74},[57,36968,1275],{"class":140},[57,36970,33613],{"class":81},[57,36972,33616],{"class":140},[57,36974,36975,36977],{"class":59,"line":33581},[57,36976,33622],{"class":74},[57,36978,33625],{"class":140},[57,36980,36981,36983],{"class":59,"line":33587},[57,36982,33631],{"class":74},[57,36984,33634],{"class":140},[57,36986,36987,36989],{"class":59,"line":33605},[57,36988,33640],{"class":74},[57,36990,33643],{"class":140},[57,36992,36993,36995],{"class":59,"line":33619},[57,36994,33649],{"class":74},[57,36996,33652],{"class":140},[57,36998,36999],{"class":59,"line":33628},[57,37000,33658],{"class":140},[57,37002,37003],{"class":59,"line":33637},[57,37004,33664],{"class":63},[57,37006,37007,37009],{"class":59,"line":33646},[57,37008,4363],{"class":136},[57,37010,33672],{"class":140},[57,37012,37013],{"class":59,"line":33655},[57,37014,2673],{"emptyLinePlaceholder":350},[57,37016,37017],{"class":59,"line":33661},[57,37018,33683],{"class":63},[57,37020,37021,37023,37025],{"class":59,"line":33667},[57,37022,32144],{"class":136},[57,37024,33691],{"class":70},[57,37026,33694],{"class":140},[57,37028,37029],{"class":59,"line":33675},[57,37030,33700],{"class":63},[57,37032,37033,37035,37037,37039,37041,37043,37045,37047],{"class":59,"line":33680},[57,37034,33706],{"class":140},[57,37036,31890],{"class":5489},[57,37038,156],{"class":136},[57,37040,168],{"class":140},[57,37042,914],{"class":81},[57,37044,273],{"class":140},[57,37046,710],{"class":81},[57,37048,259],{"class":140},[57,37050,37051],{"class":59,"line":33686},[57,37052,33726],{"class":63},[57,37054,37055],{"class":59,"line":33697},[57,37056,33732],{"class":63},[57,37058,37059],{"class":59,"line":33703},[57,37060,33738],{"class":63},[57,37062,37063,37065,37067,37069,37071,37073,37075],{"class":59,"line":33723},[57,37064,31924],{"class":140},[57,37066,635],{"class":81},[57,37068,273],{"class":140},[57,37070,498],{"class":81},[57,37072,273],{"class":140},[57,37074,635],{"class":81},[57,37076,238],{"class":140},[57,37078,37079],{"class":59,"line":33729},[57,37080,33761],{"class":63},[57,37082,37083],{"class":59,"line":33735},[57,37084,33767],{"class":63},[57,37086,37087],{"class":59,"line":33741},[57,37088,33773],{"class":63},[57,37090,37091],{"class":59,"line":33758},[57,37092,33779],{"class":63},[57,37094,37095],{"class":59,"line":33764},[57,37096,33785],{"class":63},[57,37098,37099,37101,37103,37105,37107,37109,37111,37113,37115],{"class":59,"line":33770},[57,37100,33791],{"class":140},[57,37102,33794],{"class":74},[57,37104,33797],{"class":140},[57,37106,33800],{"class":74},[57,37108,273],{"class":140},[57,37110,33805],{"class":5489},[57,37112,156],{"class":136},[57,37114,33810],{"class":74},[57,37116,238],{"class":140},[57,37118,37119,37121,37123,37125,37127,37129,37131,37133,37135],{"class":59,"line":33776},[57,37120,33791],{"class":140},[57,37122,33794],{"class":74},[57,37124,33822],{"class":140},[57,37126,33825],{"class":74},[57,37128,273],{"class":140},[57,37130,33805],{"class":5489},[57,37132,156],{"class":136},[57,37134,33834],{"class":74},[57,37136,238],{"class":140},[57,37138,37139],{"class":59,"line":33782},[57,37140,33842],{"class":63},[57,37142,37143],{"class":59,"line":33788},[57,37144,33848],{"class":140},[57,37146,37147],{"class":59,"line":33815},[57,37148,33854],{"class":63},[57,37150,37151,37153,37155],{"class":59,"line":33839},[57,37152,33860],{"class":140},[57,37154,33863],{"class":74},[57,37156,238],{"class":140},[57,37158,37159,37161,37163],{"class":59,"line":33845},[57,37160,33871],{"class":140},[57,37162,33874],{"class":74},[57,37164,238],{"class":140},[57,37166,37167],{"class":59,"line":33851},[57,37168,33882],{"class":63},[57,37170,37171,37173,37175,37177,37179,37181,37183],{"class":59,"line":33857},[57,37172,31924],{"class":140},[57,37174,635],{"class":81},[57,37176,273],{"class":140},[57,37178,498],{"class":81},[57,37180,273],{"class":140},[57,37182,498],{"class":81},[57,37184,238],{"class":140},[57,37186,37187,37189,37191,37193,37195,37197,37199,37201,37203],{"class":59,"line":33868},[57,37188,33791],{"class":140},[57,37190,33794],{"class":74},[57,37192,33909],{"class":140},[57,37194,33800],{"class":74},[57,37196,273],{"class":140},[57,37198,33805],{"class":5489},[57,37200,156],{"class":136},[57,37202,33920],{"class":74},[57,37204,238],{"class":140},[57,37206,37207,37209,37211,37213,37215,37217,37219,37221,37223],{"class":59,"line":33879},[57,37208,33791],{"class":140},[57,37210,33794],{"class":74},[57,37212,33932],{"class":140},[57,37214,33825],{"class":74},[57,37216,273],{"class":140},[57,37218,33805],{"class":5489},[57,37220,156],{"class":136},[57,37222,33943],{"class":74},[57,37224,238],{"class":140},[57,37226,37227],{"class":59,"line":33885},[57,37228,33951],{"class":63},[57,37230,37231],{"class":59,"line":33902},[57,37232,33848],{"class":140},[57,37234,37235,37237,37239],{"class":59,"line":33925},[57,37236,33860],{"class":140},[57,37238,33794],{"class":74},[57,37240,238],{"class":140},[57,37242,37243,37245,37247],{"class":59,"line":33948},[57,37244,33871],{"class":140},[57,37246,33973],{"class":74},[57,37248,238],{"class":140},[57,37250,37251],{"class":59,"line":33954},[57,37252,33981],{"class":140},[57,37254,37255],{"class":59,"line":33959},[57,37256,2673],{"emptyLinePlaceholder":350},[57,37258,37259],{"class":59,"line":33968},[57,37260,33992],{"class":63},[57,37262,37263,37265,37267,37269,37271],{"class":59,"line":33978},[57,37264,1813],{"class":136},[57,37266,31417],{"class":81},[57,37268,3222],{"class":136},[57,37270,31422],{"class":74},[57,37272,4012],{"class":140},[57,37274,37275],{"class":59,"line":33984},[57,37276,34011],{"class":63},[57,37278,37279,37282,37284],{"class":59,"line":33989},[57,37280,37281],{"class":140},"    AlexNet",[57,37283,156],{"class":136},[57,37285,37286],{"class":140},"AlexNet()\n",[57,37288,37289,37291,37293],{"class":59,"line":33995},[57,37290,34028],{"class":140},[57,37292,156],{"class":136},[57,37294,34033],{"class":140},[57,37296,37297,37299,37301,37304,37306,37308,37310],{"class":59,"line":34008},[57,37298,33590],{"class":140},[57,37300,156],{"class":136},[57,37302,37303],{"class":140},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[57,37305,34046],{"class":5489},[57,37307,156],{"class":136},[57,37309,1116],{"class":81},[57,37311,238],{"class":140},[57,37313,37314],{"class":59,"line":34014},[57,37315,34058],{"class":140},[377,37317,37318],{"start":144},[380,37319,34071],{},[49,37321,37323],{"className":122,"code":37322,"language":124,"meta":46,"style":46},"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",[28,37324,37325,37331,37341,37351,37361,37365,37375,37385,37396,37400,37404,37408,37416,37432,37442,37458,37468,37482,37486,37496,37506,37516,37522,37526,37530,37538,37542,37558,37566,37570,37574,37582,37590,37594,37598,37602,37606,37612,37616,37626,37634,37642,37646,37650,37654,37662,37666,37682,37686,37690,37694,37706,37710,37722,37726,37730,37742,37746,37756,37760,37764,37776,37780,37788,37792,37796,37804,37808,37816,37820,37824,37828,37832,37836,37852,37860,37864,37868,37916,37922,37926,37936,37944,37952,37956,37960,37964,37968,37976,37980,37996,38000,38008,38016],{"__ignoreMap":46},[57,37326,37327,37329],{"class":59,"line":60},[57,37328,137],{"class":136},[57,37330,141],{"class":140},[57,37332,37333,37335,37337,37339],{"class":59,"line":67},[57,37334,137],{"class":136},[57,37336,31612],{"class":140},[57,37338,31580],{"class":136},[57,37340,31617],{"class":140},[57,37342,37343,37345,37347,37349],{"class":59,"line":144},[57,37344,30934],{"class":136},[57,37346,34099],{"class":140},[57,37348,137],{"class":136},[57,37350,34104],{"class":140},[57,37352,37353,37355,37357,37359],{"class":59,"line":150},[57,37354,30934],{"class":136},[57,37356,31595],{"class":140},[57,37358,137],{"class":136},[57,37360,31600],{"class":140},[57,37362,37363],{"class":59,"line":162},[57,37364,34119],{"class":63},[57,37366,37367,37369,37371,37373],{"class":59,"line":180},[57,37368,30934],{"class":136},[57,37370,31565],{"class":140},[57,37372,137],{"class":136},[57,37374,31570],{"class":140},[57,37376,37377,37379,37381,37383],{"class":59,"line":186},[57,37378,30934],{"class":136},[57,37380,32111],{"class":140},[57,37382,137],{"class":136},[57,37384,35754],{"class":140},[57,37386,37387,37389,37392,37394],{"class":59,"line":197},[57,37388,30934],{"class":136},[57,37390,37391],{"class":140}," 练习.AlexNet.model ",[57,37393,137],{"class":136},[57,37395,35754],{"class":140},[57,37397,37398],{"class":59,"line":241},[57,37399,2673],{"emptyLinePlaceholder":350},[57,37401,37402],{"class":59,"line":249},[57,37403,2673],{"emptyLinePlaceholder":350},[57,37405,37406],{"class":59,"line":262},[57,37407,34148],{"class":63},[57,37409,37410,37412,37414],{"class":59,"line":281},[57,37411,32144],{"class":136},[57,37413,34155],{"class":70},[57,37415,32150],{"class":140},[57,37417,37418,37420,37422,37424,37426,37428,37430],{"class":59,"line":287},[57,37419,34162],{"class":140},[57,37421,156],{"class":136},[57,37423,31652],{"class":140},[57,37425,31655],{"class":5489},[57,37427,156],{"class":136},[57,37429,31660],{"class":74},[57,37431,31663],{"class":140},[57,37433,37434,37436,37438,37440],{"class":59,"line":298},[57,37435,34179],{"class":5489},[57,37437,156],{"class":136},[57,37439,34184],{"class":81},[57,37441,31663],{"class":140},[57,37443,37444,37446,37448,37450,37452,37454,37456],{"class":59,"line":311},[57,37445,34191],{"class":5489},[57,37447,156],{"class":136},[57,37449,31690],{"class":140},[57,37451,31693],{"class":5489},[57,37453,156],{"class":136},[57,37455,35646],{"class":81},[57,37457,31701],{"class":140},[57,37459,37460,37462,37464,37466],{"class":59,"line":322},[57,37461,34208],{"class":5489},[57,37463,156],{"class":136},[57,37465,31673],{"class":81},[57,37467,238],{"class":140},[57,37469,37470,37472,37474,37476,37478,37480],{"class":59,"line":1929},[57,37471,34219],{"class":140},[57,37473,156],{"class":136},[57,37475,31731],{"class":140},[57,37477,31734],{"class":5489},[57,37479,156],{"class":136},[57,37481,34230],{"class":140},[57,37483,37484],{"class":59,"line":1950},[57,37485,34235],{"class":63},[57,37487,37488,37490,37492,37494],{"class":59,"line":1955},[57,37489,34240],{"class":5489},[57,37491,156],{"class":136},[57,37493,635],{"class":81},[57,37495,31663],{"class":140},[57,37497,37498,37500,37502,37504],{"class":59,"line":1969},[57,37499,34251],{"class":5489},[57,37501,156],{"class":136},[57,37503,31673],{"class":81},[57,37505,31663],{"class":140},[57,37507,37508,37510,37512,37514],{"class":59,"line":1974},[57,37509,34262],{"class":5489},[57,37511,156],{"class":136},[57,37513,226],{"class":81},[57,37515,238],{"class":140},[57,37517,37518,37520],{"class":59,"line":2001},[57,37519,4363],{"class":136},[57,37521,34275],{"class":140},[57,37523,37524],{"class":59,"line":2006},[57,37525,2673],{"emptyLinePlaceholder":350},[57,37527,37528],{"class":59,"line":2023},[57,37529,34284],{"class":63},[57,37531,37532,37534,37536],{"class":59,"line":2028},[57,37533,32144],{"class":136},[57,37535,34291],{"class":70},[57,37537,34294],{"class":140},[57,37539,37540],{"class":59,"line":2033},[57,37541,34299],{"class":63},[57,37543,37544,37546,37548,37550,37552,37554,37556],{"class":59,"line":2038},[57,37545,31434],{"class":140},[57,37547,156],{"class":136},[57,37549,31441],{"class":74},[57,37551,211],{"class":136},[57,37553,31446],{"class":140},[57,37555,232],{"class":136},[57,37557,34316],{"class":74},[57,37559,37560,37562,37564],{"class":59,"line":2052},[57,37561,31486],{"class":140},[57,37563,156],{"class":136},[57,37565,32486],{"class":140},[57,37567,37568],{"class":59,"line":2057},[57,37569,2673],{"emptyLinePlaceholder":350},[57,37571,37572],{"class":59,"line":2850},[57,37573,34333],{"class":63},[57,37575,37576,37578,37580],{"class":59,"line":2864},[57,37577,34338],{"class":140},[57,37579,156],{"class":136},[57,37581,32539],{"class":81},[57,37583,37584,37586,37588],{"class":59,"line":2872},[57,37585,34347],{"class":140},[57,37587,156],{"class":136},[57,37589,3358],{"class":81},[57,37591,37592],{"class":59,"line":2877},[57,37593,2673],{"emptyLinePlaceholder":350},[57,37595,37596],{"class":59,"line":2883},[57,37597,34360],{"class":63},[57,37599,37600],{"class":59,"line":2889},[57,37601,34365],{"class":63},[57,37603,37604],{"class":59,"line":2894},[57,37605,34370],{"class":63},[57,37607,37608,37610],{"class":59,"line":8221},[57,37609,34375],{"class":136},[57,37611,33081],{"class":140},[57,37613,37614],{"class":59,"line":8245},[57,37615,34382],{"class":63},[57,37617,37618,37620,37622,37624],{"class":59,"line":8250},[57,37619,3676],{"class":136},[57,37621,34389],{"class":140},[57,37623,26312],{"class":136},[57,37625,34394],{"class":140},[57,37627,37628,37630,37632],{"class":59,"line":8256},[57,37629,34399],{"class":140},[57,37631,156],{"class":136},[57,37633,34404],{"class":140},[57,37635,37636,37638,37640],{"class":59,"line":8283},[57,37637,34409],{"class":140},[57,37639,156],{"class":136},[57,37641,34414],{"class":140},[57,37643,37644],{"class":59,"line":8288},[57,37645,34419],{"class":63},[57,37647,37648],{"class":59,"line":8294},[57,37649,33072],{"class":140},[57,37651,37652],{"class":59,"line":8306},[57,37653,34428],{"class":63},[57,37655,37656,37658,37660],{"class":59,"line":8318},[57,37657,32857],{"class":140},[57,37659,156],{"class":136},[57,37661,34437],{"class":140},[57,37663,37664],{"class":59,"line":8330},[57,37665,34442],{"class":63},[57,37667,37668,37670,37672,37674,37676,37678,37680],{"class":59,"line":9989},[57,37669,32874],{"class":140},[57,37671,156],{"class":136},[57,37673,32879],{"class":140},[57,37675,32882],{"class":5489},[57,37677,156],{"class":136},[57,37679,635],{"class":81},[57,37681,238],{"class":140},[57,37683,37684],{"class":59,"line":10014},[57,37685,34463],{"class":63},[57,37687,37688],{"class":59,"line":10037},[57,37689,34468],{"class":63},[57,37691,37692],{"class":59,"line":10061},[57,37693,34473],{"class":63},[57,37695,37696,37698,37700,37702,37704],{"class":59,"line":10066},[57,37697,34478],{"class":140},[57,37699,9750],{"class":136},[57,37701,32984],{"class":140},[57,37703,3222],{"class":136},[57,37705,34487],{"class":140},[57,37707,37708],{"class":59,"line":10071},[57,37709,34492],{"class":63},[57,37711,37712,37714,37716,37718,37720],{"class":59,"line":10076},[57,37713,34497],{"class":140},[57,37715,9750],{"class":136},[57,37717,34502],{"class":140},[57,37719,226],{"class":81},[57,37721,238],{"class":140},[57,37723,37724],{"class":59,"line":10085},[57,37725,2673],{"emptyLinePlaceholder":350},[57,37727,37728],{"class":59,"line":10090},[57,37729,34515],{"class":63},[57,37731,37732,37734,37736,37738,37740],{"class":59,"line":10096},[57,37733,34520],{"class":140},[57,37735,156],{"class":136},[57,37737,34525],{"class":140},[57,37739,1000],{"class":136},[57,37741,34530],{"class":140},[57,37743,37744],{"class":59,"line":10117},[57,37745,34535],{"class":63},[57,37747,37748,37750,37752,37754],{"class":59,"line":10123},[57,37749,32648],{"class":81},[57,37751,168],{"class":140},[57,37753,34544],{"class":74},[57,37755,34547],{"class":140},[57,37757,37758],{"class":59,"line":10137},[57,37759,2673],{"emptyLinePlaceholder":350},[57,37761,37762],{"class":59,"line":10143},[57,37763,34556],{"class":63},[57,37765,37766,37768,37770,37772,37774],{"class":59,"line":10170},[57,37767,1813],{"class":136},[57,37769,31417],{"class":81},[57,37771,3222],{"class":136},[57,37773,31422],{"class":74},[57,37775,4012],{"class":140},[57,37777,37778],{"class":59,"line":10179},[57,37779,34573],{"class":63},[57,37781,37782,37784,37786],{"class":59,"line":10185},[57,37783,31486],{"class":140},[57,37785,156],{"class":136},[57,37787,37286],{"class":140},[57,37789,37790],{"class":59,"line":10193},[57,37791,34586],{"class":63},[57,37793,37794],{"class":59,"line":10198},[57,37795,34591],{"class":63},[57,37797,37798,37800,37802],{"class":59,"line":16876},[57,37799,34596],{"class":140},[57,37801,34599],{"class":74},[57,37803,259],{"class":140},[57,37805,37806],{"class":59,"line":16882},[57,37807,34606],{"class":63},[57,37809,37810,37812,37814],{"class":59,"line":16905},[57,37811,34219],{"class":140},[57,37813,156],{"class":136},[57,37815,34615],{"class":140},[57,37817,37818],{"class":59,"line":16911},[57,37819,34620],{"class":63},[57,37821,37822],{"class":59,"line":16934},[57,37823,34625],{"class":140},[57,37825,37826],{"class":59,"line":16948},[57,37827,2673],{"emptyLinePlaceholder":350},[57,37829,37830],{"class":59,"line":16968},[57,37831,34634],{"class":63},[57,37833,37834],{"class":59,"line":16974},[57,37835,34639],{"class":63},[57,37837,37838,37840,37842,37844,37846,37848,37850],{"class":59,"line":16985},[57,37839,31434],{"class":140},[57,37841,156],{"class":136},[57,37843,31441],{"class":74},[57,37845,211],{"class":136},[57,37847,31446],{"class":140},[57,37849,232],{"class":136},[57,37851,34316],{"class":74},[57,37853,37854,37856,37858],{"class":59,"line":17008},[57,37855,31486],{"class":140},[57,37857,156],{"class":136},[57,37859,32486],{"class":140},[57,37861,37862],{"class":59,"line":17030},[57,37863,34668],{"class":63},[57,37865,37866],{"class":59,"line":17035},[57,37867,34673],{"class":63},[57,37869,37870,37872,37874,37876,37878,37880,37882,37884,37886,37888,37890,37892,37894,37896,37898,37900,37902,37904,37906,37908,37910,37912,37914],{"class":59,"line":17041},[57,37871,34678],{"class":140},[57,37873,156],{"class":136},[57,37875,1306],{"class":140},[57,37877,34685],{"class":74},[57,37879,273],{"class":140},[57,37881,34690],{"class":74},[57,37883,273],{"class":140},[57,37885,34695],{"class":74},[57,37887,273],{"class":140},[57,37889,34700],{"class":74},[57,37891,273],{"class":140},[57,37893,34705],{"class":74},[57,37895,273],{"class":140},[57,37897,34710],{"class":74},[57,37899,273],{"class":140},[57,37901,34715],{"class":74},[57,37903,273],{"class":140},[57,37905,34720],{"class":74},[57,37907,273],{"class":140},[57,37909,34725],{"class":74},[57,37911,273],{"class":140},[57,37913,34730],{"class":74},[57,37915,33443],{"class":140},[57,37917,37918,37920],{"class":59,"line":17055},[57,37919,34375],{"class":136},[57,37921,33081],{"class":140},[57,37923,37924],{"class":59,"line":17068},[57,37925,34743],{"class":63},[57,37927,37928,37930,37932,37934],{"class":59,"line":17073},[57,37929,3676],{"class":136},[57,37931,34750],{"class":140},[57,37933,26312],{"class":136},[57,37935,34394],{"class":140},[57,37937,37938,37940,37942],{"class":59,"line":17087},[57,37939,32807],{"class":140},[57,37941,156],{"class":136},[57,37943,32812],{"class":140},[57,37945,37946,37948,37950],{"class":59,"line":17092},[57,37947,32822],{"class":140},[57,37949,156],{"class":136},[57,37951,32827],{"class":140},[57,37953,37954],{"class":59,"line":17098},[57,37955,2673],{"emptyLinePlaceholder":350},[57,37957,37958],{"class":59,"line":17103},[57,37959,34779],{"class":63},[57,37961,37962],{"class":59,"line":17117},[57,37963,33072],{"class":140},[57,37965,37966],{"class":59,"line":17122},[57,37967,34788],{"class":63},[57,37969,37970,37972,37974],{"class":59,"line":17127},[57,37971,32857],{"class":140},[57,37973,156],{"class":136},[57,37975,32862],{"class":140},[57,37977,37978],{"class":59,"line":17141},[57,37979,34801],{"class":63},[57,37981,37982,37984,37986,37988,37990,37992,37994],{"class":59,"line":17153},[57,37983,32874],{"class":140},[57,37985,156],{"class":136},[57,37987,32879],{"class":140},[57,37989,32882],{"class":5489},[57,37991,156],{"class":136},[57,37993,635],{"class":81},[57,37995,238],{"class":140},[57,37997,37998],{"class":59,"line":17158},[57,37999,34822],{"class":63},[57,38001,38002,38004,38006],{"class":59,"line":17171},[57,38003,34827],{"class":140},[57,38005,156],{"class":136},[57,38007,34832],{"class":140},[57,38009,38010,38012,38014],{"class":59,"line":17176},[57,38011,34837],{"class":140},[57,38013,156],{"class":136},[57,38015,34842],{"class":140},[57,38017,38018,38020,38022,38024,38026,38028,38030,38032],{"class":59,"line":17181},[57,38019,34847],{"class":81},[57,38021,168],{"class":140},[57,38023,34852],{"class":74},[57,38025,34855],{"class":140},[57,38027,34858],{"class":74},[57,38029,273],{"class":140},[57,38031,34863],{"class":74},[57,38033,34866],{"class":140},[394,38035,38037],{"id":38036},"_22vgg","2.2.VGG",[22270,38039,38041],{"id":38040},"_221原理","2.2.1.原理",[14,38043,38044],{},[44,38045],{"alt":46,"src":38046},"\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,38048,38049],{},[44,38050],{"alt":46,"src":38051},"\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,38053,38054],{},[44,38055],{"alt":46,"src":38056},"\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,38058,38059],{},"参数详细描述：",[14,38061,38062],{},[44,38063],{"alt":46,"src":38064},"\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,38066,38067],{},[44,38068],{"alt":46,"src":38069},"\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,38071,38072],{},[44,38073],{"alt":46,"src":38074},"\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,38076,38077],{},[44,38078],{"alt":46,"src":38079},"\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,38081,38082],{},[44,38083],{"alt":46,"src":38084},"\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",[22270,38086,38088],{"id":38087},"_222代码实现","2.2.2.代码实现",[377,38090,38091],{},[380,38092,38093],{},"网络搭建",[49,38095,38097],{"className":122,"code":38096,"language":124,"meta":46,"style":46},"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",[28,38098,38099,38105,38117,38127,38137,38141,38158,38166,38185,38190,38195,38207,38245,38250,38286,38290,38319,38324,38329,38340,38376,38380,38416,38420,38448,38452,38457,38468,38504,38508,38544,38548,38584,38588,38616,38620,38625,38636,38673,38677,38713,38717,38753,38757,38785,38789,38794,38805,38841,38845,38881,38885,38921,38925,38953,38957,38962,38973,38978,38983,38988,39009,39013,39025,39029,39041,39045,39049,39054,39059,39074,39079,39089,39094,39109,39114,39133,39138,39147,39152,39162,39167,39172,39186,39191,39205,39213,39217,39221,39229,39240,39251,39262,39273,39284,39295,39301,39305,39310,39323,39343,39349,39358],{"__ignoreMap":46},[57,38100,38101,38103],{"class":59,"line":60},[57,38102,137],{"class":136},[57,38104,141],{"class":140},[57,38106,38107,38109,38112,38114],{"class":59,"line":67},[57,38108,30934],{"class":136},[57,38110,38111],{"class":140}," sympy.core.sympify ",[57,38113,137],{"class":136},[57,38115,38116],{"class":140}," kernS\n",[57,38118,38119,38121,38123,38125],{"class":59,"line":144},[57,38120,30934],{"class":136},[57,38122,30937],{"class":140},[57,38124,137],{"class":136},[57,38126,30942],{"class":140},[57,38128,38129,38131,38133,38135],{"class":59,"line":150},[57,38130,30934],{"class":136},[57,38132,30954],{"class":140},[57,38134,137],{"class":136},[57,38136,30959],{"class":140},[57,38138,38139],{"class":59,"line":162},[57,38140,2673],{"emptyLinePlaceholder":350},[57,38142,38143,38145,38148,38150,38152,38154,38156],{"class":59,"line":180},[57,38144,14966],{"class":136},[57,38146,38147],{"class":70}," VGG16",[57,38149,168],{"class":140},[57,38151,30975],{"class":70},[57,38153,974],{"class":140},[57,38155,30980],{"class":70},[57,38157,30983],{"class":140},[57,38159,38160,38162,38164],{"class":59,"line":186},[57,38161,30998],{"class":136},[57,38163,31001],{"class":81},[57,38165,31004],{"class":140},[57,38167,38168,38170,38172,38175,38177,38179,38181,38183],{"class":59,"line":197},[57,38169,31014],{"class":81},[57,38171,168],{"class":140},[57,38173,38174],{"class":81},"VGG16",[57,38176,12708],{"class":140},[57,38178,31020],{"class":81},[57,38180,31023],{"class":140},[57,38182,31026],{"class":81},[57,38184,2249],{"class":140},[57,38186,38187],{"class":59,"line":241},[57,38188,38189],{"class":63},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[57,38191,38192],{"class":59,"line":249},[57,38193,38194],{"class":63},"        # 这里用的是灰度图\n",[57,38196,38197,38199,38202,38204],{"class":59,"line":262},[57,38198,31042],{"class":81},[57,38200,38201],{"class":140},".block1",[57,38203,156],{"class":136},[57,38205,38206],{"class":140},"nn.Sequential(\n",[57,38208,38209,38212,38214,38216,38218,38220,38222,38224,38226,38228,38230,38232,38234,38236,38238,38240,38242],{"class":59,"line":281},[57,38210,38211],{"class":140},"            nn.Conv2d(",[57,38213,31053],{"class":5489},[57,38215,156],{"class":136},[57,38217,635],{"class":81},[57,38219,273],{"class":140},[57,38221,31062],{"class":5489},[57,38223,156],{"class":136},[57,38225,621],{"class":81},[57,38227,273],{"class":140},[57,38229,31071],{"class":5489},[57,38231,156],{"class":136},[57,38233,270],{"class":81},[57,38235,273],{"class":140},[57,38237,31080],{"class":5489},[57,38239,156],{"class":136},[57,38241,635],{"class":81},[57,38243,38244],{"class":140},"),\n",[57,38246,38247],{"class":59,"line":287},[57,38248,38249],{"class":140},"            nn.ReLU(),\n",[57,38251,38252,38254,38256,38258,38260,38262,38264,38266,38268,38270,38272,38274,38276,38278,38280,38282,38284],{"class":59,"line":298},[57,38253,38211],{"class":140},[57,38255,31053],{"class":5489},[57,38257,156],{"class":136},[57,38259,621],{"class":81},[57,38261,273],{"class":140},[57,38263,31062],{"class":5489},[57,38265,156],{"class":136},[57,38267,621],{"class":81},[57,38269,273],{"class":140},[57,38271,31071],{"class":5489},[57,38273,156],{"class":136},[57,38275,270],{"class":81},[57,38277,273],{"class":140},[57,38279,31080],{"class":5489},[57,38281,156],{"class":136},[57,38283,635],{"class":81},[57,38285,38244],{"class":140},[57,38287,38288],{"class":59,"line":311},[57,38289,38249],{"class":140},[57,38291,38292,38295,38297,38299,38301,38303,38305,38307,38309,38311,38313,38315,38317],{"class":59,"line":322},[57,38293,38294],{"class":140},"            nn.MaxPool2d(",[57,38296,31071],{"class":5489},[57,38298,156],{"class":136},[57,38300,498],{"class":81},[57,38302,273],{"class":140},[57,38304,31126],{"class":5489},[57,38306,156],{"class":136},[57,38308,498],{"class":81},[57,38310,273],{"class":140},[57,38312,31080],{"class":5489},[57,38314,156],{"class":136},[57,38316,226],{"class":81},[57,38318,238],{"class":140},[57,38320,38321],{"class":59,"line":1929},[57,38322,38323],{"class":140},"        )\n",[57,38325,38326],{"class":59,"line":1950},[57,38327,38328],{"class":63},"        # 第二层\n",[57,38330,38331,38333,38336,38338],{"class":59,"line":1955},[57,38332,31042],{"class":81},[57,38334,38335],{"class":140},".block2",[57,38337,156],{"class":136},[57,38339,38206],{"class":140},[57,38341,38342,38344,38346,38348,38350,38352,38354,38356,38358,38360,38362,38364,38366,38368,38370,38372,38374],{"class":59,"line":1969},[57,38343,38211],{"class":140},[57,38345,31053],{"class":5489},[57,38347,156],{"class":136},[57,38349,621],{"class":81},[57,38351,273],{"class":140},[57,38353,31062],{"class":5489},[57,38355,156],{"class":136},[57,38357,32267],{"class":81},[57,38359,273],{"class":140},[57,38361,31071],{"class":5489},[57,38363,156],{"class":136},[57,38365,270],{"class":81},[57,38367,273],{"class":140},[57,38369,31080],{"class":5489},[57,38371,156],{"class":136},[57,38373,635],{"class":81},[57,38375,38244],{"class":140},[57,38377,38378],{"class":59,"line":1974},[57,38379,38249],{"class":140},[57,38381,38382,38384,38386,38388,38390,38392,38394,38396,38398,38400,38402,38404,38406,38408,38410,38412,38414],{"class":59,"line":2001},[57,38383,38211],{"class":140},[57,38385,31053],{"class":5489},[57,38387,156],{"class":136},[57,38389,32267],{"class":81},[57,38391,273],{"class":140},[57,38393,31062],{"class":5489},[57,38395,156],{"class":136},[57,38397,32267],{"class":81},[57,38399,273],{"class":140},[57,38401,31071],{"class":5489},[57,38403,156],{"class":136},[57,38405,270],{"class":81},[57,38407,273],{"class":140},[57,38409,31080],{"class":5489},[57,38411,156],{"class":136},[57,38413,635],{"class":81},[57,38415,38244],{"class":140},[57,38417,38418],{"class":59,"line":2006},[57,38419,38249],{"class":140},[57,38421,38422,38424,38426,38428,38430,38432,38434,38436,38438,38440,38442,38444,38446],{"class":59,"line":2023},[57,38423,38294],{"class":140},[57,38425,31071],{"class":5489},[57,38427,156],{"class":136},[57,38429,498],{"class":81},[57,38431,273],{"class":140},[57,38433,31126],{"class":5489},[57,38435,156],{"class":136},[57,38437,498],{"class":81},[57,38439,273],{"class":140},[57,38441,31080],{"class":5489},[57,38443,156],{"class":136},[57,38445,226],{"class":81},[57,38447,238],{"class":140},[57,38449,38450],{"class":59,"line":2028},[57,38451,38323],{"class":140},[57,38453,38454],{"class":59,"line":2033},[57,38455,38456],{"class":63},"        # 第三层\n",[57,38458,38459,38461,38464,38466],{"class":59,"line":2038},[57,38460,31042],{"class":81},[57,38462,38463],{"class":140},".block3",[57,38465,156],{"class":136},[57,38467,38206],{"class":140},[57,38469,38470,38472,38474,38476,38478,38480,38482,38484,38486,38488,38490,38492,38494,38496,38498,38500,38502],{"class":59,"line":2052},[57,38471,38211],{"class":140},[57,38473,31053],{"class":5489},[57,38475,156],{"class":136},[57,38477,32267],{"class":81},[57,38479,273],{"class":140},[57,38481,31062],{"class":5489},[57,38483,156],{"class":136},[57,38485,35067],{"class":81},[57,38487,273],{"class":140},[57,38489,31071],{"class":5489},[57,38491,156],{"class":136},[57,38493,270],{"class":81},[57,38495,273],{"class":140},[57,38497,31080],{"class":5489},[57,38499,156],{"class":136},[57,38501,635],{"class":81},[57,38503,38244],{"class":140},[57,38505,38506],{"class":59,"line":2057},[57,38507,38249],{"class":140},[57,38509,38510,38512,38514,38516,38518,38520,38522,38524,38526,38528,38530,38532,38534,38536,38538,38540,38542],{"class":59,"line":2850},[57,38511,38211],{"class":140},[57,38513,31053],{"class":5489},[57,38515,156],{"class":136},[57,38517,35067],{"class":81},[57,38519,273],{"class":140},[57,38521,31062],{"class":5489},[57,38523,156],{"class":136},[57,38525,35067],{"class":81},[57,38527,273],{"class":140},[57,38529,31071],{"class":5489},[57,38531,156],{"class":136},[57,38533,270],{"class":81},[57,38535,273],{"class":140},[57,38537,31080],{"class":5489},[57,38539,156],{"class":136},[57,38541,635],{"class":81},[57,38543,38244],{"class":140},[57,38545,38546],{"class":59,"line":2864},[57,38547,38249],{"class":140},[57,38549,38550,38552,38554,38556,38558,38560,38562,38564,38566,38568,38570,38572,38574,38576,38578,38580,38582],{"class":59,"line":2872},[57,38551,38211],{"class":140},[57,38553,31053],{"class":5489},[57,38555,156],{"class":136},[57,38557,35067],{"class":81},[57,38559,273],{"class":140},[57,38561,31062],{"class":5489},[57,38563,156],{"class":136},[57,38565,35067],{"class":81},[57,38567,273],{"class":140},[57,38569,31071],{"class":5489},[57,38571,156],{"class":136},[57,38573,270],{"class":81},[57,38575,273],{"class":140},[57,38577,31080],{"class":5489},[57,38579,156],{"class":136},[57,38581,635],{"class":81},[57,38583,38244],{"class":140},[57,38585,38586],{"class":59,"line":2877},[57,38587,38249],{"class":140},[57,38589,38590,38592,38594,38596,38598,38600,38602,38604,38606,38608,38610,38612,38614],{"class":59,"line":2883},[57,38591,38294],{"class":140},[57,38593,31071],{"class":5489},[57,38595,156],{"class":136},[57,38597,498],{"class":81},[57,38599,273],{"class":140},[57,38601,31126],{"class":5489},[57,38603,156],{"class":136},[57,38605,498],{"class":81},[57,38607,273],{"class":140},[57,38609,31080],{"class":5489},[57,38611,156],{"class":136},[57,38613,226],{"class":81},[57,38615,238],{"class":140},[57,38617,38618],{"class":59,"line":2889},[57,38619,38323],{"class":140},[57,38621,38622],{"class":59,"line":2894},[57,38623,38624],{"class":63},"        # 第四层\n",[57,38626,38627,38629,38632,38634],{"class":59,"line":8221},[57,38628,31042],{"class":81},[57,38630,38631],{"class":140},".block4",[57,38633,156],{"class":136},[57,38635,38206],{"class":140},[57,38637,38638,38640,38642,38644,38646,38648,38650,38652,38655,38657,38659,38661,38663,38665,38667,38669,38671],{"class":59,"line":8245},[57,38639,38211],{"class":140},[57,38641,31053],{"class":5489},[57,38643,156],{"class":136},[57,38645,35067],{"class":81},[57,38647,273],{"class":140},[57,38649,31062],{"class":5489},[57,38651,156],{"class":136},[57,38653,38654],{"class":81},"512",[57,38656,273],{"class":140},[57,38658,31071],{"class":5489},[57,38660,156],{"class":136},[57,38662,270],{"class":81},[57,38664,273],{"class":140},[57,38666,31080],{"class":5489},[57,38668,156],{"class":136},[57,38670,635],{"class":81},[57,38672,38244],{"class":140},[57,38674,38675],{"class":59,"line":8250},[57,38676,38249],{"class":140},[57,38678,38679,38681,38683,38685,38687,38689,38691,38693,38695,38697,38699,38701,38703,38705,38707,38709,38711],{"class":59,"line":8256},[57,38680,38211],{"class":140},[57,38682,31053],{"class":5489},[57,38684,156],{"class":136},[57,38686,38654],{"class":81},[57,38688,273],{"class":140},[57,38690,31062],{"class":5489},[57,38692,156],{"class":136},[57,38694,38654],{"class":81},[57,38696,273],{"class":140},[57,38698,31071],{"class":5489},[57,38700,156],{"class":136},[57,38702,270],{"class":81},[57,38704,273],{"class":140},[57,38706,31080],{"class":5489},[57,38708,156],{"class":136},[57,38710,635],{"class":81},[57,38712,38244],{"class":140},[57,38714,38715],{"class":59,"line":8283},[57,38716,38249],{"class":140},[57,38718,38719,38721,38723,38725,38727,38729,38731,38733,38735,38737,38739,38741,38743,38745,38747,38749,38751],{"class":59,"line":8288},[57,38720,38211],{"class":140},[57,38722,31053],{"class":5489},[57,38724,156],{"class":136},[57,38726,38654],{"class":81},[57,38728,273],{"class":140},[57,38730,31062],{"class":5489},[57,38732,156],{"class":136},[57,38734,38654],{"class":81},[57,38736,273],{"class":140},[57,38738,31071],{"class":5489},[57,38740,156],{"class":136},[57,38742,270],{"class":81},[57,38744,273],{"class":140},[57,38746,31080],{"class":5489},[57,38748,156],{"class":136},[57,38750,635],{"class":81},[57,38752,38244],{"class":140},[57,38754,38755],{"class":59,"line":8294},[57,38756,38249],{"class":140},[57,38758,38759,38761,38763,38765,38767,38769,38771,38773,38775,38777,38779,38781,38783],{"class":59,"line":8306},[57,38760,38294],{"class":140},[57,38762,31071],{"class":5489},[57,38764,156],{"class":136},[57,38766,498],{"class":81},[57,38768,273],{"class":140},[57,38770,31126],{"class":5489},[57,38772,156],{"class":136},[57,38774,498],{"class":81},[57,38776,273],{"class":140},[57,38778,31080],{"class":5489},[57,38780,156],{"class":136},[57,38782,226],{"class":81},[57,38784,238],{"class":140},[57,38786,38787],{"class":59,"line":8318},[57,38788,38323],{"class":140},[57,38790,38791],{"class":59,"line":8330},[57,38792,38793],{"class":63},"        # 第五层\n",[57,38795,38796,38798,38801,38803],{"class":59,"line":9989},[57,38797,31042],{"class":81},[57,38799,38800],{"class":140},".block5",[57,38802,156],{"class":136},[57,38804,38206],{"class":140},[57,38806,38807,38809,38811,38813,38815,38817,38819,38821,38823,38825,38827,38829,38831,38833,38835,38837,38839],{"class":59,"line":10014},[57,38808,38211],{"class":140},[57,38810,31053],{"class":5489},[57,38812,156],{"class":136},[57,38814,38654],{"class":81},[57,38816,273],{"class":140},[57,38818,31062],{"class":5489},[57,38820,156],{"class":136},[57,38822,38654],{"class":81},[57,38824,273],{"class":140},[57,38826,31071],{"class":5489},[57,38828,156],{"class":136},[57,38830,270],{"class":81},[57,38832,273],{"class":140},[57,38834,31080],{"class":5489},[57,38836,156],{"class":136},[57,38838,635],{"class":81},[57,38840,38244],{"class":140},[57,38842,38843],{"class":59,"line":10037},[57,38844,38249],{"class":140},[57,38846,38847,38849,38851,38853,38855,38857,38859,38861,38863,38865,38867,38869,38871,38873,38875,38877,38879],{"class":59,"line":10061},[57,38848,38211],{"class":140},[57,38850,31053],{"class":5489},[57,38852,156],{"class":136},[57,38854,38654],{"class":81},[57,38856,273],{"class":140},[57,38858,31062],{"class":5489},[57,38860,156],{"class":136},[57,38862,38654],{"class":81},[57,38864,273],{"class":140},[57,38866,31071],{"class":5489},[57,38868,156],{"class":136},[57,38870,270],{"class":81},[57,38872,273],{"class":140},[57,38874,31080],{"class":5489},[57,38876,156],{"class":136},[57,38878,635],{"class":81},[57,38880,38244],{"class":140},[57,38882,38883],{"class":59,"line":10066},[57,38884,38249],{"class":140},[57,38886,38887,38889,38891,38893,38895,38897,38899,38901,38903,38905,38907,38909,38911,38913,38915,38917,38919],{"class":59,"line":10071},[57,38888,38211],{"class":140},[57,38890,31053],{"class":5489},[57,38892,156],{"class":136},[57,38894,38654],{"class":81},[57,38896,273],{"class":140},[57,38898,31062],{"class":5489},[57,38900,156],{"class":136},[57,38902,38654],{"class":81},[57,38904,273],{"class":140},[57,38906,31071],{"class":5489},[57,38908,156],{"class":136},[57,38910,270],{"class":81},[57,38912,273],{"class":140},[57,38914,31080],{"class":5489},[57,38916,156],{"class":136},[57,38918,635],{"class":81},[57,38920,38244],{"class":140},[57,38922,38923],{"class":59,"line":10076},[57,38924,38249],{"class":140},[57,38926,38927,38929,38931,38933,38935,38937,38939,38941,38943,38945,38947,38949,38951],{"class":59,"line":10085},[57,38928,38294],{"class":140},[57,38930,31071],{"class":5489},[57,38932,156],{"class":136},[57,38934,498],{"class":81},[57,38936,273],{"class":140},[57,38938,31126],{"class":5489},[57,38940,156],{"class":136},[57,38942,498],{"class":81},[57,38944,273],{"class":140},[57,38946,31080],{"class":5489},[57,38948,156],{"class":136},[57,38950,226],{"class":81},[57,38952,238],{"class":140},[57,38954,38955],{"class":59,"line":10090},[57,38956,38323],{"class":140},[57,38958,38959],{"class":59,"line":10096},[57,38960,38961],{"class":63},"        # 全连接层\n",[57,38963,38964,38966,38969,38971],{"class":59,"line":10117},[57,38965,31042],{"class":81},[57,38967,38968],{"class":140},".block6",[57,38970,156],{"class":136},[57,38972,38206],{"class":140},[57,38974,38975],{"class":59,"line":10123},[57,38976,38977],{"class":63},"            # 平展操作\n",[57,38979,38980],{"class":59,"line":10137},[57,38981,38982],{"class":63},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[57,38984,38985],{"class":59,"line":10143},[57,38986,38987],{"class":140},"            nn.Flatten(),\n",[57,38989,38990,38993,38995,38997,38999,39001,39003,39005,39007],{"class":59,"line":10170},[57,38991,38992],{"class":140},"            nn.Linear(",[57,38994,786],{"class":81},[57,38996,871],{"class":136},[57,38998,786],{"class":81},[57,39000,871],{"class":136},[57,39002,38654],{"class":81},[57,39004,273],{"class":140},[57,39006,35067],{"class":81},[57,39008,38244],{"class":140},[57,39010,39011],{"class":59,"line":10179},[57,39012,38249],{"class":140},[57,39014,39015,39017,39019,39021,39023],{"class":59,"line":10185},[57,39016,38992],{"class":140},[57,39018,35067],{"class":81},[57,39020,273],{"class":140},[57,39022,32267],{"class":81},[57,39024,38244],{"class":140},[57,39026,39027],{"class":59,"line":10193},[57,39028,38249],{"class":140},[57,39030,39031,39033,39035,39037,39039],{"class":59,"line":10198},[57,39032,38992],{"class":140},[57,39034,32267],{"class":81},[57,39036,273],{"class":140},[57,39038,862],{"class":81},[57,39040,238],{"class":140},[57,39042,39043],{"class":59,"line":16876},[57,39044,38323],{"class":140},[57,39046,39047],{"class":59,"line":16882},[57,39048,2673],{"emptyLinePlaceholder":350},[57,39050,39051],{"class":59,"line":16905},[57,39052,39053],{"class":63},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[57,39055,39056],{"class":59,"line":16911},[57,39057,39058],{"class":63},"        # 循环遍历模型\n",[57,39060,39061,39063,39066,39068,39071],{"class":59,"line":16934},[57,39062,3676],{"class":136},[57,39064,39065],{"class":140}," m ",[57,39067,26312],{"class":136},[57,39069,39070],{"class":81}," self",[57,39072,39073],{"class":140},".modules():\n",[57,39075,39076],{"class":59,"line":16948},[57,39077,39078],{"class":63},"            # print(m)\n",[57,39080,39081,39083,39086],{"class":59,"line":16968},[57,39082,4915],{"class":136},[57,39084,39085],{"class":81}," isinstance",[57,39087,39088],{"class":140},"(m,nn.Conv2d):\n",[57,39090,39091],{"class":59,"line":16974},[57,39092,39093],{"class":63},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[57,39095,39096,39099,39102,39104,39107],{"class":59,"line":16985},[57,39097,39098],{"class":140},"                nn.init.kaiming_normal_(m.weight,",[57,39100,39101],{"class":5489},"nonlinearity",[57,39103,156],{"class":136},[57,39105,39106],{"class":74},"'relu'",[57,39108,238],{"class":140},[57,39110,39111],{"class":59,"line":17008},[57,39112,39113],{"class":63},"                # 判断b参数是否存在\n",[57,39115,39116,39119,39122,39125,39128,39131],{"class":59,"line":17030},[57,39117,39118],{"class":136},"                if",[57,39120,39121],{"class":140}," m.bias ",[57,39123,39124],{"class":136},"is",[57,39126,39127],{"class":136}," not",[57,39129,39130],{"class":81}," None",[57,39132,4012],{"class":140},[57,39134,39135],{"class":59,"line":17035},[57,39136,39137],{"class":63},"                    # 如果参数不存在的化初始化b=0\n",[57,39139,39140,39143,39145],{"class":59,"line":17041},[57,39141,39142],{"class":140},"                    nn.init.constant_(m.bias,",[57,39144,226],{"class":81},[57,39146,238],{"class":140},[57,39148,39149],{"class":59,"line":17055},[57,39150,39151],{"class":63},"            # 全连接层初始化\n",[57,39153,39154,39157,39159],{"class":59,"line":17068},[57,39155,39156],{"class":136},"            elif",[57,39158,39085],{"class":81},[57,39160,39161],{"class":140},"(m,nn.Linear):\n",[57,39163,39164],{"class":59,"line":17073},[57,39165,39166],{"class":63},"                # 这个初始化方法是利用的是正太分布的方式\n",[57,39168,39169],{"class":59,"line":17087},[57,39170,39171],{"class":63},"                # 均值为0，方差为0.01\n",[57,39173,39174,39177,39179,39181,39184],{"class":59,"line":17092},[57,39175,39176],{"class":140},"                nn.init.normal_(m.weight,",[57,39178,226],{"class":81},[57,39180,273],{"class":140},[57,39182,39183],{"class":81},"0.01",[57,39185,238],{"class":140},[57,39187,39188],{"class":59,"line":17098},[57,39189,39190],{"class":63},"                # 初始化b参数\n",[57,39192,39193,39195,39197,39199,39201,39203],{"class":59,"line":17103},[57,39194,39118],{"class":136},[57,39196,39121],{"class":140},[57,39198,39124],{"class":136},[57,39200,39127],{"class":136},[57,39202,39130],{"class":81},[57,39204,4012],{"class":140},[57,39206,39207,39209,39211],{"class":59,"line":17117},[57,39208,39142],{"class":140},[57,39210,226],{"class":81},[57,39212,238],{"class":140},[57,39214,39215],{"class":59,"line":17122},[57,39216,2673],{"emptyLinePlaceholder":350},[57,39218,39219],{"class":59,"line":17127},[57,39220,35362],{"class":63},[57,39222,39223,39225,39227],{"class":59,"line":17141},[57,39224,30998],{"class":136},[57,39226,31290],{"class":70},[57,39228,31293],{"class":140},[57,39230,39231,39233,39235,39237],{"class":59,"line":17153},[57,39232,31298],{"class":140},[57,39234,156],{"class":136},[57,39236,31020],{"class":81},[57,39238,39239],{"class":140},".block1(x)\n",[57,39241,39242,39244,39246,39248],{"class":59,"line":17158},[57,39243,31298],{"class":140},[57,39245,156],{"class":136},[57,39247,31020],{"class":81},[57,39249,39250],{"class":140},".block2(x)\n",[57,39252,39253,39255,39257,39259],{"class":59,"line":17171},[57,39254,31298],{"class":140},[57,39256,156],{"class":136},[57,39258,31020],{"class":81},[57,39260,39261],{"class":140},".block3(x)\n",[57,39263,39264,39266,39268,39270],{"class":59,"line":17176},[57,39265,31298],{"class":140},[57,39267,156],{"class":136},[57,39269,31020],{"class":81},[57,39271,39272],{"class":140},".block4(x)\n",[57,39274,39275,39277,39279,39281],{"class":59,"line":17181},[57,39276,31298],{"class":140},[57,39278,156],{"class":136},[57,39280,31020],{"class":81},[57,39282,39283],{"class":140},".block5(x)\n",[57,39285,39286,39288,39290,39292],{"class":59,"line":17186},[57,39287,31298],{"class":140},[57,39289,156],{"class":136},[57,39291,31020],{"class":81},[57,39293,39294],{"class":140},".block6(x)\n",[57,39296,39297,39299],{"class":59,"line":17199},[57,39298,15024],{"class":136},[57,39300,31406],{"class":140},[57,39302,39303],{"class":59,"line":17204},[57,39304,2673],{"emptyLinePlaceholder":350},[57,39306,39307],{"class":59,"line":32830},[57,39308,39309],{"class":63},"# 验证模型\n",[57,39311,39312,39314,39316,39318,39321],{"class":59,"line":32836},[57,39313,1813],{"class":136},[57,39315,31417],{"class":81},[57,39317,3222],{"class":136},[57,39319,39320],{"class":74},"'__main__'",[57,39322,4012],{"class":140},[57,39324,39325,39327,39329,39331,39333,39335,39337,39339,39341],{"class":59,"line":32842},[57,39326,31434],{"class":140},[57,39328,156],{"class":136},[57,39330,205],{"class":140},[57,39332,31441],{"class":74},[57,39334,211],{"class":136},[57,39336,31446],{"class":140},[57,39338,232],{"class":136},[57,39340,235],{"class":74},[57,39342,238],{"class":140},[57,39344,39345,39347],{"class":59,"line":32848},[57,39346,31496],{"class":81},[57,39348,246],{"class":140},[57,39350,39351,39353,39355],{"class":59,"line":32854},[57,39352,31486],{"class":140},[57,39354,156],{"class":136},[57,39356,39357],{"class":140},"VGG16().to(device)\n",[57,39359,39360,39362,39364,39366,39368,39370,39372,39374],{"class":59,"line":32865},[57,39361,31496],{"class":81},[57,39363,31499],{"class":140},[57,39365,635],{"class":81},[57,39367,273],{"class":140},[57,39369,31698],{"class":81},[57,39371,273],{"class":140},[57,39373,31698],{"class":81},[57,39375,31512],{"class":140},[377,39377,39378],{"start":67},[380,39379,39380],{},"训练代码",[14,39382,39383],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,39385,39386],{},"解决方式:",[14,39388,39389],{},"①权重初始化",[49,39391,39393],{"className":122,"code":39392,"language":124,"meta":46,"style":46},"# 权重初始化,保证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",[28,39394,39395,39400,39405,39417,39422,39430,39435,39448,39453,39467,39472,39481,39486,39495,39500,39505,39518,39523,39537],{"__ignoreMap":46},[57,39396,39397],{"class":59,"line":60},[57,39398,39399],{"class":63},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[57,39401,39402],{"class":59,"line":67},[57,39403,39404],{"class":63},"# 循环遍历模型\n",[57,39406,39407,39409,39411,39413,39415],{"class":59,"line":144},[57,39408,3298],{"class":136},[57,39410,39065],{"class":140},[57,39412,26312],{"class":136},[57,39414,39070],{"class":81},[57,39416,39073],{"class":140},[57,39418,39419],{"class":59,"line":150},[57,39420,39421],{"class":63},"    # print(m)\n",[57,39423,39424,39426,39428],{"class":59,"line":162},[57,39425,3374],{"class":136},[57,39427,39085],{"class":81},[57,39429,39088],{"class":140},[57,39431,39432],{"class":59,"line":180},[57,39433,39434],{"class":63},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[57,39436,39437,39440,39442,39444,39446],{"class":59,"line":186},[57,39438,39439],{"class":140},"        nn.init.kaiming_normal_(m.weight,",[57,39441,39101],{"class":5489},[57,39443,156],{"class":136},[57,39445,39106],{"class":74},[57,39447,238],{"class":140},[57,39449,39450],{"class":59,"line":197},[57,39451,39452],{"class":63},"        # 判断b参数是否存在\n",[57,39454,39455,39457,39459,39461,39463,39465],{"class":59,"line":241},[57,39456,2770],{"class":136},[57,39458,39121],{"class":140},[57,39460,39124],{"class":136},[57,39462,39127],{"class":136},[57,39464,39130],{"class":81},[57,39466,4012],{"class":140},[57,39468,39469],{"class":59,"line":249},[57,39470,39471],{"class":63},"            # 如果参数不存在的化初始化b=0\n",[57,39473,39474,39477,39479],{"class":59,"line":262},[57,39475,39476],{"class":140},"            nn.init.constant_(m.bias,",[57,39478,226],{"class":81},[57,39480,238],{"class":140},[57,39482,39483],{"class":59,"line":281},[57,39484,39485],{"class":63},"    # 全连接层初始化\n",[57,39487,39488,39491,39493],{"class":59,"line":287},[57,39489,39490],{"class":136},"    elif",[57,39492,39085],{"class":81},[57,39494,39161],{"class":140},[57,39496,39497],{"class":59,"line":298},[57,39498,39499],{"class":63},"        # 这个初始化方法是利用的是正太分布的方式\n",[57,39501,39502],{"class":59,"line":311},[57,39503,39504],{"class":63},"        # 均值为0，方差为0.01\n",[57,39506,39507,39510,39512,39514,39516],{"class":59,"line":322},[57,39508,39509],{"class":140},"        nn.init.normal_(m.weight,",[57,39511,226],{"class":81},[57,39513,273],{"class":140},[57,39515,39183],{"class":81},[57,39517,238],{"class":140},[57,39519,39520],{"class":59,"line":1929},[57,39521,39522],{"class":63},"        # 初始化b参数\n",[57,39524,39525,39527,39529,39531,39533,39535],{"class":59,"line":1950},[57,39526,2770],{"class":136},[57,39528,39121],{"class":140},[57,39530,39124],{"class":136},[57,39532,39127],{"class":136},[57,39534,39130],{"class":81},[57,39536,4012],{"class":140},[57,39538,39539,39541,39543],{"class":59,"line":1955},[57,39540,39476],{"class":140},[57,39542,226],{"class":81},[57,39544,238],{"class":140},[14,39546,39547],{},"②尽可能地增加批次",[14,39549,39550],{},"训练完整代码：",[49,39552,39553],{"className":122,"code":38096,"language":124,"meta":46,"style":46},[28,39554,39555,39561,39571,39581,39591,39595,39611,39619,39637,39641,39645,39655,39691,39695,39731,39735,39763,39767,39771,39781,39817,39821,39857,39861,39889,39893,39897,39907,39943,39947,39983,39987,40023,40027,40055,40059,40063,40073,40109,40113,40149,40153,40189,40193,40221,40225,40229,40239,40275,40279,40315,40319,40355,40359,40387,40391,40395,40405,40409,40413,40417,40437,40441,40453,40457,40469,40473,40477,40481,40485,40497,40501,40509,40513,40525,40529,40543,40547,40555,40559,40567,40571,40575,40587,40591,40605,40613,40617,40621,40629,40639,40649,40659,40669,40679,40689,40695,40699,40703,40715,40735,40741,40749],{"__ignoreMap":46},[57,39556,39557,39559],{"class":59,"line":60},[57,39558,137],{"class":136},[57,39560,141],{"class":140},[57,39562,39563,39565,39567,39569],{"class":59,"line":67},[57,39564,30934],{"class":136},[57,39566,38111],{"class":140},[57,39568,137],{"class":136},[57,39570,38116],{"class":140},[57,39572,39573,39575,39577,39579],{"class":59,"line":144},[57,39574,30934],{"class":136},[57,39576,30937],{"class":140},[57,39578,137],{"class":136},[57,39580,30942],{"class":140},[57,39582,39583,39585,39587,39589],{"class":59,"line":150},[57,39584,30934],{"class":136},[57,39586,30954],{"class":140},[57,39588,137],{"class":136},[57,39590,30959],{"class":140},[57,39592,39593],{"class":59,"line":162},[57,39594,2673],{"emptyLinePlaceholder":350},[57,39596,39597,39599,39601,39603,39605,39607,39609],{"class":59,"line":180},[57,39598,14966],{"class":136},[57,39600,38147],{"class":70},[57,39602,168],{"class":140},[57,39604,30975],{"class":70},[57,39606,974],{"class":140},[57,39608,30980],{"class":70},[57,39610,30983],{"class":140},[57,39612,39613,39615,39617],{"class":59,"line":186},[57,39614,30998],{"class":136},[57,39616,31001],{"class":81},[57,39618,31004],{"class":140},[57,39620,39621,39623,39625,39627,39629,39631,39633,39635],{"class":59,"line":197},[57,39622,31014],{"class":81},[57,39624,168],{"class":140},[57,39626,38174],{"class":81},[57,39628,12708],{"class":140},[57,39630,31020],{"class":81},[57,39632,31023],{"class":140},[57,39634,31026],{"class":81},[57,39636,2249],{"class":140},[57,39638,39639],{"class":59,"line":241},[57,39640,38189],{"class":63},[57,39642,39643],{"class":59,"line":249},[57,39644,38194],{"class":63},[57,39646,39647,39649,39651,39653],{"class":59,"line":262},[57,39648,31042],{"class":81},[57,39650,38201],{"class":140},[57,39652,156],{"class":136},[57,39654,38206],{"class":140},[57,39656,39657,39659,39661,39663,39665,39667,39669,39671,39673,39675,39677,39679,39681,39683,39685,39687,39689],{"class":59,"line":281},[57,39658,38211],{"class":140},[57,39660,31053],{"class":5489},[57,39662,156],{"class":136},[57,39664,635],{"class":81},[57,39666,273],{"class":140},[57,39668,31062],{"class":5489},[57,39670,156],{"class":136},[57,39672,621],{"class":81},[57,39674,273],{"class":140},[57,39676,31071],{"class":5489},[57,39678,156],{"class":136},[57,39680,270],{"class":81},[57,39682,273],{"class":140},[57,39684,31080],{"class":5489},[57,39686,156],{"class":136},[57,39688,635],{"class":81},[57,39690,38244],{"class":140},[57,39692,39693],{"class":59,"line":287},[57,39694,38249],{"class":140},[57,39696,39697,39699,39701,39703,39705,39707,39709,39711,39713,39715,39717,39719,39721,39723,39725,39727,39729],{"class":59,"line":298},[57,39698,38211],{"class":140},[57,39700,31053],{"class":5489},[57,39702,156],{"class":136},[57,39704,621],{"class":81},[57,39706,273],{"class":140},[57,39708,31062],{"class":5489},[57,39710,156],{"class":136},[57,39712,621],{"class":81},[57,39714,273],{"class":140},[57,39716,31071],{"class":5489},[57,39718,156],{"class":136},[57,39720,270],{"class":81},[57,39722,273],{"class":140},[57,39724,31080],{"class":5489},[57,39726,156],{"class":136},[57,39728,635],{"class":81},[57,39730,38244],{"class":140},[57,39732,39733],{"class":59,"line":311},[57,39734,38249],{"class":140},[57,39736,39737,39739,39741,39743,39745,39747,39749,39751,39753,39755,39757,39759,39761],{"class":59,"line":322},[57,39738,38294],{"class":140},[57,39740,31071],{"class":5489},[57,39742,156],{"class":136},[57,39744,498],{"class":81},[57,39746,273],{"class":140},[57,39748,31126],{"class":5489},[57,39750,156],{"class":136},[57,39752,498],{"class":81},[57,39754,273],{"class":140},[57,39756,31080],{"class":5489},[57,39758,156],{"class":136},[57,39760,226],{"class":81},[57,39762,238],{"class":140},[57,39764,39765],{"class":59,"line":1929},[57,39766,38323],{"class":140},[57,39768,39769],{"class":59,"line":1950},[57,39770,38328],{"class":63},[57,39772,39773,39775,39777,39779],{"class":59,"line":1955},[57,39774,31042],{"class":81},[57,39776,38335],{"class":140},[57,39778,156],{"class":136},[57,39780,38206],{"class":140},[57,39782,39783,39785,39787,39789,39791,39793,39795,39797,39799,39801,39803,39805,39807,39809,39811,39813,39815],{"class":59,"line":1969},[57,39784,38211],{"class":140},[57,39786,31053],{"class":5489},[57,39788,156],{"class":136},[57,39790,621],{"class":81},[57,39792,273],{"class":140},[57,39794,31062],{"class":5489},[57,39796,156],{"class":136},[57,39798,32267],{"class":81},[57,39800,273],{"class":140},[57,39802,31071],{"class":5489},[57,39804,156],{"class":136},[57,39806,270],{"class":81},[57,39808,273],{"class":140},[57,39810,31080],{"class":5489},[57,39812,156],{"class":136},[57,39814,635],{"class":81},[57,39816,38244],{"class":140},[57,39818,39819],{"class":59,"line":1974},[57,39820,38249],{"class":140},[57,39822,39823,39825,39827,39829,39831,39833,39835,39837,39839,39841,39843,39845,39847,39849,39851,39853,39855],{"class":59,"line":2001},[57,39824,38211],{"class":140},[57,39826,31053],{"class":5489},[57,39828,156],{"class":136},[57,39830,32267],{"class":81},[57,39832,273],{"class":140},[57,39834,31062],{"class":5489},[57,39836,156],{"class":136},[57,39838,32267],{"class":81},[57,39840,273],{"class":140},[57,39842,31071],{"class":5489},[57,39844,156],{"class":136},[57,39846,270],{"class":81},[57,39848,273],{"class":140},[57,39850,31080],{"class":5489},[57,39852,156],{"class":136},[57,39854,635],{"class":81},[57,39856,38244],{"class":140},[57,39858,39859],{"class":59,"line":2006},[57,39860,38249],{"class":140},[57,39862,39863,39865,39867,39869,39871,39873,39875,39877,39879,39881,39883,39885,39887],{"class":59,"line":2023},[57,39864,38294],{"class":140},[57,39866,31071],{"class":5489},[57,39868,156],{"class":136},[57,39870,498],{"class":81},[57,39872,273],{"class":140},[57,39874,31126],{"class":5489},[57,39876,156],{"class":136},[57,39878,498],{"class":81},[57,39880,273],{"class":140},[57,39882,31080],{"class":5489},[57,39884,156],{"class":136},[57,39886,226],{"class":81},[57,39888,238],{"class":140},[57,39890,39891],{"class":59,"line":2028},[57,39892,38323],{"class":140},[57,39894,39895],{"class":59,"line":2033},[57,39896,38456],{"class":63},[57,39898,39899,39901,39903,39905],{"class":59,"line":2038},[57,39900,31042],{"class":81},[57,39902,38463],{"class":140},[57,39904,156],{"class":136},[57,39906,38206],{"class":140},[57,39908,39909,39911,39913,39915,39917,39919,39921,39923,39925,39927,39929,39931,39933,39935,39937,39939,39941],{"class":59,"line":2052},[57,39910,38211],{"class":140},[57,39912,31053],{"class":5489},[57,39914,156],{"class":136},[57,39916,32267],{"class":81},[57,39918,273],{"class":140},[57,39920,31062],{"class":5489},[57,39922,156],{"class":136},[57,39924,35067],{"class":81},[57,39926,273],{"class":140},[57,39928,31071],{"class":5489},[57,39930,156],{"class":136},[57,39932,270],{"class":81},[57,39934,273],{"class":140},[57,39936,31080],{"class":5489},[57,39938,156],{"class":136},[57,39940,635],{"class":81},[57,39942,38244],{"class":140},[57,39944,39945],{"class":59,"line":2057},[57,39946,38249],{"class":140},[57,39948,39949,39951,39953,39955,39957,39959,39961,39963,39965,39967,39969,39971,39973,39975,39977,39979,39981],{"class":59,"line":2850},[57,39950,38211],{"class":140},[57,39952,31053],{"class":5489},[57,39954,156],{"class":136},[57,39956,35067],{"class":81},[57,39958,273],{"class":140},[57,39960,31062],{"class":5489},[57,39962,156],{"class":136},[57,39964,35067],{"class":81},[57,39966,273],{"class":140},[57,39968,31071],{"class":5489},[57,39970,156],{"class":136},[57,39972,270],{"class":81},[57,39974,273],{"class":140},[57,39976,31080],{"class":5489},[57,39978,156],{"class":136},[57,39980,635],{"class":81},[57,39982,38244],{"class":140},[57,39984,39985],{"class":59,"line":2864},[57,39986,38249],{"class":140},[57,39988,39989,39991,39993,39995,39997,39999,40001,40003,40005,40007,40009,40011,40013,40015,40017,40019,40021],{"class":59,"line":2872},[57,39990,38211],{"class":140},[57,39992,31053],{"class":5489},[57,39994,156],{"class":136},[57,39996,35067],{"class":81},[57,39998,273],{"class":140},[57,40000,31062],{"class":5489},[57,40002,156],{"class":136},[57,40004,35067],{"class":81},[57,40006,273],{"class":140},[57,40008,31071],{"class":5489},[57,40010,156],{"class":136},[57,40012,270],{"class":81},[57,40014,273],{"class":140},[57,40016,31080],{"class":5489},[57,40018,156],{"class":136},[57,40020,635],{"class":81},[57,40022,38244],{"class":140},[57,40024,40025],{"class":59,"line":2877},[57,40026,38249],{"class":140},[57,40028,40029,40031,40033,40035,40037,40039,40041,40043,40045,40047,40049,40051,40053],{"class":59,"line":2883},[57,40030,38294],{"class":140},[57,40032,31071],{"class":5489},[57,40034,156],{"class":136},[57,40036,498],{"class":81},[57,40038,273],{"class":140},[57,40040,31126],{"class":5489},[57,40042,156],{"class":136},[57,40044,498],{"class":81},[57,40046,273],{"class":140},[57,40048,31080],{"class":5489},[57,40050,156],{"class":136},[57,40052,226],{"class":81},[57,40054,238],{"class":140},[57,40056,40057],{"class":59,"line":2889},[57,40058,38323],{"class":140},[57,40060,40061],{"class":59,"line":2894},[57,40062,38624],{"class":63},[57,40064,40065,40067,40069,40071],{"class":59,"line":8221},[57,40066,31042],{"class":81},[57,40068,38631],{"class":140},[57,40070,156],{"class":136},[57,40072,38206],{"class":140},[57,40074,40075,40077,40079,40081,40083,40085,40087,40089,40091,40093,40095,40097,40099,40101,40103,40105,40107],{"class":59,"line":8245},[57,40076,38211],{"class":140},[57,40078,31053],{"class":5489},[57,40080,156],{"class":136},[57,40082,35067],{"class":81},[57,40084,273],{"class":140},[57,40086,31062],{"class":5489},[57,40088,156],{"class":136},[57,40090,38654],{"class":81},[57,40092,273],{"class":140},[57,40094,31071],{"class":5489},[57,40096,156],{"class":136},[57,40098,270],{"class":81},[57,40100,273],{"class":140},[57,40102,31080],{"class":5489},[57,40104,156],{"class":136},[57,40106,635],{"class":81},[57,40108,38244],{"class":140},[57,40110,40111],{"class":59,"line":8250},[57,40112,38249],{"class":140},[57,40114,40115,40117,40119,40121,40123,40125,40127,40129,40131,40133,40135,40137,40139,40141,40143,40145,40147],{"class":59,"line":8256},[57,40116,38211],{"class":140},[57,40118,31053],{"class":5489},[57,40120,156],{"class":136},[57,40122,38654],{"class":81},[57,40124,273],{"class":140},[57,40126,31062],{"class":5489},[57,40128,156],{"class":136},[57,40130,38654],{"class":81},[57,40132,273],{"class":140},[57,40134,31071],{"class":5489},[57,40136,156],{"class":136},[57,40138,270],{"class":81},[57,40140,273],{"class":140},[57,40142,31080],{"class":5489},[57,40144,156],{"class":136},[57,40146,635],{"class":81},[57,40148,38244],{"class":140},[57,40150,40151],{"class":59,"line":8283},[57,40152,38249],{"class":140},[57,40154,40155,40157,40159,40161,40163,40165,40167,40169,40171,40173,40175,40177,40179,40181,40183,40185,40187],{"class":59,"line":8288},[57,40156,38211],{"class":140},[57,40158,31053],{"class":5489},[57,40160,156],{"class":136},[57,40162,38654],{"class":81},[57,40164,273],{"class":140},[57,40166,31062],{"class":5489},[57,40168,156],{"class":136},[57,40170,38654],{"class":81},[57,40172,273],{"class":140},[57,40174,31071],{"class":5489},[57,40176,156],{"class":136},[57,40178,270],{"class":81},[57,40180,273],{"class":140},[57,40182,31080],{"class":5489},[57,40184,156],{"class":136},[57,40186,635],{"class":81},[57,40188,38244],{"class":140},[57,40190,40191],{"class":59,"line":8294},[57,40192,38249],{"class":140},[57,40194,40195,40197,40199,40201,40203,40205,40207,40209,40211,40213,40215,40217,40219],{"class":59,"line":8306},[57,40196,38294],{"class":140},[57,40198,31071],{"class":5489},[57,40200,156],{"class":136},[57,40202,498],{"class":81},[57,40204,273],{"class":140},[57,40206,31126],{"class":5489},[57,40208,156],{"class":136},[57,40210,498],{"class":81},[57,40212,273],{"class":140},[57,40214,31080],{"class":5489},[57,40216,156],{"class":136},[57,40218,226],{"class":81},[57,40220,238],{"class":140},[57,40222,40223],{"class":59,"line":8318},[57,40224,38323],{"class":140},[57,40226,40227],{"class":59,"line":8330},[57,40228,38793],{"class":63},[57,40230,40231,40233,40235,40237],{"class":59,"line":9989},[57,40232,31042],{"class":81},[57,40234,38800],{"class":140},[57,40236,156],{"class":136},[57,40238,38206],{"class":140},[57,40240,40241,40243,40245,40247,40249,40251,40253,40255,40257,40259,40261,40263,40265,40267,40269,40271,40273],{"class":59,"line":10014},[57,40242,38211],{"class":140},[57,40244,31053],{"class":5489},[57,40246,156],{"class":136},[57,40248,38654],{"class":81},[57,40250,273],{"class":140},[57,40252,31062],{"class":5489},[57,40254,156],{"class":136},[57,40256,38654],{"class":81},[57,40258,273],{"class":140},[57,40260,31071],{"class":5489},[57,40262,156],{"class":136},[57,40264,270],{"class":81},[57,40266,273],{"class":140},[57,40268,31080],{"class":5489},[57,40270,156],{"class":136},[57,40272,635],{"class":81},[57,40274,38244],{"class":140},[57,40276,40277],{"class":59,"line":10037},[57,40278,38249],{"class":140},[57,40280,40281,40283,40285,40287,40289,40291,40293,40295,40297,40299,40301,40303,40305,40307,40309,40311,40313],{"class":59,"line":10061},[57,40282,38211],{"class":140},[57,40284,31053],{"class":5489},[57,40286,156],{"class":136},[57,40288,38654],{"class":81},[57,40290,273],{"class":140},[57,40292,31062],{"class":5489},[57,40294,156],{"class":136},[57,40296,38654],{"class":81},[57,40298,273],{"class":140},[57,40300,31071],{"class":5489},[57,40302,156],{"class":136},[57,40304,270],{"class":81},[57,40306,273],{"class":140},[57,40308,31080],{"class":5489},[57,40310,156],{"class":136},[57,40312,635],{"class":81},[57,40314,38244],{"class":140},[57,40316,40317],{"class":59,"line":10066},[57,40318,38249],{"class":140},[57,40320,40321,40323,40325,40327,40329,40331,40333,40335,40337,40339,40341,40343,40345,40347,40349,40351,40353],{"class":59,"line":10071},[57,40322,38211],{"class":140},[57,40324,31053],{"class":5489},[57,40326,156],{"class":136},[57,40328,38654],{"class":81},[57,40330,273],{"class":140},[57,40332,31062],{"class":5489},[57,40334,156],{"class":136},[57,40336,38654],{"class":81},[57,40338,273],{"class":140},[57,40340,31071],{"class":5489},[57,40342,156],{"class":136},[57,40344,270],{"class":81},[57,40346,273],{"class":140},[57,40348,31080],{"class":5489},[57,40350,156],{"class":136},[57,40352,635],{"class":81},[57,40354,38244],{"class":140},[57,40356,40357],{"class":59,"line":10076},[57,40358,38249],{"class":140},[57,40360,40361,40363,40365,40367,40369,40371,40373,40375,40377,40379,40381,40383,40385],{"class":59,"line":10085},[57,40362,38294],{"class":140},[57,40364,31071],{"class":5489},[57,40366,156],{"class":136},[57,40368,498],{"class":81},[57,40370,273],{"class":140},[57,40372,31126],{"class":5489},[57,40374,156],{"class":136},[57,40376,498],{"class":81},[57,40378,273],{"class":140},[57,40380,31080],{"class":5489},[57,40382,156],{"class":136},[57,40384,226],{"class":81},[57,40386,238],{"class":140},[57,40388,40389],{"class":59,"line":10090},[57,40390,38323],{"class":140},[57,40392,40393],{"class":59,"line":10096},[57,40394,38961],{"class":63},[57,40396,40397,40399,40401,40403],{"class":59,"line":10117},[57,40398,31042],{"class":81},[57,40400,38968],{"class":140},[57,40402,156],{"class":136},[57,40404,38206],{"class":140},[57,40406,40407],{"class":59,"line":10123},[57,40408,38977],{"class":63},[57,40410,40411],{"class":59,"line":10137},[57,40412,38982],{"class":63},[57,40414,40415],{"class":59,"line":10143},[57,40416,38987],{"class":140},[57,40418,40419,40421,40423,40425,40427,40429,40431,40433,40435],{"class":59,"line":10170},[57,40420,38992],{"class":140},[57,40422,786],{"class":81},[57,40424,871],{"class":136},[57,40426,786],{"class":81},[57,40428,871],{"class":136},[57,40430,38654],{"class":81},[57,40432,273],{"class":140},[57,40434,35067],{"class":81},[57,40436,38244],{"class":140},[57,40438,40439],{"class":59,"line":10179},[57,40440,38249],{"class":140},[57,40442,40443,40445,40447,40449,40451],{"class":59,"line":10185},[57,40444,38992],{"class":140},[57,40446,35067],{"class":81},[57,40448,273],{"class":140},[57,40450,32267],{"class":81},[57,40452,38244],{"class":140},[57,40454,40455],{"class":59,"line":10193},[57,40456,38249],{"class":140},[57,40458,40459,40461,40463,40465,40467],{"class":59,"line":10198},[57,40460,38992],{"class":140},[57,40462,32267],{"class":81},[57,40464,273],{"class":140},[57,40466,862],{"class":81},[57,40468,238],{"class":140},[57,40470,40471],{"class":59,"line":16876},[57,40472,38323],{"class":140},[57,40474,40475],{"class":59,"line":16882},[57,40476,2673],{"emptyLinePlaceholder":350},[57,40478,40479],{"class":59,"line":16905},[57,40480,39053],{"class":63},[57,40482,40483],{"class":59,"line":16911},[57,40484,39058],{"class":63},[57,40486,40487,40489,40491,40493,40495],{"class":59,"line":16934},[57,40488,3676],{"class":136},[57,40490,39065],{"class":140},[57,40492,26312],{"class":136},[57,40494,39070],{"class":81},[57,40496,39073],{"class":140},[57,40498,40499],{"class":59,"line":16948},[57,40500,39078],{"class":63},[57,40502,40503,40505,40507],{"class":59,"line":16968},[57,40504,4915],{"class":136},[57,40506,39085],{"class":81},[57,40508,39088],{"class":140},[57,40510,40511],{"class":59,"line":16974},[57,40512,39093],{"class":63},[57,40514,40515,40517,40519,40521,40523],{"class":59,"line":16985},[57,40516,39098],{"class":140},[57,40518,39101],{"class":5489},[57,40520,156],{"class":136},[57,40522,39106],{"class":74},[57,40524,238],{"class":140},[57,40526,40527],{"class":59,"line":17008},[57,40528,39113],{"class":63},[57,40530,40531,40533,40535,40537,40539,40541],{"class":59,"line":17030},[57,40532,39118],{"class":136},[57,40534,39121],{"class":140},[57,40536,39124],{"class":136},[57,40538,39127],{"class":136},[57,40540,39130],{"class":81},[57,40542,4012],{"class":140},[57,40544,40545],{"class":59,"line":17035},[57,40546,39137],{"class":63},[57,40548,40549,40551,40553],{"class":59,"line":17041},[57,40550,39142],{"class":140},[57,40552,226],{"class":81},[57,40554,238],{"class":140},[57,40556,40557],{"class":59,"line":17055},[57,40558,39151],{"class":63},[57,40560,40561,40563,40565],{"class":59,"line":17068},[57,40562,39156],{"class":136},[57,40564,39085],{"class":81},[57,40566,39161],{"class":140},[57,40568,40569],{"class":59,"line":17073},[57,40570,39166],{"class":63},[57,40572,40573],{"class":59,"line":17087},[57,40574,39171],{"class":63},[57,40576,40577,40579,40581,40583,40585],{"class":59,"line":17092},[57,40578,39176],{"class":140},[57,40580,226],{"class":81},[57,40582,273],{"class":140},[57,40584,39183],{"class":81},[57,40586,238],{"class":140},[57,40588,40589],{"class":59,"line":17098},[57,40590,39190],{"class":63},[57,40592,40593,40595,40597,40599,40601,40603],{"class":59,"line":17103},[57,40594,39118],{"class":136},[57,40596,39121],{"class":140},[57,40598,39124],{"class":136},[57,40600,39127],{"class":136},[57,40602,39130],{"class":81},[57,40604,4012],{"class":140},[57,40606,40607,40609,40611],{"class":59,"line":17117},[57,40608,39142],{"class":140},[57,40610,226],{"class":81},[57,40612,238],{"class":140},[57,40614,40615],{"class":59,"line":17122},[57,40616,2673],{"emptyLinePlaceholder":350},[57,40618,40619],{"class":59,"line":17127},[57,40620,35362],{"class":63},[57,40622,40623,40625,40627],{"class":59,"line":17141},[57,40624,30998],{"class":136},[57,40626,31290],{"class":70},[57,40628,31293],{"class":140},[57,40630,40631,40633,40635,40637],{"class":59,"line":17153},[57,40632,31298],{"class":140},[57,40634,156],{"class":136},[57,40636,31020],{"class":81},[57,40638,39239],{"class":140},[57,40640,40641,40643,40645,40647],{"class":59,"line":17158},[57,40642,31298],{"class":140},[57,40644,156],{"class":136},[57,40646,31020],{"class":81},[57,40648,39250],{"class":140},[57,40650,40651,40653,40655,40657],{"class":59,"line":17171},[57,40652,31298],{"class":140},[57,40654,156],{"class":136},[57,40656,31020],{"class":81},[57,40658,39261],{"class":140},[57,40660,40661,40663,40665,40667],{"class":59,"line":17176},[57,40662,31298],{"class":140},[57,40664,156],{"class":136},[57,40666,31020],{"class":81},[57,40668,39272],{"class":140},[57,40670,40671,40673,40675,40677],{"class":59,"line":17181},[57,40672,31298],{"class":140},[57,40674,156],{"class":136},[57,40676,31020],{"class":81},[57,40678,39283],{"class":140},[57,40680,40681,40683,40685,40687],{"class":59,"line":17186},[57,40682,31298],{"class":140},[57,40684,156],{"class":136},[57,40686,31020],{"class":81},[57,40688,39294],{"class":140},[57,40690,40691,40693],{"class":59,"line":17199},[57,40692,15024],{"class":136},[57,40694,31406],{"class":140},[57,40696,40697],{"class":59,"line":17204},[57,40698,2673],{"emptyLinePlaceholder":350},[57,40700,40701],{"class":59,"line":32830},[57,40702,39309],{"class":63},[57,40704,40705,40707,40709,40711,40713],{"class":59,"line":32836},[57,40706,1813],{"class":136},[57,40708,31417],{"class":81},[57,40710,3222],{"class":136},[57,40712,39320],{"class":74},[57,40714,4012],{"class":140},[57,40716,40717,40719,40721,40723,40725,40727,40729,40731,40733],{"class":59,"line":32842},[57,40718,31434],{"class":140},[57,40720,156],{"class":136},[57,40722,205],{"class":140},[57,40724,31441],{"class":74},[57,40726,211],{"class":136},[57,40728,31446],{"class":140},[57,40730,232],{"class":136},[57,40732,235],{"class":74},[57,40734,238],{"class":140},[57,40736,40737,40739],{"class":59,"line":32848},[57,40738,31496],{"class":81},[57,40740,246],{"class":140},[57,40742,40743,40745,40747],{"class":59,"line":32854},[57,40744,31486],{"class":140},[57,40746,156],{"class":136},[57,40748,39357],{"class":140},[57,40750,40751,40753,40755,40757,40759,40761,40763,40765],{"class":59,"line":32865},[57,40752,31496],{"class":81},[57,40754,31499],{"class":140},[57,40756,635],{"class":81},[57,40758,273],{"class":140},[57,40760,31698],{"class":81},[57,40762,273],{"class":140},[57,40764,31698],{"class":81},[57,40766,31512],{"class":140},[377,40768,40769],{"start":144},[380,40770,40771],{},"测试代码",[49,40773,40775],{"className":122,"code":40774,"language":124,"meta":46,"style":46},"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",[28,40776,40777,40783,40793,40803,40807,40817,40828,40832,40836,40840,40848,40864,40874,40890,40900,40914,40918,40928,40938,40948,40954,40958,40962,40970,40974,40990,40998,41002,41006,41014,41022,41026,41030,41034,41038,41044,41048,41058,41066,41074,41078,41082,41086,41094,41098,41114,41118,41122,41126,41138,41142,41154,41158,41162,41174,41178,41188,41192,41196,41208,41212,41221,41225,41229,41237,41241,41249,41253,41257,41261,41265,41269,41285,41293,41297,41301,41349,41355,41359,41369,41377,41385,41389,41393,41397,41401,41409,41413,41429,41433,41441,41449],{"__ignoreMap":46},[57,40778,40779,40781],{"class":59,"line":60},[57,40780,137],{"class":136},[57,40782,141],{"class":140},[57,40784,40785,40787,40789,40791],{"class":59,"line":67},[57,40786,137],{"class":136},[57,40788,31612],{"class":140},[57,40790,31580],{"class":136},[57,40792,31617],{"class":140},[57,40794,40795,40797,40799,40801],{"class":59,"line":144},[57,40796,30934],{"class":136},[57,40798,31595],{"class":140},[57,40800,137],{"class":136},[57,40802,31600],{"class":140},[57,40804,40805],{"class":59,"line":150},[57,40806,34119],{"class":63},[57,40808,40809,40811,40813,40815],{"class":59,"line":162},[57,40810,30934],{"class":136},[57,40812,31565],{"class":140},[57,40814,137],{"class":136},[57,40816,31570],{"class":140},[57,40818,40819,40821,40823,40825],{"class":59,"line":180},[57,40820,30934],{"class":136},[57,40822,32111],{"class":140},[57,40824,137],{"class":136},[57,40826,40827],{"class":81}," VGG16\n",[57,40829,40830],{"class":59,"line":186},[57,40831,2673],{"emptyLinePlaceholder":350},[57,40833,40834],{"class":59,"line":197},[57,40835,2673],{"emptyLinePlaceholder":350},[57,40837,40838],{"class":59,"line":241},[57,40839,34148],{"class":63},[57,40841,40842,40844,40846],{"class":59,"line":249},[57,40843,32144],{"class":136},[57,40845,34155],{"class":70},[57,40847,32150],{"class":140},[57,40849,40850,40852,40854,40856,40858,40860,40862],{"class":59,"line":262},[57,40851,34162],{"class":140},[57,40853,156],{"class":136},[57,40855,31652],{"class":140},[57,40857,31655],{"class":5489},[57,40859,156],{"class":136},[57,40861,31660],{"class":74},[57,40863,31663],{"class":140},[57,40865,40866,40868,40870,40872],{"class":59,"line":281},[57,40867,34179],{"class":5489},[57,40869,156],{"class":136},[57,40871,34184],{"class":81},[57,40873,31663],{"class":140},[57,40875,40876,40878,40880,40882,40884,40886,40888],{"class":59,"line":287},[57,40877,34191],{"class":5489},[57,40879,156],{"class":136},[57,40881,31690],{"class":140},[57,40883,31693],{"class":5489},[57,40885,156],{"class":136},[57,40887,31698],{"class":81},[57,40889,31701],{"class":140},[57,40891,40892,40894,40896,40898],{"class":59,"line":298},[57,40893,34208],{"class":5489},[57,40895,156],{"class":136},[57,40897,31673],{"class":81},[57,40899,238],{"class":140},[57,40901,40902,40904,40906,40908,40910,40912],{"class":59,"line":311},[57,40903,34219],{"class":140},[57,40905,156],{"class":136},[57,40907,31731],{"class":140},[57,40909,31734],{"class":5489},[57,40911,156],{"class":136},[57,40913,34230],{"class":140},[57,40915,40916],{"class":59,"line":322},[57,40917,34235],{"class":63},[57,40919,40920,40922,40924,40926],{"class":59,"line":1929},[57,40921,34240],{"class":5489},[57,40923,156],{"class":136},[57,40925,635],{"class":81},[57,40927,31663],{"class":140},[57,40929,40930,40932,40934,40936],{"class":59,"line":1950},[57,40931,34251],{"class":5489},[57,40933,156],{"class":136},[57,40935,31673],{"class":81},[57,40937,31663],{"class":140},[57,40939,40940,40942,40944,40946],{"class":59,"line":1955},[57,40941,34262],{"class":5489},[57,40943,156],{"class":136},[57,40945,226],{"class":81},[57,40947,238],{"class":140},[57,40949,40950,40952],{"class":59,"line":1969},[57,40951,4363],{"class":136},[57,40953,34275],{"class":140},[57,40955,40956],{"class":59,"line":1974},[57,40957,2673],{"emptyLinePlaceholder":350},[57,40959,40960],{"class":59,"line":2001},[57,40961,34284],{"class":63},[57,40963,40964,40966,40968],{"class":59,"line":2006},[57,40965,32144],{"class":136},[57,40967,34291],{"class":70},[57,40969,34294],{"class":140},[57,40971,40972],{"class":59,"line":2023},[57,40973,34299],{"class":63},[57,40975,40976,40978,40980,40982,40984,40986,40988],{"class":59,"line":2028},[57,40977,31434],{"class":140},[57,40979,156],{"class":136},[57,40981,31441],{"class":74},[57,40983,211],{"class":136},[57,40985,31446],{"class":140},[57,40987,232],{"class":136},[57,40989,34316],{"class":74},[57,40991,40992,40994,40996],{"class":59,"line":2033},[57,40993,31486],{"class":140},[57,40995,156],{"class":136},[57,40997,32486],{"class":140},[57,40999,41000],{"class":59,"line":2038},[57,41001,2673],{"emptyLinePlaceholder":350},[57,41003,41004],{"class":59,"line":2052},[57,41005,34333],{"class":63},[57,41007,41008,41010,41012],{"class":59,"line":2057},[57,41009,34338],{"class":140},[57,41011,156],{"class":136},[57,41013,32539],{"class":81},[57,41015,41016,41018,41020],{"class":59,"line":2850},[57,41017,34347],{"class":140},[57,41019,156],{"class":136},[57,41021,3358],{"class":81},[57,41023,41024],{"class":59,"line":2864},[57,41025,2673],{"emptyLinePlaceholder":350},[57,41027,41028],{"class":59,"line":2872},[57,41029,34360],{"class":63},[57,41031,41032],{"class":59,"line":2877},[57,41033,34365],{"class":63},[57,41035,41036],{"class":59,"line":2883},[57,41037,34370],{"class":63},[57,41039,41040,41042],{"class":59,"line":2889},[57,41041,34375],{"class":136},[57,41043,33081],{"class":140},[57,41045,41046],{"class":59,"line":2894},[57,41047,34382],{"class":63},[57,41049,41050,41052,41054,41056],{"class":59,"line":8221},[57,41051,3676],{"class":136},[57,41053,34389],{"class":140},[57,41055,26312],{"class":136},[57,41057,34394],{"class":140},[57,41059,41060,41062,41064],{"class":59,"line":8245},[57,41061,34399],{"class":140},[57,41063,156],{"class":136},[57,41065,34404],{"class":140},[57,41067,41068,41070,41072],{"class":59,"line":8250},[57,41069,34409],{"class":140},[57,41071,156],{"class":136},[57,41073,34414],{"class":140},[57,41075,41076],{"class":59,"line":8256},[57,41077,34419],{"class":63},[57,41079,41080],{"class":59,"line":8283},[57,41081,33072],{"class":140},[57,41083,41084],{"class":59,"line":8288},[57,41085,34428],{"class":63},[57,41087,41088,41090,41092],{"class":59,"line":8294},[57,41089,32857],{"class":140},[57,41091,156],{"class":136},[57,41093,34437],{"class":140},[57,41095,41096],{"class":59,"line":8306},[57,41097,34442],{"class":63},[57,41099,41100,41102,41104,41106,41108,41110,41112],{"class":59,"line":8318},[57,41101,32874],{"class":140},[57,41103,156],{"class":136},[57,41105,32879],{"class":140},[57,41107,32882],{"class":5489},[57,41109,156],{"class":136},[57,41111,635],{"class":81},[57,41113,238],{"class":140},[57,41115,41116],{"class":59,"line":8330},[57,41117,34463],{"class":63},[57,41119,41120],{"class":59,"line":9989},[57,41121,34468],{"class":63},[57,41123,41124],{"class":59,"line":10014},[57,41125,34473],{"class":63},[57,41127,41128,41130,41132,41134,41136],{"class":59,"line":10037},[57,41129,34478],{"class":140},[57,41131,9750],{"class":136},[57,41133,32984],{"class":140},[57,41135,3222],{"class":136},[57,41137,34487],{"class":140},[57,41139,41140],{"class":59,"line":10061},[57,41141,34492],{"class":63},[57,41143,41144,41146,41148,41150,41152],{"class":59,"line":10066},[57,41145,34497],{"class":140},[57,41147,9750],{"class":136},[57,41149,34502],{"class":140},[57,41151,226],{"class":81},[57,41153,238],{"class":140},[57,41155,41156],{"class":59,"line":10071},[57,41157,2673],{"emptyLinePlaceholder":350},[57,41159,41160],{"class":59,"line":10076},[57,41161,34515],{"class":63},[57,41163,41164,41166,41168,41170,41172],{"class":59,"line":10085},[57,41165,34520],{"class":140},[57,41167,156],{"class":136},[57,41169,34525],{"class":140},[57,41171,1000],{"class":136},[57,41173,34530],{"class":140},[57,41175,41176],{"class":59,"line":10090},[57,41177,34535],{"class":63},[57,41179,41180,41182,41184,41186],{"class":59,"line":10096},[57,41181,32648],{"class":81},[57,41183,168],{"class":140},[57,41185,34544],{"class":74},[57,41187,34547],{"class":140},[57,41189,41190],{"class":59,"line":10117},[57,41191,2673],{"emptyLinePlaceholder":350},[57,41193,41194],{"class":59,"line":10123},[57,41195,34556],{"class":63},[57,41197,41198,41200,41202,41204,41206],{"class":59,"line":10137},[57,41199,1813],{"class":136},[57,41201,31417],{"class":81},[57,41203,3222],{"class":136},[57,41205,31422],{"class":74},[57,41207,4012],{"class":140},[57,41209,41210],{"class":59,"line":10143},[57,41211,34573],{"class":63},[57,41213,41214,41216,41218],{"class":59,"line":10170},[57,41215,31486],{"class":140},[57,41217,156],{"class":136},[57,41219,41220],{"class":140},"VGG16()\n",[57,41222,41223],{"class":59,"line":10179},[57,41224,34586],{"class":63},[57,41226,41227],{"class":59,"line":10185},[57,41228,34591],{"class":63},[57,41230,41231,41233,41235],{"class":59,"line":10193},[57,41232,34596],{"class":140},[57,41234,34599],{"class":74},[57,41236,259],{"class":140},[57,41238,41239],{"class":59,"line":10198},[57,41240,34606],{"class":63},[57,41242,41243,41245,41247],{"class":59,"line":16876},[57,41244,34219],{"class":140},[57,41246,156],{"class":136},[57,41248,34615],{"class":140},[57,41250,41251],{"class":59,"line":16882},[57,41252,34620],{"class":63},[57,41254,41255],{"class":59,"line":16905},[57,41256,34625],{"class":140},[57,41258,41259],{"class":59,"line":16911},[57,41260,2673],{"emptyLinePlaceholder":350},[57,41262,41263],{"class":59,"line":16934},[57,41264,34634],{"class":63},[57,41266,41267],{"class":59,"line":16948},[57,41268,34639],{"class":63},[57,41270,41271,41273,41275,41277,41279,41281,41283],{"class":59,"line":16968},[57,41272,31434],{"class":140},[57,41274,156],{"class":136},[57,41276,31441],{"class":74},[57,41278,211],{"class":136},[57,41280,31446],{"class":140},[57,41282,232],{"class":136},[57,41284,34316],{"class":74},[57,41286,41287,41289,41291],{"class":59,"line":16974},[57,41288,31486],{"class":140},[57,41290,156],{"class":136},[57,41292,32486],{"class":140},[57,41294,41295],{"class":59,"line":16985},[57,41296,34668],{"class":63},[57,41298,41299],{"class":59,"line":17008},[57,41300,34673],{"class":63},[57,41302,41303,41305,41307,41309,41311,41313,41315,41317,41319,41321,41323,41325,41327,41329,41331,41333,41335,41337,41339,41341,41343,41345,41347],{"class":59,"line":17030},[57,41304,34678],{"class":140},[57,41306,156],{"class":136},[57,41308,1306],{"class":140},[57,41310,34685],{"class":74},[57,41312,273],{"class":140},[57,41314,34690],{"class":74},[57,41316,273],{"class":140},[57,41318,34695],{"class":74},[57,41320,273],{"class":140},[57,41322,34700],{"class":74},[57,41324,273],{"class":140},[57,41326,34705],{"class":74},[57,41328,273],{"class":140},[57,41330,34710],{"class":74},[57,41332,273],{"class":140},[57,41334,34715],{"class":74},[57,41336,273],{"class":140},[57,41338,34720],{"class":74},[57,41340,273],{"class":140},[57,41342,34725],{"class":74},[57,41344,273],{"class":140},[57,41346,34730],{"class":74},[57,41348,33443],{"class":140},[57,41350,41351,41353],{"class":59,"line":17035},[57,41352,34375],{"class":136},[57,41354,33081],{"class":140},[57,41356,41357],{"class":59,"line":17041},[57,41358,34743],{"class":63},[57,41360,41361,41363,41365,41367],{"class":59,"line":17055},[57,41362,3676],{"class":136},[57,41364,34750],{"class":140},[57,41366,26312],{"class":136},[57,41368,34394],{"class":140},[57,41370,41371,41373,41375],{"class":59,"line":17068},[57,41372,32807],{"class":140},[57,41374,156],{"class":136},[57,41376,32812],{"class":140},[57,41378,41379,41381,41383],{"class":59,"line":17073},[57,41380,32822],{"class":140},[57,41382,156],{"class":136},[57,41384,32827],{"class":140},[57,41386,41387],{"class":59,"line":17087},[57,41388,2673],{"emptyLinePlaceholder":350},[57,41390,41391],{"class":59,"line":17092},[57,41392,34779],{"class":63},[57,41394,41395],{"class":59,"line":17098},[57,41396,33072],{"class":140},[57,41398,41399],{"class":59,"line":17103},[57,41400,34788],{"class":63},[57,41402,41403,41405,41407],{"class":59,"line":17117},[57,41404,32857],{"class":140},[57,41406,156],{"class":136},[57,41408,32862],{"class":140},[57,41410,41411],{"class":59,"line":17122},[57,41412,34801],{"class":63},[57,41414,41415,41417,41419,41421,41423,41425,41427],{"class":59,"line":17127},[57,41416,32874],{"class":140},[57,41418,156],{"class":136},[57,41420,32879],{"class":140},[57,41422,32882],{"class":5489},[57,41424,156],{"class":136},[57,41426,635],{"class":81},[57,41428,238],{"class":140},[57,41430,41431],{"class":59,"line":17141},[57,41432,34822],{"class":63},[57,41434,41435,41437,41439],{"class":59,"line":17153},[57,41436,34827],{"class":140},[57,41438,156],{"class":136},[57,41440,34832],{"class":140},[57,41442,41443,41445,41447],{"class":59,"line":17158},[57,41444,34837],{"class":140},[57,41446,156],{"class":136},[57,41448,34842],{"class":140},[57,41450,41451,41453,41455,41457,41459,41461,41463,41465],{"class":59,"line":17171},[57,41452,34847],{"class":81},[57,41454,168],{"class":140},[57,41456,34852],{"class":74},[57,41458,34855],{"class":140},[57,41460,34858],{"class":74},[57,41462,273],{"class":140},[57,41464,34863],{"class":74},[57,41466,34866],{"class":140},[394,41468,41470],{"id":41469},"_23googlenet","2.3.GoogLeNet",[22270,41472,41474],{"id":41473},"_231原理","2.3.1.原理",[377,41476,41477],{},[380,41478,41479],{},"网络结构",[14,41481,41482],{},[44,41483],{"alt":46,"src":41484},"\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,41486,41487],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,41489,41490],{},[44,41491],{"alt":46,"src":41492},"\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,41494,41495],{},[44,41496],{"alt":46,"src":41497},"\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,41499,41500],{},[44,41501],{"alt":46,"src":41502},"\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",[377,41504,41505],{"start":67},[380,41506,41507],{},"1x1卷积的优点",[14,41509,41510],{},[44,41511],{"alt":46,"src":41512},"\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",[377,41514,41515],{"start":144},[380,41516,41517],{},"全局平均池化层优点",[14,41519,41520],{},[44,41521],{"alt":46,"src":41522},"\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,41524,41525],{},[44,41526],{"alt":46,"src":41527},"\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",[377,41529,41530],{"start":150},[380,41531,41532],{},"参数详细描述",[14,41534,41535],{},[44,41536],{"alt":46,"src":41537},"\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,41539,41540],{},[44,41541],{"alt":46,"src":41542},"\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,41544,41545],{},[44,41546],{"alt":46,"src":41547},"\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,41549,41550],{},[44,41551],{"alt":46,"src":41552},"\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,41554,41555],{},[44,41556],{"alt":46,"src":41557},"\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,41559,41560],{},[44,41561],{"alt":46,"src":41562},"\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,41564,41565],{},[44,41566],{"alt":46,"src":41567},"\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,41569,41570],{},[44,41571],{"alt":46,"src":41572},"\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,41574,41575],{},[44,41576],{"alt":46,"src":41577},"\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,41579,41580],{},[44,41581],{"alt":46,"src":41582},"\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,41584,41585],{},[44,41586],{"alt":46,"src":41587},"\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,41589,41590],{},[44,41591],{"alt":46,"src":41592},"\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,41594,41595],{},[44,41596],{"alt":46,"src":41597},"\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,41599,41600],{},[44,41601],{"alt":46,"src":41602},"\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,41604,41605],{},[44,41606],{"alt":46,"src":41607},"\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,41609,41610],{},[44,41611],{"alt":46,"src":41612},"\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,41614,41615],{},[44,41616],{"alt":46,"src":41617},"\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,41619,41620],{},[44,41621],{"alt":46,"src":41622},"\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,41624,41625],{},[44,41626],{"alt":46,"src":41627},"\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,41629,41630],{},[44,41631],{"alt":46,"src":41632},"\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,41634,41635],{},[44,41636],{"alt":46,"src":41637},"\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",[22270,41639,41641],{"id":41640},"_232代码实现","2.3.2.代码实现",[377,41643,41644],{},[380,41645,30908],{},[14,41647,41648],{},"根据原理一步一步搭建即可",[49,41650,41652],{"className":122,"code":41651,"language":124,"meta":46,"style":46},"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",[28,41653,41654,41660,41670,41680,41684,41701,41710,41725,41735,41740,41773,41778,41815,41862,41867,41903,41950,41955,41960,41995,42027,42031,42039,42055,42079,42104,42125,42130,42145,42149,42153,42158,42175,42180,42189,42204,42215,42259,42263,42291,42295,42306,42334,42338,42375,42379,42407,42411,42422,42458,42490,42518,42522,42533,42567,42599,42631,42664,42698,42726,42730,42741,42774,42806,42820,42824,42837,42841,42846,42858,42866,42888,42893,42898,42903,42908,42913,42918,42932,42940,42949,42962,42977,42986,42990,42998,43009,43020,43031,43042,43053,43059,43063,43068,43080,43100,43109],{"__ignoreMap":46},[57,41655,41656,41658],{"class":59,"line":60},[57,41657,137],{"class":136},[57,41659,141],{"class":140},[57,41661,41662,41664,41666,41668],{"class":59,"line":67},[57,41663,30934],{"class":136},[57,41665,30937],{"class":140},[57,41667,137],{"class":136},[57,41669,30942],{"class":140},[57,41671,41672,41674,41676,41678],{"class":59,"line":144},[57,41673,30934],{"class":136},[57,41675,30954],{"class":140},[57,41677,137],{"class":136},[57,41679,30959],{"class":140},[57,41681,41682],{"class":59,"line":150},[57,41683,2673],{"emptyLinePlaceholder":350},[57,41685,41686,41688,41691,41693,41695,41697,41699],{"class":59,"line":162},[57,41687,14966],{"class":136},[57,41689,41690],{"class":70}," Inception",[57,41692,168],{"class":140},[57,41694,30975],{"class":70},[57,41696,974],{"class":140},[57,41698,30980],{"class":70},[57,41700,30983],{"class":140},[57,41702,41703,41705,41707],{"class":59,"line":180},[57,41704,30998],{"class":136},[57,41706,31001],{"class":81},[57,41708,41709],{"class":140},"(self,in_channels,c1,c2,c3,c4):\n",[57,41711,41712,41714,41717,41719,41721,41723],{"class":59,"line":186},[57,41713,31014],{"class":81},[57,41715,41716],{"class":140},"(Inception,",[57,41718,31020],{"class":81},[57,41720,31023],{"class":140},[57,41722,31026],{"class":81},[57,41724,2249],{"class":140},[57,41726,41727,41729,41731,41733],{"class":59,"line":197},[57,41728,31042],{"class":81},[57,41730,34968],{"class":140},[57,41732,156],{"class":136},[57,41734,34973],{"class":140},[57,41736,41737],{"class":59,"line":241},[57,41738,41739],{"class":63},"        # 路线1：定义1*1卷积\n",[57,41741,41742,41744,41747,41749,41751,41753,41755,41758,41760,41762,41765,41767,41769,41771],{"class":59,"line":249},[57,41743,31042],{"class":81},[57,41745,41746],{"class":140},".p1_1",[57,41748,156],{"class":136},[57,41750,31050],{"class":140},[57,41752,31053],{"class":5489},[57,41754,156],{"class":136},[57,41756,41757],{"class":140},"in_channels,",[57,41759,31062],{"class":5489},[57,41761,156],{"class":136},[57,41763,41764],{"class":140},"c1,",[57,41766,31071],{"class":5489},[57,41768,156],{"class":136},[57,41770,635],{"class":81},[57,41772,238],{"class":140},[57,41774,41775],{"class":59,"line":262},[57,41776,41777],{"class":63},"        # 路线2：定义1*1卷积和3*3\n",[57,41779,41780,41782,41785,41787,41789,41791,41793,41795,41797,41799,41802,41804,41807,41809,41811,41813],{"class":59,"line":281},[57,41781,31042],{"class":81},[57,41783,41784],{"class":140},".p2_1",[57,41786,156],{"class":136},[57,41788,31050],{"class":140},[57,41790,31053],{"class":5489},[57,41792,156],{"class":136},[57,41794,41757],{"class":140},[57,41796,31062],{"class":5489},[57,41798,156],{"class":136},[57,41800,41801],{"class":140},"c2[",[57,41803,226],{"class":81},[57,41805,41806],{"class":140},"],",[57,41808,31071],{"class":5489},[57,41810,156],{"class":136},[57,41812,635],{"class":81},[57,41814,238],{"class":140},[57,41816,41817,41819,41822,41824,41826,41828,41830,41832,41834,41836,41838,41840,41842,41844,41846,41848,41850,41852,41854,41856,41858,41860],{"class":59,"line":287},[57,41818,31042],{"class":81},[57,41820,41821],{"class":140},".p2_2",[57,41823,156],{"class":136},[57,41825,31050],{"class":140},[57,41827,31053],{"class":5489},[57,41829,156],{"class":136},[57,41831,41801],{"class":140},[57,41833,226],{"class":81},[57,41835,41806],{"class":140},[57,41837,31062],{"class":5489},[57,41839,156],{"class":136},[57,41841,41801],{"class":140},[57,41843,635],{"class":81},[57,41845,41806],{"class":140},[57,41847,31071],{"class":5489},[57,41849,156],{"class":136},[57,41851,270],{"class":81},[57,41853,273],{"class":140},[57,41855,31080],{"class":5489},[57,41857,156],{"class":136},[57,41859,635],{"class":81},[57,41861,238],{"class":140},[57,41863,41864],{"class":59,"line":298},[57,41865,41866],{"class":63},"        # 路线3：定义1*1卷积和5*5\n",[57,41868,41869,41871,41874,41876,41878,41880,41882,41884,41886,41888,41891,41893,41895,41897,41899,41901],{"class":59,"line":311},[57,41870,31042],{"class":81},[57,41872,41873],{"class":140},".p3_1",[57,41875,156],{"class":136},[57,41877,31050],{"class":140},[57,41879,31053],{"class":5489},[57,41881,156],{"class":136},[57,41883,41757],{"class":140},[57,41885,31062],{"class":5489},[57,41887,156],{"class":136},[57,41889,41890],{"class":140},"c3[",[57,41892,226],{"class":81},[57,41894,41806],{"class":140},[57,41896,31071],{"class":5489},[57,41898,156],{"class":136},[57,41900,635],{"class":81},[57,41902,238],{"class":140},[57,41904,41905,41907,41910,41912,41914,41916,41918,41920,41922,41924,41926,41928,41930,41932,41934,41936,41938,41940,41942,41944,41946,41948],{"class":59,"line":322},[57,41906,31042],{"class":81},[57,41908,41909],{"class":140},".p3_2",[57,41911,156],{"class":136},[57,41913,31050],{"class":140},[57,41915,31053],{"class":5489},[57,41917,156],{"class":136},[57,41919,41890],{"class":140},[57,41921,226],{"class":81},[57,41923,41806],{"class":140},[57,41925,31062],{"class":5489},[57,41927,156],{"class":136},[57,41929,41890],{"class":140},[57,41931,635],{"class":81},[57,41933,41806],{"class":140},[57,41935,31071],{"class":5489},[57,41937,156],{"class":136},[57,41939,736],{"class":81},[57,41941,273],{"class":140},[57,41943,31080],{"class":5489},[57,41945,156],{"class":136},[57,41947,498],{"class":81},[57,41949,238],{"class":140},[57,41951,41952],{"class":59,"line":1929},[57,41953,41954],{"class":63},"        # 路线4：定义3*3最大池化和1*1卷积\n",[57,41956,41957],{"class":59,"line":1950},[57,41958,41959],{"class":63},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[57,41961,41962,41964,41967,41969,41971,41973,41975,41977,41979,41981,41983,41985,41987,41989,41991,41993],{"class":59,"line":1955},[57,41963,31042],{"class":81},[57,41965,41966],{"class":140},".p4_1",[57,41968,156],{"class":136},[57,41970,35026],{"class":140},[57,41972,31071],{"class":5489},[57,41974,156],{"class":136},[57,41976,270],{"class":81},[57,41978,273],{"class":140},[57,41980,31126],{"class":5489},[57,41982,156],{"class":136},[57,41984,635],{"class":81},[57,41986,273],{"class":140},[57,41988,31080],{"class":5489},[57,41990,156],{"class":136},[57,41992,635],{"class":81},[57,41994,238],{"class":140},[57,41996,41997,41999,42002,42004,42006,42008,42010,42012,42014,42016,42019,42021,42023,42025],{"class":59,"line":1969},[57,41998,31042],{"class":81},[57,42000,42001],{"class":140},".p4_2",[57,42003,156],{"class":136},[57,42005,31050],{"class":140},[57,42007,31053],{"class":5489},[57,42009,156],{"class":136},[57,42011,41757],{"class":140},[57,42013,31062],{"class":5489},[57,42015,156],{"class":136},[57,42017,42018],{"class":140},"c4,",[57,42020,31071],{"class":5489},[57,42022,156],{"class":136},[57,42024,635],{"class":81},[57,42026,238],{"class":140},[57,42028,42029],{"class":59,"line":1974},[57,42030,2673],{"emptyLinePlaceholder":350},[57,42032,42033,42035,42037],{"class":59,"line":2001},[57,42034,30998],{"class":136},[57,42036,31290],{"class":70},[57,42038,31293],{"class":140},[57,42040,42041,42044,42046,42048,42050,42052],{"class":59,"line":2006},[57,42042,42043],{"class":140},"        p1",[57,42045,156],{"class":136},[57,42047,31020],{"class":81},[57,42049,35381],{"class":140},[57,42051,31020],{"class":81},[57,42053,42054],{"class":140},".p1_1(x))\n",[57,42056,42057,42059,42061,42063,42065,42067,42070,42072,42074,42076],{"class":59,"line":2023},[57,42058,7358],{"class":140},[57,42060,156],{"class":136},[57,42062,31020],{"class":81},[57,42064,35381],{"class":140},[57,42066,31020],{"class":81},[57,42068,42069],{"class":140},".p2_2(",[57,42071,31020],{"class":81},[57,42073,35381],{"class":140},[57,42075,31020],{"class":81},[57,42077,42078],{"class":140},".p2_1(x))))\n",[57,42080,42081,42084,42086,42088,42090,42092,42095,42097,42099,42101],{"class":59,"line":2028},[57,42082,42083],{"class":140},"        p3",[57,42085,156],{"class":136},[57,42087,31020],{"class":81},[57,42089,35381],{"class":140},[57,42091,31020],{"class":81},[57,42093,42094],{"class":140},".p3_2(",[57,42096,31020],{"class":81},[57,42098,35381],{"class":140},[57,42100,31020],{"class":81},[57,42102,42103],{"class":140},".p3_1(x))))\n",[57,42105,42106,42109,42111,42113,42115,42117,42120,42122],{"class":59,"line":2033},[57,42107,42108],{"class":140},"        p4",[57,42110,156],{"class":136},[57,42112,31020],{"class":81},[57,42114,35381],{"class":140},[57,42116,31020],{"class":81},[57,42118,42119],{"class":140},".p4_2(",[57,42121,31020],{"class":81},[57,42123,42124],{"class":140},".p4_1(x)))\n",[57,42126,42127],{"class":59,"line":2038},[57,42128,42129],{"class":63},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[57,42131,42132,42134,42137,42139,42141,42143],{"class":59,"line":2052},[57,42133,15024],{"class":136},[57,42135,42136],{"class":140}," torch.cat((p1,p2,p3,p4),",[57,42138,32882],{"class":5489},[57,42140,156],{"class":136},[57,42142,635],{"class":81},[57,42144,238],{"class":140},[57,42146,42147],{"class":59,"line":2057},[57,42148,2673],{"emptyLinePlaceholder":350},[57,42150,42151],{"class":59,"line":2850},[57,42152,2673],{"emptyLinePlaceholder":350},[57,42154,42155],{"class":59,"line":2864},[57,42156,42157],{"class":63},"# 搭建GoogLeNet网络\n",[57,42159,42160,42162,42165,42167,42169,42171,42173],{"class":59,"line":2872},[57,42161,14966],{"class":136},[57,42163,42164],{"class":70}," GoogLeNet",[57,42166,168],{"class":140},[57,42168,30975],{"class":70},[57,42170,974],{"class":140},[57,42172,30980],{"class":70},[57,42174,30983],{"class":140},[57,42176,42177],{"class":59,"line":2877},[57,42178,42179],{"class":63},"    # 必须把Inception导入到里边\n",[57,42181,42182,42184,42186],{"class":59,"line":2883},[57,42183,30998],{"class":136},[57,42185,31001],{"class":81},[57,42187,42188],{"class":140},"(self,Inception):\n",[57,42190,42191,42193,42196,42198,42200,42202],{"class":59,"line":2889},[57,42192,31014],{"class":81},[57,42194,42195],{"class":140},"(GoogLeNet,",[57,42197,31020],{"class":81},[57,42199,31023],{"class":140},[57,42201,31026],{"class":81},[57,42203,2249],{"class":140},[57,42205,42206,42208,42211,42213],{"class":59,"line":2894},[57,42207,31042],{"class":81},[57,42209,42210],{"class":140},".b1",[57,42212,156],{"class":136},[57,42214,38206],{"class":140},[57,42216,42217,42219,42221,42223,42225,42227,42229,42231,42233,42235,42237,42239,42241,42243,42245,42247,42249,42251,42253,42255,42257],{"class":59,"line":8221},[57,42218,38211],{"class":140},[57,42220,31053],{"class":5489},[57,42222,156],{"class":136},[57,42224,635],{"class":81},[57,42226,273],{"class":140},[57,42228,31062],{"class":5489},[57,42230,156],{"class":136},[57,42232,621],{"class":81},[57,42234,273],{"class":140},[57,42236,31071],{"class":5489},[57,42238,156],{"class":136},[57,42240,786],{"class":81},[57,42242,273],{"class":140},[57,42244,31126],{"class":5489},[57,42246,156],{"class":136},[57,42248,498],{"class":81},[57,42250,273],{"class":140},[57,42252,31080],{"class":5489},[57,42254,156],{"class":136},[57,42256,270],{"class":81},[57,42258,38244],{"class":140},[57,42260,42261],{"class":59,"line":8245},[57,42262,38249],{"class":140},[57,42264,42265,42267,42269,42271,42273,42275,42277,42279,42281,42283,42285,42287,42289],{"class":59,"line":8250},[57,42266,38294],{"class":140},[57,42268,31071],{"class":5489},[57,42270,156],{"class":136},[57,42272,270],{"class":81},[57,42274,273],{"class":140},[57,42276,31126],{"class":5489},[57,42278,156],{"class":136},[57,42280,498],{"class":81},[57,42282,273],{"class":140},[57,42284,31080],{"class":5489},[57,42286,156],{"class":136},[57,42288,635],{"class":81},[57,42290,238],{"class":140},[57,42292,42293],{"class":59,"line":8256},[57,42294,38323],{"class":140},[57,42296,42297,42299,42302,42304],{"class":59,"line":8283},[57,42298,31042],{"class":81},[57,42300,42301],{"class":140},".b2",[57,42303,156],{"class":136},[57,42305,38206],{"class":140},[57,42307,42308,42310,42312,42314,42316,42318,42320,42322,42324,42326,42328,42330,42332],{"class":59,"line":8288},[57,42309,38211],{"class":140},[57,42311,31053],{"class":5489},[57,42313,156],{"class":136},[57,42315,621],{"class":81},[57,42317,273],{"class":140},[57,42319,31062],{"class":5489},[57,42321,156],{"class":136},[57,42323,621],{"class":81},[57,42325,273],{"class":140},[57,42327,31071],{"class":5489},[57,42329,156],{"class":136},[57,42331,635],{"class":81},[57,42333,38244],{"class":140},[57,42335,42336],{"class":59,"line":8294},[57,42337,38249],{"class":140},[57,42339,42340,42342,42344,42346,42348,42350,42352,42354,42357,42359,42361,42363,42365,42367,42369,42371,42373],{"class":59,"line":8306},[57,42341,38211],{"class":140},[57,42343,31053],{"class":5489},[57,42345,156],{"class":136},[57,42347,621],{"class":81},[57,42349,273],{"class":140},[57,42351,31062],{"class":5489},[57,42353,156],{"class":136},[57,42355,42356],{"class":81},"192",[57,42358,273],{"class":140},[57,42360,31071],{"class":5489},[57,42362,156],{"class":136},[57,42364,270],{"class":81},[57,42366,273],{"class":140},[57,42368,31080],{"class":5489},[57,42370,156],{"class":136},[57,42372,635],{"class":81},[57,42374,38244],{"class":140},[57,42376,42377],{"class":59,"line":8318},[57,42378,38249],{"class":140},[57,42380,42381,42383,42385,42387,42389,42391,42393,42395,42397,42399,42401,42403,42405],{"class":59,"line":8330},[57,42382,38294],{"class":140},[57,42384,31071],{"class":5489},[57,42386,156],{"class":136},[57,42388,270],{"class":81},[57,42390,273],{"class":140},[57,42392,31126],{"class":5489},[57,42394,156],{"class":136},[57,42396,498],{"class":81},[57,42398,273],{"class":140},[57,42400,31080],{"class":5489},[57,42402,156],{"class":136},[57,42404,635],{"class":81},[57,42406,238],{"class":140},[57,42408,42409],{"class":59,"line":9989},[57,42410,38323],{"class":140},[57,42412,42413,42415,42418,42420],{"class":59,"line":10014},[57,42414,31042],{"class":81},[57,42416,42417],{"class":140},".b3",[57,42419,156],{"class":136},[57,42421,38206],{"class":140},[57,42423,42424,42427,42429,42431,42433,42436,42438,42440,42442,42445,42447,42449,42451,42454,42456],{"class":59,"line":10037},[57,42425,42426],{"class":140},"            Inception(",[57,42428,42356],{"class":81},[57,42430,273],{"class":140},[57,42432,621],{"class":81},[57,42434,42435],{"class":140},",(",[57,42437,627],{"class":81},[57,42439,273],{"class":140},[57,42441,32267],{"class":81},[57,42443,42444],{"class":140},"),(",[57,42446,1017],{"class":81},[57,42448,273],{"class":140},[57,42450,615],{"class":81},[57,42452,42453],{"class":140},"),",[57,42455,615],{"class":81},[57,42457,38244],{"class":140},[57,42459,42460,42462,42464,42466,42468,42470,42472,42474,42476,42478,42480,42482,42484,42486,42488],{"class":59,"line":10061},[57,42461,42426],{"class":140},[57,42463,35067],{"class":81},[57,42465,273],{"class":140},[57,42467,32267],{"class":81},[57,42469,42435],{"class":140},[57,42471,32267],{"class":81},[57,42473,273],{"class":140},[57,42475,42356],{"class":81},[57,42477,42444],{"class":140},[57,42479,615],{"class":81},[57,42481,273],{"class":140},[57,42483,627],{"class":81},[57,42485,42453],{"class":140},[57,42487,621],{"class":81},[57,42489,38244],{"class":140},[57,42491,42492,42494,42496,42498,42500,42502,42504,42506,42508,42510,42512,42514,42516],{"class":59,"line":10066},[57,42493,38294],{"class":140},[57,42495,31071],{"class":5489},[57,42497,156],{"class":136},[57,42499,270],{"class":81},[57,42501,273],{"class":140},[57,42503,31126],{"class":5489},[57,42505,156],{"class":136},[57,42507,498],{"class":81},[57,42509,273],{"class":140},[57,42511,31080],{"class":5489},[57,42513,156],{"class":136},[57,42515,635],{"class":81},[57,42517,238],{"class":140},[57,42519,42520],{"class":59,"line":10071},[57,42521,38323],{"class":140},[57,42523,42524,42526,42529,42531],{"class":59,"line":10076},[57,42525,31042],{"class":81},[57,42527,42528],{"class":140},".b4",[57,42530,156],{"class":136},[57,42532,38206],{"class":140},[57,42534,42535,42537,42540,42542,42544,42546,42548,42550,42553,42555,42557,42559,42561,42563,42565],{"class":59,"line":10085},[57,42536,42426],{"class":140},[57,42538,42539],{"class":81},"480",[57,42541,273],{"class":140},[57,42543,42356],{"class":81},[57,42545,42435],{"class":140},[57,42547,627],{"class":81},[57,42549,273],{"class":140},[57,42551,42552],{"class":81},"208",[57,42554,42444],{"class":140},[57,42556,1017],{"class":81},[57,42558,273],{"class":140},[57,42560,1023],{"class":81},[57,42562,42453],{"class":140},[57,42564,621],{"class":81},[57,42566,38244],{"class":140},[57,42568,42569,42571,42573,42575,42577,42579,42581,42583,42585,42587,42589,42591,42593,42595,42597],{"class":59,"line":10090},[57,42570,42426],{"class":140},[57,42572,38654],{"class":81},[57,42574,273],{"class":140},[57,42576,21320],{"class":81},[57,42578,42435],{"class":140},[57,42580,1034],{"class":81},[57,42582,273],{"class":140},[57,42584,31698],{"class":81},[57,42586,42444],{"class":140},[57,42588,1216],{"class":81},[57,42590,273],{"class":140},[57,42592,621],{"class":81},[57,42594,42453],{"class":140},[57,42596,621],{"class":81},[57,42598,38244],{"class":140},[57,42600,42601,42603,42605,42607,42609,42611,42613,42615,42617,42619,42621,42623,42625,42627,42629],{"class":59,"line":10096},[57,42602,42426],{"class":140},[57,42604,38654],{"class":81},[57,42606,273],{"class":140},[57,42608,32267],{"class":81},[57,42610,42435],{"class":140},[57,42612,32267],{"class":81},[57,42614,273],{"class":140},[57,42616,35067],{"class":81},[57,42618,42444],{"class":140},[57,42620,1216],{"class":81},[57,42622,273],{"class":140},[57,42624,621],{"class":81},[57,42626,42453],{"class":140},[57,42628,621],{"class":81},[57,42630,38244],{"class":140},[57,42632,42633,42635,42637,42639,42641,42643,42645,42647,42650,42652,42654,42656,42658,42660,42662],{"class":59,"line":10117},[57,42634,42426],{"class":140},[57,42636,38654],{"class":81},[57,42638,273],{"class":140},[57,42640,1034],{"class":81},[57,42642,42435],{"class":140},[57,42644,32267],{"class":81},[57,42646,273],{"class":140},[57,42648,42649],{"class":81},"288",[57,42651,42444],{"class":140},[57,42653,615],{"class":81},[57,42655,273],{"class":140},[57,42657,621],{"class":81},[57,42659,42453],{"class":140},[57,42661,621],{"class":81},[57,42663,38244],{"class":140},[57,42665,42666,42668,42671,42673,42675,42677,42679,42681,42684,42686,42688,42690,42692,42694,42696],{"class":59,"line":10123},[57,42667,42426],{"class":140},[57,42669,42670],{"class":81},"528",[57,42672,273],{"class":140},[57,42674,35067],{"class":81},[57,42676,42435],{"class":140},[57,42678,21320],{"class":81},[57,42680,273],{"class":140},[57,42682,42683],{"class":81},"320",[57,42685,42444],{"class":140},[57,42687,615],{"class":81},[57,42689,273],{"class":140},[57,42691,32267],{"class":81},[57,42693,42453],{"class":140},[57,42695,32267],{"class":81},[57,42697,38244],{"class":140},[57,42699,42700,42702,42704,42706,42708,42710,42712,42714,42716,42718,42720,42722,42724],{"class":59,"line":10137},[57,42701,38294],{"class":140},[57,42703,31071],{"class":5489},[57,42705,156],{"class":136},[57,42707,270],{"class":81},[57,42709,273],{"class":140},[57,42711,31126],{"class":5489},[57,42713,156],{"class":136},[57,42715,498],{"class":81},[57,42717,273],{"class":140},[57,42719,31080],{"class":5489},[57,42721,156],{"class":136},[57,42723,635],{"class":81},[57,42725,238],{"class":140},[57,42727,42728],{"class":59,"line":10143},[57,42729,38323],{"class":140},[57,42731,42732,42734,42737,42739],{"class":59,"line":10170},[57,42733,31042],{"class":81},[57,42735,42736],{"class":140},".b5",[57,42738,156],{"class":136},[57,42740,38206],{"class":140},[57,42742,42743,42745,42748,42750,42752,42754,42756,42758,42760,42762,42764,42766,42768,42770,42772],{"class":59,"line":10179},[57,42744,42426],{"class":140},[57,42746,42747],{"class":81},"832",[57,42749,273],{"class":140},[57,42751,35067],{"class":81},[57,42753,42435],{"class":140},[57,42755,21320],{"class":81},[57,42757,273],{"class":140},[57,42759,42683],{"class":81},[57,42761,42444],{"class":140},[57,42763,615],{"class":81},[57,42765,273],{"class":140},[57,42767,32267],{"class":81},[57,42769,42453],{"class":140},[57,42771,32267],{"class":81},[57,42773,38244],{"class":140},[57,42775,42776,42778,42780,42782,42784,42786,42788,42790,42792,42794,42796,42798,42800,42802,42804],{"class":59,"line":10185},[57,42777,42426],{"class":140},[57,42779,42747],{"class":81},[57,42781,273],{"class":140},[57,42783,35137],{"class":81},[57,42785,42435],{"class":140},[57,42787,42356],{"class":81},[57,42789,273],{"class":140},[57,42791,35137],{"class":81},[57,42793,42444],{"class":140},[57,42795,1023],{"class":81},[57,42797,273],{"class":140},[57,42799,32267],{"class":81},[57,42801,42453],{"class":140},[57,42803,32267],{"class":81},[57,42805,38244],{"class":140},[57,42807,42808,42811,42813,42815,42817],{"class":59,"line":10193},[57,42809,42810],{"class":140},"            nn.AdaptiveAvgPool2d((",[57,42812,635],{"class":81},[57,42814,273],{"class":140},[57,42816,635],{"class":81},[57,42818,42819],{"class":140},")),\n",[57,42821,42822],{"class":59,"line":10198},[57,42823,38987],{"class":140},[57,42825,42826,42828,42831,42833,42835],{"class":59,"line":16876},[57,42827,38992],{"class":140},[57,42829,42830],{"class":81},"1024",[57,42832,273],{"class":140},[57,42834,862],{"class":81},[57,42836,238],{"class":140},[57,42838,42839],{"class":59,"line":16882},[57,42840,38323],{"class":140},[57,42842,42843],{"class":59,"line":16905},[57,42844,42845],{"class":63},"        # 对模型参数初始化\n",[57,42847,42848,42850,42852,42854,42856],{"class":59,"line":16911},[57,42849,3676],{"class":136},[57,42851,39065],{"class":140},[57,42853,26312],{"class":136},[57,42855,39070],{"class":81},[57,42857,39073],{"class":140},[57,42859,42860,42862,42864],{"class":59,"line":16934},[57,42861,4915],{"class":136},[57,42863,39085],{"class":81},[57,42865,39088],{"class":140},[57,42867,42868,42870,42873,42875,42878,42880,42882,42884,42886],{"class":59,"line":16948},[57,42869,39098],{"class":140},[57,42871,42872],{"class":5489},"mode",[57,42874,156],{"class":136},[57,42876,42877],{"class":74},"'fan_out'",[57,42879,273],{"class":140},[57,42881,39101],{"class":5489},[57,42883,156],{"class":136},[57,42885,39106],{"class":74},[57,42887,238],{"class":140},[57,42889,42890],{"class":59,"line":16968},[57,42891,42892],{"class":63},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[57,42894,42895],{"class":59,"line":16974},[57,42896,42897],{"class":63},"                # ② mode = 'fan_out'决定使用的fan值：\n",[57,42899,42900],{"class":59,"line":16985},[57,42901,42902],{"class":63},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[57,42904,42905],{"class":59,"line":17008},[57,42906,42907],{"class":63},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[57,42909,42910],{"class":59,"line":17030},[57,42911,42912],{"class":63},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[57,42914,42915],{"class":59,"line":17035},[57,42916,42917],{"class":63},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[57,42919,42920,42922,42924,42926,42928,42930],{"class":59,"line":17041},[57,42921,39118],{"class":136},[57,42923,39121],{"class":140},[57,42925,39124],{"class":136},[57,42927,39127],{"class":136},[57,42929,39130],{"class":81},[57,42931,4012],{"class":140},[57,42933,42934,42936,42938],{"class":59,"line":17055},[57,42935,39142],{"class":140},[57,42937,226],{"class":81},[57,42939,238],{"class":140},[57,42941,42942,42945,42947],{"class":59,"line":17068},[57,42943,42944],{"class":136},"                elif",[57,42946,39085],{"class":81},[57,42948,39161],{"class":140},[57,42950,42951,42954,42956,42958,42960],{"class":59,"line":17073},[57,42952,42953],{"class":140},"                    nn.init.normal_(m.weight,",[57,42955,226],{"class":81},[57,42957,273],{"class":140},[57,42959,39183],{"class":81},[57,42961,238],{"class":140},[57,42963,42964,42967,42969,42971,42973,42975],{"class":59,"line":17087},[57,42965,42966],{"class":136},"                    if",[57,42968,39121],{"class":140},[57,42970,39124],{"class":136},[57,42972,39127],{"class":136},[57,42974,39130],{"class":81},[57,42976,4012],{"class":140},[57,42978,42979,42982,42984],{"class":59,"line":17092},[57,42980,42981],{"class":140},"                        nn.init.constant_(m.bias,",[57,42983,226],{"class":81},[57,42985,238],{"class":140},[57,42987,42988],{"class":59,"line":17098},[57,42989,35362],{"class":63},[57,42991,42992,42994,42996],{"class":59,"line":17103},[57,42993,30998],{"class":136},[57,42995,31290],{"class":70},[57,42997,31293],{"class":140},[57,42999,43000,43002,43004,43006],{"class":59,"line":17117},[57,43001,31298],{"class":140},[57,43003,156],{"class":136},[57,43005,31020],{"class":81},[57,43007,43008],{"class":140},".b1(x)\n",[57,43010,43011,43013,43015,43017],{"class":59,"line":17122},[57,43012,31298],{"class":140},[57,43014,156],{"class":136},[57,43016,31020],{"class":81},[57,43018,43019],{"class":140},".b2(x)\n",[57,43021,43022,43024,43026,43028],{"class":59,"line":17127},[57,43023,31298],{"class":140},[57,43025,156],{"class":136},[57,43027,31020],{"class":81},[57,43029,43030],{"class":140},".b3(x)\n",[57,43032,43033,43035,43037,43039],{"class":59,"line":17141},[57,43034,31298],{"class":140},[57,43036,156],{"class":136},[57,43038,31020],{"class":81},[57,43040,43041],{"class":140},".b4(x)\n",[57,43043,43044,43046,43048,43050],{"class":59,"line":17153},[57,43045,31298],{"class":140},[57,43047,156],{"class":136},[57,43049,31020],{"class":81},[57,43051,43052],{"class":140},".b5(x)\n",[57,43054,43055,43057],{"class":59,"line":17158},[57,43056,15024],{"class":136},[57,43058,31406],{"class":140},[57,43060,43061],{"class":59,"line":17171},[57,43062,2673],{"emptyLinePlaceholder":350},[57,43064,43065],{"class":59,"line":17176},[57,43066,43067],{"class":63},"# 模型展示\n",[57,43069,43070,43072,43074,43076,43078],{"class":59,"line":17181},[57,43071,1813],{"class":136},[57,43073,31417],{"class":81},[57,43075,3222],{"class":136},[57,43077,31422],{"class":74},[57,43079,4012],{"class":140},[57,43081,43082,43084,43086,43088,43090,43092,43094,43096,43098],{"class":59,"line":17186},[57,43083,31434],{"class":140},[57,43085,156],{"class":136},[57,43087,205],{"class":140},[57,43089,31441],{"class":74},[57,43091,211],{"class":136},[57,43093,31446],{"class":140},[57,43095,232],{"class":136},[57,43097,235],{"class":74},[57,43099,238],{"class":140},[57,43101,43102,43104,43106],{"class":59,"line":17199},[57,43103,31486],{"class":140},[57,43105,156],{"class":136},[57,43107,43108],{"class":140},"GoogLeNet(Inception).to(device)\n",[57,43110,43111,43113,43115,43117,43119,43121,43123,43125],{"class":59,"line":17204},[57,43112,31496],{"class":81},[57,43114,31499],{"class":140},[57,43116,635],{"class":81},[57,43118,273],{"class":140},[57,43120,31698],{"class":81},[57,43122,273],{"class":140},[57,43124,31698],{"class":81},[57,43126,31512],{"class":140},[377,43128,43129],{"start":67},[380,43130,39380],{},[49,43132,43134],{"className":122,"code":43133,"language":124,"meta":46,"style":46},"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",[28,43135,43136,43142,43148,43158,43164,43174,43184,43194,43204,43214,43218,43229,43239,43243,43247,43251,43259,43271,43281,43297,43307,43339,43353,43363,43373,43377,43387,43401,43411,43421,43431,43437,43441,43445,43449,43453,43457,43465,43485,43489,43493,43497,43501,43505,43521,43525,43529,43537,43541,43545,43553,43557,43561,43565,43573,43577,43581,43585,43589,43597,43601,43609,43613,43621,43625,43633,43637,43645,43649,43653,43661,43665,43669,43673,43685,43709,43723,43727,43731,43735,43743,43747,43755,43759,43767,43771,43779,43783,43791,43795,43803,43807,43819,43823,43831,43835,43843,43847,43851,43855,43859,43867,43871,43887,43891,43899,43903,43907,43911,43915,43919,43923,43927,43943,43947,43959,43963,43975,43979,43991,43995,44003,44007,44015,44019,44023,44027,44033,44037,44045,44049,44065,44069,44077,44081,44097,44109,44113,44125,44129,44133,44141,44145,44149,44157,44161,44169,44173,44181,44185,44189,44231,44273,44277,44281,44297,44301,44317,44321,44325,44333,44337,44341,44353,44391,44395,44399,44407,44411,44425,44435,44441,44447,44453,44459,44463,44467,44473,44477,44481,44489,44493,44511,44515,44519,44523,44539,44543,44547,44551,44555,44559,44579,44599,44603,44607,44611,44619,44627,44631,44647,44667,44687,44691,44695,44703,44711,44715,44719,44723,44735,44739,44749,44757,44774],{"__ignoreMap":46},[57,43137,43138,43140],{"class":59,"line":60},[57,43139,137],{"class":136},[57,43141,32019],{"class":140},[57,43143,43144,43146],{"class":59,"line":67},[57,43145,137],{"class":136},[57,43147,32026],{"class":140},[57,43149,43150,43152,43154,43156],{"class":59,"line":144},[57,43151,137],{"class":136},[57,43153,32037],{"class":140},[57,43155,31580],{"class":136},[57,43157,32042],{"class":140},[57,43159,43160,43162],{"class":59,"line":150},[57,43161,137],{"class":136},[57,43163,141],{"class":140},[57,43165,43166,43168,43170,43172],{"class":59,"line":162},[57,43167,30934],{"class":136},[57,43169,31612],{"class":140},[57,43171,137],{"class":136},[57,43173,32059],{"class":140},[57,43175,43176,43178,43180,43182],{"class":59,"line":180},[57,43177,30934],{"class":136},[57,43179,31565],{"class":140},[57,43181,137],{"class":136},[57,43183,31570],{"class":140},[57,43185,43186,43188,43190,43192],{"class":59,"line":186},[57,43187,30934],{"class":136},[57,43189,31595],{"class":140},[57,43191,137],{"class":136},[57,43193,31600],{"class":140},[57,43195,43196,43198,43200,43202],{"class":59,"line":197},[57,43197,137],{"class":136},[57,43199,31612],{"class":140},[57,43201,31580],{"class":136},[57,43203,31617],{"class":140},[57,43205,43206,43208,43210,43212],{"class":59,"line":241},[57,43207,137],{"class":136},[57,43209,31629],{"class":140},[57,43211,31580],{"class":136},[57,43213,31634],{"class":140},[57,43215,43216],{"class":59,"line":249},[57,43217,32104],{"class":63},[57,43219,43220,43222,43224,43226],{"class":59,"line":262},[57,43221,30934],{"class":136},[57,43223,32111],{"class":140},[57,43225,137],{"class":136},[57,43227,43228],{"class":140}," GoogLeNet, Inception\n",[57,43230,43231,43233,43235,43237],{"class":59,"line":281},[57,43232,30934],{"class":136},[57,43234,30937],{"class":140},[57,43236,137],{"class":136},[57,43238,30942],{"class":140},[57,43240,43241],{"class":59,"line":287},[57,43242,2673],{"emptyLinePlaceholder":350},[57,43244,43245],{"class":59,"line":298},[57,43246,2673],{"emptyLinePlaceholder":350},[57,43248,43249],{"class":59,"line":311},[57,43250,32139],{"class":63},[57,43252,43253,43255,43257],{"class":59,"line":322},[57,43254,32144],{"class":136},[57,43256,32147],{"class":70},[57,43258,32150],{"class":140},[57,43260,43261,43263,43265,43267,43269],{"class":59,"line":1929},[57,43262,32155],{"class":140},[57,43264,156],{"class":136},[57,43266,31652],{"class":140},[57,43268,31660],{"class":74},[57,43270,31663],{"class":140},[57,43272,43273,43275,43277,43279],{"class":59,"line":1950},[57,43274,32168],{"class":5489},[57,43276,156],{"class":136},[57,43278,31673],{"class":81},[57,43280,31663],{"class":140},[57,43282,43283,43285,43287,43289,43291,43293,43295],{"class":59,"line":1955},[57,43284,32179],{"class":5489},[57,43286,156],{"class":136},[57,43288,31690],{"class":140},[57,43290,31693],{"class":5489},[57,43292,156],{"class":136},[57,43294,35646],{"class":81},[57,43296,31701],{"class":140},[57,43298,43299,43301,43303,43305],{"class":59,"line":1969},[57,43300,32196],{"class":5489},[57,43302,156],{"class":136},[57,43304,31673],{"class":81},[57,43306,238],{"class":140},[57,43308,43309,43311,43313,43315,43317,43319,43321,43323,43325,43327,43329,43331,43333,43335,43337],{"class":59,"line":1974},[57,43310,32207],{"class":140},[57,43312,156],{"class":136},[57,43314,32212],{"class":140},[57,43316,32215],{"class":81},[57,43318,168],{"class":140},[57,43320,32220],{"class":81},[57,43322,871],{"class":136},[57,43324,7631],{"class":81},[57,43326,32227],{"class":140},[57,43328,32215],{"class":81},[57,43330,168],{"class":140},[57,43332,32234],{"class":81},[57,43334,871],{"class":136},[57,43336,7631],{"class":81},[57,43338,32241],{"class":140},[57,43340,43341,43343,43345,43347,43349,43351],{"class":59,"line":2001},[57,43342,32246],{"class":140},[57,43344,156],{"class":136},[57,43346,32251],{"class":140},[57,43348,31734],{"class":5489},[57,43350,156],{"class":136},[57,43352,31739],{"class":140},[57,43354,43355,43357,43359,43361],{"class":59,"line":2006},[57,43356,32262],{"class":5489},[57,43358,156],{"class":136},[57,43360,615],{"class":81},[57,43362,31663],{"class":140},[57,43364,43365,43367,43369,43371],{"class":59,"line":2023},[57,43366,32274],{"class":5489},[57,43368,156],{"class":136},[57,43370,31673],{"class":81},[57,43372,31663],{"class":140},[57,43374,43375],{"class":59,"line":2028},[57,43376,32285],{"class":63},[57,43378,43379,43381,43383,43385],{"class":59,"line":2033},[57,43380,32290],{"class":5489},[57,43382,156],{"class":136},[57,43384,811],{"class":81},[57,43386,238],{"class":140},[57,43388,43389,43391,43393,43395,43397,43399],{"class":59,"line":2038},[57,43390,32301],{"class":140},[57,43392,156],{"class":136},[57,43394,31731],{"class":140},[57,43396,31734],{"class":5489},[57,43398,156],{"class":136},[57,43400,32312],{"class":140},[57,43402,43403,43405,43407,43409],{"class":59,"line":2052},[57,43404,32317],{"class":5489},[57,43406,156],{"class":136},[57,43408,615],{"class":81},[57,43410,31663],{"class":140},[57,43412,43413,43415,43417,43419],{"class":59,"line":2057},[57,43414,32328],{"class":5489},[57,43416,156],{"class":136},[57,43418,31673],{"class":81},[57,43420,31663],{"class":140},[57,43422,43423,43425,43427,43429],{"class":59,"line":2850},[57,43424,32339],{"class":5489},[57,43426,156],{"class":136},[57,43428,811],{"class":81},[57,43430,238],{"class":140},[57,43432,43433,43435],{"class":59,"line":2864},[57,43434,4363],{"class":136},[57,43436,32352],{"class":140},[57,43438,43439],{"class":59,"line":2872},[57,43440,2673],{"emptyLinePlaceholder":350},[57,43442,43443],{"class":59,"line":2877},[57,43444,32361],{"class":63},[57,43446,43447],{"class":59,"line":2883},[57,43448,32366],{"class":63},[57,43450,43451],{"class":59,"line":2889},[57,43452,2673],{"emptyLinePlaceholder":350},[57,43454,43455],{"class":59,"line":2894},[57,43456,32375],{"class":63},[57,43458,43459,43461,43463],{"class":59,"line":8221},[57,43460,32144],{"class":136},[57,43462,32382],{"class":70},[57,43464,32385],{"class":140},[57,43466,43467,43469,43471,43473,43475,43477,43479,43481,43483],{"class":59,"line":8245},[57,43468,31434],{"class":140},[57,43470,156],{"class":136},[57,43472,205],{"class":140},[57,43474,31441],{"class":74},[57,43476,211],{"class":136},[57,43478,31446],{"class":140},[57,43480,232],{"class":136},[57,43482,32404],{"class":74},[57,43484,238],{"class":140},[57,43486,43487],{"class":59,"line":8250},[57,43488,2673],{"emptyLinePlaceholder":350},[57,43490,43491],{"class":59,"line":8256},[57,43492,2673],{"emptyLinePlaceholder":350},[57,43494,43495],{"class":59,"line":8283},[57,43496,32419],{"class":63},[57,43498,43499],{"class":59,"line":8288},[57,43500,32424],{"class":63},[57,43502,43503],{"class":59,"line":8294},[57,43504,32429],{"class":63},[57,43506,43507,43509,43511,43513,43515,43517,43519],{"class":59,"line":8306},[57,43508,32434],{"class":140},[57,43510,156],{"class":136},[57,43512,32439],{"class":140},[57,43514,32442],{"class":5489},[57,43516,156],{"class":136},[57,43518,32447],{"class":81},[57,43520,238],{"class":140},[57,43522,43523],{"class":59,"line":8318},[57,43524,2673],{"emptyLinePlaceholder":350},[57,43526,43527],{"class":59,"line":8330},[57,43528,32458],{"class":63},[57,43530,43531,43533,43535],{"class":59,"line":9989},[57,43532,32463],{"class":140},[57,43534,156],{"class":136},[57,43536,32468],{"class":140},[57,43538,43539],{"class":59,"line":10014},[57,43540,2673],{"emptyLinePlaceholder":350},[57,43542,43543],{"class":59,"line":10037},[57,43544,32477],{"class":63},[57,43546,43547,43549,43551],{"class":59,"line":10061},[57,43548,31486],{"class":140},[57,43550,156],{"class":136},[57,43552,32486],{"class":140},[57,43554,43555],{"class":59,"line":10066},[57,43556,32491],{"class":63},[57,43558,43559],{"class":59,"line":10071},[57,43560,32496],{"class":63},[57,43562,43563],{"class":59,"line":10076},[57,43564,32501],{"class":63},[57,43566,43567,43569,43571],{"class":59,"line":10085},[57,43568,32506],{"class":140},[57,43570,156],{"class":136},[57,43572,32511],{"class":140},[57,43574,43575],{"class":59,"line":10090},[57,43576,2673],{"emptyLinePlaceholder":350},[57,43578,43579],{"class":59,"line":10096},[57,43580,2673],{"emptyLinePlaceholder":350},[57,43582,43583],{"class":59,"line":10117},[57,43584,32524],{"class":63},[57,43586,43587],{"class":59,"line":10123},[57,43588,32529],{"class":63},[57,43590,43591,43593,43595],{"class":59,"line":10137},[57,43592,32534],{"class":140},[57,43594,156],{"class":136},[57,43596,32539],{"class":81},[57,43598,43599],{"class":59,"line":10143},[57,43600,32544],{"class":63},[57,43602,43603,43605,43607],{"class":59,"line":10170},[57,43604,32549],{"class":140},[57,43606,156],{"class":136},[57,43608,32554],{"class":140},[57,43610,43611],{"class":59,"line":10179},[57,43612,32559],{"class":63},[57,43614,43615,43617,43619],{"class":59,"line":10185},[57,43616,32564],{"class":140},[57,43618,156],{"class":136},[57,43620,32554],{"class":140},[57,43622,43623],{"class":59,"line":10193},[57,43624,32573],{"class":63},[57,43626,43627,43629,43631],{"class":59,"line":10198},[57,43628,32578],{"class":140},[57,43630,156],{"class":136},[57,43632,32554],{"class":140},[57,43634,43635],{"class":59,"line":16876},[57,43636,32587],{"class":63},[57,43638,43639,43641,43643],{"class":59,"line":16882},[57,43640,32592],{"class":140},[57,43642,156],{"class":136},[57,43644,32554],{"class":140},[57,43646,43647],{"class":59,"line":16905},[57,43648,2673],{"emptyLinePlaceholder":350},[57,43650,43651],{"class":59,"line":16911},[57,43652,32605],{"class":63},[57,43654,43655,43657,43659],{"class":59,"line":16934},[57,43656,32610],{"class":140},[57,43658,156],{"class":136},[57,43660,32615],{"class":140},[57,43662,43663],{"class":59,"line":16948},[57,43664,2673],{"emptyLinePlaceholder":350},[57,43666,43667],{"class":59,"line":16968},[57,43668,2673],{"emptyLinePlaceholder":350},[57,43670,43671],{"class":59,"line":16974},[57,43672,32628],{"class":63},[57,43674,43675,43677,43679,43681,43683],{"class":59,"line":16985},[57,43676,3474],{"class":136},[57,43678,32635],{"class":140},[57,43680,26312],{"class":136},[57,43682,32640],{"class":81},[57,43684,32643],{"class":140},[57,43686,43687,43689,43691,43693,43695,43697,43699,43701,43703,43705,43707],{"class":59,"line":17008},[57,43688,32648],{"class":81},[57,43690,168],{"class":140},[57,43692,32653],{"class":74},[57,43694,32656],{"class":81},[57,43696,1000],{"class":74},[57,43698,32656],{"class":81},[57,43700,668],{"class":74},[57,43702,32665],{"class":140},[57,43704,948],{"class":136},[57,43706,635],{"class":81},[57,43708,259],{"class":140},[57,43710,43711,43713,43715,43717,43719,43721],{"class":59,"line":17030},[57,43712,32648],{"class":81},[57,43714,168],{"class":140},[57,43716,32680],{"class":74},[57,43718,871],{"class":136},[57,43720,862],{"class":81},[57,43722,238],{"class":140},[57,43724,43725],{"class":59,"line":17035},[57,43726,2673],{"emptyLinePlaceholder":350},[57,43728,43729],{"class":59,"line":17041},[57,43730,32695],{"class":63},[57,43732,43733],{"class":59,"line":17055},[57,43734,32700],{"class":63},[57,43736,43737,43739,43741],{"class":59,"line":17068},[57,43738,32705],{"class":140},[57,43740,156],{"class":136},[57,43742,32539],{"class":81},[57,43744,43745],{"class":59,"line":17073},[57,43746,32714],{"class":63},[57,43748,43749,43751,43753],{"class":59,"line":17087},[57,43750,32719],{"class":140},[57,43752,156],{"class":136},[57,43754,3358],{"class":81},[57,43756,43757],{"class":59,"line":17092},[57,43758,32728],{"class":63},[57,43760,43761,43763,43765],{"class":59,"line":17098},[57,43762,32733],{"class":140},[57,43764,156],{"class":136},[57,43766,32539],{"class":81},[57,43768,43769],{"class":59,"line":17103},[57,43770,32742],{"class":63},[57,43772,43773,43775,43777],{"class":59,"line":17117},[57,43774,32747],{"class":140},[57,43776,156],{"class":136},[57,43778,3358],{"class":81},[57,43780,43781],{"class":59,"line":17122},[57,43782,32756],{"class":63},[57,43784,43785,43787,43789],{"class":59,"line":17127},[57,43786,32761],{"class":140},[57,43788,156],{"class":136},[57,43790,3358],{"class":81},[57,43792,43793],{"class":59,"line":17141},[57,43794,32770],{"class":63},[57,43796,43797,43799,43801],{"class":59,"line":17153},[57,43798,32775],{"class":140},[57,43800,156],{"class":136},[57,43802,3358],{"class":81},[57,43804,43805],{"class":59,"line":17158},[57,43806,32784],{"class":63},[57,43808,43809,43811,43813,43815,43817],{"class":59,"line":17171},[57,43810,3676],{"class":136},[57,43812,31798],{"class":140},[57,43814,26312],{"class":136},[57,43816,31803],{"class":81},[57,43818,32797],{"class":140},[57,43820,43821],{"class":59,"line":17176},[57,43822,32802],{"class":63},[57,43824,43825,43827,43829],{"class":59,"line":17181},[57,43826,32807],{"class":140},[57,43828,156],{"class":136},[57,43830,32812],{"class":140},[57,43832,43833],{"class":59,"line":17186},[57,43834,32817],{"class":63},[57,43836,43837,43839,43841],{"class":59,"line":17199},[57,43838,32822],{"class":140},[57,43840,156],{"class":136},[57,43842,32827],{"class":140},[57,43844,43845],{"class":59,"line":17204},[57,43846,32833],{"class":63},[57,43848,43849],{"class":59,"line":32830},[57,43850,32839],{"class":140},[57,43852,43853],{"class":59,"line":32836},[57,43854,32845],{"class":63},[57,43856,43857],{"class":59,"line":32842},[57,43858,32851],{"class":63},[57,43860,43861,43863,43865],{"class":59,"line":32848},[57,43862,32857],{"class":140},[57,43864,156],{"class":136},[57,43866,32862],{"class":140},[57,43868,43869],{"class":59,"line":32854},[57,43870,32868],{"class":63},[57,43872,43873,43875,43877,43879,43881,43883,43885],{"class":59,"line":32865},[57,43874,32874],{"class":140},[57,43876,156],{"class":136},[57,43878,32879],{"class":140},[57,43880,32882],{"class":5489},[57,43882,156],{"class":136},[57,43884,635],{"class":81},[57,43886,238],{"class":140},[57,43888,43889],{"class":59,"line":32871},[57,43890,32894],{"class":63},[57,43892,43893,43895,43897],{"class":59,"line":32891},[57,43894,32900],{"class":140},[57,43896,156],{"class":136},[57,43898,32905],{"class":140},[57,43900,43901],{"class":59,"line":32897},[57,43902,32911],{"class":63},[57,43904,43905],{"class":59,"line":32908},[57,43906,32917],{"class":140},[57,43908,43909],{"class":59,"line":32914},[57,43910,32923],{"class":63},[57,43912,43913],{"class":59,"line":32920},[57,43914,32929],{"class":140},[57,43916,43917],{"class":59,"line":32926},[57,43918,32935],{"class":63},[57,43920,43921],{"class":59,"line":32932},[57,43922,32941],{"class":140},[57,43924,43925],{"class":59,"line":32938},[57,43926,32947],{"class":63},[57,43928,43929,43931,43933,43935,43937,43939,43941],{"class":59,"line":32944},[57,43930,32953],{"class":140},[57,43932,9750],{"class":136},[57,43934,32958],{"class":140},[57,43936,871],{"class":136},[57,43938,32963],{"class":140},[57,43940,226],{"class":81},[57,43942,238],{"class":140},[57,43944,43945],{"class":59,"line":32950},[57,43946,32973],{"class":63},[57,43948,43949,43951,43953,43955,43957],{"class":59,"line":32970},[57,43950,32979],{"class":140},[57,43952,9750],{"class":136},[57,43954,32984],{"class":140},[57,43956,3222],{"class":136},[57,43958,32989],{"class":140},[57,43960,43961],{"class":59,"line":32976},[57,43962,32995],{"class":63},[57,43964,43965,43967,43969,43971,43973],{"class":59,"line":32992},[57,43966,33001],{"class":140},[57,43968,9750],{"class":136},[57,43970,32963],{"class":140},[57,43972,226],{"class":81},[57,43974,238],{"class":140},[57,43976,43977],{"class":59,"line":32998},[57,43978,33015],{"class":63},[57,43980,43981,43983,43985,43987,43989],{"class":59,"line":33012},[57,43982,3676],{"class":136},[57,43984,33023],{"class":140},[57,43986,26312],{"class":136},[57,43988,31803],{"class":81},[57,43990,33030],{"class":140},[57,43992,43993],{"class":59,"line":33018},[57,43994,33036],{"class":63},[57,43996,43997,43999,44001],{"class":59,"line":33033},[57,43998,32807],{"class":140},[57,44000,156],{"class":136},[57,44002,32812],{"class":140},[57,44004,44005],{"class":59,"line":33039},[57,44006,33051],{"class":63},[57,44008,44009,44011,44013],{"class":59,"line":33048},[57,44010,32822],{"class":140},[57,44012,156],{"class":136},[57,44014,32827],{"class":140},[57,44016,44017],{"class":59,"line":33054},[57,44018,33066],{"class":63},[57,44020,44021],{"class":59,"line":33063},[57,44022,33072],{"class":140},[57,44024,44025],{"class":59,"line":33069},[57,44026,36553],{"class":63},[57,44028,44029,44031],{"class":59,"line":33075},[57,44030,33078],{"class":136},[57,44032,33081],{"class":140},[57,44034,44035],{"class":59,"line":33084},[57,44036,33087],{"class":63},[57,44038,44039,44041,44043],{"class":59,"line":33090},[57,44040,36568],{"class":140},[57,44042,156],{"class":136},[57,44044,32862],{"class":140},[57,44046,44047],{"class":59,"line":33101},[57,44048,33104],{"class":63},[57,44050,44051,44053,44055,44057,44059,44061,44063],{"class":59,"line":33107},[57,44052,36581],{"class":140},[57,44054,156],{"class":136},[57,44056,32879],{"class":140},[57,44058,32882],{"class":5489},[57,44060,156],{"class":136},[57,44062,635],{"class":81},[57,44064,238],{"class":140},[57,44066,44067],{"class":59,"line":33126},[57,44068,33129],{"class":63},[57,44070,44071,44073,44075],{"class":59,"line":33132},[57,44072,36602],{"class":140},[57,44074,156],{"class":136},[57,44076,32905],{"class":140},[57,44078,44079],{"class":59,"line":33143},[57,44080,33146],{"class":63},[57,44082,44083,44085,44087,44089,44091,44093,44095],{"class":59,"line":33149},[57,44084,36615],{"class":140},[57,44086,9750],{"class":136},[57,44088,36620],{"class":140},[57,44090,871],{"class":136},[57,44092,32963],{"class":140},[57,44094,226],{"class":81},[57,44096,238],{"class":140},[57,44098,44099,44101,44103,44105,44107],{"class":59,"line":33169},[57,44100,36633],{"class":140},[57,44102,9750],{"class":136},[57,44104,32984],{"class":140},[57,44106,3222],{"class":136},[57,44108,32989],{"class":140},[57,44110,44111],{"class":59,"line":33185},[57,44112,36646],{"class":63},[57,44114,44115,44117,44119,44121,44123],{"class":59,"line":33191},[57,44116,36651],{"class":140},[57,44118,9750],{"class":136},[57,44120,32963],{"class":140},[57,44122,226],{"class":81},[57,44124,238],{"class":140},[57,44126,44127],{"class":59,"line":33205},[57,44128,33208],{"class":63},[57,44130,44131],{"class":59,"line":33211},[57,44132,33214],{"class":63},[57,44134,44135,44137,44139],{"class":59,"line":33217},[57,44136,33220],{"class":140},[57,44138,1000],{"class":136},[57,44140,33225],{"class":140},[57,44142,44143],{"class":59,"line":33228},[57,44144,33231],{"class":63},[57,44146,44147],{"class":59,"line":33234},[57,44148,33237],{"class":63},[57,44150,44151,44153,44155],{"class":59,"line":33240},[57,44152,33243],{"class":140},[57,44154,1000],{"class":136},[57,44156,33225],{"class":140},[57,44158,44159],{"class":59,"line":33250},[57,44160,33253],{"class":63},[57,44162,44163,44165,44167],{"class":59,"line":33256},[57,44164,33259],{"class":140},[57,44166,1000],{"class":136},[57,44168,33264],{"class":140},[57,44170,44171],{"class":59,"line":33267},[57,44172,33270],{"class":63},[57,44174,44175,44177,44179],{"class":59,"line":33273},[57,44176,33276],{"class":140},[57,44178,1000],{"class":136},[57,44180,33264],{"class":140},[57,44182,44183],{"class":59,"line":33283},[57,44184,2673],{"emptyLinePlaceholder":350},[57,44186,44187],{"class":59,"line":33288},[57,44188,33291],{"class":63},[57,44190,44191,44193,44195,44197,44199,44201,44203,44205,44207,44209,44211,44213,44215,44217,44219,44221,44223,44225,44227,44229],{"class":59,"line":33294},[57,44192,32648],{"class":81},[57,44194,168],{"class":140},[57,44196,3865],{"class":74},[57,44198,32656],{"class":81},[57,44200,33305],{"class":74},[57,44202,1312],{"class":81},[57,44204,33310],{"class":136},[57,44206,1362],{"class":81},[57,44208,33315],{"class":74},[57,44210,1312],{"class":81},[57,44212,33310],{"class":136},[57,44214,1362],{"class":81},[57,44216,3865],{"class":74},[57,44218,33326],{"class":140},[57,44220,948],{"class":136},[57,44222,635],{"class":81},[57,44224,33333],{"class":140},[57,44226,948],{"class":136},[57,44228,635],{"class":81},[57,44230,33340],{"class":140},[57,44232,44233,44235,44237,44239,44241,44243,44245,44247,44249,44251,44253,44255,44257,44259,44261,44263,44265,44267,44269,44271],{"class":59,"line":33343},[57,44234,32648],{"class":81},[57,44236,168],{"class":140},[57,44238,3865],{"class":74},[57,44240,32656],{"class":81},[57,44242,33354],{"class":74},[57,44244,1312],{"class":81},[57,44246,33310],{"class":136},[57,44248,1362],{"class":81},[57,44250,33363],{"class":74},[57,44252,1312],{"class":81},[57,44254,33310],{"class":136},[57,44256,1362],{"class":81},[57,44258,3865],{"class":74},[57,44260,33374],{"class":140},[57,44262,948],{"class":136},[57,44264,635],{"class":81},[57,44266,33381],{"class":140},[57,44268,948],{"class":136},[57,44270,635],{"class":81},[57,44272,33340],{"class":140},[57,44274,44275],{"class":59,"line":33390},[57,44276,2673],{"emptyLinePlaceholder":350},[57,44278,44279],{"class":59,"line":33395},[57,44280,33398],{"class":63},[57,44282,44283,44285,44287,44289,44291,44293,44295],{"class":59,"line":33401},[57,44284,2770],{"class":136},[57,44286,33406],{"class":140},[57,44288,948],{"class":136},[57,44290,635],{"class":81},[57,44292,1356],{"class":140},[57,44294,223],{"class":136},[57,44296,33417],{"class":140},[57,44298,44299],{"class":59,"line":33420},[57,44300,33423],{"class":63},[57,44302,44303,44305,44307,44309,44311,44313,44315],{"class":59,"line":33426},[57,44304,33429],{"class":140},[57,44306,464],{"class":81},[57,44308,156],{"class":136},[57,44310,33436],{"class":140},[57,44312,948],{"class":136},[57,44314,635],{"class":81},[57,44316,33443],{"class":140},[57,44318,44319],{"class":59,"line":33446},[57,44320,33449],{"class":63},[57,44322,44323],{"class":59,"line":33452},[57,44324,33455],{"class":63},[57,44326,44327,44329,44331],{"class":59,"line":33458},[57,44328,33461],{"class":140},[57,44330,156],{"class":136},[57,44332,32511],{"class":140},[57,44334,44335],{"class":59,"line":33468},[57,44336,2673],{"emptyLinePlaceholder":350},[57,44338,44339],{"class":59,"line":33473},[57,44340,33476],{"class":63},[57,44342,44343,44345,44347,44349,44351],{"class":59,"line":33479},[57,44344,33482],{"class":140},[57,44346,156],{"class":136},[57,44348,33487],{"class":140},[57,44350,948],{"class":136},[57,44352,33492],{"class":140},[57,44354,44355,44357,44359,44361,44363,44365,44367,44369,44371,44373,44375,44377,44379,44381,44383,44385,44387,44389],{"class":59,"line":33495},[57,44356,32648],{"class":81},[57,44358,168],{"class":140},[57,44360,33502],{"class":74},[57,44362,1312],{"class":81},[57,44364,33507],{"class":136},[57,44366,1362],{"class":81},[57,44368,960],{"class":74},[57,44370,1312],{"class":81},[57,44372,33507],{"class":136},[57,44374,1362],{"class":81},[57,44376,33520],{"class":74},[57,44378,33523],{"class":140},[57,44380,33526],{"class":136},[57,44382,1323],{"class":81},[57,44384,33531],{"class":140},[57,44386,745],{"class":136},[57,44388,1323],{"class":81},[57,44390,259],{"class":140},[57,44392,44393],{"class":59,"line":33540},[57,44394,36930],{"class":63},[57,44396,44397],{"class":59,"line":33546},[57,44398,36935],{"class":63},[57,44400,44401,44403,44405],{"class":59,"line":33552},[57,44402,36940],{"class":140},[57,44404,33564],{"class":74},[57,44406,238],{"class":140},[57,44408,44409],{"class":59,"line":33558},[57,44410,33584],{"class":63},[57,44412,44413,44415,44417,44419,44421,44423],{"class":59,"line":33569},[57,44414,33590],{"class":140},[57,44416,156],{"class":136},[57,44418,33595],{"class":140},[57,44420,33598],{"class":5489},[57,44422,156],{"class":136},[57,44424,1828],{"class":140},[57,44426,44427,44429,44431,44433],{"class":59,"line":33575},[57,44428,33608],{"class":74},[57,44430,1275],{"class":140},[57,44432,33613],{"class":81},[57,44434,33616],{"class":140},[57,44436,44437,44439],{"class":59,"line":33581},[57,44438,33622],{"class":74},[57,44440,33625],{"class":140},[57,44442,44443,44445],{"class":59,"line":33587},[57,44444,33631],{"class":74},[57,44446,33634],{"class":140},[57,44448,44449,44451],{"class":59,"line":33605},[57,44450,33640],{"class":74},[57,44452,33643],{"class":140},[57,44454,44455,44457],{"class":59,"line":33619},[57,44456,33649],{"class":74},[57,44458,33652],{"class":140},[57,44460,44461],{"class":59,"line":33628},[57,44462,33658],{"class":140},[57,44464,44465],{"class":59,"line":33637},[57,44466,33664],{"class":63},[57,44468,44469,44471],{"class":59,"line":33646},[57,44470,4363],{"class":136},[57,44472,33672],{"class":140},[57,44474,44475],{"class":59,"line":33655},[57,44476,2673],{"emptyLinePlaceholder":350},[57,44478,44479],{"class":59,"line":33661},[57,44480,33683],{"class":63},[57,44482,44483,44485,44487],{"class":59,"line":33667},[57,44484,32144],{"class":136},[57,44486,33691],{"class":70},[57,44488,33694],{"class":140},[57,44490,44491],{"class":59,"line":33675},[57,44492,33700],{"class":63},[57,44494,44495,44497,44499,44501,44503,44505,44507,44509],{"class":59,"line":33680},[57,44496,33706],{"class":140},[57,44498,31890],{"class":5489},[57,44500,156],{"class":136},[57,44502,168],{"class":140},[57,44504,914],{"class":81},[57,44506,273],{"class":140},[57,44508,710],{"class":81},[57,44510,259],{"class":140},[57,44512,44513],{"class":59,"line":33686},[57,44514,33726],{"class":63},[57,44516,44517],{"class":59,"line":33697},[57,44518,33732],{"class":63},[57,44520,44521],{"class":59,"line":33703},[57,44522,33738],{"class":63},[57,44524,44525,44527,44529,44531,44533,44535,44537],{"class":59,"line":33723},[57,44526,31924],{"class":140},[57,44528,635],{"class":81},[57,44530,273],{"class":140},[57,44532,498],{"class":81},[57,44534,273],{"class":140},[57,44536,635],{"class":81},[57,44538,238],{"class":140},[57,44540,44541],{"class":59,"line":33729},[57,44542,33761],{"class":63},[57,44544,44545],{"class":59,"line":33735},[57,44546,33767],{"class":63},[57,44548,44549],{"class":59,"line":33741},[57,44550,33773],{"class":63},[57,44552,44553],{"class":59,"line":33758},[57,44554,33779],{"class":63},[57,44556,44557],{"class":59,"line":33764},[57,44558,33785],{"class":63},[57,44560,44561,44563,44565,44567,44569,44571,44573,44575,44577],{"class":59,"line":33770},[57,44562,33791],{"class":140},[57,44564,33794],{"class":74},[57,44566,33797],{"class":140},[57,44568,33800],{"class":74},[57,44570,273],{"class":140},[57,44572,33805],{"class":5489},[57,44574,156],{"class":136},[57,44576,33810],{"class":74},[57,44578,238],{"class":140},[57,44580,44581,44583,44585,44587,44589,44591,44593,44595,44597],{"class":59,"line":33776},[57,44582,33791],{"class":140},[57,44584,33794],{"class":74},[57,44586,33822],{"class":140},[57,44588,33825],{"class":74},[57,44590,273],{"class":140},[57,44592,33805],{"class":5489},[57,44594,156],{"class":136},[57,44596,33834],{"class":74},[57,44598,238],{"class":140},[57,44600,44601],{"class":59,"line":33782},[57,44602,33842],{"class":63},[57,44604,44605],{"class":59,"line":33788},[57,44606,33848],{"class":140},[57,44608,44609],{"class":59,"line":33815},[57,44610,33854],{"class":63},[57,44612,44613,44615,44617],{"class":59,"line":33839},[57,44614,33860],{"class":140},[57,44616,33863],{"class":74},[57,44618,238],{"class":140},[57,44620,44621,44623,44625],{"class":59,"line":33845},[57,44622,33871],{"class":140},[57,44624,33874],{"class":74},[57,44626,238],{"class":140},[57,44628,44629],{"class":59,"line":33851},[57,44630,33882],{"class":63},[57,44632,44633,44635,44637,44639,44641,44643,44645],{"class":59,"line":33857},[57,44634,31924],{"class":140},[57,44636,635],{"class":81},[57,44638,273],{"class":140},[57,44640,498],{"class":81},[57,44642,273],{"class":140},[57,44644,498],{"class":81},[57,44646,238],{"class":140},[57,44648,44649,44651,44653,44655,44657,44659,44661,44663,44665],{"class":59,"line":33868},[57,44650,33791],{"class":140},[57,44652,33794],{"class":74},[57,44654,33909],{"class":140},[57,44656,33800],{"class":74},[57,44658,273],{"class":140},[57,44660,33805],{"class":5489},[57,44662,156],{"class":136},[57,44664,33920],{"class":74},[57,44666,238],{"class":140},[57,44668,44669,44671,44673,44675,44677,44679,44681,44683,44685],{"class":59,"line":33879},[57,44670,33791],{"class":140},[57,44672,33794],{"class":74},[57,44674,33932],{"class":140},[57,44676,33825],{"class":74},[57,44678,273],{"class":140},[57,44680,33805],{"class":5489},[57,44682,156],{"class":136},[57,44684,33943],{"class":74},[57,44686,238],{"class":140},[57,44688,44689],{"class":59,"line":33885},[57,44690,33951],{"class":63},[57,44692,44693],{"class":59,"line":33902},[57,44694,33848],{"class":140},[57,44696,44697,44699,44701],{"class":59,"line":33925},[57,44698,33860],{"class":140},[57,44700,33794],{"class":74},[57,44702,238],{"class":140},[57,44704,44705,44707,44709],{"class":59,"line":33948},[57,44706,33871],{"class":140},[57,44708,33973],{"class":74},[57,44710,238],{"class":140},[57,44712,44713],{"class":59,"line":33954},[57,44714,33981],{"class":140},[57,44716,44717],{"class":59,"line":33959},[57,44718,2673],{"emptyLinePlaceholder":350},[57,44720,44721],{"class":59,"line":33968},[57,44722,33992],{"class":63},[57,44724,44725,44727,44729,44731,44733],{"class":59,"line":33978},[57,44726,1813],{"class":136},[57,44728,31417],{"class":81},[57,44730,3222],{"class":136},[57,44732,31422],{"class":74},[57,44734,4012],{"class":140},[57,44736,44737],{"class":59,"line":33984},[57,44738,34011],{"class":63},[57,44740,44741,44744,44746],{"class":59,"line":33989},[57,44742,44743],{"class":140},"    GoogLeNet",[57,44745,156],{"class":136},[57,44747,44748],{"class":140},"GoogLeNet(Inception)\n",[57,44750,44751,44753,44755],{"class":59,"line":33995},[57,44752,34028],{"class":140},[57,44754,156],{"class":136},[57,44756,34033],{"class":140},[57,44758,44759,44761,44763,44766,44768,44770,44772],{"class":59,"line":34008},[57,44760,33590],{"class":140},[57,44762,156],{"class":136},[57,44764,44765],{"class":140},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[57,44767,34046],{"class":5489},[57,44769,156],{"class":136},[57,44771,1367],{"class":81},[57,44773,238],{"class":140},[57,44775,44776],{"class":59,"line":34014},[57,44777,34058],{"class":140},[377,44779,44780],{"start":144},[380,44781,40771],{},[49,44783,44785],{"className":122,"code":44784,"language":124,"meta":46,"style":46},"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",[28,44786,44787,44793,44803,44813,44817,44827,44838,44842,44846,44850,44858,44874,44884,44900,44910,44924,44928,44938,44948,44958,44964,44968,44972,44980,44984,45000,45008,45012,45016,45024,45032,45036,45040,45044,45048,45054,45058,45068,45076,45084,45088,45092,45096,45104,45108,45124,45128,45132,45136,45148,45152,45164,45168,45172,45184,45188,45198,45202,45206,45218,45222,45230,45234,45238,45246,45250,45258,45262,45266,45270,45274,45278,45294,45302,45306,45310,45358,45364,45368,45378,45386,45394,45398,45402,45406,45410,45418,45422,45438,45442,45450,45458],{"__ignoreMap":46},[57,44788,44789,44791],{"class":59,"line":60},[57,44790,137],{"class":136},[57,44792,141],{"class":140},[57,44794,44795,44797,44799,44801],{"class":59,"line":67},[57,44796,137],{"class":136},[57,44798,31612],{"class":140},[57,44800,31580],{"class":136},[57,44802,31617],{"class":140},[57,44804,44805,44807,44809,44811],{"class":59,"line":144},[57,44806,30934],{"class":136},[57,44808,31595],{"class":140},[57,44810,137],{"class":136},[57,44812,31600],{"class":140},[57,44814,44815],{"class":59,"line":150},[57,44816,34119],{"class":63},[57,44818,44819,44821,44823,44825],{"class":59,"line":162},[57,44820,30934],{"class":136},[57,44822,31565],{"class":140},[57,44824,137],{"class":136},[57,44826,31570],{"class":140},[57,44828,44829,44831,44833,44835],{"class":59,"line":180},[57,44830,30934],{"class":136},[57,44832,32111],{"class":140},[57,44834,137],{"class":136},[57,44836,44837],{"class":140}," GoogLeNet,Inception\n",[57,44839,44840],{"class":59,"line":186},[57,44841,2673],{"emptyLinePlaceholder":350},[57,44843,44844],{"class":59,"line":197},[57,44845,2673],{"emptyLinePlaceholder":350},[57,44847,44848],{"class":59,"line":241},[57,44849,34148],{"class":63},[57,44851,44852,44854,44856],{"class":59,"line":249},[57,44853,32144],{"class":136},[57,44855,34155],{"class":70},[57,44857,32150],{"class":140},[57,44859,44860,44862,44864,44866,44868,44870,44872],{"class":59,"line":262},[57,44861,34162],{"class":140},[57,44863,156],{"class":136},[57,44865,31652],{"class":140},[57,44867,31655],{"class":5489},[57,44869,156],{"class":136},[57,44871,31660],{"class":74},[57,44873,31663],{"class":140},[57,44875,44876,44878,44880,44882],{"class":59,"line":281},[57,44877,34179],{"class":5489},[57,44879,156],{"class":136},[57,44881,34184],{"class":81},[57,44883,31663],{"class":140},[57,44885,44886,44888,44890,44892,44894,44896,44898],{"class":59,"line":287},[57,44887,34191],{"class":5489},[57,44889,156],{"class":136},[57,44891,31690],{"class":140},[57,44893,31693],{"class":5489},[57,44895,156],{"class":136},[57,44897,35646],{"class":81},[57,44899,31701],{"class":140},[57,44901,44902,44904,44906,44908],{"class":59,"line":298},[57,44903,34208],{"class":5489},[57,44905,156],{"class":136},[57,44907,31673],{"class":81},[57,44909,238],{"class":140},[57,44911,44912,44914,44916,44918,44920,44922],{"class":59,"line":311},[57,44913,34219],{"class":140},[57,44915,156],{"class":136},[57,44917,31731],{"class":140},[57,44919,31734],{"class":5489},[57,44921,156],{"class":136},[57,44923,34230],{"class":140},[57,44925,44926],{"class":59,"line":322},[57,44927,34235],{"class":63},[57,44929,44930,44932,44934,44936],{"class":59,"line":1929},[57,44931,34240],{"class":5489},[57,44933,156],{"class":136},[57,44935,635],{"class":81},[57,44937,31663],{"class":140},[57,44939,44940,44942,44944,44946],{"class":59,"line":1950},[57,44941,34251],{"class":5489},[57,44943,156],{"class":136},[57,44945,31673],{"class":81},[57,44947,31663],{"class":140},[57,44949,44950,44952,44954,44956],{"class":59,"line":1955},[57,44951,34262],{"class":5489},[57,44953,156],{"class":136},[57,44955,226],{"class":81},[57,44957,238],{"class":140},[57,44959,44960,44962],{"class":59,"line":1969},[57,44961,4363],{"class":136},[57,44963,34275],{"class":140},[57,44965,44966],{"class":59,"line":1974},[57,44967,2673],{"emptyLinePlaceholder":350},[57,44969,44970],{"class":59,"line":2001},[57,44971,34284],{"class":63},[57,44973,44974,44976,44978],{"class":59,"line":2006},[57,44975,32144],{"class":136},[57,44977,34291],{"class":70},[57,44979,34294],{"class":140},[57,44981,44982],{"class":59,"line":2023},[57,44983,34299],{"class":63},[57,44985,44986,44988,44990,44992,44994,44996,44998],{"class":59,"line":2028},[57,44987,31434],{"class":140},[57,44989,156],{"class":136},[57,44991,31441],{"class":74},[57,44993,211],{"class":136},[57,44995,31446],{"class":140},[57,44997,232],{"class":136},[57,44999,34316],{"class":74},[57,45001,45002,45004,45006],{"class":59,"line":2033},[57,45003,31486],{"class":140},[57,45005,156],{"class":136},[57,45007,32486],{"class":140},[57,45009,45010],{"class":59,"line":2038},[57,45011,2673],{"emptyLinePlaceholder":350},[57,45013,45014],{"class":59,"line":2052},[57,45015,34333],{"class":63},[57,45017,45018,45020,45022],{"class":59,"line":2057},[57,45019,34338],{"class":140},[57,45021,156],{"class":136},[57,45023,32539],{"class":81},[57,45025,45026,45028,45030],{"class":59,"line":2850},[57,45027,34347],{"class":140},[57,45029,156],{"class":136},[57,45031,3358],{"class":81},[57,45033,45034],{"class":59,"line":2864},[57,45035,2673],{"emptyLinePlaceholder":350},[57,45037,45038],{"class":59,"line":2872},[57,45039,34360],{"class":63},[57,45041,45042],{"class":59,"line":2877},[57,45043,34365],{"class":63},[57,45045,45046],{"class":59,"line":2883},[57,45047,34370],{"class":63},[57,45049,45050,45052],{"class":59,"line":2889},[57,45051,34375],{"class":136},[57,45053,33081],{"class":140},[57,45055,45056],{"class":59,"line":2894},[57,45057,34382],{"class":63},[57,45059,45060,45062,45064,45066],{"class":59,"line":8221},[57,45061,3676],{"class":136},[57,45063,34389],{"class":140},[57,45065,26312],{"class":136},[57,45067,34394],{"class":140},[57,45069,45070,45072,45074],{"class":59,"line":8245},[57,45071,34399],{"class":140},[57,45073,156],{"class":136},[57,45075,34404],{"class":140},[57,45077,45078,45080,45082],{"class":59,"line":8250},[57,45079,34409],{"class":140},[57,45081,156],{"class":136},[57,45083,34414],{"class":140},[57,45085,45086],{"class":59,"line":8256},[57,45087,34419],{"class":63},[57,45089,45090],{"class":59,"line":8283},[57,45091,33072],{"class":140},[57,45093,45094],{"class":59,"line":8288},[57,45095,34428],{"class":63},[57,45097,45098,45100,45102],{"class":59,"line":8294},[57,45099,32857],{"class":140},[57,45101,156],{"class":136},[57,45103,34437],{"class":140},[57,45105,45106],{"class":59,"line":8306},[57,45107,34442],{"class":63},[57,45109,45110,45112,45114,45116,45118,45120,45122],{"class":59,"line":8318},[57,45111,32874],{"class":140},[57,45113,156],{"class":136},[57,45115,32879],{"class":140},[57,45117,32882],{"class":5489},[57,45119,156],{"class":136},[57,45121,635],{"class":81},[57,45123,238],{"class":140},[57,45125,45126],{"class":59,"line":8330},[57,45127,34463],{"class":63},[57,45129,45130],{"class":59,"line":9989},[57,45131,34468],{"class":63},[57,45133,45134],{"class":59,"line":10014},[57,45135,34473],{"class":63},[57,45137,45138,45140,45142,45144,45146],{"class":59,"line":10037},[57,45139,34478],{"class":140},[57,45141,9750],{"class":136},[57,45143,32984],{"class":140},[57,45145,3222],{"class":136},[57,45147,34487],{"class":140},[57,45149,45150],{"class":59,"line":10061},[57,45151,34492],{"class":63},[57,45153,45154,45156,45158,45160,45162],{"class":59,"line":10066},[57,45155,34497],{"class":140},[57,45157,9750],{"class":136},[57,45159,34502],{"class":140},[57,45161,226],{"class":81},[57,45163,238],{"class":140},[57,45165,45166],{"class":59,"line":10071},[57,45167,2673],{"emptyLinePlaceholder":350},[57,45169,45170],{"class":59,"line":10076},[57,45171,34515],{"class":63},[57,45173,45174,45176,45178,45180,45182],{"class":59,"line":10085},[57,45175,34520],{"class":140},[57,45177,156],{"class":136},[57,45179,34525],{"class":140},[57,45181,1000],{"class":136},[57,45183,34530],{"class":140},[57,45185,45186],{"class":59,"line":10090},[57,45187,34535],{"class":63},[57,45189,45190,45192,45194,45196],{"class":59,"line":10096},[57,45191,32648],{"class":81},[57,45193,168],{"class":140},[57,45195,34544],{"class":74},[57,45197,34547],{"class":140},[57,45199,45200],{"class":59,"line":10117},[57,45201,2673],{"emptyLinePlaceholder":350},[57,45203,45204],{"class":59,"line":10123},[57,45205,34556],{"class":63},[57,45207,45208,45210,45212,45214,45216],{"class":59,"line":10137},[57,45209,1813],{"class":136},[57,45211,31417],{"class":81},[57,45213,3222],{"class":136},[57,45215,31422],{"class":74},[57,45217,4012],{"class":140},[57,45219,45220],{"class":59,"line":10143},[57,45221,34573],{"class":63},[57,45223,45224,45226,45228],{"class":59,"line":10170},[57,45225,31486],{"class":140},[57,45227,156],{"class":136},[57,45229,44748],{"class":140},[57,45231,45232],{"class":59,"line":10179},[57,45233,34586],{"class":63},[57,45235,45236],{"class":59,"line":10185},[57,45237,34591],{"class":63},[57,45239,45240,45242,45244],{"class":59,"line":10193},[57,45241,34596],{"class":140},[57,45243,34599],{"class":74},[57,45245,259],{"class":140},[57,45247,45248],{"class":59,"line":10198},[57,45249,34606],{"class":63},[57,45251,45252,45254,45256],{"class":59,"line":16876},[57,45253,34219],{"class":140},[57,45255,156],{"class":136},[57,45257,34615],{"class":140},[57,45259,45260],{"class":59,"line":16882},[57,45261,34620],{"class":63},[57,45263,45264],{"class":59,"line":16905},[57,45265,34625],{"class":140},[57,45267,45268],{"class":59,"line":16911},[57,45269,2673],{"emptyLinePlaceholder":350},[57,45271,45272],{"class":59,"line":16934},[57,45273,34634],{"class":63},[57,45275,45276],{"class":59,"line":16948},[57,45277,34639],{"class":63},[57,45279,45280,45282,45284,45286,45288,45290,45292],{"class":59,"line":16968},[57,45281,31434],{"class":140},[57,45283,156],{"class":136},[57,45285,31441],{"class":74},[57,45287,211],{"class":136},[57,45289,31446],{"class":140},[57,45291,232],{"class":136},[57,45293,34316],{"class":74},[57,45295,45296,45298,45300],{"class":59,"line":16974},[57,45297,31486],{"class":140},[57,45299,156],{"class":136},[57,45301,32486],{"class":140},[57,45303,45304],{"class":59,"line":16985},[57,45305,34668],{"class":63},[57,45307,45308],{"class":59,"line":17008},[57,45309,34673],{"class":63},[57,45311,45312,45314,45316,45318,45320,45322,45324,45326,45328,45330,45332,45334,45336,45338,45340,45342,45344,45346,45348,45350,45352,45354,45356],{"class":59,"line":17030},[57,45313,34678],{"class":140},[57,45315,156],{"class":136},[57,45317,1306],{"class":140},[57,45319,34685],{"class":74},[57,45321,273],{"class":140},[57,45323,34690],{"class":74},[57,45325,273],{"class":140},[57,45327,34695],{"class":74},[57,45329,273],{"class":140},[57,45331,34700],{"class":74},[57,45333,273],{"class":140},[57,45335,34705],{"class":74},[57,45337,273],{"class":140},[57,45339,34710],{"class":74},[57,45341,273],{"class":140},[57,45343,34715],{"class":74},[57,45345,273],{"class":140},[57,45347,34720],{"class":74},[57,45349,273],{"class":140},[57,45351,34725],{"class":74},[57,45353,273],{"class":140},[57,45355,34730],{"class":74},[57,45357,33443],{"class":140},[57,45359,45360,45362],{"class":59,"line":17035},[57,45361,34375],{"class":136},[57,45363,33081],{"class":140},[57,45365,45366],{"class":59,"line":17041},[57,45367,34743],{"class":63},[57,45369,45370,45372,45374,45376],{"class":59,"line":17055},[57,45371,3676],{"class":136},[57,45373,34750],{"class":140},[57,45375,26312],{"class":136},[57,45377,34394],{"class":140},[57,45379,45380,45382,45384],{"class":59,"line":17068},[57,45381,32807],{"class":140},[57,45383,156],{"class":136},[57,45385,32812],{"class":140},[57,45387,45388,45390,45392],{"class":59,"line":17073},[57,45389,32822],{"class":140},[57,45391,156],{"class":136},[57,45393,32827],{"class":140},[57,45395,45396],{"class":59,"line":17087},[57,45397,2673],{"emptyLinePlaceholder":350},[57,45399,45400],{"class":59,"line":17092},[57,45401,34779],{"class":63},[57,45403,45404],{"class":59,"line":17098},[57,45405,33072],{"class":140},[57,45407,45408],{"class":59,"line":17103},[57,45409,34788],{"class":63},[57,45411,45412,45414,45416],{"class":59,"line":17117},[57,45413,32857],{"class":140},[57,45415,156],{"class":136},[57,45417,32862],{"class":140},[57,45419,45420],{"class":59,"line":17122},[57,45421,34801],{"class":63},[57,45423,45424,45426,45428,45430,45432,45434,45436],{"class":59,"line":17127},[57,45425,32874],{"class":140},[57,45427,156],{"class":136},[57,45429,32879],{"class":140},[57,45431,32882],{"class":5489},[57,45433,156],{"class":136},[57,45435,635],{"class":81},[57,45437,238],{"class":140},[57,45439,45440],{"class":59,"line":17141},[57,45441,34822],{"class":63},[57,45443,45444,45446,45448],{"class":59,"line":17153},[57,45445,34827],{"class":140},[57,45447,156],{"class":136},[57,45449,34832],{"class":140},[57,45451,45452,45454,45456],{"class":59,"line":17158},[57,45453,34837],{"class":140},[57,45455,156],{"class":136},[57,45457,34842],{"class":140},[57,45459,45460,45462,45464,45466,45468,45470,45472,45474],{"class":59,"line":17171},[57,45461,34847],{"class":81},[57,45463,168],{"class":140},[57,45465,34852],{"class":74},[57,45467,34855],{"class":140},[57,45469,34858],{"class":74},[57,45471,273],{"class":140},[57,45473,34863],{"class":74},[57,45475,34866],{"class":140},[394,45477,45479],{"id":45478},"_24训练自己的数据集","2.4.训练自己的数据集",[14,45481,45482],{},"猫狗分类任务",[14,45484,45485],{},"划分数据集和验证集",[49,45487,45489],{"className":122,"code":45488,"language":124,"meta":46,"style":46},"# 创建脚本，用于划分数据集和验证集\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",[28,45490,45491,45496,45503,45508,45519,45526,45530,45540,45554,45563,45567,45572,45582,45602,45606,45611,45621,45632,45645,45649,45654,45663,45673,45684,45688,45693,45703,45707,45712,45717,45722,45727,45732,45736,45746,45773,45786,45798,45825,45830,45835,45849,45854,45866,45881,45896,45904,45908,45913,45919,45931,45944,45949,45954,45959,46009,46015,46019],{"__ignoreMap":46},[57,45492,45493],{"class":59,"line":60},[57,45494,45495],{"class":63},"# 创建脚本，用于划分数据集和验证集\n",[57,45497,45498,45500],{"class":59,"line":67},[57,45499,137],{"class":136},[57,45501,45502],{"class":140}," os\n",[57,45504,45505],{"class":59,"line":144},[57,45506,45507],{"class":63},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[57,45509,45510,45512,45515,45517],{"class":59,"line":150},[57,45511,30934],{"class":136},[57,45513,45514],{"class":140}," shutil ",[57,45516,137],{"class":136},[57,45518,32019],{"class":140},[57,45520,45521,45523],{"class":59,"line":162},[57,45522,137],{"class":136},[57,45524,45525],{"class":140}," random\n",[57,45527,45528],{"class":59,"line":180},[57,45529,2673],{"emptyLinePlaceholder":350},[57,45531,45532,45534,45537],{"class":59,"line":186},[57,45533,32144],{"class":136},[57,45535,45536],{"class":70}," mkfile",[57,45538,45539],{"class":140},"(file):\n",[57,45541,45542,45544,45546,45549,45552],{"class":59,"line":197},[57,45543,3374],{"class":136},[57,45545,39127],{"class":136},[57,45547,45548],{"class":140}," os.path.exists(",[57,45550,45551],{"class":5489},"file",[57,45553,30983],{"class":140},[57,45555,45556,45559,45561],{"class":59,"line":241},[57,45557,45558],{"class":140},"        os.makedirs(",[57,45560,45551],{"class":5489},[57,45562,238],{"class":140},[57,45564,45565],{"class":59,"line":249},[57,45566,2673],{"emptyLinePlaceholder":350},[57,45568,45569],{"class":59,"line":262},[57,45570,45571],{"class":63},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[57,45573,45574,45577,45579],{"class":59,"line":281},[57,45575,45576],{"class":140},"file_path",[57,45578,156],{"class":136},[57,45580,45581],{"class":74},"'data_cat_dog'\n",[57,45583,45584,45587,45589,45592,45594,45597,45599],{"class":59,"line":287},[57,45585,45586],{"class":140},"flower_class",[57,45588,156],{"class":136},[57,45590,45591],{"class":140},"[cla ",[57,45593,3298],{"class":136},[57,45595,45596],{"class":140}," cla ",[57,45598,26312],{"class":136},[57,45600,45601],{"class":140}," os.listdir(file_path)]\n",[57,45603,45604],{"class":59,"line":298},[57,45605,2673],{"emptyLinePlaceholder":350},[57,45607,45608],{"class":59,"line":311},[57,45609,45610],{"class":63},"# 创建训练集train文件夹\n",[57,45612,45613,45616,45619],{"class":59,"line":322},[57,45614,45615],{"class":140},"mkfile(",[57,45617,45618],{"class":74},"'data\u002Ftrain'",[57,45620,238],{"class":140},[57,45622,45623,45625,45627,45629],{"class":59,"line":1929},[57,45624,3298],{"class":136},[57,45626,45596],{"class":140},[57,45628,26312],{"class":136},[57,45630,45631],{"class":140}," flower_class:\n",[57,45633,45634,45637,45640,45642],{"class":59,"line":1950},[57,45635,45636],{"class":140},"    mkfile(",[57,45638,45639],{"class":74},"'data\u002Ftrain\u002F'",[57,45641,897],{"class":136},[57,45643,45644],{"class":140},"cla)\n",[57,45646,45647],{"class":59,"line":1955},[57,45648,2673],{"emptyLinePlaceholder":350},[57,45650,45651],{"class":59,"line":1969},[57,45652,45653],{"class":63},"# 创建验证集val文件夹\n",[57,45655,45656,45658,45661],{"class":59,"line":1974},[57,45657,45615],{"class":140},[57,45659,45660],{"class":74},"'data\u002Ftest'",[57,45662,238],{"class":140},[57,45664,45665,45667,45669,45671],{"class":59,"line":2001},[57,45666,3298],{"class":136},[57,45668,45596],{"class":140},[57,45670,26312],{"class":136},[57,45672,45631],{"class":140},[57,45674,45675,45677,45680,45682],{"class":59,"line":2006},[57,45676,45636],{"class":140},[57,45678,45679],{"class":74},"'data\u002Ftest\u002F'",[57,45681,897],{"class":136},[57,45683,45644],{"class":140},[57,45685,45686],{"class":59,"line":2023},[57,45687,2673],{"emptyLinePlaceholder":350},[57,45689,45690],{"class":59,"line":2028},[57,45691,45692],{"class":63},"# 划分比例，训练集：测试集=9：1\n",[57,45694,45695,45698,45700],{"class":59,"line":2033},[57,45696,45697],{"class":140},"split_rate",[57,45699,156],{"class":136},[57,45701,45702],{"class":81},"0.1\n",[57,45704,45705],{"class":59,"line":2038},[57,45706,2673],{"emptyLinePlaceholder":350},[57,45708,45709],{"class":59,"line":2052},[57,45710,45711],{"class":63},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[57,45713,45714],{"class":59,"line":2057},[57,45715,45716],{"class":63},"# cla_path：当前类别的原始图片路径\n",[57,45718,45719],{"class":59,"line":2850},[57,45720,45721],{"class":63},"# images：当前类别下所有图片的文件名列表\n",[57,45723,45724],{"class":59,"line":2864},[57,45725,45726],{"class":63},"# num：该类别图片总数\n",[57,45728,45729],{"class":59,"line":2872},[57,45730,45731],{"class":63},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[57,45733,45734],{"class":59,"line":2877},[57,45735,2673],{"emptyLinePlaceholder":350},[57,45737,45738,45740,45742,45744],{"class":59,"line":2883},[57,45739,3298],{"class":136},[57,45741,45596],{"class":140},[57,45743,26312],{"class":136},[57,45745,45631],{"class":140},[57,45747,45748,45751,45753,45756,45758,45761,45764,45766,45768,45770],{"class":59,"line":2889},[57,45749,45750],{"class":140},"    cla_path ",[57,45752,156],{"class":136},[57,45754,45755],{"class":140}," file_path ",[57,45757,897],{"class":136},[57,45759,45760],{"class":74}," '\u002F'",[57,45762,45763],{"class":136}," +",[57,45765,45596],{"class":140},[57,45767,897],{"class":136},[57,45769,45760],{"class":74},[57,45771,45772],{"class":63},"  # 某一类别的子目录\n",[57,45774,45775,45778,45780,45783],{"class":59,"line":2894},[57,45776,45777],{"class":140},"    images ",[57,45779,156],{"class":136},[57,45781,45782],{"class":140}," os.listdir(cla_path)  ",[57,45784,45785],{"class":63},"# iamges 列表存储了该目录下所有图像的名称\n",[57,45787,45788,45791,45793,45795],{"class":59,"line":8221},[57,45789,45790],{"class":140},"    num ",[57,45792,156],{"class":136},[57,45794,7604],{"class":81},[57,45796,45797],{"class":140},"(images)\n",[57,45799,45800,45803,45805,45808,45810,45812,45814,45817,45819,45822],{"class":59,"line":8245},[57,45801,45802],{"class":140},"    eval_index ",[57,45804,156],{"class":136},[57,45806,45807],{"class":140}," random.sample(images, ",[57,45809,909],{"class":5489},[57,45811,156],{"class":136},[57,45813,429],{"class":81},[57,45815,45816],{"class":140},"(num ",[57,45818,871],{"class":136},[57,45820,45821],{"class":140}," split_rate))  ",[57,45823,45824],{"class":63},"# 从images列表中随机抽取 k 个图像名称\n",[57,45826,45827],{"class":59,"line":8250},[57,45828,45829],{"class":63},"    # 遍历该类别下的所有图片\n",[57,45831,45832],{"class":59,"line":8256},[57,45833,45834],{"class":63},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[57,45836,45837,45839,45842,45844,45846],{"class":59,"line":8283},[57,45838,3474],{"class":136},[57,45840,45841],{"class":140}," index, image ",[57,45843,26312],{"class":136},[57,45845,31803],{"class":81},[57,45847,45848],{"class":140},"(images):\n",[57,45850,45851],{"class":59,"line":8288},[57,45852,45853],{"class":63},"        # eval_index 中保存验证集val的图像名称\n",[57,45855,45856,45858,45861,45863],{"class":59,"line":8294},[57,45857,2770],{"class":136},[57,45859,45860],{"class":140}," image ",[57,45862,26312],{"class":136},[57,45864,45865],{"class":140}," eval_index:\n",[57,45867,45868,45871,45873,45876,45878],{"class":59,"line":8306},[57,45869,45870],{"class":140},"            image_path ",[57,45872,156],{"class":136},[57,45874,45875],{"class":140}," cla_path ",[57,45877,897],{"class":136},[57,45879,45880],{"class":140}," image\n",[57,45882,45883,45886,45888,45891,45893],{"class":59,"line":8318},[57,45884,45885],{"class":140},"            new_path ",[57,45887,156],{"class":136},[57,45889,45890],{"class":74}," 'data\u002Ftest\u002F'",[57,45892,45763],{"class":136},[57,45894,45895],{"class":140}," cla\n",[57,45897,45898,45901],{"class":59,"line":8330},[57,45899,45900],{"class":140},"            copy(image_path, new_path)  ",[57,45902,45903],{"class":63},"# 将选中的图像复制到新路径\n",[57,45905,45906],{"class":59,"line":9989},[57,45907,2673],{"emptyLinePlaceholder":350},[57,45909,45910],{"class":59,"line":10014},[57,45911,45912],{"class":63},"        # 其余的图像保存在训练集train中\n",[57,45914,45915,45917],{"class":59,"line":10037},[57,45916,2807],{"class":136},[57,45918,4012],{"class":140},[57,45920,45921,45923,45925,45927,45929],{"class":59,"line":10061},[57,45922,45870],{"class":140},[57,45924,156],{"class":136},[57,45926,45875],{"class":140},[57,45928,897],{"class":136},[57,45930,45880],{"class":140},[57,45932,45933,45935,45937,45940,45942],{"class":59,"line":10066},[57,45934,45885],{"class":140},[57,45936,156],{"class":136},[57,45938,45939],{"class":74}," 'data\u002Ftrain\u002F'",[57,45941,45763],{"class":136},[57,45943,45895],{"class":140},[57,45945,45946],{"class":59,"line":10071},[57,45947,45948],{"class":140},"            copy(image_path, new_path)\n",[57,45950,45951],{"class":59,"line":10076},[57,45952,45953],{"class":63},"            # 打印进度条信息\n",[57,45955,45956],{"class":59,"line":10085},[57,45957,45958],{"class":63},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[57,45960,45961,45963,45965,45967,45970,45972,45974,45977,45979,45981,45983,45986,45989,45991,45993,45996,45999,46001,46003,46006],{"class":59,"line":10090},[57,45962,32648],{"class":81},[57,45964,168],{"class":140},[57,45966,668],{"class":74},[57,45968,45969],{"class":81},"\\r",[57,45971,1306],{"class":74},[57,45973,32656],{"class":81},[57,45975,45976],{"class":74},"] processing [",[57,45978,32656],{"class":81},[57,45980,1000],{"class":74},[57,45982,32656],{"class":81},[57,45984,45985],{"class":74},"]\"",[57,45987,45988],{"class":140},".format(cla, index ",[57,45990,897],{"class":136},[57,45992,25387],{"class":81},[57,45994,45995],{"class":140},", num), ",[57,45997,45998],{"class":5489},"end",[57,46000,156],{"class":136},[57,46002,7925],{"class":74},[57,46004,46005],{"class":140},")  ",[57,46007,46008],{"class":63},"# processing bar\n",[57,46010,46011,46013],{"class":59,"line":10096},[57,46012,31496],{"class":81},[57,46014,2249],{"class":140},[57,46016,46017],{"class":59,"line":10117},[57,46018,2673],{"emptyLinePlaceholder":350},[57,46020,46021,46023,46025,46028],{"class":59,"line":10123},[57,46022,165],{"class":81},[57,46024,168],{"class":140},[57,46026,46027],{"class":74},"\"processing done!\"",[57,46029,238],{"class":140},[14,46031,46032],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22270,46034,46036],{"id":46035},"_242模型代码","2.4.2.模型代码",[14,46038,46039],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[49,46041,46043],{"className":122,"code":46042,"language":124,"meta":46,"style":46},"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",[28,46044,46045,46051,46061,46071,46075,46091,46099,46113,46123,46127,46157,46161,46195,46241,46245,46279,46325,46329,46333,46367,46397,46401,46409,46423,46445,46467,46485,46489,46503,46507,46511,46527,46531,46539,46553,46563,46607,46611,46639,46643,46653,46681,46685,46721,46725,46753,46757,46767,46799,46831,46859,46863,46873,46905,46937,46969,47001,47033,47061,47065,47075,47107,47139,47151,47155,47167,47171,47175,47187,47195,47215,47219,47223,47227,47231,47235,47239,47253,47261,47269,47281,47295,47303,47307,47315,47325,47335,47345,47355,47365,47371,47375,47379,47391,47411,47419],{"__ignoreMap":46},[57,46046,46047,46049],{"class":59,"line":60},[57,46048,137],{"class":136},[57,46050,141],{"class":140},[57,46052,46053,46055,46057,46059],{"class":59,"line":67},[57,46054,30934],{"class":136},[57,46056,30937],{"class":140},[57,46058,137],{"class":136},[57,46060,30942],{"class":140},[57,46062,46063,46065,46067,46069],{"class":59,"line":144},[57,46064,30934],{"class":136},[57,46066,30954],{"class":140},[57,46068,137],{"class":136},[57,46070,30959],{"class":140},[57,46072,46073],{"class":59,"line":150},[57,46074,2673],{"emptyLinePlaceholder":350},[57,46076,46077,46079,46081,46083,46085,46087,46089],{"class":59,"line":162},[57,46078,14966],{"class":136},[57,46080,41690],{"class":70},[57,46082,168],{"class":140},[57,46084,30975],{"class":70},[57,46086,974],{"class":140},[57,46088,30980],{"class":70},[57,46090,30983],{"class":140},[57,46092,46093,46095,46097],{"class":59,"line":180},[57,46094,30998],{"class":136},[57,46096,31001],{"class":81},[57,46098,41709],{"class":140},[57,46100,46101,46103,46105,46107,46109,46111],{"class":59,"line":186},[57,46102,31014],{"class":81},[57,46104,41716],{"class":140},[57,46106,31020],{"class":81},[57,46108,31023],{"class":140},[57,46110,31026],{"class":81},[57,46112,2249],{"class":140},[57,46114,46115,46117,46119,46121],{"class":59,"line":197},[57,46116,31042],{"class":81},[57,46118,34968],{"class":140},[57,46120,156],{"class":136},[57,46122,34973],{"class":140},[57,46124,46125],{"class":59,"line":241},[57,46126,41739],{"class":63},[57,46128,46129,46131,46133,46135,46137,46139,46141,46143,46145,46147,46149,46151,46153,46155],{"class":59,"line":249},[57,46130,31042],{"class":81},[57,46132,41746],{"class":140},[57,46134,156],{"class":136},[57,46136,31050],{"class":140},[57,46138,31053],{"class":5489},[57,46140,156],{"class":136},[57,46142,41757],{"class":140},[57,46144,31062],{"class":5489},[57,46146,156],{"class":136},[57,46148,41764],{"class":140},[57,46150,31071],{"class":5489},[57,46152,156],{"class":136},[57,46154,635],{"class":81},[57,46156,238],{"class":140},[57,46158,46159],{"class":59,"line":262},[57,46160,41777],{"class":63},[57,46162,46163,46165,46167,46169,46171,46173,46175,46177,46179,46181,46183,46185,46187,46189,46191,46193],{"class":59,"line":281},[57,46164,31042],{"class":81},[57,46166,41784],{"class":140},[57,46168,156],{"class":136},[57,46170,31050],{"class":140},[57,46172,31053],{"class":5489},[57,46174,156],{"class":136},[57,46176,41757],{"class":140},[57,46178,31062],{"class":5489},[57,46180,156],{"class":136},[57,46182,41801],{"class":140},[57,46184,226],{"class":81},[57,46186,41806],{"class":140},[57,46188,31071],{"class":5489},[57,46190,156],{"class":136},[57,46192,635],{"class":81},[57,46194,238],{"class":140},[57,46196,46197,46199,46201,46203,46205,46207,46209,46211,46213,46215,46217,46219,46221,46223,46225,46227,46229,46231,46233,46235,46237,46239],{"class":59,"line":287},[57,46198,31042],{"class":81},[57,46200,41821],{"class":140},[57,46202,156],{"class":136},[57,46204,31050],{"class":140},[57,46206,31053],{"class":5489},[57,46208,156],{"class":136},[57,46210,41801],{"class":140},[57,46212,226],{"class":81},[57,46214,41806],{"class":140},[57,46216,31062],{"class":5489},[57,46218,156],{"class":136},[57,46220,41801],{"class":140},[57,46222,635],{"class":81},[57,46224,41806],{"class":140},[57,46226,31071],{"class":5489},[57,46228,156],{"class":136},[57,46230,270],{"class":81},[57,46232,273],{"class":140},[57,46234,31080],{"class":5489},[57,46236,156],{"class":136},[57,46238,635],{"class":81},[57,46240,238],{"class":140},[57,46242,46243],{"class":59,"line":298},[57,46244,41866],{"class":63},[57,46246,46247,46249,46251,46253,46255,46257,46259,46261,46263,46265,46267,46269,46271,46273,46275,46277],{"class":59,"line":311},[57,46248,31042],{"class":81},[57,46250,41873],{"class":140},[57,46252,156],{"class":136},[57,46254,31050],{"class":140},[57,46256,31053],{"class":5489},[57,46258,156],{"class":136},[57,46260,41757],{"class":140},[57,46262,31062],{"class":5489},[57,46264,156],{"class":136},[57,46266,41890],{"class":140},[57,46268,226],{"class":81},[57,46270,41806],{"class":140},[57,46272,31071],{"class":5489},[57,46274,156],{"class":136},[57,46276,635],{"class":81},[57,46278,238],{"class":140},[57,46280,46281,46283,46285,46287,46289,46291,46293,46295,46297,46299,46301,46303,46305,46307,46309,46311,46313,46315,46317,46319,46321,46323],{"class":59,"line":322},[57,46282,31042],{"class":81},[57,46284,41909],{"class":140},[57,46286,156],{"class":136},[57,46288,31050],{"class":140},[57,46290,31053],{"class":5489},[57,46292,156],{"class":136},[57,46294,41890],{"class":140},[57,46296,226],{"class":81},[57,46298,41806],{"class":140},[57,46300,31062],{"class":5489},[57,46302,156],{"class":136},[57,46304,41890],{"class":140},[57,46306,635],{"class":81},[57,46308,41806],{"class":140},[57,46310,31071],{"class":5489},[57,46312,156],{"class":136},[57,46314,736],{"class":81},[57,46316,273],{"class":140},[57,46318,31080],{"class":5489},[57,46320,156],{"class":136},[57,46322,498],{"class":81},[57,46324,238],{"class":140},[57,46326,46327],{"class":59,"line":1929},[57,46328,41954],{"class":63},[57,46330,46331],{"class":59,"line":1950},[57,46332,41959],{"class":63},[57,46334,46335,46337,46339,46341,46343,46345,46347,46349,46351,46353,46355,46357,46359,46361,46363,46365],{"class":59,"line":1955},[57,46336,31042],{"class":81},[57,46338,41966],{"class":140},[57,46340,156],{"class":136},[57,46342,35026],{"class":140},[57,46344,31071],{"class":5489},[57,46346,156],{"class":136},[57,46348,270],{"class":81},[57,46350,273],{"class":140},[57,46352,31126],{"class":5489},[57,46354,156],{"class":136},[57,46356,635],{"class":81},[57,46358,273],{"class":140},[57,46360,31080],{"class":5489},[57,46362,156],{"class":136},[57,46364,635],{"class":81},[57,46366,238],{"class":140},[57,46368,46369,46371,46373,46375,46377,46379,46381,46383,46385,46387,46389,46391,46393,46395],{"class":59,"line":1969},[57,46370,31042],{"class":81},[57,46372,42001],{"class":140},[57,46374,156],{"class":136},[57,46376,31050],{"class":140},[57,46378,31053],{"class":5489},[57,46380,156],{"class":136},[57,46382,41757],{"class":140},[57,46384,31062],{"class":5489},[57,46386,156],{"class":136},[57,46388,42018],{"class":140},[57,46390,31071],{"class":5489},[57,46392,156],{"class":136},[57,46394,635],{"class":81},[57,46396,238],{"class":140},[57,46398,46399],{"class":59,"line":1974},[57,46400,2673],{"emptyLinePlaceholder":350},[57,46402,46403,46405,46407],{"class":59,"line":2001},[57,46404,30998],{"class":136},[57,46406,31290],{"class":70},[57,46408,31293],{"class":140},[57,46410,46411,46413,46415,46417,46419,46421],{"class":59,"line":2006},[57,46412,42043],{"class":140},[57,46414,156],{"class":136},[57,46416,31020],{"class":81},[57,46418,35381],{"class":140},[57,46420,31020],{"class":81},[57,46422,42054],{"class":140},[57,46424,46425,46427,46429,46431,46433,46435,46437,46439,46441,46443],{"class":59,"line":2023},[57,46426,7358],{"class":140},[57,46428,156],{"class":136},[57,46430,31020],{"class":81},[57,46432,35381],{"class":140},[57,46434,31020],{"class":81},[57,46436,42069],{"class":140},[57,46438,31020],{"class":81},[57,46440,35381],{"class":140},[57,46442,31020],{"class":81},[57,46444,42078],{"class":140},[57,46446,46447,46449,46451,46453,46455,46457,46459,46461,46463,46465],{"class":59,"line":2028},[57,46448,42083],{"class":140},[57,46450,156],{"class":136},[57,46452,31020],{"class":81},[57,46454,35381],{"class":140},[57,46456,31020],{"class":81},[57,46458,42094],{"class":140},[57,46460,31020],{"class":81},[57,46462,35381],{"class":140},[57,46464,31020],{"class":81},[57,46466,42103],{"class":140},[57,46468,46469,46471,46473,46475,46477,46479,46481,46483],{"class":59,"line":2033},[57,46470,42108],{"class":140},[57,46472,156],{"class":136},[57,46474,31020],{"class":81},[57,46476,35381],{"class":140},[57,46478,31020],{"class":81},[57,46480,42119],{"class":140},[57,46482,31020],{"class":81},[57,46484,42124],{"class":140},[57,46486,46487],{"class":59,"line":2038},[57,46488,42129],{"class":63},[57,46490,46491,46493,46495,46497,46499,46501],{"class":59,"line":2052},[57,46492,15024],{"class":136},[57,46494,42136],{"class":140},[57,46496,32882],{"class":5489},[57,46498,156],{"class":136},[57,46500,635],{"class":81},[57,46502,238],{"class":140},[57,46504,46505],{"class":59,"line":2057},[57,46506,2673],{"emptyLinePlaceholder":350},[57,46508,46509],{"class":59,"line":2850},[57,46510,42157],{"class":63},[57,46512,46513,46515,46517,46519,46521,46523,46525],{"class":59,"line":2864},[57,46514,14966],{"class":136},[57,46516,42164],{"class":70},[57,46518,168],{"class":140},[57,46520,30975],{"class":70},[57,46522,974],{"class":140},[57,46524,30980],{"class":70},[57,46526,30983],{"class":140},[57,46528,46529],{"class":59,"line":2872},[57,46530,42179],{"class":63},[57,46532,46533,46535,46537],{"class":59,"line":2877},[57,46534,30998],{"class":136},[57,46536,31001],{"class":81},[57,46538,42188],{"class":140},[57,46540,46541,46543,46545,46547,46549,46551],{"class":59,"line":2883},[57,46542,31014],{"class":81},[57,46544,42195],{"class":140},[57,46546,31020],{"class":81},[57,46548,31023],{"class":140},[57,46550,31026],{"class":81},[57,46552,2249],{"class":140},[57,46554,46555,46557,46559,46561],{"class":59,"line":2889},[57,46556,31042],{"class":81},[57,46558,42210],{"class":140},[57,46560,156],{"class":136},[57,46562,38206],{"class":140},[57,46564,46565,46567,46569,46571,46573,46575,46577,46579,46581,46583,46585,46587,46589,46591,46593,46595,46597,46599,46601,46603,46605],{"class":59,"line":2894},[57,46566,38211],{"class":140},[57,46568,31053],{"class":5489},[57,46570,156],{"class":136},[57,46572,270],{"class":81},[57,46574,273],{"class":140},[57,46576,31062],{"class":5489},[57,46578,156],{"class":136},[57,46580,621],{"class":81},[57,46582,273],{"class":140},[57,46584,31071],{"class":5489},[57,46586,156],{"class":136},[57,46588,786],{"class":81},[57,46590,273],{"class":140},[57,46592,31126],{"class":5489},[57,46594,156],{"class":136},[57,46596,498],{"class":81},[57,46598,273],{"class":140},[57,46600,31080],{"class":5489},[57,46602,156],{"class":136},[57,46604,270],{"class":81},[57,46606,38244],{"class":140},[57,46608,46609],{"class":59,"line":8221},[57,46610,38249],{"class":140},[57,46612,46613,46615,46617,46619,46621,46623,46625,46627,46629,46631,46633,46635,46637],{"class":59,"line":8245},[57,46614,38294],{"class":140},[57,46616,31071],{"class":5489},[57,46618,156],{"class":136},[57,46620,270],{"class":81},[57,46622,273],{"class":140},[57,46624,31126],{"class":5489},[57,46626,156],{"class":136},[57,46628,498],{"class":81},[57,46630,273],{"class":140},[57,46632,31080],{"class":5489},[57,46634,156],{"class":136},[57,46636,635],{"class":81},[57,46638,238],{"class":140},[57,46640,46641],{"class":59,"line":8250},[57,46642,38323],{"class":140},[57,46644,46645,46647,46649,46651],{"class":59,"line":8256},[57,46646,31042],{"class":81},[57,46648,42301],{"class":140},[57,46650,156],{"class":136},[57,46652,38206],{"class":140},[57,46654,46655,46657,46659,46661,46663,46665,46667,46669,46671,46673,46675,46677,46679],{"class":59,"line":8283},[57,46656,38211],{"class":140},[57,46658,31053],{"class":5489},[57,46660,156],{"class":136},[57,46662,621],{"class":81},[57,46664,273],{"class":140},[57,46666,31062],{"class":5489},[57,46668,156],{"class":136},[57,46670,621],{"class":81},[57,46672,273],{"class":140},[57,46674,31071],{"class":5489},[57,46676,156],{"class":136},[57,46678,635],{"class":81},[57,46680,38244],{"class":140},[57,46682,46683],{"class":59,"line":8288},[57,46684,38249],{"class":140},[57,46686,46687,46689,46691,46693,46695,46697,46699,46701,46703,46705,46707,46709,46711,46713,46715,46717,46719],{"class":59,"line":8294},[57,46688,38211],{"class":140},[57,46690,31053],{"class":5489},[57,46692,156],{"class":136},[57,46694,621],{"class":81},[57,46696,273],{"class":140},[57,46698,31062],{"class":5489},[57,46700,156],{"class":136},[57,46702,42356],{"class":81},[57,46704,273],{"class":140},[57,46706,31071],{"class":5489},[57,46708,156],{"class":136},[57,46710,270],{"class":81},[57,46712,273],{"class":140},[57,46714,31080],{"class":5489},[57,46716,156],{"class":136},[57,46718,635],{"class":81},[57,46720,38244],{"class":140},[57,46722,46723],{"class":59,"line":8306},[57,46724,38249],{"class":140},[57,46726,46727,46729,46731,46733,46735,46737,46739,46741,46743,46745,46747,46749,46751],{"class":59,"line":8318},[57,46728,38294],{"class":140},[57,46730,31071],{"class":5489},[57,46732,156],{"class":136},[57,46734,270],{"class":81},[57,46736,273],{"class":140},[57,46738,31126],{"class":5489},[57,46740,156],{"class":136},[57,46742,498],{"class":81},[57,46744,273],{"class":140},[57,46746,31080],{"class":5489},[57,46748,156],{"class":136},[57,46750,635],{"class":81},[57,46752,238],{"class":140},[57,46754,46755],{"class":59,"line":8330},[57,46756,38323],{"class":140},[57,46758,46759,46761,46763,46765],{"class":59,"line":9989},[57,46760,31042],{"class":81},[57,46762,42417],{"class":140},[57,46764,156],{"class":136},[57,46766,38206],{"class":140},[57,46768,46769,46771,46773,46775,46777,46779,46781,46783,46785,46787,46789,46791,46793,46795,46797],{"class":59,"line":10014},[57,46770,42426],{"class":140},[57,46772,42356],{"class":81},[57,46774,273],{"class":140},[57,46776,621],{"class":81},[57,46778,42435],{"class":140},[57,46780,627],{"class":81},[57,46782,273],{"class":140},[57,46784,32267],{"class":81},[57,46786,42444],{"class":140},[57,46788,1017],{"class":81},[57,46790,273],{"class":140},[57,46792,615],{"class":81},[57,46794,42453],{"class":140},[57,46796,615],{"class":81},[57,46798,38244],{"class":140},[57,46800,46801,46803,46805,46807,46809,46811,46813,46815,46817,46819,46821,46823,46825,46827,46829],{"class":59,"line":10037},[57,46802,42426],{"class":140},[57,46804,35067],{"class":81},[57,46806,273],{"class":140},[57,46808,32267],{"class":81},[57,46810,42435],{"class":140},[57,46812,32267],{"class":81},[57,46814,273],{"class":140},[57,46816,42356],{"class":81},[57,46818,42444],{"class":140},[57,46820,615],{"class":81},[57,46822,273],{"class":140},[57,46824,627],{"class":81},[57,46826,42453],{"class":140},[57,46828,621],{"class":81},[57,46830,38244],{"class":140},[57,46832,46833,46835,46837,46839,46841,46843,46845,46847,46849,46851,46853,46855,46857],{"class":59,"line":10061},[57,46834,38294],{"class":140},[57,46836,31071],{"class":5489},[57,46838,156],{"class":136},[57,46840,270],{"class":81},[57,46842,273],{"class":140},[57,46844,31126],{"class":5489},[57,46846,156],{"class":136},[57,46848,498],{"class":81},[57,46850,273],{"class":140},[57,46852,31080],{"class":5489},[57,46854,156],{"class":136},[57,46856,635],{"class":81},[57,46858,238],{"class":140},[57,46860,46861],{"class":59,"line":10066},[57,46862,38323],{"class":140},[57,46864,46865,46867,46869,46871],{"class":59,"line":10071},[57,46866,31042],{"class":81},[57,46868,42528],{"class":140},[57,46870,156],{"class":136},[57,46872,38206],{"class":140},[57,46874,46875,46877,46879,46881,46883,46885,46887,46889,46891,46893,46895,46897,46899,46901,46903],{"class":59,"line":10076},[57,46876,42426],{"class":140},[57,46878,42539],{"class":81},[57,46880,273],{"class":140},[57,46882,42356],{"class":81},[57,46884,42435],{"class":140},[57,46886,627],{"class":81},[57,46888,273],{"class":140},[57,46890,42552],{"class":81},[57,46892,42444],{"class":140},[57,46894,1017],{"class":81},[57,46896,273],{"class":140},[57,46898,1023],{"class":81},[57,46900,42453],{"class":140},[57,46902,621],{"class":81},[57,46904,38244],{"class":140},[57,46906,46907,46909,46911,46913,46915,46917,46919,46921,46923,46925,46927,46929,46931,46933,46935],{"class":59,"line":10085},[57,46908,42426],{"class":140},[57,46910,38654],{"class":81},[57,46912,273],{"class":140},[57,46914,21320],{"class":81},[57,46916,42435],{"class":140},[57,46918,1034],{"class":81},[57,46920,273],{"class":140},[57,46922,31698],{"class":81},[57,46924,42444],{"class":140},[57,46926,1216],{"class":81},[57,46928,273],{"class":140},[57,46930,621],{"class":81},[57,46932,42453],{"class":140},[57,46934,621],{"class":81},[57,46936,38244],{"class":140},[57,46938,46939,46941,46943,46945,46947,46949,46951,46953,46955,46957,46959,46961,46963,46965,46967],{"class":59,"line":10090},[57,46940,42426],{"class":140},[57,46942,38654],{"class":81},[57,46944,273],{"class":140},[57,46946,32267],{"class":81},[57,46948,42435],{"class":140},[57,46950,32267],{"class":81},[57,46952,273],{"class":140},[57,46954,35067],{"class":81},[57,46956,42444],{"class":140},[57,46958,1216],{"class":81},[57,46960,273],{"class":140},[57,46962,621],{"class":81},[57,46964,42453],{"class":140},[57,46966,621],{"class":81},[57,46968,38244],{"class":140},[57,46970,46971,46973,46975,46977,46979,46981,46983,46985,46987,46989,46991,46993,46995,46997,46999],{"class":59,"line":10096},[57,46972,42426],{"class":140},[57,46974,38654],{"class":81},[57,46976,273],{"class":140},[57,46978,1034],{"class":81},[57,46980,42435],{"class":140},[57,46982,32267],{"class":81},[57,46984,273],{"class":140},[57,46986,42649],{"class":81},[57,46988,42444],{"class":140},[57,46990,615],{"class":81},[57,46992,273],{"class":140},[57,46994,621],{"class":81},[57,46996,42453],{"class":140},[57,46998,621],{"class":81},[57,47000,38244],{"class":140},[57,47002,47003,47005,47007,47009,47011,47013,47015,47017,47019,47021,47023,47025,47027,47029,47031],{"class":59,"line":10117},[57,47004,42426],{"class":140},[57,47006,42670],{"class":81},[57,47008,273],{"class":140},[57,47010,35067],{"class":81},[57,47012,42435],{"class":140},[57,47014,21320],{"class":81},[57,47016,273],{"class":140},[57,47018,42683],{"class":81},[57,47020,42444],{"class":140},[57,47022,615],{"class":81},[57,47024,273],{"class":140},[57,47026,32267],{"class":81},[57,47028,42453],{"class":140},[57,47030,32267],{"class":81},[57,47032,38244],{"class":140},[57,47034,47035,47037,47039,47041,47043,47045,47047,47049,47051,47053,47055,47057,47059],{"class":59,"line":10123},[57,47036,38294],{"class":140},[57,47038,31071],{"class":5489},[57,47040,156],{"class":136},[57,47042,270],{"class":81},[57,47044,273],{"class":140},[57,47046,31126],{"class":5489},[57,47048,156],{"class":136},[57,47050,498],{"class":81},[57,47052,273],{"class":140},[57,47054,31080],{"class":5489},[57,47056,156],{"class":136},[57,47058,635],{"class":81},[57,47060,238],{"class":140},[57,47062,47063],{"class":59,"line":10137},[57,47064,38323],{"class":140},[57,47066,47067,47069,47071,47073],{"class":59,"line":10143},[57,47068,31042],{"class":81},[57,47070,42736],{"class":140},[57,47072,156],{"class":136},[57,47074,38206],{"class":140},[57,47076,47077,47079,47081,47083,47085,47087,47089,47091,47093,47095,47097,47099,47101,47103,47105],{"class":59,"line":10170},[57,47078,42426],{"class":140},[57,47080,42747],{"class":81},[57,47082,273],{"class":140},[57,47084,35067],{"class":81},[57,47086,42435],{"class":140},[57,47088,21320],{"class":81},[57,47090,273],{"class":140},[57,47092,42683],{"class":81},[57,47094,42444],{"class":140},[57,47096,615],{"class":81},[57,47098,273],{"class":140},[57,47100,32267],{"class":81},[57,47102,42453],{"class":140},[57,47104,32267],{"class":81},[57,47106,38244],{"class":140},[57,47108,47109,47111,47113,47115,47117,47119,47121,47123,47125,47127,47129,47131,47133,47135,47137],{"class":59,"line":10179},[57,47110,42426],{"class":140},[57,47112,42747],{"class":81},[57,47114,273],{"class":140},[57,47116,35137],{"class":81},[57,47118,42435],{"class":140},[57,47120,42356],{"class":81},[57,47122,273],{"class":140},[57,47124,35137],{"class":81},[57,47126,42444],{"class":140},[57,47128,1023],{"class":81},[57,47130,273],{"class":140},[57,47132,32267],{"class":81},[57,47134,42453],{"class":140},[57,47136,32267],{"class":81},[57,47138,38244],{"class":140},[57,47140,47141,47143,47145,47147,47149],{"class":59,"line":10185},[57,47142,42810],{"class":140},[57,47144,635],{"class":81},[57,47146,273],{"class":140},[57,47148,635],{"class":81},[57,47150,42819],{"class":140},[57,47152,47153],{"class":59,"line":10193},[57,47154,38987],{"class":140},[57,47156,47157,47159,47161,47163,47165],{"class":59,"line":10198},[57,47158,38992],{"class":140},[57,47160,42830],{"class":81},[57,47162,273],{"class":140},[57,47164,498],{"class":81},[57,47166,238],{"class":140},[57,47168,47169],{"class":59,"line":16876},[57,47170,38323],{"class":140},[57,47172,47173],{"class":59,"line":16882},[57,47174,42845],{"class":63},[57,47176,47177,47179,47181,47183,47185],{"class":59,"line":16905},[57,47178,3676],{"class":136},[57,47180,39065],{"class":140},[57,47182,26312],{"class":136},[57,47184,39070],{"class":81},[57,47186,39073],{"class":140},[57,47188,47189,47191,47193],{"class":59,"line":16911},[57,47190,4915],{"class":136},[57,47192,39085],{"class":81},[57,47194,39088],{"class":140},[57,47196,47197,47199,47201,47203,47205,47207,47209,47211,47213],{"class":59,"line":16934},[57,47198,39098],{"class":140},[57,47200,42872],{"class":5489},[57,47202,156],{"class":136},[57,47204,42877],{"class":74},[57,47206,273],{"class":140},[57,47208,39101],{"class":5489},[57,47210,156],{"class":136},[57,47212,39106],{"class":74},[57,47214,238],{"class":140},[57,47216,47217],{"class":59,"line":16948},[57,47218,42892],{"class":63},[57,47220,47221],{"class":59,"line":16968},[57,47222,42897],{"class":63},[57,47224,47225],{"class":59,"line":16974},[57,47226,42902],{"class":63},[57,47228,47229],{"class":59,"line":16985},[57,47230,42907],{"class":63},[57,47232,47233],{"class":59,"line":17008},[57,47234,42912],{"class":63},[57,47236,47237],{"class":59,"line":17030},[57,47238,42917],{"class":63},[57,47240,47241,47243,47245,47247,47249,47251],{"class":59,"line":17035},[57,47242,39118],{"class":136},[57,47244,39121],{"class":140},[57,47246,39124],{"class":136},[57,47248,39127],{"class":136},[57,47250,39130],{"class":81},[57,47252,4012],{"class":140},[57,47254,47255,47257,47259],{"class":59,"line":17041},[57,47256,39142],{"class":140},[57,47258,226],{"class":81},[57,47260,238],{"class":140},[57,47262,47263,47265,47267],{"class":59,"line":17055},[57,47264,42944],{"class":136},[57,47266,39085],{"class":81},[57,47268,39161],{"class":140},[57,47270,47271,47273,47275,47277,47279],{"class":59,"line":17068},[57,47272,42953],{"class":140},[57,47274,226],{"class":81},[57,47276,273],{"class":140},[57,47278,39183],{"class":81},[57,47280,238],{"class":140},[57,47282,47283,47285,47287,47289,47291,47293],{"class":59,"line":17073},[57,47284,42966],{"class":136},[57,47286,39121],{"class":140},[57,47288,39124],{"class":136},[57,47290,39127],{"class":136},[57,47292,39130],{"class":81},[57,47294,4012],{"class":140},[57,47296,47297,47299,47301],{"class":59,"line":17087},[57,47298,42981],{"class":140},[57,47300,226],{"class":81},[57,47302,238],{"class":140},[57,47304,47305],{"class":59,"line":17092},[57,47306,35362],{"class":63},[57,47308,47309,47311,47313],{"class":59,"line":17098},[57,47310,30998],{"class":136},[57,47312,31290],{"class":70},[57,47314,31293],{"class":140},[57,47316,47317,47319,47321,47323],{"class":59,"line":17103},[57,47318,31298],{"class":140},[57,47320,156],{"class":136},[57,47322,31020],{"class":81},[57,47324,43008],{"class":140},[57,47326,47327,47329,47331,47333],{"class":59,"line":17117},[57,47328,31298],{"class":140},[57,47330,156],{"class":136},[57,47332,31020],{"class":81},[57,47334,43019],{"class":140},[57,47336,47337,47339,47341,47343],{"class":59,"line":17122},[57,47338,31298],{"class":140},[57,47340,156],{"class":136},[57,47342,31020],{"class":81},[57,47344,43030],{"class":140},[57,47346,47347,47349,47351,47353],{"class":59,"line":17127},[57,47348,31298],{"class":140},[57,47350,156],{"class":136},[57,47352,31020],{"class":81},[57,47354,43041],{"class":140},[57,47356,47357,47359,47361,47363],{"class":59,"line":17141},[57,47358,31298],{"class":140},[57,47360,156],{"class":136},[57,47362,31020],{"class":81},[57,47364,43052],{"class":140},[57,47366,47367,47369],{"class":59,"line":17153},[57,47368,15024],{"class":136},[57,47370,31406],{"class":140},[57,47372,47373],{"class":59,"line":17158},[57,47374,2673],{"emptyLinePlaceholder":350},[57,47376,47377],{"class":59,"line":17171},[57,47378,43067],{"class":63},[57,47380,47381,47383,47385,47387,47389],{"class":59,"line":17176},[57,47382,1813],{"class":136},[57,47384,31417],{"class":81},[57,47386,3222],{"class":136},[57,47388,31422],{"class":74},[57,47390,4012],{"class":140},[57,47392,47393,47395,47397,47399,47401,47403,47405,47407,47409],{"class":59,"line":17181},[57,47394,31434],{"class":140},[57,47396,156],{"class":136},[57,47398,205],{"class":140},[57,47400,31441],{"class":74},[57,47402,211],{"class":136},[57,47404,31446],{"class":140},[57,47406,232],{"class":136},[57,47408,235],{"class":74},[57,47410,238],{"class":140},[57,47412,47413,47415,47417],{"class":59,"line":17186},[57,47414,31486],{"class":140},[57,47416,156],{"class":136},[57,47418,43108],{"class":140},[57,47420,47421,47423,47425,47427,47429,47431,47433,47435],{"class":59,"line":17199},[57,47422,31496],{"class":81},[57,47424,31499],{"class":140},[57,47426,635],{"class":81},[57,47428,273],{"class":140},[57,47430,31698],{"class":81},[57,47432,273],{"class":140},[57,47434,31698],{"class":81},[57,47436,31512],{"class":140},[22270,47438,47440],{"id":47439},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,47442,47443],{},"计算图片的均值与方差，用于训练中归一化处理操作",[49,47445,47447],{"className":122,"code":47446,"language":124,"meta":46,"style":46},"# 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",[28,47448,47449,47454,47467,47472,47478,47483,47493,47497,47502,47512,47516,47521,47531,47548,47552,47557,47569,47581,47612,47621,47631,47641,47645,47650,47665,47669,47674,47679,47684,47694,47699,47724,47728,47733,47748,47752,47765,47769,47774,47779,47784,47789,47794,47804,47814,47837,47845,47853,47861,47865,47877,47881,47886,47890,47894,47901,47921,47945,47952,47966,47971,47976,47980,47994,47998,48010],{"__ignoreMap":46},[57,47450,47451],{"class":59,"line":60},[57,47452,47453],{"class":63},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[57,47455,47456,47458,47461,47464],{"class":59,"line":67},[57,47457,30934],{"class":136},[57,47459,47460],{"class":81}," PIL",[57,47462,47463],{"class":136}," import",[57,47465,47466],{"class":140}," Image\n",[57,47468,47469],{"class":59,"line":144},[57,47470,47471],{"class":63},"# os 用来处理文件夹和文件路径\n",[57,47473,47474,47476],{"class":59,"line":150},[57,47475,137],{"class":136},[57,47477,45502],{"class":140},[57,47479,47480],{"class":59,"line":162},[57,47481,47482],{"class":63},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[57,47484,47485,47487,47489,47491],{"class":59,"line":180},[57,47486,137],{"class":136},[57,47488,31577],{"class":140},[57,47490,31580],{"class":136},[57,47492,31583],{"class":140},[57,47494,47495],{"class":59,"line":186},[57,47496,2673],{"emptyLinePlaceholder":350},[57,47498,47499],{"class":59,"line":197},[57,47500,47501],{"class":63},"# 文件夹路径，包含所有图片文件\n",[57,47503,47504,47507,47509],{"class":59,"line":241},[57,47505,47506],{"class":140},"folder_path ",[57,47508,156],{"class":136},[57,47510,47511],{"class":74}," 'data_cat_dog'\n",[57,47513,47514],{"class":59,"line":249},[57,47515,2673],{"emptyLinePlaceholder":350},[57,47517,47518],{"class":59,"line":262},[57,47519,47520],{"class":63},"# 初始化累积变量\n",[57,47522,47523,47526,47528],{"class":59,"line":281},[57,47524,47525],{"class":140},"total_pixels ",[57,47527,156],{"class":136},[57,47529,47530],{"class":81}," 0\n",[57,47532,47533,47536,47538,47541,47543,47545],{"class":59,"line":287},[57,47534,47535],{"class":140},"sum_normalized_pixel_values ",[57,47537,156],{"class":136},[57,47539,47540],{"class":140}," np.zeros(",[57,47542,270],{"class":81},[57,47544,46005],{"class":140},[57,47546,47547],{"class":63},"# 如果是RGB图像，需要三个通道的均值和方差\n",[57,47549,47550],{"class":59,"line":298},[57,47551,2673],{"emptyLinePlaceholder":350},[57,47553,47554],{"class":59,"line":311},[57,47555,47556],{"class":63},"# 遍历文件夹中的图片文件\n",[57,47558,47559,47561,47564,47566],{"class":59,"line":322},[57,47560,3298],{"class":136},[57,47562,47563],{"class":140}," root, dirs, files ",[57,47565,26312],{"class":136},[57,47567,47568],{"class":140}," os.walk(folder_path):\n",[57,47570,47571,47573,47576,47578],{"class":59,"line":1929},[57,47572,3474],{"class":136},[57,47574,47575],{"class":140}," filename ",[57,47577,26312],{"class":136},[57,47579,47580],{"class":140}," files:\n",[57,47582,47583,47585,47588,47591,47593,47596,47598,47601,47603,47606,47609],{"class":59,"line":1950},[57,47584,2770],{"class":136},[57,47586,47587],{"class":140}," filename.endswith((",[57,47589,47590],{"class":74},"'.jpg'",[57,47592,12708],{"class":140},[57,47594,47595],{"class":74},"'.jpeg'",[57,47597,12708],{"class":140},[57,47599,47600],{"class":74},"'.png'",[57,47602,12708],{"class":140},[57,47604,47605],{"class":74},"'.bmp'",[57,47607,47608],{"class":140},")):  ",[57,47610,47611],{"class":63},"# 可根据实际情况添加其他格式\n",[57,47613,47614,47616,47618],{"class":59,"line":1955},[57,47615,45870],{"class":140},[57,47617,156],{"class":136},[57,47619,47620],{"class":140}," os.path.join(root, filename)\n",[57,47622,47623,47626,47628],{"class":59,"line":1969},[57,47624,47625],{"class":140},"            image ",[57,47627,156],{"class":136},[57,47629,47630],{"class":140}," Image.open(image_path)\n",[57,47632,47633,47636,47638],{"class":59,"line":1974},[57,47634,47635],{"class":140},"            image_array ",[57,47637,156],{"class":136},[57,47639,47640],{"class":140}," np.array(image)\n",[57,47642,47643],{"class":59,"line":2001},[57,47644,2673],{"emptyLinePlaceholder":350},[57,47646,47647],{"class":59,"line":2006},[57,47648,47649],{"class":63},"            # 归一化像素值到0-1之间\n",[57,47651,47652,47655,47657,47660,47662],{"class":59,"line":2023},[57,47653,47654],{"class":140},"            normalized_image_array ",[57,47656,156],{"class":136},[57,47658,47659],{"class":140}," image_array ",[57,47661,1000],{"class":136},[57,47663,47664],{"class":81}," 255.0\n",[57,47666,47667],{"class":59,"line":2028},[57,47668,2673],{"emptyLinePlaceholder":350},[57,47670,47671],{"class":59,"line":2033},[57,47672,47673],{"class":63},"            # print(image_path)\n",[57,47675,47676],{"class":59,"line":2038},[57,47677,47678],{"class":63},"            # print(normalized_image_array.shape)\n",[57,47680,47681],{"class":59,"line":2052},[57,47682,47683],{"class":63},"            # 累积归一化后的像素值和像素数量\n",[57,47685,47686,47689,47691],{"class":59,"line":2057},[57,47687,47688],{"class":140},"            total_pixels ",[57,47690,9750],{"class":136},[57,47692,47693],{"class":140}," normalized_image_array.size\n",[57,47695,47696],{"class":59,"line":2850},[57,47697,47698],{"class":63},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[57,47700,47701,47704,47706,47709,47712,47714,47716,47718,47720,47722],{"class":59,"line":2864},[57,47702,47703],{"class":140},"            sum_normalized_pixel_values ",[57,47705,9750],{"class":136},[57,47707,47708],{"class":140}," np.sum(normalized_image_array, ",[57,47710,47711],{"class":5489},"axis",[57,47713,156],{"class":136},[57,47715,168],{"class":140},[57,47717,226],{"class":81},[57,47719,12708],{"class":140},[57,47721,635],{"class":81},[57,47723,259],{"class":140},[57,47725,47726],{"class":59,"line":2872},[57,47727,2673],{"emptyLinePlaceholder":350},[57,47729,47730],{"class":59,"line":2877},[57,47731,47732],{"class":63},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[57,47734,47735,47738,47740,47743,47745],{"class":59,"line":2883},[57,47736,47737],{"class":140},"mean ",[57,47739,156],{"class":136},[57,47741,47742],{"class":140}," sum_normalized_pixel_values ",[57,47744,1000],{"class":136},[57,47746,47747],{"class":140}," total_pixels\n",[57,47749,47750],{"class":59,"line":2889},[57,47751,2673],{"emptyLinePlaceholder":350},[57,47753,47754,47757,47759,47761,47763],{"class":59,"line":2894},[57,47755,47756],{"class":140},"sum_squared_diff ",[57,47758,156],{"class":136},[57,47760,47540],{"class":140},[57,47762,270],{"class":81},[57,47764,238],{"class":140},[57,47766,47767],{"class":59,"line":8221},[57,47768,2673],{"emptyLinePlaceholder":350},[57,47770,47771],{"class":59,"line":8245},[57,47772,47773],{"class":63},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[57,47775,47776],{"class":59,"line":8250},[57,47777,47778],{"class":63},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[57,47780,47781],{"class":59,"line":8256},[57,47782,47783],{"class":63},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[57,47785,47786],{"class":59,"line":8283},[57,47787,47788],{"class":63},"# Image.open(image_path)：打开图片\n",[57,47790,47791],{"class":59,"line":8288},[57,47792,47793],{"class":63},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[57,47795,47796,47798,47800,47802],{"class":59,"line":8294},[57,47797,3298],{"class":136},[57,47799,47563],{"class":140},[57,47801,26312],{"class":136},[57,47803,47568],{"class":140},[57,47805,47806,47808,47810,47812],{"class":59,"line":8306},[57,47807,3474],{"class":136},[57,47809,47575],{"class":140},[57,47811,26312],{"class":136},[57,47813,47580],{"class":140},[57,47815,47816,47818,47820,47822,47824,47826,47828,47830,47832,47834],{"class":59,"line":8318},[57,47817,2770],{"class":136},[57,47819,47587],{"class":140},[57,47821,47590],{"class":74},[57,47823,12708],{"class":140},[57,47825,47595],{"class":74},[57,47827,12708],{"class":140},[57,47829,47600],{"class":74},[57,47831,12708],{"class":140},[57,47833,47605],{"class":74},[57,47835,47836],{"class":140},")):\n",[57,47838,47839,47841,47843],{"class":59,"line":8330},[57,47840,45870],{"class":140},[57,47842,156],{"class":136},[57,47844,47620],{"class":140},[57,47846,47847,47849,47851],{"class":59,"line":9989},[57,47848,47625],{"class":140},[57,47850,156],{"class":136},[57,47852,47630],{"class":140},[57,47854,47855,47857,47859],{"class":59,"line":10014},[57,47856,47635],{"class":140},[57,47858,156],{"class":136},[57,47860,47640],{"class":140},[57,47862,47863],{"class":59,"line":10037},[57,47864,47649],{"class":63},[57,47866,47867,47869,47871,47873,47875],{"class":59,"line":10061},[57,47868,47654],{"class":140},[57,47870,156],{"class":136},[57,47872,47659],{"class":140},[57,47874,1000],{"class":136},[57,47876,47664],{"class":81},[57,47878,47879],{"class":59,"line":10066},[57,47880,47678],{"class":63},[57,47882,47883],{"class":59,"line":10071},[57,47884,47885],{"class":63},"            # print(mean.shape)\n",[57,47887,47888],{"class":59,"line":10076},[57,47889,47673],{"class":63},[57,47891,47892],{"class":59,"line":10085},[57,47893,2673],{"emptyLinePlaceholder":350},[57,47895,47896,47899],{"class":59,"line":10090},[57,47897,47898],{"class":136},"            try",[57,47900,4012],{"class":140},[57,47902,47903,47906,47908,47911,47913,47916,47918],{"class":59,"line":10096},[57,47904,47905],{"class":140},"                diff ",[57,47907,156],{"class":136},[57,47909,47910],{"class":140}," (normalized_image_array ",[57,47912,948],{"class":136},[57,47914,47915],{"class":140}," mean) ",[57,47917,10934],{"class":136},[57,47919,47920],{"class":81}," 2\n",[57,47922,47923,47926,47928,47931,47933,47935,47937,47939,47941,47943],{"class":59,"line":10117},[57,47924,47925],{"class":140},"                sum_squared_diff ",[57,47927,9750],{"class":136},[57,47929,47930],{"class":140}," np.sum(diff, ",[57,47932,47711],{"class":5489},[57,47934,156],{"class":136},[57,47936,168],{"class":140},[57,47938,226],{"class":81},[57,47940,12708],{"class":140},[57,47942,635],{"class":81},[57,47944,259],{"class":140},[57,47946,47947,47950],{"class":59,"line":10123},[57,47948,47949],{"class":136},"            except",[57,47951,4012],{"class":140},[57,47953,47954,47957,47959,47961,47964],{"class":59,"line":10137},[57,47955,47956],{"class":81},"                print",[57,47958,168],{"class":140},[57,47960,475],{"class":136},[57,47962,47963],{"class":74},"\"捕获到自定义异常\"",[57,47965,238],{"class":140},[57,47967,47968],{"class":59,"line":10143},[57,47969,47970],{"class":63},"            # diff = (normalized_image_array - mean) ** 2\n",[57,47972,47973],{"class":59,"line":10170},[57,47974,47975],{"class":63},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[57,47977,47978],{"class":59,"line":10179},[57,47979,2673],{"emptyLinePlaceholder":350},[57,47981,47982,47985,47987,47990,47992],{"class":59,"line":10185},[57,47983,47984],{"class":140},"variance ",[57,47986,156],{"class":136},[57,47988,47989],{"class":140}," sum_squared_diff ",[57,47991,1000],{"class":136},[57,47993,47747],{"class":140},[57,47995,47996],{"class":59,"line":10193},[57,47997,2673],{"emptyLinePlaceholder":350},[57,47999,48000,48002,48004,48007],{"class":59,"line":10198},[57,48001,165],{"class":81},[57,48003,168],{"class":140},[57,48005,48006],{"class":74},"\"Mean:\"",[57,48008,48009],{"class":140},", mean)\n",[57,48011,48012,48014,48016,48019],{"class":59,"line":16876},[57,48013,165],{"class":81},[57,48015,168],{"class":140},[57,48017,48018],{"class":74},"\"Variance:\"",[57,48020,48021],{"class":140},", variance)\n",[49,48023,48025],{"className":122,"code":48024,"language":124,"meta":46,"style":46},"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",[28,48026,48027,48033,48039,48049,48055,48065,48079,48089,48099,48109,48113,48123,48133,48137,48141,48149,48154,48159,48178,48182,48187,48192,48197,48202,48243,48248,48258,48263,48276,48281,48286,48291,48296,48301,48305,48310,48315,48337,48341,48373,48387,48397,48407,48411,48421,48435,48445,48455,48465,48471,48475,48479,48483,48487,48491,48499,48519,48523,48527,48531,48535,48551,48555,48559,48567,48571,48575,48583,48587,48591,48595,48603,48607,48611,48615,48623,48627,48635,48639,48647,48651,48659,48663,48671,48675,48679,48687,48691,48695,48707,48731,48745,48749,48753,48757,48765,48769,48777,48781,48789,48793,48801,48805,48813,48817,48825,48829,48841,48845,48853,48857,48865,48869,48873,48877,48881,48889,48893,48909,48913,48921,48925,48929,48933,48937,48941,48945,48949,48965,48969,48981,48985,48997,49001,49013,49017,49025,49029,49037,49041,49045,49049,49055,49059,49067,49071,49087,49091,49099,49103,49119,49131,49135,49147,49151,49155,49163,49167,49171,49179,49183,49191,49195,49203,49207,49211,49253,49295,49299,49303,49319,49323,49339,49343,49347,49355,49359,49363,49375,49413,49417,49421,49429,49433,49447,49457,49463,49469,49475,49481,49485,49489,49495,49499,49503,49511,49515,49533,49537,49541,49545,49561,49565,49569,49573,49577,49581,49601,49621,49625,49629,49633,49641,49649,49653,49669,49689,49709,49713,49718,49727,49736,49741,49746,49751,49764,49769,49778,49787,49804],{"__ignoreMap":46},[57,48028,48029,48031],{"class":59,"line":60},[57,48030,137],{"class":136},[57,48032,32019],{"class":140},[57,48034,48035,48037],{"class":59,"line":67},[57,48036,137],{"class":136},[57,48038,32026],{"class":140},[57,48040,48041,48043,48045,48047],{"class":59,"line":144},[57,48042,137],{"class":136},[57,48044,32037],{"class":140},[57,48046,31580],{"class":136},[57,48048,32042],{"class":140},[57,48050,48051,48053],{"class":59,"line":150},[57,48052,137],{"class":136},[57,48054,141],{"class":140},[57,48056,48057,48059,48061,48063],{"class":59,"line":162},[57,48058,30934],{"class":136},[57,48060,31612],{"class":140},[57,48062,137],{"class":136},[57,48064,32059],{"class":140},[57,48066,48067,48069,48071,48073,48076],{"class":59,"line":180},[57,48068,30934],{"class":136},[57,48070,31565],{"class":140},[57,48072,137],{"class":136},[57,48074,48075],{"class":140}," ImageFolder ",[57,48077,48078],{"class":63},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[57,48080,48081,48083,48085,48087],{"class":59,"line":186},[57,48082,30934],{"class":136},[57,48084,31595],{"class":140},[57,48086,137],{"class":136},[57,48088,31600],{"class":140},[57,48090,48091,48093,48095,48097],{"class":59,"line":197},[57,48092,137],{"class":136},[57,48094,31612],{"class":140},[57,48096,31580],{"class":136},[57,48098,31617],{"class":140},[57,48100,48101,48103,48105,48107],{"class":59,"line":241},[57,48102,137],{"class":136},[57,48104,31629],{"class":140},[57,48106,31580],{"class":136},[57,48108,31634],{"class":140},[57,48110,48111],{"class":59,"line":249},[57,48112,32104],{"class":63},[57,48114,48115,48117,48119,48121],{"class":59,"line":262},[57,48116,30934],{"class":136},[57,48118,32111],{"class":140},[57,48120,137],{"class":136},[57,48122,43228],{"class":140},[57,48124,48125,48127,48129,48131],{"class":59,"line":281},[57,48126,30934],{"class":136},[57,48128,30937],{"class":140},[57,48130,137],{"class":136},[57,48132,30942],{"class":140},[57,48134,48135],{"class":59,"line":287},[57,48136,2673],{"emptyLinePlaceholder":350},[57,48138,48139],{"class":59,"line":298},[57,48140,32139],{"class":63},[57,48142,48143,48145,48147],{"class":59,"line":311},[57,48144,32144],{"class":136},[57,48146,32147],{"class":70},[57,48148,32150],{"class":140},[57,48150,48151],{"class":59,"line":322},[57,48152,48153],{"class":63},"    # 导入自己的数据集，并进行数据处理\n",[57,48155,48156],{"class":59,"line":1929},[57,48157,48158],{"class":63},"    # 定义数据集的路径\n",[57,48160,48161,48164,48166,48168,48170,48172,48176],{"class":59,"line":1950},[57,48162,48163],{"class":81},"    ROOT_PATH",[57,48165,156],{"class":136},[57,48167,1086],{"class":136},[57,48169,668],{"class":74},[57,48171,974],{"class":81},[57,48173,48175],{"class":48174},"sA_wV","\u002Fdata\u002Ftrain",[57,48177,25402],{"class":74},[57,48179,48180],{"class":59,"line":1955},[57,48181,2673],{"emptyLinePlaceholder":350},[57,48183,48184],{"class":59,"line":1969},[57,48185,48186],{"class":63},"    # 定义归一化方法\n",[57,48188,48189],{"class":59,"line":1974},[57,48190,48191],{"class":63},"    # 这里需要先计算一下数据集的均值和方差\n",[57,48193,48194],{"class":59,"line":2001},[57,48195,48196],{"class":63},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[57,48198,48199],{"class":59,"line":2006},[57,48200,48201],{"class":63},"    # 第一个参数是均值，第二个参数是方差\n",[57,48203,48204,48207,48209,48212,48215,48217,48220,48222,48225,48228,48231,48233,48236,48238,48241],{"class":59,"line":2023},[57,48205,48206],{"class":140},"    normalize",[57,48208,156],{"class":136},[57,48210,48211],{"class":140},"transforms.Normalize([",[57,48213,48214],{"class":81},"0.162",[57,48216,273],{"class":140},[57,48218,48219],{"class":81},"0.151",[57,48221,273],{"class":140},[57,48223,48224],{"class":81},"0.138",[57,48226,48227],{"class":140},"],[",[57,48229,48230],{"class":81},"0.058",[57,48232,273],{"class":140},[57,48234,48235],{"class":81},"0.052",[57,48237,273],{"class":140},[57,48239,48240],{"class":81},"0.048",[57,48242,4930],{"class":140},[57,48244,48245],{"class":59,"line":2028},[57,48246,48247],{"class":63},"    # 定义数据集处理方法变量\n",[57,48249,48250,48253,48255],{"class":59,"line":2033},[57,48251,48252],{"class":140},"    train_transform",[57,48254,156],{"class":136},[57,48256,48257],{"class":140},"transforms.Compose([\n",[57,48259,48260],{"class":59,"line":2038},[57,48261,48262],{"class":63},"        # 调整图像大小为224*224\n",[57,48264,48265,48268,48270,48272,48274],{"class":59,"line":2052},[57,48266,48267],{"class":140},"        transforms.Resize((",[57,48269,31698],{"class":81},[57,48271,273],{"class":140},[57,48273,31698],{"class":81},[57,48275,42819],{"class":140},[57,48277,48278],{"class":59,"line":2057},[57,48279,48280],{"class":63},"        # 将图像转换为张量\n",[57,48282,48283],{"class":59,"line":2850},[57,48284,48285],{"class":140},"        transforms.ToTensor(),\n",[57,48287,48288],{"class":59,"line":2864},[57,48289,48290],{"class":140},"        normalize])\n",[57,48292,48293],{"class":59,"line":2872},[57,48294,48295],{"class":63},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[57,48297,48298],{"class":59,"line":2877},[57,48299,48300],{"class":63},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[57,48302,48303],{"class":59,"line":2883},[57,48304,2673],{"emptyLinePlaceholder":350},[57,48306,48307],{"class":59,"line":2889},[57,48308,48309],{"class":63},"    # 加载数据集\n",[57,48311,48312],{"class":59,"line":2894},[57,48313,48314],{"class":63},"    # 传入数据集路径与处理方法\n",[57,48316,48317,48319,48321,48324,48327,48329,48332,48334],{"class":59,"line":8221},[57,48318,32155],{"class":140},[57,48320,156],{"class":136},[57,48322,48323],{"class":140},"ImageFolder(",[57,48325,48326],{"class":81},"ROOT_PATH",[57,48328,273],{"class":140},[57,48330,48331],{"class":5489},"transform",[57,48333,156],{"class":136},[57,48335,48336],{"class":140},"train_transform)\n",[57,48338,48339],{"class":59,"line":8245},[57,48340,2673],{"emptyLinePlaceholder":350},[57,48342,48343,48345,48347,48349,48351,48353,48355,48357,48359,48361,48363,48365,48367,48369,48371],{"class":59,"line":8250},[57,48344,32207],{"class":140},[57,48346,156],{"class":136},[57,48348,32212],{"class":140},[57,48350,32215],{"class":81},[57,48352,168],{"class":140},[57,48354,32220],{"class":81},[57,48356,871],{"class":136},[57,48358,7631],{"class":81},[57,48360,32227],{"class":140},[57,48362,32215],{"class":81},[57,48364,168],{"class":140},[57,48366,32234],{"class":81},[57,48368,871],{"class":136},[57,48370,7631],{"class":81},[57,48372,32241],{"class":140},[57,48374,48375,48377,48379,48381,48383,48385],{"class":59,"line":8256},[57,48376,32246],{"class":140},[57,48378,156],{"class":136},[57,48380,32251],{"class":140},[57,48382,31734],{"class":5489},[57,48384,156],{"class":136},[57,48386,31739],{"class":140},[57,48388,48389,48391,48393,48395],{"class":59,"line":8283},[57,48390,32262],{"class":5489},[57,48392,156],{"class":136},[57,48394,615],{"class":81},[57,48396,31663],{"class":140},[57,48398,48399,48401,48403,48405],{"class":59,"line":8288},[57,48400,32274],{"class":5489},[57,48402,156],{"class":136},[57,48404,31673],{"class":81},[57,48406,31663],{"class":140},[57,48408,48409],{"class":59,"line":8294},[57,48410,32285],{"class":63},[57,48412,48413,48415,48417,48419],{"class":59,"line":8306},[57,48414,32290],{"class":5489},[57,48416,156],{"class":136},[57,48418,811],{"class":81},[57,48420,238],{"class":140},[57,48422,48423,48425,48427,48429,48431,48433],{"class":59,"line":8318},[57,48424,32301],{"class":140},[57,48426,156],{"class":136},[57,48428,31731],{"class":140},[57,48430,31734],{"class":5489},[57,48432,156],{"class":136},[57,48434,32312],{"class":140},[57,48436,48437,48439,48441,48443],{"class":59,"line":8330},[57,48438,32317],{"class":5489},[57,48440,156],{"class":136},[57,48442,615],{"class":81},[57,48444,31663],{"class":140},[57,48446,48447,48449,48451,48453],{"class":59,"line":9989},[57,48448,32328],{"class":5489},[57,48450,156],{"class":136},[57,48452,31673],{"class":81},[57,48454,31663],{"class":140},[57,48456,48457,48459,48461,48463],{"class":59,"line":10014},[57,48458,32339],{"class":5489},[57,48460,156],{"class":136},[57,48462,811],{"class":81},[57,48464,238],{"class":140},[57,48466,48467,48469],{"class":59,"line":10037},[57,48468,4363],{"class":136},[57,48470,32352],{"class":140},[57,48472,48473],{"class":59,"line":10061},[57,48474,2673],{"emptyLinePlaceholder":350},[57,48476,48477],{"class":59,"line":10066},[57,48478,32361],{"class":63},[57,48480,48481],{"class":59,"line":10071},[57,48482,32366],{"class":63},[57,48484,48485],{"class":59,"line":10076},[57,48486,2673],{"emptyLinePlaceholder":350},[57,48488,48489],{"class":59,"line":10085},[57,48490,32375],{"class":63},[57,48492,48493,48495,48497],{"class":59,"line":10090},[57,48494,32144],{"class":136},[57,48496,32382],{"class":70},[57,48498,32385],{"class":140},[57,48500,48501,48503,48505,48507,48509,48511,48513,48515,48517],{"class":59,"line":10096},[57,48502,31434],{"class":140},[57,48504,156],{"class":136},[57,48506,205],{"class":140},[57,48508,31441],{"class":74},[57,48510,211],{"class":136},[57,48512,31446],{"class":140},[57,48514,232],{"class":136},[57,48516,32404],{"class":74},[57,48518,238],{"class":140},[57,48520,48521],{"class":59,"line":10117},[57,48522,2673],{"emptyLinePlaceholder":350},[57,48524,48525],{"class":59,"line":10123},[57,48526,32419],{"class":63},[57,48528,48529],{"class":59,"line":10137},[57,48530,32424],{"class":63},[57,48532,48533],{"class":59,"line":10143},[57,48534,32429],{"class":63},[57,48536,48537,48539,48541,48543,48545,48547,48549],{"class":59,"line":10170},[57,48538,32434],{"class":140},[57,48540,156],{"class":136},[57,48542,32439],{"class":140},[57,48544,32442],{"class":5489},[57,48546,156],{"class":136},[57,48548,32447],{"class":81},[57,48550,238],{"class":140},[57,48552,48553],{"class":59,"line":10179},[57,48554,2673],{"emptyLinePlaceholder":350},[57,48556,48557],{"class":59,"line":10185},[57,48558,32458],{"class":63},[57,48560,48561,48563,48565],{"class":59,"line":10193},[57,48562,32463],{"class":140},[57,48564,156],{"class":136},[57,48566,32468],{"class":140},[57,48568,48569],{"class":59,"line":10198},[57,48570,2673],{"emptyLinePlaceholder":350},[57,48572,48573],{"class":59,"line":16876},[57,48574,32477],{"class":63},[57,48576,48577,48579,48581],{"class":59,"line":16882},[57,48578,31486],{"class":140},[57,48580,156],{"class":136},[57,48582,32486],{"class":140},[57,48584,48585],{"class":59,"line":16905},[57,48586,32491],{"class":63},[57,48588,48589],{"class":59,"line":16911},[57,48590,32496],{"class":63},[57,48592,48593],{"class":59,"line":16934},[57,48594,32501],{"class":63},[57,48596,48597,48599,48601],{"class":59,"line":16948},[57,48598,32506],{"class":140},[57,48600,156],{"class":136},[57,48602,32511],{"class":140},[57,48604,48605],{"class":59,"line":16968},[57,48606,2673],{"emptyLinePlaceholder":350},[57,48608,48609],{"class":59,"line":16974},[57,48610,32524],{"class":63},[57,48612,48613],{"class":59,"line":16985},[57,48614,32529],{"class":63},[57,48616,48617,48619,48621],{"class":59,"line":17008},[57,48618,32534],{"class":140},[57,48620,156],{"class":136},[57,48622,32539],{"class":81},[57,48624,48625],{"class":59,"line":17030},[57,48626,32544],{"class":63},[57,48628,48629,48631,48633],{"class":59,"line":17035},[57,48630,32549],{"class":140},[57,48632,156],{"class":136},[57,48634,32554],{"class":140},[57,48636,48637],{"class":59,"line":17041},[57,48638,32559],{"class":63},[57,48640,48641,48643,48645],{"class":59,"line":17055},[57,48642,32564],{"class":140},[57,48644,156],{"class":136},[57,48646,32554],{"class":140},[57,48648,48649],{"class":59,"line":17068},[57,48650,32573],{"class":63},[57,48652,48653,48655,48657],{"class":59,"line":17073},[57,48654,32578],{"class":140},[57,48656,156],{"class":136},[57,48658,32554],{"class":140},[57,48660,48661],{"class":59,"line":17087},[57,48662,32587],{"class":63},[57,48664,48665,48667,48669],{"class":59,"line":17092},[57,48666,32592],{"class":140},[57,48668,156],{"class":136},[57,48670,32554],{"class":140},[57,48672,48673],{"class":59,"line":17098},[57,48674,2673],{"emptyLinePlaceholder":350},[57,48676,48677],{"class":59,"line":17103},[57,48678,32605],{"class":63},[57,48680,48681,48683,48685],{"class":59,"line":17117},[57,48682,32610],{"class":140},[57,48684,156],{"class":136},[57,48686,32615],{"class":140},[57,48688,48689],{"class":59,"line":17122},[57,48690,2673],{"emptyLinePlaceholder":350},[57,48692,48693],{"class":59,"line":17127},[57,48694,32628],{"class":63},[57,48696,48697,48699,48701,48703,48705],{"class":59,"line":17141},[57,48698,3474],{"class":136},[57,48700,32635],{"class":140},[57,48702,26312],{"class":136},[57,48704,32640],{"class":81},[57,48706,32643],{"class":140},[57,48708,48709,48711,48713,48715,48717,48719,48721,48723,48725,48727,48729],{"class":59,"line":17153},[57,48710,32648],{"class":81},[57,48712,168],{"class":140},[57,48714,32653],{"class":74},[57,48716,32656],{"class":81},[57,48718,1000],{"class":74},[57,48720,32656],{"class":81},[57,48722,668],{"class":74},[57,48724,32665],{"class":140},[57,48726,948],{"class":136},[57,48728,635],{"class":81},[57,48730,259],{"class":140},[57,48732,48733,48735,48737,48739,48741,48743],{"class":59,"line":17158},[57,48734,32648],{"class":81},[57,48736,168],{"class":140},[57,48738,32680],{"class":74},[57,48740,871],{"class":136},[57,48742,862],{"class":81},[57,48744,238],{"class":140},[57,48746,48747],{"class":59,"line":17171},[57,48748,2673],{"emptyLinePlaceholder":350},[57,48750,48751],{"class":59,"line":17176},[57,48752,32695],{"class":63},[57,48754,48755],{"class":59,"line":17181},[57,48756,32700],{"class":63},[57,48758,48759,48761,48763],{"class":59,"line":17186},[57,48760,32705],{"class":140},[57,48762,156],{"class":136},[57,48764,32539],{"class":81},[57,48766,48767],{"class":59,"line":17199},[57,48768,32714],{"class":63},[57,48770,48771,48773,48775],{"class":59,"line":17204},[57,48772,32719],{"class":140},[57,48774,156],{"class":136},[57,48776,3358],{"class":81},[57,48778,48779],{"class":59,"line":32830},[57,48780,32728],{"class":63},[57,48782,48783,48785,48787],{"class":59,"line":32836},[57,48784,32733],{"class":140},[57,48786,156],{"class":136},[57,48788,32539],{"class":81},[57,48790,48791],{"class":59,"line":32842},[57,48792,32742],{"class":63},[57,48794,48795,48797,48799],{"class":59,"line":32848},[57,48796,32747],{"class":140},[57,48798,156],{"class":136},[57,48800,3358],{"class":81},[57,48802,48803],{"class":59,"line":32854},[57,48804,32756],{"class":63},[57,48806,48807,48809,48811],{"class":59,"line":32865},[57,48808,32761],{"class":140},[57,48810,156],{"class":136},[57,48812,3358],{"class":81},[57,48814,48815],{"class":59,"line":32871},[57,48816,32770],{"class":63},[57,48818,48819,48821,48823],{"class":59,"line":32891},[57,48820,32775],{"class":140},[57,48822,156],{"class":136},[57,48824,3358],{"class":81},[57,48826,48827],{"class":59,"line":32897},[57,48828,32784],{"class":63},[57,48830,48831,48833,48835,48837,48839],{"class":59,"line":32908},[57,48832,3676],{"class":136},[57,48834,31798],{"class":140},[57,48836,26312],{"class":136},[57,48838,31803],{"class":81},[57,48840,32797],{"class":140},[57,48842,48843],{"class":59,"line":32914},[57,48844,32802],{"class":63},[57,48846,48847,48849,48851],{"class":59,"line":32920},[57,48848,32807],{"class":140},[57,48850,156],{"class":136},[57,48852,32812],{"class":140},[57,48854,48855],{"class":59,"line":32926},[57,48856,32817],{"class":63},[57,48858,48859,48861,48863],{"class":59,"line":32932},[57,48860,32822],{"class":140},[57,48862,156],{"class":136},[57,48864,32827],{"class":140},[57,48866,48867],{"class":59,"line":32938},[57,48868,32833],{"class":63},[57,48870,48871],{"class":59,"line":32944},[57,48872,32839],{"class":140},[57,48874,48875],{"class":59,"line":32950},[57,48876,32845],{"class":63},[57,48878,48879],{"class":59,"line":32970},[57,48880,32851],{"class":63},[57,48882,48883,48885,48887],{"class":59,"line":32976},[57,48884,32857],{"class":140},[57,48886,156],{"class":136},[57,48888,32862],{"class":140},[57,48890,48891],{"class":59,"line":32992},[57,48892,32868],{"class":63},[57,48894,48895,48897,48899,48901,48903,48905,48907],{"class":59,"line":32998},[57,48896,32874],{"class":140},[57,48898,156],{"class":136},[57,48900,32879],{"class":140},[57,48902,32882],{"class":5489},[57,48904,156],{"class":136},[57,48906,635],{"class":81},[57,48908,238],{"class":140},[57,48910,48911],{"class":59,"line":33012},[57,48912,32894],{"class":63},[57,48914,48915,48917,48919],{"class":59,"line":33018},[57,48916,32900],{"class":140},[57,48918,156],{"class":136},[57,48920,32905],{"class":140},[57,48922,48923],{"class":59,"line":33033},[57,48924,32911],{"class":63},[57,48926,48927],{"class":59,"line":33039},[57,48928,32917],{"class":140},[57,48930,48931],{"class":59,"line":33048},[57,48932,32923],{"class":63},[57,48934,48935],{"class":59,"line":33054},[57,48936,32929],{"class":140},[57,48938,48939],{"class":59,"line":33063},[57,48940,32935],{"class":63},[57,48942,48943],{"class":59,"line":33069},[57,48944,32941],{"class":140},[57,48946,48947],{"class":59,"line":33075},[57,48948,32947],{"class":63},[57,48950,48951,48953,48955,48957,48959,48961,48963],{"class":59,"line":33084},[57,48952,32953],{"class":140},[57,48954,9750],{"class":136},[57,48956,32958],{"class":140},[57,48958,871],{"class":136},[57,48960,32963],{"class":140},[57,48962,226],{"class":81},[57,48964,238],{"class":140},[57,48966,48967],{"class":59,"line":33090},[57,48968,32973],{"class":63},[57,48970,48971,48973,48975,48977,48979],{"class":59,"line":33101},[57,48972,32979],{"class":140},[57,48974,9750],{"class":136},[57,48976,32984],{"class":140},[57,48978,3222],{"class":136},[57,48980,32989],{"class":140},[57,48982,48983],{"class":59,"line":33107},[57,48984,32995],{"class":63},[57,48986,48987,48989,48991,48993,48995],{"class":59,"line":33126},[57,48988,33001],{"class":140},[57,48990,9750],{"class":136},[57,48992,32963],{"class":140},[57,48994,226],{"class":81},[57,48996,238],{"class":140},[57,48998,48999],{"class":59,"line":33132},[57,49000,33015],{"class":63},[57,49002,49003,49005,49007,49009,49011],{"class":59,"line":33143},[57,49004,3676],{"class":136},[57,49006,33023],{"class":140},[57,49008,26312],{"class":136},[57,49010,31803],{"class":81},[57,49012,33030],{"class":140},[57,49014,49015],{"class":59,"line":33149},[57,49016,33036],{"class":63},[57,49018,49019,49021,49023],{"class":59,"line":33169},[57,49020,32807],{"class":140},[57,49022,156],{"class":136},[57,49024,32812],{"class":140},[57,49026,49027],{"class":59,"line":33185},[57,49028,33051],{"class":63},[57,49030,49031,49033,49035],{"class":59,"line":33191},[57,49032,32822],{"class":140},[57,49034,156],{"class":136},[57,49036,32827],{"class":140},[57,49038,49039],{"class":59,"line":33205},[57,49040,33066],{"class":63},[57,49042,49043],{"class":59,"line":33211},[57,49044,33072],{"class":140},[57,49046,49047],{"class":59,"line":33217},[57,49048,36553],{"class":63},[57,49050,49051,49053],{"class":59,"line":33228},[57,49052,33078],{"class":136},[57,49054,33081],{"class":140},[57,49056,49057],{"class":59,"line":33234},[57,49058,33087],{"class":63},[57,49060,49061,49063,49065],{"class":59,"line":33240},[57,49062,36568],{"class":140},[57,49064,156],{"class":136},[57,49066,32862],{"class":140},[57,49068,49069],{"class":59,"line":33250},[57,49070,33104],{"class":63},[57,49072,49073,49075,49077,49079,49081,49083,49085],{"class":59,"line":33256},[57,49074,36581],{"class":140},[57,49076,156],{"class":136},[57,49078,32879],{"class":140},[57,49080,32882],{"class":5489},[57,49082,156],{"class":136},[57,49084,635],{"class":81},[57,49086,238],{"class":140},[57,49088,49089],{"class":59,"line":33267},[57,49090,33129],{"class":63},[57,49092,49093,49095,49097],{"class":59,"line":33273},[57,49094,36602],{"class":140},[57,49096,156],{"class":136},[57,49098,32905],{"class":140},[57,49100,49101],{"class":59,"line":33283},[57,49102,33146],{"class":63},[57,49104,49105,49107,49109,49111,49113,49115,49117],{"class":59,"line":33288},[57,49106,36615],{"class":140},[57,49108,9750],{"class":136},[57,49110,36620],{"class":140},[57,49112,871],{"class":136},[57,49114,32963],{"class":140},[57,49116,226],{"class":81},[57,49118,238],{"class":140},[57,49120,49121,49123,49125,49127,49129],{"class":59,"line":33294},[57,49122,36633],{"class":140},[57,49124,9750],{"class":136},[57,49126,32984],{"class":140},[57,49128,3222],{"class":136},[57,49130,32989],{"class":140},[57,49132,49133],{"class":59,"line":33343},[57,49134,36646],{"class":63},[57,49136,49137,49139,49141,49143,49145],{"class":59,"line":33390},[57,49138,36651],{"class":140},[57,49140,9750],{"class":136},[57,49142,32963],{"class":140},[57,49144,226],{"class":81},[57,49146,238],{"class":140},[57,49148,49149],{"class":59,"line":33395},[57,49150,33208],{"class":63},[57,49152,49153],{"class":59,"line":33401},[57,49154,33214],{"class":63},[57,49156,49157,49159,49161],{"class":59,"line":33420},[57,49158,33220],{"class":140},[57,49160,1000],{"class":136},[57,49162,33225],{"class":140},[57,49164,49165],{"class":59,"line":33426},[57,49166,33231],{"class":63},[57,49168,49169],{"class":59,"line":33446},[57,49170,33237],{"class":63},[57,49172,49173,49175,49177],{"class":59,"line":33452},[57,49174,33243],{"class":140},[57,49176,1000],{"class":136},[57,49178,33225],{"class":140},[57,49180,49181],{"class":59,"line":33458},[57,49182,33253],{"class":63},[57,49184,49185,49187,49189],{"class":59,"line":33468},[57,49186,33259],{"class":140},[57,49188,1000],{"class":136},[57,49190,33264],{"class":140},[57,49192,49193],{"class":59,"line":33473},[57,49194,33270],{"class":63},[57,49196,49197,49199,49201],{"class":59,"line":33479},[57,49198,33276],{"class":140},[57,49200,1000],{"class":136},[57,49202,33264],{"class":140},[57,49204,49205],{"class":59,"line":33495},[57,49206,2673],{"emptyLinePlaceholder":350},[57,49208,49209],{"class":59,"line":33540},[57,49210,33291],{"class":63},[57,49212,49213,49215,49217,49219,49221,49223,49225,49227,49229,49231,49233,49235,49237,49239,49241,49243,49245,49247,49249,49251],{"class":59,"line":33546},[57,49214,32648],{"class":81},[57,49216,168],{"class":140},[57,49218,3865],{"class":74},[57,49220,32656],{"class":81},[57,49222,33305],{"class":74},[57,49224,1312],{"class":81},[57,49226,33310],{"class":136},[57,49228,1362],{"class":81},[57,49230,33315],{"class":74},[57,49232,1312],{"class":81},[57,49234,33310],{"class":136},[57,49236,1362],{"class":81},[57,49238,3865],{"class":74},[57,49240,33326],{"class":140},[57,49242,948],{"class":136},[57,49244,635],{"class":81},[57,49246,33333],{"class":140},[57,49248,948],{"class":136},[57,49250,635],{"class":81},[57,49252,33340],{"class":140},[57,49254,49255,49257,49259,49261,49263,49265,49267,49269,49271,49273,49275,49277,49279,49281,49283,49285,49287,49289,49291,49293],{"class":59,"line":33552},[57,49256,32648],{"class":81},[57,49258,168],{"class":140},[57,49260,3865],{"class":74},[57,49262,32656],{"class":81},[57,49264,33354],{"class":74},[57,49266,1312],{"class":81},[57,49268,33310],{"class":136},[57,49270,1362],{"class":81},[57,49272,33363],{"class":74},[57,49274,1312],{"class":81},[57,49276,33310],{"class":136},[57,49278,1362],{"class":81},[57,49280,3865],{"class":74},[57,49282,33374],{"class":140},[57,49284,948],{"class":136},[57,49286,635],{"class":81},[57,49288,33381],{"class":140},[57,49290,948],{"class":136},[57,49292,635],{"class":81},[57,49294,33340],{"class":140},[57,49296,49297],{"class":59,"line":33558},[57,49298,2673],{"emptyLinePlaceholder":350},[57,49300,49301],{"class":59,"line":33569},[57,49302,33398],{"class":63},[57,49304,49305,49307,49309,49311,49313,49315,49317],{"class":59,"line":33575},[57,49306,2770],{"class":136},[57,49308,33406],{"class":140},[57,49310,948],{"class":136},[57,49312,635],{"class":81},[57,49314,1356],{"class":140},[57,49316,223],{"class":136},[57,49318,33417],{"class":140},[57,49320,49321],{"class":59,"line":33581},[57,49322,33423],{"class":63},[57,49324,49325,49327,49329,49331,49333,49335,49337],{"class":59,"line":33587},[57,49326,33429],{"class":140},[57,49328,464],{"class":81},[57,49330,156],{"class":136},[57,49332,33436],{"class":140},[57,49334,948],{"class":136},[57,49336,635],{"class":81},[57,49338,33443],{"class":140},[57,49340,49341],{"class":59,"line":33605},[57,49342,33449],{"class":63},[57,49344,49345],{"class":59,"line":33619},[57,49346,33455],{"class":63},[57,49348,49349,49351,49353],{"class":59,"line":33628},[57,49350,33461],{"class":140},[57,49352,156],{"class":136},[57,49354,32511],{"class":140},[57,49356,49357],{"class":59,"line":33637},[57,49358,2673],{"emptyLinePlaceholder":350},[57,49360,49361],{"class":59,"line":33646},[57,49362,33476],{"class":63},[57,49364,49365,49367,49369,49371,49373],{"class":59,"line":33655},[57,49366,33482],{"class":140},[57,49368,156],{"class":136},[57,49370,33487],{"class":140},[57,49372,948],{"class":136},[57,49374,33492],{"class":140},[57,49376,49377,49379,49381,49383,49385,49387,49389,49391,49393,49395,49397,49399,49401,49403,49405,49407,49409,49411],{"class":59,"line":33661},[57,49378,32648],{"class":81},[57,49380,168],{"class":140},[57,49382,33502],{"class":74},[57,49384,1312],{"class":81},[57,49386,33507],{"class":136},[57,49388,1362],{"class":81},[57,49390,960],{"class":74},[57,49392,1312],{"class":81},[57,49394,33507],{"class":136},[57,49396,1362],{"class":81},[57,49398,33520],{"class":74},[57,49400,33523],{"class":140},[57,49402,33526],{"class":136},[57,49404,1323],{"class":81},[57,49406,33531],{"class":140},[57,49408,745],{"class":136},[57,49410,1323],{"class":81},[57,49412,259],{"class":140},[57,49414,49415],{"class":59,"line":33667},[57,49416,36930],{"class":63},[57,49418,49419],{"class":59,"line":33675},[57,49420,36935],{"class":63},[57,49422,49423,49425,49427],{"class":59,"line":33680},[57,49424,36940],{"class":140},[57,49426,33564],{"class":74},[57,49428,238],{"class":140},[57,49430,49431],{"class":59,"line":33686},[57,49432,33584],{"class":63},[57,49434,49435,49437,49439,49441,49443,49445],{"class":59,"line":33697},[57,49436,33590],{"class":140},[57,49438,156],{"class":136},[57,49440,33595],{"class":140},[57,49442,33598],{"class":5489},[57,49444,156],{"class":136},[57,49446,1828],{"class":140},[57,49448,49449,49451,49453,49455],{"class":59,"line":33703},[57,49450,33608],{"class":74},[57,49452,1275],{"class":140},[57,49454,33613],{"class":81},[57,49456,33616],{"class":140},[57,49458,49459,49461],{"class":59,"line":33723},[57,49460,33622],{"class":74},[57,49462,33625],{"class":140},[57,49464,49465,49467],{"class":59,"line":33729},[57,49466,33631],{"class":74},[57,49468,33634],{"class":140},[57,49470,49471,49473],{"class":59,"line":33735},[57,49472,33640],{"class":74},[57,49474,33643],{"class":140},[57,49476,49477,49479],{"class":59,"line":33741},[57,49478,33649],{"class":74},[57,49480,33652],{"class":140},[57,49482,49483],{"class":59,"line":33758},[57,49484,33658],{"class":140},[57,49486,49487],{"class":59,"line":33764},[57,49488,33664],{"class":63},[57,49490,49491,49493],{"class":59,"line":33770},[57,49492,4363],{"class":136},[57,49494,33672],{"class":140},[57,49496,49497],{"class":59,"line":33776},[57,49498,2673],{"emptyLinePlaceholder":350},[57,49500,49501],{"class":59,"line":33782},[57,49502,33683],{"class":63},[57,49504,49505,49507,49509],{"class":59,"line":33788},[57,49506,32144],{"class":136},[57,49508,33691],{"class":70},[57,49510,33694],{"class":140},[57,49512,49513],{"class":59,"line":33815},[57,49514,33700],{"class":63},[57,49516,49517,49519,49521,49523,49525,49527,49529,49531],{"class":59,"line":33839},[57,49518,33706],{"class":140},[57,49520,31890],{"class":5489},[57,49522,156],{"class":136},[57,49524,168],{"class":140},[57,49526,914],{"class":81},[57,49528,273],{"class":140},[57,49530,710],{"class":81},[57,49532,259],{"class":140},[57,49534,49535],{"class":59,"line":33845},[57,49536,33726],{"class":63},[57,49538,49539],{"class":59,"line":33851},[57,49540,33732],{"class":63},[57,49542,49543],{"class":59,"line":33857},[57,49544,33738],{"class":63},[57,49546,49547,49549,49551,49553,49555,49557,49559],{"class":59,"line":33868},[57,49548,31924],{"class":140},[57,49550,635],{"class":81},[57,49552,273],{"class":140},[57,49554,498],{"class":81},[57,49556,273],{"class":140},[57,49558,635],{"class":81},[57,49560,238],{"class":140},[57,49562,49563],{"class":59,"line":33879},[57,49564,33761],{"class":63},[57,49566,49567],{"class":59,"line":33885},[57,49568,33767],{"class":63},[57,49570,49571],{"class":59,"line":33902},[57,49572,33773],{"class":63},[57,49574,49575],{"class":59,"line":33925},[57,49576,33779],{"class":63},[57,49578,49579],{"class":59,"line":33948},[57,49580,33785],{"class":63},[57,49582,49583,49585,49587,49589,49591,49593,49595,49597,49599],{"class":59,"line":33954},[57,49584,33791],{"class":140},[57,49586,33794],{"class":74},[57,49588,33797],{"class":140},[57,49590,33800],{"class":74},[57,49592,273],{"class":140},[57,49594,33805],{"class":5489},[57,49596,156],{"class":136},[57,49598,33810],{"class":74},[57,49600,238],{"class":140},[57,49602,49603,49605,49607,49609,49611,49613,49615,49617,49619],{"class":59,"line":33959},[57,49604,33791],{"class":140},[57,49606,33794],{"class":74},[57,49608,33822],{"class":140},[57,49610,33825],{"class":74},[57,49612,273],{"class":140},[57,49614,33805],{"class":5489},[57,49616,156],{"class":136},[57,49618,33834],{"class":74},[57,49620,238],{"class":140},[57,49622,49623],{"class":59,"line":33968},[57,49624,33842],{"class":63},[57,49626,49627],{"class":59,"line":33978},[57,49628,33848],{"class":140},[57,49630,49631],{"class":59,"line":33984},[57,49632,33854],{"class":63},[57,49634,49635,49637,49639],{"class":59,"line":33989},[57,49636,33860],{"class":140},[57,49638,33863],{"class":74},[57,49640,238],{"class":140},[57,49642,49643,49645,49647],{"class":59,"line":33995},[57,49644,33871],{"class":140},[57,49646,33874],{"class":74},[57,49648,238],{"class":140},[57,49650,49651],{"class":59,"line":34008},[57,49652,33882],{"class":63},[57,49654,49655,49657,49659,49661,49663,49665,49667],{"class":59,"line":34014},[57,49656,31924],{"class":140},[57,49658,635],{"class":81},[57,49660,273],{"class":140},[57,49662,498],{"class":81},[57,49664,273],{"class":140},[57,49666,498],{"class":81},[57,49668,238],{"class":140},[57,49670,49671,49673,49675,49677,49679,49681,49683,49685,49687],{"class":59,"line":34025},[57,49672,33791],{"class":140},[57,49674,33794],{"class":74},[57,49676,33909],{"class":140},[57,49678,33800],{"class":74},[57,49680,273],{"class":140},[57,49682,33805],{"class":5489},[57,49684,156],{"class":136},[57,49686,33920],{"class":74},[57,49688,238],{"class":140},[57,49690,49691,49693,49695,49697,49699,49701,49703,49705,49707],{"class":59,"line":34036},[57,49692,33791],{"class":140},[57,49694,33794],{"class":74},[57,49696,33932],{"class":140},[57,49698,33825],{"class":74},[57,49700,273],{"class":140},[57,49702,33805],{"class":5489},[57,49704,156],{"class":136},[57,49706,33943],{"class":74},[57,49708,238],{"class":140},[57,49710,49711],{"class":59,"line":34055},[57,49712,33951],{"class":63},[57,49714,49716],{"class":59,"line":49715},219,[57,49717,33848],{"class":140},[57,49719,49721,49723,49725],{"class":59,"line":49720},220,[57,49722,33860],{"class":140},[57,49724,33794],{"class":74},[57,49726,238],{"class":140},[57,49728,49730,49732,49734],{"class":59,"line":49729},221,[57,49731,33871],{"class":140},[57,49733,33973],{"class":74},[57,49735,238],{"class":140},[57,49737,49739],{"class":59,"line":49738},222,[57,49740,33981],{"class":140},[57,49742,49744],{"class":59,"line":49743},223,[57,49745,2673],{"emptyLinePlaceholder":350},[57,49747,49749],{"class":59,"line":49748},224,[57,49750,33992],{"class":63},[57,49752,49754,49756,49758,49760,49762],{"class":59,"line":49753},225,[57,49755,1813],{"class":136},[57,49757,31417],{"class":81},[57,49759,3222],{"class":136},[57,49761,31422],{"class":74},[57,49763,4012],{"class":140},[57,49765,49767],{"class":59,"line":49766},226,[57,49768,34011],{"class":63},[57,49770,49772,49774,49776],{"class":59,"line":49771},227,[57,49773,44743],{"class":140},[57,49775,156],{"class":136},[57,49777,44748],{"class":140},[57,49779,49781,49783,49785],{"class":59,"line":49780},228,[57,49782,34028],{"class":140},[57,49784,156],{"class":136},[57,49786,34033],{"class":140},[57,49788,49790,49792,49794,49796,49798,49800,49802],{"class":59,"line":49789},229,[57,49791,33590],{"class":140},[57,49793,156],{"class":136},[57,49795,44765],{"class":140},[57,49797,34046],{"class":5489},[57,49799,156],{"class":136},[57,49801,1323],{"class":81},[57,49803,238],{"class":140},[57,49805,49807],{"class":59,"line":49806},230,[57,49808,34058],{"class":140},[22270,49810,49812],{"id":49811},"_242测试代码","2.4.2.测试代码",[14,49814,49815],{},"使用测试集进行测试与推理",[49,49817,49819],{"className":122,"code":49818,"language":124,"meta":46,"style":46},"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",[28,49820,49821,49827,49837,49847,49858,49868,49872,49876,49884,49889,49893,49910,49914,49918,49922,49926,49930,49962,49966,49974,49978,49990,49994,49998,50002,50006,50010,50014,50018,50022,50040,50054,50058,50068,50078,50088,50094,50098,50102,50110,50114,50130,50138,50142,50146,50154,50162,50166,50170,50174,50178,50184,50188,50198,50206,50214,50218,50222,50226,50234,50238,50254,50258,50262,50266,50278,50282,50294,50298,50302,50314,50318,50328,50332,50336,50348,50352,50360,50364,50368,50376,50380,50388,50392,50396,50400,50404,50408,50424,50432,50436,50440,50458,50464,50468,50478,50486,50494,50498,50502,50506,50510,50518,50522,50538,50542,50550,50558],{"__ignoreMap":46},[57,49822,49823,49825],{"class":59,"line":60},[57,49824,137],{"class":136},[57,49826,141],{"class":140},[57,49828,49829,49831,49833,49835],{"class":59,"line":67},[57,49830,137],{"class":136},[57,49832,31612],{"class":140},[57,49834,31580],{"class":136},[57,49836,31617],{"class":140},[57,49838,49839,49841,49843,49845],{"class":59,"line":144},[57,49840,30934],{"class":136},[57,49842,31595],{"class":140},[57,49844,137],{"class":136},[57,49846,31600],{"class":140},[57,49848,49849,49851,49853,49855],{"class":59,"line":150},[57,49850,30934],{"class":136},[57,49852,31565],{"class":140},[57,49854,137],{"class":136},[57,49856,49857],{"class":140}," ImageFolder\n",[57,49859,49860,49862,49864,49866],{"class":59,"line":162},[57,49861,30934],{"class":136},[57,49863,32111],{"class":140},[57,49865,137],{"class":136},[57,49867,44837],{"class":140},[57,49869,49870],{"class":59,"line":180},[57,49871,2673],{"emptyLinePlaceholder":350},[57,49873,49874],{"class":59,"line":186},[57,49875,34148],{"class":63},[57,49877,49878,49880,49882],{"class":59,"line":197},[57,49879,32144],{"class":136},[57,49881,34155],{"class":70},[57,49883,32150],{"class":140},[57,49885,49886],{"class":59,"line":241},[57,49887,49888],{"class":63},"   # 导入自己的数据集，并进行数据处理\n",[57,49890,49891],{"class":59,"line":249},[57,49892,48158],{"class":63},[57,49894,49895,49897,49899,49901,49903,49905,49908],{"class":59,"line":262},[57,49896,48163],{"class":81},[57,49898,156],{"class":136},[57,49900,1086],{"class":136},[57,49902,668],{"class":74},[57,49904,974],{"class":81},[57,49906,49907],{"class":48174},"\u002Fdata\u002Ftest",[57,49909,25402],{"class":74},[57,49911,49912],{"class":59,"line":281},[57,49913,2673],{"emptyLinePlaceholder":350},[57,49915,49916],{"class":59,"line":287},[57,49917,48186],{"class":63},[57,49919,49920],{"class":59,"line":298},[57,49921,48191],{"class":63},[57,49923,49924],{"class":59,"line":311},[57,49925,48196],{"class":63},[57,49927,49928],{"class":59,"line":322},[57,49929,48201],{"class":63},[57,49931,49932,49934,49936,49938,49940,49942,49944,49946,49948,49950,49952,49954,49956,49958,49960],{"class":59,"line":1929},[57,49933,48206],{"class":140},[57,49935,156],{"class":136},[57,49937,48211],{"class":140},[57,49939,48214],{"class":81},[57,49941,273],{"class":140},[57,49943,48219],{"class":81},[57,49945,273],{"class":140},[57,49947,48224],{"class":81},[57,49949,48227],{"class":140},[57,49951,48230],{"class":81},[57,49953,273],{"class":140},[57,49955,48235],{"class":81},[57,49957,273],{"class":140},[57,49959,48240],{"class":81},[57,49961,4930],{"class":140},[57,49963,49964],{"class":59,"line":1950},[57,49965,48247],{"class":63},[57,49967,49968,49970,49972],{"class":59,"line":1955},[57,49969,48252],{"class":140},[57,49971,156],{"class":136},[57,49973,48257],{"class":140},[57,49975,49976],{"class":59,"line":1969},[57,49977,48262],{"class":63},[57,49979,49980,49982,49984,49986,49988],{"class":59,"line":1974},[57,49981,48267],{"class":140},[57,49983,31698],{"class":81},[57,49985,273],{"class":140},[57,49987,31698],{"class":81},[57,49989,42819],{"class":140},[57,49991,49992],{"class":59,"line":2001},[57,49993,48280],{"class":63},[57,49995,49996],{"class":59,"line":2006},[57,49997,48285],{"class":140},[57,49999,50000],{"class":59,"line":2023},[57,50001,48290],{"class":140},[57,50003,50004],{"class":59,"line":2028},[57,50005,48295],{"class":63},[57,50007,50008],{"class":59,"line":2033},[57,50009,48300],{"class":63},[57,50011,50012],{"class":59,"line":2038},[57,50013,2673],{"emptyLinePlaceholder":350},[57,50015,50016],{"class":59,"line":2052},[57,50017,48309],{"class":63},[57,50019,50020],{"class":59,"line":2057},[57,50021,48314],{"class":63},[57,50023,50024,50026,50028,50030,50032,50034,50036,50038],{"class":59,"line":2850},[57,50025,34162],{"class":140},[57,50027,156],{"class":136},[57,50029,48323],{"class":140},[57,50031,48326],{"class":81},[57,50033,273],{"class":140},[57,50035,48331],{"class":5489},[57,50037,156],{"class":136},[57,50039,48336],{"class":140},[57,50041,50042,50044,50046,50048,50050,50052],{"class":59,"line":2864},[57,50043,34219],{"class":140},[57,50045,156],{"class":136},[57,50047,31731],{"class":140},[57,50049,31734],{"class":5489},[57,50051,156],{"class":136},[57,50053,34230],{"class":140},[57,50055,50056],{"class":59,"line":2872},[57,50057,34235],{"class":63},[57,50059,50060,50062,50064,50066],{"class":59,"line":2877},[57,50061,34240],{"class":5489},[57,50063,156],{"class":136},[57,50065,635],{"class":81},[57,50067,31663],{"class":140},[57,50069,50070,50072,50074,50076],{"class":59,"line":2883},[57,50071,34251],{"class":5489},[57,50073,156],{"class":136},[57,50075,31673],{"class":81},[57,50077,31663],{"class":140},[57,50079,50080,50082,50084,50086],{"class":59,"line":2889},[57,50081,34262],{"class":5489},[57,50083,156],{"class":136},[57,50085,226],{"class":81},[57,50087,238],{"class":140},[57,50089,50090,50092],{"class":59,"line":2894},[57,50091,4363],{"class":136},[57,50093,34275],{"class":140},[57,50095,50096],{"class":59,"line":8221},[57,50097,2673],{"emptyLinePlaceholder":350},[57,50099,50100],{"class":59,"line":8245},[57,50101,34284],{"class":63},[57,50103,50104,50106,50108],{"class":59,"line":8250},[57,50105,32144],{"class":136},[57,50107,34291],{"class":70},[57,50109,34294],{"class":140},[57,50111,50112],{"class":59,"line":8256},[57,50113,34299],{"class":63},[57,50115,50116,50118,50120,50122,50124,50126,50128],{"class":59,"line":8283},[57,50117,31434],{"class":140},[57,50119,156],{"class":136},[57,50121,31441],{"class":74},[57,50123,211],{"class":136},[57,50125,31446],{"class":140},[57,50127,232],{"class":136},[57,50129,34316],{"class":74},[57,50131,50132,50134,50136],{"class":59,"line":8288},[57,50133,31486],{"class":140},[57,50135,156],{"class":136},[57,50137,32486],{"class":140},[57,50139,50140],{"class":59,"line":8294},[57,50141,2673],{"emptyLinePlaceholder":350},[57,50143,50144],{"class":59,"line":8306},[57,50145,34333],{"class":63},[57,50147,50148,50150,50152],{"class":59,"line":8318},[57,50149,34338],{"class":140},[57,50151,156],{"class":136},[57,50153,32539],{"class":81},[57,50155,50156,50158,50160],{"class":59,"line":8330},[57,50157,34347],{"class":140},[57,50159,156],{"class":136},[57,50161,3358],{"class":81},[57,50163,50164],{"class":59,"line":9989},[57,50165,2673],{"emptyLinePlaceholder":350},[57,50167,50168],{"class":59,"line":10014},[57,50169,34360],{"class":63},[57,50171,50172],{"class":59,"line":10037},[57,50173,34365],{"class":63},[57,50175,50176],{"class":59,"line":10061},[57,50177,34370],{"class":63},[57,50179,50180,50182],{"class":59,"line":10066},[57,50181,34375],{"class":136},[57,50183,33081],{"class":140},[57,50185,50186],{"class":59,"line":10071},[57,50187,34382],{"class":63},[57,50189,50190,50192,50194,50196],{"class":59,"line":10076},[57,50191,3676],{"class":136},[57,50193,34389],{"class":140},[57,50195,26312],{"class":136},[57,50197,34394],{"class":140},[57,50199,50200,50202,50204],{"class":59,"line":10085},[57,50201,34399],{"class":140},[57,50203,156],{"class":136},[57,50205,34404],{"class":140},[57,50207,50208,50210,50212],{"class":59,"line":10090},[57,50209,34409],{"class":140},[57,50211,156],{"class":136},[57,50213,34414],{"class":140},[57,50215,50216],{"class":59,"line":10096},[57,50217,34419],{"class":63},[57,50219,50220],{"class":59,"line":10117},[57,50221,33072],{"class":140},[57,50223,50224],{"class":59,"line":10123},[57,50225,34428],{"class":63},[57,50227,50228,50230,50232],{"class":59,"line":10137},[57,50229,32857],{"class":140},[57,50231,156],{"class":136},[57,50233,34437],{"class":140},[57,50235,50236],{"class":59,"line":10143},[57,50237,34442],{"class":63},[57,50239,50240,50242,50244,50246,50248,50250,50252],{"class":59,"line":10170},[57,50241,32874],{"class":140},[57,50243,156],{"class":136},[57,50245,32879],{"class":140},[57,50247,32882],{"class":5489},[57,50249,156],{"class":136},[57,50251,635],{"class":81},[57,50253,238],{"class":140},[57,50255,50256],{"class":59,"line":10179},[57,50257,34463],{"class":63},[57,50259,50260],{"class":59,"line":10185},[57,50261,34468],{"class":63},[57,50263,50264],{"class":59,"line":10193},[57,50265,34473],{"class":63},[57,50267,50268,50270,50272,50274,50276],{"class":59,"line":10198},[57,50269,34478],{"class":140},[57,50271,9750],{"class":136},[57,50273,32984],{"class":140},[57,50275,3222],{"class":136},[57,50277,34487],{"class":140},[57,50279,50280],{"class":59,"line":16876},[57,50281,34492],{"class":63},[57,50283,50284,50286,50288,50290,50292],{"class":59,"line":16882},[57,50285,34497],{"class":140},[57,50287,9750],{"class":136},[57,50289,34502],{"class":140},[57,50291,226],{"class":81},[57,50293,238],{"class":140},[57,50295,50296],{"class":59,"line":16905},[57,50297,2673],{"emptyLinePlaceholder":350},[57,50299,50300],{"class":59,"line":16911},[57,50301,34515],{"class":63},[57,50303,50304,50306,50308,50310,50312],{"class":59,"line":16934},[57,50305,34520],{"class":140},[57,50307,156],{"class":136},[57,50309,34525],{"class":140},[57,50311,1000],{"class":136},[57,50313,34530],{"class":140},[57,50315,50316],{"class":59,"line":16948},[57,50317,34535],{"class":63},[57,50319,50320,50322,50324,50326],{"class":59,"line":16968},[57,50321,32648],{"class":81},[57,50323,168],{"class":140},[57,50325,34544],{"class":74},[57,50327,34547],{"class":140},[57,50329,50330],{"class":59,"line":16974},[57,50331,2673],{"emptyLinePlaceholder":350},[57,50333,50334],{"class":59,"line":16985},[57,50335,34556],{"class":63},[57,50337,50338,50340,50342,50344,50346],{"class":59,"line":17008},[57,50339,1813],{"class":136},[57,50341,31417],{"class":81},[57,50343,3222],{"class":136},[57,50345,31422],{"class":74},[57,50347,4012],{"class":140},[57,50349,50350],{"class":59,"line":17030},[57,50351,34573],{"class":63},[57,50353,50354,50356,50358],{"class":59,"line":17035},[57,50355,31486],{"class":140},[57,50357,156],{"class":136},[57,50359,44748],{"class":140},[57,50361,50362],{"class":59,"line":17041},[57,50363,34586],{"class":63},[57,50365,50366],{"class":59,"line":17055},[57,50367,34591],{"class":63},[57,50369,50370,50372,50374],{"class":59,"line":17068},[57,50371,34596],{"class":140},[57,50373,34599],{"class":74},[57,50375,259],{"class":140},[57,50377,50378],{"class":59,"line":17073},[57,50379,34606],{"class":63},[57,50381,50382,50384,50386],{"class":59,"line":17087},[57,50383,34219],{"class":140},[57,50385,156],{"class":136},[57,50387,34615],{"class":140},[57,50389,50390],{"class":59,"line":17092},[57,50391,34620],{"class":63},[57,50393,50394],{"class":59,"line":17098},[57,50395,34625],{"class":140},[57,50397,50398],{"class":59,"line":17103},[57,50399,2673],{"emptyLinePlaceholder":350},[57,50401,50402],{"class":59,"line":17117},[57,50403,34634],{"class":63},[57,50405,50406],{"class":59,"line":17122},[57,50407,34639],{"class":63},[57,50409,50410,50412,50414,50416,50418,50420,50422],{"class":59,"line":17127},[57,50411,31434],{"class":140},[57,50413,156],{"class":136},[57,50415,31441],{"class":74},[57,50417,211],{"class":136},[57,50419,31446],{"class":140},[57,50421,232],{"class":136},[57,50423,34316],{"class":74},[57,50425,50426,50428,50430],{"class":59,"line":17141},[57,50427,31486],{"class":140},[57,50429,156],{"class":136},[57,50431,32486],{"class":140},[57,50433,50434],{"class":59,"line":17153},[57,50435,34668],{"class":63},[57,50437,50438],{"class":59,"line":17158},[57,50439,34673],{"class":63},[57,50441,50442,50444,50446,50448,50451,50453,50456],{"class":59,"line":17171},[57,50443,34678],{"class":140},[57,50445,156],{"class":136},[57,50447,1306],{"class":140},[57,50449,50450],{"class":74},"'猫'",[57,50452,273],{"class":140},[57,50454,50455],{"class":74},"'狗'",[57,50457,33443],{"class":140},[57,50459,50460,50462],{"class":59,"line":17176},[57,50461,34375],{"class":136},[57,50463,33081],{"class":140},[57,50465,50466],{"class":59,"line":17181},[57,50467,34743],{"class":63},[57,50469,50470,50472,50474,50476],{"class":59,"line":17186},[57,50471,3676],{"class":136},[57,50473,34750],{"class":140},[57,50475,26312],{"class":136},[57,50477,34394],{"class":140},[57,50479,50480,50482,50484],{"class":59,"line":17199},[57,50481,32807],{"class":140},[57,50483,156],{"class":136},[57,50485,32812],{"class":140},[57,50487,50488,50490,50492],{"class":59,"line":17204},[57,50489,32822],{"class":140},[57,50491,156],{"class":136},[57,50493,32827],{"class":140},[57,50495,50496],{"class":59,"line":32830},[57,50497,2673],{"emptyLinePlaceholder":350},[57,50499,50500],{"class":59,"line":32836},[57,50501,34779],{"class":63},[57,50503,50504],{"class":59,"line":32842},[57,50505,33072],{"class":140},[57,50507,50508],{"class":59,"line":32848},[57,50509,34788],{"class":63},[57,50511,50512,50514,50516],{"class":59,"line":32854},[57,50513,32857],{"class":140},[57,50515,156],{"class":136},[57,50517,32862],{"class":140},[57,50519,50520],{"class":59,"line":32865},[57,50521,34801],{"class":63},[57,50523,50524,50526,50528,50530,50532,50534,50536],{"class":59,"line":32871},[57,50525,32874],{"class":140},[57,50527,156],{"class":136},[57,50529,32879],{"class":140},[57,50531,32882],{"class":5489},[57,50533,156],{"class":136},[57,50535,635],{"class":81},[57,50537,238],{"class":140},[57,50539,50540],{"class":59,"line":32891},[57,50541,34822],{"class":63},[57,50543,50544,50546,50548],{"class":59,"line":32897},[57,50545,34827],{"class":140},[57,50547,156],{"class":136},[57,50549,34832],{"class":140},[57,50551,50552,50554,50556],{"class":59,"line":32908},[57,50553,34837],{"class":140},[57,50555,156],{"class":136},[57,50557,34842],{"class":140},[57,50559,50560,50562,50564,50566,50568,50570,50572,50574],{"class":59,"line":32914},[57,50561,34847],{"class":81},[57,50563,168],{"class":140},[57,50565,34852],{"class":74},[57,50567,34855],{"class":140},[57,50569,34858],{"class":74},[57,50571,273],{"class":140},[57,50573,34863],{"class":74},[57,50575,34866],{"class":140},[342,50577,50578],{},"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":46,"searchDepth":67,"depth":67,"links":50580},[50581,50582,50583,50584],{"id":30788,"depth":144,"text":30789},{"id":38036,"depth":144,"text":38037},{"id":41469,"depth":144,"text":41470},{"id":45478,"depth":144,"text":45479},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30780,"description":347},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50591,"title":50592,"body":50593,"description":347,"extension":348,"meta":50600,"navigation":350,"path":50601,"seo":50602,"stem":50603,"__hash__":50604},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50594,"toc":50598},[50595],[10,50596,50592],{"id":50597},"_3yolo模型学习",{"title":46,"searchDepth":67,"depth":67,"links":50599},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50592,"description":347},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50606,"title":50607,"body":50608,"description":50615,"extension":348,"meta":50616,"navigation":350,"path":50618,"seo":50619,"stem":50620,"__hash__":50621},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50609,"toc":50613},[50610],[14,50611,50612],{},"yolo模型还未补充",{"title":46,"searchDepth":67,"depth":67,"links":50614},[],"深度学习学习",{"category":50617},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50607,"description":50615},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50623,"title":50624,"body":50625,"description":347,"extension":348,"meta":50650,"navigation":350,"path":50651,"seo":50652,"stem":50653,"__hash__":50654},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50626,"toc":50648},[50627,50630,50633,50638,50645],[10,50628,50624],{"id":50629},"_1工具",[14,50631,50632],{},"提示错误插件：有问题会提前报错",[14,50634,50635],{},[44,50636],{"alt":46,"src":50637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,50639,50640],{},[18,50641,50644],{"href":50642,"rel":50643},"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",[22],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,50646,50647],{},"alt键加上下箭头可以实现语句的移动",{"title":46,"searchDepth":67,"depth":67,"links":50649},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50624,"description":347},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50656,"title":50657,"body":50658,"description":347,"extension":348,"meta":53522,"navigation":350,"path":53523,"seo":53524,"stem":53525,"__hash__":53526},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50659,"toc":53473},[50660,50663,50667,50671,50676,50679,50684,50688,50695,50700,50707,50712,50719,50724,50728,50733,50736,50740,50745,50749,50754,50757,50760,50763,50766,50769,50772,50775,50778,50783,50788,50793,50797,50800,50803,50807,50812,50815,50823,50828,50845,50853,50858,50863,50868,50873,50878,50881,50886,50891,50895,50904,50909,50914,50918,50923,50926,50930,50935,50943,50948,50953,50956,50961,50966,50971,50974,50977,50980,50985,50990,50993,50998,51001,51006,51009,51012,51015,51020,51023,51026,51041,51046,51051,51056,51059,51062,51065,51079,51082,51087,51092,51095,51098,51101,51104,51107,51110,51113,51117,51121,51126,51130,51133,51138,51143,51146,51151,51154,51158,51163,51166,51169,51172,51175,51178,51181,51184,51187,51190,51194,51199,51204,51209,51212,51215,51219,51224,51227,51231,51234,51237,51242,51245,51248,51252,51256,51259,51264,51269,51272,51301,51306,51311,51316,51321,51325,51330,51334,51339,51342,51346,51350,51355,51359,51364,51369,51373,51378,51381,51383,51386,51391,51395,51400,51404,51408,51413,51418,51423,51428,51432,51437,51442,51447,51450,51453,51458,51461,51466,51471,51476,51481,51485,52292,52296,52639,52644,52647,52650,52653,52656,52659,52662,52665,52668,52670,52673,52675,52678,52682,52687,52690,52693,52696,52700,52705,52710,52730,52733,52737,52742,52747,52764,52768,52797,52801,52823,52825,52864,52872,52878,52882,52885,52888,52893,52898,52901,52904,52907,52912,52917,52920,52923,52926,52929,52932,52935,52938,52941,52944,52947,52950,52952,52955,52958,52961,52964,52967,52970,52973,52976,52980,52985,52988,52993,52996,52999,53002,53005,53008,53011,53014,53016,53019,53022,53025,53028,53031,53034,53038,53041,53050,53053,53058,53061,53066,53069,53072,53075,53078,53081,53084,53087,53091,53095,53098,53101,53106,53111,53116,53120,53125,53130,53133,53136,53139,53142,53145,53150,53153,53158,53160,53165,53168,53172,53177,53180,53183,53188,53192,53195,53200,53203,53206,53235,53240,53243,53246,53249,53252,53255,53259,53262,53348,53352,53355,53360,53365,53372,53375,53378,53381,53384,53387,53392,53397,53400,53403,53406,53409,53412,53415,53418,53421,53424,53426,53429,53433,53438,53443,53448,53451,53456,53461,53464,53467,53470],[10,50661,50657],{"id":50662},"_2基础语法",[365,50664,50666],{"id":50665},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[394,50668,50670],{"id":50669},"_211-js组成","2.1.1 js组成",[377,50672,50673],{},[380,50674,50675],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,50677,50678],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[377,50680,50681],{"start":67},[380,50682,50683],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[394,50685,50687],{"id":50686},"_212-js书写位置","2.1.2 js书写位置",[377,50689,50690],{},[380,50691,50692],{},[33,50693,50694],{},"内部 JavaScript",[14,50696,50697],{},[44,50698],{"alt":46,"src":50699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[377,50701,50702],{"start":67},[380,50703,50704],{},[33,50705,50706],{},"外部 JavaScript",[14,50708,50709],{},[44,50710],{"alt":46,"src":50711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[377,50713,50714],{"start":144},[380,50715,50716],{},[33,50717,50718],{},"内联 JavaScript",[14,50720,50721],{},[44,50722],{"alt":46,"src":50723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[394,50725,50727],{"id":50726},"_213-javascript注释","2.1.3 JavaScript注释",[14,50729,50730],{},[44,50731],{"alt":46,"src":50732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,50734,50735],{},"alt+shift+a一定要记住！",[394,50737,50739],{"id":50738},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,50741,50742],{},[44,50743],{"alt":46,"src":50744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[394,50746,50748],{"id":50747},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[377,50750,50751],{},[380,50752,50753],{},"输出语法：",[14,50755,50756],{},"①document.write('要出的内容')",[14,50758,50759],{},"向body内输出内容；",[14,50761,50762],{},"如果输出的内容写的是标签，也会被解析cheng",[14,50764,50765],{},"②alert('要出的内容')",[14,50767,50768],{},"页面弹出警告对话框",[14,50770,50771],{},"③console.log('控制台打印')",[14,50773,50774],{},"控制台输出语法，程序员调试使用",[14,50776,50777],{},"输入log就行，自动生成：",[14,50779,50780],{},[44,50781],{"alt":46,"src":50782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[377,50784,50785],{"start":67},[380,50786,50787],{},"输入语法：",[14,50789,50790],{},[44,50791],{"alt":46,"src":50792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[394,50794,50796],{"id":50795},"_2116-字面量","21.1.6 字面量",[14,50798,50799],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,50801,50802],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[365,50804,50806],{"id":50805},"_22-变量","2.2 变量",[377,50808,50809],{},[380,50810,50811],{},"变量声明",[14,50813,50814],{},"let 变量名",[1422,50816,50817,50820],{},[380,50818,50819],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[380,50821,50822],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[377,50824,50825],{"start":67},[380,50826,50827],{},"变量赋值",[49,50829,50833],{"className":50830,"code":50831,"language":50832,"meta":46,"style":46},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[28,50834,50835,50840],{"__ignoreMap":46},[57,50836,50837],{"class":59,"line":60},[57,50838,50839],{"class":140},"let age\n",[57,50841,50842],{"class":59,"line":67},[57,50843,50844],{"class":140},"age=18\n",[377,50846,50847,50850],{"start":144},[380,50848,50849],{},"连这些（变量的初始化）：let age=18",[380,50851,50852],{},"更新变量",[14,50854,50855],{},[44,50856],{"alt":46,"src":50857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[377,50859,50860],{"start":162},[380,50861,50862],{},"声明多个变量",[14,50864,50865],{},[44,50866],{"alt":46,"src":50867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[377,50869,50870],{"start":180},[380,50871,50872],{},"变量命名规则与规范",[14,50874,50875],{},[44,50876],{"alt":46,"src":50877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,50879,50880],{},"遵守小驼峰！",[377,50882,50883],{"start":186},[380,50884,50885],{},"变量拓展-let和var的区别",[14,50887,50888],{},[44,50889],{"alt":46,"src":50890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[365,50892,50894],{"id":50893},"_23-数组","2.3 数组",[49,50896,50898],{"className":50830,"code":50897,"language":50832,"meta":46,"style":46},"let arr = []\n",[28,50899,50900],{"__ignoreMap":46},[57,50901,50902],{"class":59,"line":60},[57,50903,50897],{"class":140},[14,50905,50906],{},[44,50907],{"alt":46,"src":50908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,50910,50911],{},[44,50912],{"alt":46,"src":50913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[365,50915,50917],{"id":50916},"_24-常量","2.4 常量",[14,50919,50920],{},[44,50921],{"alt":46,"src":50922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,50924,50925],{},"const — 类似于 let ，但是变量的值无法被修改",[365,50927,50929],{"id":50928},"_25-数据类型","2.5 数据类型",[14,50931,50932],{},[44,50933],{"alt":46,"src":50934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[377,50936,50937,50940],{},[380,50938,50939],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[380,50941,50942],{},"算数运算符：",[14,50944,50945],{},[44,50946],{"alt":46,"src":50947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[377,50949,50950],{"start":144},[380,50951,50952],{},"数字类型（Number）",[14,50954,50955],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,50957,50958],{},[44,50959],{"alt":46,"src":50960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[377,50962,50963],{"start":150},[380,50964,50965],{},"字符串类型（string）",[14,50967,50968],{},[44,50969],{"alt":46,"src":50970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,50972,50973],{},"反引号也是可以使用的",[14,50975,50976],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,50978,50979],{},"例如：document.write(\"我今年\"+age+\"岁\")",[377,50981,50982],{"start":162},[380,50983,50984],{},"模板字符串",[14,50986,50987],{},[44,50988],{"alt":46,"src":50989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,50991,50992],{},"类似于python的字符串格式化",[377,50994,50995],{"start":180},[380,50996,50997],{},"布尔类型",[14,50999,51000],{},"true 和 false",[377,51002,51003],{"start":186},[380,51004,51005],{},"未定义类型（underfined）",[14,51007,51008],{},"表示没有赋值",[14,51010,51011],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,51013,51014],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[377,51016,51017],{"start":197},[380,51018,51019],{},"null（空类型）",[14,51021,51022],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,51024,51025],{},"赋值了，但是内容为空",[49,51027,51029],{"className":50830,"code":51028,"language":50832,"meta":46,"style":46},"typeof null\n输出的是'object'，是一个对象数据类型\n",[28,51030,51031,51036],{"__ignoreMap":46},[57,51032,51033],{"class":59,"line":60},[57,51034,51035],{"class":140},"typeof null\n",[57,51037,51038],{"class":59,"line":67},[57,51039,51040],{"class":140},"输出的是'object'，是一个对象数据类型\n",[377,51042,51043],{"start":241},[380,51044,51045],{},"控制台检测数据类型",[14,51047,51048],{},[44,51049],{"alt":46,"src":51050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[377,51052,51053],{"start":249},[380,51054,51055],{},"类型转换",[14,51057,51058],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,51060,51061],{},"转换方式：隐式转换和显示转换",[14,51063,51064],{},"①隐式转换",[1422,51066,51067,51070,51073,51076],{},[380,51068,51069],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[380,51071,51072],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[380,51074,51075],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[380,51077,51078],{},"任何数据和字符串相加结果都是字符串",[14,51080,51081],{},"②显示转换",[14,51083,51084],{},[44,51085],{"alt":46,"src":51086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,51088,51089],{},[44,51090],{"alt":46,"src":51091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,51093,51094],{},"在输入的时候要用好隐式转换，简单写起来",[14,51096,51097],{},"let num = +prompt(’请输入数字：‘)",[14,51099,51100],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,51102,51103],{},"console.log(parseInt('12.333px'))",[14,51105,51106],{},"输出为：12",[14,51108,51109],{},"console.log(parseInt('a'a'a12.333px'))",[14,51111,51112],{},"输出：NaN",[365,51114,51116],{"id":51115},"_26-运算符","2.6 运算符",[394,51118,51120],{"id":51119},"_261-赋值运算符","2.6.1 赋值运算符",[14,51122,51123],{},[44,51124],{"alt":46,"src":51125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[394,51127,51129],{"id":51128},"_262-一元运算符","2.6.2 一元运算符",[14,51131,51132],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,51134,51135],{},[44,51136],{"alt":46,"src":51137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,51139,51140],{},[44,51141],{"alt":46,"src":51142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,51144,51145],{},"两者的区别：",[14,51147,51148],{},[44,51149],{"alt":46,"src":51150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,51152,51153],{},"前置先自加；后置后加，代码执行完之后再加",[394,51155,51157],{"id":51156},"_263-比较运算符","2.6.3 比较运算符",[14,51159,51160],{},[44,51161],{"alt":46,"src":51162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,51164,51165],{},"比较运算符也有隐式转换",[14,51167,51168],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,51170,51171],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,51173,51174],{},"要使用三等，开发的时候",[14,51176,51177],{},"NaN不等于任何人，包括它自己",[14,51179,51180],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,51182,51183],{},"7\u002F10=0.7",[14,51185,51186],{},"最后：0.5+0.2=0.7",[14,51188,51189],{},"字符串比较，比较的是字符对应的ASCII码",[394,51191,51193],{"id":51192},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,51195,51196],{},[44,51197],{"alt":46,"src":51198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,51200,51201],{},[44,51202],{"alt":46,"src":51203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,51205,51206],{},[44,51207],{"alt":46,"src":51208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,51210,51211],{},"上述题目选D",[14,51213,51214],{},"与真2假1；或真1假2",[394,51216,51218],{"id":51217},"_265-运算符优先级","2.6.5 运算符优先级",[14,51220,51221],{},[44,51222],{"alt":46,"src":51223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,51225,51226],{},"先算逻辑与，后算逻辑或",[365,51228,51230],{"id":51229},"_27-语句","2.7 语句",[14,51232,51233],{},"表达式：是可以被求值的代码，会有结果给我们",[14,51235,51236],{},"语句：语句是可以被执行的代码，例如prompt()",[14,51238,51239],{},[44,51240],{"alt":46,"src":51241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,51243,51244],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,51246,51247],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[394,51249,51251],{"id":51250},"_271-分支语句","2.7.1 分支语句",[22270,51253,51255],{"id":51254},"_2711-if分支语句","2.7.1.1 if分支语句",[14,51257,51258],{},"if语句单行简单的话，可以不写{}，写在一行就行",[377,51260,51261],{},[380,51262,51263],{},"单分支语句",[14,51265,51266],{},[44,51267],{"alt":46,"src":51268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,51270,51271],{},"除了0，所有数字都为真",[49,51273,51275],{"className":50830,"code":51274,"language":50832,"meta":46,"style":46},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[28,51276,51277,51282,51287,51292,51296],{"__ignoreMap":46},[57,51278,51279],{"class":59,"line":60},[57,51280,51281],{"class":140},"if（0) {\n",[57,51283,51284],{"class":59,"line":67},[57,51285,51286],{"class":140},"    let a=1\n",[57,51288,51289],{"class":59,"line":144},[57,51290,51291],{"class":140},"    alert(typeof a)\n",[57,51293,51294],{"class":59,"line":150},[57,51295,1847],{"class":140},[57,51297,51298],{"class":59,"line":162},[57,51299,51300],{"class":140},"不输出，括号为假\n",[377,51302,51303],{"start":67},[380,51304,51305],{},"双分支语句",[14,51307,51308],{},[44,51309],{"alt":46,"src":51310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[377,51312,51313],{"start":144},[380,51314,51315],{},"多分支语句",[14,51317,51318],{},[44,51319],{"alt":46,"src":51320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22270,51322,51324],{"id":51323},"_2712-三元运算符","2.7.1.2 三元运算符",[14,51326,51327],{},[44,51328],{"alt":46,"src":51329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22270,51331,51333],{"id":51332},"_2713-switch语句","2.7.1.3 switch语句",[14,51335,51336],{},[44,51337],{"alt":46,"src":51338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,51340,51341],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[394,51343,51345],{"id":51344},"_272-循环语句","2.7.2 循环语句",[22270,51347,51349],{"id":51348},"_2721-断点演示","2.7.2.1 断点演示",[14,51351,51352],{},[44,51353],{"alt":46,"src":51354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22270,51356,51358],{"id":51357},"_2722-while循环","2.7.2.2 while循环",[14,51360,51361],{},[44,51362],{"alt":46,"src":51363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,51365,51366],{},[44,51367],{"alt":46,"src":51368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22270,51370,51372],{"id":51371},"_2723-for循环","2.7.2.3 for循环",[14,51374,51375],{},[44,51376],{"alt":46,"src":51377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,51379,51380],{},"for(;;) {",[14,51382,1362],{},[14,51384,51385],{},"表示无限循环",[14,51387,51388],{},[44,51389],{"alt":46,"src":51390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22270,51392,51394],{"id":51393},"_2724-循环的退出","2.7.2.4 循环的退出",[14,51396,51397],{},[44,51398],{"alt":46,"src":51399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[365,51401,51403],{"id":51402},"_28-数组","2.8 数组",[394,51405,51407],{"id":51406},"_281-基础认识","2.8.1 基础认识",[14,51409,51410],{},[44,51411],{"alt":46,"src":51412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,51414,51415],{},[44,51416],{"alt":46,"src":51417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,51419,51420],{},[44,51421],{"alt":46,"src":51422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,51424,51425],{},[44,51426],{"alt":46,"src":51427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[394,51429,51431],{"id":51430},"_282-操作数组","2.8.2 操作数组",[14,51433,51434],{},[44,51435],{"alt":46,"src":51436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[377,51438,51439],{},[380,51440,51441],{},"添加元素",[14,51443,51444],{},[44,51445],{"alt":46,"src":51446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,51448,51449],{},"console.log(arr.push('green'))",[14,51451,51452],{},"输出结果：为新数组的长度",[14,51454,51455],{},[44,51456],{"alt":46,"src":51457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,51459,51460],{},"push用的非常多，一定要记住",[377,51462,51463],{},[380,51464,51465],{},"删除元素",[14,51467,51468],{},[44,51469],{"alt":46,"src":51470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,51472,51473],{},[44,51474],{"alt":46,"src":51475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,51477,51478],{},[44,51479],{"alt":46,"src":51480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[394,51482,51484],{"id":51483},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[49,51486,51488],{"className":50830,"code":51487,"language":50832,"meta":46,"style":46},"\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",[28,51489,51490,51505,51521,51525,51534,51552,51576,51598,51612,51620,51627,51639,51650,51654,51658,51665,51677,51692,51705,51724,51741,51756,51768,51780,51792,51796,51800,51811,51821,51833,51845,51857,51868,51872,51876,51888,51892,51906,51910,51914,51925,51939,51951,51965,51969,51978,51987,51991,52000,52004,52013,52018,52023,52036,52064,52069,52074,52099,52104,52108,52113,52118,52133,52137,52142,52172,52184,52200,52216,52230,52235,52242,52246,52251,52264,52272,52280,52284],{"__ignoreMap":46},[57,51491,51492,51495,51499,51502],{"class":59,"line":60},[57,51493,51494],{"class":140},"\u003C!",[57,51496,51498],{"class":51497},"s9eBZ","DOCTYPE",[57,51500,51501],{"class":70}," html",[57,51503,51504],{"class":140},">\n",[57,51506,51507,51509,51511,51514,51516,51519],{"class":59,"line":67},[57,51508,1326],{"class":140},[57,51510,50832],{"class":51497},[57,51512,51513],{"class":70}," lang",[57,51515,156],{"class":140},[57,51517,51518],{"class":74},"\"en\"",[57,51520,51504],{"class":140},[57,51522,51523],{"class":59,"line":144},[57,51524,2673],{"emptyLinePlaceholder":350},[57,51526,51527,51529,51532],{"class":59,"line":150},[57,51528,1326],{"class":140},[57,51530,51531],{"class":51497},"head",[57,51533,51504],{"class":140},[57,51535,51536,51539,51542,51545,51547,51550],{"class":59,"line":162},[57,51537,51538],{"class":140},"    \u003C",[57,51540,51541],{"class":51497},"meta",[57,51543,51544],{"class":70}," charset",[57,51546,156],{"class":140},[57,51548,51549],{"class":74},"\"UTF-8\"",[57,51551,51504],{"class":140},[57,51553,51554,51556,51558,51561,51563,51566,51569,51571,51574],{"class":59,"line":180},[57,51555,51538],{"class":140},[57,51557,51541],{"class":51497},[57,51559,51560],{"class":70}," http-equiv",[57,51562,156],{"class":140},[57,51564,51565],{"class":74},"\"X-UA-Compatible\"",[57,51567,51568],{"class":70}," content",[57,51570,156],{"class":140},[57,51572,51573],{"class":74},"\"IE=edge\"",[57,51575,51504],{"class":140},[57,51577,51578,51580,51582,51584,51586,51589,51591,51593,51596],{"class":59,"line":186},[57,51579,51538],{"class":140},[57,51581,51541],{"class":51497},[57,51583,15192],{"class":70},[57,51585,156],{"class":140},[57,51587,51588],{"class":74},"\"viewport\"",[57,51590,51568],{"class":70},[57,51592,156],{"class":140},[57,51594,51595],{"class":74},"\"width=device-width, initial-scale=1.0\"",[57,51597,51504],{"class":140},[57,51599,51600,51602,51605,51608,51610],{"class":59,"line":197},[57,51601,51538],{"class":140},[57,51603,51604],{"class":51497},"title",[57,51606,51607],{"class":140},">Document\u003C\u002F",[57,51609,51604],{"class":51497},[57,51611,51504],{"class":140},[57,51613,51614,51616,51618],{"class":59,"line":241},[57,51615,51538],{"class":140},[57,51617,342],{"class":51497},[57,51619,51504],{"class":140},[57,51621,51622,51625],{"class":59,"line":249},[57,51623,51624],{"class":51497},"        *",[57,51626,15844],{"class":140},[57,51628,51629,51632,51635,51637],{"class":59,"line":262},[57,51630,51631],{"class":81},"            margin",[57,51633,51634],{"class":140},": ",[57,51636,226],{"class":81},[57,51638,1576],{"class":140},[57,51640,51641,51644,51646,51648],{"class":59,"line":281},[57,51642,51643],{"class":81},"            padding",[57,51645,51634],{"class":140},[57,51647,226],{"class":81},[57,51649,1576],{"class":140},[57,51651,51652],{"class":59,"line":287},[57,51653,2802],{"class":140},[57,51655,51656],{"class":59,"line":298},[57,51657,2673],{"emptyLinePlaceholder":350},[57,51659,51660,51663],{"class":59,"line":311},[57,51661,51662],{"class":70},"        .box",[57,51664,15844],{"class":140},[57,51666,51667,51670,51672,51675],{"class":59,"line":322},[57,51668,51669],{"class":81},"            display",[57,51671,51634],{"class":140},[57,51673,51674],{"class":81},"flex",[57,51676,1576],{"class":140},[57,51678,51679,51682,51684,51687,51690],{"class":59,"line":1929},[57,51680,51681],{"class":81},"            width",[57,51683,51634],{"class":140},[57,51685,51686],{"class":81},"700",[57,51688,51689],{"class":136},"px",[57,51691,1576],{"class":140},[57,51693,51694,51697,51699,51701,51703],{"class":59,"line":1950},[57,51695,51696],{"class":81},"            height",[57,51698,51634],{"class":140},[57,51700,4246],{"class":81},[57,51702,51689],{"class":136},[57,51704,1576],{"class":140},[57,51706,51707,51710,51712,51714,51716,51719,51722],{"class":59,"line":1955},[57,51708,51709],{"class":81},"            border-left",[57,51711,51634],{"class":140},[57,51713,635],{"class":81},[57,51715,51689],{"class":136},[57,51717,51718],{"class":81}," solid",[57,51720,51721],{"class":81}," pink",[57,51723,1576],{"class":140},[57,51725,51726,51729,51731,51733,51735,51737,51739],{"class":59,"line":1969},[57,51727,51728],{"class":81},"            border-bottom",[57,51730,51634],{"class":140},[57,51732,635],{"class":81},[57,51734,51689],{"class":136},[57,51736,51718],{"class":81},[57,51738,51721],{"class":81},[57,51740,1576],{"class":140},[57,51742,51743,51745,51747,51749,51751,51754],{"class":59,"line":1974},[57,51744,51631],{"class":81},[57,51746,51634],{"class":140},[57,51748,1072],{"class":81},[57,51750,51689],{"class":136},[57,51752,51753],{"class":81}," auto",[57,51755,1576],{"class":140},[57,51757,51758,51761,51763,51766],{"class":59,"line":2001},[57,51759,51760],{"class":81},"            justify-content",[57,51762,51634],{"class":140},[57,51764,51765],{"class":81},"space-around",[57,51767,1576],{"class":140},[57,51769,51770,51773,51775,51778],{"class":59,"line":2006},[57,51771,51772],{"class":81},"            align-items",[57,51774,51634],{"class":140},[57,51776,51777],{"class":81},"flex-end",[57,51779,1576],{"class":140},[57,51781,51782,51785,51787,51790],{"class":59,"line":2023},[57,51783,51784],{"class":81},"            text-align",[57,51786,51634],{"class":140},[57,51788,51789],{"class":81},"center",[57,51791,1576],{"class":140},[57,51793,51794],{"class":59,"line":2028},[57,51795,2802],{"class":140},[57,51797,51798],{"class":59,"line":2033},[57,51799,2673],{"emptyLinePlaceholder":350},[57,51801,51802,51804,51806,51809],{"class":59,"line":2038},[57,51803,51662],{"class":70},[57,51805,223],{"class":136},[57,51807,51808],{"class":51497},"div",[57,51810,15844],{"class":140},[57,51812,51813,51815,51817,51819],{"class":59,"line":2052},[57,51814,51669],{"class":81},[57,51816,51634],{"class":140},[57,51818,51674],{"class":81},[57,51820,1576],{"class":140},[57,51822,51823,51825,51827,51829,51831],{"class":59,"line":2057},[57,51824,51681],{"class":81},[57,51826,51634],{"class":140},[57,51828,1072],{"class":81},[57,51830,51689],{"class":136},[57,51832,1576],{"class":140},[57,51834,51835,51838,51840,51843],{"class":59,"line":2850},[57,51836,51837],{"class":81},"            background-color",[57,51839,51634],{"class":140},[57,51841,51842],{"class":81},"pink",[57,51844,1576],{"class":140},[57,51846,51847,51850,51852,51855],{"class":59,"line":2864},[57,51848,51849],{"class":81},"            flex-direction",[57,51851,51634],{"class":140},[57,51853,51854],{"class":81},"column",[57,51856,1576],{"class":140},[57,51858,51859,51861,51863,51866],{"class":59,"line":2872},[57,51860,51760],{"class":81},[57,51862,51634],{"class":140},[57,51864,51865],{"class":81},"space-between",[57,51867,1576],{"class":140},[57,51869,51870],{"class":59,"line":2877},[57,51871,2802],{"class":140},[57,51873,51874],{"class":59,"line":2883},[57,51875,2673],{"emptyLinePlaceholder":350},[57,51877,51878,51880,51883,51886],{"class":59,"line":2889},[57,51879,51662],{"class":70},[57,51881,51882],{"class":51497}," div",[57,51884,51885],{"class":51497}," span",[57,51887,15844],{"class":140},[57,51889,51890],{"class":59,"line":2894},[57,51891,2673],{"emptyLinePlaceholder":350},[57,51893,51894,51897,51899,51902,51904],{"class":59,"line":8221},[57,51895,51896],{"class":81},"            margin-top",[57,51898,51634],{"class":140},[57,51900,51901],{"class":81},"-20",[57,51903,51689],{"class":136},[57,51905,1576],{"class":140},[57,51907,51908],{"class":59,"line":8245},[57,51909,2802],{"class":140},[57,51911,51912],{"class":59,"line":8250},[57,51913,2673],{"emptyLinePlaceholder":350},[57,51915,51916,51918,51920,51923],{"class":59,"line":8256},[57,51917,51662],{"class":70},[57,51919,51882],{"class":51497},[57,51921,51922],{"class":51497}," h4",[57,51924,15844],{"class":140},[57,51926,51927,51930,51932,51935,51937],{"class":59,"line":8283},[57,51928,51929],{"class":81},"            margin-bottom",[57,51931,51634],{"class":140},[57,51933,51934],{"class":81},"-35",[57,51936,51689],{"class":136},[57,51938,1576],{"class":140},[57,51940,51941,51943,51945,51947,51949],{"class":59,"line":8288},[57,51942,51681],{"class":81},[57,51944,51634],{"class":140},[57,51946,773],{"class":81},[57,51948,51689],{"class":136},[57,51950,1576],{"class":140},[57,51952,51953,51956,51958,51961,51963],{"class":59,"line":8294},[57,51954,51955],{"class":81},"            margin-left",[57,51957,51634],{"class":140},[57,51959,51960],{"class":81},"-10",[57,51962,51689],{"class":136},[57,51964,1576],{"class":140},[57,51966,51967],{"class":59,"line":8306},[57,51968,2802],{"class":140},[57,51970,51971,51974,51976],{"class":59,"line":8318},[57,51972,51973],{"class":140},"    \u003C\u002F",[57,51975,342],{"class":51497},[57,51977,51504],{"class":140},[57,51979,51980,51983,51985],{"class":59,"line":8330},[57,51981,51982],{"class":140},"\u003C\u002F",[57,51984,51531],{"class":51497},[57,51986,51504],{"class":140},[57,51988,51989],{"class":59,"line":9989},[57,51990,2673],{"emptyLinePlaceholder":350},[57,51992,51993,51995,51998],{"class":59,"line":10014},[57,51994,1326],{"class":140},[57,51996,51997],{"class":51497},"body",[57,51999,51504],{"class":140},[57,52001,52002],{"class":59,"line":10037},[57,52003,2673],{"emptyLinePlaceholder":350},[57,52005,52006,52008,52011],{"class":59,"line":10061},[57,52007,51538],{"class":140},[57,52009,52010],{"class":51497},"script",[57,52012,51504],{"class":140},[57,52014,52015],{"class":59,"line":10066},[57,52016,52017],{"class":63},"        \u002F\u002F 1. 四次弹框效果\n",[57,52019,52020],{"class":59,"line":10071},[57,52021,52022],{"class":63},"        \u002F\u002F 声明一个新的数组\n",[57,52024,52025,52028,52031,52033],{"class":59,"line":10076},[57,52026,52027],{"class":136},"        let",[57,52029,52030],{"class":140}," arr ",[57,52032,156],{"class":136},[57,52034,52035],{"class":140}," []\n",[57,52037,52038,52040,52042,52045,52047,52049,52051,52053,52055,52058,52060,52062],{"class":59,"line":10085},[57,52039,3676],{"class":136},[57,52041,1934],{"class":140},[57,52043,52044],{"class":136},"let",[57,52046,9711],{"class":140},[57,52048,156],{"class":136},[57,52050,25387],{"class":81},[57,52052,9718],{"class":140},[57,52054,1870],{"class":136},[57,52056,52057],{"class":81}," 4",[57,52059,3487],{"class":140},[57,52061,2565],{"class":136},[57,52063,12715],{"class":140},[57,52065,52066],{"class":59,"line":10090},[57,52067,52068],{"class":63},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[57,52070,52071],{"class":59,"line":10096},[57,52072,52073],{"class":63},"            \u002F\u002F arr.push(num)\n",[57,52075,52076,52079,52082,52084,52087,52089,52092,52094,52097],{"class":59,"line":10117},[57,52077,52078],{"class":140},"            arr.",[57,52080,52081],{"class":70},"push",[57,52083,168],{"class":140},[57,52085,52086],{"class":70},"prompt",[57,52088,168],{"class":140},[57,52090,52091],{"class":74},"`请输入第${",[57,52093,857],{"class":140},[57,52095,52096],{"class":74},"}季度的数据:`",[57,52098,259],{"class":140},[57,52100,52101],{"class":59,"line":10123},[57,52102,52103],{"class":63},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[57,52105,52106],{"class":59,"line":10137},[57,52107,2802],{"class":140},[57,52109,52110],{"class":59,"line":10143},[57,52111,52112],{"class":63},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[57,52114,52115],{"class":59,"line":10170},[57,52116,52117],{"class":63},"        \u002F\u002F 盒子开头\n",[57,52119,52120,52123,52126,52128,52131],{"class":59,"line":10179},[57,52121,52122],{"class":140},"        document.",[57,52124,52125],{"class":70},"write",[57,52127,168],{"class":140},[57,52129,52130],{"class":74},"` \u003Cdiv class=\"box\">`",[57,52132,238],{"class":140},[57,52134,52135],{"class":59,"line":10185},[57,52136,2673],{"emptyLinePlaceholder":350},[57,52138,52139],{"class":59,"line":10193},[57,52140,52141],{"class":63},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[57,52143,52144,52146,52148,52150,52152,52154,52156,52158,52160,52163,52166,52168,52170],{"class":59,"line":10198},[57,52145,3676],{"class":136},[57,52147,1934],{"class":140},[57,52149,52044],{"class":136},[57,52151,9711],{"class":140},[57,52153,156],{"class":136},[57,52155,4366],{"class":81},[57,52157,9718],{"class":140},[57,52159,1326],{"class":136},[57,52161,52162],{"class":140}," arr.",[57,52164,52165],{"class":81},"length",[57,52167,3487],{"class":140},[57,52169,2565],{"class":136},[57,52171,12715],{"class":140},[57,52173,52174,52177,52179,52181],{"class":59,"line":16876},[57,52175,52176],{"class":140},"            document.",[57,52178,52125],{"class":70},[57,52180,168],{"class":140},[57,52182,52183],{"class":74},"`\n",[57,52185,52186,52189,52191,52193,52195,52197],{"class":59,"line":16882},[57,52187,52188],{"class":74},"              \u003Cdiv style=\"height: ${",[57,52190,4153],{"class":140},[57,52192,1306],{"class":74},[57,52194,857],{"class":140},[57,52196,1356],{"class":74},[57,52198,52199],{"class":74},"}px;\">\n",[57,52201,52202,52205,52207,52209,52211,52213],{"class":59,"line":16905},[57,52203,52204],{"class":74},"                \u003Cspan>${",[57,52206,4153],{"class":140},[57,52208,1306],{"class":74},[57,52210,857],{"class":140},[57,52212,1356],{"class":74},[57,52214,52215],{"class":74},"}\u003C\u002Fspan>\n",[57,52217,52218,52221,52223,52225,52227],{"class":59,"line":16911},[57,52219,52220],{"class":74},"                \u003Ch4>第${",[57,52222,857],{"class":140},[57,52224,45763],{"class":136},[57,52226,25387],{"class":81},[57,52228,52229],{"class":74},"}季度\u003C\u002Fh4>\n",[57,52231,52232],{"class":59,"line":16934},[57,52233,52234],{"class":74},"              \u003C\u002Fdiv>          \n",[57,52236,52237,52240],{"class":59,"line":16948},[57,52238,52239],{"class":74},"            `",[57,52241,238],{"class":140},[57,52243,52244],{"class":59,"line":16968},[57,52245,2802],{"class":140},[57,52247,52248],{"class":59,"line":16974},[57,52249,52250],{"class":63},"        \u002F\u002F 盒子结尾\n",[57,52252,52253,52255,52257,52259,52262],{"class":59,"line":16985},[57,52254,52122],{"class":140},[57,52256,52125],{"class":70},[57,52258,168],{"class":140},[57,52260,52261],{"class":74},"` \u003C\u002Fdiv>`",[57,52263,238],{"class":140},[57,52265,52266,52268,52270],{"class":59,"line":17008},[57,52267,51973],{"class":140},[57,52269,52010],{"class":51497},[57,52271,51504],{"class":140},[57,52273,52274,52276,52278],{"class":59,"line":17030},[57,52275,51982],{"class":140},[57,52277,51997],{"class":51497},[57,52279,51504],{"class":140},[57,52281,52282],{"class":59,"line":17035},[57,52283,2673],{"emptyLinePlaceholder":350},[57,52285,52286,52288,52290],{"class":59,"line":17041},[57,52287,51982],{"class":140},[57,52289,50832],{"class":51497},[57,52291,51504],{"class":140},[394,52293,52295],{"id":52294},"_284-冒泡排序","2.8.4 冒泡排序",[49,52297,52299],{"className":50830,"code":52298,"language":50832,"meta":46,"style":46},"\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",[28,52300,52301,52311,52325,52329,52337,52352,52372,52384,52392,52396,52404,52412,52444,52477,52514,52519,52538,52543,52556,52571,52587,52591,52596,52600,52610,52619,52627,52631],{"__ignoreMap":46},[57,52302,52303,52305,52307,52309],{"class":59,"line":60},[57,52304,51494],{"class":140},[57,52306,51498],{"class":51497},[57,52308,51501],{"class":70},[57,52310,51504],{"class":140},[57,52312,52313,52315,52317,52319,52321,52323],{"class":59,"line":67},[57,52314,1326],{"class":140},[57,52316,50832],{"class":51497},[57,52318,51513],{"class":70},[57,52320,156],{"class":140},[57,52322,51518],{"class":74},[57,52324,51504],{"class":140},[57,52326,52327],{"class":59,"line":144},[57,52328,2673],{"emptyLinePlaceholder":350},[57,52330,52331,52333,52335],{"class":59,"line":150},[57,52332,1326],{"class":140},[57,52334,51531],{"class":51497},[57,52336,51504],{"class":140},[57,52338,52339,52342,52344,52346,52348,52350],{"class":59,"line":162},[57,52340,52341],{"class":140},"  \u003C",[57,52343,51541],{"class":51497},[57,52345,51544],{"class":70},[57,52347,156],{"class":140},[57,52349,51549],{"class":74},[57,52351,51504],{"class":140},[57,52353,52354,52356,52358,52360,52362,52364,52366,52368,52370],{"class":59,"line":180},[57,52355,52341],{"class":140},[57,52357,51541],{"class":51497},[57,52359,15192],{"class":70},[57,52361,156],{"class":140},[57,52363,51588],{"class":74},[57,52365,51568],{"class":70},[57,52367,156],{"class":140},[57,52369,51595],{"class":74},[57,52371,51504],{"class":140},[57,52373,52374,52376,52378,52380,52382],{"class":59,"line":186},[57,52375,52341],{"class":140},[57,52377,51604],{"class":51497},[57,52379,51607],{"class":140},[57,52381,51604],{"class":51497},[57,52383,51504],{"class":140},[57,52385,52386,52388,52390],{"class":59,"line":197},[57,52387,51982],{"class":140},[57,52389,51531],{"class":51497},[57,52391,51504],{"class":140},[57,52393,52394],{"class":59,"line":241},[57,52395,2673],{"emptyLinePlaceholder":350},[57,52397,52398,52400,52402],{"class":59,"line":249},[57,52399,1326],{"class":140},[57,52401,51997],{"class":51497},[57,52403,51504],{"class":140},[57,52405,52406,52408,52410],{"class":59,"line":262},[57,52407,52341],{"class":140},[57,52409,52010],{"class":51497},[57,52411,51504],{"class":140},[57,52413,52414,52417,52419,52421,52424,52426,52428,52430,52432,52434,52436,52438,52440,52442],{"class":59,"line":281},[57,52415,52416],{"class":136},"    let",[57,52418,52030],{"class":140},[57,52420,156],{"class":136},[57,52422,52423],{"class":140}," [",[57,52425,736],{"class":81},[57,52427,12708],{"class":140},[57,52429,710],{"class":81},[57,52431,12708],{"class":140},[57,52433,270],{"class":81},[57,52435,12708],{"class":140},[57,52437,498],{"class":81},[57,52439,12708],{"class":140},[57,52441,635],{"class":81},[57,52443,33443],{"class":140},[57,52445,52446,52448,52450,52452,52454,52456,52458,52460,52462,52464,52466,52469,52471,52473,52475],{"class":59,"line":287},[57,52447,3474],{"class":136},[57,52449,1934],{"class":140},[57,52451,52044],{"class":136},[57,52453,9711],{"class":140},[57,52455,156],{"class":136},[57,52457,4366],{"class":81},[57,52459,9718],{"class":140},[57,52461,1326],{"class":136},[57,52463,52162],{"class":140},[57,52465,52165],{"class":81},[57,52467,52468],{"class":136}," -",[57,52470,25387],{"class":81},[57,52472,3487],{"class":140},[57,52474,2565],{"class":136},[57,52476,12715],{"class":140},[57,52478,52479,52482,52484,52486,52488,52490,52492,52494,52496,52498,52500,52502,52504,52506,52508,52510,52512],{"class":59,"line":298},[57,52480,52481],{"class":136},"      for",[57,52483,1934],{"class":140},[57,52485,52044],{"class":136},[57,52487,9773],{"class":140},[57,52489,156],{"class":136},[57,52491,4366],{"class":81},[57,52493,9780],{"class":140},[57,52495,1326],{"class":136},[57,52497,52162],{"class":140},[57,52499,52165],{"class":81},[57,52501,52468],{"class":136},[57,52503,9711],{"class":140},[57,52505,948],{"class":136},[57,52507,25387],{"class":81},[57,52509,9787],{"class":140},[57,52511,2565],{"class":136},[57,52513,12715],{"class":140},[57,52515,52516],{"class":59,"line":311},[57,52517,52518],{"class":63},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[57,52520,52521,52523,52526,52528,52531,52533,52535],{"class":59,"line":322},[57,52522,2770],{"class":136},[57,52524,52525],{"class":140}," (arr[j] ",[57,52527,223],{"class":136},[57,52529,52530],{"class":140}," arr[j ",[57,52532,897],{"class":136},[57,52534,25387],{"class":81},[57,52536,52537],{"class":140},"]) {\n",[57,52539,52540],{"class":59,"line":1929},[57,52541,52542],{"class":63},"          \u002F\u002F 交换两个变量\n",[57,52544,52545,52548,52551,52553],{"class":59,"line":1950},[57,52546,52547],{"class":136},"          let",[57,52549,52550],{"class":140}," tmp ",[57,52552,156],{"class":136},[57,52554,52555],{"class":140}," arr[j]\n",[57,52557,52558,52561,52563,52565,52567,52569],{"class":59,"line":1955},[57,52559,52560],{"class":140},"          arr[j] ",[57,52562,156],{"class":136},[57,52564,52530],{"class":140},[57,52566,897],{"class":136},[57,52568,25387],{"class":81},[57,52570,33443],{"class":140},[57,52572,52573,52576,52578,52580,52582,52584],{"class":59,"line":1969},[57,52574,52575],{"class":140},"          arr[j ",[57,52577,897],{"class":136},[57,52579,25387],{"class":81},[57,52581,4716],{"class":140},[57,52583,156],{"class":136},[57,52585,52586],{"class":140}," tmp\n",[57,52588,52589],{"class":59,"line":1974},[57,52590,2802],{"class":140},[57,52592,52593],{"class":59,"line":2001},[57,52594,52595],{"class":140},"      }\n",[57,52597,52598],{"class":59,"line":2006},[57,52599,2460],{"class":140},[57,52601,52602,52605,52607],{"class":59,"line":2023},[57,52603,52604],{"class":140},"    document.",[57,52606,52125],{"class":70},[57,52608,52609],{"class":140},"(arr)\n",[57,52611,52612,52615,52617],{"class":59,"line":2028},[57,52613,52614],{"class":140},"  \u003C\u002F",[57,52616,52010],{"class":51497},[57,52618,51504],{"class":140},[57,52620,52621,52623,52625],{"class":59,"line":2033},[57,52622,51982],{"class":140},[57,52624,51997],{"class":51497},[57,52626,51504],{"class":140},[57,52628,52629],{"class":59,"line":2038},[57,52630,2673],{"emptyLinePlaceholder":350},[57,52632,52633,52635,52637],{"class":59,"line":2052},[57,52634,51982],{"class":140},[57,52636,50832],{"class":51497},[57,52638,51504],{"class":140},[14,52640,52641],{},[44,52642],{"alt":46,"src":52643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,52645,52646],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,52648,52649],{},"let arr = [4, 2, 5, 1, 3]",[14,52651,52652],{},"\u002F\u002F 1.升序排列写法",[14,52654,52655],{},"arr.sort(function (a, b) {",[14,52657,52658],{},"return a - b",[14,52660,52661],{},"})",[14,52663,52664],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,52666,52667],{},"\u002F\u002F 降序排列写法",[14,52669,52655],{},[14,52671,52672],{},"return b - a",[14,52674,52661],{},[14,52676,52677],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[365,52679,52681],{"id":52680},"_29-函数","2.9 函数",[14,52683,52684],{},[44,52685],{"alt":46,"src":52686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,52688,52689],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,52691,52692],{},"函数的声明用function",[14,52694,52695],{},"函数里边可以嵌套函数",[394,52697,52699],{"id":52698},"_291-函数传参","2.9.1 函数传参",[14,52701,52702],{},[44,52703],{"alt":46,"src":52704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,52706,52707],{},[44,52708],{"alt":46,"src":52709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1422,52711,52712,52715,52718,52721,52724,52727],{},[380,52713,52714],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[380,52716,52717],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[380,52719,52720],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[380,52722,52723],{},"开发中尽量保持形参和实参个数一致",[380,52725,52726],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[380,52728,52729],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,52731,52732],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[394,52734,52736],{"id":52735},"_292-函数的返回值","2.9.2 函数的返回值",[14,52738,52739],{},[44,52740],{"alt":46,"src":52741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,52743,52744],{},[44,52745],{"alt":46,"src":52746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1422,52748,52749,52752,52755,52758,52761],{},[380,52750,52751],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[380,52753,52754],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[380,52756,52757],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[380,52759,52760],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[380,52762,52763],{},"断点调试:进入函数内部看执行过程F11",[394,52765,52767],{"id":52766},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[49,52769,52771],{"className":50830,"code":52770,"language":50832,"meta":46,"style":46},"    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",[28,52772,52773,52778,52783,52787,52792],{"__ignoreMap":46},[57,52774,52775],{"class":59,"line":60},[57,52776,52777],{"class":140},"    function fn(a, b) {\n",[57,52779,52780],{"class":59,"line":67},[57,52781,52782],{"class":140},"      console.log(a + b);\n",[57,52784,52785],{"class":59,"line":144},[57,52786,2460],{"class":140},[57,52788,52789],{"class":59,"line":150},[57,52790,52791],{"class":140},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[57,52793,52794],{"class":59,"line":162},[57,52795,52796],{"class":140},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[394,52798,52800],{"id":52799},"_294-作用域","2.9.4 作用域",[1422,52802,52803,52809,52814,52817,52820],{},[380,52804,52805,52806],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[33,52807,52808],{},"作用域",[380,52810,52811],{},[33,52812,52813],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[380,52815,52816],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[380,52818,52819],{},"函数内部可以直接所使用全局变量",[380,52821,52822],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,52824,14905],{},[49,52826,52828],{"className":50830,"code":52827,"language":50832,"meta":46,"style":46},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[28,52829,52830,52835,52840,52844,52849,52854,52859],{"__ignoreMap":46},[57,52831,52832],{"class":59,"line":60},[57,52833,52834],{"class":140},"    function fun() {\n",[57,52836,52837],{"class":59,"line":67},[57,52838,52839],{"class":140},"      num = 10\n",[57,52841,52842],{"class":59,"line":144},[57,52843,2460],{"class":140},[57,52845,52846],{"class":59,"line":150},[57,52847,52848],{"class":140},"    fun()\n",[57,52850,52851],{"class":59,"line":162},[57,52852,52853],{"class":140},"    console.log(num)\n",[57,52855,52856],{"class":59,"line":180},[57,52857,52858],{"class":140},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[57,52860,52861],{"class":59,"line":186},[57,52862,52863],{"class":140},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1422,52865,52866,52869],{},[380,52867,52868],{},"函数内部的形参可以看做是局部变量",[380,52870,52871],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,52873,52874,52875],{},"变量访问原则： ",[33,52876,52877],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[394,52879,52881],{"id":52880},"_295-匿名函数","2.9.5 匿名函数",[14,52883,52884],{},"函数可以分为具名函数和匿名函数",[14,52886,52887],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[377,52889,52890],{},[380,52891,52892],{},"函数表达式",[14,52894,52895],{},[44,52896],{"alt":46,"src":52897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,52899,52900],{},"里边也可以写参数",[14,52902,52903],{},"具名函数调用位置可以随意调整；",[14,52905,52906],{},"匿名函数函数表达式形式只能在声明后才可以使用",[377,52908,52909],{"start":67},[380,52910,52911],{},"立即执行函数",[14,52913,52914],{},[44,52915],{"alt":46,"src":52916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,52918,52919],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,52921,52922],{},"写法：两个小括号，然后在第一个小括号中写function",[14,52924,52925],{},"(function () {})();",[14,52927,52928],{},"不要落下最后的;",[14,52930,52931],{},"立即执行函数必须要加;",[14,52933,52934],{},"分号写前写后都没问题",[14,52936,52937],{},"写前：",[14,52939,52940],{},"(function() {})()",[14,52942,52943],{},";(function () {})();",[14,52945,52946],{},"写后:",[14,52948,52949],{},"(function() {})();",[14,52951,52925],{},[14,52953,52954],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,52956,52957],{},"还有一种写法：",[14,52959,52960],{},"(function(){}());",[14,52962,52963],{},"或者:",[14,52965,52966],{},"!function(){}();",[14,52968,52969],{},"立即执行函数有时候也是可以加名字的：",[14,52971,52972],{},"(function flexible(window,document) {}(window,document));",[14,52974,52975],{},"省一些调用方法",[394,52977,52979],{"id":52978},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,52981,52982],{},[44,52983],{"alt":46,"src":52984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,52986,52987],{},"这样就不用非得给x,y初始化了",[14,52989,52990],{},[44,52991],{"alt":46,"src":52992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,52994,52995],{},"代码执行时先看左边",[14,52997,52998],{},"例如：console.log(false && 3+5)",[14,53000,53001],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,53003,53004],{},"&&都是真时，就返回最后一个真值",[14,53006,53007],{},"console.log(11 && 22)",[14,53009,53010],{},"输出22",[14,53012,53013],{},"逻辑与：遇真则真",[14,53015,14905],{},[14,53017,53018],{},"let age=1",[14,53020,53021],{},"console.log(11 || age++)",[14,53023,53024],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,53026,53027],{},"console.log(11 || 22)",[14,53029,53030],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,53032,53033],{},"||如果都是假的话，就取最后一个假的值了",[394,53035,53037],{"id":53036},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,53039,53040],{},"显示转换：",[14,53042,53043,53046,53047],{},[33,53044,53045],{},"记忆","： ",[33,53048,53049],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,53051,53052],{},"空字符串为假，其他字符串全为真",[14,53054,53055],{},[44,53056],{"alt":46,"src":53057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,53059,53060],{},"隐式转换：",[14,53062,53063],{},[44,53064],{"alt":46,"src":53065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,53067,53068],{},"隐式转换:",[14,53070,53071],{},"null+3=3",[14,53073,53074],{},"undefined+3=NaN",[14,53076,53077],{},"null==undefined 输出true,他两个都当0看",[14,53079,53080],{},"null===undefined 输出false",[14,53082,53083],{},"undefined做任何操作都是NaN",[14,53085,53086],{},"NaN不等于NaN，NaN表示计算错误",[365,53088,53090],{"id":53089},"_210-对象","2.10 对象",[394,53092,53094],{"id":53093},"_2101-对象的介绍","2.10.1 对象的介绍",[14,53096,53097],{},"对象也是一种数据类型，里边的数据是无序的",[14,53099,53100],{},"对象由属性和方法组成",[14,53102,53103],{},[44,53104],{"alt":46,"src":53105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,53107,53108],{},[44,53109],{"alt":46,"src":53110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,53112,53113],{},[44,53114],{"alt":46,"src":53115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[394,53117,53119],{"id":53118},"_2102-对象属性","2.10.2 对象属性",[14,53121,53122],{},[44,53123],{"alt":46,"src":53124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[377,53126,53127],{},[380,53128,53129],{},"查询对象",[14,53131,53132],{},"对象名.属性 goods.uname",[14,53134,53135],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,53137,53138],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,53140,53141],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,53143,53144],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[377,53146,53147],{"start":67},[380,53148,53149],{},"重新赋值",[14,53151,53152],{},"对象名.属性=新值",[377,53154,53155],{"start":144},[380,53156,53157],{},"增加新数据",[14,53159,53152],{},[377,53161,53162],{"start":150},[380,53163,53164],{},"删除对象中的属性",[14,53166,53167],{},"delete 对象名.属性",[394,53169,53171],{"id":53170},"_2103-对象方法","2.10.3 对象方法",[14,53173,53174],{},[44,53175],{"alt":46,"src":53176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,53178,53179],{},"后边跟的是匿名函数",[14,53181,53182],{},"对象外面的叫函数；对象内部的叫方法",[14,53184,53185],{},[44,53186],{"alt":46,"src":53187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[394,53189,53191],{"id":53190},"_2104-遍历对象","2.10.4 遍历对象",[14,53193,53194],{},"理解为加括号的python字典遍历",[14,53196,53197],{},[44,53198],{"alt":46,"src":53199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,53201,53202],{},"k是字符串类型",[14,53204,53205],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[49,53207,53209],{"className":50830,"code":53208,"language":50832,"meta":46,"style":46},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[28,53210,53211,53216,53221,53226,53231],{"__ignoreMap":46},[57,53212,53213],{"class":59,"line":60},[57,53214,53215],{"class":140},"   let arr = [1, 2, 3]\n",[57,53217,53218],{"class":59,"line":67},[57,53219,53220],{"class":140},"    for (let k in arr) {\n",[57,53222,53223],{"class":59,"line":144},[57,53224,53225],{"class":140},"      console.log(k)\n",[57,53227,53228],{"class":59,"line":150},[57,53229,53230],{"class":140},"      console.log(arr[k])\n",[57,53232,53233],{"class":59,"line":162},[57,53234,2460],{"class":140},[14,53236,53237],{},[44,53238],{"alt":46,"src":53239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,53241,53242],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,53244,53245],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,53247,53248],{},"for in 得到的k是属性名",[52010,53250,53251],{},"\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,53253,53254],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[394,53256,53258],{"id":53257},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,53260,53261],{},"数组中放对象信息",[49,53263,53267],{"className":53264,"code":53265,"language":53266,"meta":46,"style":46},"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",[28,53268,53269,53277,53282,53287,53292,53297,53302,53307,53312,53317,53322,53327,53332,53336,53340],{"__ignoreMap":46},[57,53270,53271,53273,53275],{"class":59,"line":60},[57,53272,1326],{"class":140},[57,53274,52010],{"class":51497},[57,53276,51504],{"class":140},[57,53278,53279],{"class":59,"line":67},[57,53280,53281],{"class":140},"    let students = [\n",[57,53283,53284],{"class":59,"line":144},[57,53285,53286],{"class":140},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[57,53288,53289],{"class":59,"line":150},[57,53290,53291],{"class":140},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[57,53293,53294],{"class":59,"line":162},[57,53295,53296],{"class":140},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[57,53298,53299],{"class":59,"line":180},[57,53300,53301],{"class":140},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[57,53303,53304],{"class":59,"line":186},[57,53305,53306],{"class":140},"    ]\n",[57,53308,53309],{"class":59,"line":197},[57,53310,53311],{"class":140},"    for (let i = 0; i \u003C students.length; i++) {\n",[57,53313,53314],{"class":59,"line":241},[57,53315,53316],{"class":140},"      for (let k in students[i]) {\n",[57,53318,53319],{"class":59,"line":249},[57,53320,53321],{"class":140},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[57,53323,53324],{"class":59,"line":262},[57,53325,53326],{"class":140},"        \u002F\u002F输出每个人的名字：\n",[57,53328,53329],{"class":59,"line":281},[57,53330,53331],{"class":140},"        \u002F\u002Fconsole.log(students[i].name)\n",[57,53333,53334],{"class":59,"line":287},[57,53335,52595],{"class":140},[57,53337,53338],{"class":59,"line":298},[57,53339,2460],{"class":140},[57,53341,53342,53344,53346],{"class":59,"line":311},[57,53343,52614],{"class":140},[57,53345,52010],{"class":51497},[57,53347,51504],{"class":140},[394,53349,53351],{"id":53350},"_2106-内置对象","2.10.6 内置对象",[14,53353,53354],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[377,53356,53357],{},[380,53358,53359],{},"数学对象Math",[14,53361,53362],{},[44,53363],{"alt":46,"src":53364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,53366,53367],{},[18,53368,53371],{"href":53369,"rel":53370},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[22],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,53373,53374],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,53376,53377],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,53379,53380],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,53382,53383],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,53385,53386],{},"null属于对象数据类型",[377,53388,53389],{"start":67},[380,53390,53391],{},"生成任意范围随机数",[14,53393,53394],{},[44,53395],{"alt":46,"src":53396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,53398,53399],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,53401,53402],{},"乘以几就取不到几",[14,53404,53405],{},"取数组中的随机元素：",[14,53407,53408],{},"let arr = ['red', 'green', 'blue']",[14,53410,53411],{},"let random = Math.floor(Math.random() * arr.length)",[14,53413,53414],{},"console.log(arr[random])",[14,53416,53417],{},"这个函数得到的是全闭区间",[14,53419,53420],{},"function getRandom(N, M) {",[14,53422,53423],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,53425,1362],{},[14,53427,53428],{},"console.log(getRandom(4, 8))",[394,53430,53432],{"id":53431},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,53434,53435],{},[44,53436],{"alt":46,"src":53437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,53439,53440],{},[44,53441],{"alt":46,"src":53442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,53444,53445],{},[44,53446],{"alt":46,"src":53447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,53449,53450],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,53452,53453],{},[44,53454],{"alt":46,"src":53455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,53457,53458],{},[44,53459],{"alt":46,"src":53460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,53462,53463],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,53465,53466],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,53468,53469],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[342,53471,53472],{},"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":46,"searchDepth":67,"depth":67,"links":53474},[53475,53483,53484,53485,53486,53487,53494,53498,53504,53513],{"id":50665,"depth":67,"text":50666,"children":53476},[53477,53478,53479,53480,53481,53482],{"id":50669,"depth":144,"text":50670},{"id":50686,"depth":144,"text":50687},{"id":50726,"depth":144,"text":50727},{"id":50738,"depth":144,"text":50739},{"id":50747,"depth":144,"text":50748},{"id":50795,"depth":144,"text":50796},{"id":50805,"depth":67,"text":50806},{"id":50893,"depth":67,"text":50894},{"id":50916,"depth":67,"text":50917},{"id":50928,"depth":67,"text":50929},{"id":51115,"depth":67,"text":51116,"children":53488},[53489,53490,53491,53492,53493],{"id":51119,"depth":144,"text":51120},{"id":51128,"depth":144,"text":51129},{"id":51156,"depth":144,"text":51157},{"id":51192,"depth":144,"text":51193},{"id":51217,"depth":144,"text":51218},{"id":51229,"depth":67,"text":51230,"children":53495},[53496,53497],{"id":51250,"depth":144,"text":51251},{"id":51344,"depth":144,"text":51345},{"id":51402,"depth":67,"text":51403,"children":53499},[53500,53501,53502,53503],{"id":51406,"depth":144,"text":51407},{"id":51430,"depth":144,"text":51431},{"id":51483,"depth":144,"text":51484},{"id":52294,"depth":144,"text":52295},{"id":52680,"depth":67,"text":52681,"children":53505},[53506,53507,53508,53509,53510,53511,53512],{"id":52698,"depth":144,"text":52699},{"id":52735,"depth":144,"text":52736},{"id":52766,"depth":144,"text":52767},{"id":52799,"depth":144,"text":52800},{"id":52880,"depth":144,"text":52881},{"id":52978,"depth":144,"text":52979},{"id":53036,"depth":144,"text":53037},{"id":53089,"depth":67,"text":53090,"children":53514},[53515,53516,53517,53518,53519,53520,53521],{"id":53093,"depth":144,"text":53094},{"id":53118,"depth":144,"text":53119},{"id":53170,"depth":144,"text":53171},{"id":53190,"depth":144,"text":53191},{"id":53257,"depth":144,"text":53258},{"id":53350,"depth":144,"text":53351},{"id":53431,"depth":144,"text":53432},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50657,"description":347},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53528,"title":53529,"body":53530,"description":347,"extension":348,"meta":76870,"navigation":350,"path":76871,"seo":76872,"stem":76873,"__hash__":76874},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53531,"toc":76810},[53532,53535,53538,53541,53546,53549,53552,53555,53559,53563,53569,53574,53582,53589,53592,53596,53601,53606,53611,53614,53617,53628,53631,53635,53638,53641,53646,53651,53656,53659,53662,53754,53757,53762,53765,53770,53773,53776,53781,53784,53789,53793,53796,53810,53814,53819,53822,53825,53829,53834,53837,53841,53845,53850,53854,53859,53862,53865,53868,53871,53874,53877,53882,53887,53915,53918,53921,53924,53929,53932,53935,53938,53941,53945,53974,53978,53983,53988,53991,53994,53997,54002,54117,54122,54127,54288,54293,54296,54300,54305,54310,54313,54316,54319,54322,54325,54328,54331,54334,54337,54340,54343,54346,54349,54352,54354,54357,54360,54363,54368,54372,54769,54772,54778,54782,54787,56069,56074,56077,56080,56083,56088,57284,57288,57294,57299,57302,57307,57312,57316,57320,57325,57328,57333,57336,57339,57343,58251,58254,58258,58479,58482,58485,58488,58714,58717,58941,58944,58948,58953,58956,58959,59187,59190,59223,59226,59230,59235,59239,59242,59245,59248,59251,59254,59257,59260,59265,60545,60549,60552,61645,61649,61652,61655,61658,61661,61665,61668,61671,61673,61681,63162,63166,63169,63172,63175,63384,63387,63391,63395,63400,63405,63408,63411,63416,63420,63425,63428,63537,63541,63546,63551,63554,63557,63561,63566,63571,63576,63579,63582,63593,63596,63601,63606,63609,63612,63685,63689,63694,63697,63699,63710,63714,63719,65045,65048,65051,65054,65056,65059,65062,65065,65068,65071,65074,65077,65080,65083,65086,65089,65092,65094,65096,65099,65103,66197,66200,66203,66219,66233,66236,66241,66247,66252,66256,66260,66265,66269,66274,66716,66721,66724,66728,66733,66736,66739,66743,66748,66752,66757,66762,66766,66771,66776,66779,66784,66789,66793,66798,66803,66907,66910,66914,66919,67285,67288,67291,67294,67297,67300,67303,67306,67309,68605,68609,68614,68619,68622,68625,68628,68631,68633,68638,68643,68646,68650,68655,68660,68665,68668,68671,68674,68677,68680,68685,68688,68692,68697,68702,68706,68711,68714,68719,68722,68725,68728,68731,68734,68739,68742,68745,68748,68751,68755,68760,68763,68767,68772,68775,68778,68782,68811,68814,68818,68822,68827,68831,68836,68839,68842,68845,68848,68851,68854,68857,68860,68863,68866,68869,68872,68875,68878,68882,68887,68892,68895,68899,68903,68908,68911,68915,68918,68921,68926,68931,68936,68941,68946,68949,68952,68957,68962,68966,68971,68974,68979,68982,68985,68988,68991,68996,68999,69008,69012,69017,69020,69023,69027,69030,69035,69039,69042,69048,69054,69058,69084,69087,70648,70651,71147,71150,71155,71160,71165,71169,71174,71179,71184,71188,71193,71196,71199,71202,71205,71209,71212,71217,71220,71225,71229,71234,71237,71242,71247,71252,71255,71258,71263,71268,71271,71274,71278,71281,71286,71289,71294,71297,71302,71307,71312,71315,71320,71385,71388,71399,71403,71408,71580,71584,71589,71592,71595,71598,71602,71613,71617,71620,71625,71630,71633,71636,71639,71642,71645,71647,71650,71653,71656,71661,71664,71669,71672,71676,71679,71682,71696,71700,71703,71758,71763,71766,71769,71774,71777,71781,71786,71916,71920,71925,71930,72011,72016,72020,72023,72028,72033,72039,72042,72045,72048,72052,72057,72060,72071,72075,72092,75139,75143,75146,75149,75152,75173,75177,75180,75188,75191,75196,75199,75202,75207,75212,75216,75237,75241,75246,75249,75252,75255,75258,75262,75267,75270,75274,75279,75282,75287,75290,75295,75298,75303,76506,76510,76515,76518,76523,76807],[10,53533,53529],{"id":53534},"_3web-apis",[14,53536,53537],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,53539,53540],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,53542,53543],{},[44,53544],{"alt":46,"src":53545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,53547,53548],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,53550,53551],{},"建议数组和对象使用 const 来声明",[14,53553,53554],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[365,53556,53558],{"id":53557},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[394,53560,53562],{"id":53561},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,53564,53565,53568],{},[28,53566,53567],{},"document"," = HTML 文件解析后的对象化表示；",[14,53570,53571,53573],{},[28,53572,53567],{}," ≠ HTML 文件本身",[14,53575,53576,53581],{},[33,53577,53578],{},[28,53579,53580],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,53583,53584,53588],{},[33,53585,53586],{},[28,53587,53567],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,53590,53591],{},"document实际上为window.document的简写",[394,53593,53595],{"id":53594},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,53597,53598],{},[44,53599],{"alt":46,"src":53600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,53602,53603],{},[44,53604],{"alt":46,"src":53605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,53607,53608],{},[44,53609],{"alt":46,"src":53610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,53612,53613],{},"console.dir()",[14,53615,53616],{},"dir用来打印对象",[1422,53618,53619,53622,53625],{},[380,53620,53621],{},"任何一个标签，都是一个对象",[380,53623,53624],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[380,53626,53627],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,53629,53630],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[394,53632,53634],{"id":53633},"_312-获取dom对象","3.1.2 获取DoM对象",[14,53636,53637],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,53639,53640],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,53642,53643],{},[33,53644,53645],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[377,53647,53648],{},[380,53649,53650],{},"利用CSS选择器来获取标签元素",[14,53652,53653],{},[44,53654],{"alt":46,"src":53655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,53657,53658],{},"里边的选择器必须必须加引号！！！",[14,53660,53661],{},"只选择第一个元素",[49,53663,53665],{"className":53264,"code":53664,"language":53266,"meta":46,"style":46},"\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",[28,53666,53667,53675,53696,53715,53723,53728,53733,53738,53746],{"__ignoreMap":46},[57,53668,53669,53671,53673],{"class":59,"line":60},[57,53670,1326],{"class":140},[57,53672,51997],{"class":51497},[57,53674,51504],{"class":140},[57,53676,53677,53679,53681,53684,53686,53689,53692,53694],{"class":59,"line":67},[57,53678,52341],{"class":140},[57,53680,51808],{"class":51497},[57,53682,53683],{"class":70}," class",[57,53685,156],{"class":140},[57,53687,53688],{"class":74},"\"box\"",[57,53690,53691],{"class":140},">123\u003C\u002F",[57,53693,51808],{"class":51497},[57,53695,51504],{"class":140},[57,53697,53698,53700,53702,53704,53706,53708,53711,53713],{"class":59,"line":144},[57,53699,52341],{"class":140},[57,53701,51808],{"class":51497},[57,53703,53683],{"class":70},[57,53705,156],{"class":140},[57,53707,53688],{"class":74},[57,53709,53710],{"class":140},">456\u003C\u002F",[57,53712,51808],{"class":51497},[57,53714,51504],{"class":140},[57,53716,53717,53719,53721],{"class":59,"line":150},[57,53718,52341],{"class":140},[57,53720,52010],{"class":51497},[57,53722,51504],{"class":140},[57,53724,53725],{"class":59,"line":162},[57,53726,53727],{"class":140},"    \u002F\u002F 1.获取匹配的第一个元素\n",[57,53729,53730],{"class":59,"line":180},[57,53731,53732],{"class":140},"    const box = document.querySelector('div')\n",[57,53734,53735],{"class":59,"line":186},[57,53736,53737],{"class":140},"    console.dir(box)\n",[57,53739,53740,53742,53744],{"class":59,"line":197},[57,53741,52614],{"class":140},[57,53743,52010],{"class":51497},[57,53745,51504],{"class":140},[57,53747,53748,53750,53752],{"class":59,"line":241},[57,53749,51982],{"class":140},[57,53751,51997],{"class":51497},[57,53753,51504],{"class":140},[14,53755,53756],{},"只选123，不选456",[14,53758,53759],{},[44,53760],{"alt":46,"src":53761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,53763,53764],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,53766,53767],{},[44,53768],{"alt":46,"src":53769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,53771,53772],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,53774,53775],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[377,53777,53778],{"start":67},[380,53779,53780],{},"其他方法来获取标签元素",[14,53782,53783],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,53785,53786],{},[44,53787],{"alt":46,"src":53788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[394,53790,53792],{"id":53791},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,53794,53795],{},"设置修改DOM元素内容有两种方式：",[1422,53797,53798,53801,53804,53807],{},[380,53799,53800],{},"元素.innerText=''",[380,53802,53803],{},"元素.innerHTML=''",[380,53805,53806],{},"不写字符串输出数字也是可以的",[380,53808,53809],{},"元素.innerHtml=1",[22270,53811,53813],{"id":53812},"_3131-innertext","3.1.3.1 innerText",[14,53815,53816],{},[44,53817],{"alt":46,"src":53818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,53820,53821],{},"思路：实现了修改盒子中的内容！",[14,53823,53824],{},"它只显示纯文本，不解析标签",[22270,53826,53828],{"id":53827},"_3132-innerhtml","3.1.3.2 innerHTML",[14,53830,53831],{},[44,53832],{"alt":46,"src":53833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,53835,53836],{},"相比于innerText，他的强大之处在于可以解析标签",[394,53838,53840],{"id":53839},"_314-操作元素属性","3.1.4 操作元素属性",[22270,53842,53844],{"id":53843},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,53846,53847],{},[44,53848],{"alt":46,"src":53849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22270,53851,53853],{"id":53852},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,53855,53856],{},[44,53857],{"alt":46,"src":53858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,53860,53861],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,53863,53864],{},"div.style.backgroundColor = 'hotpink'",[14,53866,53867],{},"如果按照css的写法，-表示减，就会出错",[14,53869,53870],{},"body元素不需要再获取，直接用就行！！！！！！",[14,53872,53873],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,53875,53876],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,53878,53879],{},[44,53880],{"alt":46,"src":53881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,53883,53884],{},[44,53885],{"alt":46,"src":53886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[377,53888,53889,53892,53895,53898,53901,53904],{},[380,53890,53891],{},"className这个方式就是修改很多样式的时候来使用的！",[380,53893,53894],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[380,53896,53897],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[380,53899,53900],{},"className为属性名，如果还用class的话就导致与关键字冲突",[380,53902,53903],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[380,53905,53906,53907,53912],{},"解析标签的时候就变为了",[51808,53908],{"className":53909},[53910,53911],"nav","box",[53913,53914],"br",{},[14,53916,53917],{},"例子：",[51808,53919],{"className":53920},[53910],[52010,53922,53923],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,53925,53926],{},[44,53927],{"alt":46,"src":53928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,53930,53931],{},"追加和删除类名用classList",[14,53933,53934],{},"常用于类似于开关的操作",[14,53936,53937],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,53939,53940],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22270,53942,53944],{"id":53943},"_3143-牢记点","3.1.4.3 牢记点",[377,53946,53947,53950,53953,53956,53959,53962,53965,53968,53971],{},[380,53948,53949],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[380,53951,53952],{},"使用style属性操作css时不要忘记引号",[380,53954,53955],{},"使用className或者classList时也不要忘记引号",[380,53957,53958],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[380,53960,53961],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[380,53963,53964],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[380,53966,53967],{},"若： let arr=['1','2',3] arr[0]=1",[380,53969,53970],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[380,53972,53973],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[394,53975,53977],{"id":53976},"_315-操作表单元素","3.1.5 操作表单元素",[377,53979,53980],{},[380,53981,53982],{},"天生的属性",[14,53984,53985],{},[44,53986],{"alt":46,"src":53987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,53989,53990],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,53992,53993],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,53995,53996],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,53998,53999],{},[44,54000],{"alt":46,"src":54001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[49,54003,54005],{"className":50830,"code":54004,"language":50832,"meta":46,"style":46},"在复选框中如果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",[28,54006,54007,54012,54044,54049,54054,54059,54064,54068,54073,54078,54095,54107,54112],{"__ignoreMap":46},[57,54008,54009],{"class":59,"line":60},[57,54010,54011],{"class":140},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[57,54013,54014,54016,54019,54022,54024,54027,54029,54031,54033,54035,54037,54039,54042],{"class":59,"line":67},[57,54015,1326],{"class":140},[57,54017,54018],{"class":51497},"input",[57,54020,54021],{"class":70}," type",[57,54023,156],{"class":140},[57,54025,54026],{"class":74},"\"checkbox\"",[57,54028,15192],{"class":70},[57,54030,156],{"class":140},[57,54032,7925],{"class":74},[57,54034,15231],{"class":70},[57,54036,156],{"class":140},[57,54038,7925],{"class":74},[57,54040,54041],{"class":70}," checked",[57,54043,51504],{"class":140},[57,54045,54046],{"class":59,"line":144},[57,54047,54048],{"class":140},"不选的话：\n",[57,54050,54051],{"class":59,"line":150},[57,54052,54053],{"class":140},"const input = document.querySelector('input')\n",[57,54055,54056],{"class":59,"line":162},[57,54057,54058],{"class":140},"input.checked=false\n",[57,54060,54061],{"class":59,"line":180},[57,54062,54063],{"class":140},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[57,54065,54066],{"class":59,"line":186},[57,54067,2673],{"emptyLinePlaceholder":350},[57,54069,54070],{"class":59,"line":197},[57,54071,54072],{"class":140},"禁用按钮：\n",[57,54074,54075],{"class":59,"line":241},[57,54076,54077],{"class":140},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[57,54079,54080,54082,54085,54088,54091,54093],{"class":59,"line":249},[57,54081,1326],{"class":140},[57,54083,54084],{"class":51497},"button",[57,54086,54087],{"class":70}," disabled",[57,54089,54090],{"class":140},">点击\u003C\u002F",[57,54092,54084],{"class":51497},[57,54094,51504],{"class":140},[57,54096,54097,54099,54101,54103,54105],{"class":59,"line":262},[57,54098,1326],{"class":140},[57,54100,54084],{"class":51497},[57,54102,54090],{"class":140},[57,54104,54084],{"class":51497},[57,54106,51504],{"class":140},[57,54108,54109],{"class":59,"line":281},[57,54110,54111],{"class":140},"const bt = document.querySelector('button')\n",[57,54113,54114],{"class":59,"line":287},[57,54115,54116],{"class":140},"bt.disabled = false\n",[377,54118,54119],{"start":67},[380,54120,54121],{},"自定义属性",[14,54123,54124],{},[44,54125],{"alt":46,"src":54126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[49,54128,54130],{"className":53264,"code":54129,"language":53266,"meta":46,"style":46},"\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",[28,54131,54132,54140,54168,54187,54206,54225,54244,54252,54257,54262,54267,54272,54280],{"__ignoreMap":46},[57,54133,54134,54136,54138],{"class":59,"line":60},[57,54135,1326],{"class":140},[57,54137,51997],{"class":51497},[57,54139,51504],{"class":140},[57,54141,54142,54144,54146,54149,54151,54153,54156,54158,54161,54164,54166],{"class":59,"line":67},[57,54143,52341],{"class":140},[57,54145,51808],{"class":51497},[57,54147,54148],{"class":70}," data-id",[57,54150,156],{"class":140},[57,54152,3951],{"class":74},[57,54154,54155],{"class":70}," data-spm",[57,54157,156],{"class":140},[57,54159,54160],{"class":74},"\"我不知道\"",[57,54162,54163],{"class":140},">1\u003C\u002F",[57,54165,51808],{"class":51497},[57,54167,51504],{"class":140},[57,54169,54170,54172,54174,54176,54178,54180,54183,54185],{"class":59,"line":144},[57,54171,52341],{"class":140},[57,54173,51808],{"class":51497},[57,54175,54148],{"class":70},[57,54177,156],{"class":140},[57,54179,3974],{"class":74},[57,54181,54182],{"class":140},">2\u003C\u002F",[57,54184,51808],{"class":51497},[57,54186,51504],{"class":140},[57,54188,54189,54191,54193,54195,54197,54199,54202,54204],{"class":59,"line":150},[57,54190,52341],{"class":140},[57,54192,51808],{"class":51497},[57,54194,54148],{"class":70},[57,54196,156],{"class":140},[57,54198,3987],{"class":74},[57,54200,54201],{"class":140},">3\u003C\u002F",[57,54203,51808],{"class":51497},[57,54205,51504],{"class":140},[57,54207,54208,54210,54212,54214,54216,54218,54221,54223],{"class":59,"line":162},[57,54209,52341],{"class":140},[57,54211,51808],{"class":51497},[57,54213,54148],{"class":70},[57,54215,156],{"class":140},[57,54217,4000],{"class":74},[57,54219,54220],{"class":140},">4\u003C\u002F",[57,54222,51808],{"class":51497},[57,54224,51504],{"class":140},[57,54226,54227,54229,54231,54233,54235,54237,54240,54242],{"class":59,"line":180},[57,54228,52341],{"class":140},[57,54230,51808],{"class":51497},[57,54232,54148],{"class":70},[57,54234,156],{"class":140},[57,54236,4021],{"class":74},[57,54238,54239],{"class":140},">5\u003C\u002F",[57,54241,51808],{"class":51497},[57,54243,51504],{"class":140},[57,54245,54246,54248,54250],{"class":59,"line":186},[57,54247,52341],{"class":140},[57,54249,52010],{"class":51497},[57,54251,51504],{"class":140},[57,54253,54254],{"class":59,"line":197},[57,54255,54256],{"class":140},"    const one = document.querySelector('div')\n",[57,54258,54259],{"class":59,"line":241},[57,54260,54261],{"class":140},"    console.log(one.dataset)\n",[57,54263,54264],{"class":59,"line":249},[57,54265,54266],{"class":140},"    console.log(one.dataset.id)\n",[57,54268,54269],{"class":59,"line":262},[57,54270,54271],{"class":140},"    console.log(one.dataset.spm)\n",[57,54273,54274,54276,54278],{"class":59,"line":281},[57,54275,52614],{"class":140},[57,54277,52010],{"class":51497},[57,54279,51504],{"class":140},[57,54281,54282,54284,54286],{"class":59,"line":287},[57,54283,51982],{"class":140},[57,54285,51997],{"class":51497},[57,54287,51504],{"class":140},[14,54289,54290],{},[44,54291],{"alt":46,"src":54292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,54294,54295],{},"document.querySelector选择的是第一个对象（元素）",[394,54297,54299],{"id":54298},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,54301,54302],{},[44,54303],{"alt":46,"src":54304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,54306,54307],{},[44,54308],{"alt":46,"src":54309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,54311,54312],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52010,54314,54315],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,54317,54318],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52010,54320,54321],{},"\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,54323,54324],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,54326,54327],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,54329,54330],{},"单位为毫秒！！！",[14,54332,54333],{},"可以搭配匿名函数来用！！！",[14,54335,54336],{},"setInterval(function () {",[14,54338,54339],{},"alert('两秒执行一次')",[14,54341,54342],{},"}, 2000)",[14,54344,54345],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,54347,54348],{},"function fn() {",[14,54350,54351],{},"document.write(1)",[14,54353,1362],{},[14,54355,54356],{},"setInterval(fn, 1000)",[14,54358,54359],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,54361,54362],{},"setInterval('fn()', 1000)",[14,54364,54365],{},[44,54366],{"alt":46,"src":54367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22270,54369,54371],{"id":54370},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[49,54373,54375],{"className":50830,"code":54374,"language":50832,"meta":46,"style":46},"\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",[28,54376,54377,54387,54401,54405,54413,54427,54447,54459,54467,54471,54479,54516,54521,54526,54531,54539,54547,54569,54577,54582,54604,54609,54614,54625,54630,54650,54658,54673,54688,54699,54704,54714,54724,54728,54737,54741,54749,54757,54761],{"__ignoreMap":46},[57,54378,54379,54381,54383,54385],{"class":59,"line":60},[57,54380,51494],{"class":140},[57,54382,51498],{"class":51497},[57,54384,51501],{"class":70},[57,54386,51504],{"class":140},[57,54388,54389,54391,54393,54395,54397,54399],{"class":59,"line":67},[57,54390,1326],{"class":140},[57,54392,50832],{"class":51497},[57,54394,51513],{"class":70},[57,54396,156],{"class":140},[57,54398,51518],{"class":74},[57,54400,51504],{"class":140},[57,54402,54403],{"class":59,"line":144},[57,54404,2673],{"emptyLinePlaceholder":350},[57,54406,54407,54409,54411],{"class":59,"line":150},[57,54408,1326],{"class":140},[57,54410,51531],{"class":51497},[57,54412,51504],{"class":140},[57,54414,54415,54417,54419,54421,54423,54425],{"class":59,"line":162},[57,54416,52341],{"class":140},[57,54418,51541],{"class":51497},[57,54420,51544],{"class":70},[57,54422,156],{"class":140},[57,54424,51549],{"class":74},[57,54426,51504],{"class":140},[57,54428,54429,54431,54433,54435,54437,54439,54441,54443,54445],{"class":59,"line":180},[57,54430,52341],{"class":140},[57,54432,51541],{"class":51497},[57,54434,15192],{"class":70},[57,54436,156],{"class":140},[57,54438,51588],{"class":74},[57,54440,51568],{"class":70},[57,54442,156],{"class":140},[57,54444,51595],{"class":74},[57,54446,51504],{"class":140},[57,54448,54449,54451,54453,54455,54457],{"class":59,"line":186},[57,54450,52341],{"class":140},[57,54452,51604],{"class":51497},[57,54454,51607],{"class":140},[57,54456,51604],{"class":51497},[57,54458,51504],{"class":140},[57,54460,54461,54463,54465],{"class":59,"line":197},[57,54462,51982],{"class":140},[57,54464,51531],{"class":51497},[57,54466,51504],{"class":140},[57,54468,54469],{"class":59,"line":241},[57,54470,2673],{"emptyLinePlaceholder":350},[57,54472,54473,54475,54477],{"class":59,"line":249},[57,54474,1326],{"class":140},[57,54476,51997],{"class":51497},[57,54478,51504],{"class":140},[57,54480,54481,54483,54486,54488,54490,54492,54494,54496,54498,54501,54503,54506,54509,54511,54514],{"class":59,"line":262},[57,54482,52341],{"class":140},[57,54484,54485],{"class":51497},"textarea",[57,54487,15192],{"class":70},[57,54489,156],{"class":140},[57,54491,7925],{"class":74},[57,54493,15231],{"class":70},[57,54495,156],{"class":140},[57,54497,7925],{"class":74},[57,54499,54500],{"class":70}," cols",[57,54502,156],{"class":140},[57,54504,54505],{"class":74},"\"30\"",[57,54507,54508],{"class":70}," rows",[57,54510,156],{"class":140},[57,54512,54513],{"class":74},"\"10\"",[57,54515,51504],{"class":140},[57,54517,54518],{"class":59,"line":281},[57,54519,54520],{"class":140},"        用户注册协议\n",[57,54522,54523],{"class":59,"line":287},[57,54524,54525],{"class":140},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[57,54527,54528],{"class":59,"line":298},[57,54529,54530],{"class":140},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[57,54532,54533,54535,54537],{"class":59,"line":311},[57,54534,51973],{"class":140},[57,54536,54485],{"class":51497},[57,54538,51504],{"class":140},[57,54540,54541,54543,54545],{"class":59,"line":322},[57,54542,52341],{"class":140},[57,54544,53913],{"class":51497},[57,54546,51504],{"class":140},[57,54548,54549,54551,54553,54555,54557,54560,54562,54565,54567],{"class":59,"line":1929},[57,54550,52341],{"class":140},[57,54552,54084],{"class":51497},[57,54554,53683],{"class":70},[57,54556,156],{"class":140},[57,54558,54559],{"class":74},"\"btn\"",[57,54561,54087],{"class":70},[57,54563,54564],{"class":140},">我已经阅读用户协议(5)\u003C\u002F",[57,54566,54084],{"class":51497},[57,54568,51504],{"class":140},[57,54570,54571,54573,54575],{"class":59,"line":1950},[57,54572,52341],{"class":140},[57,54574,52010],{"class":51497},[57,54576,51504],{"class":140},[57,54578,54579],{"class":59,"line":1955},[57,54580,54581],{"class":63},"    \u002F\u002F 1. 获取元素\n",[57,54583,54584,54586,54589,54591,54594,54597,54599,54602],{"class":59,"line":1969},[57,54585,11494],{"class":136},[57,54587,54588],{"class":81}," btn",[57,54590,13837],{"class":136},[57,54592,54593],{"class":140}," document.",[57,54595,54596],{"class":70},"querySelector",[57,54598,168],{"class":140},[57,54600,54601],{"class":74},"'.btn'",[57,54603,238],{"class":140},[57,54605,54606],{"class":59,"line":1974},[57,54607,54608],{"class":63},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[57,54610,54611],{"class":59,"line":2001},[57,54612,54613],{"class":63},"    \u002F\u002F 2. 倒计时\n",[57,54615,54616,54618,54620,54622],{"class":59,"line":2006},[57,54617,52416],{"class":136},[57,54619,9711],{"class":140},[57,54621,156],{"class":136},[57,54623,54624],{"class":81}," 5\n",[57,54626,54627],{"class":59,"line":2023},[57,54628,54629],{"class":63},"    \u002F\u002F 2.1 开启定时器\n",[57,54631,54632,54634,54637,54639,54642,54644,54647],{"class":59,"line":2028},[57,54633,52416],{"class":136},[57,54635,54636],{"class":140}," n ",[57,54638,156],{"class":136},[57,54640,54641],{"class":70}," setInterval",[57,54643,168],{"class":140},[57,54645,54646],{"class":136},"function",[57,54648,54649],{"class":140}," () {\n",[57,54651,54652,54655],{"class":59,"line":2033},[57,54653,54654],{"class":140},"      i",[57,54656,54657],{"class":136},"--\n",[57,54659,54660,54663,54665,54668,54670],{"class":59,"line":2038},[57,54661,54662],{"class":140},"      btn.innerHTML ",[57,54664,156],{"class":136},[57,54666,54667],{"class":74}," `我已经阅读用户协议(${",[57,54669,857],{"class":140},[57,54671,54672],{"class":74},"})`\n",[57,54674,54675,54678,54681,54684,54686],{"class":59,"line":2052},[57,54676,54677],{"class":136},"      if",[57,54679,54680],{"class":140}," (i ",[57,54682,54683],{"class":136},"===",[57,54685,4366],{"class":81},[57,54687,12715],{"class":140},[57,54689,54690,54693,54696],{"class":59,"line":2057},[57,54691,54692],{"class":70},"        clearInterval",[57,54694,54695],{"class":140},"(n)  ",[57,54697,54698],{"class":63},"\u002F\u002F 关闭定时器\n",[57,54700,54701],{"class":59,"line":2850},[57,54702,54703],{"class":63},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[57,54705,54706,54709,54711],{"class":59,"line":2864},[57,54707,54708],{"class":140},"        btn.disabled ",[57,54710,156],{"class":136},[57,54712,54713],{"class":81}," false\n",[57,54715,54716,54719,54721],{"class":59,"line":2872},[57,54717,54718],{"class":140},"        btn.innerHTML ",[57,54720,156],{"class":136},[57,54722,54723],{"class":74}," '同意'\n",[57,54725,54726],{"class":59,"line":2877},[57,54727,52595],{"class":140},[57,54729,54730,54733,54735],{"class":59,"line":2883},[57,54731,54732],{"class":140},"    }, ",[57,54734,6683],{"class":81},[57,54736,238],{"class":140},[57,54738,54739],{"class":59,"line":2889},[57,54740,2673],{"emptyLinePlaceholder":350},[57,54742,54743,54745,54747],{"class":59,"line":2894},[57,54744,52614],{"class":140},[57,54746,52010],{"class":51497},[57,54748,51504],{"class":140},[57,54750,54751,54753,54755],{"class":59,"line":8221},[57,54752,51982],{"class":140},[57,54754,51997],{"class":51497},[57,54756,51504],{"class":140},[57,54758,54759],{"class":59,"line":8245},[57,54760,2673],{"emptyLinePlaceholder":350},[57,54762,54763,54765,54767],{"class":59,"line":8250},[57,54764,51982],{"class":140},[57,54766,50832],{"class":51497},[57,54768,51504],{"class":140},[14,54770,54771],{},"不要一直想着用死循环,避免死循环",[14,54773,54774,54777],{},[28,54775,54776],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22270,54779,54781],{"id":54780},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[377,54783,54784],{},[380,54785,54786],{},"法1",[49,54788,54790],{"className":50830,"code":54789,"language":50832,"meta":46,"style":46},"\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",[28,54791,54792,54802,54816,54820,54828,54842,54862,54874,54882,54888,54899,54910,54914,54918,54925,54937,54941,54945,54952,54964,54978,54991,55005,55009,55013,55020,55031,55042,55053,55065,55077,55089,55093,55097,55105,55115,55128,55140,55153,55157,55161,55168,55178,55190,55202,55213,55224,55234,55246,55258,55262,55266,55275,55287,55299,55327,55340,55344,55348,55355,55366,55370,55378,55386,55390,55398,55412,55427,55451,55459,55474,55487,55495,55516,55528,55540,55552,55564,55576,55588,55600,55609,55617,55625,55633,55645,55668,55687,55706,55725,55744,55763,55782,55802,55806,55826,55845,55865,55886,55897,55914,55924,55934,55944,55949,55954,55959,55964,55989,56002,56006,56029,56033,56041,56049,56057,56061],{"__ignoreMap":46},[57,54793,54794,54796,54798,54800],{"class":59,"line":60},[57,54795,51494],{"class":140},[57,54797,51498],{"class":51497},[57,54799,51501],{"class":70},[57,54801,51504],{"class":140},[57,54803,54804,54806,54808,54810,54812,54814],{"class":59,"line":67},[57,54805,1326],{"class":140},[57,54807,50832],{"class":51497},[57,54809,51513],{"class":70},[57,54811,156],{"class":140},[57,54813,51518],{"class":74},[57,54815,51504],{"class":140},[57,54817,54818],{"class":59,"line":144},[57,54819,2673],{"emptyLinePlaceholder":350},[57,54821,54822,54824,54826],{"class":59,"line":150},[57,54823,1326],{"class":140},[57,54825,51531],{"class":51497},[57,54827,51504],{"class":140},[57,54829,54830,54832,54834,54836,54838,54840],{"class":59,"line":162},[57,54831,52341],{"class":140},[57,54833,51541],{"class":51497},[57,54835,51544],{"class":70},[57,54837,156],{"class":140},[57,54839,51549],{"class":74},[57,54841,51504],{"class":140},[57,54843,54844,54846,54848,54850,54852,54854,54856,54858,54860],{"class":59,"line":180},[57,54845,52341],{"class":140},[57,54847,51541],{"class":51497},[57,54849,15192],{"class":70},[57,54851,156],{"class":140},[57,54853,51588],{"class":74},[57,54855,51568],{"class":70},[57,54857,156],{"class":140},[57,54859,51595],{"class":74},[57,54861,51504],{"class":140},[57,54863,54864,54866,54868,54870,54872],{"class":59,"line":186},[57,54865,52341],{"class":140},[57,54867,51604],{"class":51497},[57,54869,51607],{"class":140},[57,54871,51604],{"class":51497},[57,54873,51504],{"class":140},[57,54875,54876,54878,54880],{"class":59,"line":197},[57,54877,52341],{"class":140},[57,54879,342],{"class":51497},[57,54881,51504],{"class":140},[57,54883,54884,54886],{"class":59,"line":241},[57,54885,6676],{"class":51497},[57,54887,15844],{"class":140},[57,54889,54890,54893,54895,54897],{"class":59,"line":249},[57,54891,54892],{"class":81},"      padding",[57,54894,51634],{"class":140},[57,54896,226],{"class":81},[57,54898,1576],{"class":140},[57,54900,54901,54904,54906,54908],{"class":59,"line":262},[57,54902,54903],{"class":81},"      margin",[57,54905,51634],{"class":140},[57,54907,226],{"class":81},[57,54909,1576],{"class":140},[57,54911,54912],{"class":59,"line":281},[57,54913,2460],{"class":140},[57,54915,54916],{"class":59,"line":287},[57,54917,2673],{"emptyLinePlaceholder":350},[57,54919,54920,54923],{"class":59,"line":298},[57,54921,54922],{"class":51497},"    li",[57,54924,15844],{"class":140},[57,54926,54927,54930,54932,54935],{"class":59,"line":311},[57,54928,54929],{"class":81},"      list-style",[57,54931,51634],{"class":140},[57,54933,54934],{"class":81},"none",[57,54936,1576],{"class":140},[57,54938,54939],{"class":59,"line":322},[57,54940,2460],{"class":140},[57,54942,54943],{"class":59,"line":1929},[57,54944,2673],{"emptyLinePlaceholder":350},[57,54946,54947,54950],{"class":59,"line":1950},[57,54948,54949],{"class":70},"    .box",[57,54951,15844],{"class":140},[57,54953,54954,54957,54959,54962],{"class":59,"line":1955},[57,54955,54956],{"class":81},"      position",[57,54958,51634],{"class":140},[57,54960,54961],{"class":81},"relative",[57,54963,1576],{"class":140},[57,54965,54966,54969,54971,54974,54976],{"class":59,"line":1969},[57,54967,54968],{"class":81},"      width",[57,54970,51634],{"class":140},[57,54972,54973],{"class":81},"976",[57,54975,51689],{"class":136},[57,54977,1576],{"class":140},[57,54979,54980,54983,54985,54987,54989],{"class":59,"line":1974},[57,54981,54982],{"class":81},"      height",[57,54984,51634],{"class":140},[57,54986,1821],{"class":81},[57,54988,51689],{"class":136},[57,54990,1576],{"class":140},[57,54992,54993,54995,54997,54999,55001,55003],{"class":59,"line":2001},[57,54994,54903],{"class":81},[57,54996,51634],{"class":140},[57,54998,728],{"class":81},[57,55000,51689],{"class":136},[57,55002,51753],{"class":81},[57,55004,1576],{"class":140},[57,55006,55007],{"class":59,"line":2006},[57,55008,2460],{"class":140},[57,55010,55011],{"class":59,"line":2023},[57,55012,2673],{"emptyLinePlaceholder":350},[57,55014,55015,55018],{"class":59,"line":2028},[57,55016,55017],{"class":70},"    .slider-footer",[57,55019,15844],{"class":140},[57,55021,55022,55024,55026,55029],{"class":59,"line":2033},[57,55023,54956],{"class":81},[57,55025,51634],{"class":140},[57,55027,55028],{"class":81},"absolute",[57,55030,1576],{"class":140},[57,55032,55033,55036,55038,55040],{"class":59,"line":2038},[57,55034,55035],{"class":81},"      left",[57,55037,51634],{"class":140},[57,55039,226],{"class":81},[57,55041,1576],{"class":140},[57,55043,55044,55047,55049,55051],{"class":59,"line":2052},[57,55045,55046],{"class":81},"      bottom",[57,55048,51634],{"class":140},[57,55050,226],{"class":81},[57,55052,1576],{"class":140},[57,55054,55055,55057,55059,55061,55063],{"class":59,"line":2057},[57,55056,54968],{"class":81},[57,55058,51634],{"class":140},[57,55060,728],{"class":81},[57,55062,745],{"class":136},[57,55064,1576],{"class":140},[57,55066,55067,55069,55071,55073,55075],{"class":59,"line":2850},[57,55068,54982],{"class":81},[57,55070,51634],{"class":140},[57,55072,991],{"class":81},[57,55074,745],{"class":136},[57,55076,1576],{"class":140},[57,55078,55079,55082,55084,55087],{"class":59,"line":2864},[57,55080,55081],{"class":81},"      background-color",[57,55083,51634],{"class":140},[57,55085,55086],{"class":81},"skyblue",[57,55088,1576],{"class":140},[57,55090,55091],{"class":59,"line":2872},[57,55092,2460],{"class":140},[57,55094,55095],{"class":59,"line":2877},[57,55096,2673],{"emptyLinePlaceholder":350},[57,55098,55099,55101,55103],{"class":59,"line":2883},[57,55100,55017],{"class":70},[57,55102,7098],{"class":51497},[57,55104,15844],{"class":140},[57,55106,55107,55109,55111,55113],{"class":59,"line":2889},[57,55108,54956],{"class":81},[57,55110,51634],{"class":140},[57,55112,55028],{"class":81},[57,55114,1576],{"class":140},[57,55116,55117,55120,55122,55124,55126],{"class":59,"line":2894},[57,55118,55119],{"class":81},"      font-size",[57,55121,51634],{"class":140},[57,55123,1317],{"class":81},[57,55125,51689],{"class":136},[57,55127,1576],{"class":140},[57,55129,55130,55132,55134,55136,55138],{"class":59,"line":8221},[57,55131,55035],{"class":81},[57,55133,51634],{"class":140},[57,55135,1116],{"class":81},[57,55137,51689],{"class":136},[57,55139,1576],{"class":140},[57,55141,55142,55145,55147,55149,55151],{"class":59,"line":8245},[57,55143,55144],{"class":81},"      top",[57,55146,51634],{"class":140},[57,55148,736],{"class":81},[57,55150,51689],{"class":136},[57,55152,1576],{"class":140},[57,55154,55155],{"class":59,"line":8250},[57,55156,2460],{"class":140},[57,55158,55159],{"class":59,"line":8256},[57,55160,2673],{"emptyLinePlaceholder":350},[57,55162,55163,55166],{"class":59,"line":8283},[57,55164,55165],{"class":51497},"    ul",[57,55167,15844],{"class":140},[57,55169,55170,55172,55174,55176],{"class":59,"line":8288},[57,55171,54956],{"class":81},[57,55173,51634],{"class":140},[57,55175,55028],{"class":81},[57,55177,1576],{"class":140},[57,55179,55180,55182,55184,55186,55188],{"class":59,"line":8294},[57,55181,55144],{"class":81},[57,55183,51634],{"class":140},[57,55185,1197],{"class":81},[57,55187,51689],{"class":136},[57,55189,1576],{"class":140},[57,55191,55192,55194,55196,55198,55200],{"class":59,"line":8306},[57,55193,55035],{"class":81},[57,55195,51634],{"class":140},[57,55197,1116],{"class":81},[57,55199,51689],{"class":136},[57,55201,1576],{"class":140},[57,55203,55204,55207,55209,55211],{"class":59,"line":8318},[57,55205,55206],{"class":81},"      display",[57,55208,51634],{"class":140},[57,55210,51674],{"class":81},[57,55212,1576],{"class":140},[57,55214,55215,55218,55220,55222],{"class":59,"line":8330},[57,55216,55217],{"class":81},"      justify-content",[57,55219,51634],{"class":140},[57,55221,51865],{"class":81},[57,55223,1576],{"class":140},[57,55225,55226,55228,55230,55232],{"class":59,"line":9989},[57,55227,54956],{"class":81},[57,55229,51634],{"class":140},[57,55231,55028],{"class":81},[57,55233,1576],{"class":140},[57,55235,55236,55238,55240,55242,55244],{"class":59,"line":10014},[57,55237,54968],{"class":81},[57,55239,51634],{"class":140},[57,55241,4265],{"class":81},[57,55243,51689],{"class":136},[57,55245,1576],{"class":140},[57,55247,55248,55250,55252,55254,55256],{"class":59,"line":10037},[57,55249,54982],{"class":81},[57,55251,51634],{"class":140},[57,55253,1116],{"class":81},[57,55255,51689],{"class":136},[57,55257,1576],{"class":140},[57,55259,55260],{"class":59,"line":10061},[57,55261,2460],{"class":140},[57,55263,55264],{"class":59,"line":10066},[57,55265,2673],{"emptyLinePlaceholder":350},[57,55267,55268,55270,55273],{"class":59,"line":10071},[57,55269,55165],{"class":51497},[57,55271,55272],{"class":51497}," li",[57,55274,15844],{"class":140},[57,55276,55277,55279,55281,55283,55285],{"class":59,"line":10076},[57,55278,54968],{"class":81},[57,55280,51634],{"class":140},[57,55282,1116],{"class":81},[57,55284,51689],{"class":136},[57,55286,1576],{"class":140},[57,55288,55289,55291,55293,55295,55297],{"class":59,"line":10085},[57,55290,54982],{"class":81},[57,55292,51634],{"class":140},[57,55294,1116],{"class":81},[57,55296,51689],{"class":136},[57,55298,1576],{"class":140},[57,55300,55301,55303,55305,55308,55310,55312,55314,55316,55318,55320,55322,55325],{"class":59,"line":10090},[57,55302,55081],{"class":81},[57,55304,51634],{"class":140},[57,55306,55307],{"class":81},"rgba",[57,55309,168],{"class":140},[57,55311,226],{"class":81},[57,55313,12708],{"class":140},[57,55315,226],{"class":81},[57,55317,12708],{"class":140},[57,55319,226],{"class":81},[57,55321,12708],{"class":140},[57,55323,55324],{"class":81},".4",[57,55326,2992],{"class":140},[57,55328,55329,55332,55334,55336,55338],{"class":59,"line":10096},[57,55330,55331],{"class":81},"      border-radius",[57,55333,51634],{"class":140},[57,55335,862],{"class":81},[57,55337,51689],{"class":136},[57,55339,1576],{"class":140},[57,55341,55342],{"class":59,"line":10117},[57,55343,2460],{"class":140},[57,55345,55346],{"class":59,"line":10123},[57,55347,2673],{"emptyLinePlaceholder":350},[57,55349,55350,55353],{"class":59,"line":10137},[57,55351,55352],{"class":70},"    .activate",[57,55354,15844],{"class":140},[57,55356,55357,55359,55361,55364],{"class":59,"line":10143},[57,55358,55081],{"class":81},[57,55360,51634],{"class":140},[57,55362,55363],{"class":81},"#f7f7f7",[57,55365,1576],{"class":140},[57,55367,55368],{"class":59,"line":10170},[57,55369,2460],{"class":140},[57,55371,55372,55374,55376],{"class":59,"line":10179},[57,55373,52614],{"class":140},[57,55375,342],{"class":51497},[57,55377,51504],{"class":140},[57,55379,55380,55382,55384],{"class":59,"line":10185},[57,55381,51982],{"class":140},[57,55383,51531],{"class":51497},[57,55385,51504],{"class":140},[57,55387,55388],{"class":59,"line":10193},[57,55389,2673],{"emptyLinePlaceholder":350},[57,55391,55392,55394,55396],{"class":59,"line":10198},[57,55393,1326],{"class":140},[57,55395,51997],{"class":51497},[57,55397,51504],{"class":140},[57,55399,55400,55402,55404,55406,55408,55410],{"class":59,"line":16876},[57,55401,52341],{"class":140},[57,55403,51808],{"class":51497},[57,55405,53683],{"class":70},[57,55407,156],{"class":140},[57,55409,53688],{"class":74},[57,55411,51504],{"class":140},[57,55413,55414,55416,55418,55420,55422,55425],{"class":59,"line":16882},[57,55415,51538],{"class":140},[57,55417,51808],{"class":51497},[57,55419,53683],{"class":70},[57,55421,156],{"class":140},[57,55423,55424],{"class":74},"\"slider-wrapper\"",[57,55426,51504],{"class":140},[57,55428,55429,55432,55434,55437,55439,55442,55445,55447,55449],{"class":59,"line":16905},[57,55430,55431],{"class":140},"      \u003C",[57,55433,44],{"class":51497},[57,55435,55436],{"class":70}," src",[57,55438,156],{"class":140},[57,55440,55441],{"class":74},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[57,55443,55444],{"class":70}," alt",[57,55446,156],{"class":140},[57,55448,7925],{"class":74},[57,55450,51504],{"class":140},[57,55452,55453,55455,55457],{"class":59,"line":16911},[57,55454,51973],{"class":140},[57,55456,51808],{"class":51497},[57,55458,51504],{"class":140},[57,55460,55461,55463,55465,55467,55469,55472],{"class":59,"line":16934},[57,55462,51538],{"class":140},[57,55464,51808],{"class":51497},[57,55466,53683],{"class":70},[57,55468,156],{"class":140},[57,55470,55471],{"class":74},"\"slider-footer\"",[57,55473,51504],{"class":140},[57,55475,55476,55478,55480,55483,55485],{"class":59,"line":16948},[57,55477,55431],{"class":140},[57,55479,14],{"class":51497},[57,55481,55482],{"class":140},">对人类来说会不会太超前了?\u003C\u002F",[57,55484,14],{"class":51497},[57,55486,51504],{"class":140},[57,55488,55489,55491,55493],{"class":59,"line":16968},[57,55490,55431],{"class":140},[57,55492,1422],{"class":51497},[57,55494,51504],{"class":140},[57,55496,55497,55500,55502,55504,55506,55509,55512,55514],{"class":59,"line":16974},[57,55498,55499],{"class":140},"        \u003C",[57,55501,380],{"class":51497},[57,55503,53683],{"class":70},[57,55505,156],{"class":140},[57,55507,55508],{"class":74},"\"activate\"",[57,55510,55511],{"class":140},">\u003C\u002F",[57,55513,380],{"class":51497},[57,55515,51504],{"class":140},[57,55517,55518,55520,55522,55524,55526],{"class":59,"line":16985},[57,55519,55499],{"class":140},[57,55521,380],{"class":51497},[57,55523,55511],{"class":140},[57,55525,380],{"class":51497},[57,55527,51504],{"class":140},[57,55529,55530,55532,55534,55536,55538],{"class":59,"line":17008},[57,55531,55499],{"class":140},[57,55533,380],{"class":51497},[57,55535,55511],{"class":140},[57,55537,380],{"class":51497},[57,55539,51504],{"class":140},[57,55541,55542,55544,55546,55548,55550],{"class":59,"line":17030},[57,55543,55499],{"class":140},[57,55545,380],{"class":51497},[57,55547,55511],{"class":140},[57,55549,380],{"class":51497},[57,55551,51504],{"class":140},[57,55553,55554,55556,55558,55560,55562],{"class":59,"line":17035},[57,55555,55499],{"class":140},[57,55557,380],{"class":51497},[57,55559,55511],{"class":140},[57,55561,380],{"class":51497},[57,55563,51504],{"class":140},[57,55565,55566,55568,55570,55572,55574],{"class":59,"line":17041},[57,55567,55499],{"class":140},[57,55569,380],{"class":51497},[57,55571,55511],{"class":140},[57,55573,380],{"class":51497},[57,55575,51504],{"class":140},[57,55577,55578,55580,55582,55584,55586],{"class":59,"line":17055},[57,55579,55499],{"class":140},[57,55581,380],{"class":51497},[57,55583,55511],{"class":140},[57,55585,380],{"class":51497},[57,55587,51504],{"class":140},[57,55589,55590,55592,55594,55596,55598],{"class":59,"line":17068},[57,55591,55499],{"class":140},[57,55593,380],{"class":51497},[57,55595,55511],{"class":140},[57,55597,380],{"class":51497},[57,55599,51504],{"class":140},[57,55601,55602,55605,55607],{"class":59,"line":17073},[57,55603,55604],{"class":140},"      \u003C\u002F",[57,55606,1422],{"class":51497},[57,55608,51504],{"class":140},[57,55610,55611,55613,55615],{"class":59,"line":17087},[57,55612,51973],{"class":140},[57,55614,51808],{"class":51497},[57,55616,51504],{"class":140},[57,55618,55619,55621,55623],{"class":59,"line":17092},[57,55620,52614],{"class":140},[57,55622,51808],{"class":51497},[57,55624,51504],{"class":140},[57,55626,55627,55629,55631],{"class":59,"line":17098},[57,55628,52341],{"class":140},[57,55630,52010],{"class":51497},[57,55632,51504],{"class":140},[57,55634,55635,55637,55640,55642],{"class":59,"line":17103},[57,55636,11494],{"class":136},[57,55638,55639],{"class":81}," arrImage",[57,55641,13837],{"class":136},[57,55643,55644],{"class":140}," [\n",[57,55646,55647,55650,55653,55656,55659,55662,55665],{"class":59,"line":17117},[57,55648,55649],{"class":140},"      { url: ",[57,55651,55652],{"class":74},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[57,55654,55655],{"class":140},", title: ",[57,55657,55658],{"class":74},"'对人类来说会不会太超前了?'",[57,55660,55661],{"class":140},", color: ",[57,55663,55664],{"class":74},"'rgba(100,67,68)'",[57,55666,55667],{"class":140}," },\n",[57,55669,55670,55672,55675,55677,55680,55682,55685],{"class":59,"line":17122},[57,55671,55649],{"class":140},[57,55673,55674],{"class":74},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[57,55676,55655],{"class":140},[57,55678,55679],{"class":74},"'开启剑与雪的黑暗传说!'",[57,55681,55661],{"class":140},[57,55683,55684],{"class":74},"'rgba(43,35,26)'",[57,55686,55667],{"class":140},[57,55688,55689,55691,55694,55696,55699,55701,55704],{"class":59,"line":17127},[57,55690,55649],{"class":140},[57,55692,55693],{"class":74},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[57,55695,55655],{"class":140},[57,55697,55698],{"class":74},"'真正的jo厨出现了!'",[57,55700,55661],{"class":140},[57,55702,55703],{"class":74},"'rgba(36,31,33)'",[57,55705,55667],{"class":140},[57,55707,55708,55710,55713,55715,55718,55720,55723],{"class":59,"line":17141},[57,55709,55649],{"class":140},[57,55711,55712],{"class":74},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[57,55714,55655],{"class":140},[57,55716,55717],{"class":74},"'李玉刚:让世界通过b站看到东方大国文化'",[57,55719,55661],{"class":140},[57,55721,55722],{"class":74},"'rgba(139,98,66)'",[57,55724,55667],{"class":140},[57,55726,55727,55729,55732,55734,55737,55739,55742],{"class":59,"line":17153},[57,55728,55649],{"class":140},[57,55730,55731],{"class":74},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[57,55733,55655],{"class":140},[57,55735,55736],{"class":74},"'快来分享你的寒假日常吧'",[57,55738,55661],{"class":140},[57,55740,55741],{"class":74},"'rgba(67,90,92)'",[57,55743,55667],{"class":140},[57,55745,55746,55748,55751,55753,55756,55758,55761],{"class":59,"line":17158},[57,55747,55649],{"class":140},[57,55749,55750],{"class":74},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[57,55752,55655],{"class":140},[57,55754,55755],{"class":74},"'哔哩哔哩小年YEAR'",[57,55757,55661],{"class":140},[57,55759,55760],{"class":74},"'rgba(166,131,143)'",[57,55762,55667],{"class":140},[57,55764,55765,55767,55770,55772,55775,55777,55780],{"class":59,"line":17171},[57,55766,55649],{"class":140},[57,55768,55769],{"class":74},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[57,55771,55655],{"class":140},[57,55773,55774],{"class":74},"'一站式解决你的电脑配置问题'",[57,55776,55661],{"class":140},[57,55778,55779],{"class":74},"'rgba(53,29,25)'",[57,55781,55667],{"class":140},[57,55783,55784,55786,55789,55791,55794,55796,55799],{"class":59,"line":17176},[57,55785,55649],{"class":140},[57,55787,55788],{"class":74},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[57,55790,55655],{"class":140},[57,55792,55793],{"class":74},"'谁不想和小猫咪贴贴呢?'",[57,55795,55661],{"class":140},[57,55797,55798],{"class":74},"'rgba(99,72,114)'",[57,55800,55801],{"class":140}," }\n",[57,55803,55804],{"class":59,"line":17181},[57,55805,53306],{"class":140},[57,55807,55808,55810,55813,55815,55817,55819,55821,55824],{"class":59,"line":17186},[57,55809,11494],{"class":136},[57,55811,55812],{"class":81}," img",[57,55814,13837],{"class":136},[57,55816,54593],{"class":140},[57,55818,54596],{"class":70},[57,55820,168],{"class":140},[57,55822,55823],{"class":74},"'.slider-wrapper img'",[57,55825,238],{"class":140},[57,55827,55828,55830,55832,55834,55836,55838,55840,55843],{"class":59,"line":17199},[57,55829,11494],{"class":136},[57,55831,7098],{"class":81},[57,55833,13837],{"class":136},[57,55835,54593],{"class":140},[57,55837,54596],{"class":70},[57,55839,168],{"class":140},[57,55841,55842],{"class":74},"'.slider-footer p'",[57,55844,238],{"class":140},[57,55846,55847,55849,55852,55854,55856,55858,55860,55863],{"class":59,"line":17204},[57,55848,11494],{"class":136},[57,55850,55851],{"class":81}," color",[57,55853,13837],{"class":136},[57,55855,54593],{"class":140},[57,55857,54596],{"class":70},[57,55859,168],{"class":140},[57,55861,55862],{"class":74},"'.slider-footer'",[57,55864,238],{"class":140},[57,55866,55867,55869,55872,55874,55876,55879,55881,55884],{"class":59,"line":32830},[57,55868,11494],{"class":136},[57,55870,55871],{"class":81}," lis",[57,55873,13837],{"class":136},[57,55875,54593],{"class":140},[57,55877,55878],{"class":70},"querySelectorAll",[57,55880,168],{"class":140},[57,55882,55883],{"class":74},"'.slider-footer ul li'",[57,55885,238],{"class":140},[57,55887,55888,55890,55892,55894],{"class":59,"line":32836},[57,55889,52416],{"class":136},[57,55891,9711],{"class":140},[57,55893,156],{"class":136},[57,55895,55896],{"class":81}," 1\n",[57,55898,55899,55901,55904,55906,55908,55910,55912],{"class":59,"line":32842},[57,55900,52416],{"class":136},[57,55902,55903],{"class":140}," timer ",[57,55905,156],{"class":136},[57,55907,54641],{"class":70},[57,55909,168],{"class":140},[57,55911,54646],{"class":136},[57,55913,54649],{"class":140},[57,55915,55916,55919,55921],{"class":59,"line":32848},[57,55917,55918],{"class":140},"      img.src ",[57,55920,156],{"class":136},[57,55922,55923],{"class":140}," arrImage[i].url\n",[57,55925,55926,55929,55931],{"class":59,"line":32854},[57,55927,55928],{"class":140},"      p.innerHTML ",[57,55930,156],{"class":136},[57,55932,55933],{"class":140}," arrImage[i].title\n",[57,55935,55936,55939,55941],{"class":59,"line":32865},[57,55937,55938],{"class":140},"      color.style.backgroundColor ",[57,55940,156],{"class":136},[57,55942,55943],{"class":140}," arrImage[i].color\n",[57,55945,55946],{"class":59,"line":32871},[57,55947,55948],{"class":63},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[57,55950,55951],{"class":59,"line":32891},[57,55952,55953],{"class":63},"      \u002F\u002F li.classList.add('activate')\n",[57,55955,55956],{"class":59,"line":32897},[57,55957,55958],{"class":63},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[57,55960,55961],{"class":59,"line":32908},[57,55962,55963],{"class":63},"      \u002F\u002F lis[i].classList.remove('activate')\n",[57,55965,55966,55969,55971,55973,55976,55979,55982,55984,55987],{"class":59,"line":32914},[57,55967,55968],{"class":140},"      document.",[57,55970,54596],{"class":70},[57,55972,168],{"class":140},[57,55974,55975],{"class":74},"'.activate'",[57,55977,55978],{"class":140},")?.classList.",[57,55980,55981],{"class":70},"toggle",[57,55983,168],{"class":140},[57,55985,55986],{"class":74},"'activate'",[57,55988,238],{"class":140},[57,55990,55991,55994,55996,55998,56000],{"class":59,"line":32920},[57,55992,55993],{"class":140},"      lis[i].classList.",[57,55995,5607],{"class":70},[57,55997,168],{"class":140},[57,55999,55986],{"class":74},[57,56001,238],{"class":140},[57,56003,56004],{"class":59,"line":32926},[57,56005,2673],{"emptyLinePlaceholder":350},[57,56007,56008,56011,56013,56015,56017,56019,56021,56023,56026],{"class":59,"line":32932},[57,56009,56010],{"class":140},"      i ",[57,56012,156],{"class":136},[57,56014,54680],{"class":140},[57,56016,897],{"class":136},[57,56018,25387],{"class":81},[57,56020,229],{"class":140},[57,56022,745],{"class":136},[57,56024,56025],{"class":140}," arrImage.",[57,56027,56028],{"class":81},"length\n",[57,56030,56031],{"class":59,"line":32938},[57,56032,2673],{"emptyLinePlaceholder":350},[57,56034,56035,56037,56039],{"class":59,"line":32944},[57,56036,54732],{"class":140},[57,56038,6683],{"class":81},[57,56040,238],{"class":140},[57,56042,56043,56045,56047],{"class":59,"line":32950},[57,56044,52614],{"class":140},[57,56046,52010],{"class":51497},[57,56048,51504],{"class":140},[57,56050,56051,56053,56055],{"class":59,"line":32970},[57,56052,51982],{"class":140},[57,56054,51997],{"class":51497},[57,56056,51504],{"class":140},[57,56058,56059],{"class":59,"line":32976},[57,56060,2673],{"emptyLinePlaceholder":350},[57,56062,56063,56065,56067],{"class":59,"line":32992},[57,56064,51982],{"class":140},[57,56066,50832],{"class":51497},[57,56068,51504],{"class":140},[14,56070,56071],{},[44,56072],{"alt":46,"src":56073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,56075,56076],{},"?.就是短路保护,确保输出正常进行",[14,56078,56079],{},"不要忘记取余%,有时候可以用",[14,56081,56082],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[377,56084,56085],{"start":67},[380,56086,56087],{},"法2",[49,56089,56091],{"className":50830,"code":56090,"language":50832,"meta":46,"style":46},"\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",[28,56092,56093,56103,56117,56121,56129,56143,56163,56175,56183,56189,56199,56209,56213,56217,56223,56233,56237,56241,56247,56257,56269,56281,56295,56299,56303,56309,56319,56329,56339,56351,56363,56373,56377,56381,56389,56399,56411,56423,56435,56439,56443,56449,56459,56471,56483,56493,56503,56513,56525,56537,56541,56545,56553,56565,56577,56603,56615,56619,56623,56629,56639,56643,56651,56659,56663,56671,56685,56699,56719,56727,56741,56753,56761,56779,56791,56803,56815,56827,56839,56851,56863,56871,56879,56887,56895,56906,56922,56938,56954,56970,56986,57002,57018,57034,57038,57043,57061,57079,57089,57094,57099,57110,57116,57131,57140,57144,57149,57158,57163,57172,57177,57182,57187,57210,57240,57244,57252,57256,57264,57272,57276],{"__ignoreMap":46},[57,56094,56095,56097,56099,56101],{"class":59,"line":60},[57,56096,51494],{"class":140},[57,56098,51498],{"class":51497},[57,56100,51501],{"class":70},[57,56102,51504],{"class":140},[57,56104,56105,56107,56109,56111,56113,56115],{"class":59,"line":67},[57,56106,1326],{"class":140},[57,56108,50832],{"class":51497},[57,56110,51513],{"class":70},[57,56112,156],{"class":140},[57,56114,51518],{"class":74},[57,56116,51504],{"class":140},[57,56118,56119],{"class":59,"line":144},[57,56120,2673],{"emptyLinePlaceholder":350},[57,56122,56123,56125,56127],{"class":59,"line":150},[57,56124,1326],{"class":140},[57,56126,51531],{"class":51497},[57,56128,51504],{"class":140},[57,56130,56131,56133,56135,56137,56139,56141],{"class":59,"line":162},[57,56132,52341],{"class":140},[57,56134,51541],{"class":51497},[57,56136,51544],{"class":70},[57,56138,156],{"class":140},[57,56140,51549],{"class":74},[57,56142,51504],{"class":140},[57,56144,56145,56147,56149,56151,56153,56155,56157,56159,56161],{"class":59,"line":180},[57,56146,52341],{"class":140},[57,56148,51541],{"class":51497},[57,56150,15192],{"class":70},[57,56152,156],{"class":140},[57,56154,51588],{"class":74},[57,56156,51568],{"class":70},[57,56158,156],{"class":140},[57,56160,51595],{"class":74},[57,56162,51504],{"class":140},[57,56164,56165,56167,56169,56171,56173],{"class":59,"line":186},[57,56166,52341],{"class":140},[57,56168,51604],{"class":51497},[57,56170,51607],{"class":140},[57,56172,51604],{"class":51497},[57,56174,51504],{"class":140},[57,56176,56177,56179,56181],{"class":59,"line":197},[57,56178,52341],{"class":140},[57,56180,342],{"class":51497},[57,56182,51504],{"class":140},[57,56184,56185,56187],{"class":59,"line":241},[57,56186,6676],{"class":51497},[57,56188,15844],{"class":140},[57,56190,56191,56193,56195,56197],{"class":59,"line":249},[57,56192,54892],{"class":81},[57,56194,51634],{"class":140},[57,56196,226],{"class":81},[57,56198,1576],{"class":140},[57,56200,56201,56203,56205,56207],{"class":59,"line":262},[57,56202,54903],{"class":81},[57,56204,51634],{"class":140},[57,56206,226],{"class":81},[57,56208,1576],{"class":140},[57,56210,56211],{"class":59,"line":281},[57,56212,2460],{"class":140},[57,56214,56215],{"class":59,"line":287},[57,56216,2673],{"emptyLinePlaceholder":350},[57,56218,56219,56221],{"class":59,"line":298},[57,56220,54922],{"class":51497},[57,56222,15844],{"class":140},[57,56224,56225,56227,56229,56231],{"class":59,"line":311},[57,56226,54929],{"class":81},[57,56228,51634],{"class":140},[57,56230,54934],{"class":81},[57,56232,1576],{"class":140},[57,56234,56235],{"class":59,"line":322},[57,56236,2460],{"class":140},[57,56238,56239],{"class":59,"line":1929},[57,56240,2673],{"emptyLinePlaceholder":350},[57,56242,56243,56245],{"class":59,"line":1950},[57,56244,54949],{"class":70},[57,56246,15844],{"class":140},[57,56248,56249,56251,56253,56255],{"class":59,"line":1955},[57,56250,54956],{"class":81},[57,56252,51634],{"class":140},[57,56254,54961],{"class":81},[57,56256,1576],{"class":140},[57,56258,56259,56261,56263,56265,56267],{"class":59,"line":1969},[57,56260,54968],{"class":81},[57,56262,51634],{"class":140},[57,56264,54973],{"class":81},[57,56266,51689],{"class":136},[57,56268,1576],{"class":140},[57,56270,56271,56273,56275,56277,56279],{"class":59,"line":1974},[57,56272,54982],{"class":81},[57,56274,51634],{"class":140},[57,56276,1821],{"class":81},[57,56278,51689],{"class":136},[57,56280,1576],{"class":140},[57,56282,56283,56285,56287,56289,56291,56293],{"class":59,"line":2001},[57,56284,54903],{"class":81},[57,56286,51634],{"class":140},[57,56288,728],{"class":81},[57,56290,51689],{"class":136},[57,56292,51753],{"class":81},[57,56294,1576],{"class":140},[57,56296,56297],{"class":59,"line":2006},[57,56298,2460],{"class":140},[57,56300,56301],{"class":59,"line":2023},[57,56302,2673],{"emptyLinePlaceholder":350},[57,56304,56305,56307],{"class":59,"line":2028},[57,56306,55017],{"class":70},[57,56308,15844],{"class":140},[57,56310,56311,56313,56315,56317],{"class":59,"line":2033},[57,56312,54956],{"class":81},[57,56314,51634],{"class":140},[57,56316,55028],{"class":81},[57,56318,1576],{"class":140},[57,56320,56321,56323,56325,56327],{"class":59,"line":2038},[57,56322,55035],{"class":81},[57,56324,51634],{"class":140},[57,56326,226],{"class":81},[57,56328,1576],{"class":140},[57,56330,56331,56333,56335,56337],{"class":59,"line":2052},[57,56332,55046],{"class":81},[57,56334,51634],{"class":140},[57,56336,226],{"class":81},[57,56338,1576],{"class":140},[57,56340,56341,56343,56345,56347,56349],{"class":59,"line":2057},[57,56342,54968],{"class":81},[57,56344,51634],{"class":140},[57,56346,728],{"class":81},[57,56348,745],{"class":136},[57,56350,1576],{"class":140},[57,56352,56353,56355,56357,56359,56361],{"class":59,"line":2850},[57,56354,54982],{"class":81},[57,56356,51634],{"class":140},[57,56358,991],{"class":81},[57,56360,745],{"class":136},[57,56362,1576],{"class":140},[57,56364,56365,56367,56369,56371],{"class":59,"line":2864},[57,56366,55081],{"class":81},[57,56368,51634],{"class":140},[57,56370,55086],{"class":81},[57,56372,1576],{"class":140},[57,56374,56375],{"class":59,"line":2872},[57,56376,2460],{"class":140},[57,56378,56379],{"class":59,"line":2877},[57,56380,2673],{"emptyLinePlaceholder":350},[57,56382,56383,56385,56387],{"class":59,"line":2883},[57,56384,55017],{"class":70},[57,56386,7098],{"class":51497},[57,56388,15844],{"class":140},[57,56390,56391,56393,56395,56397],{"class":59,"line":2889},[57,56392,54956],{"class":81},[57,56394,51634],{"class":140},[57,56396,55028],{"class":81},[57,56398,1576],{"class":140},[57,56400,56401,56403,56405,56407,56409],{"class":59,"line":2894},[57,56402,55119],{"class":81},[57,56404,51634],{"class":140},[57,56406,1317],{"class":81},[57,56408,51689],{"class":136},[57,56410,1576],{"class":140},[57,56412,56413,56415,56417,56419,56421],{"class":59,"line":8221},[57,56414,55035],{"class":81},[57,56416,51634],{"class":140},[57,56418,1116],{"class":81},[57,56420,51689],{"class":136},[57,56422,1576],{"class":140},[57,56424,56425,56427,56429,56431,56433],{"class":59,"line":8245},[57,56426,55144],{"class":81},[57,56428,51634],{"class":140},[57,56430,736],{"class":81},[57,56432,51689],{"class":136},[57,56434,1576],{"class":140},[57,56436,56437],{"class":59,"line":8250},[57,56438,2460],{"class":140},[57,56440,56441],{"class":59,"line":8256},[57,56442,2673],{"emptyLinePlaceholder":350},[57,56444,56445,56447],{"class":59,"line":8283},[57,56446,55165],{"class":51497},[57,56448,15844],{"class":140},[57,56450,56451,56453,56455,56457],{"class":59,"line":8288},[57,56452,54956],{"class":81},[57,56454,51634],{"class":140},[57,56456,55028],{"class":81},[57,56458,1576],{"class":140},[57,56460,56461,56463,56465,56467,56469],{"class":59,"line":8294},[57,56462,55144],{"class":81},[57,56464,51634],{"class":140},[57,56466,1197],{"class":81},[57,56468,51689],{"class":136},[57,56470,1576],{"class":140},[57,56472,56473,56475,56477,56479,56481],{"class":59,"line":8306},[57,56474,55035],{"class":81},[57,56476,51634],{"class":140},[57,56478,1116],{"class":81},[57,56480,51689],{"class":136},[57,56482,1576],{"class":140},[57,56484,56485,56487,56489,56491],{"class":59,"line":8318},[57,56486,55206],{"class":81},[57,56488,51634],{"class":140},[57,56490,51674],{"class":81},[57,56492,1576],{"class":140},[57,56494,56495,56497,56499,56501],{"class":59,"line":8330},[57,56496,55217],{"class":81},[57,56498,51634],{"class":140},[57,56500,51865],{"class":81},[57,56502,1576],{"class":140},[57,56504,56505,56507,56509,56511],{"class":59,"line":9989},[57,56506,54956],{"class":81},[57,56508,51634],{"class":140},[57,56510,55028],{"class":81},[57,56512,1576],{"class":140},[57,56514,56515,56517,56519,56521,56523],{"class":59,"line":10014},[57,56516,54968],{"class":81},[57,56518,51634],{"class":140},[57,56520,4265],{"class":81},[57,56522,51689],{"class":136},[57,56524,1576],{"class":140},[57,56526,56527,56529,56531,56533,56535],{"class":59,"line":10037},[57,56528,54982],{"class":81},[57,56530,51634],{"class":140},[57,56532,1116],{"class":81},[57,56534,51689],{"class":136},[57,56536,1576],{"class":140},[57,56538,56539],{"class":59,"line":10061},[57,56540,2460],{"class":140},[57,56542,56543],{"class":59,"line":10066},[57,56544,2673],{"emptyLinePlaceholder":350},[57,56546,56547,56549,56551],{"class":59,"line":10071},[57,56548,55165],{"class":51497},[57,56550,55272],{"class":51497},[57,56552,15844],{"class":140},[57,56554,56555,56557,56559,56561,56563],{"class":59,"line":10076},[57,56556,54968],{"class":81},[57,56558,51634],{"class":140},[57,56560,1116],{"class":81},[57,56562,51689],{"class":136},[57,56564,1576],{"class":140},[57,56566,56567,56569,56571,56573,56575],{"class":59,"line":10085},[57,56568,54982],{"class":81},[57,56570,51634],{"class":140},[57,56572,1116],{"class":81},[57,56574,51689],{"class":136},[57,56576,1576],{"class":140},[57,56578,56579,56581,56583,56585,56587,56589,56591,56593,56595,56597,56599,56601],{"class":59,"line":10090},[57,56580,55081],{"class":81},[57,56582,51634],{"class":140},[57,56584,55307],{"class":81},[57,56586,168],{"class":140},[57,56588,226],{"class":81},[57,56590,12708],{"class":140},[57,56592,226],{"class":81},[57,56594,12708],{"class":140},[57,56596,226],{"class":81},[57,56598,12708],{"class":140},[57,56600,55324],{"class":81},[57,56602,2992],{"class":140},[57,56604,56605,56607,56609,56611,56613],{"class":59,"line":10096},[57,56606,55331],{"class":81},[57,56608,51634],{"class":140},[57,56610,862],{"class":81},[57,56612,51689],{"class":136},[57,56614,1576],{"class":140},[57,56616,56617],{"class":59,"line":10117},[57,56618,2460],{"class":140},[57,56620,56621],{"class":59,"line":10123},[57,56622,2673],{"emptyLinePlaceholder":350},[57,56624,56625,56627],{"class":59,"line":10137},[57,56626,55352],{"class":70},[57,56628,15844],{"class":140},[57,56630,56631,56633,56635,56637],{"class":59,"line":10143},[57,56632,55081],{"class":81},[57,56634,51634],{"class":140},[57,56636,55363],{"class":81},[57,56638,1576],{"class":140},[57,56640,56641],{"class":59,"line":10170},[57,56642,2460],{"class":140},[57,56644,56645,56647,56649],{"class":59,"line":10179},[57,56646,52614],{"class":140},[57,56648,342],{"class":51497},[57,56650,51504],{"class":140},[57,56652,56653,56655,56657],{"class":59,"line":10185},[57,56654,51982],{"class":140},[57,56656,51531],{"class":51497},[57,56658,51504],{"class":140},[57,56660,56661],{"class":59,"line":10193},[57,56662,2673],{"emptyLinePlaceholder":350},[57,56664,56665,56667,56669],{"class":59,"line":10198},[57,56666,1326],{"class":140},[57,56668,51997],{"class":51497},[57,56670,51504],{"class":140},[57,56672,56673,56675,56677,56679,56681,56683],{"class":59,"line":16876},[57,56674,52341],{"class":140},[57,56676,51808],{"class":51497},[57,56678,53683],{"class":70},[57,56680,156],{"class":140},[57,56682,53688],{"class":74},[57,56684,51504],{"class":140},[57,56686,56687,56689,56691,56693,56695,56697],{"class":59,"line":16882},[57,56688,51538],{"class":140},[57,56690,51808],{"class":51497},[57,56692,53683],{"class":70},[57,56694,156],{"class":140},[57,56696,55424],{"class":74},[57,56698,51504],{"class":140},[57,56700,56701,56703,56705,56707,56709,56711,56713,56715,56717],{"class":59,"line":16905},[57,56702,55431],{"class":140},[57,56704,44],{"class":51497},[57,56706,55436],{"class":70},[57,56708,156],{"class":140},[57,56710,55441],{"class":74},[57,56712,55444],{"class":70},[57,56714,156],{"class":140},[57,56716,7925],{"class":74},[57,56718,51504],{"class":140},[57,56720,56721,56723,56725],{"class":59,"line":16911},[57,56722,51973],{"class":140},[57,56724,51808],{"class":51497},[57,56726,51504],{"class":140},[57,56728,56729,56731,56733,56735,56737,56739],{"class":59,"line":16934},[57,56730,51538],{"class":140},[57,56732,51808],{"class":51497},[57,56734,53683],{"class":70},[57,56736,156],{"class":140},[57,56738,55471],{"class":74},[57,56740,51504],{"class":140},[57,56742,56743,56745,56747,56749,56751],{"class":59,"line":16948},[57,56744,55431],{"class":140},[57,56746,14],{"class":51497},[57,56748,55482],{"class":140},[57,56750,14],{"class":51497},[57,56752,51504],{"class":140},[57,56754,56755,56757,56759],{"class":59,"line":16968},[57,56756,55431],{"class":140},[57,56758,1422],{"class":51497},[57,56760,51504],{"class":140},[57,56762,56763,56765,56767,56769,56771,56773,56775,56777],{"class":59,"line":16974},[57,56764,55499],{"class":140},[57,56766,380],{"class":51497},[57,56768,53683],{"class":70},[57,56770,156],{"class":140},[57,56772,55508],{"class":74},[57,56774,55511],{"class":140},[57,56776,380],{"class":51497},[57,56778,51504],{"class":140},[57,56780,56781,56783,56785,56787,56789],{"class":59,"line":16985},[57,56782,55499],{"class":140},[57,56784,380],{"class":51497},[57,56786,55511],{"class":140},[57,56788,380],{"class":51497},[57,56790,51504],{"class":140},[57,56792,56793,56795,56797,56799,56801],{"class":59,"line":17008},[57,56794,55499],{"class":140},[57,56796,380],{"class":51497},[57,56798,55511],{"class":140},[57,56800,380],{"class":51497},[57,56802,51504],{"class":140},[57,56804,56805,56807,56809,56811,56813],{"class":59,"line":17030},[57,56806,55499],{"class":140},[57,56808,380],{"class":51497},[57,56810,55511],{"class":140},[57,56812,380],{"class":51497},[57,56814,51504],{"class":140},[57,56816,56817,56819,56821,56823,56825],{"class":59,"line":17035},[57,56818,55499],{"class":140},[57,56820,380],{"class":51497},[57,56822,55511],{"class":140},[57,56824,380],{"class":51497},[57,56826,51504],{"class":140},[57,56828,56829,56831,56833,56835,56837],{"class":59,"line":17041},[57,56830,55499],{"class":140},[57,56832,380],{"class":51497},[57,56834,55511],{"class":140},[57,56836,380],{"class":51497},[57,56838,51504],{"class":140},[57,56840,56841,56843,56845,56847,56849],{"class":59,"line":17055},[57,56842,55499],{"class":140},[57,56844,380],{"class":51497},[57,56846,55511],{"class":140},[57,56848,380],{"class":51497},[57,56850,51504],{"class":140},[57,56852,56853,56855,56857,56859,56861],{"class":59,"line":17068},[57,56854,55499],{"class":140},[57,56856,380],{"class":51497},[57,56858,55511],{"class":140},[57,56860,380],{"class":51497},[57,56862,51504],{"class":140},[57,56864,56865,56867,56869],{"class":59,"line":17073},[57,56866,55604],{"class":140},[57,56868,1422],{"class":51497},[57,56870,51504],{"class":140},[57,56872,56873,56875,56877],{"class":59,"line":17087},[57,56874,51973],{"class":140},[57,56876,51808],{"class":51497},[57,56878,51504],{"class":140},[57,56880,56881,56883,56885],{"class":59,"line":17092},[57,56882,52614],{"class":140},[57,56884,51808],{"class":51497},[57,56886,51504],{"class":140},[57,56888,56889,56891,56893],{"class":59,"line":17098},[57,56890,52341],{"class":140},[57,56892,52010],{"class":51497},[57,56894,51504],{"class":140},[57,56896,56897,56899,56902,56904],{"class":59,"line":17103},[57,56898,11494],{"class":136},[57,56900,56901],{"class":81}," sliderData",[57,56903,13837],{"class":136},[57,56905,55644],{"class":140},[57,56907,56908,56910,56912,56914,56916,56918,56920],{"class":59,"line":17117},[57,56909,55649],{"class":140},[57,56911,55652],{"class":74},[57,56913,55655],{"class":140},[57,56915,55658],{"class":74},[57,56917,55661],{"class":140},[57,56919,55664],{"class":74},[57,56921,55667],{"class":140},[57,56923,56924,56926,56928,56930,56932,56934,56936],{"class":59,"line":17122},[57,56925,55649],{"class":140},[57,56927,55674],{"class":74},[57,56929,55655],{"class":140},[57,56931,55679],{"class":74},[57,56933,55661],{"class":140},[57,56935,55684],{"class":74},[57,56937,55667],{"class":140},[57,56939,56940,56942,56944,56946,56948,56950,56952],{"class":59,"line":17127},[57,56941,55649],{"class":140},[57,56943,55693],{"class":74},[57,56945,55655],{"class":140},[57,56947,55698],{"class":74},[57,56949,55661],{"class":140},[57,56951,55703],{"class":74},[57,56953,55667],{"class":140},[57,56955,56956,56958,56960,56962,56964,56966,56968],{"class":59,"line":17141},[57,56957,55649],{"class":140},[57,56959,55712],{"class":74},[57,56961,55655],{"class":140},[57,56963,55717],{"class":74},[57,56965,55661],{"class":140},[57,56967,55722],{"class":74},[57,56969,55667],{"class":140},[57,56971,56972,56974,56976,56978,56980,56982,56984],{"class":59,"line":17153},[57,56973,55649],{"class":140},[57,56975,55731],{"class":74},[57,56977,55655],{"class":140},[57,56979,55736],{"class":74},[57,56981,55661],{"class":140},[57,56983,55741],{"class":74},[57,56985,55667],{"class":140},[57,56987,56988,56990,56992,56994,56996,56998,57000],{"class":59,"line":17158},[57,56989,55649],{"class":140},[57,56991,55750],{"class":74},[57,56993,55655],{"class":140},[57,56995,55755],{"class":74},[57,56997,55661],{"class":140},[57,56999,55760],{"class":74},[57,57001,55667],{"class":140},[57,57003,57004,57006,57008,57010,57012,57014,57016],{"class":59,"line":17171},[57,57005,55649],{"class":140},[57,57007,55769],{"class":74},[57,57009,55655],{"class":140},[57,57011,55774],{"class":74},[57,57013,55661],{"class":140},[57,57015,55779],{"class":74},[57,57017,55667],{"class":140},[57,57019,57020,57022,57024,57026,57028,57030,57032],{"class":59,"line":17176},[57,57021,55649],{"class":140},[57,57023,55788],{"class":74},[57,57025,55655],{"class":140},[57,57027,55793],{"class":74},[57,57029,55661],{"class":140},[57,57031,55798],{"class":74},[57,57033,55801],{"class":140},[57,57035,57036],{"class":59,"line":17181},[57,57037,53306],{"class":140},[57,57039,57040],{"class":59,"line":17186},[57,57041,57042],{"class":63},"    \u002F\u002F 1.获取元素\n",[57,57044,57045,57047,57049,57051,57053,57055,57057,57059],{"class":59,"line":17199},[57,57046,11494],{"class":136},[57,57048,55812],{"class":81},[57,57050,13837],{"class":136},[57,57052,54593],{"class":140},[57,57054,54596],{"class":70},[57,57056,168],{"class":140},[57,57058,55823],{"class":74},[57,57060,238],{"class":140},[57,57062,57063,57065,57067,57069,57071,57073,57075,57077],{"class":59,"line":17204},[57,57064,11494],{"class":136},[57,57066,7098],{"class":81},[57,57068,13837],{"class":136},[57,57070,54593],{"class":140},[57,57072,54596],{"class":70},[57,57074,168],{"class":140},[57,57076,55842],{"class":74},[57,57078,238],{"class":140},[57,57080,57081,57083,57085,57087],{"class":59,"line":32830},[57,57082,52416],{"class":136},[57,57084,9711],{"class":140},[57,57086,156],{"class":136},[57,57088,47530],{"class":81},[57,57090,57091],{"class":59,"line":32836},[57,57092,57093],{"class":63},"    \u002F\u002F 2.开启定时器\n",[57,57095,57096],{"class":59,"line":32842},[57,57097,57098],{"class":63},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[57,57100,57101,57104,57106,57108],{"class":59,"line":32848},[57,57102,57103],{"class":70},"    setInterval",[57,57105,168],{"class":140},[57,57107,54646],{"class":136},[57,57109,54649],{"class":140},[57,57111,57112,57114],{"class":59,"line":32854},[57,57113,54654],{"class":140},[57,57115,2975],{"class":136},[57,57117,57118,57120,57122,57124,57127,57129],{"class":59,"line":32865},[57,57119,54677],{"class":136},[57,57121,54680],{"class":140},[57,57123,1984],{"class":136},[57,57125,57126],{"class":140}," sliderData.",[57,57128,52165],{"class":81},[57,57130,12715],{"class":140},[57,57132,57133,57136,57138],{"class":59,"line":32871},[57,57134,57135],{"class":140},"        i ",[57,57137,156],{"class":136},[57,57139,47530],{"class":81},[57,57141,57142],{"class":59,"line":32891},[57,57143,52595],{"class":140},[57,57145,57146],{"class":59,"line":32897},[57,57147,57148],{"class":63},"      \u002F\u002F 更换图片路径\n",[57,57150,57151,57153,57155],{"class":59,"line":32908},[57,57152,55918],{"class":140},[57,57154,156],{"class":136},[57,57156,57157],{"class":140}," sliderData[i].url\n",[57,57159,57160],{"class":59,"line":32914},[57,57161,57162],{"class":63},"      \u002F\u002F 把文字写到p里面\n",[57,57164,57165,57167,57169],{"class":59,"line":32920},[57,57166,55928],{"class":140},[57,57168,156],{"class":136},[57,57170,57171],{"class":140}," sliderData[i].title\n",[57,57173,57174],{"class":59,"line":32926},[57,57175,57176],{"class":63},"      \u002F\u002F 小圆点\n",[57,57178,57179],{"class":59,"line":32932},[57,57180,57181],{"class":63},"      \u002F\u002F 先删除以前的active\n",[57,57183,57184],{"class":59,"line":32938},[57,57185,57186],{"class":63},"      \u002F\u002F 只让当前li添加active\n",[57,57188,57189,57191,57193,57195,57198,57201,57204,57206,57208],{"class":59,"line":32944},[57,57190,55968],{"class":140},[57,57192,54596],{"class":70},[57,57194,168],{"class":140},[57,57196,57197],{"class":74},"'.slider-footer .activate'",[57,57199,57200],{"class":140},").classList.",[57,57202,57203],{"class":70},"remove",[57,57205,168],{"class":140},[57,57207,55986],{"class":74},[57,57209,238],{"class":140},[57,57211,57212,57214,57216,57218,57221,57223,57225,57227,57230,57232,57234,57236,57238],{"class":59,"line":32950},[57,57213,55968],{"class":140},[57,57215,54596],{"class":70},[57,57217,168],{"class":140},[57,57219,57220],{"class":74},"`.slider-footer ul li:nth-child(${",[57,57222,857],{"class":140},[57,57224,45763],{"class":136},[57,57226,25387],{"class":81},[57,57228,57229],{"class":74},"})`",[57,57231,57200],{"class":140},[57,57233,5607],{"class":70},[57,57235,168],{"class":140},[57,57237,55986],{"class":74},[57,57239,238],{"class":140},[57,57241,57242],{"class":59,"line":32970},[57,57243,2673],{"emptyLinePlaceholder":350},[57,57245,57246,57248,57250],{"class":59,"line":32976},[57,57247,54732],{"class":140},[57,57249,6683],{"class":81},[57,57251,238],{"class":140},[57,57253,57254],{"class":59,"line":32992},[57,57255,2673],{"emptyLinePlaceholder":350},[57,57257,57258,57260,57262],{"class":59,"line":32998},[57,57259,52614],{"class":140},[57,57261,52010],{"class":51497},[57,57263,51504],{"class":140},[57,57265,57266,57268,57270],{"class":59,"line":33012},[57,57267,51982],{"class":140},[57,57269,51997],{"class":51497},[57,57271,51504],{"class":140},[57,57273,57274],{"class":59,"line":33018},[57,57275,2673],{"emptyLinePlaceholder":350},[57,57277,57278,57280,57282],{"class":59,"line":33033},[57,57279,51982],{"class":140},[57,57281,50832],{"class":51497},[57,57283,51504],{"class":140},[394,57285,57287],{"id":57286},"_317-重要知识点","3.1.7 重要知识点",[14,57289,57290,57291],{},"浏览器在渲染文本时， ",[33,57292,57293],{},"没有空格或换行符就没有“断行点”",[14,57295,57296],{},[44,57297],{"alt":46,"src":57298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,57300,57301],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,57303,57304],{},[44,57305],{"alt":46,"src":57306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,57308,57309],{},[44,57310],{"alt":46,"src":57311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[365,57313,57315],{"id":57314},"_32-dom事件基础","3.2 DOM事件基础",[394,57317,57319],{"id":57318},"_321-事件监听","3.2.1 事件监听",[14,57321,57322],{},[44,57323],{"alt":46,"src":57324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,57326,57327],{},"事件监听有响应的发生",[14,57329,57330],{},[44,57331],{"alt":46,"src":57332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,57334,57335],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,57337,57338],{},"对于有名函数,要执行的函数名后边不要加()",[394,57340,57342],{"id":57341},"_322-随机点名案例","3.2.2 随机点名案例",[49,57344,57346],{"className":50830,"code":57345,"language":50832,"meta":46,"style":46},"\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",[28,57347,57348,57358,57372,57376,57384,57398,57418,57430,57438,57444,57454,57464,57468,57472,57479,57490,57494,57498,57504,57516,57530,57540,57552,57565,57569,57573,57580,57584,57597,57609,57621,57625,57629,57633,57640,57650,57654,57658,57667,57679,57691,57706,57710,57718,57726,57730,57738,57751,57765,57778,57798,57806,57821,57841,57861,57869,57873,57881,57886,57922,57942,57947,57966,57971,57982,57987,57998,58003,58022,58037,58042,58068,58078,58087,58092,58108,58113,58118,58123,58138,58142,58146,58151,58170,58187,58195,58200,58215,58219,58223,58231,58239,58243],{"__ignoreMap":46},[57,57349,57350,57352,57354,57356],{"class":59,"line":60},[57,57351,51494],{"class":140},[57,57353,51498],{"class":51497},[57,57355,51501],{"class":70},[57,57357,51504],{"class":140},[57,57359,57360,57362,57364,57366,57368,57370],{"class":59,"line":67},[57,57361,1326],{"class":140},[57,57363,50832],{"class":51497},[57,57365,51513],{"class":70},[57,57367,156],{"class":140},[57,57369,51518],{"class":74},[57,57371,51504],{"class":140},[57,57373,57374],{"class":59,"line":144},[57,57375,2673],{"emptyLinePlaceholder":350},[57,57377,57378,57380,57382],{"class":59,"line":150},[57,57379,1326],{"class":140},[57,57381,51531],{"class":51497},[57,57383,51504],{"class":140},[57,57385,57386,57388,57390,57392,57394,57396],{"class":59,"line":162},[57,57387,52341],{"class":140},[57,57389,51541],{"class":51497},[57,57391,51544],{"class":70},[57,57393,156],{"class":140},[57,57395,51549],{"class":74},[57,57397,51504],{"class":140},[57,57399,57400,57402,57404,57406,57408,57410,57412,57414,57416],{"class":59,"line":180},[57,57401,52341],{"class":140},[57,57403,51541],{"class":51497},[57,57405,15192],{"class":70},[57,57407,156],{"class":140},[57,57409,51588],{"class":74},[57,57411,51568],{"class":70},[57,57413,156],{"class":140},[57,57415,51595],{"class":74},[57,57417,51504],{"class":140},[57,57419,57420,57422,57424,57426,57428],{"class":59,"line":186},[57,57421,52341],{"class":140},[57,57423,51604],{"class":51497},[57,57425,51607],{"class":140},[57,57427,51604],{"class":51497},[57,57429,51504],{"class":140},[57,57431,57432,57434,57436],{"class":59,"line":197},[57,57433,52341],{"class":140},[57,57435,342],{"class":51497},[57,57437,51504],{"class":140},[57,57439,57440,57442],{"class":59,"line":241},[57,57441,6676],{"class":51497},[57,57443,15844],{"class":140},[57,57445,57446,57448,57450,57452],{"class":59,"line":249},[57,57447,54903],{"class":81},[57,57449,51634],{"class":140},[57,57451,226],{"class":81},[57,57453,1576],{"class":140},[57,57455,57456,57458,57460,57462],{"class":59,"line":262},[57,57457,54892],{"class":81},[57,57459,51634],{"class":140},[57,57461,226],{"class":81},[57,57463,1576],{"class":140},[57,57465,57466],{"class":59,"line":281},[57,57467,2460],{"class":140},[57,57469,57470],{"class":59,"line":287},[57,57471,2673],{"emptyLinePlaceholder":350},[57,57473,57474,57477],{"class":59,"line":298},[57,57475,57476],{"class":51497},"    h2",[57,57478,15844],{"class":140},[57,57480,57481,57484,57486,57488],{"class":59,"line":311},[57,57482,57483],{"class":81},"      text-align",[57,57485,51634],{"class":140},[57,57487,51789],{"class":81},[57,57489,1576],{"class":140},[57,57491,57492],{"class":59,"line":322},[57,57493,2460],{"class":140},[57,57495,57496],{"class":59,"line":1929},[57,57497,2673],{"emptyLinePlaceholder":350},[57,57499,57500,57502],{"class":59,"line":1950},[57,57501,54949],{"class":70},[57,57503,15844],{"class":140},[57,57505,57506,57508,57510,57512,57514],{"class":59,"line":1955},[57,57507,54968],{"class":81},[57,57509,51634],{"class":140},[57,57511,1821],{"class":81},[57,57513,51689],{"class":136},[57,57515,1576],{"class":140},[57,57517,57518,57520,57522,57524,57526,57528],{"class":59,"line":1969},[57,57519,54903],{"class":81},[57,57521,51634],{"class":140},[57,57523,1072],{"class":81},[57,57525,51689],{"class":136},[57,57527,51753],{"class":81},[57,57529,1576],{"class":140},[57,57531,57532,57534,57536,57538],{"class":59,"line":1974},[57,57533,55206],{"class":81},[57,57535,51634],{"class":140},[57,57537,51674],{"class":81},[57,57539,1576],{"class":140},[57,57541,57542,57544,57546,57548,57550],{"class":59,"line":2001},[57,57543,55119],{"class":81},[57,57545,51634],{"class":140},[57,57547,1241],{"class":81},[57,57549,51689],{"class":136},[57,57551,1576],{"class":140},[57,57553,57554,57557,57559,57561,57563],{"class":59,"line":2006},[57,57555,57556],{"class":81},"      line-height",[57,57558,51634],{"class":140},[57,57560,817],{"class":81},[57,57562,51689],{"class":136},[57,57564,1576],{"class":140},[57,57566,57567],{"class":59,"line":2023},[57,57568,2460],{"class":140},[57,57570,57571],{"class":59,"line":2028},[57,57572,2673],{"emptyLinePlaceholder":350},[57,57574,57575,57578],{"class":59,"line":2033},[57,57576,57577],{"class":70},"    .qs",[57,57579,15844],{"class":140},[57,57581,57582],{"class":59,"line":2038},[57,57583,2673],{"emptyLinePlaceholder":350},[57,57585,57586,57588,57590,57593,57595],{"class":59,"line":2052},[57,57587,54968],{"class":81},[57,57589,51634],{"class":140},[57,57591,57592],{"class":81},"450",[57,57594,51689],{"class":136},[57,57596,1576],{"class":140},[57,57598,57599,57601,57603,57605,57607],{"class":59,"line":2057},[57,57600,54982],{"class":81},[57,57602,51634],{"class":140},[57,57604,817],{"class":81},[57,57606,51689],{"class":136},[57,57608,1576],{"class":140},[57,57610,57611,57614,57616,57619],{"class":59,"line":2850},[57,57612,57613],{"class":81},"      color",[57,57615,51634],{"class":140},[57,57617,57618],{"class":81},"red",[57,57620,1576],{"class":140},[57,57622,57623],{"class":59,"line":2864},[57,57624,2673],{"emptyLinePlaceholder":350},[57,57626,57627],{"class":59,"line":2872},[57,57628,2460],{"class":140},[57,57630,57631],{"class":59,"line":2877},[57,57632,2673],{"emptyLinePlaceholder":350},[57,57634,57635,57638],{"class":59,"line":2883},[57,57636,57637],{"class":70},"    .btns",[57,57639,15844],{"class":140},[57,57641,57642,57644,57646,57648],{"class":59,"line":2889},[57,57643,57483],{"class":81},[57,57645,51634],{"class":140},[57,57647,51789],{"class":81},[57,57649,1576],{"class":140},[57,57651,57652],{"class":59,"line":2894},[57,57653,2460],{"class":140},[57,57655,57656],{"class":59,"line":8221},[57,57657,2673],{"emptyLinePlaceholder":350},[57,57659,57660,57662,57665],{"class":59,"line":8245},[57,57661,57637],{"class":70},[57,57663,57664],{"class":51497}," button",[57,57666,15844],{"class":140},[57,57668,57669,57671,57673,57675,57677],{"class":59,"line":8250},[57,57670,54968],{"class":81},[57,57672,51634],{"class":140},[57,57674,1233],{"class":81},[57,57676,51689],{"class":136},[57,57678,1576],{"class":140},[57,57680,57681,57683,57685,57687,57689],{"class":59,"line":8256},[57,57682,54982],{"class":81},[57,57684,51634],{"class":140},[57,57686,690],{"class":81},[57,57688,51689],{"class":136},[57,57690,1576],{"class":140},[57,57692,57693,57695,57697,57699,57702,57704],{"class":59,"line":8283},[57,57694,54903],{"class":81},[57,57696,51634],{"class":140},[57,57698,226],{"class":81},[57,57700,57701],{"class":81}," 50",[57,57703,51689],{"class":136},[57,57705,1576],{"class":140},[57,57707,57708],{"class":59,"line":8288},[57,57709,2460],{"class":140},[57,57711,57712,57714,57716],{"class":59,"line":8294},[57,57713,52614],{"class":140},[57,57715,342],{"class":51497},[57,57717,51504],{"class":140},[57,57719,57720,57722,57724],{"class":59,"line":8306},[57,57721,51982],{"class":140},[57,57723,51531],{"class":51497},[57,57725,51504],{"class":140},[57,57727,57728],{"class":59,"line":8318},[57,57729,2673],{"emptyLinePlaceholder":350},[57,57731,57732,57734,57736],{"class":59,"line":8330},[57,57733,1326],{"class":140},[57,57735,51997],{"class":51497},[57,57737,51504],{"class":140},[57,57739,57740,57742,57744,57747,57749],{"class":59,"line":9989},[57,57741,52341],{"class":140},[57,57743,365],{"class":51497},[57,57745,57746],{"class":140},">随机点名\u003C\u002F",[57,57748,365],{"class":51497},[57,57750,51504],{"class":140},[57,57752,57753,57755,57757,57759,57761,57763],{"class":59,"line":10014},[57,57754,52341],{"class":140},[57,57756,51808],{"class":51497},[57,57758,53683],{"class":70},[57,57760,156],{"class":140},[57,57762,53688],{"class":74},[57,57764,51504],{"class":140},[57,57766,57767,57769,57771,57774,57776],{"class":59,"line":10037},[57,57768,51538],{"class":140},[57,57770,57],{"class":51497},[57,57772,57773],{"class":140},">名字是：\u003C\u002F",[57,57775,57],{"class":51497},[57,57777,51504],{"class":140},[57,57779,57780,57782,57784,57786,57788,57791,57794,57796],{"class":59,"line":10061},[57,57781,51538],{"class":140},[57,57783,51808],{"class":51497},[57,57785,53683],{"class":70},[57,57787,156],{"class":140},[57,57789,57790],{"class":74},"\"qs\"",[57,57792,57793],{"class":140},">这里显示姓名\u003C\u002F",[57,57795,51808],{"class":51497},[57,57797,51504],{"class":140},[57,57799,57800,57802,57804],{"class":59,"line":10066},[57,57801,52614],{"class":140},[57,57803,51808],{"class":51497},[57,57805,51504],{"class":140},[57,57807,57808,57810,57812,57814,57816,57819],{"class":59,"line":10071},[57,57809,52341],{"class":140},[57,57811,51808],{"class":51497},[57,57813,53683],{"class":70},[57,57815,156],{"class":140},[57,57817,57818],{"class":74},"\"btns\"",[57,57820,51504],{"class":140},[57,57822,57823,57825,57827,57829,57831,57834,57837,57839],{"class":59,"line":10076},[57,57824,51538],{"class":140},[57,57826,54084],{"class":51497},[57,57828,53683],{"class":70},[57,57830,156],{"class":140},[57,57832,57833],{"class":74},"\"start\"",[57,57835,57836],{"class":140},">开始\u003C\u002F",[57,57838,54084],{"class":51497},[57,57840,51504],{"class":140},[57,57842,57843,57845,57847,57849,57851,57854,57857,57859],{"class":59,"line":10085},[57,57844,51538],{"class":140},[57,57846,54084],{"class":51497},[57,57848,53683],{"class":70},[57,57850,156],{"class":140},[57,57852,57853],{"class":74},"\"end\"",[57,57855,57856],{"class":140},">结束\u003C\u002F",[57,57858,54084],{"class":51497},[57,57860,51504],{"class":140},[57,57862,57863,57865,57867],{"class":59,"line":10090},[57,57864,52614],{"class":140},[57,57866,51808],{"class":51497},[57,57868,51504],{"class":140},[57,57870,57871],{"class":59,"line":10096},[57,57872,2673],{"emptyLinePlaceholder":350},[57,57874,57875,57877,57879],{"class":59,"line":10117},[57,57876,52341],{"class":140},[57,57878,52010],{"class":51497},[57,57880,51504],{"class":140},[57,57882,57883],{"class":59,"line":10123},[57,57884,57885],{"class":63},"    \u002F\u002F 数据数组\n",[57,57887,57888,57890,57893,57895,57897,57900,57902,57905,57907,57910,57912,57915,57917,57920],{"class":59,"line":10137},[57,57889,11494],{"class":136},[57,57891,57892],{"class":81}," arr",[57,57894,13837],{"class":136},[57,57896,52423],{"class":140},[57,57898,57899],{"class":74},"'马超'",[57,57901,12708],{"class":140},[57,57903,57904],{"class":74},"'黄忠'",[57,57906,12708],{"class":140},[57,57908,57909],{"class":74},"'赵云'",[57,57911,12708],{"class":140},[57,57913,57914],{"class":74},"'关羽'",[57,57916,12708],{"class":140},[57,57918,57919],{"class":74},"'张飞'",[57,57921,33443],{"class":140},[57,57923,57924,57926,57929,57931,57933,57935,57937,57940],{"class":59,"line":10143},[57,57925,11494],{"class":136},[57,57927,57928],{"class":81}," qs",[57,57930,13837],{"class":136},[57,57932,54593],{"class":140},[57,57934,54596],{"class":70},[57,57936,168],{"class":140},[57,57938,57939],{"class":74},"'.qs'",[57,57941,238],{"class":140},[57,57943,57944],{"class":59,"line":10170},[57,57945,57946],{"class":63},"    \u002F\u002F 1.业务1.开始按钮模块\n",[57,57948,57949,57951,57953,57955,57957,57959,57961,57964],{"class":59,"line":10179},[57,57950,11494],{"class":136},[57,57952,4457],{"class":81},[57,57954,13837],{"class":136},[57,57956,54593],{"class":140},[57,57958,54596],{"class":70},[57,57960,168],{"class":140},[57,57962,57963],{"class":74},"'.start'",[57,57965,238],{"class":140},[57,57967,57968],{"class":59,"line":10185},[57,57969,57970],{"class":63},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[57,57972,57973,57975,57978,57980],{"class":59,"line":10193},[57,57974,52416],{"class":136},[57,57976,57977],{"class":140}," timerId ",[57,57979,156],{"class":136},[57,57981,47530],{"class":81},[57,57983,57984],{"class":59,"line":10198},[57,57985,57986],{"class":63},"    \u002F\u002F 随机号要全局变量\n",[57,57988,57989,57991,57994,57996],{"class":59,"line":16876},[57,57990,52416],{"class":136},[57,57992,57993],{"class":140}," random ",[57,57995,156],{"class":136},[57,57997,47530],{"class":81},[57,57999,58000],{"class":59,"line":16882},[57,58001,58002],{"class":63},"    \u002F\u002F 1.1 添加点击事件\n",[57,58004,58005,58008,58011,58013,58016,58018,58020],{"class":59,"line":16905},[57,58006,58007],{"class":140},"    start.",[57,58009,58010],{"class":70},"addEventListener",[57,58012,168],{"class":140},[57,58014,58015],{"class":74},"'click'",[57,58017,12708],{"class":140},[57,58019,54646],{"class":136},[57,58021,54649],{"class":140},[57,58023,58024,58027,58029,58031,58033,58035],{"class":59,"line":16911},[57,58025,58026],{"class":140},"      timerId ",[57,58028,156],{"class":136},[57,58030,54641],{"class":70},[57,58032,168],{"class":140},[57,58034,54646],{"class":136},[57,58036,54649],{"class":140},[57,58038,58039],{"class":59,"line":16934},[57,58040,58041],{"class":63},"        \u002F\u002F 随机数\n",[57,58043,58044,58047,58049,58052,58055,58058,58060,58062,58064,58066],{"class":59,"line":16948},[57,58045,58046],{"class":140},"        random ",[57,58048,156],{"class":136},[57,58050,58051],{"class":70}," parseInt",[57,58053,58054],{"class":140},"(Math.",[57,58056,58057],{"class":70},"random",[57,58059,13323],{"class":140},[57,58061,871],{"class":136},[57,58063,52162],{"class":140},[57,58065,52165],{"class":81},[57,58067,238],{"class":140},[57,58069,58070,58073,58075],{"class":59,"line":16968},[57,58071,58072],{"class":140},"        qs.innerHTML ",[57,58074,156],{"class":136},[57,58076,58077],{"class":140}," arr[random]\n",[57,58079,58080,58083,58085],{"class":59,"line":16974},[57,58081,58082],{"class":140},"      }, ",[57,58084,690],{"class":81},[57,58086,238],{"class":140},[57,58088,58089],{"class":59,"line":16985},[57,58090,58091],{"class":63},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[57,58093,58094,58096,58099,58101,58104,58106],{"class":59,"line":17008},[57,58095,54677],{"class":136},[57,58097,58098],{"class":140}," (arr.",[57,58100,52165],{"class":81},[57,58102,58103],{"class":136}," ===",[57,58105,25387],{"class":81},[57,58107,12715],{"class":140},[57,58109,58110],{"class":59,"line":17030},[57,58111,58112],{"class":63},"        \u002F\u002F start.disabled = true\n",[57,58114,58115],{"class":59,"line":17035},[57,58116,58117],{"class":63},"        \u002F\u002F end.disabled = true\n",[57,58119,58120],{"class":59,"line":17041},[57,58121,58122],{"class":63},"        \u002F\u002F 可以合起来写\n",[57,58124,58125,58128,58130,58133,58135],{"class":59,"line":17055},[57,58126,58127],{"class":140},"        start.disabled ",[57,58129,156],{"class":136},[57,58131,58132],{"class":140}," end.disabled ",[57,58134,156],{"class":136},[57,58136,58137],{"class":81}," true\n",[57,58139,58140],{"class":59,"line":17068},[57,58141,52595],{"class":140},[57,58143,58144],{"class":59,"line":17073},[57,58145,33658],{"class":140},[57,58147,58148],{"class":59,"line":17087},[57,58149,58150],{"class":63},"    \u002F\u002F 1.2 关闭按钮模块\n",[57,58152,58153,58155,58157,58159,58161,58163,58165,58168],{"class":59,"line":17092},[57,58154,11494],{"class":136},[57,58156,4473],{"class":81},[57,58158,13837],{"class":136},[57,58160,54593],{"class":140},[57,58162,54596],{"class":70},[57,58164,168],{"class":140},[57,58166,58167],{"class":74},"'.end'",[57,58169,238],{"class":140},[57,58171,58172,58175,58177,58179,58181,58183,58185],{"class":59,"line":17098},[57,58173,58174],{"class":140},"    end.",[57,58176,58010],{"class":70},[57,58178,168],{"class":140},[57,58180,58015],{"class":74},[57,58182,12708],{"class":140},[57,58184,54646],{"class":136},[57,58186,54649],{"class":140},[57,58188,58189,58192],{"class":59,"line":17103},[57,58190,58191],{"class":70},"      clearInterval",[57,58193,58194],{"class":140},"(timerId)\n",[57,58196,58197],{"class":59,"line":17117},[57,58198,58199],{"class":63},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[57,58201,58202,58205,58208,58211,58213],{"class":59,"line":17122},[57,58203,58204],{"class":140},"      arr.",[57,58206,58207],{"class":70},"splice",[57,58209,58210],{"class":140},"(random, ",[57,58212,635],{"class":81},[57,58214,238],{"class":140},[57,58216,58217],{"class":59,"line":17127},[57,58218,33658],{"class":140},[57,58220,58221],{"class":59,"line":17141},[57,58222,2673],{"emptyLinePlaceholder":350},[57,58224,58225,58227,58229],{"class":59,"line":17153},[57,58226,52614],{"class":140},[57,58228,52010],{"class":51497},[57,58230,51504],{"class":140},[57,58232,58233,58235,58237],{"class":59,"line":17158},[57,58234,51982],{"class":140},[57,58236,51997],{"class":51497},[57,58238,51504],{"class":140},[57,58240,58241],{"class":59,"line":17171},[57,58242,2673],{"emptyLinePlaceholder":350},[57,58244,58245,58247,58249],{"class":59,"line":17176},[57,58246,51982],{"class":140},[57,58248,50832],{"class":51497},[57,58250,51504],{"class":140},[14,58252,58253],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[394,58255,58257],{"id":58256},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[49,58259,58261],{"className":50830,"code":58260,"language":50832,"meta":46,"style":46},"\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",[28,58262,58263,58273,58287,58291,58299,58313,58333,58345,58353,58357,58365,58377,58385,58404,58421,58437,58447,58451,58459,58467,58471],{"__ignoreMap":46},[57,58264,58265,58267,58269,58271],{"class":59,"line":60},[57,58266,51494],{"class":140},[57,58268,51498],{"class":51497},[57,58270,51501],{"class":70},[57,58272,51504],{"class":140},[57,58274,58275,58277,58279,58281,58283,58285],{"class":59,"line":67},[57,58276,1326],{"class":140},[57,58278,50832],{"class":51497},[57,58280,51513],{"class":70},[57,58282,156],{"class":140},[57,58284,51518],{"class":74},[57,58286,51504],{"class":140},[57,58288,58289],{"class":59,"line":144},[57,58290,2673],{"emptyLinePlaceholder":350},[57,58292,58293,58295,58297],{"class":59,"line":150},[57,58294,1326],{"class":140},[57,58296,51531],{"class":51497},[57,58298,51504],{"class":140},[57,58300,58301,58303,58305,58307,58309,58311],{"class":59,"line":162},[57,58302,52341],{"class":140},[57,58304,51541],{"class":51497},[57,58306,51544],{"class":70},[57,58308,156],{"class":140},[57,58310,51549],{"class":74},[57,58312,51504],{"class":140},[57,58314,58315,58317,58319,58321,58323,58325,58327,58329,58331],{"class":59,"line":180},[57,58316,52341],{"class":140},[57,58318,51541],{"class":51497},[57,58320,15192],{"class":70},[57,58322,156],{"class":140},[57,58324,51588],{"class":74},[57,58326,51568],{"class":70},[57,58328,156],{"class":140},[57,58330,51595],{"class":74},[57,58332,51504],{"class":140},[57,58334,58335,58337,58339,58341,58343],{"class":59,"line":186},[57,58336,52341],{"class":140},[57,58338,51604],{"class":51497},[57,58340,51607],{"class":140},[57,58342,51604],{"class":51497},[57,58344,51504],{"class":140},[57,58346,58347,58349,58351],{"class":59,"line":197},[57,58348,51982],{"class":140},[57,58350,51531],{"class":51497},[57,58352,51504],{"class":140},[57,58354,58355],{"class":59,"line":241},[57,58356,2673],{"emptyLinePlaceholder":350},[57,58358,58359,58361,58363],{"class":59,"line":249},[57,58360,1326],{"class":140},[57,58362,51997],{"class":51497},[57,58364,51504],{"class":140},[57,58366,58367,58369,58371,58373,58375],{"class":59,"line":262},[57,58368,52341],{"class":140},[57,58370,54084],{"class":51497},[57,58372,54090],{"class":140},[57,58374,54084],{"class":51497},[57,58376,51504],{"class":140},[57,58378,58379,58381,58383],{"class":59,"line":281},[57,58380,52341],{"class":140},[57,58382,52010],{"class":51497},[57,58384,51504],{"class":140},[57,58386,58387,58389,58391,58393,58395,58397,58399,58402],{"class":59,"line":287},[57,58388,11494],{"class":136},[57,58390,54588],{"class":81},[57,58392,13837],{"class":136},[57,58394,54593],{"class":140},[57,58396,54596],{"class":70},[57,58398,168],{"class":140},[57,58400,58401],{"class":74},"'button'",[57,58403,238],{"class":140},[57,58405,58406,58409,58411,58413,58415,58417,58419],{"class":59,"line":298},[57,58407,58408],{"class":140},"    btn.",[57,58410,58010],{"class":70},[57,58412,168],{"class":140},[57,58414,58015],{"class":74},[57,58416,12708],{"class":140},[57,58418,54646],{"class":136},[57,58420,54649],{"class":140},[57,58422,58423,58426,58428,58430,58433,58435],{"class":59,"line":311},[57,58424,58425],{"class":136},"      const",[57,58427,2513],{"class":81},[57,58429,13837],{"class":136},[57,58431,58432],{"class":140}," Math.",[57,58434,58057],{"class":70},[57,58436,2249],{"class":140},[57,58438,58439,58442,58445],{"class":59,"line":322},[57,58440,58441],{"class":140},"      console.",[57,58443,58444],{"class":70},"log",[57,58446,438],{"class":140},[57,58448,58449],{"class":59,"line":1929},[57,58450,33658],{"class":140},[57,58452,58453,58455,58457],{"class":59,"line":1950},[57,58454,52614],{"class":140},[57,58456,52010],{"class":51497},[57,58458,51504],{"class":140},[57,58460,58461,58463,58465],{"class":59,"line":1955},[57,58462,51982],{"class":140},[57,58464,51997],{"class":51497},[57,58466,51504],{"class":140},[57,58468,58469],{"class":59,"line":1969},[57,58470,2673],{"emptyLinePlaceholder":350},[57,58472,58473,58475,58477],{"class":59,"line":1974},[57,58474,51982],{"class":140},[57,58476,50832],{"class":51497},[57,58478,51504],{"class":140},[14,58480,58481],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,58483,58484],{},"常量不可以重新赋值",[14,58486,58487],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[49,58489,58491],{"className":50830,"code":58490,"language":50832,"meta":46,"style":46},"\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",[28,58492,58493,58503,58517,58521,58529,58543,58563,58575,58583,58587,58595,58607,58615,58626,58644,58660,58674,58682,58686,58694,58702,58706],{"__ignoreMap":46},[57,58494,58495,58497,58499,58501],{"class":59,"line":60},[57,58496,51494],{"class":140},[57,58498,51498],{"class":51497},[57,58500,51501],{"class":70},[57,58502,51504],{"class":140},[57,58504,58505,58507,58509,58511,58513,58515],{"class":59,"line":67},[57,58506,1326],{"class":140},[57,58508,50832],{"class":51497},[57,58510,51513],{"class":70},[57,58512,156],{"class":140},[57,58514,51518],{"class":74},[57,58516,51504],{"class":140},[57,58518,58519],{"class":59,"line":144},[57,58520,2673],{"emptyLinePlaceholder":350},[57,58522,58523,58525,58527],{"class":59,"line":150},[57,58524,1326],{"class":140},[57,58526,51531],{"class":51497},[57,58528,51504],{"class":140},[57,58530,58531,58533,58535,58537,58539,58541],{"class":59,"line":162},[57,58532,52341],{"class":140},[57,58534,51541],{"class":51497},[57,58536,51544],{"class":70},[57,58538,156],{"class":140},[57,58540,51549],{"class":74},[57,58542,51504],{"class":140},[57,58544,58545,58547,58549,58551,58553,58555,58557,58559,58561],{"class":59,"line":180},[57,58546,52341],{"class":140},[57,58548,51541],{"class":51497},[57,58550,15192],{"class":70},[57,58552,156],{"class":140},[57,58554,51588],{"class":74},[57,58556,51568],{"class":70},[57,58558,156],{"class":140},[57,58560,51595],{"class":74},[57,58562,51504],{"class":140},[57,58564,58565,58567,58569,58571,58573],{"class":59,"line":186},[57,58566,52341],{"class":140},[57,58568,51604],{"class":51497},[57,58570,51607],{"class":140},[57,58572,51604],{"class":51497},[57,58574,51504],{"class":140},[57,58576,58577,58579,58581],{"class":59,"line":197},[57,58578,51982],{"class":140},[57,58580,51531],{"class":51497},[57,58582,51504],{"class":140},[57,58584,58585],{"class":59,"line":241},[57,58586,2673],{"emptyLinePlaceholder":350},[57,58588,58589,58591,58593],{"class":59,"line":249},[57,58590,1326],{"class":140},[57,58592,51997],{"class":51497},[57,58594,51504],{"class":140},[57,58596,58597,58599,58601,58603,58605],{"class":59,"line":262},[57,58598,52341],{"class":140},[57,58600,54084],{"class":51497},[57,58602,54090],{"class":140},[57,58604,54084],{"class":51497},[57,58606,51504],{"class":140},[57,58608,58609,58611,58613],{"class":59,"line":281},[57,58610,52341],{"class":140},[57,58612,52010],{"class":51497},[57,58614,51504],{"class":140},[57,58616,58617,58619,58621,58623],{"class":59,"line":287},[57,58618,11494],{"class":136},[57,58620,2513],{"class":81},[57,58622,13837],{"class":136},[57,58624,58625],{"class":81}," 10\n",[57,58627,58628,58630,58632,58634,58636,58638,58640,58642],{"class":59,"line":298},[57,58629,11494],{"class":136},[57,58631,54588],{"class":81},[57,58633,13837],{"class":136},[57,58635,54593],{"class":140},[57,58637,54596],{"class":70},[57,58639,168],{"class":140},[57,58641,58401],{"class":74},[57,58643,238],{"class":140},[57,58645,58646,58648,58650,58652,58654,58656,58658],{"class":59,"line":311},[57,58647,58408],{"class":140},[57,58649,58010],{"class":70},[57,58651,168],{"class":140},[57,58653,58015],{"class":74},[57,58655,12708],{"class":140},[57,58657,54646],{"class":136},[57,58659,54649],{"class":140},[57,58661,58662,58664,58666,58668,58670,58672],{"class":59,"line":322},[57,58663,58425],{"class":136},[57,58665,2513],{"class":81},[57,58667,13837],{"class":136},[57,58669,58432],{"class":140},[57,58671,58057],{"class":70},[57,58673,2249],{"class":140},[57,58675,58676,58678,58680],{"class":59,"line":1929},[57,58677,58441],{"class":140},[57,58679,58444],{"class":70},[57,58681,438],{"class":140},[57,58683,58684],{"class":59,"line":1950},[57,58685,33658],{"class":140},[57,58687,58688,58690,58692],{"class":59,"line":1955},[57,58689,52614],{"class":140},[57,58691,52010],{"class":51497},[57,58693,51504],{"class":140},[57,58695,58696,58698,58700],{"class":59,"line":1969},[57,58697,51982],{"class":140},[57,58699,51997],{"class":51497},[57,58701,51504],{"class":140},[57,58703,58704],{"class":59,"line":1974},[57,58705,2673],{"emptyLinePlaceholder":350},[57,58707,58708,58710,58712],{"class":59,"line":2001},[57,58709,51982],{"class":140},[57,58711,50832],{"class":51497},[57,58713,51504],{"class":140},[14,58715,58716],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[49,58718,58720],{"className":50830,"code":58719,"language":50832,"meta":46,"style":46},"\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",[28,58721,58722,58732,58746,58750,58758,58772,58792,58804,58812,58816,58824,58836,58844,58854,58872,58888,58901,58909,58913,58921,58929,58933],{"__ignoreMap":46},[57,58723,58724,58726,58728,58730],{"class":59,"line":60},[57,58725,51494],{"class":140},[57,58727,51498],{"class":51497},[57,58729,51501],{"class":70},[57,58731,51504],{"class":140},[57,58733,58734,58736,58738,58740,58742,58744],{"class":59,"line":67},[57,58735,1326],{"class":140},[57,58737,50832],{"class":51497},[57,58739,51513],{"class":70},[57,58741,156],{"class":140},[57,58743,51518],{"class":74},[57,58745,51504],{"class":140},[57,58747,58748],{"class":59,"line":144},[57,58749,2673],{"emptyLinePlaceholder":350},[57,58751,58752,58754,58756],{"class":59,"line":150},[57,58753,1326],{"class":140},[57,58755,51531],{"class":51497},[57,58757,51504],{"class":140},[57,58759,58760,58762,58764,58766,58768,58770],{"class":59,"line":162},[57,58761,52341],{"class":140},[57,58763,51541],{"class":51497},[57,58765,51544],{"class":70},[57,58767,156],{"class":140},[57,58769,51549],{"class":74},[57,58771,51504],{"class":140},[57,58773,58774,58776,58778,58780,58782,58784,58786,58788,58790],{"class":59,"line":180},[57,58775,52341],{"class":140},[57,58777,51541],{"class":51497},[57,58779,15192],{"class":70},[57,58781,156],{"class":140},[57,58783,51588],{"class":74},[57,58785,51568],{"class":70},[57,58787,156],{"class":140},[57,58789,51595],{"class":74},[57,58791,51504],{"class":140},[57,58793,58794,58796,58798,58800,58802],{"class":59,"line":186},[57,58795,52341],{"class":140},[57,58797,51604],{"class":51497},[57,58799,51607],{"class":140},[57,58801,51604],{"class":51497},[57,58803,51504],{"class":140},[57,58805,58806,58808,58810],{"class":59,"line":197},[57,58807,51982],{"class":140},[57,58809,51531],{"class":51497},[57,58811,51504],{"class":140},[57,58813,58814],{"class":59,"line":241},[57,58815,2673],{"emptyLinePlaceholder":350},[57,58817,58818,58820,58822],{"class":59,"line":249},[57,58819,1326],{"class":140},[57,58821,51997],{"class":51497},[57,58823,51504],{"class":140},[57,58825,58826,58828,58830,58832,58834],{"class":59,"line":262},[57,58827,52341],{"class":140},[57,58829,54084],{"class":51497},[57,58831,54090],{"class":140},[57,58833,54084],{"class":51497},[57,58835,51504],{"class":140},[57,58837,58838,58840,58842],{"class":59,"line":281},[57,58839,52341],{"class":140},[57,58841,52010],{"class":51497},[57,58843,51504],{"class":140},[57,58845,58846,58848,58850,58852],{"class":59,"line":287},[57,58847,11494],{"class":136},[57,58849,2513],{"class":81},[57,58851,13837],{"class":136},[57,58853,58625],{"class":81},[57,58855,58856,58858,58860,58862,58864,58866,58868,58870],{"class":59,"line":298},[57,58857,11494],{"class":136},[57,58859,54588],{"class":81},[57,58861,13837],{"class":136},[57,58863,54593],{"class":140},[57,58865,54596],{"class":70},[57,58867,168],{"class":140},[57,58869,58401],{"class":74},[57,58871,238],{"class":140},[57,58873,58874,58876,58878,58880,58882,58884,58886],{"class":59,"line":311},[57,58875,58408],{"class":140},[57,58877,58010],{"class":70},[57,58879,168],{"class":140},[57,58881,58015],{"class":74},[57,58883,12708],{"class":140},[57,58885,54646],{"class":136},[57,58887,54649],{"class":140},[57,58889,58890,58893,58895,58897,58899],{"class":59,"line":322},[57,58891,58892],{"class":140},"      num ",[57,58894,156],{"class":136},[57,58896,58432],{"class":140},[57,58898,58057],{"class":70},[57,58900,2249],{"class":140},[57,58902,58903,58905,58907],{"class":59,"line":1929},[57,58904,58441],{"class":140},[57,58906,58444],{"class":70},[57,58908,438],{"class":140},[57,58910,58911],{"class":59,"line":1950},[57,58912,33658],{"class":140},[57,58914,58915,58917,58919],{"class":59,"line":1955},[57,58916,52614],{"class":140},[57,58918,52010],{"class":51497},[57,58920,51504],{"class":140},[57,58922,58923,58925,58927],{"class":59,"line":1969},[57,58924,51982],{"class":140},[57,58926,51997],{"class":51497},[57,58928,51504],{"class":140},[57,58930,58931],{"class":59,"line":1974},[57,58932,2673],{"emptyLinePlaceholder":350},[57,58934,58935,58937,58939],{"class":59,"line":2001},[57,58936,51982],{"class":140},[57,58938,50832],{"class":51497},[57,58940,51504],{"class":140},[14,58942,58943],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[394,58945,58947],{"id":58946},"_324-事件监听版本","3.2.4 事件监听版本",[14,58949,58950],{},[44,58951],{"alt":46,"src":58952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,58954,58955],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,58957,58958],{},"这种方式会覆盖前边的事件监听:",[49,58960,58962],{"className":50830,"code":58961,"language":50832,"meta":46,"style":46},"\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",[28,58963,58964,58974,58988,58992,59000,59014,59034,59046,59054,59058,59066,59078,59086,59104,59118,59129,59133,59145,59155,59159,59167,59175,59179],{"__ignoreMap":46},[57,58965,58966,58968,58970,58972],{"class":59,"line":60},[57,58967,51494],{"class":140},[57,58969,51498],{"class":51497},[57,58971,51501],{"class":70},[57,58973,51504],{"class":140},[57,58975,58976,58978,58980,58982,58984,58986],{"class":59,"line":67},[57,58977,1326],{"class":140},[57,58979,50832],{"class":51497},[57,58981,51513],{"class":70},[57,58983,156],{"class":140},[57,58985,51518],{"class":74},[57,58987,51504],{"class":140},[57,58989,58990],{"class":59,"line":144},[57,58991,2673],{"emptyLinePlaceholder":350},[57,58993,58994,58996,58998],{"class":59,"line":150},[57,58995,1326],{"class":140},[57,58997,51531],{"class":51497},[57,58999,51504],{"class":140},[57,59001,59002,59004,59006,59008,59010,59012],{"class":59,"line":162},[57,59003,52341],{"class":140},[57,59005,51541],{"class":51497},[57,59007,51544],{"class":70},[57,59009,156],{"class":140},[57,59011,51549],{"class":74},[57,59013,51504],{"class":140},[57,59015,59016,59018,59020,59022,59024,59026,59028,59030,59032],{"class":59,"line":180},[57,59017,52341],{"class":140},[57,59019,51541],{"class":51497},[57,59021,15192],{"class":70},[57,59023,156],{"class":140},[57,59025,51588],{"class":74},[57,59027,51568],{"class":70},[57,59029,156],{"class":140},[57,59031,51595],{"class":74},[57,59033,51504],{"class":140},[57,59035,59036,59038,59040,59042,59044],{"class":59,"line":186},[57,59037,52341],{"class":140},[57,59039,51604],{"class":51497},[57,59041,51607],{"class":140},[57,59043,51604],{"class":51497},[57,59045,51504],{"class":140},[57,59047,59048,59050,59052],{"class":59,"line":197},[57,59049,51982],{"class":140},[57,59051,51531],{"class":51497},[57,59053,51504],{"class":140},[57,59055,59056],{"class":59,"line":241},[57,59057,2673],{"emptyLinePlaceholder":350},[57,59059,59060,59062,59064],{"class":59,"line":249},[57,59061,1326],{"class":140},[57,59063,51997],{"class":51497},[57,59065,51504],{"class":140},[57,59067,59068,59070,59072,59074,59076],{"class":59,"line":262},[57,59069,52341],{"class":140},[57,59071,54084],{"class":51497},[57,59073,54090],{"class":140},[57,59075,54084],{"class":51497},[57,59077,51504],{"class":140},[57,59079,59080,59082,59084],{"class":59,"line":281},[57,59081,52341],{"class":140},[57,59083,52010],{"class":51497},[57,59085,51504],{"class":140},[57,59087,59088,59090,59092,59094,59096,59098,59100,59102],{"class":59,"line":287},[57,59089,11494],{"class":136},[57,59091,54588],{"class":81},[57,59093,13837],{"class":136},[57,59095,54593],{"class":140},[57,59097,54596],{"class":70},[57,59099,168],{"class":140},[57,59101,58401],{"class":74},[57,59103,238],{"class":140},[57,59105,59106,59108,59111,59113,59116],{"class":59,"line":298},[57,59107,58408],{"class":140},[57,59109,59110],{"class":70},"onclick",[57,59112,13837],{"class":136},[57,59114,59115],{"class":136}," function",[57,59117,54649],{"class":140},[57,59119,59120,59123,59125,59127],{"class":59,"line":311},[57,59121,59122],{"class":70},"      alert",[57,59124,168],{"class":140},[57,59126,888],{"class":81},[57,59128,238],{"class":140},[57,59130,59131],{"class":59,"line":322},[57,59132,2460],{"class":140},[57,59134,59135,59137,59139,59141,59143],{"class":59,"line":1929},[57,59136,58408],{"class":140},[57,59138,59110],{"class":70},[57,59140,13837],{"class":136},[57,59142,59115],{"class":136},[57,59144,54649],{"class":140},[57,59146,59147,59149,59151,59153],{"class":59,"line":1950},[57,59148,59122],{"class":70},[57,59150,168],{"class":140},[57,59152,1166],{"class":81},[57,59154,238],{"class":140},[57,59156,59157],{"class":59,"line":1955},[57,59158,2460],{"class":140},[57,59160,59161,59163,59165],{"class":59,"line":1969},[57,59162,52614],{"class":140},[57,59164,52010],{"class":51497},[57,59166,51504],{"class":140},[57,59168,59169,59171,59173],{"class":59,"line":1974},[57,59170,51982],{"class":140},[57,59172,51997],{"class":51497},[57,59174,51504],{"class":140},[57,59176,59177],{"class":59,"line":2001},[57,59178,2673],{"emptyLinePlaceholder":350},[57,59180,59181,59183,59185],{"class":59,"line":2006},[57,59182,51982],{"class":140},[57,59184,50832],{"class":51497},[57,59186,51504],{"class":140},[14,59188,59189],{},"只要点击就输出结果为22,前边11被覆盖了",[49,59191,59193],{"className":50830,"code":59192,"language":50832,"meta":46,"style":46},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[28,59194,59195,59200,59205,59209,59214,59219],{"__ignoreMap":46},[57,59196,59197],{"class":59,"line":60},[57,59198,59199],{"class":140},"  btn.addEventListener('click', function () {\n",[57,59201,59202],{"class":59,"line":67},[57,59203,59204],{"class":140},"      alert(11)\n",[57,59206,59207],{"class":59,"line":144},[57,59208,33658],{"class":140},[57,59210,59211],{"class":59,"line":150},[57,59212,59213],{"class":140},"    btn.addEventListener('click', function () {\n",[57,59215,59216],{"class":59,"line":162},[57,59217,59218],{"class":140},"      alert(22)\n",[57,59220,59221],{"class":59,"line":180},[57,59222,33658],{"class":140},[14,59224,59225],{},"点击第一次输出11,第二次点击为22",[394,59227,59229],{"id":59228},"_325-事件类型","3.2.5 事件类型",[14,59231,59232],{},[44,59233],{"alt":46,"src":59234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22270,59236,59238],{"id":59237},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,59240,59241],{},"补充知识:",[14,59243,59244],{},"轮播图自动播放模块,可以使用",[14,59246,59247],{},"let timerId = setInterval(function () {",[14,59249,59250],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,59252,59253],{},"用js方法模拟进行点击事件,click必须加()",[14,59255,59256],{},"next.click()",[14,59258,59259],{},"}, 1000)",[14,59261,59262],{},[44,59263],{"alt":46,"src":59264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[49,59266,59268],{"className":53264,"code":59267,"language":53266,"meta":46,"style":46},"\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",[28,59269,59270,59274,59284,59298,59302,59310,59325,59345,59365,59378,59386,59391,59396,59400,59404,59409,59414,59419,59424,59428,59432,59437,59442,59447,59451,59455,59460,59464,59469,59474,59478,59482,59487,59492,59497,59502,59507,59511,59515,59520,59525,59530,59535,59540,59544,59548,59553,59558,59563,59568,59573,59578,59583,59588,59593,59598,59602,59606,59611,59616,59620,59624,59629,59634,59638,59643,59648,59652,59656,59661,59665,59670,59675,59679,59684,59688,59692,59697,59702,59707,59712,59717,59722,59727,59731,59735,59739,59744,59749,59754,59759,59763,59771,59779,59783,59791,59806,59820,59841,59849,59863,59876,59891,59910,59922,59934,59946,59958,59970,59982,59994,60002,60017,60041,60065,60073,60081,60089,60097,60102,60107,60112,60117,60122,60127,60132,60137,60142,60147,60151,60156,60161,60166,60171,60176,60181,60186,60191,60196,60200,60205,60210,60215,60220,60225,60230,60235,60240,60245,60250,60255,60260,60264,60268,60273,60278,60283,60287,60292,60297,60302,60307,60312,60316,60321,60325,60329,60333,60337,60341,60345,60350,60355,60360,60365,60370,60375,60380,60385,60390,60394,60398,60403,60408,60413,60418,60423,60427,60432,60437,60442,60447,60452,60457,60461,60465,60470,60474,60479,60483,60488,60493,60498,60503,60508,60513,60517,60525,60533,60537],{"__ignoreMap":46},[57,59271,59272],{"class":59,"line":60},[57,59273,2673],{"emptyLinePlaceholder":350},[57,59275,59276,59278,59280,59282],{"class":59,"line":67},[57,59277,51494],{"class":140},[57,59279,51498],{"class":136},[57,59281,51501],{"class":81},[57,59283,51504],{"class":140},[57,59285,59286,59288,59290,59292,59294,59296],{"class":59,"line":144},[57,59287,1326],{"class":140},[57,59289,50832],{"class":51497},[57,59291,51513],{"class":70},[57,59293,156],{"class":140},[57,59295,51518],{"class":74},[57,59297,51504],{"class":140},[57,59299,59300],{"class":59,"line":150},[57,59301,2673],{"emptyLinePlaceholder":350},[57,59303,59304,59306,59308],{"class":59,"line":162},[57,59305,1326],{"class":140},[57,59307,51531],{"class":51497},[57,59309,51504],{"class":140},[57,59311,59312,59314,59316,59318,59320,59322],{"class":59,"line":180},[57,59313,52341],{"class":140},[57,59315,51541],{"class":51497},[57,59317,51544],{"class":70},[57,59319,156],{"class":140},[57,59321,51549],{"class":74},[57,59323,59324],{"class":140}," \u002F>\n",[57,59326,59327,59329,59331,59333,59335,59337,59339,59341,59343],{"class":59,"line":186},[57,59328,52341],{"class":140},[57,59330,51541],{"class":51497},[57,59332,51560],{"class":70},[57,59334,156],{"class":140},[57,59336,51565],{"class":74},[57,59338,51568],{"class":70},[57,59340,156],{"class":140},[57,59342,51573],{"class":74},[57,59344,59324],{"class":140},[57,59346,59347,59349,59351,59353,59355,59357,59359,59361,59363],{"class":59,"line":197},[57,59348,52341],{"class":140},[57,59350,51541],{"class":51497},[57,59352,15192],{"class":70},[57,59354,156],{"class":140},[57,59356,51588],{"class":74},[57,59358,51568],{"class":70},[57,59360,156],{"class":140},[57,59362,51595],{"class":74},[57,59364,59324],{"class":140},[57,59366,59367,59369,59371,59374,59376],{"class":59,"line":241},[57,59368,52341],{"class":140},[57,59370,51604],{"class":51497},[57,59372,59373],{"class":140},">轮播图点击切换\u003C\u002F",[57,59375,51604],{"class":51497},[57,59377,51504],{"class":140},[57,59379,59380,59382,59384],{"class":59,"line":249},[57,59381,52341],{"class":140},[57,59383,342],{"class":51497},[57,59385,51504],{"class":140},[57,59387,59388],{"class":59,"line":262},[57,59389,59390],{"class":140},"    * {\n",[57,59392,59393],{"class":59,"line":281},[57,59394,59395],{"class":140},"      box-sizing: border-box;\n",[57,59397,59398],{"class":59,"line":287},[57,59399,2460],{"class":140},[57,59401,59402],{"class":59,"line":298},[57,59403,2673],{"emptyLinePlaceholder":350},[57,59405,59406],{"class":59,"line":311},[57,59407,59408],{"class":140},"    .slider {\n",[57,59410,59411],{"class":59,"line":322},[57,59412,59413],{"class":140},"      width: 560px;\n",[57,59415,59416],{"class":59,"line":1929},[57,59417,59418],{"class":140},"      height: 400px;\n",[57,59420,59421],{"class":59,"line":1950},[57,59422,59423],{"class":140},"      overflow: hidden;\n",[57,59425,59426],{"class":59,"line":1955},[57,59427,2460],{"class":140},[57,59429,59430],{"class":59,"line":1969},[57,59431,2673],{"emptyLinePlaceholder":350},[57,59433,59434],{"class":59,"line":1974},[57,59435,59436],{"class":140},"    .slider-wrapper {\n",[57,59438,59439],{"class":59,"line":2001},[57,59440,59441],{"class":140},"      width: 100%;\n",[57,59443,59444],{"class":59,"line":2006},[57,59445,59446],{"class":140},"      height: 320px;\n",[57,59448,59449],{"class":59,"line":2023},[57,59450,2460],{"class":140},[57,59452,59453],{"class":59,"line":2028},[57,59454,2673],{"emptyLinePlaceholder":350},[57,59456,59457],{"class":59,"line":2033},[57,59458,59459],{"class":140},"    .slider-wrapper img {\n",[57,59461,59462],{"class":59,"line":2038},[57,59463,59441],{"class":140},[57,59465,59466],{"class":59,"line":2052},[57,59467,59468],{"class":140},"      height: 100%;\n",[57,59470,59471],{"class":59,"line":2057},[57,59472,59473],{"class":140},"      display: block;\n",[57,59475,59476],{"class":59,"line":2850},[57,59477,2460],{"class":140},[57,59479,59480],{"class":59,"line":2864},[57,59481,2673],{"emptyLinePlaceholder":350},[57,59483,59484],{"class":59,"line":2872},[57,59485,59486],{"class":140},"    .slider-footer {\n",[57,59488,59489],{"class":59,"line":2877},[57,59490,59491],{"class":140},"      height: 80px;\n",[57,59493,59494],{"class":59,"line":2883},[57,59495,59496],{"class":140},"      background-color: rgb(100, 67, 68);\n",[57,59498,59499],{"class":59,"line":2889},[57,59500,59501],{"class":140},"      padding: 12px 12px 0 12px;\n",[57,59503,59504],{"class":59,"line":2894},[57,59505,59506],{"class":140},"      position: relative;\n",[57,59508,59509],{"class":59,"line":8221},[57,59510,2460],{"class":140},[57,59512,59513],{"class":59,"line":8245},[57,59514,2673],{"emptyLinePlaceholder":350},[57,59516,59517],{"class":59,"line":8250},[57,59518,59519],{"class":140},"    .slider-footer .toggle {\n",[57,59521,59522],{"class":59,"line":8256},[57,59523,59524],{"class":140},"      position: absolute;\n",[57,59526,59527],{"class":59,"line":8283},[57,59528,59529],{"class":140},"      right: 0;\n",[57,59531,59532],{"class":59,"line":8288},[57,59533,59534],{"class":140},"      top: 12px;\n",[57,59536,59537],{"class":59,"line":8294},[57,59538,59539],{"class":140},"      display: flex;\n",[57,59541,59542],{"class":59,"line":8306},[57,59543,2460],{"class":140},[57,59545,59546],{"class":59,"line":8318},[57,59547,2673],{"emptyLinePlaceholder":350},[57,59549,59550],{"class":59,"line":8330},[57,59551,59552],{"class":140},"    .slider-footer .toggle button {\n",[57,59554,59555],{"class":59,"line":9989},[57,59556,59557],{"class":140},"      margin-right: 12px;\n",[57,59559,59560],{"class":59,"line":10014},[57,59561,59562],{"class":140},"      width: 28px;\n",[57,59564,59565],{"class":59,"line":10037},[57,59566,59567],{"class":140},"      height: 28px;\n",[57,59569,59570],{"class":59,"line":10061},[57,59571,59572],{"class":140},"      appearance: none;\n",[57,59574,59575],{"class":59,"line":10066},[57,59576,59577],{"class":140},"      border: none;\n",[57,59579,59580],{"class":59,"line":10071},[57,59581,59582],{"class":140},"      background: rgba(255, 255, 255, 0.1);\n",[57,59584,59585],{"class":59,"line":10076},[57,59586,59587],{"class":140},"      color: #fff;\n",[57,59589,59590],{"class":59,"line":10085},[57,59591,59592],{"class":140},"      border-radius: 4px;\n",[57,59594,59595],{"class":59,"line":10090},[57,59596,59597],{"class":140},"      cursor: pointer;\n",[57,59599,59600],{"class":59,"line":10096},[57,59601,2460],{"class":140},[57,59603,59604],{"class":59,"line":10117},[57,59605,2673],{"emptyLinePlaceholder":350},[57,59607,59608],{"class":59,"line":10123},[57,59609,59610],{"class":140},"    .slider-footer .toggle button:hover {\n",[57,59612,59613],{"class":59,"line":10137},[57,59614,59615],{"class":140},"      background: rgba(255, 255, 255, 0.2);\n",[57,59617,59618],{"class":59,"line":10143},[57,59619,2460],{"class":140},[57,59621,59622],{"class":59,"line":10170},[57,59623,2673],{"emptyLinePlaceholder":350},[57,59625,59626],{"class":59,"line":10179},[57,59627,59628],{"class":140},"    .slider-footer p {\n",[57,59630,59631],{"class":59,"line":10185},[57,59632,59633],{"class":140},"      margin: 0;\n",[57,59635,59636],{"class":59,"line":10193},[57,59637,59587],{"class":140},[57,59639,59640],{"class":59,"line":10198},[57,59641,59642],{"class":140},"      font-size: 18px;\n",[57,59644,59645],{"class":59,"line":16876},[57,59646,59647],{"class":140},"      margin-bottom: 10px;\n",[57,59649,59650],{"class":59,"line":16882},[57,59651,2460],{"class":140},[57,59653,59654],{"class":59,"line":16905},[57,59655,2673],{"emptyLinePlaceholder":350},[57,59657,59658],{"class":59,"line":16911},[57,59659,59660],{"class":140},"    .slider-indicator {\n",[57,59662,59663],{"class":59,"line":16934},[57,59664,59633],{"class":140},[57,59666,59667],{"class":59,"line":16948},[57,59668,59669],{"class":140},"      padding: 0;\n",[57,59671,59672],{"class":59,"line":16968},[57,59673,59674],{"class":140},"      list-style: none;\n",[57,59676,59677],{"class":59,"line":16974},[57,59678,59539],{"class":140},[57,59680,59681],{"class":59,"line":16985},[57,59682,59683],{"class":140},"      align-items: center;\n",[57,59685,59686],{"class":59,"line":17008},[57,59687,2460],{"class":140},[57,59689,59690],{"class":59,"line":17030},[57,59691,2673],{"emptyLinePlaceholder":350},[57,59693,59694],{"class":59,"line":17035},[57,59695,59696],{"class":140},"    .slider-indicator li {\n",[57,59698,59699],{"class":59,"line":17041},[57,59700,59701],{"class":140},"      width: 8px;\n",[57,59703,59704],{"class":59,"line":17055},[57,59705,59706],{"class":140},"      height: 8px;\n",[57,59708,59709],{"class":59,"line":17068},[57,59710,59711],{"class":140},"      margin: 4px;\n",[57,59713,59714],{"class":59,"line":17073},[57,59715,59716],{"class":140},"      border-radius: 50%;\n",[57,59718,59719],{"class":59,"line":17087},[57,59720,59721],{"class":140},"      background: #fff;\n",[57,59723,59724],{"class":59,"line":17092},[57,59725,59726],{"class":140},"      opacity: 0.4;\n",[57,59728,59729],{"class":59,"line":17098},[57,59730,59597],{"class":140},[57,59732,59733],{"class":59,"line":17103},[57,59734,2460],{"class":140},[57,59736,59737],{"class":59,"line":17117},[57,59738,2673],{"emptyLinePlaceholder":350},[57,59740,59741],{"class":59,"line":17122},[57,59742,59743],{"class":140},"    .slider-indicator li.active {\n",[57,59745,59746],{"class":59,"line":17127},[57,59747,59748],{"class":140},"      width: 12px;\n",[57,59750,59751],{"class":59,"line":17141},[57,59752,59753],{"class":140},"      height: 12px;\n",[57,59755,59756],{"class":59,"line":17153},[57,59757,59758],{"class":140},"      opacity: 1;\n",[57,59760,59761],{"class":59,"line":17158},[57,59762,2460],{"class":140},[57,59764,59765,59767,59769],{"class":59,"line":17171},[57,59766,52614],{"class":140},[57,59768,342],{"class":51497},[57,59770,51504],{"class":140},[57,59772,59773,59775,59777],{"class":59,"line":17176},[57,59774,51982],{"class":140},[57,59776,51531],{"class":51497},[57,59778,51504],{"class":140},[57,59780,59781],{"class":59,"line":17181},[57,59782,2673],{"emptyLinePlaceholder":350},[57,59784,59785,59787,59789],{"class":59,"line":17186},[57,59786,1326],{"class":140},[57,59788,51997],{"class":51497},[57,59790,51504],{"class":140},[57,59792,59793,59795,59797,59799,59801,59804],{"class":59,"line":17199},[57,59794,52341],{"class":140},[57,59796,51808],{"class":51497},[57,59798,53683],{"class":70},[57,59800,156],{"class":140},[57,59802,59803],{"class":74},"\"slider\"",[57,59805,51504],{"class":140},[57,59807,59808,59810,59812,59814,59816,59818],{"class":59,"line":17204},[57,59809,51538],{"class":140},[57,59811,51808],{"class":51497},[57,59813,53683],{"class":70},[57,59815,156],{"class":140},[57,59817,55424],{"class":74},[57,59819,51504],{"class":140},[57,59821,59822,59824,59826,59828,59830,59833,59835,59837,59839],{"class":59,"line":32830},[57,59823,55431],{"class":140},[57,59825,44],{"class":51497},[57,59827,55436],{"class":70},[57,59829,156],{"class":140},[57,59831,59832],{"class":74},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[57,59834,55444],{"class":70},[57,59836,156],{"class":140},[57,59838,7925],{"class":74},[57,59840,59324],{"class":140},[57,59842,59843,59845,59847],{"class":59,"line":32836},[57,59844,51973],{"class":140},[57,59846,51808],{"class":51497},[57,59848,51504],{"class":140},[57,59850,59851,59853,59855,59857,59859,59861],{"class":59,"line":32842},[57,59852,51538],{"class":140},[57,59854,51808],{"class":51497},[57,59856,53683],{"class":70},[57,59858,156],{"class":140},[57,59860,55471],{"class":74},[57,59862,51504],{"class":140},[57,59864,59865,59867,59869,59872,59874],{"class":59,"line":32848},[57,59866,55431],{"class":140},[57,59868,14],{"class":51497},[57,59870,59871],{"class":140},">对人类来说会不会太超前了？\u003C\u002F",[57,59873,14],{"class":51497},[57,59875,51504],{"class":140},[57,59877,59878,59880,59882,59884,59886,59889],{"class":59,"line":32854},[57,59879,55431],{"class":140},[57,59881,1422],{"class":51497},[57,59883,53683],{"class":70},[57,59885,156],{"class":140},[57,59887,59888],{"class":74},"\"slider-indicator\"",[57,59890,51504],{"class":140},[57,59892,59893,59895,59897,59899,59901,59904,59906,59908],{"class":59,"line":32865},[57,59894,55499],{"class":140},[57,59896,380],{"class":51497},[57,59898,53683],{"class":70},[57,59900,156],{"class":140},[57,59902,59903],{"class":74},"\"active\"",[57,59905,55511],{"class":140},[57,59907,380],{"class":51497},[57,59909,51504],{"class":140},[57,59911,59912,59914,59916,59918,59920],{"class":59,"line":32871},[57,59913,55499],{"class":140},[57,59915,380],{"class":51497},[57,59917,55511],{"class":140},[57,59919,380],{"class":51497},[57,59921,51504],{"class":140},[57,59923,59924,59926,59928,59930,59932],{"class":59,"line":32891},[57,59925,55499],{"class":140},[57,59927,380],{"class":51497},[57,59929,55511],{"class":140},[57,59931,380],{"class":51497},[57,59933,51504],{"class":140},[57,59935,59936,59938,59940,59942,59944],{"class":59,"line":32897},[57,59937,55499],{"class":140},[57,59939,380],{"class":51497},[57,59941,55511],{"class":140},[57,59943,380],{"class":51497},[57,59945,51504],{"class":140},[57,59947,59948,59950,59952,59954,59956],{"class":59,"line":32908},[57,59949,55499],{"class":140},[57,59951,380],{"class":51497},[57,59953,55511],{"class":140},[57,59955,380],{"class":51497},[57,59957,51504],{"class":140},[57,59959,59960,59962,59964,59966,59968],{"class":59,"line":32914},[57,59961,55499],{"class":140},[57,59963,380],{"class":51497},[57,59965,55511],{"class":140},[57,59967,380],{"class":51497},[57,59969,51504],{"class":140},[57,59971,59972,59974,59976,59978,59980],{"class":59,"line":32920},[57,59973,55499],{"class":140},[57,59975,380],{"class":51497},[57,59977,55511],{"class":140},[57,59979,380],{"class":51497},[57,59981,51504],{"class":140},[57,59983,59984,59986,59988,59990,59992],{"class":59,"line":32926},[57,59985,55499],{"class":140},[57,59987,380],{"class":51497},[57,59989,55511],{"class":140},[57,59991,380],{"class":51497},[57,59993,51504],{"class":140},[57,59995,59996,59998,60000],{"class":59,"line":32932},[57,59997,55604],{"class":140},[57,59999,1422],{"class":51497},[57,60001,51504],{"class":140},[57,60003,60004,60006,60008,60010,60012,60015],{"class":59,"line":32938},[57,60005,55431],{"class":140},[57,60007,51808],{"class":51497},[57,60009,53683],{"class":70},[57,60011,156],{"class":140},[57,60013,60014],{"class":74},"\"toggle\"",[57,60016,51504],{"class":140},[57,60018,60019,60021,60023,60025,60027,60030,60032,60035,60037,60039],{"class":59,"line":32944},[57,60020,55499],{"class":140},[57,60022,54084],{"class":51497},[57,60024,53683],{"class":70},[57,60026,156],{"class":140},[57,60028,60029],{"class":74},"\"prev\"",[57,60031,223],{"class":140},[57,60033,60034],{"class":81},"&lt;",[57,60036,51982],{"class":140},[57,60038,54084],{"class":51497},[57,60040,51504],{"class":140},[57,60042,60043,60045,60047,60049,60051,60054,60056,60059,60061,60063],{"class":59,"line":32950},[57,60044,55499],{"class":140},[57,60046,54084],{"class":51497},[57,60048,53683],{"class":70},[57,60050,156],{"class":140},[57,60052,60053],{"class":74},"\"next\"",[57,60055,223],{"class":140},[57,60057,60058],{"class":81},"&gt;",[57,60060,51982],{"class":140},[57,60062,54084],{"class":51497},[57,60064,51504],{"class":140},[57,60066,60067,60069,60071],{"class":59,"line":32970},[57,60068,55604],{"class":140},[57,60070,51808],{"class":51497},[57,60072,51504],{"class":140},[57,60074,60075,60077,60079],{"class":59,"line":32976},[57,60076,51973],{"class":140},[57,60078,51808],{"class":51497},[57,60080,51504],{"class":140},[57,60082,60083,60085,60087],{"class":59,"line":32992},[57,60084,52614],{"class":140},[57,60086,51808],{"class":51497},[57,60088,51504],{"class":140},[57,60090,60091,60093,60095],{"class":59,"line":32998},[57,60092,52341],{"class":140},[57,60094,52010],{"class":51497},[57,60096,51504],{"class":140},[57,60098,60099],{"class":59,"line":33012},[57,60100,60101],{"class":140},"    \u002F\u002F 1. 初始数据\n",[57,60103,60104],{"class":59,"line":33018},[57,60105,60106],{"class":140},"    const data = [\n",[57,60108,60109],{"class":59,"line":33033},[57,60110,60111],{"class":140},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[57,60113,60114],{"class":59,"line":33039},[57,60115,60116],{"class":140},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[57,60118,60119],{"class":59,"line":33048},[57,60120,60121],{"class":140},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[57,60123,60124],{"class":59,"line":33054},[57,60125,60126],{"class":140},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[57,60128,60129],{"class":59,"line":33063},[57,60130,60131],{"class":140},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[57,60133,60134],{"class":59,"line":33069},[57,60135,60136],{"class":140},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[57,60138,60139],{"class":59,"line":33075},[57,60140,60141],{"class":140},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[57,60143,60144],{"class":59,"line":33084},[57,60145,60146],{"class":140},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[57,60148,60149],{"class":59,"line":33090},[57,60150,53306],{"class":140},[57,60152,60153],{"class":59,"line":33101},[57,60154,60155],{"class":140},"    \u002F\u002F 获取元素\n",[57,60157,60158],{"class":59,"line":33107},[57,60159,60160],{"class":140},"    const img = document.querySelector('.slider-wrapper img')\n",[57,60162,60163],{"class":59,"line":33126},[57,60164,60165],{"class":140},"    const p = document.querySelector('.slider-footer p')\n",[57,60167,60168],{"class":59,"line":33132},[57,60169,60170],{"class":140},"    const footer = document.querySelector('.slider-footer')\n",[57,60172,60173],{"class":59,"line":33143},[57,60174,60175],{"class":140},"    \u002F\u002F 1. 右按钮业务\n",[57,60177,60178],{"class":59,"line":33149},[57,60179,60180],{"class":140},"    \u002F\u002F 1.1 获取右侧按钮 \n",[57,60182,60183],{"class":59,"line":33169},[57,60184,60185],{"class":140},"    const next = document.querySelector('.next')\n",[57,60187,60188],{"class":59,"line":33185},[57,60189,60190],{"class":140},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[57,60192,60193],{"class":59,"line":33191},[57,60194,60195],{"class":140},"    \u002F\u002F 1.2 注册点击事件\n",[57,60197,60198],{"class":59,"line":33205},[57,60199,2673],{"emptyLinePlaceholder":350},[57,60201,60202],{"class":59,"line":33211},[57,60203,60204],{"class":140},"    next.addEventListener('click', function () {\n",[57,60206,60207],{"class":59,"line":33217},[57,60208,60209],{"class":140},"      \u002F\u002F console.log(11)\n",[57,60211,60212],{"class":59,"line":33228},[57,60213,60214],{"class":140},"      i++\n",[57,60216,60217],{"class":59,"line":33234},[57,60218,60219],{"class":140},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[57,60221,60222],{"class":59,"line":33240},[57,60223,60224],{"class":140},"      \u002F\u002F if (i >= 8) {\n",[57,60226,60227],{"class":59,"line":33250},[57,60228,60229],{"class":140},"      \u002F\u002F   i = 0\n",[57,60231,60232],{"class":59,"line":33256},[57,60233,60234],{"class":140},"      \u002F\u002F }\n",[57,60236,60237],{"class":59,"line":33267},[57,60238,60239],{"class":140},"      i = i >= data.length ? 0 : i\n",[57,60241,60242],{"class":59,"line":33273},[57,60243,60244],{"class":140},"      \u002F\u002F 1.3 得到对应的对象\n",[57,60246,60247],{"class":59,"line":33283},[57,60248,60249],{"class":140},"      \u002F\u002F console.log(data[i])\n",[57,60251,60252],{"class":59,"line":33288},[57,60253,60254],{"class":140},"      \u002F\u002F 调用函数\n",[57,60256,60257],{"class":59,"line":33294},[57,60258,60259],{"class":140},"      toggle()\n",[57,60261,60262],{"class":59,"line":33343},[57,60263,33658],{"class":140},[57,60265,60266],{"class":59,"line":33390},[57,60267,2673],{"emptyLinePlaceholder":350},[57,60269,60270],{"class":59,"line":33395},[57,60271,60272],{"class":140},"    \u002F\u002F 2. 左侧按钮业务\n",[57,60274,60275],{"class":59,"line":33401},[57,60276,60277],{"class":140},"    \u002F\u002F 2.1 获取左侧按钮 \n",[57,60279,60280],{"class":59,"line":33420},[57,60281,60282],{"class":140},"    const prev = document.querySelector('.prev')\n",[57,60284,60285],{"class":59,"line":33426},[57,60286,60195],{"class":140},[57,60288,60289],{"class":59,"line":33446},[57,60290,60291],{"class":140},"    prev.addEventListener('click', function () {\n",[57,60293,60294],{"class":59,"line":33452},[57,60295,60296],{"class":140},"      i--\n",[57,60298,60299],{"class":59,"line":33458},[57,60300,60301],{"class":140},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[57,60303,60304],{"class":59,"line":33468},[57,60305,60306],{"class":140},"      \u002F\u002F if (i \u003C 0) {\n",[57,60308,60309],{"class":59,"line":33473},[57,60310,60311],{"class":140},"      \u002F\u002F   i = 7\n",[57,60313,60314],{"class":59,"line":33479},[57,60315,60234],{"class":140},[57,60317,60318],{"class":59,"line":33495},[57,60319,60320],{"class":140},"      i = i \u003C 0 ? data.length - 1 : i\n",[57,60322,60323],{"class":59,"line":33540},[57,60324,60244],{"class":140},[57,60326,60327],{"class":59,"line":33546},[57,60328,60249],{"class":140},[57,60330,60331],{"class":59,"line":33552},[57,60332,60254],{"class":140},[57,60334,60335],{"class":59,"line":33558},[57,60336,60259],{"class":140},[57,60338,60339],{"class":59,"line":33569},[57,60340,33658],{"class":140},[57,60342,60343],{"class":59,"line":33575},[57,60344,2673],{"emptyLinePlaceholder":350},[57,60346,60347],{"class":59,"line":33581},[57,60348,60349],{"class":140},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[57,60351,60352],{"class":59,"line":33587},[57,60353,60354],{"class":140},"    function toggle() {\n",[57,60356,60357],{"class":59,"line":33605},[57,60358,60359],{"class":140},"      \u002F\u002F 1.4 渲染对应的数据\n",[57,60361,60362],{"class":59,"line":33619},[57,60363,60364],{"class":140},"      img.src = data[i].url\n",[57,60366,60367],{"class":59,"line":33628},[57,60368,60369],{"class":140},"      p.innerHTML = data[i].title\n",[57,60371,60372],{"class":59,"line":33637},[57,60373,60374],{"class":140},"      footer.style.backgroundColor = data[i].color\n",[57,60376,60377],{"class":59,"line":33646},[57,60378,60379],{"class":140},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[57,60381,60382],{"class":59,"line":33655},[57,60383,60384],{"class":140},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[57,60386,60387],{"class":59,"line":33661},[57,60388,60389],{"class":140},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[57,60391,60392],{"class":59,"line":33667},[57,60393,2460],{"class":140},[57,60395,60396],{"class":59,"line":33675},[57,60397,2673],{"emptyLinePlaceholder":350},[57,60399,60400],{"class":59,"line":33680},[57,60401,60402],{"class":140},"    \u002F\u002F 3. 自动播放模块\n",[57,60404,60405],{"class":59,"line":33686},[57,60406,60407],{"class":140},"    let timerId = setInterval(function () {\n",[57,60409,60410],{"class":59,"line":33697},[57,60411,60412],{"class":140},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[57,60414,60415],{"class":59,"line":33703},[57,60416,60417],{"class":140},"      next.click()\n",[57,60419,60420],{"class":59,"line":33723},[57,60421,60422],{"class":140},"    }, 1000)\n",[57,60424,60425],{"class":59,"line":33729},[57,60426,2673],{"emptyLinePlaceholder":350},[57,60428,60429],{"class":59,"line":33735},[57,60430,60431],{"class":140},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[57,60433,60434],{"class":59,"line":33741},[57,60435,60436],{"class":140},"    const slider = document.querySelector('.slider')\n",[57,60438,60439],{"class":59,"line":33758},[57,60440,60441],{"class":140},"    \u002F\u002F 注册事件\n",[57,60443,60444],{"class":59,"line":33764},[57,60445,60446],{"class":140},"    slider.addEventListener('mouseenter', function () {\n",[57,60448,60449],{"class":59,"line":33770},[57,60450,60451],{"class":140},"      \u002F\u002F 停止定时器\n",[57,60453,60454],{"class":59,"line":33776},[57,60455,60456],{"class":140},"      clearInterval(timerId)\n",[57,60458,60459],{"class":59,"line":33782},[57,60460,33658],{"class":140},[57,60462,60463],{"class":59,"line":33788},[57,60464,2673],{"emptyLinePlaceholder":350},[57,60466,60467],{"class":59,"line":33815},[57,60468,60469],{"class":140},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[57,60471,60472],{"class":59,"line":33839},[57,60473,60441],{"class":140},[57,60475,60476],{"class":59,"line":33845},[57,60477,60478],{"class":140},"    slider.addEventListener('mouseleave', function () {\n",[57,60480,60481],{"class":59,"line":33851},[57,60482,60451],{"class":140},[57,60484,60485],{"class":59,"line":33857},[57,60486,60487],{"class":140},"      if (timerId) clearInterval(timerId)\n",[57,60489,60490],{"class":59,"line":33868},[57,60491,60492],{"class":140},"      \u002F\u002F 开启定时器\n",[57,60494,60495],{"class":59,"line":33879},[57,60496,60497],{"class":140},"      timerId = setInterval(function () {\n",[57,60499,60500],{"class":59,"line":33885},[57,60501,60502],{"class":140},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[57,60504,60505],{"class":59,"line":33902},[57,60506,60507],{"class":140},"        next.click()\n",[57,60509,60510],{"class":59,"line":33925},[57,60511,60512],{"class":140},"      }, 1000)\n",[57,60514,60515],{"class":59,"line":33948},[57,60516,33658],{"class":140},[57,60518,60519,60521,60523],{"class":59,"line":33954},[57,60520,52614],{"class":140},[57,60522,52010],{"class":51497},[57,60524,51504],{"class":140},[57,60526,60527,60529,60531],{"class":59,"line":33959},[57,60528,51982],{"class":140},[57,60530,51997],{"class":51497},[57,60532,51504],{"class":140},[57,60534,60535],{"class":59,"line":33968},[57,60536,2673],{"emptyLinePlaceholder":350},[57,60538,60539,60541,60543],{"class":59,"line":33978},[57,60540,51982],{"class":140},[57,60542,50832],{"class":51497},[57,60544,51504],{"class":140},[22270,60546,60548],{"id":60547},"_3252-焦点事件","3.2.5.2 焦点事件",[14,60550,60551],{},"小米搜索框案例：",[49,60553,60555],{"className":50830,"code":60554,"language":50832,"meta":46,"style":46},"\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",[28,60556,60557,60567,60581,60585,60593,60607,60627,60647,60659,60667,60673,60683,60693,60705,60709,60713,60720,60724,60735,60739,60743,60750,60761,60774,60788,60792,60796,60805,60817,60829,60843,60856,60869,60887,60898,60902,60906,60915,60932,60936,60940,60947,60957,60967,60978,60991,61003,61019,61030,61042,61046,61050,61058,61069,61086,61098,61110,61121,61125,61129,61140,61151,61155,61163,61167,61175,61179,61187,61202,61225,61240,61271,61298,61325,61352,61379,61406,61433,61442,61450,61458,61463,61483,61503,61508,61513,61531,61536,61546,61551,61565,61570,61575,61592,61601,61613,61617,61625,61633,61637],{"__ignoreMap":46},[57,60558,60559,60561,60563,60565],{"class":59,"line":60},[57,60560,51494],{"class":140},[57,60562,51498],{"class":51497},[57,60564,51501],{"class":70},[57,60566,51504],{"class":140},[57,60568,60569,60571,60573,60575,60577,60579],{"class":59,"line":67},[57,60570,1326],{"class":140},[57,60572,50832],{"class":51497},[57,60574,51513],{"class":70},[57,60576,156],{"class":140},[57,60578,51518],{"class":74},[57,60580,51504],{"class":140},[57,60582,60583],{"class":59,"line":144},[57,60584,2673],{"emptyLinePlaceholder":350},[57,60586,60587,60589,60591],{"class":59,"line":150},[57,60588,1326],{"class":140},[57,60590,51531],{"class":51497},[57,60592,51504],{"class":140},[57,60594,60595,60597,60599,60601,60603,60605],{"class":59,"line":162},[57,60596,51538],{"class":140},[57,60598,51541],{"class":51497},[57,60600,51544],{"class":70},[57,60602,156],{"class":140},[57,60604,51549],{"class":74},[57,60606,51504],{"class":140},[57,60608,60609,60611,60613,60615,60617,60619,60621,60623,60625],{"class":59,"line":180},[57,60610,51538],{"class":140},[57,60612,51541],{"class":51497},[57,60614,51560],{"class":70},[57,60616,156],{"class":140},[57,60618,51565],{"class":74},[57,60620,51568],{"class":70},[57,60622,156],{"class":140},[57,60624,51573],{"class":74},[57,60626,51504],{"class":140},[57,60628,60629,60631,60633,60635,60637,60639,60641,60643,60645],{"class":59,"line":186},[57,60630,51538],{"class":140},[57,60632,51541],{"class":51497},[57,60634,15192],{"class":70},[57,60636,156],{"class":140},[57,60638,51588],{"class":74},[57,60640,51568],{"class":70},[57,60642,156],{"class":140},[57,60644,51595],{"class":74},[57,60646,51504],{"class":140},[57,60648,60649,60651,60653,60655,60657],{"class":59,"line":197},[57,60650,51538],{"class":140},[57,60652,51604],{"class":51497},[57,60654,51607],{"class":140},[57,60656,51604],{"class":51497},[57,60658,51504],{"class":140},[57,60660,60661,60663,60665],{"class":59,"line":241},[57,60662,51538],{"class":140},[57,60664,342],{"class":51497},[57,60666,51504],{"class":140},[57,60668,60669,60671],{"class":59,"line":249},[57,60670,51624],{"class":51497},[57,60672,15844],{"class":140},[57,60674,60675,60677,60679,60681],{"class":59,"line":262},[57,60676,51631],{"class":81},[57,60678,51634],{"class":140},[57,60680,226],{"class":81},[57,60682,1576],{"class":140},[57,60684,60685,60687,60689,60691],{"class":59,"line":281},[57,60686,51643],{"class":81},[57,60688,51634],{"class":140},[57,60690,226],{"class":81},[57,60692,1576],{"class":140},[57,60694,60695,60698,60700,60703],{"class":59,"line":287},[57,60696,60697],{"class":81},"            box-sizing",[57,60699,51634],{"class":140},[57,60701,60702],{"class":81},"border-box",[57,60704,1576],{"class":140},[57,60706,60707],{"class":59,"line":298},[57,60708,2802],{"class":140},[57,60710,60711],{"class":59,"line":311},[57,60712,2673],{"emptyLinePlaceholder":350},[57,60714,60715,60718],{"class":59,"line":322},[57,60716,60717],{"class":51497},"        ul",[57,60719,15844],{"class":140},[57,60721,60722],{"class":59,"line":1929},[57,60723,2673],{"emptyLinePlaceholder":350},[57,60725,60726,60729,60731,60733],{"class":59,"line":1950},[57,60727,60728],{"class":81},"            list-style",[57,60730,51634],{"class":140},[57,60732,54934],{"class":81},[57,60734,1576],{"class":140},[57,60736,60737],{"class":59,"line":1955},[57,60738,2802],{"class":140},[57,60740,60741],{"class":59,"line":1969},[57,60742,2673],{"emptyLinePlaceholder":350},[57,60744,60745,60748],{"class":59,"line":1974},[57,60746,60747],{"class":70},"        .mi",[57,60749,15844],{"class":140},[57,60751,60752,60755,60757,60759],{"class":59,"line":2001},[57,60753,60754],{"class":81},"            position",[57,60756,51634],{"class":140},[57,60758,54961],{"class":81},[57,60760,1576],{"class":140},[57,60762,60763,60765,60767,60770,60772],{"class":59,"line":2006},[57,60764,51681],{"class":81},[57,60766,51634],{"class":140},[57,60768,60769],{"class":81},"223",[57,60771,51689],{"class":136},[57,60773,1576],{"class":140},[57,60775,60776,60778,60780,60782,60784,60786],{"class":59,"line":2023},[57,60777,51631],{"class":81},[57,60779,51634],{"class":140},[57,60781,728],{"class":81},[57,60783,51689],{"class":136},[57,60785,51753],{"class":81},[57,60787,1576],{"class":140},[57,60789,60790],{"class":59,"line":2028},[57,60791,2802],{"class":140},[57,60793,60794],{"class":59,"line":2033},[57,60795,2673],{"emptyLinePlaceholder":350},[57,60797,60798,60800,60803],{"class":59,"line":2038},[57,60799,60747],{"class":70},[57,60801,60802],{"class":51497}," input",[57,60804,15844],{"class":140},[57,60806,60807,60809,60811,60813,60815],{"class":59,"line":2052},[57,60808,51681],{"class":81},[57,60810,51634],{"class":140},[57,60812,60769],{"class":81},[57,60814,51689],{"class":136},[57,60816,1576],{"class":140},[57,60818,60819,60821,60823,60825,60827],{"class":59,"line":2057},[57,60820,51696],{"class":81},[57,60822,51634],{"class":140},[57,60824,1023],{"class":81},[57,60826,51689],{"class":136},[57,60828,1576],{"class":140},[57,60830,60831,60833,60835,60837,60839,60841],{"class":59,"line":2850},[57,60832,51643],{"class":81},[57,60834,51634],{"class":140},[57,60836,226],{"class":81},[57,60838,2311],{"class":81},[57,60840,51689],{"class":136},[57,60842,1576],{"class":140},[57,60844,60845,60848,60850,60852,60854],{"class":59,"line":2864},[57,60846,60847],{"class":81},"            font-size",[57,60849,51634],{"class":140},[57,60851,965],{"class":81},[57,60853,51689],{"class":136},[57,60855,1576],{"class":140},[57,60857,60858,60861,60863,60865,60867],{"class":59,"line":2872},[57,60859,60860],{"class":81},"            line-height",[57,60862,51634],{"class":140},[57,60864,1023],{"class":81},[57,60866,51689],{"class":136},[57,60868,1576],{"class":140},[57,60870,60871,60874,60876,60878,60880,60882,60885],{"class":59,"line":2877},[57,60872,60873],{"class":81},"            border",[57,60875,51634],{"class":140},[57,60877,635],{"class":81},[57,60879,51689],{"class":136},[57,60881,51718],{"class":81},[57,60883,60884],{"class":81}," #e0e0e0",[57,60886,1576],{"class":140},[57,60888,60889,60892,60894,60896],{"class":59,"line":2883},[57,60890,60891],{"class":81},"            outline",[57,60893,51634],{"class":140},[57,60895,54934],{"class":81},[57,60897,1576],{"class":140},[57,60899,60900],{"class":59,"line":2889},[57,60901,2802],{"class":140},[57,60903,60904],{"class":59,"line":2894},[57,60905,2673],{"emptyLinePlaceholder":350},[57,60907,60908,60910,60913],{"class":59,"line":8221},[57,60909,60747],{"class":70},[57,60911,60912],{"class":70}," .search",[57,60914,15844],{"class":140},[57,60916,60917,60919,60921,60923,60925,60927,60930],{"class":59,"line":8245},[57,60918,60873],{"class":81},[57,60920,51634],{"class":140},[57,60922,635],{"class":81},[57,60924,51689],{"class":136},[57,60926,51718],{"class":81},[57,60928,60929],{"class":81}," #ff6700",[57,60931,1576],{"class":140},[57,60933,60934],{"class":59,"line":8250},[57,60935,2802],{"class":140},[57,60937,60938],{"class":59,"line":8256},[57,60939,2673],{"emptyLinePlaceholder":350},[57,60941,60942,60945],{"class":59,"line":8283},[57,60943,60944],{"class":70},"        .result-list",[57,60946,15844],{"class":140},[57,60948,60949,60951,60953,60955],{"class":59,"line":8288},[57,60950,51669],{"class":81},[57,60952,51634],{"class":140},[57,60954,54934],{"class":81},[57,60956,1576],{"class":140},[57,60958,60959,60961,60963,60965],{"class":59,"line":8294},[57,60960,60754],{"class":81},[57,60962,51634],{"class":140},[57,60964,55028],{"class":81},[57,60966,1576],{"class":140},[57,60968,60969,60972,60974,60976],{"class":59,"line":8306},[57,60970,60971],{"class":81},"            left",[57,60973,51634],{"class":140},[57,60975,226],{"class":81},[57,60977,1576],{"class":140},[57,60979,60980,60983,60985,60987,60989],{"class":59,"line":8318},[57,60981,60982],{"class":81},"            top",[57,60984,51634],{"class":140},[57,60986,1023],{"class":81},[57,60988,51689],{"class":136},[57,60990,1576],{"class":140},[57,60992,60993,60995,60997,60999,61001],{"class":59,"line":8330},[57,60994,51681],{"class":81},[57,60996,51634],{"class":140},[57,60998,60769],{"class":81},[57,61000,51689],{"class":136},[57,61002,1576],{"class":140},[57,61004,61005,61007,61009,61011,61013,61015,61017],{"class":59,"line":9989},[57,61006,60873],{"class":81},[57,61008,51634],{"class":140},[57,61010,635],{"class":81},[57,61012,51689],{"class":136},[57,61014,51718],{"class":81},[57,61016,60929],{"class":81},[57,61018,1576],{"class":140},[57,61020,61021,61024,61026,61028],{"class":59,"line":10014},[57,61022,61023],{"class":81},"            border-top",[57,61025,51634],{"class":140},[57,61027,226],{"class":81},[57,61029,1576],{"class":140},[57,61031,61032,61035,61037,61040],{"class":59,"line":10037},[57,61033,61034],{"class":81},"            background",[57,61036,51634],{"class":140},[57,61038,61039],{"class":81},"#fff",[57,61041,1576],{"class":140},[57,61043,61044],{"class":59,"line":10061},[57,61045,2802],{"class":140},[57,61047,61048],{"class":59,"line":10066},[57,61049,2673],{"emptyLinePlaceholder":350},[57,61051,61052,61054,61056],{"class":59,"line":10071},[57,61053,60944],{"class":70},[57,61055,1681],{"class":51497},[57,61057,15844],{"class":140},[57,61059,61060,61062,61064,61067],{"class":59,"line":10076},[57,61061,51669],{"class":81},[57,61063,51634],{"class":140},[57,61065,61066],{"class":81},"block",[57,61068,1576],{"class":140},[57,61070,61071,61073,61075,61077,61079,61082,61084],{"class":59,"line":10085},[57,61072,51643],{"class":81},[57,61074,51634],{"class":140},[57,61076,761],{"class":81},[57,61078,51689],{"class":136},[57,61080,61081],{"class":81}," 15",[57,61083,51689],{"class":136},[57,61085,1576],{"class":140},[57,61087,61088,61090,61092,61094,61096],{"class":59,"line":10090},[57,61089,60847],{"class":81},[57,61091,51634],{"class":140},[57,61093,914],{"class":81},[57,61095,51689],{"class":136},[57,61097,1576],{"class":140},[57,61099,61100,61103,61105,61108],{"class":59,"line":10096},[57,61101,61102],{"class":81},"            color",[57,61104,51634],{"class":140},[57,61106,61107],{"class":81},"#424242",[57,61109,1576],{"class":140},[57,61111,61112,61115,61117,61119],{"class":59,"line":10117},[57,61113,61114],{"class":81},"            text-decoration",[57,61116,51634],{"class":140},[57,61118,54934],{"class":81},[57,61120,1576],{"class":140},[57,61122,61123],{"class":59,"line":10123},[57,61124,2802],{"class":140},[57,61126,61127],{"class":59,"line":10137},[57,61128,2673],{"emptyLinePlaceholder":350},[57,61130,61131,61133,61135,61138],{"class":59,"line":10143},[57,61132,60944],{"class":70},[57,61134,1681],{"class":51497},[57,61136,61137],{"class":70},":hover",[57,61139,15844],{"class":140},[57,61141,61142,61144,61146,61149],{"class":59,"line":10170},[57,61143,51837],{"class":81},[57,61145,51634],{"class":140},[57,61147,61148],{"class":81},"#eee",[57,61150,1576],{"class":140},[57,61152,61153],{"class":59,"line":10179},[57,61154,2802],{"class":140},[57,61156,61157,61159,61161],{"class":59,"line":10185},[57,61158,51973],{"class":140},[57,61160,342],{"class":51497},[57,61162,51504],{"class":140},[57,61164,61165],{"class":59,"line":10193},[57,61166,2673],{"emptyLinePlaceholder":350},[57,61168,61169,61171,61173],{"class":59,"line":10198},[57,61170,51982],{"class":140},[57,61172,51531],{"class":51497},[57,61174,51504],{"class":140},[57,61176,61177],{"class":59,"line":16876},[57,61178,2673],{"emptyLinePlaceholder":350},[57,61180,61181,61183,61185],{"class":59,"line":16882},[57,61182,1326],{"class":140},[57,61184,51997],{"class":51497},[57,61186,51504],{"class":140},[57,61188,61189,61191,61193,61195,61197,61200],{"class":59,"line":16905},[57,61190,51538],{"class":140},[57,61192,51808],{"class":51497},[57,61194,53683],{"class":70},[57,61196,156],{"class":140},[57,61198,61199],{"class":74},"\"mi\"",[57,61201,51504],{"class":140},[57,61203,61204,61206,61208,61210,61212,61215,61218,61220,61223],{"class":59,"line":16911},[57,61205,55499],{"class":140},[57,61207,54018],{"class":51497},[57,61209,54021],{"class":70},[57,61211,156],{"class":140},[57,61213,61214],{"class":74},"\"search\"",[57,61216,61217],{"class":70}," placeholder",[57,61219,156],{"class":140},[57,61221,61222],{"class":74},"\"小米笔记本\"",[57,61224,51504],{"class":140},[57,61226,61227,61229,61231,61233,61235,61238],{"class":59,"line":16934},[57,61228,55499],{"class":140},[57,61230,1422],{"class":51497},[57,61232,53683],{"class":70},[57,61234,156],{"class":140},[57,61236,61237],{"class":74},"\"result-list\"",[57,61239,51504],{"class":140},[57,61241,61242,61245,61247,61250,61252,61255,61257,61260,61263,61265,61267,61269],{"class":59,"line":16948},[57,61243,61244],{"class":140},"            \u003C",[57,61246,380],{"class":51497},[57,61248,61249],{"class":140},">\u003C",[57,61251,18],{"class":51497},[57,61253,61254],{"class":70}," href",[57,61256,156],{"class":140},[57,61258,61259],{"class":74},"\"#\"",[57,61261,61262],{"class":140},">全部商品\u003C\u002F",[57,61264,18],{"class":51497},[57,61266,55511],{"class":140},[57,61268,380],{"class":51497},[57,61270,51504],{"class":140},[57,61272,61273,61275,61277,61279,61281,61283,61285,61287,61290,61292,61294,61296],{"class":59,"line":16968},[57,61274,61244],{"class":140},[57,61276,380],{"class":51497},[57,61278,61249],{"class":140},[57,61280,18],{"class":51497},[57,61282,61254],{"class":70},[57,61284,156],{"class":140},[57,61286,61259],{"class":74},[57,61288,61289],{"class":140},">小米11\u003C\u002F",[57,61291,18],{"class":51497},[57,61293,55511],{"class":140},[57,61295,380],{"class":51497},[57,61297,51504],{"class":140},[57,61299,61300,61302,61304,61306,61308,61310,61312,61314,61317,61319,61321,61323],{"class":59,"line":16974},[57,61301,61244],{"class":140},[57,61303,380],{"class":51497},[57,61305,61249],{"class":140},[57,61307,18],{"class":51497},[57,61309,61254],{"class":70},[57,61311,156],{"class":140},[57,61313,61259],{"class":74},[57,61315,61316],{"class":140},">小米10S\u003C\u002F",[57,61318,18],{"class":51497},[57,61320,55511],{"class":140},[57,61322,380],{"class":51497},[57,61324,51504],{"class":140},[57,61326,61327,61329,61331,61333,61335,61337,61339,61341,61344,61346,61348,61350],{"class":59,"line":16985},[57,61328,61244],{"class":140},[57,61330,380],{"class":51497},[57,61332,61249],{"class":140},[57,61334,18],{"class":51497},[57,61336,61254],{"class":70},[57,61338,156],{"class":140},[57,61340,61259],{"class":74},[57,61342,61343],{"class":140},">小米笔记本\u003C\u002F",[57,61345,18],{"class":51497},[57,61347,55511],{"class":140},[57,61349,380],{"class":51497},[57,61351,51504],{"class":140},[57,61353,61354,61356,61358,61360,61362,61364,61366,61368,61371,61373,61375,61377],{"class":59,"line":17008},[57,61355,61244],{"class":140},[57,61357,380],{"class":51497},[57,61359,61249],{"class":140},[57,61361,18],{"class":51497},[57,61363,61254],{"class":70},[57,61365,156],{"class":140},[57,61367,61259],{"class":74},[57,61369,61370],{"class":140},">小米手机\u003C\u002F",[57,61372,18],{"class":51497},[57,61374,55511],{"class":140},[57,61376,380],{"class":51497},[57,61378,51504],{"class":140},[57,61380,61381,61383,61385,61387,61389,61391,61393,61395,61398,61400,61402,61404],{"class":59,"line":17030},[57,61382,61244],{"class":140},[57,61384,380],{"class":51497},[57,61386,61249],{"class":140},[57,61388,18],{"class":51497},[57,61390,61254],{"class":70},[57,61392,156],{"class":140},[57,61394,61259],{"class":74},[57,61396,61397],{"class":140},">黑鲨4\u003C\u002F",[57,61399,18],{"class":51497},[57,61401,55511],{"class":140},[57,61403,380],{"class":51497},[57,61405,51504],{"class":140},[57,61407,61408,61410,61412,61414,61416,61418,61420,61422,61425,61427,61429,61431],{"class":59,"line":17035},[57,61409,61244],{"class":140},[57,61411,380],{"class":51497},[57,61413,61249],{"class":140},[57,61415,18],{"class":51497},[57,61417,61254],{"class":70},[57,61419,156],{"class":140},[57,61421,61259],{"class":74},[57,61423,61424],{"class":140},">空调\u003C\u002F",[57,61426,18],{"class":51497},[57,61428,55511],{"class":140},[57,61430,380],{"class":51497},[57,61432,51504],{"class":140},[57,61434,61435,61438,61440],{"class":59,"line":17041},[57,61436,61437],{"class":140},"        \u003C\u002F",[57,61439,1422],{"class":51497},[57,61441,51504],{"class":140},[57,61443,61444,61446,61448],{"class":59,"line":17055},[57,61445,51973],{"class":140},[57,61447,51808],{"class":51497},[57,61449,51504],{"class":140},[57,61451,61452,61454,61456],{"class":59,"line":17068},[57,61453,51538],{"class":140},[57,61455,52010],{"class":51497},[57,61457,51504],{"class":140},[57,61459,61460],{"class":59,"line":17073},[57,61461,61462],{"class":63},"        \u002F\u002F 1. 获取元素\n",[57,61464,61465,61468,61470,61472,61474,61476,61478,61481],{"class":59,"line":17087},[57,61466,61467],{"class":136},"        const",[57,61469,60802],{"class":81},[57,61471,13837],{"class":136},[57,61473,54593],{"class":140},[57,61475,54596],{"class":70},[57,61477,168],{"class":140},[57,61479,61480],{"class":74},"'[type=search]'",[57,61482,238],{"class":140},[57,61484,61485,61487,61490,61492,61494,61496,61498,61501],{"class":59,"line":17092},[57,61486,61467],{"class":136},[57,61488,61489],{"class":81}," ul",[57,61491,13837],{"class":136},[57,61493,54593],{"class":140},[57,61495,54596],{"class":70},[57,61497,168],{"class":140},[57,61499,61500],{"class":74},"'.result-list'",[57,61502,238],{"class":140},[57,61504,61505],{"class":59,"line":17098},[57,61506,61507],{"class":63},"        \u002F\u002F console.log(input)\n",[57,61509,61510],{"class":59,"line":17103},[57,61511,61512],{"class":63},"        \u002F\u002F 2. 监听事件 获得焦点\n",[57,61514,61515,61518,61520,61522,61525,61527,61529],{"class":59,"line":17117},[57,61516,61517],{"class":140},"        input.",[57,61519,58010],{"class":70},[57,61521,168],{"class":140},[57,61523,61524],{"class":74},"'focus'",[57,61526,12708],{"class":140},[57,61528,54646],{"class":136},[57,61530,54649],{"class":140},[57,61532,61533],{"class":59,"line":17122},[57,61534,61535],{"class":63},"            \u002F\u002F ul显示\n",[57,61537,61538,61541,61543],{"class":59,"line":17127},[57,61539,61540],{"class":140},"            ul.style.display ",[57,61542,156],{"class":136},[57,61544,61545],{"class":74}," 'block'\n",[57,61547,61548],{"class":59,"line":17141},[57,61549,61550],{"class":63},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[57,61552,61553,61556,61558,61560,61563],{"class":59,"line":17153},[57,61554,61555],{"class":140},"            input.classList.",[57,61557,5607],{"class":70},[57,61559,168],{"class":140},[57,61561,61562],{"class":74},"'search'",[57,61564,238],{"class":140},[57,61566,61567],{"class":59,"line":17158},[57,61568,61569],{"class":140},"        })\n",[57,61571,61572],{"class":59,"line":17171},[57,61573,61574],{"class":63},"        \u002F\u002F 3. 监听事件 失去焦点\n",[57,61576,61577,61579,61581,61583,61586,61588,61590],{"class":59,"line":17176},[57,61578,61517],{"class":140},[57,61580,58010],{"class":70},[57,61582,168],{"class":140},[57,61584,61585],{"class":74},"'blur'",[57,61587,12708],{"class":140},[57,61589,54646],{"class":136},[57,61591,54649],{"class":140},[57,61593,61594,61596,61598],{"class":59,"line":17181},[57,61595,61540],{"class":140},[57,61597,156],{"class":136},[57,61599,61600],{"class":74}," 'none'\n",[57,61602,61603,61605,61607,61609,61611],{"class":59,"line":17186},[57,61604,61555],{"class":140},[57,61606,57203],{"class":70},[57,61608,168],{"class":140},[57,61610,61562],{"class":74},[57,61612,238],{"class":140},[57,61614,61615],{"class":59,"line":17199},[57,61616,61569],{"class":140},[57,61618,61619,61621,61623],{"class":59,"line":17204},[57,61620,51973],{"class":140},[57,61622,52010],{"class":51497},[57,61624,51504],{"class":140},[57,61626,61627,61629,61631],{"class":59,"line":32830},[57,61628,51982],{"class":140},[57,61630,51997],{"class":51497},[57,61632,51504],{"class":140},[57,61634,61635],{"class":59,"line":32836},[57,61636,2673],{"emptyLinePlaceholder":350},[57,61638,61639,61641,61643],{"class":59,"line":32842},[57,61640,51982],{"class":140},[57,61642,50832],{"class":51497},[57,61644,51504],{"class":140},[22270,61646,61648],{"id":61647},"_3253-键盘事件","3.2.5.3 键盘事件",[14,61650,61651],{},"评论字数统计案例",[14,61653,61654],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,61656,61657],{},"牢记focus伪类选择器",[51541,61659],{"charSet":61660},"UTF-8",[51541,61662],{"name":61663,"content":61664},"viewport","width=device-width, initial-scale=1.0",[51604,61666,61667],{},"Document",[342,61669,61670],{},"\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",[54018,61672],{"type":5460},[1422,61674,61675,61678],{},[380,61676,61677],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[380,61679,61680],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[49,61682,61684],{"className":50830,"code":61683,"language":50832,"meta":46,"style":46},"\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",[28,61685,61686,61696,61710,61714,61722,61736,61756,61776,61789,61797,61804,61817,61831,61841,61851,61855,61859,61866,61878,61890,61902,61914,61943,61956,61960,61964,61973,61984,61996,62007,62018,62030,62041,62053,62069,62081,62085,62089,62100,62111,62121,62133,62137,62141,62149,62160,62170,62181,62193,62206,62218,62230,62234,62238,62247,62259,62270,62283,62294,62308,62312,62316,62323,62335,62347,62357,62361,62365,62374,62386,62396,62400,62404,62415,62425,62444,62457,62461,62465,62475,62485,62489,62493,62504,62515,62527,62539,62543,62547,62558,62569,62583,62587,62591,62602,62612,62624,62628,62636,62644,62648,62656,62671,62690,62730,62743,62751,62765,62785,62793,62808,62831,62849,62864,62884,62904,62924,62932,62940,62948,62956,62976,62996,63001,63018,63027,63031,63036,63052,63060,63064,63069,63086,63091,63116,63120,63124,63129,63134,63142,63150,63154],{"__ignoreMap":46},[57,61687,61688,61690,61692,61694],{"class":59,"line":60},[57,61689,51494],{"class":140},[57,61691,51498],{"class":51497},[57,61693,51501],{"class":70},[57,61695,51504],{"class":140},[57,61697,61698,61700,61702,61704,61706,61708],{"class":59,"line":67},[57,61699,1326],{"class":140},[57,61701,50832],{"class":51497},[57,61703,51513],{"class":70},[57,61705,156],{"class":140},[57,61707,51518],{"class":74},[57,61709,51504],{"class":140},[57,61711,61712],{"class":59,"line":144},[57,61713,2673],{"emptyLinePlaceholder":350},[57,61715,61716,61718,61720],{"class":59,"line":150},[57,61717,1326],{"class":140},[57,61719,51531],{"class":51497},[57,61721,51504],{"class":140},[57,61723,61724,61726,61728,61730,61732,61734],{"class":59,"line":162},[57,61725,52341],{"class":140},[57,61727,51541],{"class":51497},[57,61729,51544],{"class":70},[57,61731,156],{"class":140},[57,61733,51549],{"class":74},[57,61735,51504],{"class":140},[57,61737,61738,61740,61742,61744,61746,61748,61750,61752,61754],{"class":59,"line":180},[57,61739,52341],{"class":140},[57,61741,51541],{"class":51497},[57,61743,51560],{"class":70},[57,61745,156],{"class":140},[57,61747,51565],{"class":74},[57,61749,51568],{"class":70},[57,61751,156],{"class":140},[57,61753,51573],{"class":74},[57,61755,51504],{"class":140},[57,61757,61758,61760,61762,61764,61766,61768,61770,61772,61774],{"class":59,"line":186},[57,61759,52341],{"class":140},[57,61761,51541],{"class":51497},[57,61763,15192],{"class":70},[57,61765,156],{"class":140},[57,61767,51588],{"class":74},[57,61769,51568],{"class":70},[57,61771,156],{"class":140},[57,61773,51595],{"class":74},[57,61775,51504],{"class":140},[57,61777,61778,61780,61782,61785,61787],{"class":59,"line":197},[57,61779,52341],{"class":140},[57,61781,51604],{"class":51497},[57,61783,61784],{"class":140},">评论回车发布\u003C\u002F",[57,61786,51604],{"class":51497},[57,61788,51504],{"class":140},[57,61790,61791,61793,61795],{"class":59,"line":241},[57,61792,52341],{"class":140},[57,61794,342],{"class":51497},[57,61796,51504],{"class":140},[57,61798,61799,61802],{"class":59,"line":249},[57,61800,61801],{"class":70},"    .wrapper",[57,61803,15844],{"class":140},[57,61805,61806,61809,61811,61813,61815],{"class":59,"line":262},[57,61807,61808],{"class":81},"      min-width",[57,61810,51634],{"class":140},[57,61812,4260],{"class":81},[57,61814,51689],{"class":136},[57,61816,1576],{"class":140},[57,61818,61819,61822,61824,61827,61829],{"class":59,"line":281},[57,61820,61821],{"class":81},"      max-width",[57,61823,51634],{"class":140},[57,61825,61826],{"class":81},"800",[57,61828,51689],{"class":136},[57,61830,1576],{"class":140},[57,61832,61833,61835,61837,61839],{"class":59,"line":287},[57,61834,55206],{"class":81},[57,61836,51634],{"class":140},[57,61838,51674],{"class":81},[57,61840,1576],{"class":140},[57,61842,61843,61845,61847,61849],{"class":59,"line":298},[57,61844,55217],{"class":81},[57,61846,51634],{"class":140},[57,61848,51777],{"class":81},[57,61850,1576],{"class":140},[57,61852,61853],{"class":59,"line":311},[57,61854,2460],{"class":140},[57,61856,61857],{"class":59,"line":322},[57,61858,2673],{"emptyLinePlaceholder":350},[57,61860,61861,61864],{"class":59,"line":1929},[57,61862,61863],{"class":70},"    .avatar",[57,61865,15844],{"class":140},[57,61867,61868,61870,61872,61874,61876],{"class":59,"line":1950},[57,61869,54968],{"class":81},[57,61871,51634],{"class":140},[57,61873,1023],{"class":81},[57,61875,51689],{"class":136},[57,61877,1576],{"class":140},[57,61879,61880,61882,61884,61886,61888],{"class":59,"line":1955},[57,61881,54982],{"class":81},[57,61883,51634],{"class":140},[57,61885,1023],{"class":81},[57,61887,51689],{"class":136},[57,61889,1576],{"class":140},[57,61891,61892,61894,61896,61898,61900],{"class":59,"line":1969},[57,61893,55331],{"class":81},[57,61895,51634],{"class":140},[57,61897,1072],{"class":81},[57,61899,745],{"class":136},[57,61901,1576],{"class":140},[57,61903,61904,61907,61909,61912],{"class":59,"line":1974},[57,61905,61906],{"class":81},"      overflow",[57,61908,51634],{"class":140},[57,61910,61911],{"class":81},"hidden",[57,61913,1576],{"class":140},[57,61915,61916,61919,61921,61924,61926,61929,61931,61934,61936,61938,61941],{"class":59,"line":2001},[57,61917,61918],{"class":81},"      background",[57,61920,51634],{"class":140},[57,61922,61923],{"class":81},"url",[57,61925,168],{"class":140},[57,61927,61928],{"class":5489},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[57,61930,229],{"class":140},[57,61932,61933],{"class":81},"no-repeat",[57,61935,17416],{"class":81},[57,61937,25247],{"class":140},[57,61939,61940],{"class":81},"cover",[57,61942,1576],{"class":140},[57,61944,61945,61948,61950,61952,61954],{"class":59,"line":2006},[57,61946,61947],{"class":81},"      margin-right",[57,61949,51634],{"class":140},[57,61951,1116],{"class":81},[57,61953,51689],{"class":136},[57,61955,1576],{"class":140},[57,61957,61958],{"class":59,"line":2023},[57,61959,2460],{"class":140},[57,61961,61962],{"class":59,"line":2028},[57,61963,2673],{"emptyLinePlaceholder":350},[57,61965,61966,61968,61971],{"class":59,"line":2033},[57,61967,61801],{"class":70},[57,61969,61970],{"class":51497}," textarea",[57,61972,15844],{"class":140},[57,61974,61975,61978,61980,61982],{"class":59,"line":2038},[57,61976,61977],{"class":81},"      outline",[57,61979,51634],{"class":140},[57,61981,54934],{"class":81},[57,61983,1576],{"class":140},[57,61985,61986,61989,61991,61994],{"class":59,"line":2052},[57,61987,61988],{"class":81},"      border-color",[57,61990,51634],{"class":140},[57,61992,61993],{"class":81},"transparent",[57,61995,1576],{"class":140},[57,61997,61998,62001,62003,62005],{"class":59,"line":2057},[57,61999,62000],{"class":81},"      resize",[57,62002,51634],{"class":140},[57,62004,54934],{"class":81},[57,62006,1576],{"class":140},[57,62008,62009,62011,62013,62016],{"class":59,"line":2850},[57,62010,61918],{"class":81},[57,62012,51634],{"class":140},[57,62014,62015],{"class":81},"#f5f5f5",[57,62017,1576],{"class":140},[57,62019,62020,62022,62024,62026,62028],{"class":59,"line":2864},[57,62021,55331],{"class":81},[57,62023,51634],{"class":140},[57,62025,710],{"class":81},[57,62027,51689],{"class":136},[57,62029,1576],{"class":140},[57,62031,62032,62035,62037,62039],{"class":59,"line":2872},[57,62033,62034],{"class":81},"      flex",[57,62036,51634],{"class":140},[57,62038,635],{"class":81},[57,62040,1576],{"class":140},[57,62042,62043,62045,62047,62049,62051],{"class":59,"line":2877},[57,62044,54892],{"class":81},[57,62046,51634],{"class":140},[57,62048,862],{"class":81},[57,62050,51689],{"class":136},[57,62052,1576],{"class":140},[57,62054,62055,62058,62060,62062,62065,62067],{"class":59,"line":2883},[57,62056,62057],{"class":81},"      transition",[57,62059,51634],{"class":140},[57,62061,28390],{"class":81},[57,62063,62064],{"class":81}," 0.5",[57,62066,1111],{"class":136},[57,62068,1576],{"class":140},[57,62070,62071,62073,62075,62077,62079],{"class":59,"line":2889},[57,62072,54982],{"class":81},[57,62074,51634],{"class":140},[57,62076,1367],{"class":81},[57,62078,51689],{"class":136},[57,62080,1576],{"class":140},[57,62082,62083],{"class":59,"line":2894},[57,62084,2460],{"class":140},[57,62086,62087],{"class":59,"line":8221},[57,62088,2673],{"emptyLinePlaceholder":350},[57,62090,62091,62093,62095,62098],{"class":59,"line":8245},[57,62092,61801],{"class":70},[57,62094,61970],{"class":51497},[57,62096,62097],{"class":70},":focus",[57,62099,15844],{"class":140},[57,62101,62102,62104,62106,62109],{"class":59,"line":8250},[57,62103,61988],{"class":81},[57,62105,51634],{"class":140},[57,62107,62108],{"class":81},"#e4e4e4",[57,62110,1576],{"class":140},[57,62112,62113,62115,62117,62119],{"class":59,"line":8256},[57,62114,61918],{"class":81},[57,62116,51634],{"class":140},[57,62118,61039],{"class":81},[57,62120,1576],{"class":140},[57,62122,62123,62125,62127,62129,62131],{"class":59,"line":8283},[57,62124,54982],{"class":81},[57,62126,51634],{"class":140},[57,62128,1072],{"class":81},[57,62130,51689],{"class":136},[57,62132,1576],{"class":140},[57,62134,62135],{"class":59,"line":8288},[57,62136,2460],{"class":140},[57,62138,62139],{"class":59,"line":8294},[57,62140,2673],{"emptyLinePlaceholder":350},[57,62142,62143,62145,62147],{"class":59,"line":8306},[57,62144,61801],{"class":70},[57,62146,57664],{"class":51497},[57,62148,15844],{"class":140},[57,62150,62151,62153,62155,62158],{"class":59,"line":8318},[57,62152,61918],{"class":81},[57,62154,51634],{"class":140},[57,62156,62157],{"class":81},"#00aeec",[57,62159,1576],{"class":140},[57,62161,62162,62164,62166,62168],{"class":59,"line":8330},[57,62163,57613],{"class":81},[57,62165,51634],{"class":140},[57,62167,61039],{"class":81},[57,62169,1576],{"class":140},[57,62171,62172,62175,62177,62179],{"class":59,"line":9989},[57,62173,62174],{"class":81},"      border",[57,62176,51634],{"class":140},[57,62178,54934],{"class":81},[57,62180,1576],{"class":140},[57,62182,62183,62185,62187,62189,62191],{"class":59,"line":10014},[57,62184,55331],{"class":81},[57,62186,51634],{"class":140},[57,62188,710],{"class":81},[57,62190,51689],{"class":136},[57,62192,1576],{"class":140},[57,62194,62195,62198,62200,62202,62204],{"class":59,"line":10037},[57,62196,62197],{"class":81},"      margin-left",[57,62199,51634],{"class":140},[57,62201,862],{"class":81},[57,62203,51689],{"class":136},[57,62205,1576],{"class":140},[57,62207,62208,62210,62212,62214,62216],{"class":59,"line":10061},[57,62209,54968],{"class":81},[57,62211,51634],{"class":140},[57,62213,773],{"class":81},[57,62215,51689],{"class":136},[57,62217,1576],{"class":140},[57,62219,62220,62223,62225,62228],{"class":59,"line":10066},[57,62221,62222],{"class":81},"      cursor",[57,62224,51634],{"class":140},[57,62226,62227],{"class":81},"pointer",[57,62229,1576],{"class":140},[57,62231,62232],{"class":59,"line":10071},[57,62233,2460],{"class":140},[57,62235,62236],{"class":59,"line":10076},[57,62237,2673],{"emptyLinePlaceholder":350},[57,62239,62240,62242,62245],{"class":59,"line":10085},[57,62241,61801],{"class":70},[57,62243,62244],{"class":70}," .total",[57,62246,15844],{"class":140},[57,62248,62249,62251,62253,62255,62257],{"class":59,"line":10090},[57,62250,61947],{"class":81},[57,62252,51634],{"class":140},[57,62254,1028],{"class":81},[57,62256,51689],{"class":136},[57,62258,1576],{"class":140},[57,62260,62261,62263,62265,62268],{"class":59,"line":10096},[57,62262,57613],{"class":81},[57,62264,51634],{"class":140},[57,62266,62267],{"class":81},"#999",[57,62269,1576],{"class":140},[57,62271,62272,62275,62277,62279,62281],{"class":59,"line":10117},[57,62273,62274],{"class":81},"      margin-top",[57,62276,51634],{"class":140},[57,62278,736],{"class":81},[57,62280,51689],{"class":136},[57,62282,1576],{"class":140},[57,62284,62285,62288,62290,62292],{"class":59,"line":10123},[57,62286,62287],{"class":81},"      opacity",[57,62289,51634],{"class":140},[57,62291,226],{"class":81},[57,62293,1576],{"class":140},[57,62295,62296,62298,62300,62302,62304,62306],{"class":59,"line":10137},[57,62297,62057],{"class":81},[57,62299,51634],{"class":140},[57,62301,28390],{"class":81},[57,62303,62064],{"class":81},[57,62305,1111],{"class":136},[57,62307,1576],{"class":140},[57,62309,62310],{"class":59,"line":10143},[57,62311,2460],{"class":140},[57,62313,62314],{"class":59,"line":10170},[57,62315,2673],{"emptyLinePlaceholder":350},[57,62317,62318,62321],{"class":59,"line":10179},[57,62319,62320],{"class":70},"    .list",[57,62322,15844],{"class":140},[57,62324,62325,62327,62329,62331,62333],{"class":59,"line":10185},[57,62326,61808],{"class":81},[57,62328,51634],{"class":140},[57,62330,4260],{"class":81},[57,62332,51689],{"class":136},[57,62334,1576],{"class":140},[57,62336,62337,62339,62341,62343,62345],{"class":59,"line":10193},[57,62338,61821],{"class":81},[57,62340,51634],{"class":140},[57,62342,61826],{"class":81},[57,62344,51689],{"class":136},[57,62346,1576],{"class":140},[57,62348,62349,62351,62353,62355],{"class":59,"line":10198},[57,62350,55206],{"class":81},[57,62352,51634],{"class":140},[57,62354,51674],{"class":81},[57,62356,1576],{"class":140},[57,62358,62359],{"class":59,"line":16876},[57,62360,2460],{"class":140},[57,62362,62363],{"class":59,"line":16882},[57,62364,2673],{"emptyLinePlaceholder":350},[57,62366,62367,62369,62372],{"class":59,"line":16905},[57,62368,62320],{"class":70},[57,62370,62371],{"class":70}," .item",[57,62373,15844],{"class":140},[57,62375,62376,62378,62380,62382,62384],{"class":59,"line":16911},[57,62377,54968],{"class":81},[57,62379,51634],{"class":140},[57,62381,728],{"class":81},[57,62383,745],{"class":136},[57,62385,1576],{"class":140},[57,62387,62388,62390,62392,62394],{"class":59,"line":16934},[57,62389,55206],{"class":81},[57,62391,51634],{"class":140},[57,62393,51674],{"class":81},[57,62395,1576],{"class":140},[57,62397,62398],{"class":59,"line":16948},[57,62399,2460],{"class":140},[57,62401,62402],{"class":59,"line":16968},[57,62403,2673],{"emptyLinePlaceholder":350},[57,62405,62406,62408,62410,62413],{"class":59,"line":16974},[57,62407,62320],{"class":70},[57,62409,62371],{"class":70},[57,62411,62412],{"class":70}," .info",[57,62414,15844],{"class":140},[57,62416,62417,62419,62421,62423],{"class":59,"line":16985},[57,62418,62034],{"class":81},[57,62420,51634],{"class":140},[57,62422,635],{"class":81},[57,62424,1576],{"class":140},[57,62426,62427,62430,62432,62434,62436,62439,62442],{"class":59,"line":17008},[57,62428,62429],{"class":81},"      border-bottom",[57,62431,51634],{"class":140},[57,62433,635],{"class":81},[57,62435,51689],{"class":136},[57,62437,62438],{"class":81}," dashed",[57,62440,62441],{"class":81}," #e4e4e4",[57,62443,1576],{"class":140},[57,62445,62446,62449,62451,62453,62455],{"class":59,"line":17030},[57,62447,62448],{"class":81},"      padding-bottom",[57,62450,51634],{"class":140},[57,62452,862],{"class":81},[57,62454,51689],{"class":136},[57,62456,1576],{"class":140},[57,62458,62459],{"class":59,"line":17035},[57,62460,2460],{"class":140},[57,62462,62463],{"class":59,"line":17041},[57,62464,2673],{"emptyLinePlaceholder":350},[57,62466,62467,62469,62471,62473],{"class":59,"line":17055},[57,62468,62320],{"class":70},[57,62470,62371],{"class":70},[57,62472,7098],{"class":51497},[57,62474,15844],{"class":140},[57,62476,62477,62479,62481,62483],{"class":59,"line":17068},[57,62478,54903],{"class":81},[57,62480,51634],{"class":140},[57,62482,226],{"class":81},[57,62484,1576],{"class":140},[57,62486,62487],{"class":59,"line":17073},[57,62488,2460],{"class":140},[57,62490,62491],{"class":59,"line":17087},[57,62492,2673],{"emptyLinePlaceholder":350},[57,62494,62495,62497,62499,62502],{"class":59,"line":17092},[57,62496,62320],{"class":70},[57,62498,62371],{"class":70},[57,62500,62501],{"class":70}," .name",[57,62503,15844],{"class":140},[57,62505,62506,62508,62510,62513],{"class":59,"line":17098},[57,62507,57613],{"class":81},[57,62509,51634],{"class":140},[57,62511,62512],{"class":81},"#FB7299",[57,62514,1576],{"class":140},[57,62516,62517,62519,62521,62523,62525],{"class":59,"line":17103},[57,62518,55119],{"class":81},[57,62520,51634],{"class":140},[57,62522,965],{"class":81},[57,62524,51689],{"class":136},[57,62526,1576],{"class":140},[57,62528,62529,62532,62534,62537],{"class":59,"line":17117},[57,62530,62531],{"class":81},"      font-weight",[57,62533,51634],{"class":140},[57,62535,62536],{"class":81},"bold",[57,62538,1576],{"class":140},[57,62540,62541],{"class":59,"line":17122},[57,62542,2460],{"class":140},[57,62544,62545],{"class":59,"line":17127},[57,62546,2673],{"emptyLinePlaceholder":350},[57,62548,62549,62551,62553,62556],{"class":59,"line":17141},[57,62550,62320],{"class":70},[57,62552,62371],{"class":70},[57,62554,62555],{"class":70}," .text",[57,62557,15844],{"class":140},[57,62559,62560,62562,62564,62567],{"class":59,"line":17153},[57,62561,57613],{"class":81},[57,62563,51634],{"class":140},[57,62565,62566],{"class":81},"#333",[57,62568,1576],{"class":140},[57,62570,62571,62573,62575,62577,62579,62581],{"class":59,"line":17158},[57,62572,54892],{"class":81},[57,62574,51634],{"class":140},[57,62576,862],{"class":81},[57,62578,51689],{"class":136},[57,62580,4366],{"class":81},[57,62582,1576],{"class":140},[57,62584,62585],{"class":59,"line":17171},[57,62586,2460],{"class":140},[57,62588,62589],{"class":59,"line":17176},[57,62590,2673],{"emptyLinePlaceholder":350},[57,62592,62593,62595,62597,62600],{"class":59,"line":17181},[57,62594,62320],{"class":70},[57,62596,62371],{"class":70},[57,62598,62599],{"class":70}," .time",[57,62601,15844],{"class":140},[57,62603,62604,62606,62608,62610],{"class":59,"line":17186},[57,62605,57613],{"class":81},[57,62607,51634],{"class":140},[57,62609,62267],{"class":81},[57,62611,1576],{"class":140},[57,62613,62614,62616,62618,62620,62622],{"class":59,"line":17199},[57,62615,55119],{"class":81},[57,62617,51634],{"class":140},[57,62619,914],{"class":81},[57,62621,51689],{"class":136},[57,62623,1576],{"class":140},[57,62625,62626],{"class":59,"line":17204},[57,62627,2460],{"class":140},[57,62629,62630,62632,62634],{"class":59,"line":32830},[57,62631,52614],{"class":140},[57,62633,342],{"class":51497},[57,62635,51504],{"class":140},[57,62637,62638,62640,62642],{"class":59,"line":32836},[57,62639,51982],{"class":140},[57,62641,51531],{"class":51497},[57,62643,51504],{"class":140},[57,62645,62646],{"class":59,"line":32842},[57,62647,2673],{"emptyLinePlaceholder":350},[57,62649,62650,62652,62654],{"class":59,"line":32848},[57,62651,1326],{"class":140},[57,62653,51997],{"class":51497},[57,62655,51504],{"class":140},[57,62657,62658,62660,62662,62664,62666,62669],{"class":59,"line":32854},[57,62659,52341],{"class":140},[57,62661,51808],{"class":51497},[57,62663,53683],{"class":70},[57,62665,156],{"class":140},[57,62667,62668],{"class":74},"\"wrapper\"",[57,62670,51504],{"class":140},[57,62672,62673,62675,62677,62679,62681,62684,62686,62688],{"class":59,"line":32865},[57,62674,51538],{"class":140},[57,62676,857],{"class":51497},[57,62678,53683],{"class":70},[57,62680,156],{"class":140},[57,62682,62683],{"class":74},"\"avatar\"",[57,62685,55511],{"class":140},[57,62687,857],{"class":51497},[57,62689,51504],{"class":140},[57,62691,62692,62694,62696,62698,62700,62703,62705,62707,62710,62712,62714,62716,62719,62721,62724,62726,62728],{"class":59,"line":32871},[57,62693,51538],{"class":140},[57,62695,54485],{"class":51497},[57,62697,15231],{"class":70},[57,62699,156],{"class":140},[57,62701,62702],{"class":74},"\"tx\"",[57,62704,61217],{"class":70},[57,62706,156],{"class":140},[57,62708,62709],{"class":74},"\"发一条友善的评论\"",[57,62711,54508],{"class":70},[57,62713,156],{"class":140},[57,62715,3974],{"class":74},[57,62717,62718],{"class":70}," maxlength",[57,62720,156],{"class":140},[57,62722,62723],{"class":74},"\"200\"",[57,62725,55511],{"class":140},[57,62727,54485],{"class":51497},[57,62729,51504],{"class":140},[57,62731,62732,62734,62736,62739,62741],{"class":59,"line":32891},[57,62733,51538],{"class":140},[57,62735,54084],{"class":51497},[57,62737,62738],{"class":140},">发布\u003C\u002F",[57,62740,54084],{"class":51497},[57,62742,51504],{"class":140},[57,62744,62745,62747,62749],{"class":59,"line":32897},[57,62746,52614],{"class":140},[57,62748,51808],{"class":51497},[57,62750,51504],{"class":140},[57,62752,62753,62755,62757,62759,62761,62763],{"class":59,"line":32908},[57,62754,52341],{"class":140},[57,62756,51808],{"class":51497},[57,62758,53683],{"class":70},[57,62760,156],{"class":140},[57,62762,62668],{"class":74},[57,62764,51504],{"class":140},[57,62766,62767,62769,62771,62773,62775,62778,62781,62783],{"class":59,"line":32914},[57,62768,51538],{"class":140},[57,62770,57],{"class":51497},[57,62772,53683],{"class":70},[57,62774,156],{"class":140},[57,62776,62777],{"class":74},"\"total\"",[57,62779,62780],{"class":140},">0\u002F200字\u003C\u002F",[57,62782,57],{"class":51497},[57,62784,51504],{"class":140},[57,62786,62787,62789,62791],{"class":59,"line":32920},[57,62788,52614],{"class":140},[57,62790,51808],{"class":51497},[57,62792,51504],{"class":140},[57,62794,62795,62797,62799,62801,62803,62806],{"class":59,"line":32926},[57,62796,52341],{"class":140},[57,62798,51808],{"class":51497},[57,62800,53683],{"class":70},[57,62802,156],{"class":140},[57,62804,62805],{"class":74},"\"list\"",[57,62807,51504],{"class":140},[57,62809,62810,62812,62814,62816,62818,62821,62824,62826,62829],{"class":59,"line":32932},[57,62811,51538],{"class":140},[57,62813,51808],{"class":51497},[57,62815,53683],{"class":70},[57,62817,156],{"class":140},[57,62819,62820],{"class":74},"\"item\"",[57,62822,62823],{"class":70}," style",[57,62825,156],{"class":140},[57,62827,62828],{"class":74},"\"display: none;\"",[57,62830,51504],{"class":140},[57,62832,62833,62835,62837,62839,62841,62843,62845,62847],{"class":59,"line":32938},[57,62834,55431],{"class":140},[57,62836,857],{"class":51497},[57,62838,53683],{"class":70},[57,62840,156],{"class":140},[57,62842,62683],{"class":74},[57,62844,55511],{"class":140},[57,62846,857],{"class":51497},[57,62848,51504],{"class":140},[57,62850,62851,62853,62855,62857,62859,62862],{"class":59,"line":32944},[57,62852,55431],{"class":140},[57,62854,51808],{"class":51497},[57,62856,53683],{"class":70},[57,62858,156],{"class":140},[57,62860,62861],{"class":74},"\"info\"",[57,62863,51504],{"class":140},[57,62865,62866,62868,62870,62872,62874,62877,62880,62882],{"class":59,"line":32950},[57,62867,55499],{"class":140},[57,62869,14],{"class":51497},[57,62871,53683],{"class":70},[57,62873,156],{"class":140},[57,62875,62876],{"class":74},"\"name\"",[57,62878,62879],{"class":140},">清风徐来\u003C\u002F",[57,62881,14],{"class":51497},[57,62883,51504],{"class":140},[57,62885,62886,62888,62890,62892,62894,62897,62900,62902],{"class":59,"line":32970},[57,62887,55499],{"class":140},[57,62889,14],{"class":51497},[57,62891,53683],{"class":70},[57,62893,156],{"class":140},[57,62895,62896],{"class":74},"\"text\"",[57,62898,62899],{"class":140},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[57,62901,14],{"class":51497},[57,62903,51504],{"class":140},[57,62905,62906,62908,62910,62912,62914,62917,62920,62922],{"class":59,"line":32976},[57,62907,55499],{"class":140},[57,62909,14],{"class":51497},[57,62911,53683],{"class":70},[57,62913,156],{"class":140},[57,62915,62916],{"class":74},"\"time\"",[57,62918,62919],{"class":140},">2022-10-10 20:29:21\u003C\u002F",[57,62921,14],{"class":51497},[57,62923,51504],{"class":140},[57,62925,62926,62928,62930],{"class":59,"line":32992},[57,62927,55604],{"class":140},[57,62929,51808],{"class":51497},[57,62931,51504],{"class":140},[57,62933,62934,62936,62938],{"class":59,"line":32998},[57,62935,51973],{"class":140},[57,62937,51808],{"class":51497},[57,62939,51504],{"class":140},[57,62941,62942,62944,62946],{"class":59,"line":33012},[57,62943,52614],{"class":140},[57,62945,51808],{"class":51497},[57,62947,51504],{"class":140},[57,62949,62950,62952,62954],{"class":59,"line":33018},[57,62951,52341],{"class":140},[57,62953,52010],{"class":51497},[57,62955,51504],{"class":140},[57,62957,62958,62960,62963,62965,62967,62969,62971,62974],{"class":59,"line":33033},[57,62959,11494],{"class":136},[57,62961,62962],{"class":81}," tx",[57,62964,13837],{"class":136},[57,62966,54593],{"class":140},[57,62968,54596],{"class":70},[57,62970,168],{"class":140},[57,62972,62973],{"class":74},"'#tx'",[57,62975,238],{"class":140},[57,62977,62978,62980,62983,62985,62987,62989,62991,62994],{"class":59,"line":33039},[57,62979,11494],{"class":136},[57,62981,62982],{"class":81}," total",[57,62984,13837],{"class":136},[57,62986,54593],{"class":140},[57,62988,54596],{"class":70},[57,62990,168],{"class":140},[57,62992,62993],{"class":74},"'.total'",[57,62995,238],{"class":140},[57,62997,62998],{"class":59,"line":33048},[57,62999,63000],{"class":63},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[57,63002,63003,63006,63008,63010,63012,63014,63016],{"class":59,"line":33054},[57,63004,63005],{"class":140},"    tx.",[57,63007,58010],{"class":70},[57,63009,168],{"class":140},[57,63011,61524],{"class":74},[57,63013,12708],{"class":140},[57,63015,54646],{"class":136},[57,63017,54649],{"class":140},[57,63019,63020,63023,63025],{"class":59,"line":33063},[57,63021,63022],{"class":140},"      total.style.opacity ",[57,63024,156],{"class":136},[57,63026,55896],{"class":81},[57,63028,63029],{"class":59,"line":33069},[57,63030,33658],{"class":140},[57,63032,63033],{"class":59,"line":33075},[57,63034,63035],{"class":63},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[57,63037,63038,63040,63042,63044,63046,63048,63050],{"class":59,"line":33084},[57,63039,63005],{"class":140},[57,63041,58010],{"class":70},[57,63043,168],{"class":140},[57,63045,61585],{"class":74},[57,63047,12708],{"class":140},[57,63049,54646],{"class":136},[57,63051,54649],{"class":140},[57,63053,63054,63056,63058],{"class":59,"line":33090},[57,63055,63022],{"class":140},[57,63057,156],{"class":136},[57,63059,47530],{"class":81},[57,63061,63062],{"class":59,"line":33101},[57,63063,33658],{"class":140},[57,63065,63066],{"class":59,"line":33107},[57,63067,63068],{"class":63},"    \u002F\u002F 3. 检测用户输入\n",[57,63070,63071,63073,63075,63077,63080,63082,63084],{"class":59,"line":33126},[57,63072,63005],{"class":140},[57,63074,58010],{"class":70},[57,63076,168],{"class":140},[57,63078,63079],{"class":74},"'input'",[57,63081,12708],{"class":140},[57,63083,54646],{"class":136},[57,63085,54649],{"class":140},[57,63087,63088],{"class":59,"line":33132},[57,63089,63090],{"class":63},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[57,63092,63093,63096,63098,63101,63104,63106,63109,63111,63113],{"class":59,"line":33143},[57,63094,63095],{"class":140},"      total.innerHTML ",[57,63097,156],{"class":136},[57,63099,63100],{"class":74}," `${",[57,63102,63103],{"class":140},"tx",[57,63105,974],{"class":74},[57,63107,63108],{"class":140},"value",[57,63110,974],{"class":74},[57,63112,52165],{"class":81},[57,63114,63115],{"class":74},"}\u002F200字`\n",[57,63117,63118],{"class":59,"line":33149},[57,63119,33658],{"class":140},[57,63121,63122],{"class":59,"line":33169},[57,63123,2673],{"emptyLinePlaceholder":350},[57,63125,63126],{"class":59,"line":33185},[57,63127,63128],{"class":63},"    \u002F\u002F const str = 'andy'\n",[57,63130,63131],{"class":59,"line":33191},[57,63132,63133],{"class":63},"    \u002F\u002F console.log(str.length)\n",[57,63135,63136,63138,63140],{"class":59,"line":33205},[57,63137,52614],{"class":140},[57,63139,52010],{"class":51497},[57,63141,51504],{"class":140},[57,63143,63144,63146,63148],{"class":59,"line":33211},[57,63145,51982],{"class":140},[57,63147,51997],{"class":51497},[57,63149,51504],{"class":140},[57,63151,63152],{"class":59,"line":33217},[57,63153,2673],{"emptyLinePlaceholder":350},[57,63155,63156,63158,63160],{"class":59,"line":33228},[57,63157,51982],{"class":140},[57,63159,50832],{"class":51497},[57,63161,51504],{"class":140},[22270,63163,63165],{"id":63164},"_3254-change事件","3.2.5.4 change事件",[14,63167,63168],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,63170,63171],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,63173,63174],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[49,63176,63178],{"className":50830,"code":63177,"language":50832,"meta":46,"style":46},"\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",[28,63179,63180,63190,63204,63208,63216,63230,63250,63262,63270,63274,63282,63296,63304,63322,63340,63352,63356,63364,63372,63376],{"__ignoreMap":46},[57,63181,63182,63184,63186,63188],{"class":59,"line":60},[57,63183,51494],{"class":140},[57,63185,51498],{"class":51497},[57,63187,51501],{"class":70},[57,63189,51504],{"class":140},[57,63191,63192,63194,63196,63198,63200,63202],{"class":59,"line":67},[57,63193,1326],{"class":140},[57,63195,50832],{"class":51497},[57,63197,51513],{"class":70},[57,63199,156],{"class":140},[57,63201,51518],{"class":74},[57,63203,51504],{"class":140},[57,63205,63206],{"class":59,"line":144},[57,63207,2673],{"emptyLinePlaceholder":350},[57,63209,63210,63212,63214],{"class":59,"line":150},[57,63211,1326],{"class":140},[57,63213,51531],{"class":51497},[57,63215,51504],{"class":140},[57,63217,63218,63220,63222,63224,63226,63228],{"class":59,"line":162},[57,63219,52341],{"class":140},[57,63221,51541],{"class":51497},[57,63223,51544],{"class":70},[57,63225,156],{"class":140},[57,63227,51549],{"class":74},[57,63229,51504],{"class":140},[57,63231,63232,63234,63236,63238,63240,63242,63244,63246,63248],{"class":59,"line":180},[57,63233,52341],{"class":140},[57,63235,51541],{"class":51497},[57,63237,15192],{"class":70},[57,63239,156],{"class":140},[57,63241,51588],{"class":74},[57,63243,51568],{"class":70},[57,63245,156],{"class":140},[57,63247,51595],{"class":74},[57,63249,51504],{"class":140},[57,63251,63252,63254,63256,63258,63260],{"class":59,"line":186},[57,63253,52341],{"class":140},[57,63255,51604],{"class":51497},[57,63257,51607],{"class":140},[57,63259,51604],{"class":51497},[57,63261,51504],{"class":140},[57,63263,63264,63266,63268],{"class":59,"line":197},[57,63265,51982],{"class":140},[57,63267,51531],{"class":51497},[57,63269,51504],{"class":140},[57,63271,63272],{"class":59,"line":241},[57,63273,2673],{"emptyLinePlaceholder":350},[57,63275,63276,63278,63280],{"class":59,"line":249},[57,63277,1326],{"class":140},[57,63279,51997],{"class":51497},[57,63281,51504],{"class":140},[57,63283,63284,63286,63288,63290,63292,63294],{"class":59,"line":262},[57,63285,52341],{"class":140},[57,63287,54018],{"class":51497},[57,63289,54021],{"class":70},[57,63291,156],{"class":140},[57,63293,62896],{"class":74},[57,63295,51504],{"class":140},[57,63297,63298,63300,63302],{"class":59,"line":281},[57,63299,52341],{"class":140},[57,63301,52010],{"class":51497},[57,63303,51504],{"class":140},[57,63305,63306,63308,63310,63312,63314,63316,63318,63320],{"class":59,"line":287},[57,63307,11494],{"class":136},[57,63309,60802],{"class":81},[57,63311,13837],{"class":136},[57,63313,54593],{"class":140},[57,63315,54596],{"class":70},[57,63317,168],{"class":140},[57,63319,63079],{"class":74},[57,63321,238],{"class":140},[57,63323,63324,63327,63329,63331,63334,63336,63338],{"class":59,"line":298},[57,63325,63326],{"class":140},"    input.",[57,63328,58010],{"class":70},[57,63330,168],{"class":140},[57,63332,63333],{"class":74},"'change'",[57,63335,12708],{"class":140},[57,63337,54646],{"class":136},[57,63339,54649],{"class":140},[57,63341,63342,63344,63346,63348,63350],{"class":59,"line":311},[57,63343,58441],{"class":140},[57,63345,58444],{"class":70},[57,63347,168],{"class":140},[57,63349,1009],{"class":81},[57,63351,238],{"class":140},[57,63353,63354],{"class":59,"line":322},[57,63355,33658],{"class":140},[57,63357,63358,63360,63362],{"class":59,"line":1929},[57,63359,52614],{"class":140},[57,63361,52010],{"class":51497},[57,63363,51504],{"class":140},[57,63365,63366,63368,63370],{"class":59,"line":1950},[57,63367,51982],{"class":140},[57,63369,51997],{"class":51497},[57,63371,51504],{"class":140},[57,63373,63374],{"class":59,"line":1955},[57,63375,2673],{"emptyLinePlaceholder":350},[57,63377,63378,63380,63382],{"class":59,"line":1969},[57,63379,51982],{"class":140},[57,63381,50832],{"class":51497},[57,63383,51504],{"class":140},[14,63385,63386],{},"总结：内容发生改变才回去触发",[394,63388,63390],{"id":63389},"_326-事件对象","3.2.6 事件对象",[22270,63392,63394],{"id":63393},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,63396,63397],{},[44,63398],{"alt":46,"src":63399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,63401,63402],{},[44,63403],{"alt":46,"src":63404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,63406,63407],{},"点击一次，就输出了事件对象，它是个对象",[14,63409,63410],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,63412,63413],{},[44,63414],{"alt":46,"src":63415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22270,63417,63419],{"id":63418},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,63421,63422],{},[44,63423],{"alt":46,"src":63424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,63426,63427],{},"实现按特殊字符才是实现打印输出效果：",[49,63429,63431],{"className":53264,"code":63430,"language":53266,"meta":46,"style":46},"\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",[28,63432,63433,63441,63446,63460,63468,63473,63478,63483,63488,63493,63498,63503,63508,63513,63517,63521,63529],{"__ignoreMap":46},[57,63434,63435,63437,63439],{"class":59,"line":60},[57,63436,1326],{"class":140},[57,63438,51997],{"class":51497},[57,63440,51504],{"class":140},[57,63442,63443],{"class":59,"line":67},[57,63444,63445],{"class":63},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[57,63447,63448,63450,63452,63454,63456,63458],{"class":59,"line":144},[57,63449,52341],{"class":140},[57,63451,54018],{"class":51497},[57,63453,54021],{"class":70},[57,63455,156],{"class":140},[57,63457,62896],{"class":74},[57,63459,51504],{"class":140},[57,63461,63462,63464,63466],{"class":59,"line":150},[57,63463,52341],{"class":140},[57,63465,52010],{"class":51497},[57,63467,51504],{"class":140},[57,63469,63470],{"class":59,"line":162},[57,63471,63472],{"class":140},"    \u002F\u002F const btn = document.querySelector('button')\n",[57,63474,63475],{"class":59,"line":180},[57,63476,63477],{"class":140},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[57,63479,63480],{"class":59,"line":186},[57,63481,63482],{"class":140},"    \u002F\u002F   console.log(e);\n",[57,63484,63485],{"class":59,"line":197},[57,63486,63487],{"class":140},"    \u002F\u002F })\n",[57,63489,63490],{"class":59,"line":241},[57,63491,63492],{"class":140},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[57,63494,63495],{"class":59,"line":249},[57,63496,63497],{"class":140},"    const input = document.querySelector('input')\n",[57,63499,63500],{"class":59,"line":262},[57,63501,63502],{"class":140},"    input.addEventListener('keyup', function (e) {\n",[57,63504,63505],{"class":59,"line":281},[57,63506,63507],{"class":140},"      if (e.key === 'Enter') {\n",[57,63509,63510],{"class":59,"line":287},[57,63511,63512],{"class":140},"        console.log('我按下了回车键')\n",[57,63514,63515],{"class":59,"line":298},[57,63516,52595],{"class":140},[57,63518,63519],{"class":59,"line":311},[57,63520,33658],{"class":140},[57,63522,63523,63525,63527],{"class":59,"line":322},[57,63524,52614],{"class":140},[57,63526,52010],{"class":51497},[57,63528,51504],{"class":140},[57,63530,63531,63533,63535],{"class":59,"line":1929},[57,63532,51982],{"class":140},[57,63534,51997],{"class":51497},[57,63536,51504],{"class":140},[22270,63538,63540],{"id":63539},"_3263-trim方法","3.2.6.3 trim方法",[14,63542,63543],{},[44,63544],{"alt":46,"src":63545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,63547,63548],{},[44,63549],{"alt":46,"src":63550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,63552,63553],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,63555,63556],{},"str.trim()",[394,63558,63560],{"id":63559},"_327-环境对象","3.2.7 环境对象",[14,63562,63563],{},[44,63564],{"alt":46,"src":63565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,63567,63568],{},[44,63569],{"alt":46,"src":63570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,63572,63573],{},[44,63574],{"alt":46,"src":63575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,63577,63578],{},"实际函数调用是window.fn()",[14,63580,63581],{},"普通函数里面this指向的是window",[1422,63583,63584,63587,63590],{},[380,63585,63586],{},"在普通函数下，this指向的是window",[380,63588,63589],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[380,63591,63592],{},"箭头函数没有this",[14,63594,63595],{},"粗略记法就是：谁调用，this就指向谁",[14,63597,63598],{},[44,63599],{"alt":46,"src":63600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,63602,63603],{},[44,63604],{"alt":46,"src":63605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,63607,63608],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,63610,63611],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[49,63613,63615],{"className":53264,"code":63614,"language":53266,"meta":46,"style":46},"\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",[28,63616,63617,63625,63637,63645,63650,63655,63660,63665,63669,63677],{"__ignoreMap":46},[57,63618,63619,63621,63623],{"class":59,"line":60},[57,63620,1326],{"class":140},[57,63622,51997],{"class":51497},[57,63624,51504],{"class":140},[57,63626,63627,63629,63631,63633,63635],{"class":59,"line":67},[57,63628,52341],{"class":140},[57,63630,54084],{"class":51497},[57,63632,54090],{"class":140},[57,63634,54084],{"class":51497},[57,63636,51504],{"class":140},[57,63638,63639,63641,63643],{"class":59,"line":144},[57,63640,52341],{"class":140},[57,63642,52010],{"class":51497},[57,63644,51504],{"class":140},[57,63646,63647],{"class":59,"line":150},[57,63648,63649],{"class":140},"    const button = document.querySelector('button')\n",[57,63651,63652],{"class":59,"line":162},[57,63653,63654],{"class":140},"    button.addEventListener('click', function () {\n",[57,63656,63657],{"class":59,"line":180},[57,63658,63659],{"class":140},"      \u002F\u002F console.log(this);\n",[57,63661,63662],{"class":59,"line":186},[57,63663,63664],{"class":140},"      this.style.color = 'pink'\n",[57,63666,63667],{"class":59,"line":197},[57,63668,33658],{"class":140},[57,63670,63671,63673,63675],{"class":59,"line":241},[57,63672,52614],{"class":140},[57,63674,52010],{"class":51497},[57,63676,51504],{"class":140},[57,63678,63679,63681,63683],{"class":59,"line":249},[57,63680,51982],{"class":140},[57,63682,51997],{"class":51497},[57,63684,51504],{"class":140},[394,63686,63688],{"id":63687},"_328-回调函数","3.2.8 回调函数",[14,63690,63691],{},[44,63692],{"alt":46,"src":63693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,63695,63696],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,63698,11605],{},[1422,63700,63701,63704,63707],{},[380,63702,63703],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[380,63705,63706],{},"回调函数本质还是函数，只不过把它当成参数使用",[380,63708,63709],{},"使用匿名函数做为回调函数比较常见",[394,63711,63713],{"id":63712},"_329-tab栏切换","3.2.9 tab栏切换",[14,63715,63716],{},[44,63717],{"alt":46,"src":63718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[49,63720,63722],{"className":50830,"code":63721,"language":50832,"meta":46,"style":46},"\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",[28,63723,63724,63734,63748,63752,63760,63774,63794,63814,63827,63835,63841,63851,63861,63865,63869,63876,63889,63902,63914,63930,63934,63938,63945,63957,63969,63981,63991,64001,64005,64009,64018,64030,64041,64053,64057,64061,64069,64079,64089,64099,64103,64107,64117,64131,64143,64147,64151,64163,64174,64191,64201,64205,64209,64224,64235,64245,64249,64253,64260,64275,64279,64283,64291,64301,64305,64309,64318,64328,64332,64340,64348,64352,64360,64375,64390,64403,64411,64445,64472,64499,64526,64553,64561,64569,64584,64621,64656,64691,64726,64761,64769,64777,64785,64790,64795,64815,64820,64849,64854,64859,64877,64882,64887,64892,64914,64919,64935,64939,64944,64949,64970,64975,65004,65008,65013,65017,65025,65033,65037],{"__ignoreMap":46},[57,63725,63726,63728,63730,63732],{"class":59,"line":60},[57,63727,51494],{"class":140},[57,63729,51498],{"class":51497},[57,63731,51501],{"class":70},[57,63733,51504],{"class":140},[57,63735,63736,63738,63740,63742,63744,63746],{"class":59,"line":67},[57,63737,1326],{"class":140},[57,63739,50832],{"class":51497},[57,63741,51513],{"class":70},[57,63743,156],{"class":140},[57,63745,51518],{"class":74},[57,63747,51504],{"class":140},[57,63749,63750],{"class":59,"line":144},[57,63751,2673],{"emptyLinePlaceholder":350},[57,63753,63754,63756,63758],{"class":59,"line":150},[57,63755,1326],{"class":140},[57,63757,51531],{"class":51497},[57,63759,51504],{"class":140},[57,63761,63762,63764,63766,63768,63770,63772],{"class":59,"line":162},[57,63763,52341],{"class":140},[57,63765,51541],{"class":51497},[57,63767,51544],{"class":70},[57,63769,156],{"class":140},[57,63771,51549],{"class":74},[57,63773,59324],{"class":140},[57,63775,63776,63778,63780,63782,63784,63786,63788,63790,63792],{"class":59,"line":180},[57,63777,52341],{"class":140},[57,63779,51541],{"class":51497},[57,63781,51560],{"class":70},[57,63783,156],{"class":140},[57,63785,51565],{"class":74},[57,63787,51568],{"class":70},[57,63789,156],{"class":140},[57,63791,51573],{"class":74},[57,63793,59324],{"class":140},[57,63795,63796,63798,63800,63802,63804,63806,63808,63810,63812],{"class":59,"line":186},[57,63797,52341],{"class":140},[57,63799,51541],{"class":51497},[57,63801,15192],{"class":70},[57,63803,156],{"class":140},[57,63805,51588],{"class":74},[57,63807,51568],{"class":70},[57,63809,156],{"class":140},[57,63811,51595],{"class":74},[57,63813,59324],{"class":140},[57,63815,63816,63818,63820,63823,63825],{"class":59,"line":197},[57,63817,52341],{"class":140},[57,63819,51604],{"class":51497},[57,63821,63822],{"class":140},">tab栏切换\u003C\u002F",[57,63824,51604],{"class":51497},[57,63826,51504],{"class":140},[57,63828,63829,63831,63833],{"class":59,"line":241},[57,63830,52341],{"class":140},[57,63832,342],{"class":51497},[57,63834,51504],{"class":140},[57,63836,63837,63839],{"class":59,"line":249},[57,63838,6676],{"class":51497},[57,63840,15844],{"class":140},[57,63842,63843,63845,63847,63849],{"class":59,"line":262},[57,63844,54903],{"class":81},[57,63846,51634],{"class":140},[57,63848,226],{"class":81},[57,63850,1576],{"class":140},[57,63852,63853,63855,63857,63859],{"class":59,"line":281},[57,63854,54892],{"class":81},[57,63856,51634],{"class":140},[57,63858,226],{"class":81},[57,63860,1576],{"class":140},[57,63862,63863],{"class":59,"line":287},[57,63864,2460],{"class":140},[57,63866,63867],{"class":59,"line":298},[57,63868,2673],{"emptyLinePlaceholder":350},[57,63870,63871,63874],{"class":59,"line":311},[57,63872,63873],{"class":70},"    .tab",[57,63875,15844],{"class":140},[57,63877,63878,63880,63882,63885,63887],{"class":59,"line":322},[57,63879,54968],{"class":81},[57,63881,51634],{"class":140},[57,63883,63884],{"class":81},"590",[57,63886,51689],{"class":136},[57,63888,1576],{"class":140},[57,63890,63891,63893,63895,63898,63900],{"class":59,"line":1929},[57,63892,54982],{"class":81},[57,63894,51634],{"class":140},[57,63896,63897],{"class":81},"340",[57,63899,51689],{"class":136},[57,63901,1576],{"class":140},[57,63903,63904,63906,63908,63910,63912],{"class":59,"line":1950},[57,63905,54903],{"class":81},[57,63907,51634],{"class":140},[57,63909,1116],{"class":81},[57,63911,51689],{"class":136},[57,63913,1576],{"class":140},[57,63915,63916,63918,63920,63922,63924,63926,63928],{"class":59,"line":1955},[57,63917,62174],{"class":81},[57,63919,51634],{"class":140},[57,63921,635],{"class":81},[57,63923,51689],{"class":136},[57,63925,51718],{"class":81},[57,63927,62441],{"class":81},[57,63929,1576],{"class":140},[57,63931,63932],{"class":59,"line":1969},[57,63933,2460],{"class":140},[57,63935,63936],{"class":59,"line":1974},[57,63937,2673],{"emptyLinePlaceholder":350},[57,63939,63940,63943],{"class":59,"line":2001},[57,63941,63942],{"class":70},"    .tab-nav",[57,63944,15844],{"class":140},[57,63946,63947,63949,63951,63953,63955],{"class":59,"line":2006},[57,63948,54968],{"class":81},[57,63950,51634],{"class":140},[57,63952,728],{"class":81},[57,63954,745],{"class":136},[57,63956,1576],{"class":140},[57,63958,63959,63961,63963,63965,63967],{"class":59,"line":2023},[57,63960,54982],{"class":81},[57,63962,51634],{"class":140},[57,63964,1323],{"class":81},[57,63966,51689],{"class":136},[57,63968,1576],{"class":140},[57,63970,63971,63973,63975,63977,63979],{"class":59,"line":2028},[57,63972,57556],{"class":81},[57,63974,51634],{"class":140},[57,63976,1323],{"class":81},[57,63978,51689],{"class":136},[57,63980,1576],{"class":140},[57,63982,63983,63985,63987,63989],{"class":59,"line":2033},[57,63984,55206],{"class":81},[57,63986,51634],{"class":140},[57,63988,51674],{"class":81},[57,63990,1576],{"class":140},[57,63992,63993,63995,63997,63999],{"class":59,"line":2038},[57,63994,55217],{"class":81},[57,63996,51634],{"class":140},[57,63998,51865],{"class":81},[57,64000,1576],{"class":140},[57,64002,64003],{"class":59,"line":2052},[57,64004,2460],{"class":140},[57,64006,64007],{"class":59,"line":2057},[57,64008,2673],{"emptyLinePlaceholder":350},[57,64010,64011,64013,64016],{"class":59,"line":2850},[57,64012,63942],{"class":70},[57,64014,64015],{"class":51497}," h3",[57,64017,15844],{"class":140},[57,64019,64020,64022,64024,64026,64028],{"class":59,"line":2864},[57,64021,55119],{"class":81},[57,64023,51634],{"class":140},[57,64025,1216],{"class":81},[57,64027,51689],{"class":136},[57,64029,1576],{"class":140},[57,64031,64032,64034,64036,64039],{"class":59,"line":2872},[57,64033,62531],{"class":81},[57,64035,51634],{"class":140},[57,64037,64038],{"class":81},"normal",[57,64040,1576],{"class":140},[57,64042,64043,64045,64047,64049,64051],{"class":59,"line":2877},[57,64044,62197],{"class":81},[57,64046,51634],{"class":140},[57,64048,1116],{"class":81},[57,64050,51689],{"class":136},[57,64052,1576],{"class":140},[57,64054,64055],{"class":59,"line":2883},[57,64056,2460],{"class":140},[57,64058,64059],{"class":59,"line":2889},[57,64060,2673],{"emptyLinePlaceholder":350},[57,64062,64063,64065,64067],{"class":59,"line":2894},[57,64064,63942],{"class":70},[57,64066,61489],{"class":51497},[57,64068,15844],{"class":140},[57,64070,64071,64073,64075,64077],{"class":59,"line":8221},[57,64072,54929],{"class":81},[57,64074,51634],{"class":140},[57,64076,54934],{"class":81},[57,64078,1576],{"class":140},[57,64080,64081,64083,64085,64087],{"class":59,"line":8245},[57,64082,55206],{"class":81},[57,64084,51634],{"class":140},[57,64086,51674],{"class":81},[57,64088,1576],{"class":140},[57,64090,64091,64093,64095,64097],{"class":59,"line":8250},[57,64092,55217],{"class":81},[57,64094,51634],{"class":140},[57,64096,51777],{"class":81},[57,64098,1576],{"class":140},[57,64100,64101],{"class":59,"line":8256},[57,64102,2460],{"class":140},[57,64104,64105],{"class":59,"line":8283},[57,64106,2673],{"emptyLinePlaceholder":350},[57,64108,64109,64111,64113,64115],{"class":59,"line":8288},[57,64110,63942],{"class":70},[57,64112,61489],{"class":51497},[57,64114,55272],{"class":51497},[57,64116,15844],{"class":140},[57,64118,64119,64121,64123,64125,64127,64129],{"class":59,"line":8294},[57,64120,54903],{"class":81},[57,64122,51634],{"class":140},[57,64124,226],{"class":81},[57,64126,9223],{"class":81},[57,64128,51689],{"class":136},[57,64130,1576],{"class":140},[57,64132,64133,64135,64137,64139,64141],{"class":59,"line":8306},[57,64134,55119],{"class":81},[57,64136,51634],{"class":140},[57,64138,965],{"class":81},[57,64140,51689],{"class":136},[57,64142,1576],{"class":140},[57,64144,64145],{"class":59,"line":8318},[57,64146,2460],{"class":140},[57,64148,64149],{"class":59,"line":8330},[57,64150,2673],{"emptyLinePlaceholder":350},[57,64152,64153,64155,64157,64159,64161],{"class":59,"line":9989},[57,64154,63942],{"class":70},[57,64156,61489],{"class":51497},[57,64158,55272],{"class":51497},[57,64160,1681],{"class":51497},[57,64162,15844],{"class":140},[57,64164,64165,64168,64170,64172],{"class":59,"line":10014},[57,64166,64167],{"class":81},"      text-decoration",[57,64169,51634],{"class":140},[57,64171,54934],{"class":81},[57,64173,1576],{"class":140},[57,64175,64176,64178,64180,64182,64184,64186,64189],{"class":59,"line":10037},[57,64177,62429],{"class":81},[57,64179,51634],{"class":140},[57,64181,498],{"class":81},[57,64183,51689],{"class":136},[57,64185,51718],{"class":81},[57,64187,64188],{"class":81}," transparent",[57,64190,1576],{"class":140},[57,64192,64193,64195,64197,64199],{"class":59,"line":10061},[57,64194,57613],{"class":81},[57,64196,51634],{"class":140},[57,64198,62566],{"class":81},[57,64200,1576],{"class":140},[57,64202,64203],{"class":59,"line":10066},[57,64204,2460],{"class":140},[57,64206,64207],{"class":59,"line":10071},[57,64208,2673],{"emptyLinePlaceholder":350},[57,64210,64211,64213,64215,64217,64219,64222],{"class":59,"line":10076},[57,64212,63942],{"class":70},[57,64214,61489],{"class":51497},[57,64216,55272],{"class":51497},[57,64218,1681],{"class":51497},[57,64220,64221],{"class":70},".active",[57,64223,15844],{"class":140},[57,64225,64226,64228,64230,64233],{"class":59,"line":10085},[57,64227,61988],{"class":81},[57,64229,51634],{"class":140},[57,64231,64232],{"class":81},"#e1251b",[57,64234,1576],{"class":140},[57,64236,64237,64239,64241,64243],{"class":59,"line":10090},[57,64238,57613],{"class":81},[57,64240,51634],{"class":140},[57,64242,64232],{"class":81},[57,64244,1576],{"class":140},[57,64246,64247],{"class":59,"line":10096},[57,64248,2460],{"class":140},[57,64250,64251],{"class":59,"line":10117},[57,64252,2673],{"emptyLinePlaceholder":350},[57,64254,64255,64258],{"class":59,"line":10123},[57,64256,64257],{"class":70},"    .tab-content",[57,64259,15844],{"class":140},[57,64261,64262,64264,64266,64268,64271,64273],{"class":59,"line":10137},[57,64263,54892],{"class":81},[57,64265,51634],{"class":140},[57,64267,226],{"class":81},[57,64269,64270],{"class":81}," 16",[57,64272,51689],{"class":136},[57,64274,1576],{"class":140},[57,64276,64277],{"class":59,"line":10143},[57,64278,2460],{"class":140},[57,64280,64281],{"class":59,"line":10170},[57,64282,2673],{"emptyLinePlaceholder":350},[57,64284,64285,64287,64289],{"class":59,"line":10179},[57,64286,64257],{"class":70},[57,64288,62371],{"class":70},[57,64290,15844],{"class":140},[57,64292,64293,64295,64297,64299],{"class":59,"line":10185},[57,64294,55206],{"class":81},[57,64296,51634],{"class":140},[57,64298,54934],{"class":81},[57,64300,1576],{"class":140},[57,64302,64303],{"class":59,"line":10193},[57,64304,2460],{"class":140},[57,64306,64307],{"class":59,"line":10198},[57,64308,2673],{"emptyLinePlaceholder":350},[57,64310,64311,64313,64316],{"class":59,"line":16876},[57,64312,64257],{"class":70},[57,64314,64315],{"class":70}," .item.active",[57,64317,15844],{"class":140},[57,64319,64320,64322,64324,64326],{"class":59,"line":16882},[57,64321,55206],{"class":81},[57,64323,51634],{"class":140},[57,64325,61066],{"class":81},[57,64327,1576],{"class":140},[57,64329,64330],{"class":59,"line":16905},[57,64331,2460],{"class":140},[57,64333,64334,64336,64338],{"class":59,"line":16911},[57,64335,52614],{"class":140},[57,64337,342],{"class":51497},[57,64339,51504],{"class":140},[57,64341,64342,64344,64346],{"class":59,"line":16934},[57,64343,51982],{"class":140},[57,64345,51531],{"class":51497},[57,64347,51504],{"class":140},[57,64349,64350],{"class":59,"line":16948},[57,64351,2673],{"emptyLinePlaceholder":350},[57,64353,64354,64356,64358],{"class":59,"line":16968},[57,64355,1326],{"class":140},[57,64357,51997],{"class":51497},[57,64359,51504],{"class":140},[57,64361,64362,64364,64366,64368,64370,64373],{"class":59,"line":16974},[57,64363,52341],{"class":140},[57,64365,51808],{"class":51497},[57,64367,53683],{"class":70},[57,64369,156],{"class":140},[57,64371,64372],{"class":74},"\"tab\"",[57,64374,51504],{"class":140},[57,64376,64377,64379,64381,64383,64385,64388],{"class":59,"line":16985},[57,64378,51538],{"class":140},[57,64380,51808],{"class":51497},[57,64382,53683],{"class":70},[57,64384,156],{"class":140},[57,64386,64387],{"class":74},"\"tab-nav\"",[57,64389,51504],{"class":140},[57,64391,64392,64394,64396,64399,64401],{"class":59,"line":17008},[57,64393,55431],{"class":140},[57,64395,394],{"class":51497},[57,64397,64398],{"class":140},">每日特价\u003C\u002F",[57,64400,394],{"class":51497},[57,64402,51504],{"class":140},[57,64404,64405,64407,64409],{"class":59,"line":17030},[57,64406,55431],{"class":140},[57,64408,1422],{"class":51497},[57,64410,51504],{"class":140},[57,64412,64413,64415,64417,64419,64421,64423,64425,64427,64429,64431,64434,64437,64439,64441,64443],{"class":59,"line":17035},[57,64414,55499],{"class":140},[57,64416,380],{"class":51497},[57,64418,61249],{"class":140},[57,64420,18],{"class":51497},[57,64422,53683],{"class":70},[57,64424,156],{"class":140},[57,64426,59903],{"class":74},[57,64428,61254],{"class":70},[57,64430,156],{"class":140},[57,64432,64433],{"class":74},"\"javascript:;\"",[57,64435,64436],{"class":140},">精选\u003C\u002F",[57,64438,18],{"class":51497},[57,64440,55511],{"class":140},[57,64442,380],{"class":51497},[57,64444,51504],{"class":140},[57,64446,64447,64449,64451,64453,64455,64457,64459,64461,64464,64466,64468,64470],{"class":59,"line":17041},[57,64448,55499],{"class":140},[57,64450,380],{"class":51497},[57,64452,61249],{"class":140},[57,64454,18],{"class":51497},[57,64456,61254],{"class":70},[57,64458,156],{"class":140},[57,64460,64433],{"class":74},[57,64462,64463],{"class":140},">美食\u003C\u002F",[57,64465,18],{"class":51497},[57,64467,55511],{"class":140},[57,64469,380],{"class":51497},[57,64471,51504],{"class":140},[57,64473,64474,64476,64478,64480,64482,64484,64486,64488,64491,64493,64495,64497],{"class":59,"line":17055},[57,64475,55499],{"class":140},[57,64477,380],{"class":51497},[57,64479,61249],{"class":140},[57,64481,18],{"class":51497},[57,64483,61254],{"class":70},[57,64485,156],{"class":140},[57,64487,64433],{"class":74},[57,64489,64490],{"class":140},">百货\u003C\u002F",[57,64492,18],{"class":51497},[57,64494,55511],{"class":140},[57,64496,380],{"class":51497},[57,64498,51504],{"class":140},[57,64500,64501,64503,64505,64507,64509,64511,64513,64515,64518,64520,64522,64524],{"class":59,"line":17068},[57,64502,55499],{"class":140},[57,64504,380],{"class":51497},[57,64506,61249],{"class":140},[57,64508,18],{"class":51497},[57,64510,61254],{"class":70},[57,64512,156],{"class":140},[57,64514,64433],{"class":74},[57,64516,64517],{"class":140},">个护\u003C\u002F",[57,64519,18],{"class":51497},[57,64521,55511],{"class":140},[57,64523,380],{"class":51497},[57,64525,51504],{"class":140},[57,64527,64528,64530,64532,64534,64536,64538,64540,64542,64545,64547,64549,64551],{"class":59,"line":17073},[57,64529,55499],{"class":140},[57,64531,380],{"class":51497},[57,64533,61249],{"class":140},[57,64535,18],{"class":51497},[57,64537,61254],{"class":70},[57,64539,156],{"class":140},[57,64541,64433],{"class":74},[57,64543,64544],{"class":140},">预告\u003C\u002F",[57,64546,18],{"class":51497},[57,64548,55511],{"class":140},[57,64550,380],{"class":51497},[57,64552,51504],{"class":140},[57,64554,64555,64557,64559],{"class":59,"line":17087},[57,64556,55604],{"class":140},[57,64558,1422],{"class":51497},[57,64560,51504],{"class":140},[57,64562,64563,64565,64567],{"class":59,"line":17092},[57,64564,51973],{"class":140},[57,64566,51808],{"class":51497},[57,64568,51504],{"class":140},[57,64570,64571,64573,64575,64577,64579,64582],{"class":59,"line":17098},[57,64572,51538],{"class":140},[57,64574,51808],{"class":51497},[57,64576,53683],{"class":70},[57,64578,156],{"class":140},[57,64580,64581],{"class":74},"\"tab-content\"",[57,64583,51504],{"class":140},[57,64585,64586,64588,64590,64592,64594,64597,64599,64601,64603,64605,64608,64610,64612,64614,64617,64619],{"class":59,"line":17103},[57,64587,55431],{"class":140},[57,64589,51808],{"class":51497},[57,64591,53683],{"class":70},[57,64593,156],{"class":140},[57,64595,64596],{"class":74},"\"item active\"",[57,64598,61249],{"class":140},[57,64600,44],{"class":51497},[57,64602,55436],{"class":70},[57,64604,156],{"class":140},[57,64606,64607],{"class":74},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[57,64609,55444],{"class":70},[57,64611,156],{"class":140},[57,64613,7925],{"class":74},[57,64615,64616],{"class":140}," \u002F>\u003C\u002F",[57,64618,51808],{"class":51497},[57,64620,51504],{"class":140},[57,64622,64623,64625,64627,64629,64631,64633,64635,64637,64639,64641,64644,64646,64648,64650,64652,64654],{"class":59,"line":17117},[57,64624,55431],{"class":140},[57,64626,51808],{"class":51497},[57,64628,53683],{"class":70},[57,64630,156],{"class":140},[57,64632,62820],{"class":74},[57,64634,61249],{"class":140},[57,64636,44],{"class":51497},[57,64638,55436],{"class":70},[57,64640,156],{"class":140},[57,64642,64643],{"class":74},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[57,64645,55444],{"class":70},[57,64647,156],{"class":140},[57,64649,7925],{"class":74},[57,64651,64616],{"class":140},[57,64653,51808],{"class":51497},[57,64655,51504],{"class":140},[57,64657,64658,64660,64662,64664,64666,64668,64670,64672,64674,64676,64679,64681,64683,64685,64687,64689],{"class":59,"line":17122},[57,64659,55431],{"class":140},[57,64661,51808],{"class":51497},[57,64663,53683],{"class":70},[57,64665,156],{"class":140},[57,64667,62820],{"class":74},[57,64669,61249],{"class":140},[57,64671,44],{"class":51497},[57,64673,55436],{"class":70},[57,64675,156],{"class":140},[57,64677,64678],{"class":74},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[57,64680,55444],{"class":70},[57,64682,156],{"class":140},[57,64684,7925],{"class":74},[57,64686,64616],{"class":140},[57,64688,51808],{"class":51497},[57,64690,51504],{"class":140},[57,64692,64693,64695,64697,64699,64701,64703,64705,64707,64709,64711,64714,64716,64718,64720,64722,64724],{"class":59,"line":17127},[57,64694,55431],{"class":140},[57,64696,51808],{"class":51497},[57,64698,53683],{"class":70},[57,64700,156],{"class":140},[57,64702,62820],{"class":74},[57,64704,61249],{"class":140},[57,64706,44],{"class":51497},[57,64708,55436],{"class":70},[57,64710,156],{"class":140},[57,64712,64713],{"class":74},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[57,64715,55444],{"class":70},[57,64717,156],{"class":140},[57,64719,7925],{"class":74},[57,64721,64616],{"class":140},[57,64723,51808],{"class":51497},[57,64725,51504],{"class":140},[57,64727,64728,64730,64732,64734,64736,64738,64740,64742,64744,64746,64749,64751,64753,64755,64757,64759],{"class":59,"line":17141},[57,64729,55431],{"class":140},[57,64731,51808],{"class":51497},[57,64733,53683],{"class":70},[57,64735,156],{"class":140},[57,64737,62820],{"class":74},[57,64739,61249],{"class":140},[57,64741,44],{"class":51497},[57,64743,55436],{"class":70},[57,64745,156],{"class":140},[57,64747,64748],{"class":74},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[57,64750,55444],{"class":70},[57,64752,156],{"class":140},[57,64754,7925],{"class":74},[57,64756,64616],{"class":140},[57,64758,51808],{"class":51497},[57,64760,51504],{"class":140},[57,64762,64763,64765,64767],{"class":59,"line":17153},[57,64764,51973],{"class":140},[57,64766,51808],{"class":51497},[57,64768,51504],{"class":140},[57,64770,64771,64773,64775],{"class":59,"line":17158},[57,64772,52614],{"class":140},[57,64774,51808],{"class":51497},[57,64776,51504],{"class":140},[57,64778,64779,64781,64783],{"class":59,"line":17171},[57,64780,52341],{"class":140},[57,64782,52010],{"class":51497},[57,64784,51504],{"class":140},[57,64786,64787],{"class":59,"line":17176},[57,64788,64789],{"class":63},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[57,64791,64792],{"class":59,"line":17181},[57,64793,64794],{"class":63},"    \u002F\u002F 1.1 获取 a 元素 \n",[57,64796,64797,64799,64802,64804,64806,64808,64810,64813],{"class":59,"line":17186},[57,64798,11494],{"class":136},[57,64800,64801],{"class":81}," as",[57,64803,13837],{"class":136},[57,64805,54593],{"class":140},[57,64807,55878],{"class":70},[57,64809,168],{"class":140},[57,64811,64812],{"class":74},"'.tab-nav a'",[57,64814,238],{"class":140},[57,64816,64817],{"class":59,"line":17199},[57,64818,64819],{"class":63},"    \u002F\u002F console.log(as) \n",[57,64821,64822,64824,64826,64828,64830,64832,64834,64836,64838,64841,64843,64845,64847],{"class":59,"line":17204},[57,64823,3474],{"class":136},[57,64825,1934],{"class":140},[57,64827,52044],{"class":136},[57,64829,9711],{"class":140},[57,64831,156],{"class":136},[57,64833,4366],{"class":81},[57,64835,9718],{"class":140},[57,64837,1326],{"class":136},[57,64839,64840],{"class":140}," as.",[57,64842,52165],{"class":81},[57,64844,3487],{"class":140},[57,64846,2565],{"class":136},[57,64848,12715],{"class":140},[57,64850,64851],{"class":59,"line":32830},[57,64852,64853],{"class":63},"      \u002F\u002F console.log(as[i])\n",[57,64855,64856],{"class":59,"line":32836},[57,64857,64858],{"class":63},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[57,64860,64861,64864,64866,64868,64871,64873,64875],{"class":59,"line":32842},[57,64862,64863],{"class":140},"      as[i].",[57,64865,58010],{"class":70},[57,64867,168],{"class":140},[57,64869,64870],{"class":74},"'mouseenter'",[57,64872,12708],{"class":140},[57,64874,54646],{"class":136},[57,64876,54649],{"class":140},[57,64878,64879],{"class":59,"line":32848},[57,64880,64881],{"class":63},"        \u002F\u002F console.log('鼠标经过')\n",[57,64883,64884],{"class":59,"line":32854},[57,64885,64886],{"class":63},"        \u002F\u002F 排他思想  \n",[57,64888,64889],{"class":59,"line":32865},[57,64890,64891],{"class":63},"        \u002F\u002F 干掉别人 移除类active\n",[57,64893,64894,64896,64898,64900,64903,64905,64907,64909,64912],{"class":59,"line":32871},[57,64895,52122],{"class":140},[57,64897,54596],{"class":70},[57,64899,168],{"class":140},[57,64901,64902],{"class":74},"'.tab-nav .active'",[57,64904,57200],{"class":140},[57,64906,57203],{"class":70},[57,64908,168],{"class":140},[57,64910,64911],{"class":74},"'active'",[57,64913,238],{"class":140},[57,64915,64916],{"class":59,"line":32891},[57,64917,64918],{"class":63},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[57,64920,64921,64924,64927,64929,64931,64933],{"class":59,"line":32897},[57,64922,64923],{"class":81},"        this",[57,64925,64926],{"class":140},".classList.",[57,64928,5607],{"class":70},[57,64930,168],{"class":140},[57,64932,64911],{"class":74},[57,64934,238],{"class":140},[57,64936,64937],{"class":59,"line":32908},[57,64938,2673],{"emptyLinePlaceholder":350},[57,64940,64941],{"class":59,"line":32914},[57,64942,64943],{"class":63},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[57,64945,64946],{"class":59,"line":32920},[57,64947,64948],{"class":63},"        \u002F\u002F 干掉别人\n",[57,64950,64951,64953,64955,64957,64960,64962,64964,64966,64968],{"class":59,"line":32926},[57,64952,52122],{"class":140},[57,64954,54596],{"class":70},[57,64956,168],{"class":140},[57,64958,64959],{"class":74},"'.tab-content .active'",[57,64961,57200],{"class":140},[57,64963,57203],{"class":70},[57,64965,168],{"class":140},[57,64967,64911],{"class":74},[57,64969,238],{"class":140},[57,64971,64972],{"class":59,"line":32932},[57,64973,64974],{"class":63},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[57,64976,64977,64979,64981,64983,64986,64988,64990,64992,64994,64996,64998,65000,65002],{"class":59,"line":32938},[57,64978,52122],{"class":140},[57,64980,54596],{"class":70},[57,64982,168],{"class":140},[57,64984,64985],{"class":74},"`.tab-content .item:nth-child(${",[57,64987,857],{"class":140},[57,64989,45763],{"class":136},[57,64991,25387],{"class":81},[57,64993,57229],{"class":74},[57,64995,57200],{"class":140},[57,64997,5607],{"class":70},[57,64999,168],{"class":140},[57,65001,64911],{"class":74},[57,65003,238],{"class":140},[57,65005,65006],{"class":59,"line":32944},[57,65007,2673],{"emptyLinePlaceholder":350},[57,65009,65010],{"class":59,"line":32950},[57,65011,65012],{"class":140},"      })\n",[57,65014,65015],{"class":59,"line":32970},[57,65016,2460],{"class":140},[57,65018,65019,65021,65023],{"class":59,"line":32976},[57,65020,52614],{"class":140},[57,65022,52010],{"class":51497},[57,65024,51504],{"class":140},[57,65026,65027,65029,65031],{"class":59,"line":32992},[57,65028,51982],{"class":140},[57,65030,51997],{"class":51497},[57,65032,51504],{"class":140},[57,65034,65035],{"class":59,"line":32998},[57,65036,2673],{"emptyLinePlaceholder":350},[57,65038,65039,65041,65043],{"class":59,"line":33012},[57,65040,51982],{"class":140},[57,65042,50832],{"class":51497},[57,65044,51504],{"class":140},[14,65046,65047],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,65049,65050],{},"在监听事件中，this指向的就是他的调用者",[14,65052,65053],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,65055,53917],{},[14,65057,65058],{},"(function () {",[14,65060,65061],{},"const list = document.querySelector('.xtx-elevator-list')",[14,65063,65064],{},"list.addEventListener('click', function (e) {",[14,65066,65067],{},"if (e.target.tagName === 'A') {",[14,65069,65070],{},"\u002F\u002F 排他思想",[14,65072,65073],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,65075,65076],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,65078,65079],{},"\u002F\u002F console.log(old);",[14,65081,65082],{},"\u002F\u002F 判断",[14,65084,65085],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,65087,65088],{},"if (old) old.classList.remove('active')",[14,65090,65091],{},"e.target.classList.add('active')",[14,65093,1362],{},[14,65095,52661],{},[14,65097,65098],{},"})();",[394,65100,65102],{"id":65101},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[49,65104,65106],{"className":50830,"code":65105,"language":50832,"meta":46,"style":46},"\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",[28,65107,65108,65118,65122,65130,65134,65148,65162,65174,65182,65188,65198,65208,65212,65216,65223,65235,65246,65263,65276,65290,65300,65304,65308,65315,65326,65344,65354,65366,65370,65374,65381,65398,65409,65421,65425,65429,65436,65448,65452,65460,65468,65472,65480,65488,65496,65511,65555,65563,65576,65589,65602,65610,65618,65626,65654,65662,65674,65687,65700,65708,65716,65724,65750,65758,65771,65783,65796,65804,65812,65820,65846,65854,65867,65879,65892,65900,65908,65916,65921,65941,65946,65966,65971,65988,65993,66001,66006,66035,66048,66052,66056,66061,66065,66093,66098,66115,66120,66125,66130,66135,66161,66165,66169,66177,66185,66189],{"__ignoreMap":46},[57,65109,65110,65112,65114,65116],{"class":59,"line":60},[57,65111,51494],{"class":140},[57,65113,51498],{"class":51497},[57,65115,51501],{"class":70},[57,65117,51504],{"class":140},[57,65119,65120],{"class":59,"line":67},[57,65121,2673],{"emptyLinePlaceholder":350},[57,65123,65124,65126,65128],{"class":59,"line":144},[57,65125,1326],{"class":140},[57,65127,50832],{"class":51497},[57,65129,51504],{"class":140},[57,65131,65132],{"class":59,"line":150},[57,65133,2673],{"emptyLinePlaceholder":350},[57,65135,65136,65138,65140,65142,65144,65146],{"class":59,"line":162},[57,65137,1326],{"class":140},[57,65139,51531],{"class":51497},[57,65141,51513],{"class":70},[57,65143,156],{"class":140},[57,65145,51518],{"class":74},[57,65147,51504],{"class":140},[57,65149,65150,65152,65154,65156,65158,65160],{"class":59,"line":180},[57,65151,52341],{"class":140},[57,65153,51541],{"class":51497},[57,65155,51544],{"class":70},[57,65157,156],{"class":140},[57,65159,51549],{"class":74},[57,65161,51504],{"class":140},[57,65163,65164,65166,65168,65170,65172],{"class":59,"line":186},[57,65165,52341],{"class":140},[57,65167,51604],{"class":51497},[57,65169,55511],{"class":140},[57,65171,51604],{"class":51497},[57,65173,51504],{"class":140},[57,65175,65176,65178,65180],{"class":59,"line":197},[57,65177,52341],{"class":140},[57,65179,342],{"class":51497},[57,65181,51504],{"class":140},[57,65183,65184,65186],{"class":59,"line":241},[57,65185,6676],{"class":51497},[57,65187,15844],{"class":140},[57,65189,65190,65192,65194,65196],{"class":59,"line":249},[57,65191,54903],{"class":81},[57,65193,51634],{"class":140},[57,65195,226],{"class":81},[57,65197,1576],{"class":140},[57,65199,65200,65202,65204,65206],{"class":59,"line":262},[57,65201,54892],{"class":81},[57,65203,51634],{"class":140},[57,65205,226],{"class":81},[57,65207,1576],{"class":140},[57,65209,65210],{"class":59,"line":281},[57,65211,2460],{"class":140},[57,65213,65214],{"class":59,"line":287},[57,65215,2673],{"emptyLinePlaceholder":350},[57,65217,65218,65221],{"class":59,"line":298},[57,65219,65220],{"class":51497},"    table",[57,65222,15844],{"class":140},[57,65224,65225,65228,65230,65233],{"class":59,"line":311},[57,65226,65227],{"class":81},"      border-collapse",[57,65229,51634],{"class":140},[57,65231,65232],{"class":81},"collapse",[57,65234,1576],{"class":140},[57,65236,65237,65240,65242,65244],{"class":59,"line":322},[57,65238,65239],{"class":81},"      border-spacing",[57,65241,51634],{"class":140},[57,65243,226],{"class":81},[57,65245,1576],{"class":140},[57,65247,65248,65250,65252,65254,65256,65258,65261],{"class":59,"line":1929},[57,65249,62174],{"class":81},[57,65251,51634],{"class":140},[57,65253,635],{"class":81},[57,65255,51689],{"class":136},[57,65257,51718],{"class":81},[57,65259,65260],{"class":81}," #c0c0c0",[57,65262,1576],{"class":140},[57,65264,65265,65267,65269,65272,65274],{"class":59,"line":1950},[57,65266,54968],{"class":81},[57,65268,51634],{"class":140},[57,65270,65271],{"class":81},"500",[57,65273,51689],{"class":136},[57,65275,1576],{"class":140},[57,65277,65278,65280,65282,65284,65286,65288],{"class":59,"line":1955},[57,65279,54903],{"class":81},[57,65281,51634],{"class":140},[57,65283,728],{"class":81},[57,65285,51689],{"class":136},[57,65287,51753],{"class":81},[57,65289,1576],{"class":140},[57,65291,65292,65294,65296,65298],{"class":59,"line":1969},[57,65293,57483],{"class":81},[57,65295,51634],{"class":140},[57,65297,51789],{"class":81},[57,65299,1576],{"class":140},[57,65301,65302],{"class":59,"line":1974},[57,65303,2460],{"class":140},[57,65305,65306],{"class":59,"line":2001},[57,65307,2673],{"emptyLinePlaceholder":350},[57,65309,65310,65313],{"class":59,"line":2006},[57,65311,65312],{"class":51497},"    th",[57,65314,15844],{"class":140},[57,65316,65317,65319,65321,65324],{"class":59,"line":2023},[57,65318,55081],{"class":81},[57,65320,51634],{"class":140},[57,65322,65323],{"class":81},"#09c",[57,65325,1576],{"class":140},[57,65327,65328,65331,65333,65335,65337,65339,65342],{"class":59,"line":2028},[57,65329,65330],{"class":81},"      font",[57,65332,51634],{"class":140},[57,65334,62536],{"class":81},[57,65336,64270],{"class":81},[57,65338,51689],{"class":136},[57,65340,65341],{"class":74}," \"微软雅黑\"",[57,65343,1576],{"class":140},[57,65345,65346,65348,65350,65352],{"class":59,"line":2033},[57,65347,57613],{"class":81},[57,65349,51634],{"class":140},[57,65351,61039],{"class":81},[57,65353,1576],{"class":140},[57,65355,65356,65358,65360,65362,65364],{"class":59,"line":2038},[57,65357,54982],{"class":81},[57,65359,51634],{"class":140},[57,65361,1216],{"class":81},[57,65363,51689],{"class":136},[57,65365,1576],{"class":140},[57,65367,65368],{"class":59,"line":2052},[57,65369,2460],{"class":140},[57,65371,65372],{"class":59,"line":2057},[57,65373,2673],{"emptyLinePlaceholder":350},[57,65375,65376,65379],{"class":59,"line":2850},[57,65377,65378],{"class":51497},"    td",[57,65380,15844],{"class":140},[57,65382,65383,65385,65387,65389,65391,65393,65396],{"class":59,"line":2864},[57,65384,62174],{"class":81},[57,65386,51634],{"class":140},[57,65388,635],{"class":81},[57,65390,51689],{"class":136},[57,65392,51718],{"class":81},[57,65394,65395],{"class":81}," #d0d0d0",[57,65397,1576],{"class":140},[57,65399,65400,65402,65404,65407],{"class":59,"line":2872},[57,65401,57613],{"class":81},[57,65403,51634],{"class":140},[57,65405,65406],{"class":81},"#404060",[57,65408,1576],{"class":140},[57,65410,65411,65413,65415,65417,65419],{"class":59,"line":2877},[57,65412,54892],{"class":81},[57,65414,51634],{"class":140},[57,65416,862],{"class":81},[57,65418,51689],{"class":136},[57,65420,1576],{"class":140},[57,65422,65423],{"class":59,"line":2883},[57,65424,2460],{"class":140},[57,65426,65427],{"class":59,"line":2889},[57,65428,2673],{"emptyLinePlaceholder":350},[57,65430,65431,65434],{"class":59,"line":2894},[57,65432,65433],{"class":70},"    .allCheck",[57,65435,15844],{"class":140},[57,65437,65438,65440,65442,65444,65446],{"class":59,"line":8221},[57,65439,54968],{"class":81},[57,65441,51634],{"class":140},[57,65443,1028],{"class":81},[57,65445,51689],{"class":136},[57,65447,1576],{"class":140},[57,65449,65450],{"class":59,"line":8245},[57,65451,2460],{"class":140},[57,65453,65454,65456,65458],{"class":59,"line":8250},[57,65455,52614],{"class":140},[57,65457,342],{"class":51497},[57,65459,51504],{"class":140},[57,65461,65462,65464,65466],{"class":59,"line":8256},[57,65463,51982],{"class":140},[57,65465,51531],{"class":51497},[57,65467,51504],{"class":140},[57,65469,65470],{"class":59,"line":8283},[57,65471,2673],{"emptyLinePlaceholder":350},[57,65473,65474,65476,65478],{"class":59,"line":8288},[57,65475,1326],{"class":140},[57,65477,51997],{"class":51497},[57,65479,51504],{"class":140},[57,65481,65482,65484,65486],{"class":59,"line":8294},[57,65483,52341],{"class":140},[57,65485,557],{"class":51497},[57,65487,51504],{"class":140},[57,65489,65490,65492,65494],{"class":59,"line":8306},[57,65491,51538],{"class":140},[57,65493,563],{"class":51497},[57,65495,51504],{"class":140},[57,65497,65498,65500,65502,65504,65506,65509],{"class":59,"line":8318},[57,65499,55431],{"class":140},[57,65501,566],{"class":51497},[57,65503,53683],{"class":70},[57,65505,156],{"class":140},[57,65507,65508],{"class":74},"\"allCheck\"",[57,65510,51504],{"class":140},[57,65512,65513,65515,65517,65519,65521,65523,65525,65527,65529,65531,65533,65536,65539,65541,65543,65545,65548,65551,65553],{"class":59,"line":8330},[57,65514,55499],{"class":140},[57,65516,54018],{"class":51497},[57,65518,54021],{"class":70},[57,65520,156],{"class":140},[57,65522,54026],{"class":74},[57,65524,15192],{"class":70},[57,65526,156],{"class":140},[57,65528,7925],{"class":74},[57,65530,15231],{"class":70},[57,65532,156],{"class":140},[57,65534,65535],{"class":74},"\"checkAll\"",[57,65537,65538],{"class":140},"> \u003C",[57,65540,57],{"class":51497},[57,65542,53683],{"class":70},[57,65544,156],{"class":140},[57,65546,65547],{"class":74},"\"all\"",[57,65549,65550],{"class":140},">全选\u003C\u002F",[57,65552,57],{"class":51497},[57,65554,51504],{"class":140},[57,65556,65557,65559,65561],{"class":59,"line":9989},[57,65558,55604],{"class":140},[57,65560,566],{"class":51497},[57,65562,51504],{"class":140},[57,65564,65565,65567,65569,65572,65574],{"class":59,"line":10014},[57,65566,55431],{"class":140},[57,65568,566],{"class":51497},[57,65570,65571],{"class":140},">商品\u003C\u002F",[57,65573,566],{"class":51497},[57,65575,51504],{"class":140},[57,65577,65578,65580,65582,65585,65587],{"class":59,"line":10037},[57,65579,55431],{"class":140},[57,65581,566],{"class":51497},[57,65583,65584],{"class":140},">商家\u003C\u002F",[57,65586,566],{"class":51497},[57,65588,51504],{"class":140},[57,65590,65591,65593,65595,65598,65600],{"class":59,"line":10061},[57,65592,55431],{"class":140},[57,65594,566],{"class":51497},[57,65596,65597],{"class":140},">价格\u003C\u002F",[57,65599,566],{"class":51497},[57,65601,51504],{"class":140},[57,65603,65604,65606,65608],{"class":59,"line":10066},[57,65605,51973],{"class":140},[57,65607,563],{"class":51497},[57,65609,51504],{"class":140},[57,65611,65612,65614,65616],{"class":59,"line":10071},[57,65613,51538],{"class":140},[57,65615,563],{"class":51497},[57,65617,51504],{"class":140},[57,65619,65620,65622,65624],{"class":59,"line":10076},[57,65621,55431],{"class":140},[57,65623,608],{"class":51497},[57,65625,51504],{"class":140},[57,65627,65628,65630,65632,65634,65636,65638,65640,65642,65645,65647,65649,65652],{"class":59,"line":10085},[57,65629,55499],{"class":140},[57,65631,54018],{"class":51497},[57,65633,54021],{"class":70},[57,65635,156],{"class":140},[57,65637,54026],{"class":74},[57,65639,15192],{"class":70},[57,65641,156],{"class":140},[57,65643,65644],{"class":74},"\"check\"",[57,65646,53683],{"class":70},[57,65648,156],{"class":140},[57,65650,65651],{"class":74},"\"ck\"",[57,65653,51504],{"class":140},[57,65655,65656,65658,65660],{"class":59,"line":10090},[57,65657,55604],{"class":140},[57,65659,608],{"class":51497},[57,65661,51504],{"class":140},[57,65663,65664,65666,65668,65670,65672],{"class":59,"line":10096},[57,65665,55431],{"class":140},[57,65667,608],{"class":51497},[57,65669,61370],{"class":140},[57,65671,608],{"class":51497},[57,65673,51504],{"class":140},[57,65675,65676,65678,65680,65683,65685],{"class":59,"line":10117},[57,65677,55431],{"class":140},[57,65679,608],{"class":51497},[57,65681,65682],{"class":140},">小米\u003C\u002F",[57,65684,608],{"class":51497},[57,65686,51504],{"class":140},[57,65688,65689,65691,65693,65696,65698],{"class":59,"line":10123},[57,65690,55431],{"class":140},[57,65692,608],{"class":51497},[57,65694,65695],{"class":140},">￥1999\u003C\u002F",[57,65697,608],{"class":51497},[57,65699,51504],{"class":140},[57,65701,65702,65704,65706],{"class":59,"line":10137},[57,65703,51973],{"class":140},[57,65705,563],{"class":51497},[57,65707,51504],{"class":140},[57,65709,65710,65712,65714],{"class":59,"line":10143},[57,65711,51538],{"class":140},[57,65713,563],{"class":51497},[57,65715,51504],{"class":140},[57,65717,65718,65720,65722],{"class":59,"line":10170},[57,65719,55431],{"class":140},[57,65721,608],{"class":51497},[57,65723,51504],{"class":140},[57,65725,65726,65728,65730,65732,65734,65736,65738,65740,65742,65744,65746,65748],{"class":59,"line":10179},[57,65727,55499],{"class":140},[57,65729,54018],{"class":51497},[57,65731,54021],{"class":70},[57,65733,156],{"class":140},[57,65735,54026],{"class":74},[57,65737,15192],{"class":70},[57,65739,156],{"class":140},[57,65741,65644],{"class":74},[57,65743,53683],{"class":70},[57,65745,156],{"class":140},[57,65747,65651],{"class":74},[57,65749,51504],{"class":140},[57,65751,65752,65754,65756],{"class":59,"line":10185},[57,65753,55604],{"class":140},[57,65755,608],{"class":51497},[57,65757,51504],{"class":140},[57,65759,65760,65762,65764,65767,65769],{"class":59,"line":10193},[57,65761,55431],{"class":140},[57,65763,608],{"class":51497},[57,65765,65766],{"class":140},">小米净水器\u003C\u002F",[57,65768,608],{"class":51497},[57,65770,51504],{"class":140},[57,65772,65773,65775,65777,65779,65781],{"class":59,"line":10198},[57,65774,55431],{"class":140},[57,65776,608],{"class":51497},[57,65778,65682],{"class":140},[57,65780,608],{"class":51497},[57,65782,51504],{"class":140},[57,65784,65785,65787,65789,65792,65794],{"class":59,"line":16876},[57,65786,55431],{"class":140},[57,65788,608],{"class":51497},[57,65790,65791],{"class":140},">￥4999\u003C\u002F",[57,65793,608],{"class":51497},[57,65795,51504],{"class":140},[57,65797,65798,65800,65802],{"class":59,"line":16882},[57,65799,51973],{"class":140},[57,65801,563],{"class":51497},[57,65803,51504],{"class":140},[57,65805,65806,65808,65810],{"class":59,"line":16905},[57,65807,51538],{"class":140},[57,65809,563],{"class":51497},[57,65811,51504],{"class":140},[57,65813,65814,65816,65818],{"class":59,"line":16911},[57,65815,55431],{"class":140},[57,65817,608],{"class":51497},[57,65819,51504],{"class":140},[57,65821,65822,65824,65826,65828,65830,65832,65834,65836,65838,65840,65842,65844],{"class":59,"line":16934},[57,65823,55499],{"class":140},[57,65825,54018],{"class":51497},[57,65827,54021],{"class":70},[57,65829,156],{"class":140},[57,65831,54026],{"class":74},[57,65833,15192],{"class":70},[57,65835,156],{"class":140},[57,65837,65644],{"class":74},[57,65839,53683],{"class":70},[57,65841,156],{"class":140},[57,65843,65651],{"class":74},[57,65845,51504],{"class":140},[57,65847,65848,65850,65852],{"class":59,"line":16948},[57,65849,55604],{"class":140},[57,65851,608],{"class":51497},[57,65853,51504],{"class":140},[57,65855,65856,65858,65860,65863,65865],{"class":59,"line":16968},[57,65857,55431],{"class":140},[57,65859,608],{"class":51497},[57,65861,65862],{"class":140},">小米电视\u003C\u002F",[57,65864,608],{"class":51497},[57,65866,51504],{"class":140},[57,65868,65869,65871,65873,65875,65877],{"class":59,"line":16974},[57,65870,55431],{"class":140},[57,65872,608],{"class":51497},[57,65874,65682],{"class":140},[57,65876,608],{"class":51497},[57,65878,51504],{"class":140},[57,65880,65881,65883,65885,65888,65890],{"class":59,"line":16985},[57,65882,55431],{"class":140},[57,65884,608],{"class":51497},[57,65886,65887],{"class":140},">￥5999\u003C\u002F",[57,65889,608],{"class":51497},[57,65891,51504],{"class":140},[57,65893,65894,65896,65898],{"class":59,"line":17008},[57,65895,51973],{"class":140},[57,65897,563],{"class":51497},[57,65899,51504],{"class":140},[57,65901,65902,65904,65906],{"class":59,"line":17030},[57,65903,52614],{"class":140},[57,65905,557],{"class":51497},[57,65907,51504],{"class":140},[57,65909,65910,65912,65914],{"class":59,"line":17035},[57,65911,52341],{"class":140},[57,65913,52010],{"class":51497},[57,65915,51504],{"class":140},[57,65917,65918],{"class":59,"line":17041},[57,65919,65920],{"class":63},"    \u002F\u002F 1. 获取大复选框\n",[57,65922,65923,65925,65928,65930,65932,65934,65936,65939],{"class":59,"line":17055},[57,65924,11494],{"class":136},[57,65926,65927],{"class":81}," checkAll",[57,65929,13837],{"class":136},[57,65931,54593],{"class":140},[57,65933,54596],{"class":70},[57,65935,168],{"class":140},[57,65937,65938],{"class":74},"'#checkAll'",[57,65940,238],{"class":140},[57,65942,65943],{"class":59,"line":17068},[57,65944,65945],{"class":63},"    \u002F\u002F 2. 获取所有的小复选框\n",[57,65947,65948,65950,65953,65955,65957,65959,65961,65964],{"class":59,"line":17073},[57,65949,11494],{"class":136},[57,65951,65952],{"class":81}," cks",[57,65954,13837],{"class":136},[57,65956,54593],{"class":140},[57,65958,55878],{"class":70},[57,65960,168],{"class":140},[57,65962,65963],{"class":74},"'.ck'",[57,65965,238],{"class":140},[57,65967,65968],{"class":59,"line":17087},[57,65969,65970],{"class":63},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[57,65972,65973,65976,65978,65980,65982,65984,65986],{"class":59,"line":17092},[57,65974,65975],{"class":140},"    checkAll.",[57,65977,58010],{"class":70},[57,65979,168],{"class":140},[57,65981,58015],{"class":74},[57,65983,12708],{"class":140},[57,65985,54646],{"class":136},[57,65987,54649],{"class":140},[57,65989,65990],{"class":59,"line":17098},[57,65991,65992],{"class":63},"      \u002F\u002F 得到当前大复选框的选中状态\n",[57,65994,65995,65998],{"class":59,"line":17103},[57,65996,65997],{"class":63},"      \u002F\u002F console.log(checkAll.checked)",[57,65999,66000],{"class":63},"  \u002F\u002F 得到 是 true 或者是 false\n",[57,66002,66003],{"class":59,"line":17117},[57,66004,66005],{"class":63},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[57,66007,66008,66010,66012,66014,66016,66018,66020,66022,66024,66027,66029,66031,66033],{"class":59,"line":17122},[57,66009,52481],{"class":136},[57,66011,1934],{"class":140},[57,66013,52044],{"class":136},[57,66015,9711],{"class":140},[57,66017,156],{"class":136},[57,66019,4366],{"class":81},[57,66021,9718],{"class":140},[57,66023,1326],{"class":136},[57,66025,66026],{"class":140}," cks.",[57,66028,52165],{"class":81},[57,66030,3487],{"class":140},[57,66032,2565],{"class":136},[57,66034,12715],{"class":140},[57,66036,66037,66040,66042,66045],{"class":59,"line":17127},[57,66038,66039],{"class":140},"        cks[i].checked ",[57,66041,156],{"class":136},[57,66043,66044],{"class":81}," this",[57,66046,66047],{"class":140},".checked\n",[57,66049,66050],{"class":59,"line":17141},[57,66051,52595],{"class":140},[57,66053,66054],{"class":59,"line":17153},[57,66055,33658],{"class":140},[57,66057,66058],{"class":59,"line":17158},[57,66059,66060],{"class":63},"    \u002F\u002F 5. 小复选框控制大复选框\n",[57,66062,66063],{"class":59,"line":17171},[57,66064,2673],{"emptyLinePlaceholder":350},[57,66066,66067,66069,66071,66073,66075,66077,66079,66081,66083,66085,66087,66089,66091],{"class":59,"line":17176},[57,66068,3474],{"class":136},[57,66070,1934],{"class":140},[57,66072,52044],{"class":136},[57,66074,9711],{"class":140},[57,66076,156],{"class":136},[57,66078,4366],{"class":81},[57,66080,9718],{"class":140},[57,66082,1326],{"class":136},[57,66084,66026],{"class":140},[57,66086,52165],{"class":81},[57,66088,3487],{"class":140},[57,66090,2565],{"class":136},[57,66092,12715],{"class":140},[57,66094,66095],{"class":59,"line":17181},[57,66096,66097],{"class":63},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[57,66099,66100,66103,66105,66107,66109,66111,66113],{"class":59,"line":17186},[57,66101,66102],{"class":140},"      cks[i].",[57,66104,58010],{"class":70},[57,66106,168],{"class":140},[57,66108,58015],{"class":74},[57,66110,12708],{"class":140},[57,66112,54646],{"class":136},[57,66114,54649],{"class":140},[57,66116,66117],{"class":59,"line":17199},[57,66118,66119],{"class":63},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[57,66121,66122],{"class":59,"line":17204},[57,66123,66124],{"class":63},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[57,66126,66127],{"class":59,"line":32830},[57,66128,66129],{"class":63},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[57,66131,66132],{"class":59,"line":32836},[57,66133,66134],{"class":63},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[57,66136,66137,66140,66142,66144,66146,66148,66151,66153,66155,66157,66159],{"class":59,"line":32842},[57,66138,66139],{"class":140},"        checkAll.checked ",[57,66141,156],{"class":136},[57,66143,54593],{"class":140},[57,66145,55878],{"class":70},[57,66147,168],{"class":140},[57,66149,66150],{"class":74},"'.ck:checked'",[57,66152,31023],{"class":140},[57,66154,52165],{"class":81},[57,66156,58103],{"class":136},[57,66158,66026],{"class":140},[57,66160,56028],{"class":81},[57,66162,66163],{"class":59,"line":32848},[57,66164,65012],{"class":140},[57,66166,66167],{"class":59,"line":32854},[57,66168,2460],{"class":140},[57,66170,66171,66173,66175],{"class":59,"line":32865},[57,66172,52614],{"class":140},[57,66174,52010],{"class":51497},[57,66176,51504],{"class":140},[57,66178,66179,66181,66183],{"class":59,"line":32871},[57,66180,51982],{"class":140},[57,66182,51997],{"class":51497},[57,66184,51504],{"class":140},[57,66186,66187],{"class":59,"line":32891},[57,66188,2673],{"emptyLinePlaceholder":350},[57,66190,66191,66193,66195],{"class":59,"line":32897},[57,66192,51982],{"class":140},[57,66194,50832],{"class":51497},[57,66196,51504],{"class":140},[14,66198,66199],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,66201,66202],{},"用好之间比较得到的布尔值！！！",[14,66204,66205,66206,66209,66210,1934,66213,1000,66215,66218],{},"在 JS 里访问的时候，",[28,66207,66208],{},"checkbox.checked"," 是一个 ",[33,66211,66212],{},"布尔值",[28,66214,1645],{},[28,66216,66217],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,66220,66221,66222,66225,66226],{},"HTML 的 ",[28,66223,66224],{},"checked=\"checked\""," 只是 ",[33,66227,66228,66229,66232],{},"初始值；JS 的 ",[28,66230,66231],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,66234,66235],{},"：checked是一个伪类选择器",[14,66237,66238],{},[44,66239],{"alt":46,"src":66240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,66242,66243,66246],{},[66244,66245],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,66248,66249],{},[44,66250],{"alt":46,"src":66251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[365,66253,66255],{"id":66254},"_33-dom事件进阶","3.3 DOM事件进阶",[394,66257,66259],{"id":66258},"_331-事件流","3.3.1 事件流",[14,66261,66262],{},[44,66263],{"alt":46,"src":66264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22270,66266,66268],{"id":66267},"_3311-事件捕获","3.3.1.1 事件捕获",[14,66270,66271],{},[44,66272],{"alt":46,"src":66273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[49,66275,66277],{"className":50830,"code":66276,"language":50832,"meta":46,"style":46},"\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",[28,66278,66279,66289,66303,66307,66315,66329,66349,66361,66369,66376,66388,66400,66410,66414,66418,66425,66437,66449,66459,66463,66471,66479,66483,66491,66506,66525,66533,66541,66561,66581,66597,66608,66616,66633,66644,66652,66669,66680,66688,66696,66704,66708],{"__ignoreMap":46},[57,66280,66281,66283,66285,66287],{"class":59,"line":60},[57,66282,51494],{"class":140},[57,66284,51498],{"class":51497},[57,66286,51501],{"class":70},[57,66288,51504],{"class":140},[57,66290,66291,66293,66295,66297,66299,66301],{"class":59,"line":67},[57,66292,1326],{"class":140},[57,66294,50832],{"class":51497},[57,66296,51513],{"class":70},[57,66298,156],{"class":140},[57,66300,51518],{"class":74},[57,66302,51504],{"class":140},[57,66304,66305],{"class":59,"line":144},[57,66306,2673],{"emptyLinePlaceholder":350},[57,66308,66309,66311,66313],{"class":59,"line":150},[57,66310,1326],{"class":140},[57,66312,51531],{"class":51497},[57,66314,51504],{"class":140},[57,66316,66317,66319,66321,66323,66325,66327],{"class":59,"line":162},[57,66318,52341],{"class":140},[57,66320,51541],{"class":51497},[57,66322,51544],{"class":70},[57,66324,156],{"class":140},[57,66326,51549],{"class":74},[57,66328,51504],{"class":140},[57,66330,66331,66333,66335,66337,66339,66341,66343,66345,66347],{"class":59,"line":180},[57,66332,52341],{"class":140},[57,66334,51541],{"class":51497},[57,66336,15192],{"class":70},[57,66338,156],{"class":140},[57,66340,51588],{"class":74},[57,66342,51568],{"class":70},[57,66344,156],{"class":140},[57,66346,51595],{"class":74},[57,66348,51504],{"class":140},[57,66350,66351,66353,66355,66357,66359],{"class":59,"line":186},[57,66352,52341],{"class":140},[57,66354,51604],{"class":51497},[57,66356,51607],{"class":140},[57,66358,51604],{"class":51497},[57,66360,51504],{"class":140},[57,66362,66363,66365,66367],{"class":59,"line":197},[57,66364,52341],{"class":140},[57,66366,342],{"class":51497},[57,66368,51504],{"class":140},[57,66370,66371,66374],{"class":59,"line":241},[57,66372,66373],{"class":70},"    .father",[57,66375,15844],{"class":140},[57,66377,66378,66380,66382,66384,66386],{"class":59,"line":249},[57,66379,54968],{"class":81},[57,66381,51634],{"class":140},[57,66383,65271],{"class":81},[57,66385,51689],{"class":136},[57,66387,1576],{"class":140},[57,66389,66390,66392,66394,66396,66398],{"class":59,"line":262},[57,66391,54982],{"class":81},[57,66393,51634],{"class":140},[57,66395,65271],{"class":81},[57,66397,51689],{"class":136},[57,66399,1576],{"class":140},[57,66401,66402,66404,66406,66408],{"class":59,"line":281},[57,66403,55081],{"class":81},[57,66405,51634],{"class":140},[57,66407,51842],{"class":81},[57,66409,1576],{"class":140},[57,66411,66412],{"class":59,"line":287},[57,66413,2460],{"class":140},[57,66415,66416],{"class":59,"line":298},[57,66417,2673],{"emptyLinePlaceholder":350},[57,66419,66420,66423],{"class":59,"line":311},[57,66421,66422],{"class":70},"    .son",[57,66424,15844],{"class":140},[57,66426,66427,66429,66431,66433,66435],{"class":59,"line":322},[57,66428,54968],{"class":81},[57,66430,51634],{"class":140},[57,66432,1996],{"class":81},[57,66434,51689],{"class":136},[57,66436,1576],{"class":140},[57,66438,66439,66441,66443,66445,66447],{"class":59,"line":1929},[57,66440,54982],{"class":81},[57,66442,51634],{"class":140},[57,66444,1996],{"class":81},[57,66446,51689],{"class":136},[57,66448,1576],{"class":140},[57,66450,66451,66453,66455,66457],{"class":59,"line":1950},[57,66452,55081],{"class":81},[57,66454,51634],{"class":140},[57,66456,55086],{"class":81},[57,66458,1576],{"class":140},[57,66460,66461],{"class":59,"line":1955},[57,66462,2460],{"class":140},[57,66464,66465,66467,66469],{"class":59,"line":1969},[57,66466,52614],{"class":140},[57,66468,342],{"class":51497},[57,66470,51504],{"class":140},[57,66472,66473,66475,66477],{"class":59,"line":1974},[57,66474,51982],{"class":140},[57,66476,51531],{"class":51497},[57,66478,51504],{"class":140},[57,66480,66481],{"class":59,"line":2001},[57,66482,2673],{"emptyLinePlaceholder":350},[57,66484,66485,66487,66489],{"class":59,"line":2006},[57,66486,1326],{"class":140},[57,66488,51997],{"class":51497},[57,66490,51504],{"class":140},[57,66492,66493,66495,66497,66499,66501,66504],{"class":59,"line":2023},[57,66494,52341],{"class":140},[57,66496,51808],{"class":51497},[57,66498,53683],{"class":70},[57,66500,156],{"class":140},[57,66502,66503],{"class":74},"\"father\"",[57,66505,51504],{"class":140},[57,66507,66508,66510,66512,66514,66516,66519,66521,66523],{"class":59,"line":2028},[57,66509,51538],{"class":140},[57,66511,51808],{"class":51497},[57,66513,53683],{"class":70},[57,66515,156],{"class":140},[57,66517,66518],{"class":74},"\"son\"",[57,66520,55511],{"class":140},[57,66522,51808],{"class":51497},[57,66524,51504],{"class":140},[57,66526,66527,66529,66531],{"class":59,"line":2033},[57,66528,52614],{"class":140},[57,66530,51808],{"class":51497},[57,66532,51504],{"class":140},[57,66534,66535,66537,66539],{"class":59,"line":2038},[57,66536,52341],{"class":140},[57,66538,52010],{"class":51497},[57,66540,51504],{"class":140},[57,66542,66543,66545,66548,66550,66552,66554,66556,66559],{"class":59,"line":2052},[57,66544,11494],{"class":136},[57,66546,66547],{"class":81}," fa",[57,66549,13837],{"class":136},[57,66551,54593],{"class":140},[57,66553,54596],{"class":70},[57,66555,168],{"class":140},[57,66557,66558],{"class":74},"'.father'",[57,66560,238],{"class":140},[57,66562,66563,66565,66568,66570,66572,66574,66576,66579],{"class":59,"line":2057},[57,66564,11494],{"class":136},[57,66566,66567],{"class":81}," son",[57,66569,13837],{"class":136},[57,66571,54593],{"class":140},[57,66573,54596],{"class":70},[57,66575,168],{"class":140},[57,66577,66578],{"class":74},"'.son'",[57,66580,238],{"class":140},[57,66582,66583,66585,66587,66589,66591,66593,66595],{"class":59,"line":2850},[57,66584,52604],{"class":140},[57,66586,58010],{"class":70},[57,66588,168],{"class":140},[57,66590,58015],{"class":74},[57,66592,12708],{"class":140},[57,66594,54646],{"class":136},[57,66596,54649],{"class":140},[57,66598,66599,66601,66603,66606],{"class":59,"line":2864},[57,66600,59122],{"class":70},[57,66602,168],{"class":140},[57,66604,66605],{"class":74},"'woshiu1'",[57,66607,238],{"class":140},[57,66609,66610,66612,66614],{"class":59,"line":2872},[57,66611,54732],{"class":140},[57,66613,1645],{"class":81},[57,66615,238],{"class":140},[57,66617,66618,66621,66623,66625,66627,66629,66631],{"class":59,"line":2877},[57,66619,66620],{"class":140},"    fa.",[57,66622,58010],{"class":70},[57,66624,168],{"class":140},[57,66626,58015],{"class":74},[57,66628,12708],{"class":140},[57,66630,54646],{"class":136},[57,66632,54649],{"class":140},[57,66634,66635,66637,66639,66642],{"class":59,"line":2883},[57,66636,59122],{"class":70},[57,66638,168],{"class":140},[57,66640,66641],{"class":74},"'1'",[57,66643,238],{"class":140},[57,66645,66646,66648,66650],{"class":59,"line":2889},[57,66647,54732],{"class":140},[57,66649,1645],{"class":81},[57,66651,238],{"class":140},[57,66653,66654,66657,66659,66661,66663,66665,66667],{"class":59,"line":2894},[57,66655,66656],{"class":140},"    son.",[57,66658,58010],{"class":70},[57,66660,168],{"class":140},[57,66662,58015],{"class":74},[57,66664,12708],{"class":140},[57,66666,54646],{"class":136},[57,66668,54649],{"class":140},[57,66670,66671,66673,66675,66678],{"class":59,"line":8221},[57,66672,59122],{"class":70},[57,66674,168],{"class":140},[57,66676,66677],{"class":74},"'2'",[57,66679,238],{"class":140},[57,66681,66682,66684,66686],{"class":59,"line":8245},[57,66683,54732],{"class":140},[57,66685,1645],{"class":81},[57,66687,238],{"class":140},[57,66689,66690,66692,66694],{"class":59,"line":8250},[57,66691,52614],{"class":140},[57,66693,52010],{"class":51497},[57,66695,51504],{"class":140},[57,66697,66698,66700,66702],{"class":59,"line":8256},[57,66699,51982],{"class":140},[57,66701,51997],{"class":51497},[57,66703,51504],{"class":140},[57,66705,66706],{"class":59,"line":8283},[57,66707,2673],{"emptyLinePlaceholder":350},[57,66709,66710,66712,66714],{"class":59,"line":8288},[57,66711,51982],{"class":140},[57,66713,50832],{"class":51497},[57,66715,51504],{"class":140},[14,66717,66718],{},[44,66719],{"alt":46,"src":66720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,66722,66723],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22270,66725,66727],{"id":66726},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,66729,66730],{},[44,66731],{"alt":46,"src":66732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,66734,66735],{},"反着来",[14,66737,66738],{},"注意是同名事件，比如都是‘click’",[22270,66740,66742],{"id":66741},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,66744,66745],{},[44,66746],{"alt":46,"src":66747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22270,66749,66751],{"id":66750},"_3314-解绑事件","3.3.1.4 解绑事件",[14,66753,66754],{},[44,66755],{"alt":46,"src":66756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,66758,66759],{},[44,66760],{"alt":46,"src":66761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22270,66763,66765],{"id":66764},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[377,66767,66768],{},[380,66769,66770],{},"事件类型的区别",[14,66772,66773],{},[44,66774],{"alt":46,"src":66775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,66777,66778],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[377,66780,66781],{"start":67},[380,66782,66783],{},"注册事件的区别",[14,66785,66786],{},[44,66787],{"alt":46,"src":66788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22270,66790,66792],{"id":66791},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,66794,66795],{},[44,66796],{"alt":46,"src":66797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,66799,66800],{},[44,66801],{"alt":46,"src":66802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[49,66804,66806],{"className":53264,"code":66805,"language":53266,"meta":46,"style":46},"\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",[28,66807,66808,66816,66833,66856,66864,66869,66874,66879,66883,66891,66899],{"__ignoreMap":46},[57,66809,66810,66812,66814],{"class":59,"line":60},[57,66811,1326],{"class":140},[57,66813,51997],{"class":51497},[57,66815,51504],{"class":140},[57,66817,66818,66820,66823,66826,66828,66831],{"class":59,"line":67},[57,66819,52341],{"class":140},[57,66821,66822],{"class":51497},"form",[57,66824,66825],{"class":70}," action",[57,66827,156],{"class":140},[57,66829,66830],{"class":74},"\"http:\u002F\u002Fwww.itcast.cn\"",[57,66832,51504],{"class":140},[57,66834,66835,66837,66839,66841,66843,66846,66849,66851,66854],{"class":59,"line":144},[57,66836,51538],{"class":140},[57,66838,54018],{"class":51497},[57,66840,54021],{"class":70},[57,66842,156],{"class":140},[57,66844,66845],{"class":74},"\"submit\"",[57,66847,66848],{"class":70}," value",[57,66850,156],{"class":140},[57,66852,66853],{"class":74},"\"免费注册\"",[57,66855,51504],{"class":140},[57,66857,66858,66860,66862],{"class":59,"line":150},[57,66859,51538],{"class":140},[57,66861,52010],{"class":51497},[57,66863,51504],{"class":140},[57,66865,66866],{"class":59,"line":162},[57,66867,66868],{"class":140},"      const form = document.querySelector('form')\n",[57,66870,66871],{"class":59,"line":180},[57,66872,66873],{"class":140},"      form.addEventListener('submit', function (e) {\n",[57,66875,66876],{"class":59,"line":186},[57,66877,66878],{"class":140},"        e.preventDefault()\n",[57,66880,66881],{"class":59,"line":197},[57,66882,65012],{"class":140},[57,66884,66885,66887,66889],{"class":59,"line":241},[57,66886,51973],{"class":140},[57,66888,52010],{"class":51497},[57,66890,51504],{"class":140},[57,66892,66893,66895,66897],{"class":59,"line":249},[57,66894,52614],{"class":140},[57,66896,66822],{"class":51497},[57,66898,51504],{"class":140},[57,66900,66901,66903,66905],{"class":59,"line":262},[57,66902,51982],{"class":140},[57,66904,51997],{"class":51497},[57,66906,51504],{"class":140},[14,66908,66909],{},"点击不在跳转！！！",[394,66911,66913],{"id":66912},"_332-事件委托","3.3.2 事件委托",[14,66915,66916],{},[44,66917],{"alt":46,"src":66918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[49,66920,66922],{"className":50830,"code":66921,"language":50832,"meta":46,"style":46},"\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",[28,66923,66924,66934,66948,66952,66960,66974,66994,67006,67014,67018,67026,67034,67046,67058,67070,67082,67094,67107,67115,67123,67128,67147,67168,67173,67178,67183,67188,67197,67201,67211,67215,67220,67225,67239,67249,67253,67257,67265,67273,67277],{"__ignoreMap":46},[57,66925,66926,66928,66930,66932],{"class":59,"line":60},[57,66927,51494],{"class":140},[57,66929,51498],{"class":51497},[57,66931,51501],{"class":70},[57,66933,51504],{"class":140},[57,66935,66936,66938,66940,66942,66944,66946],{"class":59,"line":67},[57,66937,1326],{"class":140},[57,66939,50832],{"class":51497},[57,66941,51513],{"class":70},[57,66943,156],{"class":140},[57,66945,51518],{"class":74},[57,66947,51504],{"class":140},[57,66949,66950],{"class":59,"line":144},[57,66951,2673],{"emptyLinePlaceholder":350},[57,66953,66954,66956,66958],{"class":59,"line":150},[57,66955,1326],{"class":140},[57,66957,51531],{"class":51497},[57,66959,51504],{"class":140},[57,66961,66962,66964,66966,66968,66970,66972],{"class":59,"line":162},[57,66963,52341],{"class":140},[57,66965,51541],{"class":51497},[57,66967,51544],{"class":70},[57,66969,156],{"class":140},[57,66971,51549],{"class":74},[57,66973,51504],{"class":140},[57,66975,66976,66978,66980,66982,66984,66986,66988,66990,66992],{"class":59,"line":180},[57,66977,52341],{"class":140},[57,66979,51541],{"class":51497},[57,66981,15192],{"class":70},[57,66983,156],{"class":140},[57,66985,51588],{"class":74},[57,66987,51568],{"class":70},[57,66989,156],{"class":140},[57,66991,51595],{"class":74},[57,66993,51504],{"class":140},[57,66995,66996,66998,67000,67002,67004],{"class":59,"line":186},[57,66997,52341],{"class":140},[57,66999,51604],{"class":51497},[57,67001,51607],{"class":140},[57,67003,51604],{"class":51497},[57,67005,51504],{"class":140},[57,67007,67008,67010,67012],{"class":59,"line":197},[57,67009,51982],{"class":140},[57,67011,51531],{"class":51497},[57,67013,51504],{"class":140},[57,67015,67016],{"class":59,"line":241},[57,67017,2673],{"emptyLinePlaceholder":350},[57,67019,67020,67022,67024],{"class":59,"line":249},[57,67021,1326],{"class":140},[57,67023,51997],{"class":51497},[57,67025,51504],{"class":140},[57,67027,67028,67030,67032],{"class":59,"line":262},[57,67029,52341],{"class":140},[57,67031,1422],{"class":51497},[57,67033,51504],{"class":140},[57,67035,67036,67038,67040,67042,67044],{"class":59,"line":281},[57,67037,51538],{"class":140},[57,67039,380],{"class":51497},[57,67041,54163],{"class":140},[57,67043,380],{"class":51497},[57,67045,51504],{"class":140},[57,67047,67048,67050,67052,67054,67056],{"class":59,"line":287},[57,67049,51538],{"class":140},[57,67051,380],{"class":51497},[57,67053,54182],{"class":140},[57,67055,380],{"class":51497},[57,67057,51504],{"class":140},[57,67059,67060,67062,67064,67066,67068],{"class":59,"line":298},[57,67061,51538],{"class":140},[57,67063,380],{"class":51497},[57,67065,54201],{"class":140},[57,67067,380],{"class":51497},[57,67069,51504],{"class":140},[57,67071,67072,67074,67076,67078,67080],{"class":59,"line":311},[57,67073,51538],{"class":140},[57,67075,380],{"class":51497},[57,67077,54220],{"class":140},[57,67079,380],{"class":51497},[57,67081,51504],{"class":140},[57,67083,67084,67086,67088,67090,67092],{"class":59,"line":322},[57,67085,51538],{"class":140},[57,67087,380],{"class":51497},[57,67089,54239],{"class":140},[57,67091,380],{"class":51497},[57,67093,51504],{"class":140},[57,67095,67096,67098,67100,67103,67105],{"class":59,"line":1929},[57,67097,51538],{"class":140},[57,67099,14],{"class":51497},[57,67101,67102],{"class":140},">我不需要变色\u003C\u002F",[57,67104,14],{"class":51497},[57,67106,51504],{"class":140},[57,67108,67109,67111,67113],{"class":59,"line":1950},[57,67110,52614],{"class":140},[57,67112,1422],{"class":51497},[57,67114,51504],{"class":140},[57,67116,67117,67119,67121],{"class":59,"line":1955},[57,67118,52341],{"class":140},[57,67120,52010],{"class":51497},[57,67122,51504],{"class":140},[57,67124,67125],{"class":59,"line":1969},[57,67126,67127],{"class":63},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[57,67129,67130,67132,67134,67136,67138,67140,67142,67145],{"class":59,"line":1974},[57,67131,11494],{"class":136},[57,67133,61489],{"class":81},[57,67135,13837],{"class":136},[57,67137,54593],{"class":140},[57,67139,54596],{"class":70},[57,67141,168],{"class":140},[57,67143,67144],{"class":74},"'ul'",[57,67146,238],{"class":140},[57,67148,67149,67152,67154,67156,67158,67160,67162,67164,67166],{"class":59,"line":2001},[57,67150,67151],{"class":140},"    ul.",[57,67153,58010],{"class":70},[57,67155,168],{"class":140},[57,67157,58015],{"class":74},[57,67159,12708],{"class":140},[57,67161,54646],{"class":136},[57,67163,1934],{"class":140},[57,67165,495],{"class":5489},[57,67167,12715],{"class":140},[57,67169,67170],{"class":59,"line":2006},[57,67171,67172],{"class":63},"      \u002F\u002F alert(1)\n",[57,67174,67175],{"class":59,"line":2023},[57,67176,67177],{"class":63},"      \u002F\u002F e.target就是我们点击的对象\n",[57,67179,67180],{"class":59,"line":2028},[57,67181,67182],{"class":63},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[57,67184,67185],{"class":59,"line":2033},[57,67186,67187],{"class":63},"      \u002F\u002F e.target.style.color = 'red'\n",[57,67189,67190,67192,67194],{"class":59,"line":2038},[57,67191,58441],{"class":140},[57,67193,58444],{"class":70},[57,67195,67196],{"class":140},"(e)\n",[57,67198,67199],{"class":59,"line":2052},[57,67200,2673],{"emptyLinePlaceholder":350},[57,67202,67203,67205,67208],{"class":59,"line":2057},[57,67204,58441],{"class":140},[57,67206,67207],{"class":70},"dir",[57,67209,67210],{"class":140},"(e.target)\n",[57,67212,67213],{"class":59,"line":2850},[57,67214,2673],{"emptyLinePlaceholder":350},[57,67216,67217],{"class":59,"line":2864},[57,67218,67219],{"class":63},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[57,67221,67222],{"class":59,"line":2872},[57,67223,67224],{"class":63},"      \u002F\u002F 通过tagName来进行判断\n",[57,67226,67227,67229,67232,67234,67237],{"class":59,"line":2877},[57,67228,54677],{"class":136},[57,67230,67231],{"class":140}," (e.target.tagName ",[57,67233,54683],{"class":136},[57,67235,67236],{"class":74}," 'LI'",[57,67238,12715],{"class":140},[57,67240,67241,67244,67246],{"class":59,"line":2883},[57,67242,67243],{"class":140},"        e.target.style.color ",[57,67245,156],{"class":136},[57,67247,67248],{"class":74}," 'red'\n",[57,67250,67251],{"class":59,"line":2889},[57,67252,52595],{"class":140},[57,67254,67255],{"class":59,"line":2894},[57,67256,33658],{"class":140},[57,67258,67259,67261,67263],{"class":59,"line":8221},[57,67260,52614],{"class":140},[57,67262,52010],{"class":51497},[57,67264,51504],{"class":140},[57,67266,67267,67269,67271],{"class":59,"line":8245},[57,67268,51982],{"class":140},[57,67270,51997],{"class":51497},[57,67272,51504],{"class":140},[57,67274,67275],{"class":59,"line":8250},[57,67276,2673],{"emptyLinePlaceholder":350},[57,67278,67279,67281,67283],{"class":59,"line":8256},[57,67280,51982],{"class":140},[57,67282,50832],{"class":51497},[57,67284,51504],{"class":140},[14,67286,67287],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,67289,67290],{},"if(e.target.ragName==='P') {}",[14,67292,67293],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,67295,67296],{},"通过事件委托的方式实现tab栏切换改造：",[14,67298,67299],{},"一定要记住自定义属性！！！！！！",[14,67301,67302],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,67304,67305],{},"id是自定义的属性名",[14,67307,67308],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[49,67310,67312],{"className":50830,"code":67311,"language":50832,"meta":46,"style":46},"\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",[28,67313,67314,67324,67338,67342,67350,67364,67384,67404,67416,67424,67430,67440,67450,67454,67458,67464,67476,67488,67500,67516,67520,67524,67530,67542,67554,67566,67576,67586,67590,67594,67602,67614,67624,67636,67640,67644,67652,67662,67672,67682,67686,67690,67700,67714,67726,67730,67734,67746,67756,67772,67782,67786,67790,67804,67814,67824,67828,67832,67838,67852,67856,67860,67868,67878,67882,67886,67895,67905,67909,67917,67925,67929,67937,67951,67965,67977,67985,68024,68056,68088,68120,68152,68160,68168,68182,68216,68250,68284,68318,68352,68360,68368,68376,68381,68386,68405,68410,68430,68438,68443,68456,68477,68490,68494,68499,68504,68517,68537,68565,68569,68573,68577,68585,68593,68597],{"__ignoreMap":46},[57,67315,67316,67318,67320,67322],{"class":59,"line":60},[57,67317,51494],{"class":140},[57,67319,51498],{"class":51497},[57,67321,51501],{"class":70},[57,67323,51504],{"class":140},[57,67325,67326,67328,67330,67332,67334,67336],{"class":59,"line":67},[57,67327,1326],{"class":140},[57,67329,50832],{"class":51497},[57,67331,51513],{"class":70},[57,67333,156],{"class":140},[57,67335,51518],{"class":74},[57,67337,51504],{"class":140},[57,67339,67340],{"class":59,"line":144},[57,67341,2673],{"emptyLinePlaceholder":350},[57,67343,67344,67346,67348],{"class":59,"line":150},[57,67345,1326],{"class":140},[57,67347,51531],{"class":51497},[57,67349,51504],{"class":140},[57,67351,67352,67354,67356,67358,67360,67362],{"class":59,"line":162},[57,67353,52341],{"class":140},[57,67355,51541],{"class":51497},[57,67357,51544],{"class":70},[57,67359,156],{"class":140},[57,67361,51549],{"class":74},[57,67363,59324],{"class":140},[57,67365,67366,67368,67370,67372,67374,67376,67378,67380,67382],{"class":59,"line":180},[57,67367,52341],{"class":140},[57,67369,51541],{"class":51497},[57,67371,51560],{"class":70},[57,67373,156],{"class":140},[57,67375,51565],{"class":74},[57,67377,51568],{"class":70},[57,67379,156],{"class":140},[57,67381,51573],{"class":74},[57,67383,59324],{"class":140},[57,67385,67386,67388,67390,67392,67394,67396,67398,67400,67402],{"class":59,"line":186},[57,67387,52341],{"class":140},[57,67389,51541],{"class":51497},[57,67391,15192],{"class":70},[57,67393,156],{"class":140},[57,67395,51588],{"class":74},[57,67397,51568],{"class":70},[57,67399,156],{"class":140},[57,67401,51595],{"class":74},[57,67403,59324],{"class":140},[57,67405,67406,67408,67410,67412,67414],{"class":59,"line":197},[57,67407,52341],{"class":140},[57,67409,51604],{"class":51497},[57,67411,63822],{"class":140},[57,67413,51604],{"class":51497},[57,67415,51504],{"class":140},[57,67417,67418,67420,67422],{"class":59,"line":241},[57,67419,52341],{"class":140},[57,67421,342],{"class":51497},[57,67423,51504],{"class":140},[57,67425,67426,67428],{"class":59,"line":249},[57,67427,6676],{"class":51497},[57,67429,15844],{"class":140},[57,67431,67432,67434,67436,67438],{"class":59,"line":262},[57,67433,54903],{"class":81},[57,67435,51634],{"class":140},[57,67437,226],{"class":81},[57,67439,1576],{"class":140},[57,67441,67442,67444,67446,67448],{"class":59,"line":281},[57,67443,54892],{"class":81},[57,67445,51634],{"class":140},[57,67447,226],{"class":81},[57,67449,1576],{"class":140},[57,67451,67452],{"class":59,"line":287},[57,67453,2460],{"class":140},[57,67455,67456],{"class":59,"line":298},[57,67457,2673],{"emptyLinePlaceholder":350},[57,67459,67460,67462],{"class":59,"line":311},[57,67461,63873],{"class":70},[57,67463,15844],{"class":140},[57,67465,67466,67468,67470,67472,67474],{"class":59,"line":322},[57,67467,54968],{"class":81},[57,67469,51634],{"class":140},[57,67471,63884],{"class":81},[57,67473,51689],{"class":136},[57,67475,1576],{"class":140},[57,67477,67478,67480,67482,67484,67486],{"class":59,"line":1929},[57,67479,54982],{"class":81},[57,67481,51634],{"class":140},[57,67483,63897],{"class":81},[57,67485,51689],{"class":136},[57,67487,1576],{"class":140},[57,67489,67490,67492,67494,67496,67498],{"class":59,"line":1950},[57,67491,54903],{"class":81},[57,67493,51634],{"class":140},[57,67495,1116],{"class":81},[57,67497,51689],{"class":136},[57,67499,1576],{"class":140},[57,67501,67502,67504,67506,67508,67510,67512,67514],{"class":59,"line":1955},[57,67503,62174],{"class":81},[57,67505,51634],{"class":140},[57,67507,635],{"class":81},[57,67509,51689],{"class":136},[57,67511,51718],{"class":81},[57,67513,62441],{"class":81},[57,67515,1576],{"class":140},[57,67517,67518],{"class":59,"line":1969},[57,67519,2460],{"class":140},[57,67521,67522],{"class":59,"line":1974},[57,67523,2673],{"emptyLinePlaceholder":350},[57,67525,67526,67528],{"class":59,"line":2001},[57,67527,63942],{"class":70},[57,67529,15844],{"class":140},[57,67531,67532,67534,67536,67538,67540],{"class":59,"line":2006},[57,67533,54968],{"class":81},[57,67535,51634],{"class":140},[57,67537,728],{"class":81},[57,67539,745],{"class":136},[57,67541,1576],{"class":140},[57,67543,67544,67546,67548,67550,67552],{"class":59,"line":2023},[57,67545,54982],{"class":81},[57,67547,51634],{"class":140},[57,67549,1323],{"class":81},[57,67551,51689],{"class":136},[57,67553,1576],{"class":140},[57,67555,67556,67558,67560,67562,67564],{"class":59,"line":2028},[57,67557,57556],{"class":81},[57,67559,51634],{"class":140},[57,67561,1323],{"class":81},[57,67563,51689],{"class":136},[57,67565,1576],{"class":140},[57,67567,67568,67570,67572,67574],{"class":59,"line":2033},[57,67569,55206],{"class":81},[57,67571,51634],{"class":140},[57,67573,51674],{"class":81},[57,67575,1576],{"class":140},[57,67577,67578,67580,67582,67584],{"class":59,"line":2038},[57,67579,55217],{"class":81},[57,67581,51634],{"class":140},[57,67583,51865],{"class":81},[57,67585,1576],{"class":140},[57,67587,67588],{"class":59,"line":2052},[57,67589,2460],{"class":140},[57,67591,67592],{"class":59,"line":2057},[57,67593,2673],{"emptyLinePlaceholder":350},[57,67595,67596,67598,67600],{"class":59,"line":2850},[57,67597,63942],{"class":70},[57,67599,64015],{"class":51497},[57,67601,15844],{"class":140},[57,67603,67604,67606,67608,67610,67612],{"class":59,"line":2864},[57,67605,55119],{"class":81},[57,67607,51634],{"class":140},[57,67609,1216],{"class":81},[57,67611,51689],{"class":136},[57,67613,1576],{"class":140},[57,67615,67616,67618,67620,67622],{"class":59,"line":2872},[57,67617,62531],{"class":81},[57,67619,51634],{"class":140},[57,67621,64038],{"class":81},[57,67623,1576],{"class":140},[57,67625,67626,67628,67630,67632,67634],{"class":59,"line":2877},[57,67627,62197],{"class":81},[57,67629,51634],{"class":140},[57,67631,1116],{"class":81},[57,67633,51689],{"class":136},[57,67635,1576],{"class":140},[57,67637,67638],{"class":59,"line":2883},[57,67639,2460],{"class":140},[57,67641,67642],{"class":59,"line":2889},[57,67643,2673],{"emptyLinePlaceholder":350},[57,67645,67646,67648,67650],{"class":59,"line":2894},[57,67647,63942],{"class":70},[57,67649,61489],{"class":51497},[57,67651,15844],{"class":140},[57,67653,67654,67656,67658,67660],{"class":59,"line":8221},[57,67655,54929],{"class":81},[57,67657,51634],{"class":140},[57,67659,54934],{"class":81},[57,67661,1576],{"class":140},[57,67663,67664,67666,67668,67670],{"class":59,"line":8245},[57,67665,55206],{"class":81},[57,67667,51634],{"class":140},[57,67669,51674],{"class":81},[57,67671,1576],{"class":140},[57,67673,67674,67676,67678,67680],{"class":59,"line":8250},[57,67675,55217],{"class":81},[57,67677,51634],{"class":140},[57,67679,51777],{"class":81},[57,67681,1576],{"class":140},[57,67683,67684],{"class":59,"line":8256},[57,67685,2460],{"class":140},[57,67687,67688],{"class":59,"line":8283},[57,67689,2673],{"emptyLinePlaceholder":350},[57,67691,67692,67694,67696,67698],{"class":59,"line":8288},[57,67693,63942],{"class":70},[57,67695,61489],{"class":51497},[57,67697,55272],{"class":51497},[57,67699,15844],{"class":140},[57,67701,67702,67704,67706,67708,67710,67712],{"class":59,"line":8294},[57,67703,54903],{"class":81},[57,67705,51634],{"class":140},[57,67707,226],{"class":81},[57,67709,9223],{"class":81},[57,67711,51689],{"class":136},[57,67713,1576],{"class":140},[57,67715,67716,67718,67720,67722,67724],{"class":59,"line":8306},[57,67717,55119],{"class":81},[57,67719,51634],{"class":140},[57,67721,965],{"class":81},[57,67723,51689],{"class":136},[57,67725,1576],{"class":140},[57,67727,67728],{"class":59,"line":8318},[57,67729,2460],{"class":140},[57,67731,67732],{"class":59,"line":8330},[57,67733,2673],{"emptyLinePlaceholder":350},[57,67735,67736,67738,67740,67742,67744],{"class":59,"line":9989},[57,67737,63942],{"class":70},[57,67739,61489],{"class":51497},[57,67741,55272],{"class":51497},[57,67743,1681],{"class":51497},[57,67745,15844],{"class":140},[57,67747,67748,67750,67752,67754],{"class":59,"line":10014},[57,67749,64167],{"class":81},[57,67751,51634],{"class":140},[57,67753,54934],{"class":81},[57,67755,1576],{"class":140},[57,67757,67758,67760,67762,67764,67766,67768,67770],{"class":59,"line":10037},[57,67759,62429],{"class":81},[57,67761,51634],{"class":140},[57,67763,498],{"class":81},[57,67765,51689],{"class":136},[57,67767,51718],{"class":81},[57,67769,64188],{"class":81},[57,67771,1576],{"class":140},[57,67773,67774,67776,67778,67780],{"class":59,"line":10061},[57,67775,57613],{"class":81},[57,67777,51634],{"class":140},[57,67779,62566],{"class":81},[57,67781,1576],{"class":140},[57,67783,67784],{"class":59,"line":10066},[57,67785,2460],{"class":140},[57,67787,67788],{"class":59,"line":10071},[57,67789,2673],{"emptyLinePlaceholder":350},[57,67791,67792,67794,67796,67798,67800,67802],{"class":59,"line":10076},[57,67793,63942],{"class":70},[57,67795,61489],{"class":51497},[57,67797,55272],{"class":51497},[57,67799,1681],{"class":51497},[57,67801,64221],{"class":70},[57,67803,15844],{"class":140},[57,67805,67806,67808,67810,67812],{"class":59,"line":10085},[57,67807,61988],{"class":81},[57,67809,51634],{"class":140},[57,67811,64232],{"class":81},[57,67813,1576],{"class":140},[57,67815,67816,67818,67820,67822],{"class":59,"line":10090},[57,67817,57613],{"class":81},[57,67819,51634],{"class":140},[57,67821,64232],{"class":81},[57,67823,1576],{"class":140},[57,67825,67826],{"class":59,"line":10096},[57,67827,2460],{"class":140},[57,67829,67830],{"class":59,"line":10117},[57,67831,2673],{"emptyLinePlaceholder":350},[57,67833,67834,67836],{"class":59,"line":10123},[57,67835,64257],{"class":70},[57,67837,15844],{"class":140},[57,67839,67840,67842,67844,67846,67848,67850],{"class":59,"line":10137},[57,67841,54892],{"class":81},[57,67843,51634],{"class":140},[57,67845,226],{"class":81},[57,67847,64270],{"class":81},[57,67849,51689],{"class":136},[57,67851,1576],{"class":140},[57,67853,67854],{"class":59,"line":10143},[57,67855,2460],{"class":140},[57,67857,67858],{"class":59,"line":10170},[57,67859,2673],{"emptyLinePlaceholder":350},[57,67861,67862,67864,67866],{"class":59,"line":10179},[57,67863,64257],{"class":70},[57,67865,62371],{"class":70},[57,67867,15844],{"class":140},[57,67869,67870,67872,67874,67876],{"class":59,"line":10185},[57,67871,55206],{"class":81},[57,67873,51634],{"class":140},[57,67875,54934],{"class":81},[57,67877,1576],{"class":140},[57,67879,67880],{"class":59,"line":10193},[57,67881,2460],{"class":140},[57,67883,67884],{"class":59,"line":10198},[57,67885,2673],{"emptyLinePlaceholder":350},[57,67887,67888,67890,67893],{"class":59,"line":16876},[57,67889,64257],{"class":70},[57,67891,67892],{"class":70}," .active",[57,67894,15844],{"class":140},[57,67896,67897,67899,67901,67903],{"class":59,"line":16882},[57,67898,55206],{"class":81},[57,67900,51634],{"class":140},[57,67902,61066],{"class":81},[57,67904,1576],{"class":140},[57,67906,67907],{"class":59,"line":16905},[57,67908,2460],{"class":140},[57,67910,67911,67913,67915],{"class":59,"line":16911},[57,67912,52614],{"class":140},[57,67914,342],{"class":51497},[57,67916,51504],{"class":140},[57,67918,67919,67921,67923],{"class":59,"line":16934},[57,67920,51982],{"class":140},[57,67922,51531],{"class":51497},[57,67924,51504],{"class":140},[57,67926,67927],{"class":59,"line":16948},[57,67928,2673],{"emptyLinePlaceholder":350},[57,67930,67931,67933,67935],{"class":59,"line":16968},[57,67932,1326],{"class":140},[57,67934,51997],{"class":51497},[57,67936,51504],{"class":140},[57,67938,67939,67941,67943,67945,67947,67949],{"class":59,"line":16974},[57,67940,52341],{"class":140},[57,67942,51808],{"class":51497},[57,67944,53683],{"class":70},[57,67946,156],{"class":140},[57,67948,64372],{"class":74},[57,67950,51504],{"class":140},[57,67952,67953,67955,67957,67959,67961,67963],{"class":59,"line":16985},[57,67954,51538],{"class":140},[57,67956,51808],{"class":51497},[57,67958,53683],{"class":70},[57,67960,156],{"class":140},[57,67962,64387],{"class":74},[57,67964,51504],{"class":140},[57,67966,67967,67969,67971,67973,67975],{"class":59,"line":17008},[57,67968,55431],{"class":140},[57,67970,394],{"class":51497},[57,67972,64398],{"class":140},[57,67974,394],{"class":51497},[57,67976,51504],{"class":140},[57,67978,67979,67981,67983],{"class":59,"line":17030},[57,67980,55431],{"class":140},[57,67982,1422],{"class":51497},[57,67984,51504],{"class":140},[57,67986,67987,67989,67991,67993,67995,67997,67999,68001,68003,68005,68007,68009,68011,68014,68016,68018,68020,68022],{"class":59,"line":17035},[57,67988,55499],{"class":140},[57,67990,380],{"class":51497},[57,67992,61249],{"class":140},[57,67994,18],{"class":51497},[57,67996,53683],{"class":70},[57,67998,156],{"class":140},[57,68000,59903],{"class":74},[57,68002,61254],{"class":70},[57,68004,156],{"class":140},[57,68006,64433],{"class":74},[57,68008,54148],{"class":70},[57,68010,156],{"class":140},[57,68012,68013],{"class":74},"\"0\"",[57,68015,64436],{"class":140},[57,68017,18],{"class":51497},[57,68019,55511],{"class":140},[57,68021,380],{"class":51497},[57,68023,51504],{"class":140},[57,68025,68026,68028,68030,68032,68034,68036,68038,68040,68042,68044,68046,68048,68050,68052,68054],{"class":59,"line":17041},[57,68027,55499],{"class":140},[57,68029,380],{"class":51497},[57,68031,61249],{"class":140},[57,68033,18],{"class":51497},[57,68035,61254],{"class":70},[57,68037,156],{"class":140},[57,68039,64433],{"class":74},[57,68041,54148],{"class":70},[57,68043,156],{"class":140},[57,68045,3951],{"class":74},[57,68047,64463],{"class":140},[57,68049,18],{"class":51497},[57,68051,55511],{"class":140},[57,68053,380],{"class":51497},[57,68055,51504],{"class":140},[57,68057,68058,68060,68062,68064,68066,68068,68070,68072,68074,68076,68078,68080,68082,68084,68086],{"class":59,"line":17055},[57,68059,55499],{"class":140},[57,68061,380],{"class":51497},[57,68063,61249],{"class":140},[57,68065,18],{"class":51497},[57,68067,61254],{"class":70},[57,68069,156],{"class":140},[57,68071,64433],{"class":74},[57,68073,54148],{"class":70},[57,68075,156],{"class":140},[57,68077,3974],{"class":74},[57,68079,64490],{"class":140},[57,68081,18],{"class":51497},[57,68083,55511],{"class":140},[57,68085,380],{"class":51497},[57,68087,51504],{"class":140},[57,68089,68090,68092,68094,68096,68098,68100,68102,68104,68106,68108,68110,68112,68114,68116,68118],{"class":59,"line":17068},[57,68091,55499],{"class":140},[57,68093,380],{"class":51497},[57,68095,61249],{"class":140},[57,68097,18],{"class":51497},[57,68099,61254],{"class":70},[57,68101,156],{"class":140},[57,68103,64433],{"class":74},[57,68105,54148],{"class":70},[57,68107,156],{"class":140},[57,68109,3987],{"class":74},[57,68111,64517],{"class":140},[57,68113,18],{"class":51497},[57,68115,55511],{"class":140},[57,68117,380],{"class":51497},[57,68119,51504],{"class":140},[57,68121,68122,68124,68126,68128,68130,68132,68134,68136,68138,68140,68142,68144,68146,68148,68150],{"class":59,"line":17073},[57,68123,55499],{"class":140},[57,68125,380],{"class":51497},[57,68127,61249],{"class":140},[57,68129,18],{"class":51497},[57,68131,61254],{"class":70},[57,68133,156],{"class":140},[57,68135,64433],{"class":74},[57,68137,54148],{"class":70},[57,68139,156],{"class":140},[57,68141,4000],{"class":74},[57,68143,64544],{"class":140},[57,68145,18],{"class":51497},[57,68147,55511],{"class":140},[57,68149,380],{"class":51497},[57,68151,51504],{"class":140},[57,68153,68154,68156,68158],{"class":59,"line":17087},[57,68155,55604],{"class":140},[57,68157,1422],{"class":51497},[57,68159,51504],{"class":140},[57,68161,68162,68164,68166],{"class":59,"line":17092},[57,68163,51973],{"class":140},[57,68165,51808],{"class":51497},[57,68167,51504],{"class":140},[57,68169,68170,68172,68174,68176,68178,68180],{"class":59,"line":17098},[57,68171,51538],{"class":140},[57,68173,51808],{"class":51497},[57,68175,53683],{"class":70},[57,68177,156],{"class":140},[57,68179,64581],{"class":74},[57,68181,51504],{"class":140},[57,68183,68184,68186,68188,68190,68192,68194,68196,68198,68200,68202,68204,68206,68208,68210,68212,68214],{"class":59,"line":17103},[57,68185,55431],{"class":140},[57,68187,51808],{"class":51497},[57,68189,53683],{"class":70},[57,68191,156],{"class":140},[57,68193,64596],{"class":74},[57,68195,61249],{"class":140},[57,68197,44],{"class":51497},[57,68199,55436],{"class":70},[57,68201,156],{"class":140},[57,68203,64607],{"class":74},[57,68205,55444],{"class":70},[57,68207,156],{"class":140},[57,68209,7925],{"class":74},[57,68211,64616],{"class":140},[57,68213,51808],{"class":51497},[57,68215,51504],{"class":140},[57,68217,68218,68220,68222,68224,68226,68228,68230,68232,68234,68236,68238,68240,68242,68244,68246,68248],{"class":59,"line":17117},[57,68219,55431],{"class":140},[57,68221,51808],{"class":51497},[57,68223,53683],{"class":70},[57,68225,156],{"class":140},[57,68227,62820],{"class":74},[57,68229,61249],{"class":140},[57,68231,44],{"class":51497},[57,68233,55436],{"class":70},[57,68235,156],{"class":140},[57,68237,64643],{"class":74},[57,68239,55444],{"class":70},[57,68241,156],{"class":140},[57,68243,7925],{"class":74},[57,68245,64616],{"class":140},[57,68247,51808],{"class":51497},[57,68249,51504],{"class":140},[57,68251,68252,68254,68256,68258,68260,68262,68264,68266,68268,68270,68272,68274,68276,68278,68280,68282],{"class":59,"line":17122},[57,68253,55431],{"class":140},[57,68255,51808],{"class":51497},[57,68257,53683],{"class":70},[57,68259,156],{"class":140},[57,68261,62820],{"class":74},[57,68263,61249],{"class":140},[57,68265,44],{"class":51497},[57,68267,55436],{"class":70},[57,68269,156],{"class":140},[57,68271,64678],{"class":74},[57,68273,55444],{"class":70},[57,68275,156],{"class":140},[57,68277,7925],{"class":74},[57,68279,64616],{"class":140},[57,68281,51808],{"class":51497},[57,68283,51504],{"class":140},[57,68285,68286,68288,68290,68292,68294,68296,68298,68300,68302,68304,68306,68308,68310,68312,68314,68316],{"class":59,"line":17127},[57,68287,55431],{"class":140},[57,68289,51808],{"class":51497},[57,68291,53683],{"class":70},[57,68293,156],{"class":140},[57,68295,62820],{"class":74},[57,68297,61249],{"class":140},[57,68299,44],{"class":51497},[57,68301,55436],{"class":70},[57,68303,156],{"class":140},[57,68305,64713],{"class":74},[57,68307,55444],{"class":70},[57,68309,156],{"class":140},[57,68311,7925],{"class":74},[57,68313,64616],{"class":140},[57,68315,51808],{"class":51497},[57,68317,51504],{"class":140},[57,68319,68320,68322,68324,68326,68328,68330,68332,68334,68336,68338,68340,68342,68344,68346,68348,68350],{"class":59,"line":17141},[57,68321,55431],{"class":140},[57,68323,51808],{"class":51497},[57,68325,53683],{"class":70},[57,68327,156],{"class":140},[57,68329,62820],{"class":74},[57,68331,61249],{"class":140},[57,68333,44],{"class":51497},[57,68335,55436],{"class":70},[57,68337,156],{"class":140},[57,68339,64748],{"class":74},[57,68341,55444],{"class":70},[57,68343,156],{"class":140},[57,68345,7925],{"class":74},[57,68347,64616],{"class":140},[57,68349,51808],{"class":51497},[57,68351,51504],{"class":140},[57,68353,68354,68356,68358],{"class":59,"line":17153},[57,68355,51973],{"class":140},[57,68357,51808],{"class":51497},[57,68359,51504],{"class":140},[57,68361,68362,68364,68366],{"class":59,"line":17158},[57,68363,52614],{"class":140},[57,68365,51808],{"class":51497},[57,68367,51504],{"class":140},[57,68369,68370,68372,68374],{"class":59,"line":17171},[57,68371,52341],{"class":140},[57,68373,52010],{"class":51497},[57,68375,51504],{"class":140},[57,68377,68378],{"class":59,"line":17176},[57,68379,68380],{"class":63},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[57,68382,68383],{"class":59,"line":17181},[57,68384,68385],{"class":63},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[57,68387,68388,68390,68392,68394,68396,68398,68400,68403],{"class":59,"line":17186},[57,68389,11494],{"class":136},[57,68391,61489],{"class":81},[57,68393,13837],{"class":136},[57,68395,54593],{"class":140},[57,68397,54596],{"class":70},[57,68399,168],{"class":140},[57,68401,68402],{"class":74},"'.tab-nav ul'",[57,68404,238],{"class":140},[57,68406,68407],{"class":59,"line":17199},[57,68408,68409],{"class":63},"    \u002F\u002F 2.添加事件\n",[57,68411,68412,68414,68416,68418,68420,68422,68424,68426,68428],{"class":59,"line":17204},[57,68413,67151],{"class":140},[57,68415,58010],{"class":70},[57,68417,168],{"class":140},[57,68419,58015],{"class":74},[57,68421,12708],{"class":140},[57,68423,54646],{"class":136},[57,68425,1934],{"class":140},[57,68427,495],{"class":5489},[57,68429,12715],{"class":140},[57,68431,68432,68434,68436],{"class":59,"line":32830},[57,68433,58441],{"class":140},[57,68435,67207],{"class":70},[57,68437,67210],{"class":140},[57,68439,68440],{"class":59,"line":32836},[57,68441,68442],{"class":63},"      \u002F\u002Fe.targer是我们点击的对象\n",[57,68444,68445,68447,68449,68451,68454],{"class":59,"line":32842},[57,68446,54677],{"class":136},[57,68448,67231],{"class":140},[57,68450,54683],{"class":136},[57,68452,68453],{"class":74}," 'A'",[57,68455,12715],{"class":140},[57,68457,68458,68460,68462,68464,68467,68469,68471,68473,68475],{"class":59,"line":32848},[57,68459,52122],{"class":140},[57,68461,54596],{"class":70},[57,68463,168],{"class":140},[57,68465,68466],{"class":74},"'.active'",[57,68468,57200],{"class":140},[57,68470,57203],{"class":70},[57,68472,168],{"class":140},[57,68474,64911],{"class":74},[57,68476,238],{"class":140},[57,68478,68479,68482,68484,68486,68488],{"class":59,"line":32854},[57,68480,68481],{"class":140},"        e.target.classList.",[57,68483,5607],{"class":70},[57,68485,168],{"class":140},[57,68487,64911],{"class":74},[57,68489,238],{"class":140},[57,68491,68492],{"class":59,"line":32865},[57,68493,2673],{"emptyLinePlaceholder":350},[57,68495,68496],{"class":59,"line":32871},[57,68497,68498],{"class":63},"        \u002F\u002F 下面大盒子模块\n",[57,68500,68501],{"class":59,"line":32891},[57,68502,68503],{"class":63},"        \u002F\u002F console.log(e.target.dataset.id)\n",[57,68505,68506,68508,68510,68512,68514],{"class":59,"line":32897},[57,68507,61467],{"class":136},[57,68509,3305],{"class":81},[57,68511,13837],{"class":136},[57,68513,45763],{"class":136},[57,68515,68516],{"class":140},"e.target.dataset.id\n",[57,68518,68519,68521,68523,68525,68527,68529,68531,68533,68535],{"class":59,"line":32908},[57,68520,52122],{"class":140},[57,68522,54596],{"class":70},[57,68524,168],{"class":140},[57,68526,64959],{"class":74},[57,68528,57200],{"class":140},[57,68530,57203],{"class":70},[57,68532,168],{"class":140},[57,68534,64911],{"class":74},[57,68536,238],{"class":140},[57,68538,68539,68541,68543,68545,68547,68549,68551,68553,68555,68557,68559,68561,68563],{"class":59,"line":32914},[57,68540,52122],{"class":140},[57,68542,54596],{"class":70},[57,68544,168],{"class":140},[57,68546,64985],{"class":74},[57,68548,857],{"class":140},[57,68550,45763],{"class":136},[57,68552,25387],{"class":81},[57,68554,57229],{"class":74},[57,68556,57200],{"class":140},[57,68558,5607],{"class":70},[57,68560,168],{"class":140},[57,68562,64911],{"class":74},[57,68564,238],{"class":140},[57,68566,68567],{"class":59,"line":32920},[57,68568,2673],{"emptyLinePlaceholder":350},[57,68570,68571],{"class":59,"line":32926},[57,68572,52595],{"class":140},[57,68574,68575],{"class":59,"line":32932},[57,68576,33658],{"class":140},[57,68578,68579,68581,68583],{"class":59,"line":32938},[57,68580,52614],{"class":140},[57,68582,52010],{"class":51497},[57,68584,51504],{"class":140},[57,68586,68587,68589,68591],{"class":59,"line":32944},[57,68588,51982],{"class":140},[57,68590,51997],{"class":51497},[57,68592,51504],{"class":140},[57,68594,68595],{"class":59,"line":32950},[57,68596,2673],{"emptyLinePlaceholder":350},[57,68598,68599,68601,68603],{"class":59,"line":32970},[57,68600,51982],{"class":140},[57,68602,50832],{"class":51497},[57,68604,51504],{"class":140},[394,68606,68608],{"id":68607},"_333-页面加载事件","3.3.3 页面加载事件",[377,68610,68611],{},[380,68612,68613],{},"load",[14,68615,68616],{},[44,68617],{"alt":46,"src":68618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,68620,68621],{},"window代表整个窗口，比document还要大",[14,68623,68624],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,68626,68627],{},"img.addEventListener('load', function () {",[14,68629,68630],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,68632,52661],{},[377,68634,68635],{"start":67},[380,68636,68637],{},"DOMContentLoaded",[14,68639,68640],{},[44,68641],{"alt":46,"src":68642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,68644,68645],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[394,68647,68649],{"id":68648},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,68651,68652],{},[44,68653],{"alt":46,"src":68654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,68656,68657],{},[44,68658],{"alt":46,"src":68659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,68661,68662],{},[44,68663],{"alt":46,"src":68664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,68666,68667],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,68669,68670],{},"获得的是数字型数据，不带单位",[14,68672,68673],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,68675,68676],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,68678,68679],{},"它是通过document.documentElement来获取",[14,68681,68682],{},[44,68683],{"alt":46,"src":68684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,68686,68687],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[394,68689,68691],{"id":68690},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,68693,68694],{},[44,68695],{"alt":46,"src":68696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,68698,68699],{},[44,68700],{"alt":46,"src":68701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[394,68703,68705],{"id":68704},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,68707,68708],{},[44,68709],{"alt":46,"src":68710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,68712,68713],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,68715,68716],{},[44,68717],{"alt":46,"src":68718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,68720,68721],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,68723,68724],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,68726,68727],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,68729,68730],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,68732,68733],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,68735,68736],{},[44,68737],{"alt":46,"src":68738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,68740,68741],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,68743,68744],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,68746,68747],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,68749,68750],{},"e.pageX-box.getBoundingClientRect()",[394,68752,68754],{"id":68753},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,68756,68757],{},[44,68758],{"alt":46,"src":68759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,68761,68762],{},"这个是相对于视口来说的，它是个方法，不是属性值",[394,68764,68766],{"id":68765},"_338-总结","3.3.8 总结",[14,68768,68769],{},[44,68770],{"alt":46,"src":68771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,68773,68774],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,68776,68777],{},"修改盒子的宽高只能通过width和height来实现",[394,68779,68781],{"id":68780},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[49,68783,68785],{"className":50830,"code":68784,"language":50832,"meta":46,"style":46},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[28,68786,68787,68792,68797,68802,68807],{"__ignoreMap":46},[57,68788,68789],{"class":59,"line":60},[57,68790,68791],{"class":140},"\u002F* 页面滑动 *\u002F\n",[57,68793,68794],{"class":59,"line":67},[57,68795,68796],{"class":140},"html {\n",[57,68798,68799],{"class":59,"line":144},[57,68800,68801],{"class":140},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[57,68803,68804],{"class":59,"line":150},[57,68805,68806],{"class":140},"  scroll-behavior: smooth;\n",[57,68808,68809],{"class":59,"line":162},[57,68810,1847],{"class":140},[14,68812,68813],{},"默认是auto",[394,68815,68817],{"id":68816},"_3310-日期对象","3.3.10 日期对象",[22270,68819,68821],{"id":68820},"_33101-实例化","3.3.10.1 实例化",[14,68823,68824],{},[44,68825],{"alt":46,"src":68826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22270,68828,68830],{"id":68829},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,68832,68833],{},[44,68834],{"alt":46,"src":68835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,68837,68838],{},"月份+1",[14,68840,68841],{},"老外认为第一天为0，星期天",[14,68843,68844],{},"方法使用的时候必须要跟括号",[14,68846,68847],{},"快速获得日期",[14,68849,68850],{},"\u002F\u002F 得到年月日",[14,68852,68853],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,68855,68856],{},"\u002F\u002F 得到当地日期",[14,68858,68859],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,68861,68862],{},"\u002F\u002F 得到当地时间",[14,68864,68865],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,68867,68868],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,68870,68871],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52010,68873,68874],{},"\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,68876,68877],{},"学会去封装函数！",[22270,68879,68881],{"id":68880},"_33103-时间戳","3.3.10.3 时间戳",[14,68883,68884],{},[44,68885],{"alt":46,"src":68886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,68888,68889],{},[44,68890],{"alt":46,"src":68891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,68893,68894],{},"三种方法记住一个就可以",[394,68896,68898],{"id":68897},"_3311-节点操作","3.3.11 节点操作",[22270,68900,68902],{"id":68901},"_33111-dom节点","3.3.11.1 DOM节点",[14,68904,68905],{},[44,68906],{"alt":46,"src":68907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,68909,68910],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22270,68912,68914],{"id":68913},"_33112-查找节点","3.3.11.2 查找节点",[14,68916,68917],{},"前边的document.querySelector()是获取的元素",[14,68919,68920],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,68922,68923],{},[44,68924],{"alt":46,"src":68925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[377,68927,68928],{},[380,68929,68930],{},"父节点",[14,68932,68933],{},[44,68934],{"alt":46,"src":68935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[377,68937,68938],{"start":67},[380,68939,68940],{},"子节点",[14,68942,68943],{},[44,68944],{"alt":46,"src":68945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,68947,68948],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,68950,68951],{},"children获得的是伪数组，是亲儿子",[377,68953,68954],{"start":144},[380,68955,68956],{},"兄弟节点",[14,68958,68959],{},[44,68960],{"alt":46,"src":68961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22270,68963,68965],{"id":68964},"_33113-增加节点","3.3.11.3 增加节点",[14,68967,68968],{},[44,68969],{"alt":46,"src":68970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,68972,68973],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,68975,68976],{},[44,68977],{"alt":46,"src":68978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,68980,68981],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,68983,68984],{},"下面是写法的部分展示，就按照下边的格式来写",[14,68986,68987],{},"例：",[52010,68989,68990],{},"\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,68992,68993],{},[44,68994],{"alt":46,"src":68995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,68997,68998],{},"false只克隆标签，里边的内容不会克隆过来",[49,69000,69002],{"className":50830,"code":69001,"language":50832,"meta":46,"style":46},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[28,69003,69004],{"__ignoreMap":46},[57,69005,69006],{"class":59,"line":60},[57,69007,69001],{"class":140},[22270,69009,69011],{"id":69010},"_33114-删除节点","3.3.11.4 删除节点",[14,69013,69014],{},[44,69015],{"alt":46,"src":69016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,69018,69019],{},"父亲删儿子",[14,69021,69022],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[394,69024,69026],{"id":69025},"_3312-m端事件","3.3.12 M端事件",[14,69028,69029],{},"M端就是移动端",[14,69031,69032],{},[44,69033],{"alt":46,"src":69034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[394,69036,69038],{"id":69037},"_3313-插件","3.3.13 插件",[14,69040,69041],{},"要熟悉官网！！！",[14,69043,69044],{},[18,69045,69046],{"href":69046,"rel":69047},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[22],[14,69049,69050],{},[18,69051,69052],{"href":69052,"rel":69053},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[22],[394,69055,69057],{"id":69056},"_3314-学生信息表","3.3.14 学生信息表",[377,69059,69060,69063,69066,69069,69072,69075,69078,69081],{},[380,69061,69062],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[380,69064,69065],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[380,69067,69068],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[380,69070,69071],{},"用好表单元素自带的属性，value,name等",[380,69073,69074],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[380,69076,69077],{},"不要忘记事件对象",[380,69079,69080],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[380,69082,69083],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,69085,69086],{},"结构：",[49,69088,69090],{"className":50830,"code":69089,"language":50832,"meta":46,"style":46},"\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",[28,69091,69092,69102,69116,69120,69128,69142,69162,69183,69196,69220,69228,69232,69240,69253,69274,69302,69330,69335,69357,69377,69396,69404,69432,69454,69474,69494,69514,69534,69554,69562,69582,69590,69594,69607,69615,69623,69631,69644,69657,69670,69683,69696,69709,69722,69730,69738,69746,69751,69756,69761,69766,69771,69776,69781,69786,69791,69796,69801,69806,69811,69819,69827,69835,69839,69859,69878,69898,69918,69938,69958,69962,69967,69987,69992,70002,70007,70012,70032,70054,70059,70069,70073,70077,70082,70087,70116,70130,70145,70149,70153,70157,70162,70173,70186,70191,70196,70201,70206,70211,70215,70220,70225,70234,70239,70244,70256,70261,70268,70272,70277,70287,70292,70302,70307,70335,70356,70366,70386,70404,70421,70438,70455,70472,70476,70486,70491,70496,70501,70512,70516,70520,70524,70529,70534,70555,70567,70572,70577,70582,70596,70601,70608,70612,70616,70624,70628,70636,70640],{"__ignoreMap":46},[57,69093,69094,69096,69098,69100],{"class":59,"line":60},[57,69095,51494],{"class":140},[57,69097,51498],{"class":51497},[57,69099,51501],{"class":70},[57,69101,51504],{"class":140},[57,69103,69104,69106,69108,69110,69112,69114],{"class":59,"line":67},[57,69105,1326],{"class":140},[57,69107,50832],{"class":51497},[57,69109,51513],{"class":70},[57,69111,156],{"class":140},[57,69113,51518],{"class":74},[57,69115,51504],{"class":140},[57,69117,69118],{"class":59,"line":144},[57,69119,2673],{"emptyLinePlaceholder":350},[57,69121,69122,69124,69126],{"class":59,"line":150},[57,69123,1326],{"class":140},[57,69125,51531],{"class":51497},[57,69127,51504],{"class":140},[57,69129,69130,69132,69134,69136,69138,69140],{"class":59,"line":162},[57,69131,52341],{"class":140},[57,69133,51541],{"class":51497},[57,69135,51544],{"class":70},[57,69137,156],{"class":140},[57,69139,51549],{"class":74},[57,69141,59324],{"class":140},[57,69143,69144,69146,69148,69150,69152,69154,69156,69158,69160],{"class":59,"line":180},[57,69145,52341],{"class":140},[57,69147,51541],{"class":51497},[57,69149,15192],{"class":70},[57,69151,156],{"class":140},[57,69153,51588],{"class":74},[57,69155,51568],{"class":70},[57,69157,156],{"class":140},[57,69159,51595],{"class":74},[57,69161,59324],{"class":140},[57,69163,69164,69166,69168,69170,69172,69174,69176,69178,69181],{"class":59,"line":186},[57,69165,52341],{"class":140},[57,69167,51541],{"class":51497},[57,69169,51560],{"class":70},[57,69171,156],{"class":140},[57,69173,51565],{"class":74},[57,69175,51568],{"class":70},[57,69177,156],{"class":140},[57,69179,69180],{"class":74},"\"ie=edge\"",[57,69182,59324],{"class":140},[57,69184,69185,69187,69189,69192,69194],{"class":59,"line":197},[57,69186,52341],{"class":140},[57,69188,51604],{"class":51497},[57,69190,69191],{"class":140},">学生信息管理\u003C\u002F",[57,69193,51604],{"class":51497},[57,69195,51504],{"class":140},[57,69197,69198,69200,69203,69206,69208,69211,69213,69215,69218],{"class":59,"line":241},[57,69199,52341],{"class":140},[57,69201,69202],{"class":51497},"link",[57,69204,69205],{"class":70}," rel",[57,69207,156],{"class":140},[57,69209,69210],{"class":74},"\"stylesheet\"",[57,69212,61254],{"class":70},[57,69214,156],{"class":140},[57,69216,69217],{"class":74},"\"css\u002Findex.css\"",[57,69219,59324],{"class":140},[57,69221,69222,69224,69226],{"class":59,"line":249},[57,69223,51982],{"class":140},[57,69225,51531],{"class":51497},[57,69227,51504],{"class":140},[57,69229,69230],{"class":59,"line":262},[57,69231,2673],{"emptyLinePlaceholder":350},[57,69233,69234,69236,69238],{"class":59,"line":281},[57,69235,1326],{"class":140},[57,69237,51997],{"class":51497},[57,69239,51504],{"class":140},[57,69241,69242,69244,69246,69249,69251],{"class":59,"line":287},[57,69243,52341],{"class":140},[57,69245,10],{"class":51497},[57,69247,69248],{"class":140},">新增学员\u003C\u002F",[57,69250,10],{"class":51497},[57,69252,51504],{"class":140},[57,69254,69255,69257,69259,69261,69263,69265,69268,69270,69272],{"class":59,"line":298},[57,69256,52341],{"class":140},[57,69258,66822],{"class":51497},[57,69260,53683],{"class":70},[57,69262,156],{"class":140},[57,69264,62861],{"class":74},[57,69266,69267],{"class":70}," autocomplete",[57,69269,156],{"class":140},[57,69271,31973],{"class":74},[57,69273,51504],{"class":140},[57,69275,69276,69279,69281,69283,69285,69287,69289,69291,69294,69296,69298,69300],{"class":59,"line":311},[57,69277,69278],{"class":140},"    姓名：\u003C",[57,69280,54018],{"class":51497},[57,69282,54021],{"class":70},[57,69284,156],{"class":140},[57,69286,62896],{"class":74},[57,69288,53683],{"class":70},[57,69290,156],{"class":140},[57,69292,69293],{"class":74},"\"uname\"",[57,69295,15192],{"class":70},[57,69297,156],{"class":140},[57,69299,69293],{"class":74},[57,69301,59324],{"class":140},[57,69303,69304,69307,69309,69311,69313,69315,69317,69319,69322,69324,69326,69328],{"class":59,"line":322},[57,69305,69306],{"class":140},"    年龄：\u003C",[57,69308,54018],{"class":51497},[57,69310,54021],{"class":70},[57,69312,156],{"class":140},[57,69314,62896],{"class":74},[57,69316,53683],{"class":70},[57,69318,156],{"class":140},[57,69320,69321],{"class":74},"\"age\"",[57,69323,15192],{"class":70},[57,69325,156],{"class":140},[57,69327,69321],{"class":74},[57,69329,59324],{"class":140},[57,69331,69332],{"class":59,"line":1929},[57,69333,69334],{"class":140},"    性别:\n",[57,69336,69337,69339,69342,69344,69346,69349,69351,69353,69355],{"class":59,"line":1950},[57,69338,51538],{"class":140},[57,69340,69341],{"class":51497},"select",[57,69343,15192],{"class":70},[57,69345,156],{"class":140},[57,69347,69348],{"class":74},"\"gender\"",[57,69350,53683],{"class":70},[57,69352,156],{"class":140},[57,69354,69348],{"class":74},[57,69356,51504],{"class":140},[57,69358,69359,69361,69364,69366,69368,69370,69373,69375],{"class":59,"line":1955},[57,69360,55431],{"class":140},[57,69362,69363],{"class":51497},"option",[57,69365,66848],{"class":70},[57,69367,156],{"class":140},[57,69369,10234],{"class":74},[57,69371,69372],{"class":140},">男\u003C\u002F",[57,69374,69363],{"class":51497},[57,69376,51504],{"class":140},[57,69378,69379,69381,69383,69385,69387,69389,69392,69394],{"class":59,"line":1969},[57,69380,55431],{"class":140},[57,69382,69363],{"class":51497},[57,69384,66848],{"class":70},[57,69386,156],{"class":140},[57,69388,10303],{"class":74},[57,69390,69391],{"class":140},">女\u003C\u002F",[57,69393,69363],{"class":51497},[57,69395,51504],{"class":140},[57,69397,69398,69400,69402],{"class":59,"line":1974},[57,69399,51973],{"class":140},[57,69401,69341],{"class":51497},[57,69403,51504],{"class":140},[57,69405,69406,69409,69411,69413,69415,69417,69419,69421,69424,69426,69428,69430],{"class":59,"line":2001},[57,69407,69408],{"class":140},"    薪资：\u003C",[57,69410,54018],{"class":51497},[57,69412,54021],{"class":70},[57,69414,156],{"class":140},[57,69416,62896],{"class":74},[57,69418,53683],{"class":70},[57,69420,156],{"class":140},[57,69422,69423],{"class":74},"\"salary\"",[57,69425,15192],{"class":70},[57,69427,156],{"class":140},[57,69429,69423],{"class":74},[57,69431,59324],{"class":140},[57,69433,69434,69437,69439,69441,69443,69446,69448,69450,69452],{"class":59,"line":2006},[57,69435,69436],{"class":140},"    就业城市：\u003C",[57,69438,69341],{"class":51497},[57,69440,15192],{"class":70},[57,69442,156],{"class":140},[57,69444,69445],{"class":74},"\"city\"",[57,69447,53683],{"class":70},[57,69449,156],{"class":140},[57,69451,69445],{"class":74},[57,69453,51504],{"class":140},[57,69455,69456,69458,69460,69462,69464,69467,69470,69472],{"class":59,"line":2023},[57,69457,55431],{"class":140},[57,69459,69363],{"class":51497},[57,69461,66848],{"class":70},[57,69463,156],{"class":140},[57,69465,69466],{"class":74},"\"北京\"",[57,69468,69469],{"class":140},">北京\u003C\u002F",[57,69471,69363],{"class":51497},[57,69473,51504],{"class":140},[57,69475,69476,69478,69480,69482,69484,69487,69490,69492],{"class":59,"line":2028},[57,69477,55431],{"class":140},[57,69479,69363],{"class":51497},[57,69481,66848],{"class":70},[57,69483,156],{"class":140},[57,69485,69486],{"class":74},"\"上海\"",[57,69488,69489],{"class":140},">上海\u003C\u002F",[57,69491,69363],{"class":51497},[57,69493,51504],{"class":140},[57,69495,69496,69498,69500,69502,69504,69507,69510,69512],{"class":59,"line":2033},[57,69497,55431],{"class":140},[57,69499,69363],{"class":51497},[57,69501,66848],{"class":70},[57,69503,156],{"class":140},[57,69505,69506],{"class":74},"\"广州\"",[57,69508,69509],{"class":140},">广州\u003C\u002F",[57,69511,69363],{"class":51497},[57,69513,51504],{"class":140},[57,69515,69516,69518,69520,69522,69524,69527,69530,69532],{"class":59,"line":2038},[57,69517,55431],{"class":140},[57,69519,69363],{"class":51497},[57,69521,66848],{"class":70},[57,69523,156],{"class":140},[57,69525,69526],{"class":74},"\"深圳\"",[57,69528,69529],{"class":140},">深圳\u003C\u002F",[57,69531,69363],{"class":51497},[57,69533,51504],{"class":140},[57,69535,69536,69538,69540,69542,69544,69547,69550,69552],{"class":59,"line":2052},[57,69537,55431],{"class":140},[57,69539,69363],{"class":51497},[57,69541,66848],{"class":70},[57,69543,156],{"class":140},[57,69545,69546],{"class":74},"\"曹县\"",[57,69548,69549],{"class":140},">曹县\u003C\u002F",[57,69551,69363],{"class":51497},[57,69553,51504],{"class":140},[57,69555,69556,69558,69560],{"class":59,"line":2057},[57,69557,51973],{"class":140},[57,69559,69341],{"class":51497},[57,69561,51504],{"class":140},[57,69563,69564,69566,69568,69570,69572,69575,69578,69580],{"class":59,"line":2850},[57,69565,51538],{"class":140},[57,69567,54084],{"class":51497},[57,69569,53683],{"class":70},[57,69571,156],{"class":140},[57,69573,69574],{"class":74},"\"add\"",[57,69576,69577],{"class":140},">录入\u003C\u002F",[57,69579,54084],{"class":51497},[57,69581,51504],{"class":140},[57,69583,69584,69586,69588],{"class":59,"line":2864},[57,69585,52614],{"class":140},[57,69587,66822],{"class":51497},[57,69589,51504],{"class":140},[57,69591,69592],{"class":59,"line":2872},[57,69593,2673],{"emptyLinePlaceholder":350},[57,69595,69596,69598,69600,69603,69605],{"class":59,"line":2877},[57,69597,52341],{"class":140},[57,69599,10],{"class":51497},[57,69601,69602],{"class":140},">就业榜\u003C\u002F",[57,69604,10],{"class":51497},[57,69606,51504],{"class":140},[57,69608,69609,69611,69613],{"class":59,"line":2883},[57,69610,52341],{"class":140},[57,69612,557],{"class":51497},[57,69614,51504],{"class":140},[57,69616,69617,69619,69621],{"class":59,"line":2889},[57,69618,51538],{"class":140},[57,69620,560],{"class":51497},[57,69622,51504],{"class":140},[57,69624,69625,69627,69629],{"class":59,"line":2894},[57,69626,55431],{"class":140},[57,69628,563],{"class":51497},[57,69630,51504],{"class":140},[57,69632,69633,69635,69637,69640,69642],{"class":59,"line":8221},[57,69634,55499],{"class":140},[57,69636,566],{"class":51497},[57,69638,69639],{"class":140},">序号\u003C\u002F",[57,69641,566],{"class":51497},[57,69643,51504],{"class":140},[57,69645,69646,69648,69650,69653,69655],{"class":59,"line":8245},[57,69647,55499],{"class":140},[57,69649,566],{"class":51497},[57,69651,69652],{"class":140},">姓名\u003C\u002F",[57,69654,566],{"class":51497},[57,69656,51504],{"class":140},[57,69658,69659,69661,69663,69666,69668],{"class":59,"line":8250},[57,69660,55499],{"class":140},[57,69662,566],{"class":51497},[57,69664,69665],{"class":140},">年龄\u003C\u002F",[57,69667,566],{"class":51497},[57,69669,51504],{"class":140},[57,69671,69672,69674,69676,69679,69681],{"class":59,"line":8256},[57,69673,55499],{"class":140},[57,69675,566],{"class":51497},[57,69677,69678],{"class":140},">性别\u003C\u002F",[57,69680,566],{"class":51497},[57,69682,51504],{"class":140},[57,69684,69685,69687,69689,69692,69694],{"class":59,"line":8283},[57,69686,55499],{"class":140},[57,69688,566],{"class":51497},[57,69690,69691],{"class":140},">薪资\u003C\u002F",[57,69693,566],{"class":51497},[57,69695,51504],{"class":140},[57,69697,69698,69700,69702,69705,69707],{"class":59,"line":8288},[57,69699,55499],{"class":140},[57,69701,566],{"class":51497},[57,69703,69704],{"class":140},">就业城市\u003C\u002F",[57,69706,566],{"class":51497},[57,69708,51504],{"class":140},[57,69710,69711,69713,69715,69718,69720],{"class":59,"line":8294},[57,69712,55499],{"class":140},[57,69714,566],{"class":51497},[57,69716,69717],{"class":140},">操作\u003C\u002F",[57,69719,566],{"class":51497},[57,69721,51504],{"class":140},[57,69723,69724,69726,69728],{"class":59,"line":8306},[57,69725,55604],{"class":140},[57,69727,563],{"class":51497},[57,69729,51504],{"class":140},[57,69731,69732,69734,69736],{"class":59,"line":8318},[57,69733,51973],{"class":140},[57,69735,560],{"class":51497},[57,69737,51504],{"class":140},[57,69739,69740,69742,69744],{"class":59,"line":8330},[57,69741,51538],{"class":140},[57,69743,603],{"class":51497},[57,69745,51504],{"class":140},[57,69747,69748],{"class":59,"line":9989},[57,69749,69750],{"class":63},"      \u003C!-- \n",[57,69752,69753],{"class":59,"line":10014},[57,69754,69755],{"class":63},"        \u003Ctr>\n",[57,69757,69758],{"class":59,"line":10037},[57,69759,69760],{"class":63},"          \u003Ctd>1001\u003C\u002Ftd>\n",[57,69762,69763],{"class":59,"line":10061},[57,69764,69765],{"class":63},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[57,69767,69768],{"class":59,"line":10066},[57,69769,69770],{"class":63},"          \u003Ctd>19\u003C\u002Ftd>\n",[57,69772,69773],{"class":59,"line":10071},[57,69774,69775],{"class":63},"          \u003Ctd>男\u003C\u002Ftd>\n",[57,69777,69778],{"class":59,"line":10076},[57,69779,69780],{"class":63},"          \u003Ctd>15000\u003C\u002Ftd>\n",[57,69782,69783],{"class":59,"line":10085},[57,69784,69785],{"class":63},"          \u003Ctd>上海\u003C\u002Ftd>\n",[57,69787,69788],{"class":59,"line":10090},[57,69789,69790],{"class":63},"          \u003Ctd>\n",[57,69792,69793],{"class":59,"line":10096},[57,69794,69795],{"class":63},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[57,69797,69798],{"class":59,"line":10117},[57,69799,69800],{"class":63},"          \u003C\u002Ftd>\n",[57,69802,69803],{"class":59,"line":10123},[57,69804,69805],{"class":63},"        \u003C\u002Ftr> \n",[57,69807,69808],{"class":59,"line":10137},[57,69809,69810],{"class":63},"        -->\n",[57,69812,69813,69815,69817],{"class":59,"line":10143},[57,69814,51973],{"class":140},[57,69816,603],{"class":51497},[57,69818,51504],{"class":140},[57,69820,69821,69823,69825],{"class":59,"line":10170},[57,69822,52614],{"class":140},[57,69824,557],{"class":51497},[57,69826,51504],{"class":140},[57,69828,69829,69831,69833],{"class":59,"line":10179},[57,69830,52341],{"class":140},[57,69832,52010],{"class":51497},[57,69834,51504],{"class":140},[57,69836,69837],{"class":59,"line":10185},[57,69838,60155],{"class":63},[57,69840,69841,69843,69846,69848,69850,69852,69854,69857],{"class":59,"line":10193},[57,69842,11494],{"class":136},[57,69844,69845],{"class":81}," uname",[57,69847,13837],{"class":136},[57,69849,54593],{"class":140},[57,69851,54596],{"class":70},[57,69853,168],{"class":140},[57,69855,69856],{"class":74},"'.uname'",[57,69858,238],{"class":140},[57,69860,69861,69863,69865,69867,69869,69871,69873,69876],{"class":59,"line":10198},[57,69862,11494],{"class":136},[57,69864,15961],{"class":81},[57,69866,13837],{"class":136},[57,69868,54593],{"class":140},[57,69870,54596],{"class":70},[57,69872,168],{"class":140},[57,69874,69875],{"class":74},"'.age'",[57,69877,238],{"class":140},[57,69879,69880,69882,69885,69887,69889,69891,69893,69896],{"class":59,"line":16876},[57,69881,11494],{"class":136},[57,69883,69884],{"class":81}," gender",[57,69886,13837],{"class":136},[57,69888,54593],{"class":140},[57,69890,54596],{"class":70},[57,69892,168],{"class":140},[57,69894,69895],{"class":74},"'.gender'",[57,69897,238],{"class":140},[57,69899,69900,69902,69905,69907,69909,69911,69913,69916],{"class":59,"line":16882},[57,69901,11494],{"class":136},[57,69903,69904],{"class":81}," salary",[57,69906,13837],{"class":136},[57,69908,54593],{"class":140},[57,69910,54596],{"class":70},[57,69912,168],{"class":140},[57,69914,69915],{"class":74},"'.salary'",[57,69917,238],{"class":140},[57,69919,69920,69922,69925,69927,69929,69931,69933,69936],{"class":59,"line":16905},[57,69921,11494],{"class":136},[57,69923,69924],{"class":81}," city",[57,69926,13837],{"class":136},[57,69928,54593],{"class":140},[57,69930,54596],{"class":70},[57,69932,168],{"class":140},[57,69934,69935],{"class":74},"'.city'",[57,69937,238],{"class":140},[57,69939,69940,69942,69945,69947,69949,69951,69953,69956],{"class":59,"line":16911},[57,69941,11494],{"class":136},[57,69943,69944],{"class":81}," tbody",[57,69946,13837],{"class":136},[57,69948,54593],{"class":140},[57,69950,54596],{"class":70},[57,69952,168],{"class":140},[57,69954,69955],{"class":74},"'tbody'",[57,69957,238],{"class":140},[57,69959,69960],{"class":59,"line":16934},[57,69961,2673],{"emptyLinePlaceholder":350},[57,69963,69964],{"class":59,"line":16948},[57,69965,69966],{"class":63},"    \u002F\u002F 获取所有带有name属性的元素\n",[57,69968,69969,69971,69974,69976,69978,69980,69982,69985],{"class":59,"line":16968},[57,69970,11494],{"class":136},[57,69972,69973],{"class":81}," items",[57,69975,13837],{"class":136},[57,69977,54593],{"class":140},[57,69979,55878],{"class":70},[57,69981,168],{"class":140},[57,69983,69984],{"class":74},"'[name]'",[57,69986,238],{"class":140},[57,69988,69989],{"class":59,"line":16974},[57,69990,69991],{"class":63},"    \u002F\u002F 声明一个空的数组\n",[57,69993,69994,69996,69998,70000],{"class":59,"line":16985},[57,69995,11494],{"class":136},[57,69997,57892],{"class":81},[57,69999,13837],{"class":136},[57,70001,52035],{"class":140},[57,70003,70004],{"class":59,"line":17008},[57,70005,70006],{"class":63},"    \u002F\u002F 1.录入模块\n",[57,70008,70009],{"class":59,"line":17030},[57,70010,70011],{"class":63},"    \u002F\u002F 1.1这是一个表单提交事件\n",[57,70013,70014,70016,70019,70021,70023,70025,70027,70030],{"class":59,"line":17035},[57,70015,11494],{"class":136},[57,70017,70018],{"class":81}," info",[57,70020,13837],{"class":136},[57,70022,54593],{"class":140},[57,70024,54596],{"class":70},[57,70026,168],{"class":140},[57,70028,70029],{"class":74},"'.info'",[57,70031,238],{"class":140},[57,70033,70034,70037,70039,70041,70044,70046,70048,70050,70052],{"class":59,"line":17041},[57,70035,70036],{"class":140},"    info.",[57,70038,58010],{"class":70},[57,70040,168],{"class":140},[57,70042,70043],{"class":74},"'submit'",[57,70045,12708],{"class":140},[57,70047,54646],{"class":136},[57,70049,1934],{"class":140},[57,70051,495],{"class":5489},[57,70053,12715],{"class":140},[57,70055,70056],{"class":59,"line":17055},[57,70057,70058],{"class":63},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[57,70060,70061,70064,70067],{"class":59,"line":17068},[57,70062,70063],{"class":140},"      e.",[57,70065,70066],{"class":70},"preventDefault",[57,70068,2249],{"class":140},[57,70070,70071],{"class":59,"line":17073},[57,70072,60209],{"class":63},[57,70074,70075],{"class":59,"line":17087},[57,70076,2673],{"emptyLinePlaceholder":350},[57,70078,70079],{"class":59,"line":17092},[57,70080,70081],{"class":63},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[57,70083,70084],{"class":59,"line":17098},[57,70085,70086],{"class":63},"      \u002F\u002F 先遍历循环\n",[57,70088,70089,70091,70093,70095,70097,70099,70101,70103,70105,70108,70110,70112,70114],{"class":59,"line":17103},[57,70090,52481],{"class":136},[57,70092,1934],{"class":140},[57,70094,52044],{"class":136},[57,70096,9711],{"class":140},[57,70098,156],{"class":136},[57,70100,4366],{"class":81},[57,70102,9718],{"class":140},[57,70104,1326],{"class":136},[57,70106,70107],{"class":140}," items.",[57,70109,52165],{"class":81},[57,70111,3487],{"class":140},[57,70113,2565],{"class":136},[57,70115,12715],{"class":140},[57,70117,70118,70120,70123,70125,70128],{"class":59,"line":17117},[57,70119,2770],{"class":136},[57,70121,70122],{"class":140}," (items[i].value ",[57,70124,54683],{"class":136},[57,70126,70127],{"class":74}," ''",[57,70129,12715],{"class":140},[57,70131,70132,70135,70138,70140,70143],{"class":59,"line":17122},[57,70133,70134],{"class":136},"          return",[57,70136,70137],{"class":70}," alert",[57,70139,168],{"class":140},[57,70141,70142],{"class":74},"'输入内容不能为空'",[57,70144,238],{"class":140},[57,70146,70147],{"class":59,"line":17127},[57,70148,2802],{"class":140},[57,70150,70151],{"class":59,"line":17141},[57,70152,52595],{"class":140},[57,70154,70155],{"class":59,"line":17153},[57,70156,2673],{"emptyLinePlaceholder":350},[57,70158,70159],{"class":59,"line":17158},[57,70160,70161],{"class":63},"      \u002F\u002F 创建新的对象\n",[57,70163,70164,70166,70169,70171],{"class":59,"line":17171},[57,70165,58425],{"class":136},[57,70167,70168],{"class":81}," obj",[57,70170,13837],{"class":136},[57,70172,15844],{"class":140},[57,70174,70175,70178,70180,70182,70184],{"class":59,"line":17176},[57,70176,70177],{"class":140},"        stuID: arr.",[57,70179,52165],{"class":81},[57,70181,45763],{"class":136},[57,70183,25387],{"class":81},[57,70185,31663],{"class":140},[57,70187,70188],{"class":59,"line":17181},[57,70189,70190],{"class":140},"        uname: uname.value,\n",[57,70192,70193],{"class":59,"line":17186},[57,70194,70195],{"class":140},"        age: age.value,\n",[57,70197,70198],{"class":59,"line":17199},[57,70199,70200],{"class":140},"        gender: gender.value,\n",[57,70202,70203],{"class":59,"line":17204},[57,70204,70205],{"class":140},"        salary: salary.value,\n",[57,70207,70208],{"class":59,"line":32830},[57,70209,70210],{"class":140},"        city: city.value\n",[57,70212,70213],{"class":59,"line":32836},[57,70214,52595],{"class":140},[57,70216,70217],{"class":59,"line":32842},[57,70218,70219],{"class":63},"      \u002F\u002F console.log(obj);\n",[57,70221,70222],{"class":59,"line":32848},[57,70223,70224],{"class":63},"      \u002F\u002F 追加到数组里面\n",[57,70226,70227,70229,70231],{"class":59,"line":32854},[57,70228,58204],{"class":140},[57,70230,52081],{"class":70},[57,70232,70233],{"class":140},"(obj)\n",[57,70235,70236],{"class":59,"line":32865},[57,70237,70238],{"class":63},"      \u002F\u002F console.log(arr);\n",[57,70240,70241],{"class":59,"line":32871},[57,70242,70243],{"class":63},"      \u002F\u002F 清空表单  reset重置表单\n",[57,70245,70246,70249,70251,70254],{"class":59,"line":32891},[57,70247,70248],{"class":81},"      this",[57,70250,974],{"class":140},[57,70252,70253],{"class":70},"reset",[57,70255,2249],{"class":140},[57,70257,70258],{"class":59,"line":32897},[57,70259,70260],{"class":63},"      \u002F\u002F 调用渲染函数\n",[57,70262,70263,70266],{"class":59,"line":32908},[57,70264,70265],{"class":70},"      render",[57,70267,2249],{"class":140},[57,70269,70270],{"class":59,"line":32914},[57,70271,33658],{"class":140},[57,70273,70274],{"class":59,"line":32920},[57,70275,70276],{"class":63},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[57,70278,70279,70282,70285],{"class":59,"line":32926},[57,70280,70281],{"class":136},"    function",[57,70283,70284],{"class":70}," render",[57,70286,11126],{"class":140},[57,70288,70289],{"class":59,"line":32932},[57,70290,70291],{"class":63},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[57,70293,70294,70297,70299],{"class":59,"line":32938},[57,70295,70296],{"class":140},"      tbody.innerHTML ",[57,70298,156],{"class":136},[57,70300,70301],{"class":74}," ''\n",[57,70303,70304],{"class":59,"line":32944},[57,70305,70306],{"class":63},"      \u002F\u002F 遍历数组\n",[57,70308,70309,70311,70313,70315,70317,70319,70321,70323,70325,70327,70329,70331,70333],{"class":59,"line":32950},[57,70310,52481],{"class":136},[57,70312,1934],{"class":140},[57,70314,52044],{"class":136},[57,70316,9711],{"class":140},[57,70318,156],{"class":136},[57,70320,4366],{"class":81},[57,70322,9718],{"class":140},[57,70324,1326],{"class":136},[57,70326,52162],{"class":140},[57,70328,52165],{"class":81},[57,70330,3487],{"class":140},[57,70332,2565],{"class":136},[57,70334,12715],{"class":140},[57,70336,70337,70339,70342,70344,70346,70349,70351,70354],{"class":59,"line":32970},[57,70338,61467],{"class":136},[57,70340,70341],{"class":81}," tr",[57,70343,13837],{"class":136},[57,70345,54593],{"class":140},[57,70347,70348],{"class":70},"createElement",[57,70350,168],{"class":140},[57,70352,70353],{"class":74},"'tr'",[57,70355,238],{"class":140},[57,70357,70358,70361,70363],{"class":59,"line":32976},[57,70359,70360],{"class":140},"        tr.innerHTML ",[57,70362,156],{"class":136},[57,70364,70365],{"class":74}," `\n",[57,70367,70368,70371,70373,70375,70377,70380,70383],{"class":59,"line":32992},[57,70369,70370],{"class":74},"        \u003Ctd>${",[57,70372,4153],{"class":140},[57,70374,1306],{"class":74},[57,70376,857],{"class":140},[57,70378,70379],{"class":74},"].",[57,70381,70382],{"class":140},"stuID",[57,70384,70385],{"class":74},"}\u003C\u002Ftd>\n",[57,70387,70388,70391,70393,70395,70397,70399,70402],{"class":59,"line":32998},[57,70389,70390],{"class":74},"          \u003Ctd>${",[57,70392,4153],{"class":140},[57,70394,1306],{"class":74},[57,70396,857],{"class":140},[57,70398,70379],{"class":74},[57,70400,70401],{"class":140},"uname",[57,70403,70385],{"class":74},[57,70405,70406,70408,70410,70412,70414,70416,70419],{"class":59,"line":33012},[57,70407,70390],{"class":74},[57,70409,4153],{"class":140},[57,70411,1306],{"class":74},[57,70413,857],{"class":140},[57,70415,70379],{"class":74},[57,70417,70418],{"class":140},"age",[57,70420,70385],{"class":74},[57,70422,70423,70425,70427,70429,70431,70433,70436],{"class":59,"line":33018},[57,70424,70390],{"class":74},[57,70426,4153],{"class":140},[57,70428,1306],{"class":74},[57,70430,857],{"class":140},[57,70432,70379],{"class":74},[57,70434,70435],{"class":140},"gender",[57,70437,70385],{"class":74},[57,70439,70440,70442,70444,70446,70448,70450,70453],{"class":59,"line":33033},[57,70441,70390],{"class":74},[57,70443,4153],{"class":140},[57,70445,1306],{"class":74},[57,70447,857],{"class":140},[57,70449,70379],{"class":74},[57,70451,70452],{"class":140},"salary",[57,70454,70385],{"class":74},[57,70456,70457,70459,70461,70463,70465,70467,70470],{"class":59,"line":33039},[57,70458,70390],{"class":74},[57,70460,4153],{"class":140},[57,70462,1306],{"class":74},[57,70464,857],{"class":140},[57,70466,70379],{"class":74},[57,70468,70469],{"class":140},"city",[57,70471,70385],{"class":74},[57,70473,70474],{"class":59,"line":33048},[57,70475,69790],{"class":74},[57,70477,70478,70481,70483],{"class":59,"line":33054},[57,70479,70480],{"class":74},"            \u003Ca href=\"javascript:\" data-id=${",[57,70482,857],{"class":140},[57,70484,70485],{"class":74},"}>删除\u003C\u002Fa>\n",[57,70487,70488],{"class":59,"line":33063},[57,70489,70490],{"class":74},"          \u003C\u002Ftd> \n",[57,70492,70493],{"class":59,"line":33069},[57,70494,70495],{"class":74},"          `\n",[57,70497,70498],{"class":59,"line":33075},[57,70499,70500],{"class":63},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[57,70502,70503,70506,70509],{"class":59,"line":33084},[57,70504,70505],{"class":140},"        tbody.",[57,70507,70508],{"class":70},"appendChild",[57,70510,70511],{"class":140},"(tr)\n",[57,70513,70514],{"class":59,"line":33090},[57,70515,52595],{"class":140},[57,70517,70518],{"class":59,"line":33101},[57,70519,2460],{"class":140},[57,70521,70522],{"class":59,"line":33107},[57,70523,2673],{"emptyLinePlaceholder":350},[57,70525,70526],{"class":59,"line":33126},[57,70527,70528],{"class":63},"    \u002F\u002F 3.删除委托\n",[57,70530,70531],{"class":59,"line":33132},[57,70532,70533],{"class":63},"    \u002F\u002F 3.1 事件委托 tbody\n",[57,70535,70536,70539,70541,70543,70545,70547,70549,70551,70553],{"class":59,"line":33143},[57,70537,70538],{"class":140},"    tbody.",[57,70540,58010],{"class":70},[57,70542,168],{"class":140},[57,70544,58015],{"class":74},[57,70546,12708],{"class":140},[57,70548,54646],{"class":136},[57,70550,1934],{"class":140},[57,70552,495],{"class":5489},[57,70554,12715],{"class":140},[57,70556,70557,70559,70561,70563,70565],{"class":59,"line":33149},[57,70558,54677],{"class":136},[57,70560,67231],{"class":140},[57,70562,54683],{"class":136},[57,70564,68453],{"class":74},[57,70566,12715],{"class":140},[57,70568,70569],{"class":59,"line":33169},[57,70570,70571],{"class":63},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[57,70573,70574],{"class":59,"line":33185},[57,70575,70576],{"class":63},"        \u002F\u002F console.log(e.target.dataset.id);\n",[57,70578,70579],{"class":59,"line":33191},[57,70580,70581],{"class":63},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[57,70583,70584,70587,70589,70592,70594],{"class":59,"line":33205},[57,70585,70586],{"class":140},"        arr.",[57,70588,58207],{"class":70},[57,70590,70591],{"class":140},"(e.target.dataset.id, ",[57,70593,635],{"class":81},[57,70595,238],{"class":140},[57,70597,70598],{"class":59,"line":33211},[57,70599,70600],{"class":63},"        \u002F\u002F 重新渲染一次\n",[57,70602,70603,70606],{"class":59,"line":33217},[57,70604,70605],{"class":70},"        render",[57,70607,2249],{"class":140},[57,70609,70610],{"class":59,"line":33228},[57,70611,52595],{"class":140},[57,70613,70614],{"class":59,"line":33234},[57,70615,33658],{"class":140},[57,70617,70618,70620,70622],{"class":59,"line":33240},[57,70619,52614],{"class":140},[57,70621,52010],{"class":51497},[57,70623,51504],{"class":140},[57,70625,70626],{"class":59,"line":33250},[57,70627,2673],{"emptyLinePlaceholder":350},[57,70629,70630,70632,70634],{"class":59,"line":33256},[57,70631,51982],{"class":140},[57,70633,51997],{"class":51497},[57,70635,51504],{"class":140},[57,70637,70638],{"class":59,"line":33267},[57,70639,2673],{"emptyLinePlaceholder":350},[57,70641,70642,70644,70646],{"class":59,"line":33273},[57,70643,51982],{"class":140},[57,70645,50832],{"class":51497},[57,70647,51504],{"class":140},[14,70649,70650],{},"样式：",[49,70652,70656],{"className":70653,"code":70654,"language":70655,"meta":46,"style":46},"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",[28,70657,70658,70663,70673,70682,70686,70690,70695,70705,70710,70714,70719,70729,70734,70743,70747,70751,70756,70761,70771,70781,70786,70790,70795,70804,70814,70819,70829,70839,70843,70848,70856,70860,70865,70870,70875,70883,70892,70896,70901,70910,70914,70919,70928,70932,70937,70946,70955,70963,70967,70972,70981,70991,71000,71010,71016,71025,71035,71045,71049,71054,71063,71071,71081,71089,71098,71107,71117,71125,71129,71134,71143],{"__ignoreMap":46},[57,70659,70660],{"class":59,"line":60},[57,70661,70662],{"class":140},"* {\n",[57,70664,70665,70668,70670],{"class":59,"line":67},[57,70666,70667],{"class":51497},"  margin",[57,70669,51634],{"class":140},[57,70671,70672],{"class":74},"0;\n",[57,70674,70675,70678,70680],{"class":59,"line":144},[57,70676,70677],{"class":74},"  padding",[57,70679,51634],{"class":140},[57,70681,70672],{"class":74},[57,70683,70684],{"class":59,"line":150},[57,70685,1847],{"class":140},[57,70687,70688],{"class":59,"line":162},[57,70689,2673],{"emptyLinePlaceholder":350},[57,70691,70692],{"class":59,"line":180},[57,70693,70694],{"class":74},"a {\n",[57,70696,70697,70700,70702],{"class":59,"line":186},[57,70698,70699],{"class":51497},"  text-decoration",[57,70701,51634],{"class":140},[57,70703,70704],{"class":74},"none;\n",[57,70706,70707],{"class":59,"line":197},[57,70708,70709],{"class":74},"  color:#721c24;\n",[57,70711,70712],{"class":59,"line":241},[57,70713,1847],{"class":140},[57,70715,70716],{"class":59,"line":249},[57,70717,70718],{"class":74},"h1 {\n",[57,70720,70721,70724,70726],{"class":59,"line":262},[57,70722,70723],{"class":51497},"  text-align",[57,70725,51634],{"class":140},[57,70727,70728],{"class":74},"center;\n",[57,70730,70731],{"class":59,"line":281},[57,70732,70733],{"class":74},"  color:#333;\n",[57,70735,70736,70738,70740],{"class":59,"line":287},[57,70737,70667],{"class":51497},[57,70739,51634],{"class":140},[57,70741,70742],{"class":74},"20px 0;\n",[57,70744,70745],{"class":59,"line":298},[57,70746,2947],{"class":140},[57,70748,70749],{"class":59,"line":311},[57,70750,1847],{"class":140},[57,70752,70753],{"class":59,"line":322},[57,70754,70755],{"class":74},"table {\n",[57,70757,70758],{"class":59,"line":1929},[57,70759,70760],{"class":74},"  margin:0 auto;\n",[57,70762,70763,70766,70768],{"class":59,"line":1950},[57,70764,70765],{"class":51497},"  width",[57,70767,51634],{"class":140},[57,70769,70770],{"class":74},"800px;\n",[57,70772,70773,70776,70778],{"class":59,"line":1955},[57,70774,70775],{"class":51497},"  border-collapse",[57,70777,51634],{"class":140},[57,70779,70780],{"class":74},"collapse;\n",[57,70782,70783],{"class":59,"line":1969},[57,70784,70785],{"class":74},"  color:#004085;\n",[57,70787,70788],{"class":59,"line":1974},[57,70789,1847],{"class":140},[57,70791,70792],{"class":59,"line":2001},[57,70793,70794],{"class":74},"th {\n",[57,70796,70797,70799,70801],{"class":59,"line":2006},[57,70798,70677],{"class":51497},[57,70800,51634],{"class":140},[57,70802,70803],{"class":74},"10px;\n",[57,70805,70806,70809,70811],{"class":59,"line":2023},[57,70807,70808],{"class":51497},"  background",[57,70810,51634],{"class":140},[57,70812,70813],{"class":63},"#cfe5ff;\n",[57,70815,70816],{"class":59,"line":2028},[57,70817,70818],{"class":140},"  \n",[57,70820,70821,70824,70826],{"class":59,"line":2033},[57,70822,70823],{"class":51497},"  font-size",[57,70825,51634],{"class":140},[57,70827,70828],{"class":74},"20px;\n",[57,70830,70831,70834,70836],{"class":59,"line":2038},[57,70832,70833],{"class":51497},"  font-weight",[57,70835,51634],{"class":140},[57,70837,70838],{"class":74},"400;\n",[57,70840,70841],{"class":59,"line":2052},[57,70842,1847],{"class":140},[57,70844,70845],{"class":59,"line":2057},[57,70846,70847],{"class":74},"td,th {\n",[57,70849,70850,70853],{"class":59,"line":2850},[57,70851,70852],{"class":74},"  border:1px solid",[57,70854,70855],{"class":63}," #b8daff;\n",[57,70857,70858],{"class":59,"line":2864},[57,70859,1847],{"class":140},[57,70861,70862],{"class":59,"line":2872},[57,70863,70864],{"class":74},"td {\n",[57,70866,70867],{"class":59,"line":2877},[57,70868,70869],{"class":74},"  padding:10px;\n",[57,70871,70872],{"class":59,"line":2883},[57,70873,70874],{"class":74},"  color:#666;\n",[57,70876,70877,70879,70881],{"class":59,"line":2889},[57,70878,70723],{"class":51497},[57,70880,51634],{"class":140},[57,70882,70728],{"class":74},[57,70884,70885,70887,70889],{"class":59,"line":2894},[57,70886,70823],{"class":51497},[57,70888,51634],{"class":140},[57,70890,70891],{"class":74},"16px;\n",[57,70893,70894],{"class":59,"line":8221},[57,70895,1847],{"class":140},[57,70897,70898],{"class":59,"line":8245},[57,70899,70900],{"class":74},"tbody tr {\n",[57,70902,70903,70905,70907],{"class":59,"line":8250},[57,70904,70808],{"class":51497},[57,70906,51634],{"class":140},[57,70908,70909],{"class":63},"#fff;\n",[57,70911,70912],{"class":59,"line":8256},[57,70913,1847],{"class":140},[57,70915,70916],{"class":59,"line":8283},[57,70917,70918],{"class":74},"tbody tr:hover {\n",[57,70920,70921,70923,70925],{"class":59,"line":8288},[57,70922,70808],{"class":51497},[57,70924,51634],{"class":140},[57,70926,70927],{"class":63},"#e1ecf8;\n",[57,70929,70930],{"class":59,"line":8294},[57,70931,1847],{"class":140},[57,70933,70934],{"class":59,"line":8306},[57,70935,70936],{"class":74},".info {\n",[57,70938,70939,70941,70943],{"class":59,"line":8318},[57,70940,70765],{"class":51497},[57,70942,51634],{"class":140},[57,70944,70945],{"class":74},"900px;\n",[57,70947,70948,70950,70952],{"class":59,"line":8330},[57,70949,70667],{"class":51497},[57,70951,51634],{"class":140},[57,70953,70954],{"class":74},"50px auto;\n",[57,70956,70957,70959,70961],{"class":59,"line":9989},[57,70958,70723],{"class":51497},[57,70960,51634],{"class":140},[57,70962,70728],{"class":74},[57,70964,70965],{"class":59,"line":10014},[57,70966,1847],{"class":140},[57,70968,70969],{"class":59,"line":10037},[57,70970,70971],{"class":74},".info  input, .info select {\n",[57,70973,70974,70976,70978],{"class":59,"line":10061},[57,70975,70765],{"class":51497},[57,70977,51634],{"class":140},[57,70979,70980],{"class":74},"80px;\n",[57,70982,70983,70986,70988],{"class":59,"line":10066},[57,70984,70985],{"class":51497},"  height",[57,70987,51634],{"class":140},[57,70989,70990],{"class":74},"27px;\n",[57,70992,70993,70996,70998],{"class":59,"line":10071},[57,70994,70995],{"class":51497},"  outline",[57,70997,51634],{"class":140},[57,70999,70704],{"class":74},[57,71001,71002,71005,71007],{"class":59,"line":10076},[57,71003,71004],{"class":51497},"  border-radius",[57,71006,51634],{"class":140},[57,71008,71009],{"class":74},"5px;\n",[57,71011,71012,71014],{"class":59,"line":10085},[57,71013,70852],{"class":74},[57,71015,70855],{"class":63},[57,71017,71018,71021,71023],{"class":59,"line":10090},[57,71019,71020],{"class":51497},"  padding-left",[57,71022,51634],{"class":140},[57,71024,71009],{"class":74},[57,71026,71027,71030,71032],{"class":59,"line":10096},[57,71028,71029],{"class":51497},"  box-sizing",[57,71031,51634],{"class":140},[57,71033,71034],{"class":74},"border-box;\n",[57,71036,71037,71040,71042],{"class":59,"line":10117},[57,71038,71039],{"class":51497},"  margin-right",[57,71041,51634],{"class":140},[57,71043,71044],{"class":74},"15px;\n",[57,71046,71047],{"class":59,"line":10123},[57,71048,1847],{"class":140},[57,71050,71051],{"class":59,"line":10137},[57,71052,71053],{"class":74},".info button {\n",[57,71055,71056,71058,71060],{"class":59,"line":10143},[57,71057,70765],{"class":51497},[57,71059,51634],{"class":140},[57,71061,71062],{"class":74},"60px;\n",[57,71064,71065,71067,71069],{"class":59,"line":10170},[57,71066,70985],{"class":51497},[57,71068,51634],{"class":140},[57,71070,70990],{"class":74},[57,71072,71073,71076,71078],{"class":59,"line":10179},[57,71074,71075],{"class":51497},"  background-color",[57,71077,51634],{"class":140},[57,71079,71080],{"class":63},"#004085;\n",[57,71082,71083,71085,71087],{"class":59,"line":10185},[57,71084,70995],{"class":51497},[57,71086,51634],{"class":140},[57,71088,70704],{"class":74},[57,71090,71091,71094,71096],{"class":59,"line":10193},[57,71092,71093],{"class":51497},"  border",[57,71095,51634],{"class":140},[57,71097,70672],{"class":74},[57,71099,71100,71103,71105],{"class":59,"line":10198},[57,71101,71102],{"class":51497},"  color",[57,71104,51634],{"class":140},[57,71106,70909],{"class":63},[57,71108,71109,71112,71114],{"class":59,"line":16876},[57,71110,71111],{"class":51497},"  cursor",[57,71113,51634],{"class":140},[57,71115,71116],{"class":74},"pointer;\n",[57,71118,71119,71121,71123],{"class":59,"line":16882},[57,71120,71004],{"class":51497},[57,71122,51634],{"class":140},[57,71124,71009],{"class":74},[57,71126,71127],{"class":59,"line":16905},[57,71128,1847],{"class":140},[57,71130,71131],{"class":59,"line":16911},[57,71132,71133],{"class":74},".info .age {\n",[57,71135,71136,71138,71140],{"class":59,"line":16934},[57,71137,70765],{"class":51497},[57,71139,51634],{"class":140},[57,71141,71142],{"class":74},"50px;\n",[57,71144,71145],{"class":59,"line":16948},[57,71146,1847],{"class":140},[14,71148,71149],{},"思路：",[14,71151,71152],{},[44,71153],{"alt":46,"src":71154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,71156,71157],{},[44,71158],{"alt":46,"src":71159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,71161,71162],{},[44,71163],{"alt":46,"src":71164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[394,71166,71168],{"id":71167},"_3315-重绘回流","3.3.15 重绘回流",[14,71170,71171],{},[44,71172],{"alt":46,"src":71173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,71175,71176],{},[44,71177],{"alt":46,"src":71178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,71180,71181],{},[44,71182],{"alt":46,"src":71183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[365,71185,71187],{"id":71186},"_34-bom","3.4 BOM",[14,71189,71190],{},[44,71191],{"alt":46,"src":71192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,71194,71195],{},"平时写的document省略了window而已，实际上是window.document",[14,71197,71198],{},"函数也是这样，调用的时候实际为window.fn()",[14,71200,71201],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,71203,71204],{},"window大部分情况下可以省略",[394,71206,71208],{"id":71207},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,71210,71211],{},"只执行一次",[14,71213,71214],{},[44,71215],{"alt":46,"src":71216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,71218,71219],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,71221,71222],{},[44,71223],{"alt":46,"src":71224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[394,71226,71228],{"id":71227},"_342-js执行机制","3.4.2 JS执行机制",[14,71230,71231],{},[44,71232],{"alt":46,"src":71233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,71235,71236],{},"两个的结果都是1111 3333 2222",[14,71238,71239],{},[44,71240],{"alt":46,"src":71241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,71243,71244],{},[44,71245],{"alt":46,"src":71246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,71248,71249],{},[44,71250],{"alt":46,"src":71251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,71253,71254],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,71256,71257],{},"工作流程：",[14,71259,71260],{},[44,71261],{"alt":46,"src":71262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,71264,71265],{},[44,71266],{"alt":46,"src":71267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,71269,71270],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,71272,71273],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[394,71275,71277],{"id":71276},"_343-location对象","3.4.3 location对象",[14,71279,71280],{},"location对象属于window这个全局对象下的，可以 省略window",[14,71282,71283],{},[44,71284],{"alt":46,"src":71285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,71287,71288],{},"href可以跳转页面",[377,71290,71291],{},[380,71292,71293],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,71295,71296],{},"search得到提交信息之后网站后边的地址",[14,71298,71299],{},[44,71300],{"alt":46,"src":71301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,71303,71304],{},[44,71305],{"alt":46,"src":71306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[377,71308,71309],{"start":67},[380,71310,71311],{},"hash:这个获取单页面应用#后边的地址",[14,71313,71314],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,71316,71317],{},[44,71318],{"alt":46,"src":71319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[49,71321,71323],{"className":53264,"code":71322,"language":53266,"meta":46,"style":46},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[28,71324,71325,71345,71365],{"__ignoreMap":46},[57,71326,71327,71329,71331,71333,71335,71338,71341,71343],{"class":59,"line":60},[57,71328,52341],{"class":140},[57,71330,18],{"class":51497},[57,71332,61254],{"class":70},[57,71334,156],{"class":140},[57,71336,71337],{"class":74},"\"#\u002Fmy\"",[57,71339,71340],{"class":140},">我的\u003C\u002F",[57,71342,18],{"class":51497},[57,71344,51504],{"class":140},[57,71346,71347,71349,71351,71353,71355,71358,71361,71363],{"class":59,"line":67},[57,71348,52341],{"class":140},[57,71350,18],{"class":51497},[57,71352,61254],{"class":70},[57,71354,156],{"class":140},[57,71356,71357],{"class":74},"\"#\u002Ffriend\"",[57,71359,71360],{"class":140},">关注\u003C\u002F",[57,71362,18],{"class":51497},[57,71364,51504],{"class":140},[57,71366,71367,71369,71371,71373,71375,71378,71381,71383],{"class":59,"line":144},[57,71368,52341],{"class":140},[57,71370,18],{"class":51497},[57,71372,61254],{"class":70},[57,71374,156],{"class":140},[57,71376,71377],{"class":74},"\"#\u002Fdownload\"",[57,71379,71380],{"class":140},">下载\u003C\u002F",[57,71382,18],{"class":51497},[57,71384,51504],{"class":140},[14,71386,71387],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[377,71389,71390],{"start":144},[380,71391,71392,71393,71395,71396,71398],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53913,71394],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53913,71397],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[394,71400,71402],{"id":71401},"_345-navigator对象","3.4.5 navigator对象",[14,71404,71405],{},[44,71406],{"alt":46,"src":71407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[49,71409,71413],{"className":71410,"code":71411,"language":71412,"meta":46,"style":46},"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",[28,71414,71415,71420,71431,71443,71448,71499,71540,71545,71558,71570,71575],{"__ignoreMap":46},[57,71416,71417],{"class":59,"line":60},[57,71418,71419],{"class":63},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[57,71421,71422,71424,71426,71428],{"class":59,"line":67},[57,71423,644],{"class":136},[57,71425,168],{"class":140},[57,71427,54646],{"class":136},[57,71429,71430],{"class":140}," () { \n",[57,71432,71433,71435,71438,71440],{"class":59,"line":144},[57,71434,7065],{"class":136},[57,71436,71437],{"class":81}," userAgent",[57,71439,13837],{"class":136},[57,71441,71442],{"class":140}," navigator.userAgent \n",[57,71444,71445],{"class":59,"line":150},[57,71446,71447],{"class":63},"\u002F\u002F 验证是否为Android或iPhone \n",[57,71449,71450,71452,71455,71457,71460,71463,71465,71467,71470,71472,71475,71479,71481,71483,71485,71488,71490,71492,71494,71496],{"class":59,"line":162},[57,71451,7065],{"class":136},[57,71453,71454],{"class":81}," android",[57,71456,13837],{"class":136},[57,71458,71459],{"class":140}," userAgent.",[57,71461,71462],{"class":70},"match",[57,71464,168],{"class":140},[57,71466,1000],{"class":74},[57,71468,71469],{"class":48174},"(Android);",[57,71471,1401],{"class":136},[57,71473,71474],{"class":81},"[\\s",[57,71476,71478],{"class":71477},"snhLl","\\\u002F",[57,71480,1356],{"class":81},[57,71482,897],{"class":136},[57,71484,168],{"class":48174},[57,71486,71487],{"class":81},"[\\d.]",[57,71489,897],{"class":136},[57,71491,845],{"class":48174},[57,71493,1401],{"class":136},[57,71495,1000],{"class":74},[57,71497,71498],{"class":140},") \n",[57,71500,71501,71503,71506,71508,71510,71512,71514,71516,71519,71522,71525,71527,71529,71532,71534,71536,71538],{"class":59,"line":180},[57,71502,7065],{"class":136},[57,71504,71505],{"class":81}," iphone",[57,71507,13837],{"class":136},[57,71509,71459],{"class":140},[57,71511,71462],{"class":70},[57,71513,168],{"class":140},[57,71515,1000],{"class":74},[57,71517,71518],{"class":48174},"(iPhone",[57,71520,71521],{"class":81},"\\s",[57,71523,71524],{"class":48174},"OS)",[57,71526,71521],{"class":81},[57,71528,168],{"class":48174},[57,71530,71531],{"class":81},"[\\d_]",[57,71533,897],{"class":136},[57,71535,845],{"class":48174},[57,71537,1000],{"class":74},[57,71539,71498],{"class":140},[57,71541,71542],{"class":59,"line":186},[57,71543,71544],{"class":63},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[57,71546,71547,71549,71552,71555],{"class":59,"line":197},[57,71548,1813],{"class":136},[57,71550,71551],{"class":140}," (android ",[57,71553,71554],{"class":136},"||",[57,71556,71557],{"class":140}," iphone) { \n",[57,71559,71560,71563,71565,71568],{"class":59,"line":241},[57,71561,71562],{"class":140},"location.href ",[57,71564,156],{"class":136},[57,71566,71567],{"class":74}," 'http:\u002F\u002Fm.itcast.cn'",[57,71569,2947],{"class":140},[57,71571,71572],{"class":59,"line":249},[57,71573,71574],{"class":140},"} \n",[57,71576,71577],{"class":59,"line":262},[57,71578,71579],{"class":140},"})()\n",[394,71581,71583],{"id":71582},"_346-histroy对象","3.4.6 histroy对象",[14,71585,71586],{},[44,71587],{"alt":46,"src":71588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,71590,71591],{},"浏览器地址的前进与后退!!!",[14,71593,71594],{},"history.back() 等效于 history.go(-1)",[14,71596,71597],{},"history.forward() 等效于 history.go(1)",[365,71599,71601],{"id":71600},"_35-本地存储","3.5 本地存储",[377,71603,71604,71607,71610],{},[380,71605,71606],{},"数据存储在用户浏览器中",[380,71608,71609],{},"设置、读取方便、甚至页面刷新不丢失数据",[380,71611,71612],{},"容量较大，sessionStorage和localStorage约 5M 左右",[394,71614,71616],{"id":71615},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,71618,71619],{},"只能存储字符串",[14,71621,71622],{},[44,71623],{"alt":46,"src":71624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,71626,71627],{},[44,71628],{"alt":46,"src":71629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,71631,71632],{},"键值对要加引号,不然就会当变量来看了",[14,71634,71635],{},"localStorage.setItem('uname', 'pink')",[14,71637,71638],{},"刷新之后信息不再丢失",[14,71640,71641],{},"操作key,value会跟着变",[14,71643,71644],{},"删除只删除键就可以,即名字",[14,71646,71635],{},[14,71648,71649],{},"改:",[14,71651,71652],{},"localStorage.setItem('uname','red')",[14,71654,71655],{},"有这个键就是改,没有这个键就是改",[14,71657,71658],{},[44,71659],{"alt":46,"src":71660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,71662,71663],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,71665,71666],{},[44,71667],{"alt":46,"src":71668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,71670,71671],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[394,71673,71675],{"id":71674},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,71677,71678],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,71680,71681],{},"特性:",[377,71683,71684,71687,71690,71693],{},[380,71685,71686],{},"生命周期为关闭浏览器窗口",[380,71688,71689],{},"在同一个窗口(页面)下数据可以共享",[380,71691,71692],{},"以键值对的形式存储使用",[380,71694,71695],{},"用法跟localStorage 基本相同",[394,71697,71699],{"id":71698},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,71701,71702],{},"本地只能存储字符串,无法直接存储复杂数据类型",[49,71704,71706],{"className":53264,"code":71705,"language":53266,"meta":46,"style":46},"\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",[28,71707,71708,71716,71721,71726,71731,71736,71740,71745,71750],{"__ignoreMap":46},[57,71709,71710,71712,71714],{"class":59,"line":60},[57,71711,1326],{"class":140},[57,71713,52010],{"class":51497},[57,71715,51504],{"class":140},[57,71717,71718],{"class":59,"line":67},[57,71719,71720],{"class":140},"    const obj = {\n",[57,71722,71723],{"class":59,"line":144},[57,71724,71725],{"class":140},"      uname: 'pink老师',\n",[57,71727,71728],{"class":59,"line":150},[57,71729,71730],{"class":140},"      age: 18,\n",[57,71732,71733],{"class":59,"line":162},[57,71734,71735],{"class":140},"      gender: '女'\n",[57,71737,71738],{"class":59,"line":180},[57,71739,2460],{"class":140},[57,71741,71742],{"class":59,"line":186},[57,71743,71744],{"class":140},"    \u002F\u002F 存储复杂数据类型\n",[57,71746,71747],{"class":59,"line":197},[57,71748,71749],{"class":140},"    localStorage.setItem('obj', obj)\n",[57,71751,71752,71754,71756],{"class":59,"line":241},[57,71753,52614],{"class":140},[57,71755,52010],{"class":51497},[57,71757,51504],{"class":140},[14,71759,71760],{},[44,71761],{"alt":46,"src":71762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,71764,71765],{},"如果获取一下数据:",[14,71767,71768],{},"log(localStorage.getItem('obj'))",[14,71770,71771],{},[44,71772],{"alt":46,"src":71773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,71775,71776],{},"发现直接存对象是使用不了的!!!",[22270,71778,71780],{"id":71779},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,71782,71783],{},[44,71784],{"alt":46,"src":71785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[49,71787,71789],{"className":50830,"code":71788,"language":50832,"meta":46,"style":46},"\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",[28,71790,71791,71799,71809,71819,71828,71836,71840,71844,71870,71889,71897,71901,71906,71911],{"__ignoreMap":46},[57,71792,71793,71795,71797],{"class":59,"line":60},[57,71794,1326],{"class":140},[57,71796,52010],{"class":51497},[57,71798,51504],{"class":140},[57,71800,71801,71803,71805,71807],{"class":59,"line":67},[57,71802,11494],{"class":136},[57,71804,70168],{"class":81},[57,71806,13837],{"class":136},[57,71808,15844],{"class":140},[57,71810,71811,71814,71817],{"class":59,"line":144},[57,71812,71813],{"class":140},"      uname: ",[57,71815,71816],{"class":74},"'pink老师'",[57,71818,31663],{"class":140},[57,71820,71821,71824,71826],{"class":59,"line":150},[57,71822,71823],{"class":140},"      age: ",[57,71825,1066],{"class":81},[57,71827,31663],{"class":140},[57,71829,71830,71833],{"class":59,"line":162},[57,71831,71832],{"class":140},"      gender: ",[57,71834,71835],{"class":74},"'女'\n",[57,71837,71838],{"class":59,"line":180},[57,71839,2460],{"class":140},[57,71841,71842],{"class":59,"line":186},[57,71843,71744],{"class":63},[57,71845,71846,71849,71852,71854,71857,71859,71862,71864,71867],{"class":59,"line":197},[57,71847,71848],{"class":140},"  localStorage.",[57,71850,71851],{"class":70},"setItem",[57,71853,168],{"class":140},[57,71855,71856],{"class":74},"'obj'",[57,71858,12708],{"class":140},[57,71860,71861],{"class":81},"JSON",[57,71863,974],{"class":140},[57,71865,71866],{"class":70},"stringify",[57,71868,71869],{"class":140},"(obj))\n",[57,71871,71872,71875,71877,71880,71883,71885,71887],{"class":59,"line":241},[57,71873,71874],{"class":140},"  console.",[57,71876,58444],{"class":70},[57,71878,71879],{"class":140},"(localStorage.",[57,71881,71882],{"class":70},"getItem",[57,71884,168],{"class":140},[57,71886,71856],{"class":74},[57,71888,259],{"class":140},[57,71890,71891,71893,71895],{"class":59,"line":249},[57,71892,52614],{"class":140},[57,71894,52010],{"class":51497},[57,71896,51504],{"class":140},[57,71898,71899],{"class":59,"line":262},[57,71900,70818],{"class":140},[57,71902,71903],{"class":59,"line":281},[57,71904,71905],{"class":140},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[57,71907,71908],{"class":59,"line":287},[57,71909,71910],{"class":140},"  类型是字符串的\n",[57,71912,71913],{"class":59,"line":298},[57,71914,71915],{"class":140},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22270,71917,71919],{"id":71918},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,71921,71922],{},[44,71923],{"alt":46,"src":71924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,71926,71927],{},[44,71928],{"alt":46,"src":71929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[49,71931,71933],{"className":53264,"code":71932,"language":53266,"meta":46,"style":46},"  \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",[28,71934,71935,71943,71947,71951,71955,71959,71963,71968,71973,71978,71983,71988,71993,71998,72003],{"__ignoreMap":46},[57,71936,71937,71939,71941],{"class":59,"line":60},[57,71938,52341],{"class":140},[57,71940,52010],{"class":51497},[57,71942,51504],{"class":140},[57,71944,71945],{"class":59,"line":67},[57,71946,71720],{"class":140},[57,71948,71949],{"class":59,"line":144},[57,71950,71725],{"class":140},[57,71952,71953],{"class":59,"line":150},[57,71954,71730],{"class":140},[57,71956,71957],{"class":59,"line":162},[57,71958,71735],{"class":140},[57,71960,71961],{"class":59,"line":180},[57,71962,2460],{"class":140},[57,71964,71965],{"class":59,"line":186},[57,71966,71967],{"class":140},"    \u002F\u002F 1.存储复杂数据类型\n",[57,71969,71970],{"class":59,"line":197},[57,71971,71972],{"class":140},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[57,71974,71975],{"class":59,"line":241},[57,71976,71977],{"class":140},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[57,71979,71980],{"class":59,"line":249},[57,71981,71982],{"class":140},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[57,71984,71985],{"class":59,"line":262},[57,71986,71987],{"class":140},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[57,71989,71990],{"class":59,"line":281},[57,71991,71992],{"class":140},"    \u002F\u002F 取\n",[57,71994,71995],{"class":59,"line":287},[57,71996,71997],{"class":140},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[57,71999,72000],{"class":59,"line":298},[57,72001,72002],{"class":140},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[57,72004,72005,72007,72009],{"class":59,"line":311},[57,72006,52614],{"class":140},[57,72008,52010],{"class":51497},[57,72010,51504],{"class":140},[14,72012,72013],{},[44,72014],{"alt":46,"src":72015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[394,72017,72019],{"id":72018},"_356-数组map方法","3.5.6 数组map方法",[14,72021,72022],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,72024,72025],{},[44,72026],{"alt":46,"src":72027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,72029,72030],{},[44,72031],{"alt":46,"src":72032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,72034,72035,72038],{},[33,72036,72037],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,72040,72041],{},"map有返回值，但是forEach没有返回值",[14,72043,72044],{},"map是个方法。用的时候要加 ()",[14,72046,72047],{},"map返回的是一个数组",[394,72049,72051],{"id":72050},"_357-数组中join方法","3.5.7 数组中join方法",[14,72053,72054],{},[44,72055],{"alt":46,"src":72056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,72058,72059],{},"类似于python中拼接字符串一样！",[377,72061,72062,72065,72068],{},[380,72063,72064],{},"小括号为空则逗号分开",[380,72066,72067],{},"小括号为空字符串 ''，则元素之间没有分隔符",[380,72069,72070],{},"小括号用啥符号就用进行分割",[394,72072,72074],{"id":72073},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[377,72076,72077,72080,72083,72086,72089],{},[380,72078,72079],{},"记住本地时间获取快速方式：new Date().toDateString()",[380,72081,72082],{},"尽量减少DOM操作，用好map+join的渲染方式",[380,72084,72085],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[380,72087,72088],{},"return可以实现函数的结束",[380,72090,72091],{},"禁止跳转是 preventDefault() 不要忘记",[49,72093,72095],{"className":50830,"code":72094,"language":50832,"meta":46,"style":46},"\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",[28,72096,72097,72107,72121,72125,72133,72147,72167,72179,72187,72193,72203,72213,72217,72221,72227,72237,72249,72253,72257,72264,72276,72290,72300,72304,72308,72315,72322,72329,72341,72353,72363,72375,72379,72383,72390,72397,72409,72421,72431,72443,72473,72477,72481,72488,72500,72512,72536,72546,72556,72560,72564,72572,72583,72595,72607,72619,72636,72648,72660,72664,72668,72675,72687,72699,72711,72722,72740,72753,72765,72789,72800,72804,72808,72816,72826,72830,72834,72840,72852,72863,72873,72877,72881,72887,72909,72913,72917,72923,72929,72941,72951,72963,72993,73006,73023,73027,73031,73042,73064,73074,73078,73082,73095,73105,73117,73129,73141,73153,73163,73173,73183,73194,73207,73211,73219,73227,73231,73239,73252,73272,73305,73338,73371,73397,73415,73433,73441,73467,73485,73503,73521,73539,73557,73565,73573,73591,73599,73628,73636,73644,73652,73665,73677,73689,73701,73713,73725,73738,73750,73758,73766,73774,73779,73784,73788,73792,73796,73800,73804,73808,73813,73818,73823,73828,73836,73844,73852,73857,73862,73867,73872,73877,73882,73887,73892,73897,73902,73907,73912,73917,73922,73926,73931,73936,73946,73955,73959,73964,73973,73989,74031,74071,74110,74175,74183,74187,74192,74210,74218,74223,74228,74258,74264,74269,74282,74294,74306,74318,74330,74342,74354,74358,74368,74372,74377,74382,74386,74395,74399,74404,74409,74428,74433,74453,74457,74462,74466,74471,74489,74507,74525,74544,74563,74582,74587,74593,74614,74620,74629,74635,74641,74647,74674,74687,74692,74702,74708,74714,74720,74726,74731,74737,74743,74749,74755,74788,74793,74798,74803,74808,74814,74820,74826,74837,74842,74848,74855,74869,74875,74899,74904,74909,74915,74921,74942,74948,74961,74967,74973,74979,74985,74990,74996,75002,75008,75026,75040,75046,75054,75060,75082,75087,75092,75097,75102,75107,75116,75125,75130],{"__ignoreMap":46},[57,72098,72099,72101,72103,72105],{"class":59,"line":60},[57,72100,51494],{"class":140},[57,72102,51498],{"class":51497},[57,72104,51501],{"class":70},[57,72106,51504],{"class":140},[57,72108,72109,72111,72113,72115,72117,72119],{"class":59,"line":67},[57,72110,1326],{"class":140},[57,72112,50832],{"class":51497},[57,72114,51513],{"class":70},[57,72116,156],{"class":140},[57,72118,51518],{"class":74},[57,72120,51504],{"class":140},[57,72122,72123],{"class":59,"line":144},[57,72124,2673],{"emptyLinePlaceholder":350},[57,72126,72127,72129,72131],{"class":59,"line":150},[57,72128,1326],{"class":140},[57,72130,51531],{"class":51497},[57,72132,51504],{"class":140},[57,72134,72135,72137,72139,72141,72143,72145],{"class":59,"line":162},[57,72136,52341],{"class":140},[57,72138,51541],{"class":51497},[57,72140,51544],{"class":70},[57,72142,156],{"class":140},[57,72144,51549],{"class":74},[57,72146,51504],{"class":140},[57,72148,72149,72151,72153,72155,72157,72159,72161,72163,72165],{"class":59,"line":180},[57,72150,52341],{"class":140},[57,72152,51541],{"class":51497},[57,72154,15192],{"class":70},[57,72156,156],{"class":140},[57,72158,51588],{"class":74},[57,72160,51568],{"class":70},[57,72162,156],{"class":140},[57,72164,51595],{"class":74},[57,72166,51504],{"class":140},[57,72168,72169,72171,72173,72175,72177],{"class":59,"line":186},[57,72170,52341],{"class":140},[57,72172,51604],{"class":51497},[57,72174,51607],{"class":140},[57,72176,51604],{"class":51497},[57,72178,51504],{"class":140},[57,72180,72181,72183,72185],{"class":59,"line":197},[57,72182,52341],{"class":140},[57,72184,342],{"class":51497},[57,72186,51504],{"class":140},[57,72188,72189,72191],{"class":59,"line":241},[57,72190,6676],{"class":51497},[57,72192,15844],{"class":140},[57,72194,72195,72197,72199,72201],{"class":59,"line":249},[57,72196,54892],{"class":81},[57,72198,51634],{"class":140},[57,72200,226],{"class":81},[57,72202,1576],{"class":140},[57,72204,72205,72207,72209,72211],{"class":59,"line":262},[57,72206,54903],{"class":81},[57,72208,51634],{"class":140},[57,72210,226],{"class":81},[57,72212,1576],{"class":140},[57,72214,72215],{"class":59,"line":281},[57,72216,2460],{"class":140},[57,72218,72219],{"class":59,"line":287},[57,72220,2673],{"emptyLinePlaceholder":350},[57,72222,72223,72225],{"class":59,"line":298},[57,72224,57476],{"class":51497},[57,72226,15844],{"class":140},[57,72228,72229,72231,72233,72235],{"class":59,"line":311},[57,72230,57483],{"class":81},[57,72232,51634],{"class":140},[57,72234,51789],{"class":81},[57,72236,1576],{"class":140},[57,72238,72239,72241,72243,72245,72247],{"class":59,"line":322},[57,72240,62274],{"class":81},[57,72242,51634],{"class":140},[57,72244,1116],{"class":81},[57,72246,51689],{"class":136},[57,72248,1576],{"class":140},[57,72250,72251],{"class":59,"line":1929},[57,72252,2460],{"class":140},[57,72254,72255],{"class":59,"line":1950},[57,72256,2673],{"emptyLinePlaceholder":350},[57,72258,72259,72262],{"class":59,"line":1955},[57,72260,72261],{"class":70},"    .info",[57,72263,15844],{"class":140},[57,72265,72266,72268,72270,72272,72274],{"class":59,"line":1969},[57,72267,54968],{"class":81},[57,72269,51634],{"class":140},[57,72271,51686],{"class":81},[57,72273,51689],{"class":136},[57,72275,1576],{"class":140},[57,72277,72278,72280,72282,72284,72286,72288],{"class":59,"line":1974},[57,72279,54903],{"class":81},[57,72281,51634],{"class":140},[57,72283,862],{"class":81},[57,72285,51689],{"class":136},[57,72287,51753],{"class":81},[57,72289,1576],{"class":140},[57,72291,72292,72294,72296,72298],{"class":59,"line":2001},[57,72293,57483],{"class":81},[57,72295,51634],{"class":140},[57,72297,51789],{"class":81},[57,72299,1576],{"class":140},[57,72301,72302],{"class":59,"line":2006},[57,72303,2460],{"class":140},[57,72305,72306],{"class":59,"line":2023},[57,72307,2673],{"emptyLinePlaceholder":350},[57,72309,72310,72313],{"class":59,"line":2028},[57,72311,72312],{"class":70},"    .uname",[57,72314,31663],{"class":140},[57,72316,72317,72320],{"class":59,"line":2033},[57,72318,72319],{"class":70},"    .age",[57,72321,31663],{"class":140},[57,72323,72324,72327],{"class":59,"line":2038},[57,72325,72326],{"class":70},"    .salary",[57,72328,15844],{"class":140},[57,72330,72331,72333,72335,72337,72339],{"class":59,"line":2052},[57,72332,54968],{"class":81},[57,72334,51634],{"class":140},[57,72336,728],{"class":81},[57,72338,51689],{"class":136},[57,72340,1576],{"class":140},[57,72342,72343,72345,72347,72349,72351],{"class":59,"line":2057},[57,72344,54982],{"class":81},[57,72346,51634],{"class":140},[57,72348,1116],{"class":81},[57,72350,51689],{"class":136},[57,72352,1576],{"class":140},[57,72354,72355,72357,72359,72361],{"class":59,"line":2850},[57,72356,61977],{"class":81},[57,72358,51634],{"class":140},[57,72360,54934],{"class":81},[57,72362,1576],{"class":140},[57,72364,72365,72367,72369,72371,72373],{"class":59,"line":2864},[57,72366,61947],{"class":81},[57,72368,51634],{"class":140},[57,72370,991],{"class":81},[57,72372,51689],{"class":136},[57,72374,1576],{"class":140},[57,72376,72377],{"class":59,"line":2872},[57,72378,2460],{"class":140},[57,72380,72381],{"class":59,"line":2877},[57,72382,2673],{"emptyLinePlaceholder":350},[57,72384,72385,72388],{"class":59,"line":2883},[57,72386,72387],{"class":70},"    .gender",[57,72389,31663],{"class":140},[57,72391,72392,72395],{"class":59,"line":2889},[57,72393,72394],{"class":70},"    .city",[57,72396,15844],{"class":140},[57,72398,72399,72401,72403,72405,72407],{"class":59,"line":2894},[57,72400,54968],{"class":81},[57,72402,51634],{"class":140},[57,72404,728],{"class":81},[57,72406,51689],{"class":136},[57,72408,1576],{"class":140},[57,72410,72411,72413,72415,72417,72419],{"class":59,"line":8221},[57,72412,54982],{"class":81},[57,72414,51634],{"class":140},[57,72416,1241],{"class":81},[57,72418,51689],{"class":136},[57,72420,1576],{"class":140},[57,72422,72423,72425,72427,72429],{"class":59,"line":8245},[57,72424,61977],{"class":81},[57,72426,51634],{"class":140},[57,72428,54934],{"class":81},[57,72430,1576],{"class":140},[57,72432,72433,72435,72437,72439,72441],{"class":59,"line":8250},[57,72434,61947],{"class":81},[57,72436,51634],{"class":140},[57,72438,991],{"class":81},[57,72440,51689],{"class":136},[57,72442,1576],{"class":140},[57,72444,72445,72447,72449,72451,72453,72455,72458,72460,72462,72464,72467,72469,72471],{"class":59,"line":8256},[57,72446,62174],{"class":81},[57,72448,51634],{"class":140},[57,72450,635],{"class":81},[57,72452,51689],{"class":136},[57,72454,51718],{"class":81},[57,72456,72457],{"class":81}," rgb",[57,72459,168],{"class":140},[57,72461,1996],{"class":81},[57,72463,12708],{"class":140},[57,72465,72466],{"class":81},"197",[57,72468,12708],{"class":140},[57,72470,72466],{"class":81},[57,72472,2992],{"class":140},[57,72474,72475],{"class":59,"line":8283},[57,72476,2460],{"class":140},[57,72478,72479],{"class":59,"line":8288},[57,72480,2673],{"emptyLinePlaceholder":350},[57,72482,72483,72486],{"class":59,"line":8294},[57,72484,72485],{"class":51497},"    button",[57,72487,15844],{"class":140},[57,72489,72490,72492,72494,72496,72498],{"class":59,"line":8306},[57,72491,54982],{"class":81},[57,72493,51634],{"class":140},[57,72495,1241],{"class":81},[57,72497,51689],{"class":136},[57,72499,1576],{"class":140},[57,72501,72502,72504,72506,72508,72510],{"class":59,"line":8318},[57,72503,54968],{"class":81},[57,72505,51634],{"class":140},[57,72507,900],{"class":81},[57,72509,51689],{"class":136},[57,72511,1576],{"class":140},[57,72513,72514,72516,72518,72521,72523,72525,72527,72530,72532,72534],{"class":59,"line":8330},[57,72515,55081],{"class":81},[57,72517,51634],{"class":140},[57,72519,72520],{"class":81},"rgb",[57,72522,168],{"class":140},[57,72524,1384],{"class":81},[57,72526,12708],{"class":140},[57,72528,72529],{"class":81},"187",[57,72531,12708],{"class":140},[57,72533,716],{"class":81},[57,72535,2992],{"class":140},[57,72537,72538,72540,72542,72544],{"class":59,"line":9989},[57,72539,57613],{"class":81},[57,72541,51634],{"class":140},[57,72543,61039],{"class":81},[57,72545,1576],{"class":140},[57,72547,72548,72550,72552,72554],{"class":59,"line":10014},[57,72549,62174],{"class":81},[57,72551,51634],{"class":140},[57,72553,226],{"class":81},[57,72555,1576],{"class":140},[57,72557,72558],{"class":59,"line":10037},[57,72559,2460],{"class":140},[57,72561,72562],{"class":59,"line":10061},[57,72563,2673],{"emptyLinePlaceholder":350},[57,72565,72566,72568,72570],{"class":59,"line":10066},[57,72567,72485],{"class":51497},[57,72569,51885],{"class":51497},[57,72571,15844],{"class":140},[57,72573,72574,72576,72578,72581],{"class":59,"line":10071},[57,72575,55206],{"class":81},[57,72577,51634],{"class":140},[57,72579,72580],{"class":81},"inline-block",[57,72582,1576],{"class":140},[57,72584,72585,72587,72589,72591,72593],{"class":59,"line":10076},[57,72586,54968],{"class":81},[57,72588,51634],{"class":140},[57,72590,862],{"class":81},[57,72592,51689],{"class":136},[57,72594,1576],{"class":140},[57,72596,72597,72599,72601,72603,72605],{"class":59,"line":10085},[57,72598,54982],{"class":81},[57,72600,51634],{"class":140},[57,72602,862],{"class":81},[57,72604,51689],{"class":136},[57,72606,1576],{"class":140},[57,72608,72609,72611,72613,72615,72617],{"class":59,"line":10090},[57,72610,57556],{"class":81},[57,72612,51634],{"class":140},[57,72614,888],{"class":81},[57,72616,51689],{"class":136},[57,72618,1576],{"class":140},[57,72620,72621,72623,72625,72627,72629,72631,72634],{"class":59,"line":10096},[57,72622,62174],{"class":81},[57,72624,51634],{"class":140},[57,72626,635],{"class":81},[57,72628,51689],{"class":136},[57,72630,51718],{"class":81},[57,72632,72633],{"class":81}," #fff",[57,72635,1576],{"class":140},[57,72637,72638,72640,72642,72644,72646],{"class":59,"line":10117},[57,72639,55331],{"class":81},[57,72641,51634],{"class":140},[57,72643,736],{"class":81},[57,72645,51689],{"class":136},[57,72647,1576],{"class":140},[57,72649,72650,72652,72654,72656,72658],{"class":59,"line":10123},[57,72651,61947],{"class":81},[57,72653,51634],{"class":140},[57,72655,635],{"class":81},[57,72657,51689],{"class":136},[57,72659,1576],{"class":140},[57,72661,72662],{"class":59,"line":10137},[57,72663,2460],{"class":140},[57,72665,72666],{"class":59,"line":10143},[57,72667,2673],{"emptyLinePlaceholder":350},[57,72669,72670,72673],{"class":59,"line":10170},[57,72671,72672],{"class":70},"    .total",[57,72674,15844],{"class":140},[57,72676,72677,72679,72681,72683,72685],{"class":59,"line":10179},[57,72678,54968],{"class":81},[57,72680,51634],{"class":140},[57,72682,61826],{"class":81},[57,72684,51689],{"class":136},[57,72686,1576],{"class":140},[57,72688,72689,72691,72693,72695,72697],{"class":59,"line":10185},[57,72690,54982],{"class":81},[57,72692,51634],{"class":140},[57,72694,817],{"class":81},[57,72696,51689],{"class":136},[57,72698,1576],{"class":140},[57,72700,72701,72703,72705,72707,72709],{"class":59,"line":10193},[57,72702,57556],{"class":81},[57,72704,51634],{"class":140},[57,72706,817],{"class":81},[57,72708,51689],{"class":136},[57,72710,1576],{"class":140},[57,72712,72713,72715,72717,72720],{"class":59,"line":10198},[57,72714,57483],{"class":81},[57,72716,51634],{"class":140},[57,72718,72719],{"class":81},"right",[57,72721,1576],{"class":140},[57,72723,72724,72726,72728,72730,72732,72734,72736,72738],{"class":59,"line":16876},[57,72725,54903],{"class":81},[57,72727,51634],{"class":140},[57,72729,817],{"class":81},[57,72731,51689],{"class":136},[57,72733,51753],{"class":81},[57,72735,2311],{"class":81},[57,72737,51689],{"class":136},[57,72739,1576],{"class":140},[57,72741,72742,72745,72747,72749,72751],{"class":59,"line":16882},[57,72743,72744],{"class":81},"      padding-right",[57,72746,51634],{"class":140},[57,72748,862],{"class":81},[57,72750,51689],{"class":136},[57,72752,1576],{"class":140},[57,72754,72755,72757,72759,72761,72763],{"class":59,"line":16905},[57,72756,55119],{"class":81},[57,72758,51634],{"class":140},[57,72760,939],{"class":81},[57,72762,51689],{"class":136},[57,72764,1576],{"class":140},[57,72766,72767,72769,72771,72773,72775,72778,72780,72783,72785,72787],{"class":59,"line":16911},[57,72768,55081],{"class":81},[57,72770,51634],{"class":140},[57,72772,72520],{"class":81},[57,72774,168],{"class":140},[57,72776,72777],{"class":81},"237",[57,72779,12708],{"class":140},[57,72781,72782],{"class":81},"235",[57,72784,12708],{"class":140},[57,72786,72782],{"class":81},[57,72788,2992],{"class":140},[57,72790,72791,72794,72796,72798],{"class":59,"line":16934},[57,72792,72793],{"class":81},"      box-sizing",[57,72795,51634],{"class":140},[57,72797,60702],{"class":81},[57,72799,1576],{"class":140},[57,72801,72802],{"class":59,"line":16948},[57,72803,2460],{"class":140},[57,72805,72806],{"class":59,"line":16968},[57,72807,2673],{"emptyLinePlaceholder":350},[57,72809,72810,72812,72814],{"class":59,"line":16974},[57,72811,72672],{"class":70},[57,72813,51885],{"class":51497},[57,72815,15844],{"class":140},[57,72817,72818,72820,72822,72824],{"class":59,"line":16985},[57,72819,57613],{"class":81},[57,72821,51634],{"class":140},[57,72823,57618],{"class":81},[57,72825,1576],{"class":140},[57,72827,72828],{"class":59,"line":17008},[57,72829,2460],{"class":140},[57,72831,72832],{"class":59,"line":17030},[57,72833,2673],{"emptyLinePlaceholder":350},[57,72835,72836,72838],{"class":59,"line":17035},[57,72837,65220],{"class":51497},[57,72839,15844],{"class":140},[57,72841,72842,72844,72846,72848,72850],{"class":59,"line":17041},[57,72843,54968],{"class":81},[57,72845,51634],{"class":140},[57,72847,61826],{"class":81},[57,72849,51689],{"class":136},[57,72851,1576],{"class":140},[57,72853,72854,72856,72858,72861],{"class":59,"line":17055},[57,72855,54903],{"class":81},[57,72857,51634],{"class":140},[57,72859,72860],{"class":81},"auto",[57,72862,1576],{"class":140},[57,72864,72865,72867,72869,72871],{"class":59,"line":17068},[57,72866,65227],{"class":81},[57,72868,51634],{"class":140},[57,72870,65232],{"class":81},[57,72872,1576],{"class":140},[57,72874,72875],{"class":59,"line":17073},[57,72876,2460],{"class":140},[57,72878,72879],{"class":59,"line":17087},[57,72880,2673],{"emptyLinePlaceholder":350},[57,72882,72883,72885],{"class":59,"line":17092},[57,72884,65312],{"class":51497},[57,72886,15844],{"class":140},[57,72888,72889,72891,72893,72895,72897,72899,72901,72903,72905,72907],{"class":59,"line":17098},[57,72890,55081],{"class":81},[57,72892,51634],{"class":140},[57,72894,72520],{"class":81},[57,72896,168],{"class":140},[57,72898,72777],{"class":81},[57,72900,12708],{"class":140},[57,72902,72782],{"class":81},[57,72904,12708],{"class":140},[57,72906,72782],{"class":81},[57,72908,2992],{"class":140},[57,72910,72911],{"class":59,"line":17103},[57,72912,2460],{"class":140},[57,72914,72915],{"class":59,"line":17117},[57,72916,2673],{"emptyLinePlaceholder":350},[57,72918,72919,72921],{"class":59,"line":17122},[57,72920,65312],{"class":51497},[57,72922,31663],{"class":140},[57,72924,72925,72927],{"class":59,"line":17127},[57,72926,65378],{"class":51497},[57,72928,15844],{"class":140},[57,72930,72931,72933,72935,72937,72939],{"class":59,"line":17141},[57,72932,54982],{"class":81},[57,72934,51634],{"class":140},[57,72936,690],{"class":81},[57,72938,51689],{"class":136},[57,72940,1576],{"class":140},[57,72942,72943,72945,72947,72949],{"class":59,"line":17153},[57,72944,57483],{"class":81},[57,72946,51634],{"class":140},[57,72948,24008],{"class":81},[57,72950,1576],{"class":140},[57,72952,72953,72955,72957,72959,72961],{"class":59,"line":17158},[57,72954,55119],{"class":81},[57,72956,51634],{"class":140},[57,72958,965],{"class":81},[57,72960,51689],{"class":136},[57,72962,1576],{"class":140},[57,72964,72965,72967,72969,72971,72973,72975,72977,72979,72982,72984,72987,72989,72991],{"class":59,"line":17171},[57,72966,62174],{"class":81},[57,72968,51634],{"class":140},[57,72970,635],{"class":81},[57,72972,51689],{"class":136},[57,72974,51718],{"class":81},[57,72976,72457],{"class":81},[57,72978,168],{"class":140},[57,72980,72981],{"class":81},"228",[57,72983,12708],{"class":140},[57,72985,72986],{"class":81},"225",[57,72988,12708],{"class":140},[57,72990,72986],{"class":81},[57,72992,2992],{"class":140},[57,72994,72995,72998,73000,73002,73004],{"class":59,"line":17176},[57,72996,72997],{"class":81},"      padding-left",[57,72999,51634],{"class":140},[57,73001,736],{"class":81},[57,73003,51689],{"class":136},[57,73005,1576],{"class":140},[57,73007,73008,73010,73012,73014,73017,73019,73021],{"class":59,"line":17181},[57,73009,62057],{"class":81},[57,73011,51634],{"class":140},[57,73013,28390],{"class":81},[57,73015,73016],{"class":81}," linear",[57,73018,62064],{"class":81},[57,73020,1111],{"class":136},[57,73022,1576],{"class":140},[57,73024,73025],{"class":59,"line":17186},[57,73026,2460],{"class":140},[57,73028,73029],{"class":59,"line":17199},[57,73030,2673],{"emptyLinePlaceholder":350},[57,73032,73033,73036,73038,73040],{"class":59,"line":17204},[57,73034,73035],{"class":51497},"    tbody",[57,73037,70341],{"class":51497},[57,73039,61137],{"class":70},[57,73041,15844],{"class":140},[57,73043,73044,73046,73048,73050,73052,73054,73056,73058,73060,73062],{"class":59,"line":32830},[57,73045,55081],{"class":81},[57,73047,51634],{"class":140},[57,73049,72520],{"class":81},[57,73051,168],{"class":140},[57,73053,72777],{"class":81},[57,73055,12708],{"class":140},[57,73057,72782],{"class":81},[57,73059,12708],{"class":140},[57,73061,72782],{"class":81},[57,73063,2992],{"class":140},[57,73065,73066,73068,73070,73072],{"class":59,"line":32836},[57,73067,62222],{"class":81},[57,73069,51634],{"class":140},[57,73071,62227],{"class":81},[57,73073,1576],{"class":140},[57,73075,73076],{"class":59,"line":32842},[57,73077,2460],{"class":140},[57,73079,73080],{"class":59,"line":32848},[57,73081,2673],{"emptyLinePlaceholder":350},[57,73083,73084,73086,73088,73091,73093],{"class":59,"line":32854},[57,73085,73035],{"class":51497},[57,73087,70341],{"class":51497},[57,73089,73090],{"class":51497}," td",[57,73092,1681],{"class":51497},[57,73094,15844],{"class":140},[57,73096,73097,73099,73101,73103],{"class":59,"line":32865},[57,73098,55206],{"class":81},[57,73100,51634],{"class":140},[57,73102,61066],{"class":81},[57,73104,1576],{"class":140},[57,73106,73107,73109,73111,73113,73115],{"class":59,"line":32871},[57,73108,54968],{"class":81},[57,73110,51634],{"class":140},[57,73112,1323],{"class":81},[57,73114,51689],{"class":136},[57,73116,1576],{"class":140},[57,73118,73119,73121,73123,73125,73127],{"class":59,"line":32891},[57,73120,54982],{"class":81},[57,73122,51634],{"class":140},[57,73124,1241],{"class":81},[57,73126,51689],{"class":136},[57,73128,1576],{"class":140},[57,73130,73131,73133,73135,73137,73139],{"class":59,"line":32897},[57,73132,57556],{"class":81},[57,73134,51634],{"class":140},[57,73136,1241],{"class":81},[57,73138,51689],{"class":136},[57,73140,1576],{"class":140},[57,73142,73143,73145,73147,73149,73151],{"class":59,"line":32908},[57,73144,62274],{"class":81},[57,73146,51634],{"class":140},[57,73148,498],{"class":81},[57,73150,51689],{"class":136},[57,73152,1576],{"class":140},[57,73154,73155,73157,73159,73161],{"class":59,"line":32914},[57,73156,57613],{"class":81},[57,73158,51634],{"class":140},[57,73160,61039],{"class":81},[57,73162,1576],{"class":140},[57,73164,73165,73167,73169,73171],{"class":59,"line":32920},[57,73166,57483],{"class":81},[57,73168,51634],{"class":140},[57,73170,51789],{"class":81},[57,73172,1576],{"class":140},[57,73174,73175,73177,73179,73181],{"class":59,"line":32926},[57,73176,64167],{"class":81},[57,73178,51634],{"class":140},[57,73180,54934],{"class":81},[57,73182,1576],{"class":140},[57,73184,73185,73187,73189,73192],{"class":59,"line":32932},[57,73186,55081],{"class":81},[57,73188,51634],{"class":140},[57,73190,73191],{"class":81},"orange",[57,73193,1576],{"class":140},[57,73195,73196,73198,73200,73203,73205],{"class":59,"line":32938},[57,73197,55331],{"class":81},[57,73199,51634],{"class":140},[57,73201,73202],{"class":81},"12.5",[57,73204,51689],{"class":136},[57,73206,1576],{"class":140},[57,73208,73209],{"class":59,"line":32944},[57,73210,2460],{"class":140},[57,73212,73213,73215,73217],{"class":59,"line":32950},[57,73214,52614],{"class":140},[57,73216,342],{"class":51497},[57,73218,51504],{"class":140},[57,73220,73221,73223,73225],{"class":59,"line":32970},[57,73222,51982],{"class":140},[57,73224,51531],{"class":51497},[57,73226,51504],{"class":140},[57,73228,73229],{"class":59,"line":32976},[57,73230,2673],{"emptyLinePlaceholder":350},[57,73232,73233,73235,73237],{"class":59,"line":32992},[57,73234,1326],{"class":140},[57,73236,51997],{"class":51497},[57,73238,51504],{"class":140},[57,73240,73241,73243,73245,73248,73250],{"class":59,"line":32998},[57,73242,52341],{"class":140},[57,73244,365],{"class":51497},[57,73246,73247],{"class":140},">学生就业统计表\u003C\u002F",[57,73249,365],{"class":51497},[57,73251,51504],{"class":140},[57,73253,73254,73256,73258,73260,73262,73264,73266,73268,73270],{"class":59,"line":33012},[57,73255,52341],{"class":140},[57,73257,66822],{"class":51497},[57,73259,53683],{"class":70},[57,73261,156],{"class":140},[57,73263,62861],{"class":74},[57,73265,69267],{"class":70},[57,73267,156],{"class":140},[57,73269,31973],{"class":74},[57,73271,51504],{"class":140},[57,73273,73274,73276,73278,73280,73282,73284,73286,73288,73290,73292,73294,73297,73299,73301,73303],{"class":59,"line":33018},[57,73275,51538],{"class":140},[57,73277,54018],{"class":51497},[57,73279,54021],{"class":70},[57,73281,156],{"class":140},[57,73283,62896],{"class":74},[57,73285,15192],{"class":70},[57,73287,156],{"class":140},[57,73289,69293],{"class":74},[57,73291,61217],{"class":70},[57,73293,156],{"class":140},[57,73295,73296],{"class":74},"\"姓名\"",[57,73298,53683],{"class":70},[57,73300,156],{"class":140},[57,73302,69293],{"class":74},[57,73304,51504],{"class":140},[57,73306,73307,73309,73311,73313,73315,73317,73319,73321,73323,73325,73327,73330,73332,73334,73336],{"class":59,"line":33033},[57,73308,51538],{"class":140},[57,73310,54018],{"class":51497},[57,73312,54021],{"class":70},[57,73314,156],{"class":140},[57,73316,62896],{"class":74},[57,73318,15192],{"class":70},[57,73320,156],{"class":140},[57,73322,69321],{"class":74},[57,73324,61217],{"class":70},[57,73326,156],{"class":140},[57,73328,73329],{"class":74},"\"年龄\"",[57,73331,53683],{"class":70},[57,73333,156],{"class":140},[57,73335,69321],{"class":74},[57,73337,51504],{"class":140},[57,73339,73340,73342,73344,73346,73348,73350,73352,73354,73356,73358,73360,73363,73365,73367,73369],{"class":59,"line":33039},[57,73341,51538],{"class":140},[57,73343,54018],{"class":51497},[57,73345,54021],{"class":70},[57,73347,156],{"class":140},[57,73349,62896],{"class":74},[57,73351,15192],{"class":70},[57,73353,156],{"class":140},[57,73355,69423],{"class":74},[57,73357,61217],{"class":70},[57,73359,156],{"class":140},[57,73361,73362],{"class":74},"\"薪资\"",[57,73364,53683],{"class":70},[57,73366,156],{"class":140},[57,73368,69423],{"class":74},[57,73370,51504],{"class":140},[57,73372,73373,73375,73377,73379,73381,73383,73385,73387,73389,73391,73393,73395],{"class":59,"line":33048},[57,73374,51538],{"class":140},[57,73376,69341],{"class":51497},[57,73378,15192],{"class":70},[57,73380,156],{"class":140},[57,73382,69348],{"class":74},[57,73384,15231],{"class":70},[57,73386,156],{"class":140},[57,73388,7925],{"class":74},[57,73390,53683],{"class":70},[57,73392,156],{"class":140},[57,73394,69348],{"class":74},[57,73396,51504],{"class":140},[57,73398,73399,73401,73403,73405,73407,73409,73411,73413],{"class":59,"line":33054},[57,73400,55431],{"class":140},[57,73402,69363],{"class":51497},[57,73404,66848],{"class":70},[57,73406,156],{"class":140},[57,73408,10234],{"class":74},[57,73410,69372],{"class":140},[57,73412,69363],{"class":51497},[57,73414,51504],{"class":140},[57,73416,73417,73419,73421,73423,73425,73427,73429,73431],{"class":59,"line":33063},[57,73418,55431],{"class":140},[57,73420,69363],{"class":51497},[57,73422,66848],{"class":70},[57,73424,156],{"class":140},[57,73426,10303],{"class":74},[57,73428,69391],{"class":140},[57,73430,69363],{"class":51497},[57,73432,51504],{"class":140},[57,73434,73435,73437,73439],{"class":59,"line":33069},[57,73436,51973],{"class":140},[57,73438,69341],{"class":51497},[57,73440,51504],{"class":140},[57,73442,73443,73445,73447,73449,73451,73453,73455,73457,73459,73461,73463,73465],{"class":59,"line":33075},[57,73444,51538],{"class":140},[57,73446,69341],{"class":51497},[57,73448,15192],{"class":70},[57,73450,156],{"class":140},[57,73452,69445],{"class":74},[57,73454,15231],{"class":70},[57,73456,156],{"class":140},[57,73458,7925],{"class":74},[57,73460,53683],{"class":70},[57,73462,156],{"class":140},[57,73464,69445],{"class":74},[57,73466,51504],{"class":140},[57,73468,73469,73471,73473,73475,73477,73479,73481,73483],{"class":59,"line":33084},[57,73470,55431],{"class":140},[57,73472,69363],{"class":51497},[57,73474,66848],{"class":70},[57,73476,156],{"class":140},[57,73478,69466],{"class":74},[57,73480,69469],{"class":140},[57,73482,69363],{"class":51497},[57,73484,51504],{"class":140},[57,73486,73487,73489,73491,73493,73495,73497,73499,73501],{"class":59,"line":33090},[57,73488,55431],{"class":140},[57,73490,69363],{"class":51497},[57,73492,66848],{"class":70},[57,73494,156],{"class":140},[57,73496,69486],{"class":74},[57,73498,69489],{"class":140},[57,73500,69363],{"class":51497},[57,73502,51504],{"class":140},[57,73504,73505,73507,73509,73511,73513,73515,73517,73519],{"class":59,"line":33101},[57,73506,55431],{"class":140},[57,73508,69363],{"class":51497},[57,73510,66848],{"class":70},[57,73512,156],{"class":140},[57,73514,69506],{"class":74},[57,73516,69509],{"class":140},[57,73518,69363],{"class":51497},[57,73520,51504],{"class":140},[57,73522,73523,73525,73527,73529,73531,73533,73535,73537],{"class":59,"line":33107},[57,73524,55431],{"class":140},[57,73526,69363],{"class":51497},[57,73528,66848],{"class":70},[57,73530,156],{"class":140},[57,73532,69526],{"class":74},[57,73534,69529],{"class":140},[57,73536,69363],{"class":51497},[57,73538,51504],{"class":140},[57,73540,73541,73543,73545,73547,73549,73551,73553,73555],{"class":59,"line":33126},[57,73542,55431],{"class":140},[57,73544,69363],{"class":51497},[57,73546,66848],{"class":70},[57,73548,156],{"class":140},[57,73550,69546],{"class":74},[57,73552,69549],{"class":140},[57,73554,69363],{"class":51497},[57,73556,51504],{"class":140},[57,73558,73559,73561,73563],{"class":59,"line":33132},[57,73560,51973],{"class":140},[57,73562,69341],{"class":51497},[57,73564,51504],{"class":140},[57,73566,73567,73569,73571],{"class":59,"line":33143},[57,73568,51538],{"class":140},[57,73570,54084],{"class":51497},[57,73572,51504],{"class":140},[57,73574,73575,73577,73579,73582,73584,73587,73589],{"class":59,"line":33149},[57,73576,55431],{"class":140},[57,73578,57],{"class":51497},[57,73580,73581],{"class":140},">+\u003C\u002F",[57,73583,57],{"class":51497},[57,73585,73586],{"class":140},">添加\u003C\u002F",[57,73588,54084],{"class":51497},[57,73590,51504],{"class":140},[57,73592,73593,73595,73597],{"class":59,"line":33169},[57,73594,52614],{"class":140},[57,73596,66822],{"class":51497},[57,73598,51504],{"class":140},[57,73600,73601,73603,73605,73607,73609,73611,73614,73616,73619,73621,73624,73626],{"class":59,"line":33185},[57,73602,52341],{"class":140},[57,73604,51808],{"class":51497},[57,73606,53683],{"class":70},[57,73608,156],{"class":140},[57,73610,62777],{"class":74},[57,73612,73613],{"class":140},">共有数据 \u003C",[57,73615,57],{"class":51497},[57,73617,73618],{"class":140},">0\u003C\u002F",[57,73620,57],{"class":51497},[57,73622,73623],{"class":140},"> 条\u003C\u002F",[57,73625,51808],{"class":51497},[57,73627,51504],{"class":140},[57,73629,73630,73632,73634],{"class":59,"line":33191},[57,73631,52341],{"class":140},[57,73633,557],{"class":51497},[57,73635,51504],{"class":140},[57,73637,73638,73640,73642],{"class":59,"line":33205},[57,73639,51538],{"class":140},[57,73641,560],{"class":51497},[57,73643,51504],{"class":140},[57,73645,73646,73648,73650],{"class":59,"line":33211},[57,73647,55431],{"class":140},[57,73649,563],{"class":51497},[57,73651,51504],{"class":140},[57,73653,73654,73656,73658,73661,73663],{"class":59,"line":33217},[57,73655,55499],{"class":140},[57,73657,566],{"class":51497},[57,73659,73660],{"class":140},">ID\u003C\u002F",[57,73662,566],{"class":51497},[57,73664,51504],{"class":140},[57,73666,73667,73669,73671,73673,73675],{"class":59,"line":33228},[57,73668,55499],{"class":140},[57,73670,566],{"class":51497},[57,73672,69652],{"class":140},[57,73674,566],{"class":51497},[57,73676,51504],{"class":140},[57,73678,73679,73681,73683,73685,73687],{"class":59,"line":33234},[57,73680,55499],{"class":140},[57,73682,566],{"class":51497},[57,73684,69665],{"class":140},[57,73686,566],{"class":51497},[57,73688,51504],{"class":140},[57,73690,73691,73693,73695,73697,73699],{"class":59,"line":33240},[57,73692,55499],{"class":140},[57,73694,566],{"class":51497},[57,73696,69678],{"class":140},[57,73698,566],{"class":51497},[57,73700,51504],{"class":140},[57,73702,73703,73705,73707,73709,73711],{"class":59,"line":33250},[57,73704,55499],{"class":140},[57,73706,566],{"class":51497},[57,73708,69691],{"class":140},[57,73710,566],{"class":51497},[57,73712,51504],{"class":140},[57,73714,73715,73717,73719,73721,73723],{"class":59,"line":33256},[57,73716,55499],{"class":140},[57,73718,566],{"class":51497},[57,73720,69704],{"class":140},[57,73722,566],{"class":51497},[57,73724,51504],{"class":140},[57,73726,73727,73729,73731,73734,73736],{"class":59,"line":33267},[57,73728,55499],{"class":140},[57,73730,566],{"class":51497},[57,73732,73733],{"class":140},">录入时间\u003C\u002F",[57,73735,566],{"class":51497},[57,73737,51504],{"class":140},[57,73739,73740,73742,73744,73746,73748],{"class":59,"line":33273},[57,73741,55499],{"class":140},[57,73743,566],{"class":51497},[57,73745,69717],{"class":140},[57,73747,566],{"class":51497},[57,73749,51504],{"class":140},[57,73751,73752,73754,73756],{"class":59,"line":33283},[57,73753,55604],{"class":140},[57,73755,563],{"class":51497},[57,73757,51504],{"class":140},[57,73759,73760,73762,73764],{"class":59,"line":33288},[57,73761,51973],{"class":140},[57,73763,560],{"class":51497},[57,73765,51504],{"class":140},[57,73767,73768,73770,73772],{"class":59,"line":33294},[57,73769,51538],{"class":140},[57,73771,603],{"class":51497},[57,73773,51504],{"class":140},[57,73775,73776],{"class":59,"line":33343},[57,73777,73778],{"class":63},"      \u003C!-- \u003Ctr>\n",[57,73780,73781],{"class":59,"line":33390},[57,73782,73783],{"class":63},"        \u003Ctd>1\u003C\u002Ftd>\n",[57,73785,73786],{"class":59,"line":33395},[57,73787,73783],{"class":63},[57,73789,73790],{"class":59,"line":33401},[57,73791,73783],{"class":63},[57,73793,73794],{"class":59,"line":33420},[57,73795,73783],{"class":63},[57,73797,73798],{"class":59,"line":33426},[57,73799,73783],{"class":63},[57,73801,73802],{"class":59,"line":33446},[57,73803,73783],{"class":63},[57,73805,73806],{"class":59,"line":33452},[57,73807,73783],{"class":63},[57,73809,73810],{"class":59,"line":33458},[57,73811,73812],{"class":63},"        \u003Ctd>\n",[57,73814,73815],{"class":59,"line":33468},[57,73816,73817],{"class":63},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[57,73819,73820],{"class":59,"line":33473},[57,73821,73822],{"class":63},"        \u003C\u002Ftd>\n",[57,73824,73825],{"class":59,"line":33479},[57,73826,73827],{"class":63},"      \u003C\u002Ftr> -->\n",[57,73829,73830,73832,73834],{"class":59,"line":33495},[57,73831,51973],{"class":140},[57,73833,603],{"class":51497},[57,73835,51504],{"class":140},[57,73837,73838,73840,73842],{"class":59,"line":33540},[57,73839,52614],{"class":140},[57,73841,557],{"class":51497},[57,73843,51504],{"class":140},[57,73845,73846,73848,73850],{"class":59,"line":33546},[57,73847,52341],{"class":140},[57,73849,52010],{"class":51497},[57,73851,51504],{"class":140},[57,73853,73854],{"class":59,"line":33552},[57,73855,73856],{"class":63},"    \u002F\u002F const initData = [{\n",[57,73858,73859],{"class":59,"line":33558},[57,73860,73861],{"class":63},"    \u002F\u002F   unameId: 1,\n",[57,73863,73864],{"class":59,"line":33569},[57,73865,73866],{"class":63},"    \u002F\u002F   uname: '华晨宇',\n",[57,73868,73869],{"class":59,"line":33575},[57,73870,73871],{"class":63},"    \u002F\u002F   age: 22,\n",[57,73873,73874],{"class":59,"line":33581},[57,73875,73876],{"class":63},"    \u002F\u002F   salary: 12000,\n",[57,73878,73879],{"class":59,"line":33587},[57,73880,73881],{"class":63},"    \u002F\u002F   gender: '男',\n",[57,73883,73884],{"class":59,"line":33605},[57,73885,73886],{"class":63},"    \u002F\u002F   city: '北京',\n",[57,73888,73889],{"class":59,"line":33619},[57,73890,73891],{"class":63},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[57,73893,73894],{"class":59,"line":33628},[57,73895,73896],{"class":63},"    \u002F\u002F }]\n",[57,73898,73899],{"class":59,"line":33637},[57,73900,73901],{"class":63},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[57,73903,73904],{"class":59,"line":33646},[57,73905,73906],{"class":63},"    \u002F\u002F 1.渲染业务\n",[57,73908,73909],{"class":59,"line":33655},[57,73910,73911],{"class":63},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[57,73913,73914],{"class":59,"line":33661},[57,73915,73916],{"class":63},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[57,73918,73919],{"class":59,"line":33667},[57,73920,73921],{"class":63},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[57,73923,73924],{"class":59,"line":33675},[57,73925,2673],{"emptyLinePlaceholder":350},[57,73927,73928],{"class":59,"line":33680},[57,73929,73930],{"class":63},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[57,73932,73933],{"class":59,"line":33686},[57,73934,73935],{"class":63},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[57,73937,73938,73940,73942,73944],{"class":59,"line":33697},[57,73939,11494],{"class":136},[57,73941,57892],{"class":81},[57,73943,13837],{"class":136},[57,73945,52035],{"class":140},[57,73947,73948,73951,73953],{"class":59,"line":33703},[57,73949,73950],{"class":140},"    console.",[57,73952,58444],{"class":70},[57,73954,52609],{"class":140},[57,73956,73957],{"class":59,"line":33723},[57,73958,2673],{"emptyLinePlaceholder":350},[57,73960,73961],{"class":59,"line":33729},[57,73962,73963],{"class":63},"    \u002F\u002F 时间函数\n",[57,73965,73966,73968,73971],{"class":59,"line":33735},[57,73967,70281],{"class":136},[57,73969,73970],{"class":70}," getTime",[57,73972,11126],{"class":140},[57,73974,73975,73977,73980,73982,73984,73987],{"class":59,"line":33741},[57,73976,58425],{"class":136},[57,73978,73979],{"class":81}," date",[57,73981,13837],{"class":136},[57,73983,11851],{"class":136},[57,73985,73986],{"class":70}," Date",[57,73988,2249],{"class":140},[57,73990,73991,73993,73995,73997,74000,74003,74005,74007,74009,74012,74015,74017,74019,74021,74023,74025,74027,74029],{"class":59,"line":33758},[57,73992,58425],{"class":136},[57,73994,16363],{"class":81},[57,73996,13837],{"class":136},[57,73998,73999],{"class":140}," date.",[57,74001,74002],{"class":70},"getHours",[57,74004,13323],{"class":140},[57,74006,1326],{"class":136},[57,74008,2311],{"class":81},[57,74010,74011],{"class":136}," ?",[57,74013,74014],{"class":74}," '0'",[57,74016,45763],{"class":136},[57,74018,73999],{"class":140},[57,74020,74002],{"class":70},[57,74022,13323],{"class":140},[57,74024,1275],{"class":136},[57,74026,73999],{"class":140},[57,74028,74002],{"class":70},[57,74030,2249],{"class":140},[57,74032,74033,74035,74038,74040,74042,74045,74047,74049,74051,74053,74055,74057,74059,74061,74063,74065,74067,74069],{"class":59,"line":33764},[57,74034,58425],{"class":136},[57,74036,74037],{"class":81}," m",[57,74039,13837],{"class":136},[57,74041,73999],{"class":140},[57,74043,74044],{"class":70},"getMinutes",[57,74046,13323],{"class":140},[57,74048,1326],{"class":136},[57,74050,2311],{"class":81},[57,74052,74011],{"class":136},[57,74054,74014],{"class":74},[57,74056,45763],{"class":136},[57,74058,73999],{"class":140},[57,74060,74044],{"class":70},[57,74062,13323],{"class":140},[57,74064,1275],{"class":136},[57,74066,73999],{"class":140},[57,74068,74044],{"class":70},[57,74070,2249],{"class":140},[57,74072,74073,74075,74077,74079,74081,74084,74086,74088,74090,74092,74094,74096,74098,74100,74102,74104,74106,74108],{"class":59,"line":33770},[57,74074,58425],{"class":136},[57,74076,8701],{"class":81},[57,74078,13837],{"class":136},[57,74080,73999],{"class":140},[57,74082,74083],{"class":70},"getSeconds",[57,74085,13323],{"class":140},[57,74087,1326],{"class":136},[57,74089,2311],{"class":81},[57,74091,74011],{"class":136},[57,74093,74014],{"class":74},[57,74095,45763],{"class":136},[57,74097,73999],{"class":140},[57,74099,74083],{"class":70},[57,74101,13323],{"class":140},[57,74103,1275],{"class":136},[57,74105,73999],{"class":140},[57,74107,74083],{"class":70},[57,74109,2249],{"class":140},[57,74111,74112,74114,74117,74119,74121,74124,74126,74129,74131,74134,74136,74138,74141,74143,74145,74147,74149,74151,74153,74156,74158,74161,74163,74166,74168,74170,74172],{"class":59,"line":33776},[57,74113,58425],{"class":136},[57,74115,74116],{"class":81}," str",[57,74118,13837],{"class":136},[57,74120,63100],{"class":74},[57,74122,74123],{"class":140},"date",[57,74125,974],{"class":74},[57,74127,74128],{"class":70},"getFullYear",[57,74130,2700],{"class":74},[57,74132,74133],{"class":74},"}\u002F${",[57,74135,74123],{"class":140},[57,74137,974],{"class":74},[57,74139,74140],{"class":70},"getMonth",[57,74142,13323],{"class":74},[57,74144,897],{"class":136},[57,74146,25387],{"class":81},[57,74148,74133],{"class":74},[57,74150,74123],{"class":140},[57,74152,974],{"class":74},[57,74154,74155],{"class":70},"getDate",[57,74157,2700],{"class":74},[57,74159,74160],{"class":74},"} ${",[57,74162,831],{"class":140},[57,74164,74165],{"class":74},"}:${",[57,74167,960],{"class":140},[57,74169,74165],{"class":74},[57,74171,1111],{"class":140},[57,74173,74174],{"class":74},"}`\n",[57,74176,74177,74180],{"class":59,"line":33782},[57,74178,74179],{"class":136},"      return",[57,74181,74182],{"class":140}," str\n",[57,74184,74185],{"class":59,"line":33788},[57,74186,2460],{"class":140},[57,74188,74189],{"class":59,"line":33815},[57,74190,74191],{"class":63},"    \u002F\u002F 渲染函数\n",[57,74193,74194,74196,74198,74200,74202,74204,74206,74208],{"class":59,"line":33839},[57,74195,11494],{"class":136},[57,74197,69944],{"class":81},[57,74199,13837],{"class":136},[57,74201,54593],{"class":140},[57,74203,54596],{"class":70},[57,74205,168],{"class":140},[57,74207,69955],{"class":74},[57,74209,238],{"class":140},[57,74211,74212,74214,74216],{"class":59,"line":33845},[57,74213,70281],{"class":136},[57,74215,70284],{"class":70},[57,74217,11126],{"class":140},[57,74219,74220],{"class":59,"line":33851},[57,74221,74222],{"class":63},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[57,74224,74225],{"class":59,"line":33857},[57,74226,74227],{"class":63},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[57,74229,74230,74232,74235,74237,74239,74242,74244,74246,74248,74251,74253,74256],{"class":59,"line":33868},[57,74231,58425],{"class":136},[57,74233,74234],{"class":81}," trArr",[57,74236,13837],{"class":136},[57,74238,52162],{"class":140},[57,74240,74241],{"class":70},"map",[57,74243,168],{"class":140},[57,74245,54646],{"class":136},[57,74247,1934],{"class":140},[57,74249,74250],{"class":5489},"ele",[57,74252,12708],{"class":140},[57,74254,74255],{"class":5489},"index",[57,74257,12715],{"class":140},[57,74259,74260,74262],{"class":59,"line":33879},[57,74261,15024],{"class":136},[57,74263,70365],{"class":74},[57,74265,74266],{"class":59,"line":33885},[57,74267,74268],{"class":74},"      \u003Ctr>\n",[57,74270,74271,74273,74275,74277,74280],{"class":59,"line":33902},[57,74272,70370],{"class":74},[57,74274,74250],{"class":140},[57,74276,974],{"class":74},[57,74278,74279],{"class":140},"unameId",[57,74281,70385],{"class":74},[57,74283,74284,74286,74288,74290,74292],{"class":59,"line":33925},[57,74285,70370],{"class":74},[57,74287,74250],{"class":140},[57,74289,974],{"class":74},[57,74291,70401],{"class":140},[57,74293,70385],{"class":74},[57,74295,74296,74298,74300,74302,74304],{"class":59,"line":33948},[57,74297,70370],{"class":74},[57,74299,74250],{"class":140},[57,74301,974],{"class":74},[57,74303,70418],{"class":140},[57,74305,70385],{"class":74},[57,74307,74308,74310,74312,74314,74316],{"class":59,"line":33954},[57,74309,70370],{"class":74},[57,74311,74250],{"class":140},[57,74313,974],{"class":74},[57,74315,70435],{"class":140},[57,74317,70385],{"class":74},[57,74319,74320,74322,74324,74326,74328],{"class":59,"line":33959},[57,74321,70370],{"class":74},[57,74323,74250],{"class":140},[57,74325,974],{"class":74},[57,74327,70452],{"class":140},[57,74329,70385],{"class":74},[57,74331,74332,74334,74336,74338,74340],{"class":59,"line":33968},[57,74333,70370],{"class":74},[57,74335,74250],{"class":140},[57,74337,974],{"class":74},[57,74339,70469],{"class":140},[57,74341,70385],{"class":74},[57,74343,74344,74346,74348,74350,74352],{"class":59,"line":33978},[57,74345,70370],{"class":74},[57,74347,74250],{"class":140},[57,74349,974],{"class":74},[57,74351,2660],{"class":140},[57,74353,70385],{"class":74},[57,74355,74356],{"class":59,"line":33984},[57,74357,73812],{"class":74},[57,74359,74360,74363,74365],{"class":59,"line":33989},[57,74361,74362],{"class":74},"          \u003Ca href=\"#\" data-id=\"${",[57,74364,74255],{"class":140},[57,74366,74367],{"class":74},"}\">删除\u003C\u002Fa>\n",[57,74369,74370],{"class":59,"line":33995},[57,74371,73822],{"class":74},[57,74373,74374],{"class":59,"line":34008},[57,74375,74376],{"class":74},"      \u003C\u002Ftr>\n",[57,74378,74379],{"class":59,"line":34014},[57,74380,74381],{"class":74},"  `\n",[57,74383,74384],{"class":59,"line":34025},[57,74385,65012],{"class":140},[57,74387,74388,74390,74392],{"class":59,"line":34036},[57,74389,58441],{"class":140},[57,74391,58444],{"class":70},[57,74393,74394],{"class":140},"(trArr)\n",[57,74396,74397],{"class":59,"line":34055},[57,74398,2673],{"emptyLinePlaceholder":350},[57,74400,74401],{"class":59,"line":49715},[57,74402,74403],{"class":63},"      \u002F\u002F (2) 把数组转换为字符串join\n",[57,74405,74406],{"class":59,"line":49720},[57,74407,74408],{"class":63},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[57,74410,74411,74413,74415,74418,74421,74423,74426],{"class":59,"line":49729},[57,74412,70296],{"class":140},[57,74414,156],{"class":136},[57,74416,74417],{"class":140}," trArr.",[57,74419,74420],{"class":70},"join",[57,74422,168],{"class":140},[57,74424,74425],{"class":74},"''",[57,74427,238],{"class":140},[57,74429,74430],{"class":59,"line":49738},[57,74431,74432],{"class":63},"      \u002F\u002F 显示共有几条\n",[57,74434,74435,74437,74439,74441,74444,74447,74449,74451],{"class":59,"line":49743},[57,74436,55968],{"class":140},[57,74438,54596],{"class":70},[57,74440,168],{"class":140},[57,74442,74443],{"class":74},"'.total span'",[57,74445,74446],{"class":140},").innerHTML ",[57,74448,156],{"class":136},[57,74450,52162],{"class":140},[57,74452,56028],{"class":81},[57,74454,74455],{"class":59,"line":49748},[57,74456,2460],{"class":140},[57,74458,74459],{"class":59,"line":49753},[57,74460,74461],{"class":63},"    \u002F\u002F render()\n",[57,74463,74464],{"class":59,"line":49766},[57,74465,2673],{"emptyLinePlaceholder":350},[57,74467,74468],{"class":59,"line":49771},[57,74469,74470],{"class":63},"    \u002F\u002F 获取DOM对象\n",[57,74472,74473,74475,74477,74479,74481,74483,74485,74487],{"class":59,"line":49780},[57,74474,11494],{"class":136},[57,74476,70018],{"class":81},[57,74478,13837],{"class":136},[57,74480,54593],{"class":140},[57,74482,54596],{"class":70},[57,74484,168],{"class":140},[57,74486,70029],{"class":74},[57,74488,238],{"class":140},[57,74490,74491,74493,74495,74497,74499,74501,74503,74505],{"class":59,"line":49789},[57,74492,11494],{"class":136},[57,74494,69845],{"class":81},[57,74496,13837],{"class":136},[57,74498,54593],{"class":140},[57,74500,54596],{"class":70},[57,74502,168],{"class":140},[57,74504,69856],{"class":74},[57,74506,238],{"class":140},[57,74508,74509,74511,74513,74515,74517,74519,74521,74523],{"class":59,"line":49806},[57,74510,11494],{"class":136},[57,74512,15961],{"class":81},[57,74514,13837],{"class":136},[57,74516,54593],{"class":140},[57,74518,54596],{"class":70},[57,74520,168],{"class":140},[57,74522,69875],{"class":74},[57,74524,238],{"class":140},[57,74526,74528,74530,74532,74534,74536,74538,74540,74542],{"class":59,"line":74527},231,[57,74529,11494],{"class":136},[57,74531,69904],{"class":81},[57,74533,13837],{"class":136},[57,74535,54593],{"class":140},[57,74537,54596],{"class":70},[57,74539,168],{"class":140},[57,74541,69915],{"class":74},[57,74543,238],{"class":140},[57,74545,74547,74549,74551,74553,74555,74557,74559,74561],{"class":59,"line":74546},232,[57,74548,11494],{"class":136},[57,74550,69884],{"class":81},[57,74552,13837],{"class":136},[57,74554,54593],{"class":140},[57,74556,54596],{"class":70},[57,74558,168],{"class":140},[57,74560,69895],{"class":74},[57,74562,238],{"class":140},[57,74564,74566,74568,74570,74572,74574,74576,74578,74580],{"class":59,"line":74565},233,[57,74567,11494],{"class":136},[57,74569,69924],{"class":81},[57,74571,13837],{"class":136},[57,74573,54593],{"class":140},[57,74575,54596],{"class":70},[57,74577,168],{"class":140},[57,74579,69935],{"class":74},[57,74581,238],{"class":140},[57,74583,74585],{"class":59,"line":74584},234,[57,74586,2673],{"emptyLinePlaceholder":350},[57,74588,74590],{"class":59,"line":74589},235,[57,74591,74592],{"class":63},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[57,74594,74596,74598,74600,74602,74604,74606,74608,74610,74612],{"class":59,"line":74595},236,[57,74597,70036],{"class":140},[57,74599,58010],{"class":70},[57,74601,168],{"class":140},[57,74603,70043],{"class":74},[57,74605,12708],{"class":140},[57,74607,54646],{"class":136},[57,74609,1934],{"class":140},[57,74611,495],{"class":5489},[57,74613,12715],{"class":140},[57,74615,74617],{"class":59,"line":74616},237,[57,74618,74619],{"class":63},"      \u002F\u002F 禁止浏览器跳转\n",[57,74621,74623,74625,74627],{"class":59,"line":74622},238,[57,74624,70063],{"class":140},[57,74626,70066],{"class":70},[57,74628,2249],{"class":140},[57,74630,74632],{"class":59,"line":74631},239,[57,74633,74634],{"class":63},"      \u002F\u002F 非空判断\n",[57,74636,74638],{"class":59,"line":74637},240,[57,74639,74640],{"class":63},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[57,74642,74644],{"class":59,"line":74643},241,[57,74645,74646],{"class":63},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[57,74648,74650,74652,74654,74656,74659,74661,74664,74667,74669,74671],{"class":59,"line":74649},242,[57,74651,54677],{"class":136},[57,74653,1934],{"class":140},[57,74655,644],{"class":136},[57,74657,74658],{"class":140},"uname.value ",[57,74660,71554],{"class":136},[57,74662,74663],{"class":136}," !",[57,74665,74666],{"class":140},"age.value ",[57,74668,71554],{"class":136},[57,74670,74663],{"class":136},[57,74672,74673],{"class":140},"salary.value) {\n",[57,74675,74677,74679,74681,74683,74685],{"class":59,"line":74676},243,[57,74678,15024],{"class":136},[57,74680,70137],{"class":70},[57,74682,168],{"class":140},[57,74684,70142],{"class":74},[57,74686,238],{"class":140},[57,74688,74690],{"class":59,"line":74689},244,[57,74691,52595],{"class":140},[57,74693,74695,74697,74699],{"class":59,"line":74694},245,[57,74696,58204],{"class":140},[57,74698,52081],{"class":70},[57,74700,74701],{"class":140},"({\n",[57,74703,74705],{"class":59,"line":74704},246,[57,74706,74707],{"class":63},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[57,74709,74711],{"class":59,"line":74710},247,[57,74712,74713],{"class":63},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[57,74715,74717],{"class":59,"line":74716},248,[57,74718,74719],{"class":63},"        \u002F\u002F 对象的序号应为数组长度+1\n",[57,74721,74723],{"class":59,"line":74722},249,[57,74724,74725],{"class":63},"        \u002F\u002F unameId: arr.length + 1,\n",[57,74727,74729],{"class":59,"line":74728},250,[57,74730,2673],{"emptyLinePlaceholder":350},[57,74732,74734],{"class":59,"line":74733},251,[57,74735,74736],{"class":63},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[57,74738,74740],{"class":59,"line":74739},252,[57,74741,74742],{"class":63},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[57,74744,74746],{"class":59,"line":74745},253,[57,74747,74748],{"class":63},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[57,74750,74752],{"class":59,"line":74751},254,[57,74753,74754],{"class":63},"        \u002F\u002F 0当假看\n",[57,74756,74758,74761,74763,74765,74768,74770,74772,74774,74777,74779,74781,74784,74786],{"class":59,"line":74757},255,[57,74759,74760],{"class":140},"        unameId: arr.",[57,74762,52165],{"class":81},[57,74764,74011],{"class":136},[57,74766,74767],{"class":140}," arr[arr.",[57,74769,52165],{"class":81},[57,74771,52468],{"class":136},[57,74773,25387],{"class":81},[57,74775,74776],{"class":140},"].unameId ",[57,74778,897],{"class":136},[57,74780,25387],{"class":81},[57,74782,74783],{"class":136}," :",[57,74785,25387],{"class":81},[57,74787,31663],{"class":140},[57,74789,74791],{"class":59,"line":74790},256,[57,74792,70190],{"class":140},[57,74794,74796],{"class":59,"line":74795},257,[57,74797,70195],{"class":140},[57,74799,74801],{"class":59,"line":74800},258,[57,74802,70205],{"class":140},[57,74804,74806],{"class":59,"line":74805},259,[57,74807,70200],{"class":140},[57,74809,74811],{"class":59,"line":74810},260,[57,74812,74813],{"class":140},"        city: city.value,\n",[57,74815,74817],{"class":59,"line":74816},261,[57,74818,74819],{"class":63},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[57,74821,74823],{"class":59,"line":74822},262,[57,74824,74825],{"class":63},"        \u002F\u002F time: new Date().toDateString()\n",[57,74827,74829,74832,74835],{"class":59,"line":74828},263,[57,74830,74831],{"class":140},"        time: ",[57,74833,74834],{"class":70},"getTime",[57,74836,2249],{"class":140},[57,74838,74840],{"class":59,"line":74839},264,[57,74841,65012],{"class":140},[57,74843,74845],{"class":59,"line":74844},265,[57,74846,74847],{"class":63},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[57,74849,74851,74853],{"class":59,"line":74850},266,[57,74852,70265],{"class":70},[57,74854,2249],{"class":140},[57,74856,74858,74860,74862,74864,74866],{"class":59,"line":74857},267,[57,74859,70248],{"class":81},[57,74861,974],{"class":140},[57,74863,70253],{"class":70},[57,74865,13323],{"class":140},[57,74867,74868],{"class":63},"\u002F\u002F重置表单\n",[57,74870,74872],{"class":59,"line":74871},268,[57,74873,74874],{"class":63},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[57,74876,74878,74881,74883,74885,74888,74890,74892,74894,74896],{"class":59,"line":74877},269,[57,74879,74880],{"class":140},"      localStorage.",[57,74882,71851],{"class":70},[57,74884,168],{"class":140},[57,74886,74887],{"class":74},"'data'",[57,74889,12708],{"class":140},[57,74891,71861],{"class":81},[57,74893,974],{"class":140},[57,74895,71866],{"class":70},[57,74897,74898],{"class":140},"(arr))\n",[57,74900,74902],{"class":59,"line":74901},270,[57,74903,33658],{"class":140},[57,74905,74907],{"class":59,"line":74906},271,[57,74908,2673],{"emptyLinePlaceholder":350},[57,74910,74912],{"class":59,"line":74911},272,[57,74913,74914],{"class":63},"    \u002F\u002F 3.删除业务\n",[57,74916,74918],{"class":59,"line":74917},273,[57,74919,74920],{"class":63},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[57,74922,74924,74926,74928,74930,74932,74934,74936,74938,74940],{"class":59,"line":74923},274,[57,74925,70538],{"class":140},[57,74927,58010],{"class":70},[57,74929,168],{"class":140},[57,74931,58015],{"class":74},[57,74933,12708],{"class":140},[57,74935,54646],{"class":136},[57,74937,1934],{"class":140},[57,74939,495],{"class":5489},[57,74941,12715],{"class":140},[57,74943,74945],{"class":59,"line":74944},275,[57,74946,74947],{"class":63},"      \u002F\u002F 判断是否点击的是删除按钮\n",[57,74949,74951,74953,74955,74957,74959],{"class":59,"line":74950},276,[57,74952,54677],{"class":136},[57,74954,67231],{"class":140},[57,74956,54683],{"class":136},[57,74958,68453],{"class":74},[57,74960,12715],{"class":140},[57,74962,74964],{"class":59,"line":74963},277,[57,74965,74966],{"class":63},"        \u002F\u002F alert(1)\n",[57,74968,74970],{"class":59,"line":74969},278,[57,74971,74972],{"class":63},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[57,74974,74976],{"class":59,"line":74975},279,[57,74977,74978],{"class":63},"        \u002F\u002F console.log(e.target)\n",[57,74980,74982],{"class":59,"line":74981},280,[57,74983,74984],{"class":63},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[57,74986,74988],{"class":59,"line":74987},281,[57,74989,2673],{"emptyLinePlaceholder":350},[57,74991,74993],{"class":59,"line":74992},282,[57,74994,74995],{"class":63},"        \u002F\u002F 确认框，确然是否真的要删除\n",[57,74997,74999],{"class":59,"line":74998},283,[57,75000,75001],{"class":63},"        \u002F\u002F confirm()为确认框\n",[57,75003,75005],{"class":59,"line":75004},284,[57,75006,75007],{"class":63},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[57,75009,75011,75013,75015,75018,75020,75023],{"class":59,"line":75010},285,[57,75012,2770],{"class":136},[57,75014,1934],{"class":140},[57,75016,75017],{"class":70},"confirm",[57,75019,168],{"class":140},[57,75021,75022],{"class":74},"'您确定要删除这条数据吗？'",[57,75024,75025],{"class":140},")) {\n",[57,75027,75029,75032,75034,75036,75038],{"class":59,"line":75028},286,[57,75030,75031],{"class":140},"          arr.",[57,75033,58207],{"class":70},[57,75035,70591],{"class":140},[57,75037,635],{"class":81},[57,75039,238],{"class":140},[57,75041,75043],{"class":59,"line":75042},287,[57,75044,75045],{"class":63},"          \u002F\u002F 3.4 重新渲染页面\n",[57,75047,75049,75052],{"class":59,"line":75048},288,[57,75050,75051],{"class":70},"          render",[57,75053,2249],{"class":140},[57,75055,75057],{"class":59,"line":75056},289,[57,75058,75059],{"class":63},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[57,75061,75063,75066,75068,75070,75072,75074,75076,75078,75080],{"class":59,"line":75062},290,[57,75064,75065],{"class":140},"          localStorage.",[57,75067,71851],{"class":70},[57,75069,168],{"class":140},[57,75071,74887],{"class":74},[57,75073,12708],{"class":140},[57,75075,71861],{"class":81},[57,75077,974],{"class":140},[57,75079,71866],{"class":70},[57,75081,74898],{"class":140},[57,75083,75085],{"class":59,"line":75084},291,[57,75086,2802],{"class":140},[57,75088,75090],{"class":59,"line":75089},292,[57,75091,52595],{"class":140},[57,75093,75095],{"class":59,"line":75094},293,[57,75096,2673],{"emptyLinePlaceholder":350},[57,75098,75100],{"class":59,"line":75099},294,[57,75101,33658],{"class":140},[57,75103,75105],{"class":59,"line":75104},295,[57,75106,2673],{"emptyLinePlaceholder":350},[57,75108,75110,75112,75114],{"class":59,"line":75109},296,[57,75111,52614],{"class":140},[57,75113,52010],{"class":51497},[57,75115,51504],{"class":140},[57,75117,75119,75121,75123],{"class":59,"line":75118},297,[57,75120,51982],{"class":140},[57,75122,51997],{"class":51497},[57,75124,51504],{"class":140},[57,75126,75128],{"class":59,"line":75127},298,[57,75129,2673],{"emptyLinePlaceholder":350},[57,75131,75133,75135,75137],{"class":59,"line":75132},299,[57,75134,51982],{"class":140},[57,75136,50832],{"class":51497},[57,75138,51504],{"class":140},[365,75140,75142],{"id":75141},"_36-正则表达式","3.6 正则表达式",[14,75144,75145],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,75147,75148],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,75150,75151],{},"正则表达式的作用：",[1422,75153,75154,75161,75167],{},[380,75155,75156,75157,75160],{},"表单验证（ ",[33,75158,75159],{},"匹配"," ）",[380,75162,75163,75164,75160],{},"过滤敏感词（ ",[33,75165,75166],{},"替换",[380,75168,75169,75170,75160],{},"字符串中提取我们想要的部分（ ",[33,75171,75172],{},"提取",[394,75174,75176],{"id":75175},"_361-语法","3.6.1 语法",[14,75178,75179],{},"正则表达式使用步骤：",[377,75181,75182,75185],{},[380,75183,75184],{},"定义规则",[380,75186,75187],{},"查找是否匹配",[14,75189,75190],{},"正则表达式里边不需要写引号",[14,75192,75193],{},[44,75194],{"alt":46,"src":75195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,75197,75198],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,75200,75201],{},"reg.test(str)",[14,75203,75204],{},[44,75205],{"alt":46,"src":75206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,75208,75209],{},[44,75210],{"alt":46,"src":75211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[394,75213,75215],{"id":75214},"_362-元字符","3.6.2 元字符",[377,75217,75218,75221,75224,75227,75234],{},[380,75219,75220],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[380,75222,75223],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[380,75225,75226],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[380,75228,75229,75230],{},"正则验证工具：",[18,75231,75232],{"href":75232,"rel":75233},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[22],[380,75235,75236],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22270,75238,75240],{"id":75239},"_3621-边界符","3.6.2.1 边界符",[14,75242,75243],{},[44,75244],{"alt":46,"src":75245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,75247,75248],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,75250,75251],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,75253,75254],{},"只匹配一次",[14,75256,75257],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22270,75259,75261],{"id":75260},"_3622-量词","3.6.2.2 量词",[14,75263,75264],{},[44,75265],{"alt":46,"src":75266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,75268,75269],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22270,75271,75273],{"id":75272},"_3623-元字符","3.6.2.3 元字符",[14,75275,75276],{},[44,75277],{"alt":46,"src":75278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,75280,75281],{},"匹配的是a或b或c []只选一个",[14,75283,75284],{},[44,75285],{"alt":46,"src":75286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,75288,75289],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,75291,75292],{},[44,75293],{"alt":46,"src":75294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,75296,75297],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,75299,75300],{},[44,75301],{"alt":46,"src":75302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[49,75304,75306],{"className":50830,"code":75305,"language":50832,"meta":46,"style":46},"\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",[28,75307,75308,75318,75332,75336,75344,75358,75378,75390,75398,75402,75410,75418,75423,75454,75481,75509,75513,75518,75546,75577,75582,75587,75618,75650,75682,75686,75691,75722,75752,75782,75786,75791,75822,75853,75883,75913,75917,75922,75955,75959,75964,75995,76026,76030,76035,76066,76096,76127,76131,76136,76168,76199,76230,76257,76288,76320,76353,76384,76415,76447,76478,76486,76494,76498],{"__ignoreMap":46},[57,75309,75310,75312,75314,75316],{"class":59,"line":60},[57,75311,51494],{"class":140},[57,75313,51498],{"class":51497},[57,75315,51501],{"class":70},[57,75317,51504],{"class":140},[57,75319,75320,75322,75324,75326,75328,75330],{"class":59,"line":67},[57,75321,1326],{"class":140},[57,75323,50832],{"class":51497},[57,75325,51513],{"class":70},[57,75327,156],{"class":140},[57,75329,51518],{"class":74},[57,75331,51504],{"class":140},[57,75333,75334],{"class":59,"line":144},[57,75335,2673],{"emptyLinePlaceholder":350},[57,75337,75338,75340,75342],{"class":59,"line":150},[57,75339,1326],{"class":140},[57,75341,51531],{"class":51497},[57,75343,51504],{"class":140},[57,75345,75346,75348,75350,75352,75354,75356],{"class":59,"line":162},[57,75347,52341],{"class":140},[57,75349,51541],{"class":51497},[57,75351,51544],{"class":70},[57,75353,156],{"class":140},[57,75355,51549],{"class":74},[57,75357,51504],{"class":140},[57,75359,75360,75362,75364,75366,75368,75370,75372,75374,75376],{"class":59,"line":180},[57,75361,52341],{"class":140},[57,75363,51541],{"class":51497},[57,75365,15192],{"class":70},[57,75367,156],{"class":140},[57,75369,51588],{"class":74},[57,75371,51568],{"class":70},[57,75373,156],{"class":140},[57,75375,51595],{"class":74},[57,75377,51504],{"class":140},[57,75379,75380,75382,75384,75386,75388],{"class":59,"line":186},[57,75381,52341],{"class":140},[57,75383,51604],{"class":51497},[57,75385,51607],{"class":140},[57,75387,51604],{"class":51497},[57,75389,51504],{"class":140},[57,75391,75392,75394,75396],{"class":59,"line":197},[57,75393,51982],{"class":140},[57,75395,51531],{"class":51497},[57,75397,51504],{"class":140},[57,75399,75400],{"class":59,"line":241},[57,75401,2673],{"emptyLinePlaceholder":350},[57,75403,75404,75406,75408],{"class":59,"line":249},[57,75405,1326],{"class":140},[57,75407,51997],{"class":51497},[57,75409,51504],{"class":140},[57,75411,75412,75414,75416],{"class":59,"line":262},[57,75413,52341],{"class":140},[57,75415,52010],{"class":51497},[57,75417,51504],{"class":140},[57,75419,75420],{"class":59,"line":281},[57,75421,75422],{"class":63},"    \u002F\u002F 元字符中\n",[57,75424,75425,75427,75429,75431,75433,75436,75438,75440,75443,75445,75448,75451],{"class":59,"line":287},[57,75426,73950],{"class":140},[57,75428,58444],{"class":70},[57,75430,168],{"class":140},[57,75432,1000],{"class":74},[57,75434,75435],{"class":48174},"哈",[57,75437,1000],{"class":74},[57,75439,974],{"class":140},[57,75441,75442],{"class":70},"test",[57,75444,168],{"class":140},[57,75446,75447],{"class":74},"'哈'",[57,75449,75450],{"class":140},"))  ",[57,75452,75453],{"class":63},"\u002F\u002Ftrue\n",[57,75455,75456,75458,75460,75462,75464,75466,75468,75470,75472,75474,75477,75479],{"class":59,"line":298},[57,75457,73950],{"class":140},[57,75459,58444],{"class":70},[57,75461,168],{"class":140},[57,75463,1000],{"class":74},[57,75465,75435],{"class":48174},[57,75467,1000],{"class":74},[57,75469,974],{"class":140},[57,75471,75442],{"class":70},[57,75473,168],{"class":140},[57,75475,75476],{"class":74},"'哈哈'",[57,75478,75450],{"class":140},[57,75480,75453],{"class":63},[57,75482,75483,75485,75487,75489,75491,75493,75495,75497,75499,75501,75504,75507],{"class":59,"line":311},[57,75484,73950],{"class":140},[57,75486,58444],{"class":70},[57,75488,168],{"class":140},[57,75490,1000],{"class":74},[57,75492,75435],{"class":48174},[57,75494,1000],{"class":74},[57,75496,974],{"class":140},[57,75498,75442],{"class":70},[57,75500,168],{"class":140},[57,75502,75503],{"class":74},"'二哈'",[57,75505,75506],{"class":140},"))   ",[57,75508,75453],{"class":63},[57,75510,75511],{"class":59,"line":322},[57,75512,2673],{"emptyLinePlaceholder":350},[57,75514,75515],{"class":59,"line":1929},[57,75516,75517],{"class":63},"    \u002F\u002F 1.边界符\n",[57,75519,75520,75522,75524,75526,75528,75530,75532,75534,75536,75538,75540,75542,75544],{"class":59,"line":1950},[57,75521,73950],{"class":140},[57,75523,58444],{"class":70},[57,75525,168],{"class":140},[57,75527,1000],{"class":74},[57,75529,1381],{"class":136},[57,75531,75435],{"class":48174},[57,75533,1000],{"class":74},[57,75535,974],{"class":140},[57,75537,75442],{"class":70},[57,75539,168],{"class":140},[57,75541,75447],{"class":74},[57,75543,75450],{"class":140},[57,75545,75453],{"class":63},[57,75547,75548,75550,75552,75554,75556,75558,75560,75562,75564,75566,75568,75570,75572,75574],{"class":59,"line":1955},[57,75549,73950],{"class":140},[57,75551,58444],{"class":70},[57,75553,168],{"class":140},[57,75555,1000],{"class":74},[57,75557,1381],{"class":136},[57,75559,75435],{"class":48174},[57,75561,719],{"class":136},[57,75563,1000],{"class":74},[57,75565,974],{"class":140},[57,75567,75442],{"class":70},[57,75569,168],{"class":140},[57,75571,75476],{"class":74},[57,75573,75450],{"class":140},[57,75575,75576],{"class":63},"\u002F\u002Ffalse\n",[57,75578,75579],{"class":59,"line":1969},[57,75580,75581],{"class":63},"    \u002F\u002F 2.量词\n",[57,75583,75584],{"class":59,"line":1974},[57,75585,75586],{"class":63},"    \u002F\u002F 量词 * 类似于 >= 0\n",[57,75588,75589,75591,75593,75595,75597,75599,75601,75604,75606,75608,75610,75612,75614,75616],{"class":59,"line":2001},[57,75590,73950],{"class":140},[57,75592,58444],{"class":70},[57,75594,168],{"class":140},[57,75596,1000],{"class":74},[57,75598,1381],{"class":136},[57,75600,75435],{"class":48174},[57,75602,75603],{"class":136},"*$",[57,75605,1000],{"class":74},[57,75607,974],{"class":140},[57,75609,75442],{"class":70},[57,75611,168],{"class":140},[57,75613,75476],{"class":74},[57,75615,75450],{"class":140},[57,75617,75453],{"class":63},[57,75619,75620,75622,75624,75626,75628,75630,75632,75634,75636,75638,75640,75642,75645,75647],{"class":59,"line":2006},[57,75621,73950],{"class":140},[57,75623,58444],{"class":70},[57,75625,168],{"class":140},[57,75627,1000],{"class":74},[57,75629,1381],{"class":136},[57,75631,75435],{"class":48174},[57,75633,75603],{"class":136},[57,75635,1000],{"class":74},[57,75637,974],{"class":140},[57,75639,75442],{"class":70},[57,75641,168],{"class":140},[57,75643,75644],{"class":74},"'二哈好傻'",[57,75646,75450],{"class":140},[57,75648,75649],{"class":63},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[57,75651,75652,75654,75656,75658,75660,75662,75664,75666,75668,75670,75672,75674,75677,75679],{"class":59,"line":2023},[57,75653,73950],{"class":140},[57,75655,58444],{"class":70},[57,75657,168],{"class":140},[57,75659,1000],{"class":74},[57,75661,1381],{"class":136},[57,75663,75435],{"class":48174},[57,75665,75603],{"class":136},[57,75667,1000],{"class":74},[57,75669,974],{"class":140},[57,75671,75442],{"class":70},[57,75673,168],{"class":140},[57,75675,75676],{"class":74},"'哈好哈'",[57,75678,75506],{"class":140},[57,75680,75681],{"class":63},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[57,75683,75684],{"class":59,"line":2028},[57,75685,2673],{"emptyLinePlaceholder":350},[57,75687,75688],{"class":59,"line":2033},[57,75689,75690],{"class":63},"    \u002F\u002F +类似于>=1\n",[57,75692,75693,75695,75697,75699,75701,75703,75705,75708,75710,75712,75714,75716,75718,75720],{"class":59,"line":2038},[57,75694,73950],{"class":140},[57,75696,58444],{"class":70},[57,75698,168],{"class":140},[57,75700,1000],{"class":74},[57,75702,1381],{"class":136},[57,75704,75435],{"class":48174},[57,75706,75707],{"class":136},"+$",[57,75709,1000],{"class":74},[57,75711,974],{"class":140},[57,75713,75442],{"class":70},[57,75715,168],{"class":140},[57,75717,75476],{"class":74},[57,75719,75450],{"class":140},[57,75721,75453],{"class":63},[57,75723,75724,75726,75728,75730,75732,75734,75736,75738,75740,75742,75744,75746,75748,75750],{"class":59,"line":2052},[57,75725,73950],{"class":140},[57,75727,58444],{"class":70},[57,75729,168],{"class":140},[57,75731,1000],{"class":74},[57,75733,1381],{"class":136},[57,75735,75435],{"class":48174},[57,75737,75707],{"class":136},[57,75739,1000],{"class":74},[57,75741,974],{"class":140},[57,75743,75442],{"class":70},[57,75745,168],{"class":140},[57,75747,75644],{"class":74},[57,75749,75450],{"class":140},[57,75751,75649],{"class":63},[57,75753,75754,75756,75758,75760,75762,75764,75766,75768,75770,75772,75774,75776,75778,75780],{"class":59,"line":2057},[57,75755,73950],{"class":140},[57,75757,58444],{"class":70},[57,75759,168],{"class":140},[57,75761,1000],{"class":74},[57,75763,1381],{"class":136},[57,75765,75435],{"class":48174},[57,75767,75707],{"class":136},[57,75769,1000],{"class":74},[57,75771,974],{"class":140},[57,75773,75442],{"class":70},[57,75775,168],{"class":140},[57,75777,75676],{"class":74},[57,75779,75506],{"class":140},[57,75781,75576],{"class":63},[57,75783,75784],{"class":59,"line":2850},[57,75785,2673],{"emptyLinePlaceholder":350},[57,75787,75788],{"class":59,"line":2864},[57,75789,75790],{"class":63},"    \u002F\u002F ?类似于0次或一次\n",[57,75792,75793,75795,75797,75799,75801,75803,75806,75808,75810,75812,75814,75816,75818,75820],{"class":59,"line":2872},[57,75794,73950],{"class":140},[57,75796,58444],{"class":70},[57,75798,168],{"class":140},[57,75800,1000],{"class":74},[57,75802,1381],{"class":136},[57,75804,75805],{"class":48174},"哈？",[57,75807,719],{"class":136},[57,75809,1000],{"class":74},[57,75811,974],{"class":140},[57,75813,75442],{"class":70},[57,75815,168],{"class":140},[57,75817,74425],{"class":74},[57,75819,75506],{"class":140},[57,75821,75453],{"class":63},[57,75823,75824,75826,75828,75830,75832,75834,75836,75839,75841,75843,75845,75847,75849,75851],{"class":59,"line":2877},[57,75825,73950],{"class":140},[57,75827,58444],{"class":70},[57,75829,168],{"class":140},[57,75831,1000],{"class":74},[57,75833,1381],{"class":136},[57,75835,75435],{"class":48174},[57,75837,75838],{"class":136},"?$",[57,75840,1000],{"class":74},[57,75842,974],{"class":140},[57,75844,75442],{"class":70},[57,75846,168],{"class":140},[57,75848,75476],{"class":74},[57,75850,75450],{"class":140},[57,75852,75576],{"class":63},[57,75854,75855,75857,75859,75861,75863,75865,75867,75869,75871,75873,75875,75877,75879,75881],{"class":59,"line":2883},[57,75856,73950],{"class":140},[57,75858,58444],{"class":70},[57,75860,168],{"class":140},[57,75862,1000],{"class":74},[57,75864,1381],{"class":136},[57,75866,75435],{"class":48174},[57,75868,75838],{"class":136},[57,75870,1000],{"class":74},[57,75872,974],{"class":140},[57,75874,75442],{"class":70},[57,75876,168],{"class":140},[57,75878,75644],{"class":74},[57,75880,75450],{"class":140},[57,75882,75649],{"class":63},[57,75884,75885,75887,75889,75891,75893,75895,75897,75899,75901,75903,75905,75907,75909,75911],{"class":59,"line":2889},[57,75886,73950],{"class":140},[57,75888,58444],{"class":70},[57,75890,168],{"class":140},[57,75892,1000],{"class":74},[57,75894,1381],{"class":136},[57,75896,75435],{"class":48174},[57,75898,75838],{"class":136},[57,75900,1000],{"class":74},[57,75902,974],{"class":140},[57,75904,75442],{"class":70},[57,75906,168],{"class":140},[57,75908,75676],{"class":74},[57,75910,75450],{"class":140},[57,75912,75576],{"class":63},[57,75914,75915],{"class":59,"line":2894},[57,75916,2673],{"emptyLinePlaceholder":350},[57,75918,75919],{"class":59,"line":8221},[57,75920,75921],{"class":63},"    \u002F\u002F {n}写几，就必须出现几次\n",[57,75923,75924,75926,75928,75930,75932,75934,75936,75939,75941,75943,75945,75947,75950,75953],{"class":59,"line":8245},[57,75925,73950],{"class":140},[57,75927,58444],{"class":70},[57,75929,168],{"class":140},[57,75931,1000],{"class":74},[57,75933,1381],{"class":136},[57,75935,75435],{"class":48174},[57,75937,75938],{"class":136},"{4}$",[57,75940,1000],{"class":74},[57,75942,974],{"class":140},[57,75944,75442],{"class":70},[57,75946,168],{"class":140},[57,75948,75949],{"class":74},"'哈哈哈哈'",[57,75951,75952],{"class":140},")) ",[57,75954,75453],{"class":63},[57,75956,75957],{"class":59,"line":8250},[57,75958,2673],{"emptyLinePlaceholder":350},[57,75960,75961],{"class":59,"line":8256},[57,75962,75963],{"class":63},"    \u002F\u002F {n,}大于等于n次\n",[57,75965,75966,75968,75970,75972,75974,75976,75978,75981,75983,75985,75987,75989,75991,75993],{"class":59,"line":8283},[57,75967,73950],{"class":140},[57,75969,58444],{"class":70},[57,75971,168],{"class":140},[57,75973,1000],{"class":74},[57,75975,1381],{"class":136},[57,75977,75435],{"class":48174},[57,75979,75980],{"class":136},"{4,}$",[57,75982,1000],{"class":74},[57,75984,974],{"class":140},[57,75986,75442],{"class":70},[57,75988,168],{"class":140},[57,75990,75949],{"class":74},[57,75992,75952],{"class":140},[57,75994,75453],{"class":63},[57,75996,75997,75999,76001,76003,76005,76007,76009,76011,76013,76015,76017,76019,76022,76024],{"class":59,"line":8288},[57,75998,73950],{"class":140},[57,76000,58444],{"class":70},[57,76002,168],{"class":140},[57,76004,1000],{"class":74},[57,76006,1381],{"class":136},[57,76008,75435],{"class":48174},[57,76010,75980],{"class":136},[57,76012,1000],{"class":74},[57,76014,974],{"class":140},[57,76016,75442],{"class":70},[57,76018,168],{"class":140},[57,76020,76021],{"class":74},"'哈哈哈哈哈'",[57,76023,75952],{"class":140},[57,76025,75453],{"class":63},[57,76027,76028],{"class":59,"line":8294},[57,76029,2673],{"emptyLinePlaceholder":350},[57,76031,76032],{"class":59,"line":8306},[57,76033,76034],{"class":63},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[57,76036,76037,76039,76041,76043,76045,76047,76049,76052,76054,76056,76058,76060,76062,76064],{"class":59,"line":8318},[57,76038,73950],{"class":140},[57,76040,58444],{"class":70},[57,76042,168],{"class":140},[57,76044,1000],{"class":74},[57,76046,1381],{"class":136},[57,76048,75435],{"class":48174},[57,76050,76051],{"class":136},"{4,6}$",[57,76053,1000],{"class":74},[57,76055,974],{"class":140},[57,76057,75442],{"class":70},[57,76059,168],{"class":140},[57,76061,75949],{"class":74},[57,76063,75952],{"class":140},[57,76065,75453],{"class":63},[57,76067,76068,76070,76072,76074,76076,76078,76080,76082,76084,76086,76088,76090,76092,76094],{"class":59,"line":8330},[57,76069,73950],{"class":140},[57,76071,58444],{"class":70},[57,76073,168],{"class":140},[57,76075,1000],{"class":74},[57,76077,1381],{"class":136},[57,76079,75435],{"class":48174},[57,76081,76051],{"class":136},[57,76083,1000],{"class":74},[57,76085,974],{"class":140},[57,76087,75442],{"class":70},[57,76089,168],{"class":140},[57,76091,76021],{"class":74},[57,76093,75952],{"class":140},[57,76095,75453],{"class":63},[57,76097,76098,76100,76102,76104,76106,76108,76110,76112,76114,76116,76118,76120,76123,76125],{"class":59,"line":9989},[57,76099,73950],{"class":140},[57,76101,58444],{"class":70},[57,76103,168],{"class":140},[57,76105,1000],{"class":74},[57,76107,1381],{"class":136},[57,76109,75435],{"class":48174},[57,76111,76051],{"class":136},[57,76113,1000],{"class":74},[57,76115,974],{"class":140},[57,76117,75442],{"class":70},[57,76119,168],{"class":140},[57,76121,76122],{"class":74},"'哈哈哈哈哈哈哈'",[57,76124,75952],{"class":140},[57,76126,75576],{"class":63},[57,76128,76129],{"class":59,"line":10014},[57,76130,2673],{"emptyLinePlaceholder":350},[57,76132,76133],{"class":59,"line":10037},[57,76134,76135],{"class":63},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[57,76137,76138,76140,76142,76144,76146,76148,76151,76153,76155,76157,76159,76161,76164,76166],{"class":59,"line":10061},[57,76139,73950],{"class":140},[57,76141,58444],{"class":70},[57,76143,168],{"class":140},[57,76145,1000],{"class":74},[57,76147,1381],{"class":136},[57,76149,76150],{"class":81},"[abc]",[57,76152,719],{"class":136},[57,76154,1000],{"class":74},[57,76156,974],{"class":140},[57,76158,75442],{"class":70},[57,76160,168],{"class":140},[57,76162,76163],{"class":74},"'a'",[57,76165,75450],{"class":140},[57,76167,75453],{"class":63},[57,76169,76170,76172,76174,76176,76178,76180,76182,76184,76186,76188,76190,76192,76195,76197],{"class":59,"line":10066},[57,76171,73950],{"class":140},[57,76173,58444],{"class":70},[57,76175,168],{"class":140},[57,76177,1000],{"class":74},[57,76179,1381],{"class":136},[57,76181,76150],{"class":81},[57,76183,719],{"class":136},[57,76185,1000],{"class":74},[57,76187,974],{"class":140},[57,76189,75442],{"class":70},[57,76191,168],{"class":140},[57,76193,76194],{"class":74},"'b'",[57,76196,75450],{"class":140},[57,76198,75453],{"class":63},[57,76200,76201,76203,76205,76207,76209,76211,76213,76215,76217,76219,76221,76223,76226,76228],{"class":59,"line":10071},[57,76202,73950],{"class":140},[57,76204,58444],{"class":70},[57,76206,168],{"class":140},[57,76208,1000],{"class":74},[57,76210,1381],{"class":136},[57,76212,76150],{"class":81},[57,76214,719],{"class":136},[57,76216,1000],{"class":74},[57,76218,974],{"class":140},[57,76220,75442],{"class":70},[57,76222,168],{"class":140},[57,76224,76225],{"class":74},"'c'",[57,76227,75450],{"class":140},[57,76229,75453],{"class":63},[57,76231,76232,76234,76236,76238,76240,76242,76244,76246,76248,76250,76253,76255],{"class":59,"line":10076},[57,76233,73950],{"class":140},[57,76235,58444],{"class":70},[57,76237,168],{"class":140},[57,76239,1000],{"class":74},[57,76241,76150],{"class":81},[57,76243,1000],{"class":74},[57,76245,974],{"class":140},[57,76247,75442],{"class":70},[57,76249,168],{"class":140},[57,76251,76252],{"class":74},"'ab'",[57,76254,75450],{"class":140},[57,76256,75453],{"class":63},[57,76258,76259,76261,76263,76265,76267,76269,76271,76273,76275,76277,76279,76281,76283,76285],{"class":59,"line":10085},[57,76260,73950],{"class":140},[57,76262,58444],{"class":70},[57,76264,168],{"class":140},[57,76266,1000],{"class":74},[57,76268,1381],{"class":136},[57,76270,76150],{"class":81},[57,76272,719],{"class":136},[57,76274,1000],{"class":74},[57,76276,974],{"class":140},[57,76278,75442],{"class":70},[57,76280,168],{"class":140},[57,76282,76252],{"class":74},[57,76284,75450],{"class":140},[57,76286,76287],{"class":63},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[57,76289,76290,76292,76294,76296,76298,76300,76302,76305,76307,76309,76311,76313,76315,76317],{"class":59,"line":10090},[57,76291,73950],{"class":140},[57,76293,58444],{"class":70},[57,76295,168],{"class":140},[57,76297,1000],{"class":74},[57,76299,1381],{"class":136},[57,76301,76150],{"class":81},[57,76303,76304],{"class":136},"{2}$",[57,76306,1000],{"class":74},[57,76308,974],{"class":140},[57,76310,75442],{"class":70},[57,76312,168],{"class":140},[57,76314,76252],{"class":74},[57,76316,75450],{"class":140},[57,76318,76319],{"class":63},"\u002F\u002Ftrue   可以选两个\n",[57,76321,76322,76324,76326,76328,76330,76332,76335,76337,76339,76341,76343,76345,76348,76350],{"class":59,"line":10096},[57,76323,73950],{"class":140},[57,76325,58444],{"class":70},[57,76327,168],{"class":140},[57,76329,1000],{"class":74},[57,76331,1381],{"class":136},[57,76333,76334],{"class":81},"[a-z]",[57,76336,719],{"class":136},[57,76338,1000],{"class":74},[57,76340,974],{"class":140},[57,76342,75442],{"class":70},[57,76344,168],{"class":140},[57,76346,76347],{"class":74},"'p'",[57,76349,75506],{"class":140},[57,76351,76352],{"class":63},"\u002F\u002Ftrue   依然只能选一个\n",[57,76354,76355,76357,76359,76361,76363,76365,76368,76370,76372,76374,76376,76378,76380,76382],{"class":59,"line":10117},[57,76356,73950],{"class":140},[57,76358,58444],{"class":70},[57,76360,168],{"class":140},[57,76362,1000],{"class":74},[57,76364,1381],{"class":136},[57,76366,76367],{"class":81},"[A-Z]",[57,76369,719],{"class":136},[57,76371,1000],{"class":74},[57,76373,974],{"class":140},[57,76375,75442],{"class":70},[57,76377,168],{"class":140},[57,76379,76347],{"class":74},[57,76381,75506],{"class":140},[57,76383,75576],{"class":63},[57,76385,76386,76388,76390,76392,76394,76396,76398,76400,76402,76404,76406,76408,76411,76413],{"class":59,"line":10123},[57,76387,73950],{"class":140},[57,76389,58444],{"class":70},[57,76391,168],{"class":140},[57,76393,1000],{"class":74},[57,76395,1381],{"class":136},[57,76397,76367],{"class":81},[57,76399,719],{"class":136},[57,76401,1000],{"class":74},[57,76403,974],{"class":140},[57,76405,75442],{"class":70},[57,76407,168],{"class":140},[57,76409,76410],{"class":74},"'P'",[57,76412,75506],{"class":140},[57,76414,75453],{"class":63},[57,76416,76417,76419,76421,76423,76425,76427,76430,76432,76434,76436,76438,76440,76443,76445],{"class":59,"line":10137},[57,76418,73950],{"class":140},[57,76420,58444],{"class":70},[57,76422,168],{"class":140},[57,76424,1000],{"class":74},[57,76426,1381],{"class":136},[57,76428,76429],{"class":81},"[0-9]",[57,76431,719],{"class":136},[57,76433,1000],{"class":74},[57,76435,974],{"class":140},[57,76437,75442],{"class":70},[57,76439,168],{"class":140},[57,76441,76442],{"class":74},"'0'",[57,76444,75506],{"class":140},[57,76446,75453],{"class":63},[57,76448,76449,76451,76453,76455,76457,76459,76462,76464,76466,76468,76470,76472,76474,76476],{"class":59,"line":10143},[57,76450,73950],{"class":140},[57,76452,58444],{"class":70},[57,76454,168],{"class":140},[57,76456,1000],{"class":74},[57,76458,1381],{"class":136},[57,76460,76461],{"class":81},"[a-zA-Z0-9]",[57,76463,719],{"class":136},[57,76465,1000],{"class":74},[57,76467,974],{"class":140},[57,76469,75442],{"class":70},[57,76471,168],{"class":140},[57,76473,76347],{"class":74},[57,76475,75450],{"class":140},[57,76477,75453],{"class":63},[57,76479,76480,76482,76484],{"class":59,"line":10170},[57,76481,52614],{"class":140},[57,76483,52010],{"class":51497},[57,76485,51504],{"class":140},[57,76487,76488,76490,76492],{"class":59,"line":10179},[57,76489,51982],{"class":140},[57,76491,51997],{"class":51497},[57,76493,51504],{"class":140},[57,76495,76496],{"class":59,"line":10185},[57,76497,2673],{"emptyLinePlaceholder":350},[57,76499,76500,76502,76504],{"class":59,"line":10193},[57,76501,51982],{"class":140},[57,76503,50832],{"class":51497},[57,76505,51504],{"class":140},[22270,76507,76509],{"id":76508},"_3624-修饰符","3.6.2.4 修饰符",[14,76511,76512],{},[44,76513],{"alt":46,"src":76514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,76516,76517],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,76519,76520],{},[44,76521],{"alt":46,"src":76522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[49,76524,76526],{"className":50830,"code":76525,"language":50832,"meta":46,"style":46},"\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",[28,76527,76528,76538,76552,76560,76574,76594,76606,76614,76622,76630,76662,76693,76698,76730,76741,76774,76783,76791,76799],{"__ignoreMap":46},[57,76529,76530,76532,76534,76536],{"class":59,"line":60},[57,76531,51494],{"class":140},[57,76533,51498],{"class":51497},[57,76535,51501],{"class":70},[57,76537,51504],{"class":140},[57,76539,76540,76542,76544,76546,76548,76550],{"class":59,"line":67},[57,76541,1326],{"class":140},[57,76543,50832],{"class":51497},[57,76545,51513],{"class":70},[57,76547,156],{"class":140},[57,76549,51518],{"class":74},[57,76551,51504],{"class":140},[57,76553,76554,76556,76558],{"class":59,"line":144},[57,76555,1326],{"class":140},[57,76557,51531],{"class":51497},[57,76559,51504],{"class":140},[57,76561,76562,76564,76566,76568,76570,76572],{"class":59,"line":150},[57,76563,52341],{"class":140},[57,76565,51541],{"class":51497},[57,76567,51544],{"class":70},[57,76569,156],{"class":140},[57,76571,51549],{"class":74},[57,76573,51504],{"class":140},[57,76575,76576,76578,76580,76582,76584,76586,76588,76590,76592],{"class":59,"line":162},[57,76577,52341],{"class":140},[57,76579,51541],{"class":51497},[57,76581,15192],{"class":70},[57,76583,156],{"class":140},[57,76585,51588],{"class":74},[57,76587,51568],{"class":70},[57,76589,156],{"class":140},[57,76591,51595],{"class":74},[57,76593,51504],{"class":140},[57,76595,76596,76598,76600,76602,76604],{"class":59,"line":180},[57,76597,52341],{"class":140},[57,76599,51604],{"class":51497},[57,76601,51607],{"class":140},[57,76603,51604],{"class":51497},[57,76605,51504],{"class":140},[57,76607,76608,76610,76612],{"class":59,"line":186},[57,76609,51982],{"class":140},[57,76611,51531],{"class":51497},[57,76613,51504],{"class":140},[57,76615,76616,76618,76620],{"class":59,"line":197},[57,76617,1326],{"class":140},[57,76619,51997],{"class":51497},[57,76621,51504],{"class":140},[57,76623,76624,76626,76628],{"class":59,"line":241},[57,76625,52341],{"class":140},[57,76627,52010],{"class":51497},[57,76629,51504],{"class":140},[57,76631,76632,76634,76636,76638,76640,76642,76645,76647,76649,76651,76653,76655,76658,76660],{"class":59,"line":249},[57,76633,73950],{"class":140},[57,76635,58444],{"class":70},[57,76637,168],{"class":140},[57,76639,1000],{"class":74},[57,76641,1381],{"class":136},[57,76643,76644],{"class":48174},"java",[57,76646,719],{"class":136},[57,76648,1000],{"class":74},[57,76650,974],{"class":140},[57,76652,75442],{"class":70},[57,76654,168],{"class":140},[57,76656,76657],{"class":74},"'java'",[57,76659,75952],{"class":140},[57,76661,75453],{"class":63},[57,76663,76664,76666,76668,76670,76672,76674,76676,76678,76680,76682,76684,76686,76689,76691],{"class":59,"line":262},[57,76665,73950],{"class":140},[57,76667,58444],{"class":70},[57,76669,168],{"class":140},[57,76671,1000],{"class":74},[57,76673,1381],{"class":136},[57,76675,76644],{"class":48174},[57,76677,719],{"class":136},[57,76679,1000],{"class":74},[57,76681,974],{"class":140},[57,76683,75442],{"class":70},[57,76685,168],{"class":140},[57,76687,76688],{"class":74},"'Java'",[57,76690,75952],{"class":140},[57,76692,75576],{"class":63},[57,76694,76695],{"class":59,"line":281},[57,76696,76697],{"class":63},"    \u002F\u002F 不区分大小写、\n",[57,76699,76700,76702,76704,76706,76708,76710,76712,76714,76716,76718,76720,76722,76724,76726,76728],{"class":59,"line":287},[57,76701,73950],{"class":140},[57,76703,58444],{"class":70},[57,76705,168],{"class":140},[57,76707,1000],{"class":74},[57,76709,1381],{"class":136},[57,76711,76644],{"class":48174},[57,76713,719],{"class":136},[57,76715,1000],{"class":74},[57,76717,857],{"class":136},[57,76719,974],{"class":140},[57,76721,75442],{"class":70},[57,76723,168],{"class":140},[57,76725,76688],{"class":74},[57,76727,75952],{"class":140},[57,76729,75453],{"class":63},[57,76731,76732,76734,76736,76738],{"class":59,"line":298},[57,76733,11494],{"class":136},[57,76735,74116],{"class":81},[57,76737,13837],{"class":136},[57,76739,76740],{"class":74}," 'java是一门编程语言，学完java工资很高'\n",[57,76742,76743,76745,76748,76750,76753,76756,76758,76760,76762,76764,76767,76769,76772],{"class":59,"line":311},[57,76744,11494],{"class":136},[57,76746,76747],{"class":81}," result",[57,76749,13837],{"class":136},[57,76751,76752],{"class":140}," str.",[57,76754,76755],{"class":70},"replace",[57,76757,168],{"class":140},[57,76759,1000],{"class":74},[57,76761,76644],{"class":48174},[57,76763,1000],{"class":74},[57,76765,76766],{"class":136},"ig",[57,76768,12708],{"class":140},[57,76770,76771],{"class":74},"'前端'",[57,76773,238],{"class":140},[57,76775,76776,76778,76780],{"class":59,"line":322},[57,76777,73950],{"class":140},[57,76779,58444],{"class":70},[57,76781,76782],{"class":140},"(result)\n",[57,76784,76785,76787,76789],{"class":59,"line":1929},[57,76786,52614],{"class":140},[57,76788,52010],{"class":51497},[57,76790,51504],{"class":140},[57,76792,76793,76795,76797],{"class":59,"line":1950},[57,76794,51982],{"class":140},[57,76796,51997],{"class":51497},[57,76798,51504],{"class":140},[57,76800,76801,76803,76805],{"class":59,"line":1955},[57,76802,51982],{"class":140},[57,76804,50832],{"class":51497},[57,76806,51504],{"class":140},[342,76808,76809],{},"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":46,"searchDepth":67,"depth":67,"links":76811},[76812,76822,76834,76851,76858,76866],{"id":53557,"depth":67,"text":53558,"children":76813},[76814,76815,76816,76817,76818,76819,76820,76821],{"id":53561,"depth":144,"text":53562},{"id":53594,"depth":144,"text":53595},{"id":53633,"depth":144,"text":53634},{"id":53791,"depth":144,"text":53792},{"id":53839,"depth":144,"text":53840},{"id":53976,"depth":144,"text":53977},{"id":54298,"depth":144,"text":54299},{"id":57286,"depth":144,"text":57287},{"id":57314,"depth":67,"text":57315,"children":76823},[76824,76825,76826,76827,76828,76829,76830,76831,76832,76833],{"id":57318,"depth":144,"text":57319},{"id":57341,"depth":144,"text":57342},{"id":58256,"depth":144,"text":58257},{"id":58946,"depth":144,"text":58947},{"id":59228,"depth":144,"text":59229},{"id":63389,"depth":144,"text":63390},{"id":63559,"depth":144,"text":63560},{"id":63687,"depth":144,"text":63688},{"id":63712,"depth":144,"text":63713},{"id":65101,"depth":144,"text":65102},{"id":66254,"depth":67,"text":66255,"children":76835},[76836,76837,76838,76839,76840,76841,76842,76843,76844,76845,76846,76847,76848,76849,76850],{"id":66258,"depth":144,"text":66259},{"id":66912,"depth":144,"text":66913},{"id":68607,"depth":144,"text":68608},{"id":68648,"depth":144,"text":68649},{"id":68690,"depth":144,"text":68691},{"id":68704,"depth":144,"text":68705},{"id":68753,"depth":144,"text":68754},{"id":68765,"depth":144,"text":68766},{"id":68780,"depth":144,"text":68781},{"id":68816,"depth":144,"text":68817},{"id":68897,"depth":144,"text":68898},{"id":69025,"depth":144,"text":69026},{"id":69037,"depth":144,"text":69038},{"id":69056,"depth":144,"text":69057},{"id":71167,"depth":144,"text":71168},{"id":71186,"depth":67,"text":71187,"children":76852},[76853,76854,76855,76856,76857],{"id":71207,"depth":144,"text":71208},{"id":71227,"depth":144,"text":71228},{"id":71276,"depth":144,"text":71277},{"id":71401,"depth":144,"text":71402},{"id":71582,"depth":144,"text":71583},{"id":71600,"depth":67,"text":71601,"children":76859},[76860,76861,76862,76863,76864,76865],{"id":71615,"depth":144,"text":71616},{"id":71674,"depth":144,"text":71675},{"id":71698,"depth":144,"text":71699},{"id":72018,"depth":144,"text":72019},{"id":72050,"depth":144,"text":72051},{"id":72073,"depth":144,"text":72074},{"id":75141,"depth":67,"text":75142,"children":76867},[76868,76869],{"id":75175,"depth":144,"text":75176},{"id":75214,"depth":144,"text":75215},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53529,"description":347},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76876,"title":76877,"body":76878,"description":347,"extension":348,"meta":93015,"navigation":350,"path":93016,"seo":93017,"stem":93018,"__hash__":93019},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76879,"toc":92951},[76880,76883,76886,76890,76894,76899,76904,76915,76919,76924,76927,76931,76934,76939,76943,76947,76950,76955,76958,76962,76965,76973,76976,76980,76985,76990,76993,76997,77002,77007,77010,77014,77019,77022,77027,77030,77035,77038,77043,77048,77051,77054,77058,77063,77068,77071,77075,77079,77082,77085,77088,77092,77096,77101,77106,77109,77113,77118,77123,77126,77129,77132,77135,77138,77141,77144,77147,77150,77155,77159,77164,77169,77172,77175,77178,77181,77184,77187,77190,77193,77197,77201,77204,77207,77210,77215,77217,77220,77223,77226,77229,77232,77235,77238,77241,77244,77247,77250,77253,77256,77261,77266,77271,77274,77278,77281,77286,77290,77292,77303,77308,77409,77412,77415,77418,77421,77424,77427,77430,77433,77435,77438,77441,77444,77447,77450,77452,77455,77458,77461,77464,77467,77470,77472,77475,77477,77479,77482,77486,77490,77493,77496,77499,77502,77505,77508,77511,77514,77517,77522,77642,77645,77648,77653,77656,77659,77662,77665,77670,77673,77676,77679,77682,77687,77690,77790,77855,77929,77933,77936,77939,77943,77946,77960,77989,77992,77995,77998,78001,78004,78007,78010,78012,78015,78018,78021,78024,78028,78033,78037,78042,78117,78120,78303,78306,78309,78312,78315,78318,78320,78323,78326,78329,78332,78335,78338,78340,78344,78347,78352,78355,78358,78361,78364,78366,78371,78374,78377,78380,78383,78385,78390,78393,78396,78398,78400,78403,78407,78410,78413,78418,78421,78424,78427,78477,78482,78486,78491,78494,78563,78566,78575,78579,78584,78587,78590,78598,78601,78618,80420,80424,80428,80433,80436,80440,80446,80452,80604,80609,80614,80617,80620,80623,80626,80629,80632,80635,80638,80641,80644,80647,80650,80655,80659,80662,80673,80677,80682,80685,80688,80691,80694,80697,80699,80702,80705,80708,80711,80713,80730,80733,80737,80740,80745,80750,80753,80756,80760,80763,80766,80775,80778,80782,80785,80790,80795,80862,80866,80869,80872,80877,80882,80968,80973,80977,80980,80983,80998,81001,81006,81010,81015,81124,81127,81138,81288,81292,81297,81406,81410,81415,81420,81425,81428,81435,81455,81491,81655,81660,81663,81668,81675,81678,81681,81684,81743,81799,81855,81859,81864,82179,82182,82186,82189,82194,82303,82308,82312,82317,82321,82392,82396,82398,82401,82404,82442,82718,82722,82739,82805,82839,82843,82846,82851,82880,82887,82896,82901,82916,82921,82930,82933,83070,83074,83136,83140,83145,83390,83394,83399,83402,83405,83408,83411,83415,83420,85001,85005,85009,85015,85018,85023,85027,85030,85035,85038,85049,85053,85058,85062,85067,85072,85075,85080,85084,85088,85091,85096,85101,85104,85107,85110,85232,85237,85339,85342,85345,85349,85354,85526,85531,85535,85538,85543,85609,85614,85617,85748,85751,85756,85759,85762,85853,85858,85861,85864,85867,85870,85875,85880,85883,85888,85893,85898,85902,85905,85908,85913,85918,85923,85928,85982,85985,85988,85993,85996,85999,86004,86009,86014,86018,86023,86037,86042,86045,86050,86054,86059,86064,86069,86074,86079,86084,86089,86094,86097,86101,86106,86109,86112,86115,86120,86125,86128,86131,86135,86138,86141,86146,86151,86156,86161,86164,86169,86174,86235,86240,86243,86248,87489,87494,87498,87502,87507,87510,87515,87520,87523,87528,87530,87535,87539,87542,87545,87556,87560,87565,87570,87625,87630,87635,87640,87851,87856,87860,87865,87868,87870,87873,87876,88323,88328,88335,88341,88344,88347,88611,88616,88620,88885,88890,88894,88899,88904,88909,88914,89245,89248,89253,89258,89261,89265,89269,89274,89279,89284,89289,89294,89299,89303,89306,89311,89316,89319,89393,89398,89403,89408,89410,89413,89783,89788,89793,89798,89801,89804,89906,89911,89916,90019,90023,90028,90032,90036,90041,90046,90049,90054,90057,90060,90453,90458,90461,90464,90467,90470,90990,90994,90999,91004,91009,91012,91017,91020,91023,91405,91410,91412,91414,91417,91420,91932,91936,91997,92000,92003,92006,92010,92013,92018,92023,92948],[10,76881,76877],{"id":76882},"_4js进阶",[14,76884,76885],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[365,76887,76889],{"id":76888},"_41-作用域","4.1 作用域",[394,76891,76893],{"id":76892},"_411-局部作用域","4.1.1 局部作用域",[14,76895,76896],{},[44,76897],{"alt":46,"src":76898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,76900,76901],{},[44,76902],{"alt":46,"src":76903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1422,76905,76906,76909,76912],{},[380,76907,76908],{},"函数作用域在函数内部",[380,76910,76911],{},"块级作用域在{}",[380,76913,76914],{},"对象的那个{}不是作用域，不是块作用域",[394,76916,76918],{"id":76917},"_412-全局作用域","4.1.2 全局作用域",[14,76920,76921],{},[44,76922],{"alt":46,"src":76923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,76925,76926],{},"window.a=10不要这样写",[394,76928,76930],{"id":76929},"_413-作用域链","4.1.3 作用域链",[14,76932,76933],{},"变量查找机制",[14,76935,76936],{},[44,76937],{"alt":46,"src":76938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[365,76940,76942],{"id":76941},"_42-垃圾回收机制","4.2 垃圾回收机制",[394,76944,76946],{"id":76945},"_421-大体介绍","4.2.1 大体介绍",[14,76948,76949],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,76951,76952],{},[44,76953],{"alt":46,"src":76954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,76956,76957],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[394,76959,76961],{"id":76960},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,76963,76964],{},"堆栈空间分配区别：",[377,76966,76967,76970],{},[380,76968,76969],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[380,76971,76972],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,76974,76975],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22270,76977,76979],{"id":76978},"_4221-引用计数","4.2.2.1 引用计数",[14,76981,76982],{},[44,76983],{"alt":46,"src":76984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,76986,76987],{},[44,76988],{"alt":46,"src":76989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,76991,76992],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22270,76994,76996],{"id":76995},"_4222-标记清除法","4.2.2.2 标记清除法",[14,76998,76999],{},[44,77000],{"alt":46,"src":77001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,77003,77004],{},[44,77005],{"alt":46,"src":77006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,77008,77009],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[365,77011,77013],{"id":77012},"_43-闭包","4.3 闭包",[14,77015,77016],{},[44,77017],{"alt":46,"src":77018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,77020,77021],{},"闭包：内层函数+外层函数的变量",[14,77023,77024],{},[44,77025],{"alt":46,"src":77026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,77028,77029],{},"closure就是闭包",[14,77031,77032],{},[44,77033],{"alt":46,"src":77034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,77036,77037],{},"内层函数必须包含外层函数的变量才是闭包",[14,77039,77040],{},[44,77041],{"alt":46,"src":77042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,77044,77045],{},[44,77046],{"alt":46,"src":77047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,77049,77050],{},"闭包可能会引起内存泄漏",[14,77052,77053],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[365,77055,77057],{"id":77056},"_44-变量提升","4.4 变量提升",[14,77059,77060],{},[44,77061],{"alt":46,"src":77062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,77064,77065],{},[44,77066],{"alt":46,"src":77067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,77069,77070],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[365,77072,77074],{"id":77073},"_45-函数进阶","4.5 函数进阶",[394,77076,77078],{"id":77077},"_451-函数提升","4.5.1 函数提升",[14,77080,77081],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,77083,77084],{},"只提升函数声明，不提升函数调用",[52010,77086,77087],{},"\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",[394,77089,77091],{"id":77090},"_452-函数参数","4.5.2 函数参数",[22270,77093,77095],{"id":77094},"_4521-动态参数","4.5.2.1 动态参数",[14,77097,77098],{},[44,77099],{"alt":46,"src":77100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,77102,77103],{},[44,77104],{"alt":46,"src":77105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,77107,77108],{},"箭头函数里边没有arguments",[22270,77110,77112],{"id":77111},"_4522-剩余参数","4.5.2.2 剩余参数",[14,77114,77115],{},[44,77116],{"alt":46,"src":77117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,77119,77120],{},[44,77121],{"alt":46,"src":77122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,77124,77125],{},"剩余参数使用的时候不需要写...",[14,77127,77128],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,77130,77131],{},"  function getSum(a,b,...arr) {",[14,77133,77134],{},"  console.log(11)",[14,77136,77137],{},"  }",[14,77139,77140],{},"  getSum(1,2,3,4)",[14,77142,77143],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,77145,77146],{},"  getSum(1,2)",[14,77148,77149],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,77151,77152],{},[44,77153],{"alt":46,"src":77154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22270,77156,77158],{"id":77157},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,77160,77161],{},[44,77162],{"alt":46,"src":77163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,77165,77166],{},[44,77167],{"alt":46,"src":77168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,77170,77171],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,77173,77174],{},"展开运算符可以用于数组之间的合并：",[14,77176,77177],{},"const arr1 = [1, 2, 3]",[14,77179,77180],{},"const arr2 = [3, 4, 5]",[14,77182,77183],{},"const arr = [...arr1, ...arr2]",[14,77185,77186],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,77188,77189],{},"剩余参数：函数参数使用，得到真数组",[14,77191,77192],{},"展开运算符：数组中使用，数组展开",[394,77194,77196],{"id":77195},"_453-箭头函数","4.5.3 箭头函数",[22270,77198,77200],{"id":77199},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,77202,77203],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,77205,77206],{},"它不是万能的！！！",[14,77208,77209],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,77211,77212],{},[44,77213],{"alt":46,"src":77214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,77216,454],{},[14,77218,77219],{},"① 只有一个形参的时候，可以省略小括号：",[14,77221,77222],{},"const fn=x=>{console.log(x)}",[14,77224,77225],{},"② 只有一行代码时可以省略大括号：",[14,77227,77228],{},"const fn=x=>console.log(11)",[14,77230,77231],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,77233,77234],{},"const fn=x=>x+x",[14,77236,77237],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,77239,77240],{},"⑤ 阻止表单默认提交：",[14,77242,77243],{},"const form = document.querySelector('form')",[14,77245,77246],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,77248,77249],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,77251,77252],{},"const fn=uname=>({uname:uname})",[14,77254,77255],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,77257,77258],{},[44,77259],{"alt":46,"src":77260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,77262,77263],{},[44,77264],{"alt":46,"src":77265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,77267,77268],{},[44,77269],{"alt":46,"src":77270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,77272,77273],{},"一定不要忘记用()，有()就理解为自带return",[22270,77275,77277],{"id":77276},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,77279,77280],{},"箭头函数是没有动态参数的arguments",[14,77282,77283],{},[44,77284],{"alt":46,"src":77285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22270,77287,77289],{"id":77288},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,77291,11605],{},[377,77293,77294,77297,77300],{},[380,77295,77296],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[380,77298,77299],{},"事件回调函数使用箭头函数时，this 为全局的 window",[380,77301,77302],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,77304,77305],{},[44,77306],{"alt":46,"src":77307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[49,77309,77311],{"className":53264,"code":77310,"language":53266,"meta":46,"style":46},"  \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",[28,77312,77313,77321,77326,77331,77336,77341,77346,77350,77355,77359,77363,77368,77373,77378,77382,77386,77391,77396,77401],{"__ignoreMap":46},[57,77314,77315,77317,77319],{"class":59,"line":60},[57,77316,52341],{"class":140},[57,77318,52010],{"class":51497},[57,77320,51504],{"class":140},[57,77322,77323],{"class":59,"line":67},[57,77324,77325],{"class":140},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[57,77327,77328],{"class":59,"line":144},[57,77329,77330],{"class":140},"    console.log(this) \u002F\u002F指向window\n",[57,77332,77333],{"class":59,"line":150},[57,77334,77335],{"class":140},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[57,77337,77338],{"class":59,"line":162},[57,77339,77340],{"class":140},"    function fn() {\n",[57,77342,77343],{"class":59,"line":180},[57,77344,77345],{"class":140},"      console.log(this)  \u002F\u002F指向window\n",[57,77347,77348],{"class":59,"line":186},[57,77349,2460],{"class":140},[57,77351,77352],{"class":59,"line":197},[57,77353,77354],{"class":140},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[57,77356,77357],{"class":59,"line":241},[57,77358,2673],{"emptyLinePlaceholder":350},[57,77360,77361],{"class":59,"line":249},[57,77362,71720],{"class":140},[57,77364,77365],{"class":59,"line":262},[57,77366,77367],{"class":140},"      name: 'andy',\n",[57,77369,77370],{"class":59,"line":281},[57,77371,77372],{"class":140},"      sayHai: function () {\n",[57,77374,77375],{"class":59,"line":287},[57,77376,77377],{"class":140},"        console.log(this)\n",[57,77379,77380],{"class":59,"line":298},[57,77381,52595],{"class":140},[57,77383,77384],{"class":59,"line":311},[57,77385,2460],{"class":140},[57,77387,77388],{"class":59,"line":322},[57,77389,77390],{"class":140},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[57,77392,77393],{"class":59,"line":1929},[57,77394,77395],{"class":140},"    \u002F\u002F 2.箭头函数的this\n",[57,77397,77398],{"class":59,"line":1950},[57,77399,77400],{"class":140},"    const fn = () => console.log(this)\n",[57,77402,77403,77405,77407],{"class":59,"line":1955},[57,77404,52614],{"class":140},[57,77406,52010],{"class":51497},[57,77408,51504],{"class":140},[14,77410,77411],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,77413,77414],{},"const fn = () => console.log(this)",[14,77416,77417],{},"fn() \u002F\u002F指向window",[14,77419,77420],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,77422,77423],{},"①",[14,77425,77426],{},"const obj = {",[14,77428,77429],{},"uname: 'pink老师',",[14,77431,77432],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,77434,1362],{},[14,77436,77437],{},"调用对象里边的函数",[14,77439,77440],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,77442,77443],{},"obj.sayHai()",[14,77445,77446],{},"②",[14,77448,77449],{},"const obj1 = {",[14,77451,77429],{},[14,77453,77454],{},"sayHai: function () {",[14,77456,77457],{},"let i = 10",[14,77459,77460],{},"const count = () => {",[14,77462,77463],{},"console.log(this)",[14,77465,77466],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,77468,77469],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,77471,1362],{},[14,77473,77474],{},"count()",[14,77476,1362],{},[14,77478,1362],{},[14,77480,77481],{},"obj1.sayHai()",[365,77483,77485],{"id":77484},"_46-解构赋值","4.6 解构赋值",[394,77487,77489],{"id":77488},"_461-数组解构","4.6.1 数组解构",[14,77491,77492],{},"以前要是使用数组中的值的话：",[14,77494,77495],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,77497,77498],{},"const arr=[100,60,80]",[14,77500,77501],{},"const max=arr[0]",[14,77503,77504],{},"const min=arr[1]",[14,77506,77507],{},"const avg=arr[2]",[14,77509,77510],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,77512,77513],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,77515,77516],{},"这个写法就类似于上边的那种用很多const的方法",[14,77518,77519],{},[44,77520],{"alt":46,"src":77521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[49,77523,77525],{"className":50830,"code":77524,"language":50832,"meta":46,"style":46},"①变量之间交换值:\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",[28,77526,77527,77532,77537,77542,77547,77552,77556,77560,77565,77569,77574,77579,77583,77588,77593,77604,77614,77619,77624,77629,77633,77637],{"__ignoreMap":46},[57,77528,77529],{"class":59,"line":60},[57,77530,77531],{"class":140},"①变量之间交换值:\n",[57,77533,77534],{"class":59,"line":67},[57,77535,77536],{"class":140},"let a=1\n",[57,77538,77539],{"class":59,"line":144},[57,77540,77541],{"class":140},"let b=2;\n",[57,77543,77544],{"class":59,"line":150},[57,77545,77546],{"class":140},"必须加这行代码，不然就会报错\n",[57,77548,77549],{"class":59,"line":162},[57,77550,77551],{"class":140},"[b,a]=[a,b]\n",[57,77553,77554],{"class":59,"line":180},[57,77555,2673],{"emptyLinePlaceholder":350},[57,77557,77558],{"class":59,"line":186},[57,77559,2673],{"emptyLinePlaceholder":350},[57,77561,77562],{"class":59,"line":197},[57,77563,77564],{"class":140},"可以写成下面的方式：\n",[57,77566,77567],{"class":59,"line":241},[57,77568,77536],{"class":140},[57,77570,77571],{"class":59,"line":249},[57,77572,77573],{"class":140},"let b=2\n",[57,77575,77576],{"class":59,"line":262},[57,77577,77578],{"class":140},";[b,a]=[a,b]\n",[57,77580,77581],{"class":59,"line":281},[57,77582,2673],{"emptyLinePlaceholder":350},[57,77584,77585],{"class":59,"line":287},[57,77586,77587],{"class":140},"②排序\n",[57,77589,77590],{"class":59,"line":298},[57,77591,77592],{"class":140},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[57,77594,77595,77598,77601],{"class":59,"line":311},[57,77596,77597],{"class":140},"for (let i = 0; i ",[57,77599,1326],{"class":77600},"s7hpK",[57,77602,77603],{"class":140}," arr1.length; i++) {\n",[57,77605,77606,77609,77611],{"class":59,"line":322},[57,77607,77608],{"class":140},"   for (let j = 0; j ",[57,77610,1326],{"class":77600},[57,77612,77613],{"class":140}," arr1.length - 1; j++) {\n",[57,77615,77616],{"class":59,"line":1929},[57,77617,77618],{"class":140},"      if (arr1[j] > arr1[j + 1]) {\n",[57,77620,77621],{"class":59,"line":1950},[57,77622,77623],{"class":140},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[57,77625,77626],{"class":59,"line":1955},[57,77627,77628],{"class":140},"       }\n",[57,77630,77631],{"class":59,"line":1969},[57,77632,4582],{"class":140},[57,77634,77635],{"class":59,"line":1974},[57,77636,1847],{"class":140},[57,77638,77639],{"class":59,"line":2001},[57,77640,77641],{"class":140},"console.log(arr1)\n",[14,77643,77644],{},"数组解构的细节：",[14,77646,77647],{},"①变量多，单元值少",[14,77649,77650],{},[44,77651],{"alt":46,"src":77652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,77654,77655],{},"防止出现undefined的方法：",[14,77657,77658],{},"const [a=0,b=0] =[1]",[14,77660,77661],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,77663,77664],{},"②变量少，单元值多",[14,77666,77667],{},[44,77668],{"alt":46,"src":77669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,77671,77672],{},"此时可以使用剩余参数来接收多余的值",[14,77674,77675],{},"const [a,b,...c]=[1,2,3,4]",[14,77677,77678],{},"console.log(c) 输出[3,4]",[14,77680,77681],{},"③可以按需导入，忽略某些返回值",[14,77683,77684],{},[44,77685],{"alt":46,"src":77686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,77688,77689],{},"④支持多维数组的结构",[49,77691,77695],{"className":77692,"code":77693,"language":77694,"meta":46,"style":46},"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",[28,77696,77697,77725,77741,77756,77771],{"__ignoreMap":46},[57,77698,77699,77701,77703,77705,77707,77709,77711,77713,77716,77718,77720,77722],{"class":59,"line":60},[57,77700,7065],{"class":136},[57,77702,52030],{"class":140},[57,77704,156],{"class":136},[57,77706,52423],{"class":140},[57,77708,635],{"class":81},[57,77710,12708],{"class":140},[57,77712,498],{"class":81},[57,77714,77715],{"class":140},", [",[57,77717,270],{"class":81},[57,77719,12708],{"class":140},[57,77721,710],{"class":81},[57,77723,77724],{"class":140},"]]\n",[57,77726,77727,77730,77732,77734,77736,77738],{"class":59,"line":67},[57,77728,77729],{"class":140},"console.",[57,77731,58444],{"class":70},[57,77733,4124],{"class":140},[57,77735,226],{"class":81},[57,77737,4489],{"class":140},[57,77739,77740],{"class":63},"  \u002F\u002F1\n",[57,77742,77743,77745,77747,77749,77751,77753],{"class":59,"line":144},[57,77744,77729],{"class":140},[57,77746,58444],{"class":70},[57,77748,4124],{"class":140},[57,77750,635],{"class":81},[57,77752,4489],{"class":140},[57,77754,77755],{"class":63},"  \u002F\u002F2\n",[57,77757,77758,77760,77762,77764,77766,77768],{"class":59,"line":150},[57,77759,77729],{"class":140},[57,77761,58444],{"class":70},[57,77763,4124],{"class":140},[57,77765,498],{"class":81},[57,77767,4489],{"class":140},[57,77769,77770],{"class":63},"  \u002F\u002F[3,4]\n",[57,77772,77773,77775,77777,77779,77781,77783,77785,77787],{"class":59,"line":162},[57,77774,77729],{"class":140},[57,77776,58444],{"class":70},[57,77778,4124],{"class":140},[57,77780,498],{"class":81},[57,77782,5174],{"class":140},[57,77784,226],{"class":81},[57,77786,4489],{"class":140},[57,77788,77789],{"class":63},"  \u002F\u002F3\n",[49,77791,77793],{"className":77692,"code":77792,"language":77694,"meta":46,"style":46},"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",[28,77794,77795,77822,77833,77844],{"__ignoreMap":46},[57,77796,77797,77799,77802,77804,77806,77808,77810,77812,77814,77816,77818,77820],{"class":59,"line":60},[57,77798,7065],{"class":136},[57,77800,77801],{"class":140}," [a, b, c] ",[57,77803,156],{"class":136},[57,77805,52423],{"class":140},[57,77807,635],{"class":81},[57,77809,12708],{"class":140},[57,77811,498],{"class":81},[57,77813,77715],{"class":140},[57,77815,270],{"class":81},[57,77817,12708],{"class":140},[57,77819,710],{"class":81},[57,77821,77724],{"class":140},[57,77823,77824,77826,77828,77831],{"class":59,"line":67},[57,77825,77729],{"class":140},[57,77827,58444],{"class":70},[57,77829,77830],{"class":140},"(a)",[57,77832,77740],{"class":63},[57,77834,77835,77837,77839,77842],{"class":59,"line":144},[57,77836,77729],{"class":140},[57,77838,58444],{"class":70},[57,77840,77841],{"class":140},"(b)",[57,77843,77755],{"class":63},[57,77845,77846,77848,77850,77853],{"class":59,"line":150},[57,77847,77729],{"class":140},[57,77849,58444],{"class":70},[57,77851,77852],{"class":140},"(c)",[57,77854,77770],{"class":63},[49,77856,77858],{"className":77692,"code":77857,"language":77694,"meta":46,"style":46},"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",[28,77859,77860,77887,77897,77907,77917],{"__ignoreMap":46},[57,77861,77862,77864,77867,77869,77871,77873,77875,77877,77879,77881,77883,77885],{"class":59,"line":60},[57,77863,7065],{"class":136},[57,77865,77866],{"class":140}," [a, b, [c, d]] ",[57,77868,156],{"class":136},[57,77870,52423],{"class":140},[57,77872,635],{"class":81},[57,77874,12708],{"class":140},[57,77876,498],{"class":81},[57,77878,77715],{"class":140},[57,77880,270],{"class":81},[57,77882,12708],{"class":140},[57,77884,710],{"class":81},[57,77886,77724],{"class":140},[57,77888,77889,77891,77893,77895],{"class":59,"line":67},[57,77890,77729],{"class":140},[57,77892,58444],{"class":70},[57,77894,77830],{"class":140},[57,77896,77740],{"class":63},[57,77898,77899,77901,77903,77905],{"class":59,"line":144},[57,77900,77729],{"class":140},[57,77902,58444],{"class":70},[57,77904,77841],{"class":140},[57,77906,77755],{"class":63},[57,77908,77909,77911,77913,77915],{"class":59,"line":150},[57,77910,77729],{"class":140},[57,77912,58444],{"class":70},[57,77914,77852],{"class":140},[57,77916,77789],{"class":63},[57,77918,77919,77921,77923,77926],{"class":59,"line":162},[57,77920,77729],{"class":140},[57,77922,58444],{"class":70},[57,77924,77925],{"class":140},"(d)",[57,77927,77928],{"class":63},"  \u002F\u002F4\n",[394,77930,77932],{"id":77931},"_462-对象解构","4.6.2 对象解构",[14,77934,77935],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,77937,77938],{},"用的非常非常多！！！！！！",[22270,77940,77942],{"id":77941},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,77944,77945],{},"基本语法：",[377,77947,77948,77951,77954,77957],{},[380,77949,77950],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[380,77952,77953],{},"对象属性的值将被赋值给与属性名相同的变量",[380,77955,77956],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[380,77958,77959],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[49,77961,77963],{"className":50830,"code":77962,"language":50832,"meta":46,"style":46},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[28,77964,77965,77970,77975,77980,77984],{"__ignoreMap":46},[57,77966,77967],{"class":59,"line":60},[57,77968,77969],{"class":140},"const obj = {\n",[57,77971,77972],{"class":59,"line":67},[57,77973,77974],{"class":140},"   uname: 'pink老师',\n",[57,77976,77977],{"class":59,"line":144},[57,77978,77979],{"class":140},"   age: 18,\n",[57,77981,77982],{"class":59,"line":150},[57,77983,1847],{"class":140},[57,77985,77986],{"class":59,"line":162},[57,77987,77988],{"class":140},"const { uname, age } = obj\n",[14,77990,77991],{},"上方代码这样写等价于：",[14,77993,77994],{},"const uname等价于obj.uname",[14,77996,77997],{},"变量名可以重新改名：",[14,77999,78000],{},"const uname='red老师'",[14,78002,78003],{},"const user={",[14,78005,78006],{},"  uname:'pink老师',",[14,78008,78009],{},"  age:18",[14,78011,1362],{},[14,78013,78014],{},"const {uname,age}=user",[14,78016,78017],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,78019,78020],{},"const {旧变量名：新变量名}=对象",[14,78022,78023],{},"const {uname:username,age}=user",[22270,78025,78027],{"id":78026},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,78029,78030],{},[44,78031],{"alt":46,"src":78032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22270,78034,78036],{"id":78035},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,78038,78039],{},[44,78040],{"alt":46,"src":78041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[49,78043,78045],{"className":53264,"code":78044,"language":53266,"meta":46,"style":46},"  \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",[28,78046,78047,78055,78060,78065,78070,78075,78080,78085,78090,78095,78099,78104,78109],{"__ignoreMap":46},[57,78048,78049,78051,78053],{"class":59,"line":60},[57,78050,52341],{"class":140},[57,78052,52010],{"class":51497},[57,78054,51504],{"class":140},[57,78056,78057],{"class":59,"line":67},[57,78058,78059],{"class":140},"    const pig = {\n",[57,78061,78062],{"class":59,"line":144},[57,78063,78064],{"class":140},"      name: '佩奇',\n",[57,78066,78067],{"class":59,"line":150},[57,78068,78069],{"class":140},"      family: {\n",[57,78071,78072],{"class":59,"line":162},[57,78073,78074],{"class":140},"        mother: '猪妈妈',\n",[57,78076,78077],{"class":59,"line":180},[57,78078,78079],{"class":140},"        father: '猪爸爸',\n",[57,78081,78082],{"class":59,"line":186},[57,78083,78084],{"class":140},"        sister: '乔治'\n",[57,78086,78087],{"class":59,"line":197},[57,78088,78089],{"class":140},"      },\n",[57,78091,78092],{"class":59,"line":241},[57,78093,78094],{"class":140},"      age: 6\n",[57,78096,78097],{"class":59,"line":249},[57,78098,2460],{"class":140},[57,78100,78101],{"class":59,"line":262},[57,78102,78103],{"class":140},"    \u002F\u002F 多级对象解构\n",[57,78105,78106],{"class":59,"line":281},[57,78107,78108],{"class":140},"    const { name, family: { mother, father, sister }, age } = pig\n",[57,78110,78111,78113,78115],{"class":59,"line":287},[57,78112,52614],{"class":140},[57,78114,52010],{"class":51497},[57,78116,51504],{"class":140},[14,78118,78119],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[49,78121,78124],{"className":78122,"code":78123,"language":76644,"meta":46,"style":46},"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",[28,78125,78126,78131,78142,78154,78166,78175,78179,78190,78202,78212,78217,78221,78231,78242,78251,78255,78259,78270,78281,78290,78294,78299],{"__ignoreMap":46},[57,78127,78128],{"class":59,"line":60},[57,78129,78130],{"class":63},"    \u002F\u002F 这是后台传递过来的数据\n",[57,78132,78133,78135,78138,78140],{"class":59,"line":67},[57,78134,11494],{"class":136},[57,78136,78137],{"class":140}," msg ",[57,78139,156],{"class":136},[57,78141,15844],{"class":140},[57,78143,78144,78147,78149,78152],{"class":59,"line":144},[57,78145,78146],{"class":74},"      \"code\"",[57,78148,1275],{"class":136},[57,78150,78151],{"class":81}," 200",[57,78153,31663],{"class":140},[57,78155,78156,78159,78161,78164],{"class":59,"line":150},[57,78157,78158],{"class":74},"      \"msg\"",[57,78160,1275],{"class":136},[57,78162,78163],{"class":74}," \"获取新闻列表成功\"",[57,78165,31663],{"class":140},[57,78167,78168,78171,78173],{"class":59,"line":162},[57,78169,78170],{"class":74},"      \"data\"",[57,78172,1275],{"class":136},[57,78174,55644],{"class":140},[57,78176,78177],{"class":59,"line":180},[57,78178,2783],{"class":140},[57,78180,78181,78184,78186,78188],{"class":59,"line":186},[57,78182,78183],{"class":74},"          \"id\"",[57,78185,1275],{"class":136},[57,78187,25387],{"class":81},[57,78189,31663],{"class":140},[57,78191,78192,78195,78197,78200],{"class":59,"line":197},[57,78193,78194],{"class":74},"          \"title\"",[57,78196,1275],{"class":136},[57,78198,78199],{"class":74}," \"5G商用自己，三大运用商收入下降\"",[57,78201,31663],{"class":140},[57,78203,78204,78207,78209],{"class":59,"line":241},[57,78205,78206],{"class":74},"          \"count\"",[57,78208,1275],{"class":136},[57,78210,78211],{"class":81}," 58\n",[57,78213,78214],{"class":59,"line":249},[57,78215,78216],{"class":140},"        },\n",[57,78218,78219],{"class":59,"line":262},[57,78220,2783],{"class":140},[57,78222,78223,78225,78227,78229],{"class":59,"line":281},[57,78224,78183],{"class":74},[57,78226,1275],{"class":136},[57,78228,15027],{"class":81},[57,78230,31663],{"class":140},[57,78232,78233,78235,78237,78240],{"class":59,"line":287},[57,78234,78194],{"class":74},[57,78236,1275],{"class":136},[57,78238,78239],{"class":74}," \"国际媒体头条速览\"",[57,78241,31663],{"class":140},[57,78243,78244,78246,78248],{"class":59,"line":298},[57,78245,78206],{"class":74},[57,78247,1275],{"class":136},[57,78249,78250],{"class":81}," 56\n",[57,78252,78253],{"class":59,"line":311},[57,78254,78216],{"class":140},[57,78256,78257],{"class":59,"line":322},[57,78258,2783],{"class":140},[57,78260,78261,78263,78265,78268],{"class":59,"line":1929},[57,78262,78183],{"class":74},[57,78264,1275],{"class":136},[57,78266,78267],{"class":81}," 3",[57,78269,31663],{"class":140},[57,78271,78272,78274,78276,78279],{"class":59,"line":1950},[57,78273,78194],{"class":74},[57,78275,1275],{"class":136},[57,78277,78278],{"class":74}," \"乌克兰和俄罗斯持续冲突\"",[57,78280,31663],{"class":140},[57,78282,78283,78285,78287],{"class":59,"line":1955},[57,78284,78206],{"class":74},[57,78286,1275],{"class":136},[57,78288,78289],{"class":81}," 1669\n",[57,78291,78292],{"class":59,"line":1969},[57,78293,78216],{"class":140},[57,78295,78296],{"class":59,"line":1974},[57,78297,78298],{"class":140},"      ]\n",[57,78300,78301],{"class":59,"line":2001},[57,78302,2460],{"class":140},[14,78304,78305],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,78307,78308],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,78310,78311],{},"\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,78313,78314],{},"function({data}) {",[14,78316,78317],{},"console.log(data)",[14,78319,1362],{},[14,78321,78322],{},"render(msg)",[14,78324,78325],{},"实参传递给形参的时候解构了",[14,78327,78328],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,78330,78331],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,78333,78334],{},"function render({data:mydata}) {",[14,78336,78337],{},"  console.log(data)",[14,78339,1362],{},[394,78341,78343],{"id":78342},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,78345,78346],{},"有两种情况：一个是数组结构，一个是立即执行函数",[377,78348,78349],{},[380,78350,78351],{},"如果对一个数组进行遍历，有两种方式：",[14,78353,78354],{},"①法1",[14,78356,78357],{},"const arr=[1,2,3]",[14,78359,78360],{},"arr.map(function(item,index) {",[14,78362,78363],{},"  console.log(item)",[14,78365,52661],{},[14,78367,78368],{},[44,78369],{"alt":46,"src":78370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,78372,78373],{},"②法2",[14,78375,78376],{},"const str='pink'",[14,78378,78379],{},"[1,2,3].map(function(item,index) {",[14,78381,78382],{},"console.log(item)",[14,78384,52661],{},[14,78386,78387],{},[44,78388],{"alt":46,"src":78389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,78391,78392],{},"此时会报错",[14,78394,78395],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,78397,78382],{},[14,78399,52661],{},[14,78401,78402],{},"内部会当成这样处理，所以我们用分号进行隔开",[365,78404,78406],{"id":78405},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,78408,78409],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,78411,78412],{},"可以理解为加强版的for循环",[14,78414,78415],{},[44,78416],{"alt":46,"src":78417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,78419,78420],{},"里边不写return，不返回数组，只遍历不返回",[14,78422,78423],{},"map是返回数组",[14,78425,78426],{},"forEach主要用于遍历数组对象",[49,78428,78430],{"className":53264,"code":78429,"language":53266,"meta":46,"style":46},"  \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",[28,78431,78432,78440,78445,78450,78455,78460,78464,78469],{"__ignoreMap":46},[57,78433,78434,78436,78438],{"class":59,"line":60},[57,78435,52341],{"class":140},[57,78437,52010],{"class":51497},[57,78439,51504],{"class":140},[57,78441,78442],{"class":59,"line":67},[57,78443,78444],{"class":140},"    const arr = ['red', 'green', 'pink']\n",[57,78446,78447],{"class":59,"line":144},[57,78448,78449],{"class":140},"    const result = arr.forEach(function (item, index) {\n",[57,78451,78452],{"class":59,"line":150},[57,78453,78454],{"class":140},"      console.log(item)\n",[57,78456,78457],{"class":59,"line":162},[57,78458,78459],{"class":140},"      console.log(index)\n",[57,78461,78462],{"class":59,"line":180},[57,78463,33658],{"class":140},[57,78465,78466],{"class":59,"line":186},[57,78467,78468],{"class":140},"    console.log(result)\n",[57,78470,78471,78473,78475],{"class":59,"line":197},[57,78472,52614],{"class":140},[57,78474,52010],{"class":51497},[57,78476,51504],{"class":140},[14,78478,78479],{},[44,78480],{"alt":46,"src":78481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[365,78483,78485],{"id":78484},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,78487,78488],{},[44,78489],{"alt":46,"src":78490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,78492,78493],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[49,78495,78497],{"className":53264,"code":78496,"language":53266,"meta":46,"style":46},"\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",[28,78498,78499,78507,78515,78520,78525,78529,78533,78538,78542,78547,78555],{"__ignoreMap":46},[57,78500,78501,78503,78505],{"class":59,"line":60},[57,78502,1326],{"class":140},[57,78504,51997],{"class":51497},[57,78506,51504],{"class":140},[57,78508,78509,78511,78513],{"class":59,"line":67},[57,78510,52341],{"class":140},[57,78512,52010],{"class":51497},[57,78514,51504],{"class":140},[57,78516,78517],{"class":59,"line":144},[57,78518,78519],{"class":140},"    const arr = [10, 20, 30]\n",[57,78521,78522],{"class":59,"line":150},[57,78523,78524],{"class":140},"    const newArr = arr.filter(function (item, index) {\n",[57,78526,78527],{"class":59,"line":162},[57,78528,78454],{"class":140},[57,78530,78531],{"class":59,"line":180},[57,78532,78459],{"class":140},[57,78534,78535],{"class":59,"line":186},[57,78536,78537],{"class":140},"      return item >= 20\n",[57,78539,78540],{"class":59,"line":197},[57,78541,33658],{"class":140},[57,78543,78544],{"class":59,"line":241},[57,78545,78546],{"class":140},"    console.log(newArr)\n",[57,78548,78549,78551,78553],{"class":59,"line":249},[57,78550,52614],{"class":140},[57,78552,52010],{"class":51497},[57,78554,51504],{"class":140},[57,78556,78557,78559,78561],{"class":59,"line":262},[57,78558,51982],{"class":140},[57,78560,51997],{"class":51497},[57,78562,51504],{"class":140},[14,78564,78565],{},"这个也可以写成箭头函数：",[49,78567,78569],{"className":50830,"code":78568,"language":50832,"meta":46,"style":46},"const newArr = arr.filter(item => item >= 20)\n",[28,78570,78571],{"__ignoreMap":46},[57,78572,78573],{"class":59,"line":60},[57,78574,78568],{"class":140},[365,78576,78578],{"id":78577},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,78580,78581],{},[44,78582],{"alt":46,"src":78583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,78585,78586],{},"步骤：",[14,78588,78589],{},"①：渲染页面模块",[1422,78591,78592,78595],{},[380,78593,78594],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[380,78596,78597],{},"用forEach+字符串的形式",[14,78599,78600],{},"②：点击不同需求，显示不同页面内容",[1422,78602,78603,78606,78609,78612,78615],{},[380,78604,78605],{},"点击采取事件委托方式 .filter",[380,78607,78608],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[380,78610,78611],{},"筛选条件是根据点击的 data-index 来判断",[380,78613,78614],{},"可以使用对象解构，把事件对象解构",[380,78616,78617],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[49,78619,78621],{"className":50830,"code":78620,"language":50832,"meta":46,"style":46},"\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",[28,78622,78623,78633,78647,78651,78659,78673,78693,78705,78713,78719,78729,78739,78749,78753,78757,78763,78776,78788,78798,78810,78814,78818,78825,78838,78850,78867,78885,78898,78902,78906,78918,78928,78932,78936,78943,78984,79011,79021,79025,79029,79037,79049,79053,79057,79065,79077,79089,79100,79104,79108,79117,79129,79140,79144,79148,79157,79169,79181,79185,79189,79196,79206,79218,79230,79245,79249,79253,79261,79277,79287,79297,79307,79319,79323,79327,79337,79348,79358,79362,79370,79378,79382,79390,79405,79431,79456,79481,79500,79508,79522,79527,79532,79537,79542,79547,79555,79563,79568,79579,79584,79594,79604,79614,79624,79628,79632,79641,79650,79659,79668,79672,79676,79685,79694,79703,79712,79716,79720,79729,79738,79747,79756,79760,79764,79773,79782,79791,79800,79804,79808,79817,79826,79835,79844,79848,79852,79861,79870,79879,79888,79892,79896,79905,79914,79922,79931,79935,79939,79943,79948,79960,79965,79977,79981,79998,80026,80035,80040,80050,80060,80069,80074,80079,80083,80088,80105,80109,80114,80122,80127,80154,80159,80179,80184,80196,80201,80206,80211,80222,80236,80273,80291,80324,80341,80365,80369,80374,80380,80384,80388,80392,80400,80408,80412],{"__ignoreMap":46},[57,78624,78625,78627,78629,78631],{"class":59,"line":60},[57,78626,51494],{"class":140},[57,78628,51498],{"class":51497},[57,78630,51501],{"class":70},[57,78632,51504],{"class":140},[57,78634,78635,78637,78639,78641,78643,78645],{"class":59,"line":67},[57,78636,1326],{"class":140},[57,78638,50832],{"class":51497},[57,78640,51513],{"class":70},[57,78642,156],{"class":140},[57,78644,51518],{"class":74},[57,78646,51504],{"class":140},[57,78648,78649],{"class":59,"line":144},[57,78650,2673],{"emptyLinePlaceholder":350},[57,78652,78653,78655,78657],{"class":59,"line":150},[57,78654,1326],{"class":140},[57,78656,51531],{"class":51497},[57,78658,51504],{"class":140},[57,78660,78661,78663,78665,78667,78669,78671],{"class":59,"line":162},[57,78662,52341],{"class":140},[57,78664,51541],{"class":51497},[57,78666,51544],{"class":70},[57,78668,156],{"class":140},[57,78670,51549],{"class":74},[57,78672,51504],{"class":140},[57,78674,78675,78677,78679,78681,78683,78685,78687,78689,78691],{"class":59,"line":180},[57,78676,52341],{"class":140},[57,78678,51541],{"class":51497},[57,78680,15192],{"class":70},[57,78682,156],{"class":140},[57,78684,51588],{"class":74},[57,78686,51568],{"class":70},[57,78688,156],{"class":140},[57,78690,51595],{"class":74},[57,78692,51504],{"class":140},[57,78694,78695,78697,78699,78701,78703],{"class":59,"line":186},[57,78696,52341],{"class":140},[57,78698,51604],{"class":51497},[57,78700,51607],{"class":140},[57,78702,51604],{"class":51497},[57,78704,51504],{"class":140},[57,78706,78707,78709,78711],{"class":59,"line":197},[57,78708,52341],{"class":140},[57,78710,342],{"class":51497},[57,78712,51504],{"class":140},[57,78714,78715,78717],{"class":59,"line":241},[57,78716,6676],{"class":51497},[57,78718,15844],{"class":140},[57,78720,78721,78723,78725,78727],{"class":59,"line":249},[57,78722,54892],{"class":81},[57,78724,51634],{"class":140},[57,78726,226],{"class":81},[57,78728,1576],{"class":140},[57,78730,78731,78733,78735,78737],{"class":59,"line":262},[57,78732,54903],{"class":81},[57,78734,51634],{"class":140},[57,78736,226],{"class":81},[57,78738,1576],{"class":140},[57,78740,78741,78743,78745,78747],{"class":59,"line":281},[57,78742,72793],{"class":81},[57,78744,51634],{"class":140},[57,78746,60702],{"class":81},[57,78748,1576],{"class":140},[57,78750,78751],{"class":59,"line":287},[57,78752,2460],{"class":140},[57,78754,78755],{"class":59,"line":298},[57,78756,2673],{"emptyLinePlaceholder":350},[57,78758,78759,78761],{"class":59,"line":311},[57,78760,62320],{"class":70},[57,78762,15844],{"class":140},[57,78764,78765,78767,78769,78772,78774],{"class":59,"line":322},[57,78766,54968],{"class":81},[57,78768,51634],{"class":140},[57,78770,78771],{"class":81},"990",[57,78773,51689],{"class":136},[57,78775,1576],{"class":140},[57,78777,78778,78780,78782,78784,78786],{"class":59,"line":1929},[57,78779,54903],{"class":81},[57,78781,51634],{"class":140},[57,78783,226],{"class":81},[57,78785,51753],{"class":81},[57,78787,1576],{"class":140},[57,78789,78790,78792,78794,78796],{"class":59,"line":1950},[57,78791,55206],{"class":81},[57,78793,51634],{"class":140},[57,78795,51674],{"class":81},[57,78797,1576],{"class":140},[57,78799,78800,78803,78805,78808],{"class":59,"line":1955},[57,78801,78802],{"class":81},"      flex-wrap",[57,78804,51634],{"class":140},[57,78806,78807],{"class":81},"wrap",[57,78809,1576],{"class":140},[57,78811,78812],{"class":59,"line":1969},[57,78813,2460],{"class":140},[57,78815,78816],{"class":59,"line":1974},[57,78817,2673],{"emptyLinePlaceholder":350},[57,78819,78820,78823],{"class":59,"line":2001},[57,78821,78822],{"class":70},"    .item",[57,78824,15844],{"class":140},[57,78826,78827,78829,78831,78834,78836],{"class":59,"line":2006},[57,78828,54968],{"class":81},[57,78830,51634],{"class":140},[57,78832,78833],{"class":81},"240",[57,78835,51689],{"class":136},[57,78837,1576],{"class":140},[57,78839,78840,78842,78844,78846,78848],{"class":59,"line":2023},[57,78841,62197],{"class":81},[57,78843,51634],{"class":140},[57,78845,862],{"class":81},[57,78847,51689],{"class":136},[57,78849,1576],{"class":140},[57,78851,78852,78854,78856,78858,78860,78863,78865],{"class":59,"line":2028},[57,78853,54892],{"class":81},[57,78855,51634],{"class":140},[57,78857,1116],{"class":81},[57,78859,51689],{"class":136},[57,78861,78862],{"class":81}," 30",[57,78864,51689],{"class":136},[57,78866,1576],{"class":140},[57,78868,78869,78871,78873,78875,78878,78881,78883],{"class":59,"line":2033},[57,78870,62057],{"class":81},[57,78872,51634],{"class":140},[57,78874,28390],{"class":81},[57,78876,78877],{"class":81}," ease",[57,78879,78880],{"class":81}," .5",[57,78882,1111],{"class":136},[57,78884,1576],{"class":140},[57,78886,78887,78890,78892,78894,78896],{"class":59,"line":2038},[57,78888,78889],{"class":81},"      margin-bottom",[57,78891,51634],{"class":140},[57,78893,1116],{"class":81},[57,78895,51689],{"class":136},[57,78897,1576],{"class":140},[57,78899,78900],{"class":59,"line":2052},[57,78901,2460],{"class":140},[57,78903,78904],{"class":59,"line":2057},[57,78905,2673],{"emptyLinePlaceholder":350},[57,78907,78908,78911,78913,78916],{"class":59,"line":2850},[57,78909,78910],{"class":70},"    .item:nth-child",[57,78912,168],{"class":140},[57,78914,78915],{"class":81},"4n",[57,78917,12715],{"class":140},[57,78919,78920,78922,78924,78926],{"class":59,"line":2864},[57,78921,62197],{"class":81},[57,78923,51634],{"class":140},[57,78925,226],{"class":81},[57,78927,1576],{"class":140},[57,78929,78930],{"class":59,"line":2872},[57,78931,2460],{"class":140},[57,78933,78934],{"class":59,"line":2877},[57,78935,2673],{"emptyLinePlaceholder":350},[57,78937,78938,78941],{"class":59,"line":2883},[57,78939,78940],{"class":70},"    .item:hover",[57,78942,15844],{"class":140},[57,78944,78945,78948,78950,78952,78954,78956,78958,78960,78962,78965,78967,78969,78971,78973,78975,78977,78979,78982],{"class":59,"line":2889},[57,78946,78947],{"class":81},"      box-shadow",[57,78949,51634],{"class":140},[57,78951,226],{"class":81},[57,78953,51689],{"class":136},[57,78955,4366],{"class":81},[57,78957,51689],{"class":136},[57,78959,2421],{"class":81},[57,78961,51689],{"class":136},[57,78963,78964],{"class":81}," rgba",[57,78966,168],{"class":140},[57,78968,226],{"class":81},[57,78970,12708],{"class":140},[57,78972,226],{"class":81},[57,78974,12708],{"class":140},[57,78976,226],{"class":81},[57,78978,12708],{"class":140},[57,78980,78981],{"class":81},".2",[57,78983,2992],{"class":140},[57,78985,78986,78989,78991,78994,78996,78998,79000,79003,79005,79007,79009],{"class":59,"line":2894},[57,78987,78988],{"class":81},"      transform",[57,78990,51634],{"class":140},[57,78992,78993],{"class":81},"translate3d",[57,78995,168],{"class":140},[57,78997,226],{"class":81},[57,78999,12708],{"class":140},[57,79001,79002],{"class":81},"-4",[57,79004,51689],{"class":136},[57,79006,12708],{"class":140},[57,79008,226],{"class":81},[57,79010,2992],{"class":140},[57,79012,79013,79015,79017,79019],{"class":59,"line":8221},[57,79014,62222],{"class":81},[57,79016,51634],{"class":140},[57,79018,62227],{"class":81},[57,79020,1576],{"class":140},[57,79022,79023],{"class":59,"line":8245},[57,79024,2460],{"class":140},[57,79026,79027],{"class":59,"line":8250},[57,79028,2673],{"emptyLinePlaceholder":350},[57,79030,79031,79033,79035],{"class":59,"line":8256},[57,79032,78822],{"class":70},[57,79034,55812],{"class":51497},[57,79036,15844],{"class":140},[57,79038,79039,79041,79043,79045,79047],{"class":59,"line":8283},[57,79040,54968],{"class":81},[57,79042,51634],{"class":140},[57,79044,728],{"class":81},[57,79046,745],{"class":136},[57,79048,1576],{"class":140},[57,79050,79051],{"class":59,"line":8288},[57,79052,2460],{"class":140},[57,79054,79055],{"class":59,"line":8294},[57,79056,2673],{"emptyLinePlaceholder":350},[57,79058,79059,79061,79063],{"class":59,"line":8306},[57,79060,78822],{"class":70},[57,79062,62501],{"class":70},[57,79064,15844],{"class":140},[57,79066,79067,79069,79071,79073,79075],{"class":59,"line":8318},[57,79068,55119],{"class":81},[57,79070,51634],{"class":140},[57,79072,1066],{"class":81},[57,79074,51689],{"class":136},[57,79076,1576],{"class":140},[57,79078,79079,79081,79083,79085,79087],{"class":59,"line":8330},[57,79080,78889],{"class":81},[57,79082,51634],{"class":140},[57,79084,862],{"class":81},[57,79086,51689],{"class":136},[57,79088,1576],{"class":140},[57,79090,79091,79093,79095,79098],{"class":59,"line":9989},[57,79092,57613],{"class":81},[57,79094,51634],{"class":140},[57,79096,79097],{"class":81},"#666",[57,79099,1576],{"class":140},[57,79101,79102],{"class":59,"line":10014},[57,79103,2460],{"class":140},[57,79105,79106],{"class":59,"line":10037},[57,79107,2673],{"emptyLinePlaceholder":350},[57,79109,79110,79112,79115],{"class":59,"line":10061},[57,79111,78822],{"class":70},[57,79113,79114],{"class":70}," .price",[57,79116,15844],{"class":140},[57,79118,79119,79121,79123,79125,79127],{"class":59,"line":10066},[57,79120,55119],{"class":81},[57,79122,51634],{"class":140},[57,79124,1166],{"class":81},[57,79126,51689],{"class":136},[57,79128,1576],{"class":140},[57,79130,79131,79133,79135,79138],{"class":59,"line":10071},[57,79132,57613],{"class":81},[57,79134,51634],{"class":140},[57,79136,79137],{"class":81},"firebrick",[57,79139,1576],{"class":140},[57,79141,79142],{"class":59,"line":10076},[57,79143,2460],{"class":140},[57,79145,79146],{"class":59,"line":10085},[57,79147,2673],{"emptyLinePlaceholder":350},[57,79149,79150,79152,79155],{"class":59,"line":10090},[57,79151,78822],{"class":70},[57,79153,79154],{"class":70}," .price::before",[57,79156,15844],{"class":140},[57,79158,79159,79162,79164,79167],{"class":59,"line":10096},[57,79160,79161],{"class":81},"      content",[57,79163,51634],{"class":140},[57,79165,79166],{"class":74},"'￥'",[57,79168,1576],{"class":140},[57,79170,79171,79173,79175,79177,79179],{"class":59,"line":10117},[57,79172,55119],{"class":81},[57,79174,51634],{"class":140},[57,79176,965],{"class":81},[57,79178,51689],{"class":136},[57,79180,1576],{"class":140},[57,79182,79183],{"class":59,"line":10123},[57,79184,2460],{"class":140},[57,79186,79187],{"class":59,"line":10137},[57,79188,2673],{"emptyLinePlaceholder":350},[57,79190,79191,79194],{"class":59,"line":10143},[57,79192,79193],{"class":70},"    .filter",[57,79195,15844],{"class":140},[57,79197,79198,79200,79202,79204],{"class":59,"line":10170},[57,79199,55206],{"class":81},[57,79201,51634],{"class":140},[57,79203,51674],{"class":81},[57,79205,1576],{"class":140},[57,79207,79208,79210,79212,79214,79216],{"class":59,"line":10179},[57,79209,54968],{"class":81},[57,79211,51634],{"class":140},[57,79213,78771],{"class":81},[57,79215,51689],{"class":136},[57,79217,1576],{"class":140},[57,79219,79220,79222,79224,79226,79228],{"class":59,"line":10185},[57,79221,54903],{"class":81},[57,79223,51634],{"class":140},[57,79225,226],{"class":81},[57,79227,51753],{"class":81},[57,79229,1576],{"class":140},[57,79231,79232,79234,79236,79238,79240,79242],{"class":59,"line":10193},[57,79233,54892],{"class":81},[57,79235,51634],{"class":140},[57,79237,1072],{"class":81},[57,79239,51689],{"class":136},[57,79241,78862],{"class":81},[57,79243,79244],{"class":136},"px\n",[57,79246,79247],{"class":59,"line":10198},[57,79248,2460],{"class":140},[57,79250,79251],{"class":59,"line":16876},[57,79252,2673],{"emptyLinePlaceholder":350},[57,79254,79255,79257,79259],{"class":59,"line":16882},[57,79256,79193],{"class":70},[57,79258,1681],{"class":51497},[57,79260,15844],{"class":140},[57,79262,79263,79265,79267,79269,79271,79273,79275],{"class":59,"line":16905},[57,79264,54892],{"class":81},[57,79266,51634],{"class":140},[57,79268,862],{"class":81},[57,79270,51689],{"class":136},[57,79272,9223],{"class":81},[57,79274,51689],{"class":136},[57,79276,1576],{"class":140},[57,79278,79279,79281,79283,79285],{"class":59,"line":16911},[57,79280,61918],{"class":81},[57,79282,51634],{"class":140},[57,79284,62015],{"class":81},[57,79286,1576],{"class":140},[57,79288,79289,79291,79293,79295],{"class":59,"line":16934},[57,79290,57613],{"class":81},[57,79292,51634],{"class":140},[57,79294,79097],{"class":81},[57,79296,1576],{"class":140},[57,79298,79299,79301,79303,79305],{"class":59,"line":16948},[57,79300,64167],{"class":81},[57,79302,51634],{"class":140},[57,79304,54934],{"class":81},[57,79306,1576],{"class":140},[57,79308,79309,79311,79313,79315,79317],{"class":59,"line":16968},[57,79310,61947],{"class":81},[57,79312,51634],{"class":140},[57,79314,1116],{"class":81},[57,79316,51689],{"class":136},[57,79318,1576],{"class":140},[57,79320,79321],{"class":59,"line":16974},[57,79322,2460],{"class":140},[57,79324,79325],{"class":59,"line":16985},[57,79326,2673],{"emptyLinePlaceholder":350},[57,79328,79329,79331,79333,79335],{"class":59,"line":17008},[57,79330,79193],{"class":70},[57,79332,1681],{"class":51497},[57,79334,62097],{"class":70},[57,79336,15844],{"class":140},[57,79338,79339,79341,79343,79346],{"class":59,"line":17030},[57,79340,55081],{"class":81},[57,79342,51634],{"class":140},[57,79344,79345],{"class":81},"#05943c",[57,79347,1576],{"class":140},[57,79349,79350,79352,79354,79356],{"class":59,"line":17035},[57,79351,57613],{"class":81},[57,79353,51634],{"class":140},[57,79355,61039],{"class":81},[57,79357,1576],{"class":140},[57,79359,79360],{"class":59,"line":17041},[57,79361,2460],{"class":140},[57,79363,79364,79366,79368],{"class":59,"line":17055},[57,79365,52614],{"class":140},[57,79367,342],{"class":51497},[57,79369,51504],{"class":140},[57,79371,79372,79374,79376],{"class":59,"line":17068},[57,79373,51982],{"class":140},[57,79375,51531],{"class":51497},[57,79377,51504],{"class":140},[57,79379,79380],{"class":59,"line":17073},[57,79381,2673],{"emptyLinePlaceholder":350},[57,79383,79384,79386,79388],{"class":59,"line":17087},[57,79385,1326],{"class":140},[57,79387,51997],{"class":51497},[57,79389,51504],{"class":140},[57,79391,79392,79394,79396,79398,79400,79403],{"class":59,"line":17092},[57,79393,52341],{"class":140},[57,79395,51808],{"class":51497},[57,79397,53683],{"class":70},[57,79399,156],{"class":140},[57,79401,79402],{"class":74},"\"filter\"",[57,79404,51504],{"class":140},[57,79406,79407,79409,79411,79413,79415,79417,79420,79422,79424,79427,79429],{"class":59,"line":17098},[57,79408,51538],{"class":140},[57,79410,18],{"class":51497},[57,79412,61254],{"class":70},[57,79414,156],{"class":140},[57,79416,61259],{"class":74},[57,79418,79419],{"class":70}," data-index",[57,79421,156],{"class":140},[57,79423,3951],{"class":74},[57,79425,79426],{"class":140},">0-100元\u003C\u002F",[57,79428,18],{"class":51497},[57,79430,51504],{"class":140},[57,79432,79433,79435,79437,79439,79441,79443,79445,79447,79449,79452,79454],{"class":59,"line":17103},[57,79434,51538],{"class":140},[57,79436,18],{"class":51497},[57,79438,61254],{"class":70},[57,79440,156],{"class":140},[57,79442,61259],{"class":74},[57,79444,79419],{"class":70},[57,79446,156],{"class":140},[57,79448,3974],{"class":74},[57,79450,79451],{"class":140},">100-300元\u003C\u002F",[57,79453,18],{"class":51497},[57,79455,51504],{"class":140},[57,79457,79458,79460,79462,79464,79466,79468,79470,79472,79474,79477,79479],{"class":59,"line":17117},[57,79459,51538],{"class":140},[57,79461,18],{"class":51497},[57,79463,61254],{"class":70},[57,79465,156],{"class":140},[57,79467,61259],{"class":74},[57,79469,79419],{"class":70},[57,79471,156],{"class":140},[57,79473,3987],{"class":74},[57,79475,79476],{"class":140},">300元以上\u003C\u002F",[57,79478,18],{"class":51497},[57,79480,51504],{"class":140},[57,79482,79483,79485,79487,79489,79491,79493,79496,79498],{"class":59,"line":17122},[57,79484,51538],{"class":140},[57,79486,18],{"class":51497},[57,79488,61254],{"class":70},[57,79490,156],{"class":140},[57,79492,61259],{"class":74},[57,79494,79495],{"class":140},">全部区间\u003C\u002F",[57,79497,18],{"class":51497},[57,79499,51504],{"class":140},[57,79501,79502,79504,79506],{"class":59,"line":17127},[57,79503,52614],{"class":140},[57,79505,51808],{"class":51497},[57,79507,51504],{"class":140},[57,79509,79510,79512,79514,79516,79518,79520],{"class":59,"line":17141},[57,79511,52341],{"class":140},[57,79513,51808],{"class":51497},[57,79515,53683],{"class":70},[57,79517,156],{"class":140},[57,79519,62805],{"class":74},[57,79521,51504],{"class":140},[57,79523,79524],{"class":59,"line":17153},[57,79525,79526],{"class":63},"    \u003C!-- \u003Cdiv class=\"item\">\n",[57,79528,79529],{"class":59,"line":17158},[57,79530,79531],{"class":63},"      \u003Cimg src=\"\" alt=\"\">\n",[57,79533,79534],{"class":59,"line":17171},[57,79535,79536],{"class":63},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[57,79538,79539],{"class":59,"line":17176},[57,79540,79541],{"class":63},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[57,79543,79544],{"class":59,"line":17181},[57,79545,79546],{"class":63},"    \u003C\u002Fdiv> -->\n",[57,79548,79549,79551,79553],{"class":59,"line":17186},[57,79550,52614],{"class":140},[57,79552,51808],{"class":51497},[57,79554,51504],{"class":140},[57,79556,79557,79559,79561],{"class":59,"line":17199},[57,79558,52341],{"class":140},[57,79560,52010],{"class":51497},[57,79562,51504],{"class":140},[57,79564,79565],{"class":59,"line":17204},[57,79566,79567],{"class":63},"    \u002F\u002F 2. 初始化数据\n",[57,79569,79570,79572,79575,79577],{"class":59,"line":32830},[57,79571,11494],{"class":136},[57,79573,79574],{"class":81}," goodsList",[57,79576,13837],{"class":136},[57,79578,55644],{"class":140},[57,79580,79581],{"class":59,"line":32836},[57,79582,79583],{"class":140},"      {\n",[57,79585,79586,79589,79592],{"class":59,"line":32842},[57,79587,79588],{"class":140},"        id: ",[57,79590,79591],{"class":74},"'4001172'",[57,79593,31663],{"class":140},[57,79595,79596,79599,79602],{"class":59,"line":32848},[57,79597,79598],{"class":140},"        name: ",[57,79600,79601],{"class":74},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[57,79603,31663],{"class":140},[57,79605,79606,79609,79612],{"class":59,"line":32854},[57,79607,79608],{"class":140},"        price: ",[57,79610,79611],{"class":74},"'289.00'",[57,79613,31663],{"class":140},[57,79615,79616,79619,79622],{"class":59,"line":32865},[57,79617,79618],{"class":140},"        picture: ",[57,79620,79621],{"class":74},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[57,79623,31663],{"class":140},[57,79625,79626],{"class":59,"line":32871},[57,79627,78089],{"class":140},[57,79629,79630],{"class":59,"line":32891},[57,79631,79583],{"class":140},[57,79633,79634,79636,79639],{"class":59,"line":32897},[57,79635,79588],{"class":140},[57,79637,79638],{"class":74},"'4001594'",[57,79640,31663],{"class":140},[57,79642,79643,79645,79648],{"class":59,"line":32908},[57,79644,79598],{"class":140},[57,79646,79647],{"class":74},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[57,79649,31663],{"class":140},[57,79651,79652,79654,79657],{"class":59,"line":32914},[57,79653,79608],{"class":140},[57,79655,79656],{"class":74},"'288.00'",[57,79658,31663],{"class":140},[57,79660,79661,79663,79666],{"class":59,"line":32920},[57,79662,79618],{"class":140},[57,79664,79665],{"class":74},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[57,79667,31663],{"class":140},[57,79669,79670],{"class":59,"line":32926},[57,79671,78089],{"class":140},[57,79673,79674],{"class":59,"line":32932},[57,79675,79583],{"class":140},[57,79677,79678,79680,79683],{"class":59,"line":32938},[57,79679,79588],{"class":140},[57,79681,79682],{"class":74},"'4001009'",[57,79684,31663],{"class":140},[57,79686,79687,79689,79692],{"class":59,"line":32944},[57,79688,79598],{"class":140},[57,79690,79691],{"class":74},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[57,79693,31663],{"class":140},[57,79695,79696,79698,79701],{"class":59,"line":32950},[57,79697,79608],{"class":140},[57,79699,79700],{"class":74},"'109.00'",[57,79702,31663],{"class":140},[57,79704,79705,79707,79710],{"class":59,"line":32970},[57,79706,79618],{"class":140},[57,79708,79709],{"class":74},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[57,79711,31663],{"class":140},[57,79713,79714],{"class":59,"line":32976},[57,79715,78089],{"class":140},[57,79717,79718],{"class":59,"line":32992},[57,79719,79583],{"class":140},[57,79721,79722,79724,79727],{"class":59,"line":32998},[57,79723,79588],{"class":140},[57,79725,79726],{"class":74},"'4001874'",[57,79728,31663],{"class":140},[57,79730,79731,79733,79736],{"class":59,"line":33012},[57,79732,79598],{"class":140},[57,79734,79735],{"class":74},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[57,79737,31663],{"class":140},[57,79739,79740,79742,79745],{"class":59,"line":33018},[57,79741,79608],{"class":140},[57,79743,79744],{"class":74},"'488.00'",[57,79746,31663],{"class":140},[57,79748,79749,79751,79754],{"class":59,"line":33033},[57,79750,79618],{"class":140},[57,79752,79753],{"class":74},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[57,79755,31663],{"class":140},[57,79757,79758],{"class":59,"line":33039},[57,79759,78089],{"class":140},[57,79761,79762],{"class":59,"line":33048},[57,79763,79583],{"class":140},[57,79765,79766,79768,79771],{"class":59,"line":33054},[57,79767,79588],{"class":140},[57,79769,79770],{"class":74},"'4001649'",[57,79772,31663],{"class":140},[57,79774,79775,79777,79780],{"class":59,"line":33063},[57,79776,79598],{"class":140},[57,79778,79779],{"class":74},"'大师监制龙泉青瓷茶叶罐'",[57,79781,31663],{"class":140},[57,79783,79784,79786,79789],{"class":59,"line":33069},[57,79785,79608],{"class":140},[57,79787,79788],{"class":74},"'139.00'",[57,79790,31663],{"class":140},[57,79792,79793,79795,79798],{"class":59,"line":33075},[57,79794,79618],{"class":140},[57,79796,79797],{"class":74},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[57,79799,31663],{"class":140},[57,79801,79802],{"class":59,"line":33084},[57,79803,78089],{"class":140},[57,79805,79806],{"class":59,"line":33090},[57,79807,79583],{"class":140},[57,79809,79810,79812,79815],{"class":59,"line":33101},[57,79811,79588],{"class":140},[57,79813,79814],{"class":74},"'3997185'",[57,79816,31663],{"class":140},[57,79818,79819,79821,79824],{"class":59,"line":33107},[57,79820,79598],{"class":140},[57,79822,79823],{"class":74},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[57,79825,31663],{"class":140},[57,79827,79828,79830,79833],{"class":59,"line":33126},[57,79829,79608],{"class":140},[57,79831,79832],{"class":74},"'108.00'",[57,79834,31663],{"class":140},[57,79836,79837,79839,79842],{"class":59,"line":33132},[57,79838,79618],{"class":140},[57,79840,79841],{"class":74},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[57,79843,31663],{"class":140},[57,79845,79846],{"class":59,"line":33143},[57,79847,78089],{"class":140},[57,79849,79850],{"class":59,"line":33149},[57,79851,79583],{"class":140},[57,79853,79854,79856,79859],{"class":59,"line":33169},[57,79855,79588],{"class":140},[57,79857,79858],{"class":74},"'3997403'",[57,79860,31663],{"class":140},[57,79862,79863,79865,79868],{"class":59,"line":33185},[57,79864,79598],{"class":140},[57,79866,79867],{"class":74},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[57,79869,31663],{"class":140},[57,79871,79872,79874,79877],{"class":59,"line":33191},[57,79873,79608],{"class":140},[57,79875,79876],{"class":74},"'100.00'",[57,79878,31663],{"class":140},[57,79880,79881,79883,79886],{"class":59,"line":33205},[57,79882,79618],{"class":140},[57,79884,79885],{"class":74},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[57,79887,31663],{"class":140},[57,79889,79890],{"class":59,"line":33211},[57,79891,78089],{"class":140},[57,79893,79894],{"class":59,"line":33217},[57,79895,79583],{"class":140},[57,79897,79898,79900,79903],{"class":59,"line":33228},[57,79899,79588],{"class":140},[57,79901,79902],{"class":74},"'3998274'",[57,79904,31663],{"class":140},[57,79906,79907,79909,79912],{"class":59,"line":33234},[57,79908,79598],{"class":140},[57,79910,79911],{"class":74},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[57,79913,31663],{"class":140},[57,79915,79916,79918,79920],{"class":59,"line":33240},[57,79917,79608],{"class":140},[57,79919,79788],{"class":74},[57,79921,31663],{"class":140},[57,79923,79924,79926,79929],{"class":59,"line":33250},[57,79925,79618],{"class":140},[57,79927,79928],{"class":74},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[57,79930,31663],{"class":140},[57,79932,79933],{"class":59,"line":33256},[57,79934,78089],{"class":140},[57,79936,79937],{"class":59,"line":33267},[57,79938,53306],{"class":140},[57,79940,79941],{"class":59,"line":33273},[57,79942,2673],{"emptyLinePlaceholder":350},[57,79944,79945],{"class":59,"line":33283},[57,79946,79947],{"class":63},"    \u002F\u002F 1.渲染函数\n",[57,79949,79950,79952,79954,79956,79958],{"class":59,"line":33288},[57,79951,70281],{"class":136},[57,79953,70284],{"class":70},[57,79955,168],{"class":140},[57,79957,4153],{"class":5489},[57,79959,12715],{"class":140},[57,79961,79962],{"class":59,"line":33294},[57,79963,79964],{"class":63},"      \u002F\u002F 声明空字符串\n",[57,79966,79967,79970,79973,79975],{"class":59,"line":33343},[57,79968,79969],{"class":136},"      let",[57,79971,79972],{"class":140}," str ",[57,79974,156],{"class":136},[57,79976,70301],{"class":74},[57,79978,79979],{"class":59,"line":33390},[57,79980,70306],{"class":63},[57,79982,79983,79985,79988,79990,79993,79996],{"class":59,"line":33395},[57,79984,58204],{"class":140},[57,79986,79987],{"class":70},"forEach",[57,79989,168],{"class":140},[57,79991,79992],{"class":5489},"item",[57,79994,79995],{"class":136}," =>",[57,79997,15844],{"class":140},[57,79999,80000,80002,80005,80008,80010,80013,80015,80018,80021,80023],{"class":59,"line":33401},[57,80001,61467],{"class":136},[57,80003,80004],{"class":140}," { ",[57,80006,80007],{"class":81},"name",[57,80009,12708],{"class":140},[57,80011,80012],{"class":81},"price",[57,80014,12708],{"class":140},[57,80016,80017],{"class":81},"picture",[57,80019,80020],{"class":140}," } ",[57,80022,156],{"class":136},[57,80024,80025],{"class":140}," item\n",[57,80027,80028,80031,80033],{"class":59,"line":33420},[57,80029,80030],{"class":140},"        str ",[57,80032,9750],{"class":136},[57,80034,70365],{"class":74},[57,80036,80037],{"class":59,"line":33426},[57,80038,80039],{"class":74},"          \u003Cdiv class=\"item\">\n",[57,80041,80042,80045,80047],{"class":59,"line":33446},[57,80043,80044],{"class":74},"            \u003Cimg src=\"${",[57,80046,80017],{"class":140},[57,80048,80049],{"class":74},"}\" alt=\"\">\n",[57,80051,80052,80055,80057],{"class":59,"line":33452},[57,80053,80054],{"class":74},"            \u003Cp class=\"name\">${",[57,80056,80007],{"class":140},[57,80058,80059],{"class":74},"}\u003C\u002Fp>\n",[57,80061,80062,80065,80067],{"class":59,"line":33458},[57,80063,80064],{"class":74},"            \u003Cp class=\"price\">${",[57,80066,80012],{"class":140},[57,80068,80059],{"class":74},[57,80070,80071],{"class":59,"line":33468},[57,80072,80073],{"class":74},"          \u003C\u002Fdiv>\n",[57,80075,80076],{"class":59,"line":33473},[57,80077,80078],{"class":74},"        `\n",[57,80080,80081],{"class":59,"line":33479},[57,80082,65012],{"class":140},[57,80084,80085],{"class":59,"line":33495},[57,80086,80087],{"class":63},"      \u002F\u002F 追加给List\n",[57,80089,80090,80092,80094,80096,80099,80101,80103],{"class":59,"line":33540},[57,80091,55968],{"class":140},[57,80093,54596],{"class":70},[57,80095,168],{"class":140},[57,80097,80098],{"class":74},"'.list'",[57,80100,74446],{"class":140},[57,80102,156],{"class":136},[57,80104,74182],{"class":140},[57,80106,80107],{"class":59,"line":33546},[57,80108,2460],{"class":140},[57,80110,80111],{"class":59,"line":33552},[57,80112,80113],{"class":63},"    \u002F\u002F 页面一打开就需要渲染\n",[57,80115,80116,80119],{"class":59,"line":33558},[57,80117,80118],{"class":70},"    render",[57,80120,80121],{"class":140},"(goodsList)\n",[57,80123,80124],{"class":59,"line":33569},[57,80125,80126],{"class":63},"    \u002F\u002F 2.过滤筛选\n",[57,80128,80129,80131,80133,80135,80138,80140,80142,80144,80146,80148,80150,80152],{"class":59,"line":33575},[57,80130,52604],{"class":140},[57,80132,54596],{"class":70},[57,80134,168],{"class":140},[57,80136,80137],{"class":74},"'.filter'",[57,80139,31023],{"class":140},[57,80141,58010],{"class":70},[57,80143,168],{"class":140},[57,80145,58015],{"class":74},[57,80147,12708],{"class":140},[57,80149,495],{"class":5489},[57,80151,79995],{"class":136},[57,80153,15844],{"class":140},[57,80155,80156],{"class":59,"line":33581},[57,80157,80158],{"class":63},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[57,80160,80161,80163,80165,80168,80170,80172,80174,80176],{"class":59,"line":33587},[57,80162,58425],{"class":136},[57,80164,80004],{"class":140},[57,80166,80167],{"class":81},"tagName",[57,80169,12708],{"class":140},[57,80171,31734],{"class":81},[57,80173,80020],{"class":140},[57,80175,156],{"class":136},[57,80177,80178],{"class":140}," e.target\n",[57,80180,80181],{"class":59,"line":33605},[57,80182,80183],{"class":63},"      \u002F\u002F 判断\n",[57,80185,80186,80188,80190,80192,80194],{"class":59,"line":33619},[57,80187,54677],{"class":136},[57,80189,67231],{"class":140},[57,80191,54683],{"class":136},[57,80193,68453],{"class":74},[57,80195,12715],{"class":140},[57,80197,80198],{"class":59,"line":33628},[57,80199,80200],{"class":63},"        \u002F\u002F console.log(11)\n",[57,80202,80203],{"class":59,"line":33637},[57,80204,80205],{"class":63},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[57,80207,80208],{"class":59,"line":33646},[57,80209,80210],{"class":63},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[57,80212,80213,80215,80217,80219],{"class":59,"line":33655},[57,80214,52027],{"class":136},[57,80216,52030],{"class":140},[57,80218,156],{"class":136},[57,80220,80221],{"class":140}," goodsList\n",[57,80223,80224,80226,80229,80231,80234],{"class":59,"line":33661},[57,80225,2770],{"class":136},[57,80227,80228],{"class":140}," (dataset.index ",[57,80230,54683],{"class":136},[57,80232,80233],{"class":74}," '1'",[57,80235,12715],{"class":140},[57,80237,80238,80241,80243,80246,80249,80251,80253,80255,80258,80260,80262,80265,80267,80269,80271],{"class":59,"line":33667},[57,80239,80240],{"class":140},"          arr ",[57,80242,156],{"class":136},[57,80244,80245],{"class":140}," goodsList.",[57,80247,80248],{"class":70},"filter",[57,80250,168],{"class":140},[57,80252,79992],{"class":5489},[57,80254,79995],{"class":136},[57,80256,80257],{"class":140}," item.price ",[57,80259,1984],{"class":136},[57,80261,4366],{"class":81},[57,80263,80264],{"class":136}," &&",[57,80266,80257],{"class":140},[57,80268,1870],{"class":136},[57,80270,6027],{"class":81},[57,80272,238],{"class":140},[57,80274,80275,80278,80280,80282,80284,80286,80289],{"class":59,"line":33675},[57,80276,80277],{"class":140},"        } ",[57,80279,232],{"class":136},[57,80281,211],{"class":136},[57,80283,80228],{"class":140},[57,80285,54683],{"class":136},[57,80287,80288],{"class":74}," '2'",[57,80290,12715],{"class":140},[57,80292,80293,80295,80297,80299,80301,80303,80305,80307,80309,80311,80313,80315,80317,80319,80322],{"class":59,"line":33680},[57,80294,80240],{"class":140},[57,80296,156],{"class":136},[57,80298,80245],{"class":140},[57,80300,80248],{"class":70},[57,80302,168],{"class":140},[57,80304,79992],{"class":5489},[57,80306,79995],{"class":136},[57,80308,80257],{"class":140},[57,80310,1984],{"class":136},[57,80312,6027],{"class":81},[57,80314,80264],{"class":136},[57,80316,80257],{"class":140},[57,80318,1870],{"class":136},[57,80320,80321],{"class":81}," 300",[57,80323,238],{"class":140},[57,80325,80326,80328,80330,80332,80334,80336,80339],{"class":59,"line":33686},[57,80327,80277],{"class":140},[57,80329,232],{"class":136},[57,80331,211],{"class":136},[57,80333,80228],{"class":140},[57,80335,54683],{"class":136},[57,80337,80338],{"class":74}," '3'",[57,80340,12715],{"class":140},[57,80342,80343,80345,80347,80349,80351,80353,80355,80357,80359,80361,80363],{"class":59,"line":33697},[57,80344,80240],{"class":140},[57,80346,156],{"class":136},[57,80348,80245],{"class":140},[57,80350,80248],{"class":70},[57,80352,168],{"class":140},[57,80354,79992],{"class":5489},[57,80356,79995],{"class":136},[57,80358,80257],{"class":140},[57,80360,1984],{"class":136},[57,80362,80321],{"class":81},[57,80364,238],{"class":140},[57,80366,80367],{"class":59,"line":33703},[57,80368,2802],{"class":140},[57,80370,80371],{"class":59,"line":33723},[57,80372,80373],{"class":63},"        \u002F\u002F 渲染函数\n",[57,80375,80376,80378],{"class":59,"line":33729},[57,80377,70605],{"class":70},[57,80379,52609],{"class":140},[57,80381,80382],{"class":59,"line":33735},[57,80383,52595],{"class":140},[57,80385,80386],{"class":59,"line":33741},[57,80387,2673],{"emptyLinePlaceholder":350},[57,80389,80390],{"class":59,"line":33758},[57,80391,33658],{"class":140},[57,80393,80394,80396,80398],{"class":59,"line":33764},[57,80395,52614],{"class":140},[57,80397,52010],{"class":51497},[57,80399,51504],{"class":140},[57,80401,80402,80404,80406],{"class":59,"line":33770},[57,80403,51982],{"class":140},[57,80405,51997],{"class":51497},[57,80407,51504],{"class":140},[57,80409,80410],{"class":59,"line":33776},[57,80411,2673],{"emptyLinePlaceholder":350},[57,80413,80414,80416,80418],{"class":59,"line":33782},[57,80415,51982],{"class":140},[57,80417,50832],{"class":51497},[57,80419,51504],{"class":140},[365,80421,80423],{"id":80422},"_410-深入了解对象","4.10 深入了解对象",[394,80425,80427],{"id":80426},"_4101-创建对象","4.10.1 创建对象",[14,80429,80430],{},[44,80431],{"alt":46,"src":80432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,80434,80435],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[394,80437,80439],{"id":80438},"_4102-构造函数","4.10.2 构造函数",[14,80441,80442,80445],{},[33,80443,80444],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,80447,80448,80451],{},[33,80449,80450],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[49,80453,80455],{"className":50830,"code":80454,"language":50832,"meta":46,"style":46},"\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",[28,80456,80457,80465,80470,80491,80504,80516,80528,80532,80537,80564,80569,80596],{"__ignoreMap":46},[57,80458,80459,80461,80463],{"class":59,"line":60},[57,80460,1326],{"class":140},[57,80462,52010],{"class":51497},[57,80464,51504],{"class":140},[57,80466,80467],{"class":59,"line":67},[57,80468,80469],{"class":63},"\u002F\u002F例：\n",[57,80471,80472,80474,80477,80479,80481,80483,80485,80487,80489],{"class":59,"line":144},[57,80473,54646],{"class":136},[57,80475,80476],{"class":70}," Pig",[57,80478,168],{"class":140},[57,80480,80007],{"class":5489},[57,80482,273],{"class":140},[57,80484,70418],{"class":5489},[57,80486,273],{"class":140},[57,80488,70435],{"class":5489},[57,80490,12715],{"class":140},[57,80492,80493,80496,80499,80501],{"class":59,"line":150},[57,80494,80495],{"class":81},"    this",[57,80497,80498],{"class":140},".name",[57,80500,156],{"class":136},[57,80502,80503],{"class":140},"name\n",[57,80505,80506,80508,80511,80513],{"class":59,"line":162},[57,80507,80495],{"class":81},[57,80509,80510],{"class":140},".age",[57,80512,156],{"class":136},[57,80514,80515],{"class":140},"age\n",[57,80517,80518,80520,80523,80525],{"class":59,"line":180},[57,80519,80495],{"class":81},[57,80521,80522],{"class":140},".gender",[57,80524,156],{"class":136},[57,80526,80527],{"class":140},"gender    \n",[57,80529,80530],{"class":59,"line":186},[57,80531,1847],{"class":140},[57,80533,80534],{"class":59,"line":197},[57,80535,80536],{"class":63},"\u002F\u002F创建佩奇对象\n",[57,80538,80539,80541,80544,80546,80548,80550,80553,80555,80557,80559,80562],{"class":59,"line":241},[57,80540,7065],{"class":136},[57,80542,80543],{"class":81}," Peppa",[57,80545,11990],{"class":136},[57,80547,80476],{"class":70},[57,80549,168],{"class":140},[57,80551,80552],{"class":74},"'佩奇'",[57,80554,273],{"class":140},[57,80556,761],{"class":81},[57,80558,273],{"class":140},[57,80560,80561],{"class":74},"'女'",[57,80563,238],{"class":140},[57,80565,80566],{"class":59,"line":249},[57,80567,80568],{"class":63},"\u002F\u002F创建乔治对象\n",[57,80570,80571,80573,80576,80578,80580,80582,80585,80587,80589,80591,80594],{"class":59,"line":262},[57,80572,7065],{"class":136},[57,80574,80575],{"class":81}," George",[57,80577,11990],{"class":136},[57,80579,80476],{"class":70},[57,80581,168],{"class":140},[57,80583,80584],{"class":74},"'乔治'",[57,80586,273],{"class":140},[57,80588,270],{"class":81},[57,80590,273],{"class":140},[57,80592,80593],{"class":74},"'男'",[57,80595,238],{"class":140},[57,80597,80598,80600,80602],{"class":59,"line":281},[57,80599,51982],{"class":140},[57,80601,52010],{"class":51497},[57,80603,51504],{"class":140},[14,80605,80606],{},[44,80607],{"alt":46,"src":80608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,80610,80611],{},[44,80612],{"alt":46,"src":80613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,80615,80616],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,80618,80619],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,80621,80622],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,80624,80625],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,80627,80628],{},"这里用等号是因为：对象.属性=值",[14,80630,80631],{},"①利用对象字面量创建对象",[14,80633,80634],{},"const o={",[14,80636,80637],{},"name:'pink'",[14,80639,80640],{},"} ②利用new Object创建对象",[14,80642,80643],{},"const o=new Object({name:'pink'})",[14,80645,80646],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,80648,80649],{},"构造函数创建对象的执行过程：",[14,80651,80652],{},[44,80653],{"alt":46,"src":80654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[394,80656,80658],{"id":80657},"_4103-实例成员","4.10.3 实例成员",[14,80660,80661],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[377,80663,80664,80667,80670],{},[380,80665,80666],{},"实例对象的属性和方法即为实例成员",[380,80668,80669],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[380,80671,80672],{},"构造函数创建的实例对象彼此独立互不影响",[394,80674,80676],{"id":80675},"_4104-静态成员","4.10.4 静态成员",[14,80678,80679],{},[44,80680],{"alt":46,"src":80681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,80683,80684],{},"静态成员有Date.now() Math.PI Math.random()",[14,80686,80687],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,80689,80690],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,80692,80693],{},"function Pig(name) n {",[14,80695,80696],{},"this.name=name",[14,80698,1362],{},[14,80700,80701],{},"Pig.eyes=2",[14,80703,80704],{},"Pig.sayHai=function () { console.log(this) }",[14,80706,80707],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,80709,80710],{},"console.log(Pig.eyes) \u002F\u002F2",[14,80712,11605],{},[377,80714,80715,80718,80721,80724,80727],{},[380,80716,80717],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[380,80719,80720],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[380,80722,80723],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[380,80725,80726],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[380,80728,80729],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,80731,80732],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[394,80734,80736],{"id":80735},"_4105-内置构造函数","4.10.5 内置构造函数",[14,80738,80739],{},"内置构造函数包含：",[14,80741,80742],{},[44,80743],{"alt":46,"src":80744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,80746,80747],{},[44,80748],{"alt":46,"src":80749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,80751,80752],{},"这些基本数据类型，js对他们进行了包装",[52010,80754,80755],{},"\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",[22270,80757,80759],{"id":80758},"_41051-object","4.10.5.1 Object",[14,80761,80762],{},"Object 是内置的构造函数，用于创建普通对象",[14,80764,80765],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[49,80767,80769],{"className":50830,"code":80768,"language":50832,"meta":46,"style":46},"const user=new Object({name:'小明',age:15})\n",[28,80770,80771],{"__ignoreMap":46},[57,80772,80773],{"class":59,"line":60},[57,80774,80768],{"class":140},[14,80776,80777],{},"三个常用的静态方法：",[23182,80779,80781],{"id":80780},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,80783,80784],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,80786,80787],{},[44,80788],{"alt":46,"src":80789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,80791,80792],{},[44,80793],{"alt":46,"src":80794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[49,80796,80798],{"className":53264,"code":80797,"language":53266,"meta":46,"style":46},"\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",[28,80799,80800,80808,80816,80821,80826,80831,80836,80841,80846,80854],{"__ignoreMap":46},[57,80801,80802,80804,80806],{"class":59,"line":60},[57,80803,1326],{"class":140},[57,80805,51997],{"class":51497},[57,80807,51504],{"class":140},[57,80809,80810,80812,80814],{"class":59,"line":67},[57,80811,52341],{"class":140},[57,80813,52010],{"class":51497},[57,80815,51504],{"class":140},[57,80817,80818],{"class":59,"line":144},[57,80819,80820],{"class":140},"    const o = { name: 'pink', age: 6 }\n",[57,80822,80823],{"class":59,"line":150},[57,80824,80825],{"class":140},"    \u002F\u002F 获得所有属性名\n",[57,80827,80828],{"class":59,"line":162},[57,80829,80830],{"class":140},"    const arr = Object.keys(o)\n",[57,80832,80833],{"class":59,"line":180},[57,80834,80835],{"class":140},"    console.log(arr)\n",[57,80837,80838],{"class":59,"line":186},[57,80839,80840],{"class":140},"    \u002F\u002F 获得所有属性值\n",[57,80842,80843],{"class":59,"line":197},[57,80844,80845],{"class":140},"    console.log(Object.values(o))\n",[57,80847,80848,80850,80852],{"class":59,"line":241},[57,80849,52614],{"class":140},[57,80851,52010],{"class":51497},[57,80853,51504],{"class":140},[57,80855,80856,80858,80860],{"class":59,"line":249},[57,80857,51982],{"class":140},[57,80859,51997],{"class":51497},[57,80861,51504],{"class":140},[23182,80863,80865],{"id":80864},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,80867,80868],{},"Object.assign(oo,o)",[14,80870,80871],{},"后的东西添加给前 是追加",[14,80873,80874],{},[44,80875],{"alt":46,"src":80876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,80878,80879],{},[44,80880],{"alt":46,"src":80881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[49,80883,80885],{"className":53264,"code":80884,"language":53266,"meta":46,"style":46},"\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",[28,80886,80887,80895,80903,80907,80911,80915,80919,80923,80927,80932,80937,80942,80947,80952,80960],{"__ignoreMap":46},[57,80888,80889,80891,80893],{"class":59,"line":60},[57,80890,1326],{"class":140},[57,80892,51997],{"class":51497},[57,80894,51504],{"class":140},[57,80896,80897,80899,80901],{"class":59,"line":67},[57,80898,52341],{"class":140},[57,80900,52010],{"class":51497},[57,80902,51504],{"class":140},[57,80904,80905],{"class":59,"line":144},[57,80906,80820],{"class":140},[57,80908,80909],{"class":59,"line":150},[57,80910,80825],{"class":140},[57,80912,80913],{"class":59,"line":162},[57,80914,80830],{"class":140},[57,80916,80917],{"class":59,"line":180},[57,80918,80835],{"class":140},[57,80920,80921],{"class":59,"line":186},[57,80922,80840],{"class":140},[57,80924,80925],{"class":59,"line":197},[57,80926,80845],{"class":140},[57,80928,80929],{"class":59,"line":241},[57,80930,80931],{"class":140},"    const oo = {}\n",[57,80933,80934],{"class":59,"line":249},[57,80935,80936],{"class":140},"    Object.assign(oo, o)\n",[57,80938,80939],{"class":59,"line":262},[57,80940,80941],{"class":140},"    console.log(oo)\n",[57,80943,80944],{"class":59,"line":281},[57,80945,80946],{"class":140},"    Object.assign(o, { gender: '女' })\n",[57,80948,80949],{"class":59,"line":287},[57,80950,80951],{"class":140},"    console.log(o)\n",[57,80953,80954,80956,80958],{"class":59,"line":298},[57,80955,52614],{"class":140},[57,80957,52010],{"class":51497},[57,80959,51504],{"class":140},[57,80961,80962,80964,80966],{"class":59,"line":311},[57,80963,51982],{"class":140},[57,80965,51997],{"class":51497},[57,80967,51504],{"class":140},[14,80969,80970],{},[44,80971],{"alt":46,"src":80972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22270,80974,80976],{"id":80975},"_41052-array","4.10.5.2 Array",[14,80978,80979],{},"Array 是内置的构造函数，用于创建数组",[14,80981,80982],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[49,80984,80986],{"className":50830,"code":80985,"language":50832,"meta":46,"style":46},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[28,80987,80988,80993],{"__ignoreMap":46},[57,80989,80990],{"class":59,"line":60},[57,80991,80992],{"class":140},"const arr=new Array(3,5)\n",[57,80994,80995],{"class":59,"line":67},[57,80996,80997],{"class":140},"console.log(arr)  \u002F\u002F[3,5]\n",[14,80999,81000],{},"Array的实例方法，这个方法是实例成员",[14,81002,81003],{},[44,81004],{"alt":46,"src":81005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23182,81007,81009],{"id":81008},"_410521-reduce","4.10.5.2.1 reduce",[14,81011,81012],{},[44,81013],{"alt":46,"src":81014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[49,81016,81018],{"className":53264,"code":81017,"language":53266,"meta":46,"style":46},"\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",[28,81019,81020,81028,81036,81041,81046,81051,81056,81060,81065,81070,81075,81079,81084,81089,81093,81098,81103,81108,81116],{"__ignoreMap":46},[57,81021,81022,81024,81026],{"class":59,"line":60},[57,81023,1326],{"class":140},[57,81025,51997],{"class":51497},[57,81027,51504],{"class":140},[57,81029,81030,81032,81034],{"class":59,"line":67},[57,81031,52341],{"class":140},[57,81033,52010],{"class":51497},[57,81035,51504],{"class":140},[57,81037,81038],{"class":59,"line":144},[57,81039,81040],{"class":140},"    const arr = [1, 5, 8]\n",[57,81042,81043],{"class":59,"line":150},[57,81044,81045],{"class":140},"    \u002F\u002F 1.没有初始值\n",[57,81047,81048],{"class":59,"line":162},[57,81049,81050],{"class":140},"    const total = arr.reduce(function (prev, current) {\n",[57,81052,81053],{"class":59,"line":180},[57,81054,81055],{"class":140},"      return prev + current\n",[57,81057,81058],{"class":59,"line":186},[57,81059,33658],{"class":140},[57,81061,81062],{"class":59,"line":197},[57,81063,81064],{"class":140},"    console.log(total)   \u002F\u002F14\n",[57,81066,81067],{"class":59,"line":241},[57,81068,81069],{"class":140},"    \u002F\u002F 2.有初始值\n",[57,81071,81072],{"class":59,"line":249},[57,81073,81074],{"class":140},"    const total1 = arr.reduce(function (prev, current) {\n",[57,81076,81077],{"class":59,"line":262},[57,81078,81055],{"class":140},[57,81080,81081],{"class":59,"line":281},[57,81082,81083],{"class":140},"    }, 10)\n",[57,81085,81086],{"class":59,"line":287},[57,81087,81088],{"class":140},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[57,81090,81091],{"class":59,"line":298},[57,81092,2673],{"emptyLinePlaceholder":350},[57,81094,81095],{"class":59,"line":311},[57,81096,81097],{"class":140},"    \u002F\u002F 3.箭头函数写法\n",[57,81099,81100],{"class":59,"line":322},[57,81101,81102],{"class":140},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[57,81104,81105],{"class":59,"line":1929},[57,81106,81107],{"class":140},"    console.log(total2)   \u002F\u002F24\n",[57,81109,81110,81112,81114],{"class":59,"line":1950},[57,81111,52614],{"class":140},[57,81113,52010],{"class":51497},[57,81115,51504],{"class":140},[57,81117,81118,81120,81122],{"class":59,"line":1955},[57,81119,51982],{"class":140},[57,81121,51997],{"class":51497},[57,81123,51504],{"class":140},[14,81125,81126],{},"执行过程：",[377,81128,81129,81132,81135],{},[380,81130,81131],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[380,81133,81134],{},"每一次循环，把返回值给作为下一次循环的上一次值",[380,81136,81137],{},"如果有起始值，则起始值作为上一次值",[49,81139,81141],{"className":53264,"code":81140,"language":53266,"meta":46,"style":46},"\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",[28,81142,81143,81151,81159,81163,81167,81171,81175,81179,81183,81188,81193,81198,81203,81208,81212,81216,81220,81224,81228,81232,81237,81241,81246,81250,81255,81260,81264,81268,81272,81280],{"__ignoreMap":46},[57,81144,81145,81147,81149],{"class":59,"line":60},[57,81146,1326],{"class":140},[57,81148,51997],{"class":51497},[57,81150,51504],{"class":140},[57,81152,81153,81155,81157],{"class":59,"line":67},[57,81154,52341],{"class":140},[57,81156,52010],{"class":51497},[57,81158,51504],{"class":140},[57,81160,81161],{"class":59,"line":144},[57,81162,81040],{"class":140},[57,81164,81165],{"class":59,"line":150},[57,81166,81045],{"class":140},[57,81168,81169],{"class":59,"line":162},[57,81170,81050],{"class":140},[57,81172,81173],{"class":59,"line":180},[57,81174,81055],{"class":140},[57,81176,81177],{"class":59,"line":186},[57,81178,33658],{"class":140},[57,81180,81181],{"class":59,"line":197},[57,81182,81064],{"class":140},[57,81184,81185],{"class":59,"line":241},[57,81186,81187],{"class":140},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[57,81189,81190],{"class":59,"line":249},[57,81191,81192],{"class":140},"    \u002F\u002F     1              5                    6\n",[57,81194,81195],{"class":59,"line":262},[57,81196,81197],{"class":140},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[57,81199,81200],{"class":59,"line":281},[57,81201,81202],{"class":140},"    \u002F\u002F     6              8                    14\n",[57,81204,81205],{"class":59,"line":287},[57,81206,81207],{"class":140},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[57,81209,81210],{"class":59,"line":298},[57,81211,81069],{"class":140},[57,81213,81214],{"class":59,"line":311},[57,81215,81074],{"class":140},[57,81217,81218],{"class":59,"line":322},[57,81219,81055],{"class":140},[57,81221,81222],{"class":59,"line":1929},[57,81223,81083],{"class":140},[57,81225,81226],{"class":59,"line":1950},[57,81227,81088],{"class":140},[57,81229,81230],{"class":59,"line":1955},[57,81231,81187],{"class":140},[57,81233,81234],{"class":59,"line":1969},[57,81235,81236],{"class":140},"    \u002F\u002F     10             1                     11\n",[57,81238,81239],{"class":59,"line":1974},[57,81240,81197],{"class":140},[57,81242,81243],{"class":59,"line":2001},[57,81244,81245],{"class":140},"    \u002F\u002F     11             5                    16\n",[57,81247,81248],{"class":59,"line":2006},[57,81249,81197],{"class":140},[57,81251,81252],{"class":59,"line":2023},[57,81253,81254],{"class":140},"    \u002F\u002F     16             8                    24\n",[57,81256,81257],{"class":59,"line":2028},[57,81258,81259],{"class":140},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[57,81261,81262],{"class":59,"line":2033},[57,81263,81097],{"class":140},[57,81265,81266],{"class":59,"line":2038},[57,81267,81102],{"class":140},[57,81269,81270],{"class":59,"line":2052},[57,81271,81107],{"class":140},[57,81273,81274,81276,81278],{"class":59,"line":2057},[57,81275,52614],{"class":140},[57,81277,52010],{"class":51497},[57,81279,51504],{"class":140},[57,81281,81282,81284,81286],{"class":59,"line":2850},[57,81283,51982],{"class":140},[57,81285,51997],{"class":51497},[57,81287,51504],{"class":140},[23182,81289,81291],{"id":81290},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,81293,81294],{},[44,81295],{"alt":46,"src":81296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[49,81298,81300],{"className":53264,"code":81299,"language":53266,"meta":46,"style":46},"\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",[28,81301,81302,81310,81318,81323,81328,81333,81338,81342,81347,81352,81357,81362,81367,81372,81376,81381,81385,81390,81398],{"__ignoreMap":46},[57,81303,81304,81306,81308],{"class":59,"line":60},[57,81305,1326],{"class":140},[57,81307,51997],{"class":51497},[57,81309,51504],{"class":140},[57,81311,81312,81314,81316],{"class":59,"line":67},[57,81313,52341],{"class":140},[57,81315,52010],{"class":51497},[57,81317,51504],{"class":140},[57,81319,81320],{"class":59,"line":144},[57,81321,81322],{"class":140},"    const arr = [\n",[57,81324,81325],{"class":59,"line":150},[57,81326,81327],{"class":140},"      { name: '张三', salary: 10000 },\n",[57,81329,81330],{"class":59,"line":162},[57,81331,81332],{"class":140},"      { name: '李四', salary: 10000 },\n",[57,81334,81335],{"class":59,"line":180},[57,81336,81337],{"class":140},"      { name: '王五', salary: 10000 }\n",[57,81339,81340],{"class":59,"line":186},[57,81341,53306],{"class":140},[57,81343,81344],{"class":59,"line":197},[57,81345,81346],{"class":140},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[57,81348,81349],{"class":59,"line":241},[57,81350,81351],{"class":140},"    \u002F\u002F prev是累计值\n",[57,81353,81354],{"class":59,"line":249},[57,81355,81356],{"class":140},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[57,81358,81359],{"class":59,"line":262},[57,81360,81361],{"class":140},"    console.log(total)\n",[57,81363,81364],{"class":59,"line":281},[57,81365,81366],{"class":140},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[57,81368,81369],{"class":59,"line":287},[57,81370,81371],{"class":140},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[57,81373,81374],{"class":59,"line":298},[57,81375,81366],{"class":140},[57,81377,81378],{"class":59,"line":311},[57,81379,81380],{"class":140},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[57,81382,81383],{"class":59,"line":322},[57,81384,81366],{"class":140},[57,81386,81387],{"class":59,"line":1929},[57,81388,81389],{"class":140},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[57,81391,81392,81394,81396],{"class":59,"line":1950},[57,81393,52614],{"class":140},[57,81395,52010],{"class":51497},[57,81397,51504],{"class":140},[57,81399,81400,81402,81404],{"class":59,"line":1955},[57,81401,51982],{"class":140},[57,81403,51997],{"class":51497},[57,81405,51504],{"class":140},[23182,81407,81409],{"id":81408},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,81411,81412],{},[44,81413],{"alt":46,"src":81414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,81416,81417],{},[44,81418],{"alt":46,"src":81419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[377,81421,81422],{},[380,81423,81424],{},"find()",[14,81426,81427],{},"循环查找，找到第一个就ok",[14,81429,81430],{},[18,81431,81434],{"href":81432,"rel":81433},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[22],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[49,81436,81438],{"className":50830,"code":81437,"language":50832,"meta":46,"style":46},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[28,81439,81440,81445,81450],{"__ignoreMap":46},[57,81441,81442],{"class":59,"line":60},[57,81443,81444],{"class":140},"const array1 = [5, 12, 8, 130, 44]\n",[57,81446,81447],{"class":59,"line":67},[57,81448,81449],{"class":140},"const found = array1.find((element) => element > 10)\n",[57,81451,81452],{"class":59,"line":144},[57,81453,81454],{"class":140},"console.log(found)  \u002F\u002F12\n",[14,81456,81457,81459,81460,81465,81466,81469,81470,81472,81473,81478,81479,81481,81482,81484,81485,81487,81488],{},[28,81458,81424],{}," 方法是一个",[18,81461,81464],{"href":81462,"rel":81463},"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",[22],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[28,81467,81468],{},"callbackFn"," 函数，直到 ",[28,81471,81468],{}," 返回一个",[18,81474,81477],{"href":81475,"rel":81476},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[22],"真值","。然后 ",[28,81480,81424],{}," 返回该元素并停止迭代数组。如果 ",[28,81483,81468],{}," 从未返回真值，则 ",[28,81486,81424],{}," 返回 ",[28,81489,81490],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[49,81492,81494],{"className":53264,"code":81493,"language":53266,"meta":46,"style":46},"\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",[28,81495,81496,81504,81512,81517,81522,81527,81531,81536,81541,81545,81550,81555,81559,81563,81568,81573,81577,81581,81586,81591,81596,81601,81606,81610,81615,81620,81625,81630,81634,81639,81647],{"__ignoreMap":46},[57,81497,81498,81500,81502],{"class":59,"line":60},[57,81499,1326],{"class":140},[57,81501,51997],{"class":51497},[57,81503,51504],{"class":140},[57,81505,81506,81508,81510],{"class":59,"line":67},[57,81507,52341],{"class":140},[57,81509,52010],{"class":51497},[57,81511,51504],{"class":140},[57,81513,81514],{"class":59,"line":144},[57,81515,81516],{"class":140},"    const arr = ['red', 'blue', 'green']\n",[57,81518,81519],{"class":59,"line":150},[57,81520,81521],{"class":140},"    const found = arr.find(item => item === 'pink')\n",[57,81523,81524],{"class":59,"line":162},[57,81525,81526],{"class":140},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[57,81528,81529],{"class":59,"line":180},[57,81530,2673],{"emptyLinePlaceholder":350},[57,81532,81533],{"class":59,"line":186},[57,81534,81535],{"class":140},"    \u002F\u002F 使用场景，用于查找数据\n",[57,81537,81538],{"class":59,"line":197},[57,81539,81540],{"class":140},"    const arr1 = [\n",[57,81542,81543],{"class":59,"line":241},[57,81544,79583],{"class":140},[57,81546,81547],{"class":59,"line":249},[57,81548,81549],{"class":140},"        name: '小米',\n",[57,81551,81552],{"class":59,"line":262},[57,81553,81554],{"class":140},"        price: 1999\n",[57,81556,81557],{"class":59,"line":281},[57,81558,78089],{"class":140},[57,81560,81561],{"class":59,"line":287},[57,81562,79583],{"class":140},[57,81564,81565],{"class":59,"line":298},[57,81566,81567],{"class":140},"        name: '华为',\n",[57,81569,81570],{"class":59,"line":311},[57,81571,81572],{"class":140},"        price: 3999\n",[57,81574,81575],{"class":59,"line":322},[57,81576,52595],{"class":140},[57,81578,81579],{"class":59,"line":1929},[57,81580,53306],{"class":140},[57,81582,81583],{"class":59,"line":1950},[57,81584,81585],{"class":140},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[57,81587,81588],{"class":59,"line":1955},[57,81589,81590],{"class":140},"    \u002F\u002F const found1 = arr1.find(item => {\n",[57,81592,81593],{"class":59,"line":1969},[57,81594,81595],{"class":140},"    \u002F\u002F   if (item.name === '小米') {\n",[57,81597,81598],{"class":59,"line":1974},[57,81599,81600],{"class":140},"    \u002F\u002F     return item\n",[57,81602,81603],{"class":59,"line":2001},[57,81604,81605],{"class":140},"    \u002F\u002F   }\n",[57,81607,81608],{"class":59,"line":2006},[57,81609,63487],{"class":140},[57,81611,81612],{"class":59,"line":2023},[57,81613,81614],{"class":140},"    \u002F\u002F 另一种写法\n",[57,81616,81617],{"class":59,"line":2028},[57,81618,81619],{"class":140},"    const found1 = arr1.find(item => {\n",[57,81621,81622],{"class":59,"line":2033},[57,81623,81624],{"class":140},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[57,81626,81627],{"class":59,"line":2038},[57,81628,81629],{"class":140},"      return item.name = '小米'\n",[57,81631,81632],{"class":59,"line":2052},[57,81633,33658],{"class":140},[57,81635,81636],{"class":59,"line":2057},[57,81637,81638],{"class":140},"    console.log(found1)\n",[57,81640,81641,81643,81645],{"class":59,"line":2850},[57,81642,52614],{"class":140},[57,81644,52010],{"class":51497},[57,81646,51504],{"class":140},[57,81648,81649,81651,81653],{"class":59,"line":2864},[57,81650,51982],{"class":140},[57,81652,51997],{"class":51497},[57,81654,51504],{"class":140},[14,81656,81657],{},[44,81658],{"alt":46,"src":81659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,81661,81662],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[377,81664,81665],{"start":67},[380,81666,81667],{},"every()返回的是布尔值",[14,81669,81670],{},[18,81671,81674],{"href":81672,"rel":81673},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[22],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,81676,81677],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,81679,81680],{},"some是只有有一个就没问题",[14,81682,81683],{},"every是必须全是才行",[49,81685,81689],{"className":81686,"code":81687,"language":81688,"meta":46,"style":46},"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",[28,81690,81691,81707,81721,81725,81734],{"__ignoreMap":46},[57,81692,81693,81695,81698,81700,81702,81705],{"class":59,"line":60},[57,81694,54646],{"class":136},[57,81696,81697],{"class":140}," isBigEnough(element, ",[57,81699,74255],{"class":136},[57,81701,12708],{"class":140},[57,81703,81704],{"class":136},"array",[57,81706,12715],{"class":140},[57,81708,81709,81712,81715,81717,81719],{"class":59,"line":67},[57,81710,81711],{"class":136},"  return",[57,81713,81714],{"class":140}," element ",[57,81716,1984],{"class":136},[57,81718,2311],{"class":81},[57,81720,1576],{"class":140},[57,81722,81723],{"class":59,"line":144},[57,81724,1847],{"class":140},[57,81726,81727,81730,81732],{"class":59,"line":150},[57,81728,81729],{"class":140},"[12, 5, 8, 130, 44].every(isBigEnough); ",[57,81731,33526],{"class":136},[57,81733,54713],{"class":140},[57,81735,81736,81739,81741],{"class":59,"line":162},[57,81737,81738],{"class":140},"[12, 54, 18, 130, 44].every(isBigEnough); ",[57,81740,33526],{"class":136},[57,81742,58137],{"class":140},[49,81744,81746],{"className":53264,"code":81745,"language":53266,"meta":46,"style":46},"\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",[28,81747,81748,81756,81764,81769,81773,81778,81783,81791],{"__ignoreMap":46},[57,81749,81750,81752,81754],{"class":59,"line":60},[57,81751,1326],{"class":140},[57,81753,51997],{"class":51497},[57,81755,51504],{"class":140},[57,81757,81758,81760,81762],{"class":59,"line":67},[57,81759,52341],{"class":140},[57,81761,52010],{"class":51497},[57,81763,51504],{"class":140},[57,81765,81766],{"class":59,"line":144},[57,81767,81768],{"class":140},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[57,81770,81771],{"class":59,"line":150},[57,81772,78519],{"class":140},[57,81774,81775],{"class":59,"line":162},[57,81776,81777],{"class":140},"    const flag = arr.every(item => item >= 10)\n",[57,81779,81780],{"class":59,"line":180},[57,81781,81782],{"class":140},"    console.log(flag)    \u002F\u002Ftrue\n",[57,81784,81785,81787,81789],{"class":59,"line":186},[57,81786,52614],{"class":140},[57,81788,52010],{"class":51497},[57,81790,51504],{"class":140},[57,81792,81793,81795,81797],{"class":59,"line":197},[57,81794,51982],{"class":140},[57,81796,51997],{"class":51497},[57,81798,51504],{"class":140},[49,81800,81802],{"className":53264,"code":81801,"language":53266,"meta":46,"style":46},"\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",[28,81803,81804,81812,81820,81824,81829,81834,81839,81847],{"__ignoreMap":46},[57,81805,81806,81808,81810],{"class":59,"line":60},[57,81807,1326],{"class":140},[57,81809,51997],{"class":51497},[57,81811,51504],{"class":140},[57,81813,81814,81816,81818],{"class":59,"line":67},[57,81815,52341],{"class":140},[57,81817,52010],{"class":51497},[57,81819,51504],{"class":140},[57,81821,81822],{"class":59,"line":144},[57,81823,81768],{"class":140},[57,81825,81826],{"class":59,"line":150},[57,81827,81828],{"class":140},"    const arr = [10, 0, 5]\n",[57,81830,81831],{"class":59,"line":162},[57,81832,81833],{"class":140},"    const flag = arr.some(item => item >= 10)\n",[57,81835,81836],{"class":59,"line":180},[57,81837,81838],{"class":140},"    console.log(flag)   \u002F\u002Ftrue\n",[57,81840,81841,81843,81845],{"class":59,"line":186},[57,81842,52614],{"class":140},[57,81844,52010],{"class":51497},[57,81846,51504],{"class":140},[57,81848,81849,81851,81853],{"class":59,"line":197},[57,81850,51982],{"class":140},[57,81852,51997],{"class":51497},[57,81854,51504],{"class":140},[23182,81856,81858],{"id":81857},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,81860,81861],{},[44,81862],{"alt":46,"src":81863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[49,81865,81867],{"className":50830,"code":81866,"language":50832,"meta":46,"style":46},"\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",[28,81868,81869,81879,81893,81897,81905,81919,81939,81951,81959,81966,81978,81990,82002,82014,82024,82034,82038,82046,82054,82058,82066,82078,82086,82108,82113,82118,82151,82159,82167,82171],{"__ignoreMap":46},[57,81870,81871,81873,81875,81877],{"class":59,"line":60},[57,81872,51494],{"class":140},[57,81874,51498],{"class":51497},[57,81876,51501],{"class":70},[57,81878,51504],{"class":140},[57,81880,81881,81883,81885,81887,81889,81891],{"class":59,"line":67},[57,81882,1326],{"class":140},[57,81884,50832],{"class":51497},[57,81886,51513],{"class":70},[57,81888,156],{"class":140},[57,81890,51518],{"class":74},[57,81892,51504],{"class":140},[57,81894,81895],{"class":59,"line":144},[57,81896,2673],{"emptyLinePlaceholder":350},[57,81898,81899,81901,81903],{"class":59,"line":150},[57,81900,1326],{"class":140},[57,81902,51531],{"class":51497},[57,81904,51504],{"class":140},[57,81906,81907,81909,81911,81913,81915,81917],{"class":59,"line":162},[57,81908,52341],{"class":140},[57,81910,51541],{"class":51497},[57,81912,51544],{"class":70},[57,81914,156],{"class":140},[57,81916,51549],{"class":74},[57,81918,51504],{"class":140},[57,81920,81921,81923,81925,81927,81929,81931,81933,81935,81937],{"class":59,"line":180},[57,81922,52341],{"class":140},[57,81924,51541],{"class":51497},[57,81926,15192],{"class":70},[57,81928,156],{"class":140},[57,81930,51588],{"class":74},[57,81932,51568],{"class":70},[57,81934,156],{"class":140},[57,81936,51595],{"class":74},[57,81938,51504],{"class":140},[57,81940,81941,81943,81945,81947,81949],{"class":59,"line":186},[57,81942,52341],{"class":140},[57,81944,51604],{"class":51497},[57,81946,51607],{"class":140},[57,81948,51604],{"class":51497},[57,81950,51504],{"class":140},[57,81952,81953,81955,81957],{"class":59,"line":197},[57,81954,52341],{"class":140},[57,81956,342],{"class":51497},[57,81958,51504],{"class":140},[57,81960,81961,81964],{"class":59,"line":241},[57,81962,81963],{"class":51497},"    div",[57,81965,15844],{"class":140},[57,81967,81968,81970,81972,81974,81976],{"class":59,"line":249},[57,81969,54968],{"class":81},[57,81971,51634],{"class":140},[57,81973,1996],{"class":81},[57,81975,51689],{"class":136},[57,81977,1576],{"class":140},[57,81979,81980,81982,81984,81986,81988],{"class":59,"line":262},[57,81981,54982],{"class":81},[57,81983,51634],{"class":140},[57,81985,817],{"class":81},[57,81987,51689],{"class":136},[57,81989,1576],{"class":140},[57,81991,81992,81994,81996,81998,82000],{"class":59,"line":281},[57,81993,57556],{"class":81},[57,81995,51634],{"class":140},[57,81997,817],{"class":81},[57,81999,51689],{"class":136},[57,82001,1576],{"class":140},[57,82003,82004,82006,82008,82010,82012],{"class":59,"line":287},[57,82005,65330],{"class":81},[57,82007,51634],{"class":140},[57,82009,914],{"class":81},[57,82011,51689],{"class":136},[57,82013,1576],{"class":140},[57,82015,82016,82018,82020,82022],{"class":59,"line":298},[57,82017,57483],{"class":81},[57,82019,51634],{"class":140},[57,82021,51789],{"class":81},[57,82023,1576],{"class":140},[57,82025,82026,82028,82030,82032],{"class":59,"line":311},[57,82027,55081],{"class":81},[57,82029,51634],{"class":140},[57,82031,51842],{"class":81},[57,82033,1576],{"class":140},[57,82035,82036],{"class":59,"line":322},[57,82037,2460],{"class":140},[57,82039,82040,82042,82044],{"class":59,"line":1929},[57,82041,52614],{"class":140},[57,82043,342],{"class":51497},[57,82045,51504],{"class":140},[57,82047,82048,82050,82052],{"class":59,"line":1950},[57,82049,51982],{"class":140},[57,82051,51531],{"class":51497},[57,82053,51504],{"class":140},[57,82055,82056],{"class":59,"line":1955},[57,82057,2673],{"emptyLinePlaceholder":350},[57,82059,82060,82062,82064],{"class":59,"line":1969},[57,82061,1326],{"class":140},[57,82063,51997],{"class":51497},[57,82065,51504],{"class":140},[57,82067,82068,82070,82072,82074,82076],{"class":59,"line":1974},[57,82069,52341],{"class":140},[57,82071,51808],{"class":51497},[57,82073,55511],{"class":140},[57,82075,51808],{"class":51497},[57,82077,51504],{"class":140},[57,82079,82080,82082,82084],{"class":59,"line":2001},[57,82081,52341],{"class":140},[57,82083,52010],{"class":51497},[57,82085,51504],{"class":140},[57,82087,82088,82090,82093,82095,82098,82101,82103,82106],{"class":59,"line":2006},[57,82089,11494],{"class":136},[57,82091,82092],{"class":81}," spec",[57,82094,13837],{"class":136},[57,82096,82097],{"class":140}," { size: ",[57,82099,82100],{"class":74},"'40cm*40cm'",[57,82102,55661],{"class":140},[57,82104,82105],{"class":74},"'黑色'",[57,82107,55801],{"class":140},[57,82109,82110],{"class":59,"line":2023},[57,82111,82112],{"class":63},"    \u002F\u002F const arr = Object.values(spec)\n",[57,82114,82115],{"class":59,"line":2028},[57,82116,82117],{"class":63},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[57,82119,82120,82122,82124,82126,82129,82131,82133,82136,82139,82142,82144,82146,82149],{"class":59,"line":2033},[57,82121,52604],{"class":140},[57,82123,54596],{"class":70},[57,82125,168],{"class":140},[57,82127,82128],{"class":74},"'div'",[57,82130,74446],{"class":140},[57,82132,156],{"class":136},[57,82134,82135],{"class":140}," Object.",[57,82137,82138],{"class":70},"values",[57,82140,82141],{"class":140},"(spec).",[57,82143,74420],{"class":70},[57,82145,168],{"class":140},[57,82147,82148],{"class":74},"'\u002F'",[57,82150,238],{"class":140},[57,82152,82153,82155,82157],{"class":59,"line":2038},[57,82154,52614],{"class":140},[57,82156,52010],{"class":51497},[57,82158,51504],{"class":140},[57,82160,82161,82163,82165],{"class":59,"line":2052},[57,82162,51982],{"class":140},[57,82164,51997],{"class":51497},[57,82166,51504],{"class":140},[57,82168,82169],{"class":59,"line":2057},[57,82170,2673],{"emptyLinePlaceholder":350},[57,82172,82173,82175,82177],{"class":59,"line":2850},[57,82174,51982],{"class":140},[57,82176,50832],{"class":51497},[57,82178,51504],{"class":140},[14,82180,82181],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23182,82183,82185],{"id":82184},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,82187,82188],{},"静态方法，将伪数组转换为真数组",[14,82190,82191],{},[44,82192],{"alt":46,"src":82193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[49,82195,82197],{"className":53264,"code":82196,"language":53266,"meta":46,"style":46},"\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",[28,82198,82199,82207,82215,82227,82239,82251,82259,82267,82272,82277,82282,82287,82295],{"__ignoreMap":46},[57,82200,82201,82203,82205],{"class":59,"line":60},[57,82202,1326],{"class":140},[57,82204,51997],{"class":51497},[57,82206,51504],{"class":140},[57,82208,82209,82211,82213],{"class":59,"line":67},[57,82210,52341],{"class":140},[57,82212,1422],{"class":51497},[57,82214,51504],{"class":140},[57,82216,82217,82219,82221,82223,82225],{"class":59,"line":144},[57,82218,51538],{"class":140},[57,82220,380],{"class":51497},[57,82222,55511],{"class":140},[57,82224,380],{"class":51497},[57,82226,51504],{"class":140},[57,82228,82229,82231,82233,82235,82237],{"class":59,"line":150},[57,82230,51538],{"class":140},[57,82232,380],{"class":51497},[57,82234,55511],{"class":140},[57,82236,380],{"class":51497},[57,82238,51504],{"class":140},[57,82240,82241,82243,82245,82247,82249],{"class":59,"line":162},[57,82242,51538],{"class":140},[57,82244,380],{"class":51497},[57,82246,55511],{"class":140},[57,82248,380],{"class":51497},[57,82250,51504],{"class":140},[57,82252,82253,82255,82257],{"class":59,"line":180},[57,82254,52614],{"class":140},[57,82256,1422],{"class":51497},[57,82258,51504],{"class":140},[57,82260,82261,82263,82265],{"class":59,"line":186},[57,82262,52341],{"class":140},[57,82264,52010],{"class":51497},[57,82266,51504],{"class":140},[57,82268,82269],{"class":59,"line":197},[57,82270,82271],{"class":140},"    const lis = document.querySelectorAll('li')\n",[57,82273,82274],{"class":59,"line":241},[57,82275,82276],{"class":140},"    const liss = Array.from(lis)\n",[57,82278,82279],{"class":59,"line":249},[57,82280,82281],{"class":140},"    liss.pop()\n",[57,82283,82284],{"class":59,"line":262},[57,82285,82286],{"class":140},"    console.log(liss)\n",[57,82288,82289,82291,82293],{"class":59,"line":281},[57,82290,52614],{"class":140},[57,82292,52010],{"class":51497},[57,82294,51504],{"class":140},[57,82296,82297,82299,82301],{"class":59,"line":287},[57,82298,51982],{"class":140},[57,82300,51997],{"class":51497},[57,82302,51504],{"class":140},[14,82304,82305],{},[44,82306],{"alt":46,"src":82307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22270,82309,82311],{"id":82310},"_41053-string","4.10.5.3 String",[14,82313,82314],{},[44,82315],{"alt":46,"src":82316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23182,82318,82320],{"id":82319},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[49,82322,82324],{"className":53264,"code":82323,"language":53266,"meta":46,"style":46},"\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",[28,82325,82326,82334,82342,82347,82352,82357,82361,82366,82371,82376,82384],{"__ignoreMap":46},[57,82327,82328,82330,82332],{"class":59,"line":60},[57,82329,1326],{"class":140},[57,82331,51997],{"class":51497},[57,82333,51504],{"class":140},[57,82335,82336,82338,82340],{"class":59,"line":67},[57,82337,52341],{"class":140},[57,82339,52010],{"class":51497},[57,82341,51504],{"class":140},[57,82343,82344],{"class":59,"line":144},[57,82345,82346],{"class":140},"    \u002F\u002F 把字符串转化为数组\n",[57,82348,82349],{"class":59,"line":150},[57,82350,82351],{"class":140},"    const str = 'pink,red'\n",[57,82353,82354],{"class":59,"line":162},[57,82355,82356],{"class":140},"    const arr = str.split(',')\n",[57,82358,82359],{"class":59,"line":180},[57,82360,80835],{"class":140},[57,82362,82363],{"class":59,"line":186},[57,82364,82365],{"class":140},"    const str1 = '2025-8-25'\n",[57,82367,82368],{"class":59,"line":197},[57,82369,82370],{"class":140},"    const arr1 = str1.split('-')\n",[57,82372,82373],{"class":59,"line":241},[57,82374,82375],{"class":140},"    console.log(arr1)\n",[57,82377,82378,82380,82382],{"class":59,"line":249},[57,82379,52614],{"class":140},[57,82381,52010],{"class":51497},[57,82383,51504],{"class":140},[57,82385,82386,82388,82390],{"class":59,"line":262},[57,82387,51982],{"class":140},[57,82389,51997],{"class":51497},[57,82391,51504],{"class":140},[23182,82393,82395],{"id":82394},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,82397,5454],{},[14,82399,82400],{},"substring(indexStart)",[14,82402,82403],{},"substring(indexStart, indexEnd)",[1422,82405,82406,82417,82429,82439],{},[380,82407,82408,82409,82412,82413,82416],{},"如果省略了 ",[28,82410,82411],{},"indexEnd","，则 ",[28,82414,82415],{},"substring()"," 提取字符直到字符串的末尾",[380,82418,82419,82420,82423,82424,82412,82426,82428],{},"如果 ",[28,82421,82422],{},"indexStart"," 等于 ",[28,82425,82411],{},[28,82427,82415],{}," 返回一个空字符串",[380,82430,82419,82431,82433,82434,82412,82436,82438],{},[28,82432,82422],{}," 大于 ",[28,82435,82411],{},[28,82437,82415],{}," 的效果就像交换了这两个参数一样",[380,82440,82441],{},"结束的索引号不包含想要截取的部分",[49,82443,82445],{"className":81686,"code":82444,"language":81688,"meta":46,"style":46},"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",[28,82446,82447,82459,82463,82497,82527,82531,82562,82566,82593,82623,82653,82657,82688],{"__ignoreMap":46},[57,82448,82449,82452,82454,82457],{"class":59,"line":60},[57,82450,82451],{"class":140},"const anyString ",[57,82453,156],{"class":136},[57,82455,82456],{"class":74}," \"Mozilla\"",[57,82458,1576],{"class":140},[57,82460,82461],{"class":59,"line":67},[57,82462,2673],{"emptyLinePlaceholder":350},[57,82464,82465,82468,82470,82472,82474,82477,82479,82482,82484,82486,82488,82490,82492,82494],{"class":59,"line":144},[57,82466,82467],{"class":81},"console",[57,82469,974],{"class":140},[57,82471,58444],{"class":81},[57,82473,168],{"class":140},[57,82475,82476],{"class":81},"anyString",[57,82478,974],{"class":140},[57,82480,82481],{"class":81},"substring",[57,82483,168],{"class":140},[57,82485,226],{"class":81},[57,82487,12708],{"class":140},[57,82489,635],{"class":81},[57,82491,75450],{"class":140},[57,82493,33526],{"class":136},[57,82495,82496],{"class":74}," 'M'\n",[57,82498,82499,82501,82503,82505,82507,82509,82511,82513,82515,82517,82519,82521,82523,82525],{"class":59,"line":150},[57,82500,82467],{"class":81},[57,82502,974],{"class":140},[57,82504,58444],{"class":81},[57,82506,168],{"class":140},[57,82508,82476],{"class":81},[57,82510,974],{"class":140},[57,82512,82481],{"class":81},[57,82514,168],{"class":140},[57,82516,635],{"class":81},[57,82518,12708],{"class":140},[57,82520,226],{"class":81},[57,82522,75450],{"class":140},[57,82524,33526],{"class":136},[57,82526,82496],{"class":74},[57,82528,82529],{"class":59,"line":162},[57,82530,2673],{"emptyLinePlaceholder":350},[57,82532,82533,82535,82537,82539,82541,82543,82545,82547,82549,82551,82553,82555,82557,82559],{"class":59,"line":180},[57,82534,82467],{"class":81},[57,82536,974],{"class":140},[57,82538,58444],{"class":81},[57,82540,168],{"class":140},[57,82542,82476],{"class":81},[57,82544,974],{"class":140},[57,82546,82481],{"class":81},[57,82548,168],{"class":140},[57,82550,226],{"class":81},[57,82552,12708],{"class":140},[57,82554,761],{"class":81},[57,82556,75450],{"class":140},[57,82558,33526],{"class":136},[57,82560,82561],{"class":74}," 'Mozill'\n",[57,82563,82564],{"class":59,"line":186},[57,82565,2673],{"emptyLinePlaceholder":350},[57,82567,82568,82570,82572,82574,82576,82578,82580,82582,82584,82586,82588,82590],{"class":59,"line":197},[57,82569,82467],{"class":81},[57,82571,974],{"class":140},[57,82573,58444],{"class":81},[57,82575,168],{"class":140},[57,82577,82476],{"class":81},[57,82579,974],{"class":140},[57,82581,82481],{"class":81},[57,82583,168],{"class":140},[57,82585,710],{"class":81},[57,82587,75450],{"class":140},[57,82589,33526],{"class":136},[57,82591,82592],{"class":74}," 'lla'\n",[57,82594,82595,82597,82599,82601,82603,82605,82607,82609,82611,82613,82615,82617,82619,82621],{"class":59,"line":241},[57,82596,82467],{"class":81},[57,82598,974],{"class":140},[57,82600,58444],{"class":81},[57,82602,168],{"class":140},[57,82604,82476],{"class":81},[57,82606,974],{"class":140},[57,82608,82481],{"class":81},[57,82610,168],{"class":140},[57,82612,710],{"class":81},[57,82614,12708],{"class":140},[57,82616,786],{"class":81},[57,82618,75506],{"class":140},[57,82620,33526],{"class":136},[57,82622,82592],{"class":74},[57,82624,82625,82627,82629,82631,82633,82635,82637,82639,82641,82643,82645,82647,82649,82651],{"class":59,"line":249},[57,82626,82467],{"class":81},[57,82628,974],{"class":140},[57,82630,58444],{"class":81},[57,82632,168],{"class":140},[57,82634,82476],{"class":81},[57,82636,974],{"class":140},[57,82638,82481],{"class":81},[57,82640,168],{"class":140},[57,82642,786],{"class":81},[57,82644,12708],{"class":140},[57,82646,710],{"class":81},[57,82648,75450],{"class":140},[57,82650,33526],{"class":136},[57,82652,82592],{"class":74},[57,82654,82655],{"class":59,"line":262},[57,82656,2673],{"emptyLinePlaceholder":350},[57,82658,82659,82661,82663,82665,82667,82669,82671,82673,82675,82677,82679,82681,82683,82685],{"class":59,"line":281},[57,82660,82467],{"class":81},[57,82662,974],{"class":140},[57,82664,58444],{"class":81},[57,82666,168],{"class":140},[57,82668,82476],{"class":81},[57,82670,974],{"class":140},[57,82672,82481],{"class":81},[57,82674,168],{"class":140},[57,82676,226],{"class":81},[57,82678,12708],{"class":140},[57,82680,786],{"class":81},[57,82682,75450],{"class":140},[57,82684,33526],{"class":136},[57,82686,82687],{"class":74}," 'Mozilla'\n",[57,82689,82690,82692,82694,82696,82698,82700,82702,82704,82706,82708,82710,82712,82714,82716],{"class":59,"line":287},[57,82691,82467],{"class":81},[57,82693,974],{"class":140},[57,82695,58444],{"class":81},[57,82697,168],{"class":140},[57,82699,82476],{"class":81},[57,82701,974],{"class":140},[57,82703,82481],{"class":81},[57,82705,168],{"class":140},[57,82707,226],{"class":81},[57,82709,12708],{"class":140},[57,82711,862],{"class":81},[57,82713,75450],{"class":140},[57,82715,33526],{"class":136},[57,82717,82687],{"class":74},[23182,82719,82721],{"id":82720},"_410533-startswith","4.10.5.3.3 startsWith",[14,82723,82724,82727,82728,82733,82734,82736,82737],{},[28,82725,82726],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[33,82729,82730],{},[28,82731,82732],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[28,82735,1645],{}," 或 ",[28,82738,66217],{},[49,82740,82742],{"className":77692,"code":82741,"language":77694,"meta":46,"style":46},"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",[28,82743,82744,82756,82775,82780,82800],{"__ignoreMap":46},[57,82745,82746,82748,82751,82753],{"class":59,"line":60},[57,82747,7065],{"class":136},[57,82749,82750],{"class":140}," str1 ",[57,82752,156],{"class":136},[57,82754,82755],{"class":74}," \"Saturday night plans\"\n",[57,82757,82758,82760,82762,82765,82768,82770,82773],{"class":59,"line":67},[57,82759,77729],{"class":140},[57,82761,58444],{"class":70},[57,82763,82764],{"class":140},"(str1.",[57,82766,82767],{"class":70},"startsWith",[57,82769,168],{"class":140},[57,82771,82772],{"class":74},"\"Sat\"",[57,82774,259],{"class":140},[57,82776,82777],{"class":59,"line":144},[57,82778,82779],{"class":63},"\u002F\u002F Expected output: true\n",[57,82781,82782,82784,82786,82788,82790,82792,82794,82796,82798],{"class":59,"line":150},[57,82783,77729],{"class":140},[57,82785,58444],{"class":70},[57,82787,82764],{"class":140},[57,82789,82767],{"class":70},[57,82791,168],{"class":140},[57,82793,82772],{"class":74},[57,82795,12708],{"class":140},[57,82797,270],{"class":81},[57,82799,259],{"class":140},[57,82801,82802],{"class":59,"line":162},[57,82803,82804],{"class":63},"\u002F\u002F Expected output: false\n",[49,82806,82808],{"className":50830,"code":82807,"language":50832,"meta":46,"style":46},"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",[28,82809,82810,82815,82820,82824,82829,82834],{"__ignoreMap":46},[57,82811,82812],{"class":59,"line":60},[57,82813,82814],{"class":140},"startsWith(searchString)\n",[57,82816,82817],{"class":59,"line":67},[57,82818,82819],{"class":140},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[57,82821,82822],{"class":59,"line":144},[57,82823,2673],{"emptyLinePlaceholder":350},[57,82825,82826],{"class":59,"line":150},[57,82827,82828],{"class":140},"const str3 = 'pink老师上课中'\n",[57,82830,82831],{"class":59,"line":162},[57,82832,82833],{"class":140},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[57,82835,82836],{"class":59,"line":180},[57,82837,82838],{"class":140},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23182,82840,82842],{"id":82841},"_410534-includes","4.10.5.3.4 includes",[14,82844,82845],{},"includes(searchString) includes(searchString, position)",[377,82847,82848],{},[380,82849,82850],{},"searchString:",[14,82852,82853,82854,82856,82857,82862,82863,82868,82869,21772,82872,82875,82876,82879],{},"一个要在 ",[28,82855,1585],{}," 中查找的字符串。",[18,82858,82861],{"href":82859,"rel":82860},"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",[22],"不能是正则表达式","。所有非正则表达式的值都会被",[18,82864,82867],{"href":82865,"rel":82866},"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",[22],"强制转换为字符串","，因此如果该参数被省略或传入 ",[28,82870,82871],{},"undefined",[28,82873,82874],{},"includes()"," 方法会在字符串中搜索 ",[28,82877,82878],{},"\"undefined\"","，这通常不是你想要的",[377,82881,82882],{"start":67},[380,82883,82884,1275],{},[28,82885,82886],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,82888,82889,82890,82893,82894],{},"在字符串中开始搜索 ",[28,82891,82892],{},"searchString"," 的位置。默认值为 ",[28,82895,226],{},[377,82897,82898],{"start":144},[380,82899,82900],{},"返回值：",[14,82902,82903,82904,82906,82907,82911,82912],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[28,82905,82892],{}," 为空字符串的情况），则返回 ",[33,82908,82909],{},[28,82910,1645],{}," ，否则返回 ",[33,82913,82914],{},[28,82915,66217],{},[377,82917,82918],{"start":150},[380,82919,82920],{},"异常：",[14,82922,82419,82923,14067,82925,82929],{},[28,82924,82892],{},[18,82926,82928],{"href":82859,"rel":82927},[22],"是一个正则表达式","，则会抛出",[14,82931,82932],{},"只要是有就是true，不需要非得以谁开头结尾",[49,82934,82936],{"className":77692,"code":82935,"language":77694,"meta":46,"style":46},"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",[28,82937,82938,82949,82972,82991,83011,83033,83052],{"__ignoreMap":46},[57,82939,82940,82942,82944,82946],{"class":59,"line":60},[57,82941,7065],{"class":136},[57,82943,79972],{"class":140},[57,82945,156],{"class":136},[57,82947,82948],{"class":74}," \"To be, or not to be, that is the question.\"\n",[57,82950,82951,82953,82955,82958,82961,82963,82966,82969],{"class":59,"line":67},[57,82952,77729],{"class":140},[57,82954,58444],{"class":70},[57,82956,82957],{"class":140},"(str.",[57,82959,82960],{"class":70},"includes",[57,82962,168],{"class":140},[57,82964,82965],{"class":74},"\"To be\"",[57,82967,82968],{"class":140},"))",[57,82970,82971],{"class":63},"  \u002F\u002F true\n",[57,82973,82974,82976,82978,82980,82982,82984,82987,82989],{"class":59,"line":144},[57,82975,77729],{"class":140},[57,82977,58444],{"class":70},[57,82979,82957],{"class":140},[57,82981,82960],{"class":70},[57,82983,168],{"class":140},[57,82985,82986],{"class":74},"\"question\"",[57,82988,82968],{"class":140},[57,82990,82971],{"class":63},[57,82992,82993,82995,82997,82999,83001,83003,83006,83008],{"class":59,"line":150},[57,82994,77729],{"class":140},[57,82996,58444],{"class":70},[57,82998,82957],{"class":140},[57,83000,82960],{"class":70},[57,83002,168],{"class":140},[57,83004,83005],{"class":74},"\"nonexistent\"",[57,83007,82968],{"class":140},[57,83009,83010],{"class":63},"  \u002F\u002F false\n",[57,83012,83013,83015,83017,83019,83021,83023,83025,83027,83029,83031],{"class":59,"line":162},[57,83014,77729],{"class":140},[57,83016,58444],{"class":70},[57,83018,82957],{"class":140},[57,83020,82960],{"class":70},[57,83022,168],{"class":140},[57,83024,82965],{"class":74},[57,83026,12708],{"class":140},[57,83028,635],{"class":81},[57,83030,82968],{"class":140},[57,83032,83010],{"class":63},[57,83034,83035,83037,83039,83041,83043,83045,83048,83050],{"class":59,"line":180},[57,83036,77729],{"class":140},[57,83038,58444],{"class":70},[57,83040,82957],{"class":140},[57,83042,82960],{"class":70},[57,83044,168],{"class":140},[57,83046,83047],{"class":74},"\"TO BE\"",[57,83049,82968],{"class":140},[57,83051,83010],{"class":63},[57,83053,83054,83056,83058,83060,83062,83064,83066,83068],{"class":59,"line":186},[57,83055,77729],{"class":140},[57,83057,58444],{"class":70},[57,83059,82957],{"class":140},[57,83061,82960],{"class":70},[57,83063,168],{"class":140},[57,83065,7925],{"class":74},[57,83067,82968],{"class":140},[57,83069,82971],{"class":63},[23182,83071,83073],{"id":83072},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[49,83075,83077],{"className":53264,"code":83076,"language":53266,"meta":46,"style":46},"\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",[28,83078,83079,83087,83095,83100,83105,83110,83115,83120,83128],{"__ignoreMap":46},[57,83080,83081,83083,83085],{"class":59,"line":60},[57,83082,1326],{"class":140},[57,83084,51997],{"class":51497},[57,83086,51504],{"class":140},[57,83088,83089,83091,83093],{"class":59,"line":67},[57,83090,52341],{"class":140},[57,83092,52010],{"class":51497},[57,83094,51504],{"class":140},[57,83096,83097],{"class":59,"line":144},[57,83098,83099],{"class":140},"    const num = 10\n",[57,83101,83102],{"class":59,"line":150},[57,83103,83104],{"class":140},"    \u002F\u002F 强制转换\n",[57,83106,83107],{"class":59,"line":162},[57,83108,83109],{"class":140},"    console.log(String(num))\n",[57,83111,83112],{"class":59,"line":180},[57,83113,83114],{"class":140},"    \u002F\u002F toString()方法转换\n",[57,83116,83117],{"class":59,"line":186},[57,83118,83119],{"class":140},"    console.log(num.toString())\n",[57,83121,83122,83124,83126],{"class":59,"line":197},[57,83123,52614],{"class":140},[57,83125,52010],{"class":51497},[57,83127,51504],{"class":140},[57,83129,83130,83132,83134],{"class":59,"line":241},[57,83131,51982],{"class":140},[57,83133,51997],{"class":51497},[57,83135,51504],{"class":140},[23182,83137,83139],{"id":83138},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,83141,83142],{},[44,83143],{"alt":46,"src":83144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[49,83146,83148],{"className":50830,"code":83147,"language":50832,"meta":46,"style":46},"\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",[28,83149,83150,83160,83174,83178,83186,83200,83220,83232,83240,83244,83252,83264,83272,83284,83289,83294,83299,83346,83362,83370,83378,83382],{"__ignoreMap":46},[57,83151,83152,83154,83156,83158],{"class":59,"line":60},[57,83153,51494],{"class":140},[57,83155,51498],{"class":51497},[57,83157,51501],{"class":70},[57,83159,51504],{"class":140},[57,83161,83162,83164,83166,83168,83170,83172],{"class":59,"line":67},[57,83163,1326],{"class":140},[57,83165,50832],{"class":51497},[57,83167,51513],{"class":70},[57,83169,156],{"class":140},[57,83171,51518],{"class":74},[57,83173,51504],{"class":140},[57,83175,83176],{"class":59,"line":144},[57,83177,2673],{"emptyLinePlaceholder":350},[57,83179,83180,83182,83184],{"class":59,"line":150},[57,83181,1326],{"class":140},[57,83183,51531],{"class":51497},[57,83185,51504],{"class":140},[57,83187,83188,83190,83192,83194,83196,83198],{"class":59,"line":162},[57,83189,52341],{"class":140},[57,83191,51541],{"class":51497},[57,83193,51544],{"class":70},[57,83195,156],{"class":140},[57,83197,51549],{"class":74},[57,83199,51504],{"class":140},[57,83201,83202,83204,83206,83208,83210,83212,83214,83216,83218],{"class":59,"line":180},[57,83203,52341],{"class":140},[57,83205,51541],{"class":51497},[57,83207,15192],{"class":70},[57,83209,156],{"class":140},[57,83211,51588],{"class":74},[57,83213,51568],{"class":70},[57,83215,156],{"class":140},[57,83217,51595],{"class":74},[57,83219,51504],{"class":140},[57,83221,83222,83224,83226,83228,83230],{"class":59,"line":186},[57,83223,52341],{"class":140},[57,83225,51604],{"class":51497},[57,83227,51607],{"class":140},[57,83229,51604],{"class":51497},[57,83231,51504],{"class":140},[57,83233,83234,83236,83238],{"class":59,"line":197},[57,83235,51982],{"class":140},[57,83237,51531],{"class":51497},[57,83239,51504],{"class":140},[57,83241,83242],{"class":59,"line":241},[57,83243,2673],{"emptyLinePlaceholder":350},[57,83245,83246,83248,83250],{"class":59,"line":249},[57,83247,1326],{"class":140},[57,83249,51997],{"class":51497},[57,83251,51504],{"class":140},[57,83253,83254,83256,83258,83260,83262],{"class":59,"line":262},[57,83255,52341],{"class":140},[57,83257,51808],{"class":51497},[57,83259,55511],{"class":140},[57,83261,51808],{"class":51497},[57,83263,51504],{"class":140},[57,83265,83266,83268,83270],{"class":59,"line":281},[57,83267,52341],{"class":140},[57,83269,52010],{"class":51497},[57,83271,51504],{"class":140},[57,83273,83274,83276,83279,83281],{"class":59,"line":287},[57,83275,11494],{"class":136},[57,83277,83278],{"class":81}," gift",[57,83280,13837],{"class":136},[57,83282,83283],{"class":74}," '50g的茶叶，清洗球'\n",[57,83285,83286],{"class":59,"line":298},[57,83287,83288],{"class":63},"    \u002F\u002F 1.把字符串拆分为数组\n",[57,83290,83291],{"class":59,"line":311},[57,83292,83293],{"class":63},"    \u002F\u002F console.log(gift.split(','))\n",[57,83295,83296],{"class":59,"line":322},[57,83297,83298],{"class":63},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[57,83300,83301,83303,83305,83307,83310,83313,83315,83318,83320,83322,83324,83326,83328,83331,83333,83336,83338,83340,83342,83344],{"class":59,"line":1929},[57,83302,11494],{"class":136},[57,83304,74116],{"class":81},[57,83306,13837],{"class":136},[57,83308,83309],{"class":140}," gift.",[57,83311,83312],{"class":70},"split",[57,83314,168],{"class":140},[57,83316,83317],{"class":74},"'，'",[57,83319,31023],{"class":140},[57,83321,74241],{"class":70},[57,83323,168],{"class":140},[57,83325,79992],{"class":5489},[57,83327,79995],{"class":136},[57,83329,83330],{"class":74}," `\u003Cspan>【赠品】${",[57,83332,79992],{"class":140},[57,83334,83335],{"class":74},"}\u003C\u002Fspan>\u003Cbr>`",[57,83337,31023],{"class":140},[57,83339,74420],{"class":70},[57,83341,168],{"class":140},[57,83343,74425],{"class":74},[57,83345,238],{"class":140},[57,83347,83348,83350,83352,83354,83356,83358,83360],{"class":59,"line":1950},[57,83349,52604],{"class":140},[57,83351,54596],{"class":70},[57,83353,168],{"class":140},[57,83355,82128],{"class":74},[57,83357,74446],{"class":140},[57,83359,156],{"class":136},[57,83361,74182],{"class":140},[57,83363,83364,83366,83368],{"class":59,"line":1955},[57,83365,52614],{"class":140},[57,83367,52010],{"class":51497},[57,83369,51504],{"class":140},[57,83371,83372,83374,83376],{"class":59,"line":1969},[57,83373,51982],{"class":140},[57,83375,51997],{"class":51497},[57,83377,51504],{"class":140},[57,83379,83380],{"class":59,"line":1974},[57,83381,2673],{"emptyLinePlaceholder":350},[57,83383,83384,83386,83388],{"class":59,"line":2001},[57,83385,51982],{"class":140},[57,83387,50832],{"class":51497},[57,83389,51504],{"class":140},[22270,83391,83393],{"id":83392},"_41054-number","4.10.5.4 Number",[14,83395,83396],{},[44,83397],{"alt":46,"src":83398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,83400,83401],{},"整数也可以进行toFixed来保留小数",[14,83403,83404],{},"比如：",[14,83406,83407],{},"const price=10",[14,83409,83410],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22270,83412,83414],{"id":83413},"_41055-购物车展示","4.10.5.5 购物车展示",[14,83416,83417],{},[44,83418],{"alt":46,"src":83419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[49,83421,83423],{"className":50830,"code":83422,"language":50832,"meta":46,"style":46},"\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",[28,83424,83425,83435,83449,83453,83461,83475,83495,83507,83515,83521,83531,83541,83551,83555,83559,83565,83577,83591,83595,83599,83605,83617,83633,83643,83659,83663,83667,83673,83683,83693,83697,83701,83709,83721,83733,83745,83749,83753,83761,83773,83777,83781,83792,83802,83814,83826,83836,83840,83844,83852,83861,83873,83883,83893,83897,83901,83909,83918,83925,83935,83947,83951,83955,83964,83974,83985,83997,84009,84013,84017,84026,84036,84047,84051,84055,84061,84073,84085,84095,84105,84123,84135,84139,84143,84152,84164,84174,84184,84196,84200,84208,84216,84220,84228,84242,84250,84264,84292,84300,84308,84318,84322,84330,84338,84347,84355,84364,84374,84378,84382,84390,84398,84407,84415,84423,84436,84440,84444,84452,84460,84469,84477,84485,84500,84504,84508,84516,84524,84533,84541,84549,84563,84571,84575,84579,84584,84610,84615,84652,84657,84680,84685,84739,84744,84780,84784,84790,84795,84804,84818,84827,84846,84855,84865,84870,84875,84888,84893,84947,84973,84981,84989,84993],{"__ignoreMap":46},[57,83426,83427,83429,83431,83433],{"class":59,"line":60},[57,83428,51494],{"class":140},[57,83430,51498],{"class":51497},[57,83432,51501],{"class":70},[57,83434,51504],{"class":140},[57,83436,83437,83439,83441,83443,83445,83447],{"class":59,"line":67},[57,83438,1326],{"class":140},[57,83440,50832],{"class":51497},[57,83442,51513],{"class":70},[57,83444,156],{"class":140},[57,83446,51518],{"class":74},[57,83448,51504],{"class":140},[57,83450,83451],{"class":59,"line":144},[57,83452,2673],{"emptyLinePlaceholder":350},[57,83454,83455,83457,83459],{"class":59,"line":150},[57,83456,1326],{"class":140},[57,83458,51531],{"class":51497},[57,83460,51504],{"class":140},[57,83462,83463,83465,83467,83469,83471,83473],{"class":59,"line":162},[57,83464,52341],{"class":140},[57,83466,51541],{"class":51497},[57,83468,51544],{"class":70},[57,83470,156],{"class":140},[57,83472,51549],{"class":74},[57,83474,51504],{"class":140},[57,83476,83477,83479,83481,83483,83485,83487,83489,83491,83493],{"class":59,"line":180},[57,83478,52341],{"class":140},[57,83480,51541],{"class":51497},[57,83482,15192],{"class":70},[57,83484,156],{"class":140},[57,83486,51588],{"class":74},[57,83488,51568],{"class":70},[57,83490,156],{"class":140},[57,83492,51595],{"class":74},[57,83494,51504],{"class":140},[57,83496,83497,83499,83501,83503,83505],{"class":59,"line":186},[57,83498,52341],{"class":140},[57,83500,51604],{"class":51497},[57,83502,51607],{"class":140},[57,83504,51604],{"class":51497},[57,83506,51504],{"class":140},[57,83508,83509,83511,83513],{"class":59,"line":197},[57,83510,52341],{"class":140},[57,83512,342],{"class":51497},[57,83514,51504],{"class":140},[57,83516,83517,83519],{"class":59,"line":241},[57,83518,6676],{"class":51497},[57,83520,15844],{"class":140},[57,83522,83523,83525,83527,83529],{"class":59,"line":249},[57,83524,54892],{"class":81},[57,83526,51634],{"class":140},[57,83528,226],{"class":81},[57,83530,1576],{"class":140},[57,83532,83533,83535,83537,83539],{"class":59,"line":262},[57,83534,54903],{"class":81},[57,83536,51634],{"class":140},[57,83538,226],{"class":81},[57,83540,1576],{"class":140},[57,83542,83543,83545,83547,83549],{"class":59,"line":281},[57,83544,72793],{"class":81},[57,83546,51634],{"class":140},[57,83548,60702],{"class":81},[57,83550,1576],{"class":140},[57,83552,83553],{"class":59,"line":287},[57,83554,2460],{"class":140},[57,83556,83557],{"class":59,"line":298},[57,83558,2673],{"emptyLinePlaceholder":350},[57,83560,83561,83563],{"class":59,"line":311},[57,83562,62320],{"class":70},[57,83564,15844],{"class":140},[57,83566,83567,83569,83571,83573,83575],{"class":59,"line":322},[57,83568,54968],{"class":81},[57,83570,51634],{"class":140},[57,83572,78771],{"class":81},[57,83574,51689],{"class":136},[57,83576,1576],{"class":140},[57,83578,83579,83581,83583,83585,83587,83589],{"class":59,"line":1929},[57,83580,54903],{"class":81},[57,83582,51634],{"class":140},[57,83584,728],{"class":81},[57,83586,51689],{"class":136},[57,83588,51753],{"class":81},[57,83590,1576],{"class":140},[57,83592,83593],{"class":59,"line":1950},[57,83594,2460],{"class":140},[57,83596,83597],{"class":59,"line":1955},[57,83598,2673],{"emptyLinePlaceholder":350},[57,83600,83601,83603],{"class":59,"line":1969},[57,83602,78822],{"class":70},[57,83604,15844],{"class":140},[57,83606,83607,83609,83611,83613,83615],{"class":59,"line":1974},[57,83608,54892],{"class":81},[57,83610,51634],{"class":140},[57,83612,991],{"class":81},[57,83614,51689],{"class":136},[57,83616,1576],{"class":140},[57,83618,83619,83621,83623,83625,83627,83629,83631],{"class":59,"line":2001},[57,83620,62057],{"class":81},[57,83622,51634],{"class":140},[57,83624,28390],{"class":81},[57,83626,78877],{"class":81},[57,83628,78880],{"class":81},[57,83630,1111],{"class":136},[57,83632,1576],{"class":140},[57,83634,83635,83637,83639,83641],{"class":59,"line":2006},[57,83636,55206],{"class":81},[57,83638,51634],{"class":140},[57,83640,51674],{"class":81},[57,83642,1576],{"class":140},[57,83644,83645,83647,83649,83651,83653,83655,83657],{"class":59,"line":2023},[57,83646,62174],{"class":81},[57,83648,51634],{"class":140},[57,83650,635],{"class":81},[57,83652,51689],{"class":136},[57,83654,51718],{"class":81},[57,83656,62441],{"class":81},[57,83658,1576],{"class":140},[57,83660,83661],{"class":59,"line":2028},[57,83662,2460],{"class":140},[57,83664,83665],{"class":59,"line":2033},[57,83666,2673],{"emptyLinePlaceholder":350},[57,83668,83669,83671],{"class":59,"line":2038},[57,83670,78940],{"class":70},[57,83672,15844],{"class":140},[57,83674,83675,83677,83679,83681],{"class":59,"line":2052},[57,83676,62222],{"class":81},[57,83678,51634],{"class":140},[57,83680,62227],{"class":81},[57,83682,1576],{"class":140},[57,83684,83685,83687,83689,83691],{"class":59,"line":2057},[57,83686,55081],{"class":81},[57,83688,51634],{"class":140},[57,83690,62015],{"class":81},[57,83692,1576],{"class":140},[57,83694,83695],{"class":59,"line":2850},[57,83696,2460],{"class":140},[57,83698,83699],{"class":59,"line":2864},[57,83700,2673],{"emptyLinePlaceholder":350},[57,83702,83703,83705,83707],{"class":59,"line":2872},[57,83704,78822],{"class":70},[57,83706,55812],{"class":51497},[57,83708,15844],{"class":140},[57,83710,83711,83713,83715,83717,83719],{"class":59,"line":2877},[57,83712,54968],{"class":81},[57,83714,51634],{"class":140},[57,83716,1028],{"class":81},[57,83718,51689],{"class":136},[57,83720,1576],{"class":140},[57,83722,83723,83725,83727,83729,83731],{"class":59,"line":2883},[57,83724,54982],{"class":81},[57,83726,51634],{"class":140},[57,83728,1028],{"class":81},[57,83730,51689],{"class":136},[57,83732,1576],{"class":140},[57,83734,83735,83737,83739,83741,83743],{"class":59,"line":2889},[57,83736,61947],{"class":81},[57,83738,51634],{"class":140},[57,83740,736],{"class":81},[57,83742,51689],{"class":136},[57,83744,1576],{"class":140},[57,83746,83747],{"class":59,"line":2894},[57,83748,2460],{"class":140},[57,83750,83751],{"class":59,"line":8221},[57,83752,2673],{"emptyLinePlaceholder":350},[57,83754,83755,83757,83759],{"class":59,"line":8245},[57,83756,78822],{"class":70},[57,83758,62501],{"class":70},[57,83760,15844],{"class":140},[57,83762,83763,83765,83767,83769,83771],{"class":59,"line":8250},[57,83764,54968],{"class":81},[57,83766,51634],{"class":140},[57,83768,1996],{"class":81},[57,83770,51689],{"class":136},[57,83772,1576],{"class":140},[57,83774,83775],{"class":59,"line":8256},[57,83776,2460],{"class":140},[57,83778,83779],{"class":59,"line":8283},[57,83780,2673],{"emptyLinePlaceholder":350},[57,83782,83783,83785,83787,83790],{"class":59,"line":8288},[57,83784,78822],{"class":70},[57,83786,62501],{"class":70},[57,83788,83789],{"class":70}," .tag",[57,83791,15844],{"class":140},[57,83793,83794,83796,83798,83800],{"class":59,"line":8294},[57,83795,55206],{"class":81},[57,83797,51634],{"class":140},[57,83799,61066],{"class":81},[57,83801,1576],{"class":140},[57,83803,83804,83806,83808,83810,83812],{"class":59,"line":8306},[57,83805,54892],{"class":81},[57,83807,51634],{"class":140},[57,83809,498],{"class":81},[57,83811,51689],{"class":136},[57,83813,1576],{"class":140},[57,83815,83816,83818,83820,83822,83824],{"class":59,"line":8318},[57,83817,55119],{"class":81},[57,83819,51634],{"class":140},[57,83821,914],{"class":81},[57,83823,51689],{"class":136},[57,83825,1576],{"class":140},[57,83827,83828,83830,83832,83834],{"class":59,"line":8330},[57,83829,57613],{"class":81},[57,83831,51634],{"class":140},[57,83833,62267],{"class":81},[57,83835,1576],{"class":140},[57,83837,83838],{"class":59,"line":9989},[57,83839,2460],{"class":140},[57,83841,83842],{"class":59,"line":10014},[57,83843,2673],{"emptyLinePlaceholder":350},[57,83845,83846,83848,83850],{"class":59,"line":10037},[57,83847,78822],{"class":70},[57,83849,79114],{"class":70},[57,83851,31663],{"class":140},[57,83853,83854,83856,83859],{"class":59,"line":10061},[57,83855,78822],{"class":70},[57,83857,83858],{"class":70}," .sub-total",[57,83860,15844],{"class":140},[57,83862,83863,83865,83867,83869,83871],{"class":59,"line":10066},[57,83864,55119],{"class":81},[57,83866,51634],{"class":140},[57,83868,1066],{"class":81},[57,83870,51689],{"class":136},[57,83872,1576],{"class":140},[57,83874,83875,83877,83879,83881],{"class":59,"line":10071},[57,83876,57613],{"class":81},[57,83878,51634],{"class":140},[57,83880,79137],{"class":81},[57,83882,1576],{"class":140},[57,83884,83885,83887,83889,83891],{"class":59,"line":10076},[57,83886,62034],{"class":81},[57,83888,51634],{"class":140},[57,83890,635],{"class":81},[57,83892,1576],{"class":140},[57,83894,83895],{"class":59,"line":10085},[57,83896,2460],{"class":140},[57,83898,83899],{"class":59,"line":10090},[57,83900,2673],{"emptyLinePlaceholder":350},[57,83902,83903,83905,83907],{"class":59,"line":10096},[57,83904,78822],{"class":70},[57,83906,79154],{"class":70},[57,83908,31663],{"class":140},[57,83910,83911,83913,83916],{"class":59,"line":10117},[57,83912,78822],{"class":70},[57,83914,83915],{"class":70}," .sub-total::before",[57,83917,31663],{"class":140},[57,83919,83920,83923],{"class":59,"line":10123},[57,83921,83922],{"class":70},"    .amount::before",[57,83924,15844],{"class":140},[57,83926,83927,83929,83931,83933],{"class":59,"line":10137},[57,83928,79161],{"class":81},[57,83930,51634],{"class":140},[57,83932,79166],{"class":74},[57,83934,1576],{"class":140},[57,83936,83937,83939,83941,83943,83945],{"class":59,"line":10143},[57,83938,55119],{"class":81},[57,83940,51634],{"class":140},[57,83942,914],{"class":81},[57,83944,51689],{"class":136},[57,83946,1576],{"class":140},[57,83948,83949],{"class":59,"line":10170},[57,83950,2460],{"class":140},[57,83952,83953],{"class":59,"line":10179},[57,83954,2673],{"emptyLinePlaceholder":350},[57,83956,83957,83959,83962],{"class":59,"line":10185},[57,83958,78822],{"class":70},[57,83960,83961],{"class":70}," .spec",[57,83963,15844],{"class":140},[57,83965,83966,83968,83970,83972],{"class":59,"line":10193},[57,83967,62034],{"class":81},[57,83969,51634],{"class":140},[57,83971,498],{"class":81},[57,83973,1576],{"class":140},[57,83975,83976,83978,83980,83983],{"class":59,"line":10198},[57,83977,57613],{"class":81},[57,83979,51634],{"class":140},[57,83981,83982],{"class":81},"#888",[57,83984,1576],{"class":140},[57,83986,83987,83989,83991,83993,83995],{"class":59,"line":16876},[57,83988,55119],{"class":81},[57,83990,51634],{"class":140},[57,83992,965],{"class":81},[57,83994,51689],{"class":136},[57,83996,1576],{"class":140},[57,83998,83999,84001,84003,84005,84007],{"class":59,"line":16882},[57,84000,62197],{"class":81},[57,84002,51634],{"class":140},[57,84004,1116],{"class":81},[57,84006,51689],{"class":136},[57,84008,1576],{"class":140},[57,84010,84011],{"class":59,"line":16905},[57,84012,2460],{"class":140},[57,84014,84015],{"class":59,"line":16911},[57,84016,2673],{"emptyLinePlaceholder":350},[57,84018,84019,84021,84024],{"class":59,"line":16934},[57,84020,78822],{"class":70},[57,84022,84023],{"class":70}," .count",[57,84025,15844],{"class":140},[57,84027,84028,84030,84032,84034],{"class":59,"line":16948},[57,84029,62034],{"class":81},[57,84031,51634],{"class":140},[57,84033,635],{"class":81},[57,84035,1576],{"class":140},[57,84037,84038,84040,84042,84045],{"class":59,"line":16968},[57,84039,57613],{"class":81},[57,84041,51634],{"class":140},[57,84043,84044],{"class":81},"#aaa",[57,84046,1576],{"class":140},[57,84048,84049],{"class":59,"line":16974},[57,84050,2460],{"class":140},[57,84052,84053],{"class":59,"line":16985},[57,84054,2673],{"emptyLinePlaceholder":350},[57,84056,84057,84059],{"class":59,"line":17008},[57,84058,72672],{"class":70},[57,84060,15844],{"class":140},[57,84062,84063,84065,84067,84069,84071],{"class":59,"line":17030},[57,84064,54968],{"class":81},[57,84066,51634],{"class":140},[57,84068,78771],{"class":81},[57,84070,51689],{"class":136},[57,84072,1576],{"class":140},[57,84074,84075,84077,84079,84081,84083],{"class":59,"line":17035},[57,84076,54903],{"class":81},[57,84078,51634],{"class":140},[57,84080,226],{"class":81},[57,84082,51753],{"class":81},[57,84084,1576],{"class":140},[57,84086,84087,84089,84091,84093],{"class":59,"line":17041},[57,84088,55206],{"class":81},[57,84090,51634],{"class":140},[57,84092,51674],{"class":81},[57,84094,1576],{"class":140},[57,84096,84097,84099,84101,84103],{"class":59,"line":17055},[57,84098,55217],{"class":81},[57,84100,51634],{"class":140},[57,84102,51777],{"class":81},[57,84104,1576],{"class":140},[57,84106,84107,84110,84112,84114,84116,84118,84121],{"class":59,"line":17068},[57,84108,84109],{"class":81},"      border-top",[57,84111,51634],{"class":140},[57,84113,635],{"class":81},[57,84115,51689],{"class":136},[57,84117,51718],{"class":81},[57,84119,84120],{"class":81}," #4e4e4e",[57,84122,1576],{"class":140},[57,84124,84125,84127,84129,84131,84133],{"class":59,"line":17073},[57,84126,54892],{"class":81},[57,84128,51634],{"class":140},[57,84130,1116],{"class":81},[57,84132,51689],{"class":136},[57,84134,1576],{"class":140},[57,84136,84137],{"class":59,"line":17087},[57,84138,2460],{"class":140},[57,84140,84141],{"class":59,"line":17092},[57,84142,2673],{"emptyLinePlaceholder":350},[57,84144,84145,84147,84150],{"class":59,"line":17098},[57,84146,72672],{"class":70},[57,84148,84149],{"class":70}," .amount",[57,84151,15844],{"class":140},[57,84153,84154,84156,84158,84160,84162],{"class":59,"line":17103},[57,84155,55119],{"class":81},[57,84157,51634],{"class":140},[57,84159,1066],{"class":81},[57,84161,51689],{"class":136},[57,84163,1576],{"class":140},[57,84165,84166,84168,84170,84172],{"class":59,"line":17117},[57,84167,57613],{"class":81},[57,84169,51634],{"class":140},[57,84171,79137],{"class":81},[57,84173,1576],{"class":140},[57,84175,84176,84178,84180,84182],{"class":59,"line":17122},[57,84177,62531],{"class":81},[57,84179,51634],{"class":140},[57,84181,51686],{"class":81},[57,84183,1576],{"class":140},[57,84185,84186,84188,84190,84192,84194],{"class":59,"line":17127},[57,84187,61947],{"class":81},[57,84189,51634],{"class":140},[57,84191,1072],{"class":81},[57,84193,51689],{"class":136},[57,84195,1576],{"class":140},[57,84197,84198],{"class":59,"line":17141},[57,84199,2460],{"class":140},[57,84201,84202,84204,84206],{"class":59,"line":17153},[57,84203,52614],{"class":140},[57,84205,342],{"class":51497},[57,84207,51504],{"class":140},[57,84209,84210,84212,84214],{"class":59,"line":17158},[57,84211,51982],{"class":140},[57,84213,51531],{"class":51497},[57,84215,51504],{"class":140},[57,84217,84218],{"class":59,"line":17171},[57,84219,2673],{"emptyLinePlaceholder":350},[57,84221,84222,84224,84226],{"class":59,"line":17176},[57,84223,1326],{"class":140},[57,84225,51997],{"class":51497},[57,84227,51504],{"class":140},[57,84229,84230,84232,84234,84236,84238,84240],{"class":59,"line":17181},[57,84231,52341],{"class":140},[57,84233,51808],{"class":51497},[57,84235,53683],{"class":70},[57,84237,156],{"class":140},[57,84239,62805],{"class":74},[57,84241,51504],{"class":140},[57,84243,84244,84246,84248],{"class":59,"line":17186},[57,84245,52614],{"class":140},[57,84247,51808],{"class":51497},[57,84249,51504],{"class":140},[57,84251,84252,84254,84256,84258,84260,84262],{"class":59,"line":17199},[57,84253,52341],{"class":140},[57,84255,51808],{"class":51497},[57,84257,53683],{"class":70},[57,84259,156],{"class":140},[57,84261,62777],{"class":74},[57,84263,51504],{"class":140},[57,84265,84266,84268,84270,84273,84275,84277,84279,84282,84284,84286,84288,84290],{"class":59,"line":17204},[57,84267,51538],{"class":140},[57,84269,51808],{"class":51497},[57,84271,84272],{"class":140},">合计：\u003C",[57,84274,57],{"class":51497},[57,84276,53683],{"class":70},[57,84278,156],{"class":140},[57,84280,84281],{"class":74},"\"amount\"",[57,84283,55511],{"class":140},[57,84285,57],{"class":51497},[57,84287,55511],{"class":140},[57,84289,51808],{"class":51497},[57,84291,51504],{"class":140},[57,84293,84294,84296,84298],{"class":59,"line":32830},[57,84295,52614],{"class":140},[57,84297,51808],{"class":51497},[57,84299,51504],{"class":140},[57,84301,84302,84304,84306],{"class":59,"line":32836},[57,84303,52341],{"class":140},[57,84305,52010],{"class":51497},[57,84307,51504],{"class":140},[57,84309,84310,84312,84314,84316],{"class":59,"line":32842},[57,84311,11494],{"class":136},[57,84313,79574],{"class":81},[57,84315,13837],{"class":136},[57,84317,55644],{"class":140},[57,84319,84320],{"class":59,"line":32848},[57,84321,79583],{"class":140},[57,84323,84324,84326,84328],{"class":59,"line":32854},[57,84325,79588],{"class":140},[57,84327,79591],{"class":74},[57,84329,31663],{"class":140},[57,84331,84332,84334,84336],{"class":59,"line":32865},[57,84333,79598],{"class":140},[57,84335,79601],{"class":74},[57,84337,31663],{"class":140},[57,84339,84340,84342,84345],{"class":59,"line":32871},[57,84341,79608],{"class":140},[57,84343,84344],{"class":81},"289.9",[57,84346,31663],{"class":140},[57,84348,84349,84351,84353],{"class":59,"line":32891},[57,84350,79618],{"class":140},[57,84352,79621],{"class":74},[57,84354,31663],{"class":140},[57,84356,84357,84360,84362],{"class":59,"line":32897},[57,84358,84359],{"class":140},"        count: ",[57,84361,498],{"class":81},[57,84363,31663],{"class":140},[57,84365,84366,84369,84372],{"class":59,"line":32908},[57,84367,84368],{"class":140},"        spec: { color: ",[57,84370,84371],{"class":74},"'白色'",[57,84373,55801],{"class":140},[57,84375,84376],{"class":59,"line":32914},[57,84377,78089],{"class":140},[57,84379,84380],{"class":59,"line":32920},[57,84381,79583],{"class":140},[57,84383,84384,84386,84388],{"class":59,"line":32926},[57,84385,79588],{"class":140},[57,84387,79682],{"class":74},[57,84389,31663],{"class":140},[57,84391,84392,84394,84396],{"class":59,"line":32932},[57,84393,79598],{"class":140},[57,84395,79691],{"class":74},[57,84397,31663],{"class":140},[57,84399,84400,84402,84405],{"class":59,"line":32938},[57,84401,79608],{"class":140},[57,84403,84404],{"class":81},"109.8",[57,84406,31663],{"class":140},[57,84408,84409,84411,84413],{"class":59,"line":32944},[57,84410,79618],{"class":140},[57,84412,79709],{"class":74},[57,84414,31663],{"class":140},[57,84416,84417,84419,84421],{"class":59,"line":32950},[57,84418,84359],{"class":140},[57,84420,270],{"class":81},[57,84422,31663],{"class":140},[57,84424,84425,84428,84430,84432,84434],{"class":59,"line":32970},[57,84426,84427],{"class":140},"        spec: { size: ",[57,84429,82100],{"class":74},[57,84431,55661],{"class":140},[57,84433,82105],{"class":74},[57,84435,55801],{"class":140},[57,84437,84438],{"class":59,"line":32976},[57,84439,78089],{"class":140},[57,84441,84442],{"class":59,"line":32992},[57,84443,79583],{"class":140},[57,84445,84446,84448,84450],{"class":59,"line":32998},[57,84447,79588],{"class":140},[57,84449,79726],{"class":74},[57,84451,31663],{"class":140},[57,84453,84454,84456,84458],{"class":59,"line":33012},[57,84455,79598],{"class":140},[57,84457,79735],{"class":74},[57,84459,31663],{"class":140},[57,84461,84462,84464,84467],{"class":59,"line":33018},[57,84463,79608],{"class":140},[57,84465,84466],{"class":81},"488",[57,84468,31663],{"class":140},[57,84470,84471,84473,84475],{"class":59,"line":33033},[57,84472,79618],{"class":140},[57,84474,79753],{"class":74},[57,84476,31663],{"class":140},[57,84478,84479,84481,84483],{"class":59,"line":33039},[57,84480,84359],{"class":140},[57,84482,635],{"class":81},[57,84484,31663],{"class":140},[57,84486,84487,84489,84492,84495,84498],{"class":59,"line":33048},[57,84488,84368],{"class":140},[57,84490,84491],{"class":74},"'青色'",[57,84493,84494],{"class":140},", sum: ",[57,84496,84497],{"class":74},"'一大四小'",[57,84499,55801],{"class":140},[57,84501,84502],{"class":59,"line":33054},[57,84503,78089],{"class":140},[57,84505,84506],{"class":59,"line":33063},[57,84507,79583],{"class":140},[57,84509,84510,84512,84514],{"class":59,"line":33069},[57,84511,79588],{"class":140},[57,84513,79770],{"class":74},[57,84515,31663],{"class":140},[57,84517,84518,84520,84522],{"class":59,"line":33075},[57,84519,79598],{"class":140},[57,84521,79779],{"class":74},[57,84523,31663],{"class":140},[57,84525,84526,84528,84531],{"class":59,"line":33084},[57,84527,79608],{"class":140},[57,84529,84530],{"class":81},"139",[57,84532,31663],{"class":140},[57,84534,84535,84537,84539],{"class":59,"line":33090},[57,84536,79618],{"class":140},[57,84538,79797],{"class":74},[57,84540,31663],{"class":140},[57,84542,84543,84545,84547],{"class":59,"line":33101},[57,84544,84359],{"class":140},[57,84546,635],{"class":81},[57,84548,31663],{"class":140},[57,84550,84551,84553,84556,84558,84561],{"class":59,"line":33107},[57,84552,84427],{"class":140},[57,84554,84555],{"class":74},"'小号'",[57,84557,55661],{"class":140},[57,84559,84560],{"class":74},"'紫色'",[57,84562,55667],{"class":140},[57,84564,84565,84568],{"class":59,"line":33126},[57,84566,84567],{"class":140},"        gift: ",[57,84569,84570],{"class":74},"'50g茶叶,清洗球'\n",[57,84572,84573],{"class":59,"line":33132},[57,84574,52595],{"class":140},[57,84576,84577],{"class":59,"line":33143},[57,84578,53306],{"class":140},[57,84580,84581],{"class":59,"line":33149},[57,84582,84583],{"class":63},"    \u002F\u002F  1.根据数据渲染页面\n",[57,84585,84586,84588,84590,84592,84594,84596,84598,84600,84602,84604,84606,84608],{"class":59,"line":33169},[57,84587,52604],{"class":140},[57,84589,54596],{"class":70},[57,84591,168],{"class":140},[57,84593,80098],{"class":74},[57,84595,74446],{"class":140},[57,84597,156],{"class":136},[57,84599,80245],{"class":140},[57,84601,74241],{"class":70},[57,84603,168],{"class":140},[57,84605,79992],{"class":5489},[57,84607,79995],{"class":136},[57,84609,15844],{"class":140},[57,84611,84612],{"class":59,"line":33185},[57,84613,84614],{"class":63},"      \u002F\u002F 对象解构\n",[57,84616,84617,84619,84621,84623,84625,84627,84629,84632,84634,84636,84638,84641,84643,84646,84648,84650],{"class":59,"line":33191},[57,84618,58425],{"class":136},[57,84620,80004],{"class":140},[57,84622,80017],{"class":81},[57,84624,12708],{"class":140},[57,84626,80007],{"class":81},[57,84628,12708],{"class":140},[57,84630,84631],{"class":81},"count",[57,84633,12708],{"class":140},[57,84635,80012],{"class":81},[57,84637,12708],{"class":140},[57,84639,84640],{"class":81},"spec",[57,84642,12708],{"class":140},[57,84644,84645],{"class":81},"gift",[57,84647,80020],{"class":140},[57,84649,156],{"class":136},[57,84651,80025],{"class":140},[57,84653,84654],{"class":59,"line":33205},[57,84655,84656],{"class":63},"      \u002F\u002F 规格文字模块处理\n",[57,84658,84659,84661,84664,84666,84668,84670,84672,84674,84676,84678],{"class":59,"line":33211},[57,84660,58425],{"class":136},[57,84662,84663],{"class":81}," text",[57,84665,13837],{"class":136},[57,84667,82135],{"class":140},[57,84669,82138],{"class":70},[57,84671,82141],{"class":140},[57,84673,74420],{"class":70},[57,84675,168],{"class":140},[57,84677,82148],{"class":74},[57,84679,238],{"class":140},[57,84681,84682],{"class":59,"line":33217},[57,84683,84684],{"class":63},"      \u002F\u002F 处理赠品模块\n",[57,84686,84687,84689,84691,84693,84696,84698,84700,84702,84704,84707,84709,84711,84713,84715,84717,84720,84722,84725,84727,84729,84731,84733,84735,84737],{"class":59,"line":33228},[57,84688,58425],{"class":136},[57,84690,74116],{"class":81},[57,84692,13837],{"class":136},[57,84694,84695],{"class":140}," gift ",[57,84697,1401],{"class":136},[57,84699,83309],{"class":140},[57,84701,83312],{"class":70},[57,84703,168],{"class":140},[57,84705,84706],{"class":74},"','",[57,84708,31023],{"class":140},[57,84710,74241],{"class":70},[57,84712,168],{"class":140},[57,84714,79992],{"class":5489},[57,84716,79995],{"class":136},[57,84718,84719],{"class":74}," `\u003Cspan class=\"tag\">【赠品】${",[57,84721,79992],{"class":140},[57,84723,84724],{"class":74},"}\u003C\u002Fspan>`",[57,84726,31023],{"class":140},[57,84728,74420],{"class":70},[57,84730,168],{"class":140},[57,84732,74425],{"class":74},[57,84734,229],{"class":140},[57,84736,1275],{"class":136},[57,84738,70301],{"class":74},[57,84740,84741],{"class":59,"line":33234},[57,84742,84743],{"class":63},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[57,84745,84746,84748,84751,84753,84756,84758,84760,84762,84765,84767,84769,84771,84774,84776,84778],{"class":59,"line":33240},[57,84747,58425],{"class":136},[57,84749,84750],{"class":81}," subtotal",[57,84752,13837],{"class":136},[57,84754,84755],{"class":140}," ((price ",[57,84757,871],{"class":136},[57,84759,6027],{"class":81},[57,84761,6791],{"class":136},[57,84763,84764],{"class":140}," count) ",[57,84766,1000],{"class":136},[57,84768,6027],{"class":81},[57,84770,31023],{"class":140},[57,84772,84773],{"class":70},"toFixed",[57,84775,168],{"class":140},[57,84777,498],{"class":81},[57,84779,238],{"class":140},[57,84781,84782],{"class":59,"line":33250},[57,84783,2673],{"emptyLinePlaceholder":350},[57,84785,84786,84788],{"class":59,"line":33256},[57,84787,74179],{"class":136},[57,84789,70365],{"class":74},[57,84791,84792],{"class":59,"line":33267},[57,84793,84794],{"class":74},"        \u003Cdiv class=\"item\">\n",[57,84796,84797,84800,84802],{"class":59,"line":33273},[57,84798,84799],{"class":74},"          \u003Cimg src=\"${",[57,84801,80017],{"class":140},[57,84803,80049],{"class":74},[57,84805,84806,84809,84811,84814,84816],{"class":59,"line":33283},[57,84807,84808],{"class":74},"          \u003Cp class=\"name\">${",[57,84810,80007],{"class":140},[57,84812,84813],{"class":74},"}${",[57,84815,1585],{"class":140},[57,84817,80059],{"class":74},[57,84819,84820,84823,84825],{"class":59,"line":33288},[57,84821,84822],{"class":74},"          \u003Cp class=\"spec\">${",[57,84824,5460],{"class":140},[57,84826,80059],{"class":74},[57,84828,84829,84832,84834,84836,84838,84840,84842,84844],{"class":59,"line":33294},[57,84830,84831],{"class":74},"          \u003Cp class=\"price\">${",[57,84833,80012],{"class":140},[57,84835,974],{"class":74},[57,84837,84773],{"class":70},[57,84839,168],{"class":74},[57,84841,498],{"class":81},[57,84843,845],{"class":74},[57,84845,80059],{"class":74},[57,84847,84848,84851,84853],{"class":59,"line":33343},[57,84849,84850],{"class":74},"          \u003Cp class=\"count\">x${",[57,84852,84631],{"class":140},[57,84854,80059],{"class":74},[57,84856,84857,84860,84863],{"class":59,"line":33390},[57,84858,84859],{"class":74},"          \u003Cp class=\"sub-total\">${",[57,84861,84862],{"class":140},"subtotal",[57,84864,80059],{"class":74},[57,84866,84867],{"class":59,"line":33395},[57,84868,84869],{"class":74},"        \u003C\u002Fdiv> \n",[57,84871,84872],{"class":59,"line":33401},[57,84873,84874],{"class":74},"             `\n",[57,84876,84877,84880,84882,84884,84886],{"class":59,"line":33420},[57,84878,84879],{"class":140},"    }).",[57,84881,74420],{"class":70},[57,84883,168],{"class":140},[57,84885,74425],{"class":74},[57,84887,238],{"class":140},[57,84889,84890],{"class":59,"line":33426},[57,84891,84892],{"class":63},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[57,84894,84895,84897,84899,84901,84903,84906,84908,84911,84913,84915,84917,84920,84923,84925,84928,84930,84932,84934,84937,84939,84941,84943,84945],{"class":59,"line":33446},[57,84896,11494],{"class":136},[57,84898,62982],{"class":81},[57,84900,13837],{"class":136},[57,84902,80245],{"class":140},[57,84904,84905],{"class":70},"reduce",[57,84907,2649],{"class":140},[57,84909,84910],{"class":5489},"prev",[57,84912,12708],{"class":140},[57,84914,79992],{"class":5489},[57,84916,229],{"class":140},[57,84918,84919],{"class":136},"=>",[57,84921,84922],{"class":140}," prev ",[57,84924,897],{"class":136},[57,84926,84927],{"class":140}," (item.price ",[57,84929,871],{"class":136},[57,84931,6027],{"class":81},[57,84933,6791],{"class":136},[57,84935,84936],{"class":140}," item.count) ",[57,84938,1000],{"class":136},[57,84940,6027],{"class":81},[57,84942,12708],{"class":140},[57,84944,226],{"class":81},[57,84946,238],{"class":140},[57,84948,84949,84951,84953,84955,84958,84960,84962,84965,84967,84969,84971],{"class":59,"line":33452},[57,84950,52604],{"class":140},[57,84952,54596],{"class":70},[57,84954,168],{"class":140},[57,84956,84957],{"class":74},"'.amount'",[57,84959,74446],{"class":140},[57,84961,156],{"class":136},[57,84963,84964],{"class":140}," total.",[57,84966,84773],{"class":70},[57,84968,168],{"class":140},[57,84970,498],{"class":81},[57,84972,238],{"class":140},[57,84974,84975,84977,84979],{"class":59,"line":33458},[57,84976,52614],{"class":140},[57,84978,52010],{"class":51497},[57,84980,51504],{"class":140},[57,84982,84983,84985,84987],{"class":59,"line":33468},[57,84984,51982],{"class":140},[57,84986,51997],{"class":51497},[57,84988,51504],{"class":140},[57,84990,84991],{"class":59,"line":33473},[57,84992,2673],{"emptyLinePlaceholder":350},[57,84994,84995,84997,84999],{"class":59,"line":33479},[57,84996,51982],{"class":140},[57,84998,50832],{"class":51497},[57,85000,51504],{"class":140},[365,85002,85004],{"id":85003},"_411-编程思想","4.11 编程思想",[394,85006,85008],{"id":85007},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,85010,85011,85014],{},[33,85012,85013],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,85016,85017],{},"调用就可以了",[14,85019,85020],{},[44,85021],{"alt":46,"src":85022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[394,85024,85026],{"id":85025},"_4112-面向对象","4.11.2 面向对象",[14,85028,85029],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,85031,85032],{},[44,85033],{"alt":46,"src":85034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,85036,85037],{},"面向对象的特性：",[1422,85039,85040,85043,85046],{},[380,85041,85042],{},"封装性",[380,85044,85045],{},"继承性",[380,85047,85048],{},"多态性",[394,85050,85052],{"id":85051},"_4113-两者比较","4.11.3 两者比较",[14,85054,85055],{},[44,85056],{"alt":46,"src":85057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[365,85059,85061],{"id":85060},"_412-构造函数回顾","4.12 构造函数回顾",[14,85063,85064],{},[44,85065],{"alt":46,"src":85066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,85068,85069],{},[44,85070],{"alt":46,"src":85071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,85073,85074],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,85076,85077],{},[44,85078],{"alt":46,"src":85079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[365,85081,85083],{"id":85082},"_413-原型","4.13 原型",[394,85085,85087],{"id":85086},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,85089,85090],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,85092,85093],{},[44,85094],{"alt":46,"src":85095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,85097,85098],{},[44,85099],{"alt":46,"src":85100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,85102,85103],{},"原型是构造函数的属性，它也是一个对象",[14,85105,85106],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,85108,85109],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[49,85111,85113],{"className":53264,"code":85112,"language":53266,"meta":46,"style":46},"\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",[28,85114,85115,85123,85128,85136,85141,85146,85151,85156,85161,85165,85169,85173,85178,85183,85187,85192,85197,85202,85207,85212,85216,85224],{"__ignoreMap":46},[57,85116,85117,85119,85121],{"class":59,"line":60},[57,85118,1326],{"class":140},[57,85120,51997],{"class":51497},[57,85122,51504],{"class":140},[57,85124,85125],{"class":59,"line":67},[57,85126,85127],{"class":63},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[57,85129,85130,85132,85134],{"class":59,"line":144},[57,85131,52341],{"class":140},[57,85133,52010],{"class":51497},[57,85135,51504],{"class":140},[57,85137,85138],{"class":59,"line":150},[57,85139,85140],{"class":140},"    function Star(uname, age) {\n",[57,85142,85143],{"class":59,"line":162},[57,85144,85145],{"class":140},"      this.uname = uname,\n",[57,85147,85148],{"class":59,"line":180},[57,85149,85150],{"class":140},"        this.age = age\n",[57,85152,85153],{"class":59,"line":186},[57,85154,85155],{"class":140},"      \u002F\u002F this.sing = function () {\n",[57,85157,85158],{"class":59,"line":197},[57,85159,85160],{"class":140},"      \u002F\u002F   console.log('唱歌')\n",[57,85162,85163],{"class":59,"line":241},[57,85164,2673],{"emptyLinePlaceholder":350},[57,85166,85167],{"class":59,"line":249},[57,85168,60234],{"class":140},[57,85170,85171],{"class":59,"line":262},[57,85172,2460],{"class":140},[57,85174,85175],{"class":59,"line":281},[57,85176,85177],{"class":140},"    Star.prototype.sing = function () {\n",[57,85179,85180],{"class":59,"line":287},[57,85181,85182],{"class":140},"      console.log('唱歌')\n",[57,85184,85185],{"class":59,"line":298},[57,85186,2460],{"class":140},[57,85188,85189],{"class":59,"line":311},[57,85190,85191],{"class":140},"    \u002F\u002F console.dir(Star.prototype)\n",[57,85193,85194],{"class":59,"line":322},[57,85195,85196],{"class":140},"    const pink = new Star('pink', 18)\n",[57,85198,85199],{"class":59,"line":1929},[57,85200,85201],{"class":140},"    const red = new Star('red', 20)\n",[57,85203,85204],{"class":59,"line":1950},[57,85205,85206],{"class":140},"    pink.sing()\n",[57,85208,85209],{"class":59,"line":1955},[57,85210,85211],{"class":140},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[57,85213,85214],{"class":59,"line":1969},[57,85215,2673],{"emptyLinePlaceholder":350},[57,85217,85218,85220,85222],{"class":59,"line":1974},[57,85219,52614],{"class":140},[57,85221,52010],{"class":51497},[57,85223,51504],{"class":140},[57,85225,85226,85228,85230],{"class":59,"line":2001},[57,85227,51982],{"class":140},[57,85229,51997],{"class":51497},[57,85231,51504],{"class":140},[14,85233,85234],{},[44,85235],{"alt":46,"src":85236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[49,85238,85240],{"className":53264,"code":85239,"language":53266,"meta":46,"style":46},"\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",[28,85241,85242,85250,85258,85263,85268,85273,85278,85282,85287,85292,85297,85301,85306,85310,85314,85319,85323,85331],{"__ignoreMap":46},[57,85243,85244,85246,85248],{"class":59,"line":60},[57,85245,1326],{"class":140},[57,85247,51997],{"class":51497},[57,85249,51504],{"class":140},[57,85251,85252,85254,85256],{"class":59,"line":67},[57,85253,52341],{"class":140},[57,85255,52010],{"class":51497},[57,85257,51504],{"class":140},[57,85259,85260],{"class":59,"line":144},[57,85261,85262],{"class":140},"    let that\n",[57,85264,85265],{"class":59,"line":150},[57,85266,85267],{"class":140},"    function Star(uname) {\n",[57,85269,85270],{"class":59,"line":162},[57,85271,85272],{"class":140},"      this.uname = uname\n",[57,85274,85275],{"class":59,"line":180},[57,85276,85277],{"class":140},"      that = this\n",[57,85279,85280],{"class":59,"line":186},[57,85281,2460],{"class":140},[57,85283,85284],{"class":59,"line":197},[57,85285,85286],{"class":140},"    \u002F\u002F 实例对象是 ldh\n",[57,85288,85289],{"class":59,"line":241},[57,85290,85291],{"class":140},"    const ldh = new Star('刘德华')\n",[57,85293,85294],{"class":59,"line":249},[57,85295,85296],{"class":140},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[57,85298,85299],{"class":59,"line":262},[57,85300,2673],{"emptyLinePlaceholder":350},[57,85302,85303],{"class":59,"line":281},[57,85304,85305],{"class":140},"    Star.sing = function () {\n",[57,85307,85308],{"class":59,"line":287},[57,85309,85182],{"class":140},[57,85311,85312],{"class":59,"line":298},[57,85313,2460],{"class":140},[57,85315,85316],{"class":59,"line":311},[57,85317,85318],{"class":140},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[57,85320,85321],{"class":59,"line":322},[57,85322,2673],{"emptyLinePlaceholder":350},[57,85324,85325,85327,85329],{"class":59,"line":1929},[57,85326,52614],{"class":140},[57,85328,52010],{"class":51497},[57,85330,51504],{"class":140},[57,85332,85333,85335,85337],{"class":59,"line":1950},[57,85334,51982],{"class":140},[57,85336,51997],{"class":51497},[57,85338,51504],{"class":140},[14,85340,85341],{},"构造函数的this指向的是实例对象；",[14,85343,85344],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[394,85346,85348],{"id":85347},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,85350,85351],{},[44,85352],{"alt":46,"src":85353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[49,85355,85357],{"className":53264,"code":85356,"language":53266,"meta":46,"style":46},"\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",[28,85358,85359,85367,85375,85380,85385,85390,85395,85400,85405,85410,85415,85420,85425,85429,85434,85439,85444,85449,85453,85458,85463,85468,85473,85477,85482,85487,85492,85497,85501,85506,85510,85518],{"__ignoreMap":46},[57,85360,85361,85363,85365],{"class":59,"line":60},[57,85362,1326],{"class":140},[57,85364,51997],{"class":51497},[57,85366,51504],{"class":140},[57,85368,85369,85371,85373],{"class":59,"line":67},[57,85370,52341],{"class":140},[57,85372,52010],{"class":51497},[57,85374,51504],{"class":140},[57,85376,85377],{"class":59,"line":144},[57,85378,85379],{"class":140},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[57,85381,85382],{"class":59,"line":150},[57,85383,85384],{"class":140},"    const arr = [1, 2, 3]\n",[57,85386,85387],{"class":59,"line":162},[57,85388,85389],{"class":140},"    \u002F\u002F 自己定义数组的扩展方法\n",[57,85391,85392],{"class":59,"line":180},[57,85393,85394],{"class":140},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[57,85396,85397],{"class":59,"line":186},[57,85398,85399],{"class":140},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[57,85401,85402],{"class":59,"line":197},[57,85403,85404],{"class":140},"    \u002F\u002F ①.最大值\n",[57,85406,85407],{"class":59,"line":241},[57,85408,85409],{"class":140},"    Array.prototype.max = function () {\n",[57,85411,85412],{"class":59,"line":249},[57,85413,85414],{"class":140},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[57,85416,85417],{"class":59,"line":262},[57,85418,85419],{"class":140},"      return Math.max(...this)\n",[57,85421,85422],{"class":59,"line":281},[57,85423,85424],{"class":140},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[57,85426,85427],{"class":59,"line":287},[57,85428,2460],{"class":140},[57,85430,85431],{"class":59,"line":298},[57,85432,85433],{"class":140},"    console.log(arr.max())\n",[57,85435,85436],{"class":59,"line":311},[57,85437,85438],{"class":140},"    \u002F\u002F ②最小值\n",[57,85440,85441],{"class":59,"line":322},[57,85442,85443],{"class":140},"    Array.prototype.min = function () {\n",[57,85445,85446],{"class":59,"line":1929},[57,85447,85448],{"class":140},"      return Math.min(...this)\n",[57,85450,85451],{"class":59,"line":1950},[57,85452,2460],{"class":140},[57,85454,85455],{"class":59,"line":1955},[57,85456,85457],{"class":140},"    console.log(arr.min())\n",[57,85459,85460],{"class":59,"line":1969},[57,85461,85462],{"class":140},"    \u002F\u002F③求和\n",[57,85464,85465],{"class":59,"line":1974},[57,85466,85467],{"class":140},"    Array.prototype.sum = function () {\n",[57,85469,85470],{"class":59,"line":2001},[57,85471,85472],{"class":140},"      return this.reduce((prev, current) => prev + current, 0)\n",[57,85474,85475],{"class":59,"line":2006},[57,85476,2460],{"class":140},[57,85478,85479],{"class":59,"line":2023},[57,85480,85481],{"class":140},"    console.log(arr.sum())\n",[57,85483,85484],{"class":59,"line":2028},[57,85485,85486],{"class":140},"    \u002F\u002F ③排序\n",[57,85488,85489],{"class":59,"line":2033},[57,85490,85491],{"class":140},"    Array.prototype.rever = function () {\n",[57,85493,85494],{"class":59,"line":2038},[57,85495,85496],{"class":140},"      return this.reverse()\n",[57,85498,85499],{"class":59,"line":2052},[57,85500,2460],{"class":140},[57,85502,85503],{"class":59,"line":2057},[57,85504,85505],{"class":140},"    console.log(arr.rever())\n",[57,85507,85508],{"class":59,"line":2850},[57,85509,2673],{"emptyLinePlaceholder":350},[57,85511,85512,85514,85516],{"class":59,"line":2864},[57,85513,52614],{"class":140},[57,85515,52010],{"class":51497},[57,85517,51504],{"class":140},[57,85519,85520,85522,85524],{"class":59,"line":2872},[57,85521,51982],{"class":140},[57,85523,51997],{"class":51497},[57,85525,51504],{"class":140},[14,85527,85528],{},[44,85529],{"alt":46,"src":85530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[394,85532,85534],{"id":85533},"_4133-constructor-属性","4.13.3 constructor 属性",[14,85536,85537],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,85539,85540],{},[44,85541],{"alt":46,"src":85542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[49,85544,85546],{"className":53264,"code":85545,"language":53266,"meta":46,"style":46},"\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",[28,85547,85548,85556,85564,85569,85574,85578,85583,85588,85593,85601],{"__ignoreMap":46},[57,85549,85550,85552,85554],{"class":59,"line":60},[57,85551,1326],{"class":140},[57,85553,51997],{"class":51497},[57,85555,51504],{"class":140},[57,85557,85558,85560,85562],{"class":59,"line":67},[57,85559,52341],{"class":140},[57,85561,52010],{"class":51497},[57,85563,51504],{"class":140},[57,85565,85566],{"class":59,"line":144},[57,85567,85568],{"class":140},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[57,85570,85571],{"class":59,"line":150},[57,85572,85573],{"class":140},"    function Star() {\n",[57,85575,85576],{"class":59,"line":162},[57,85577,2460],{"class":140},[57,85579,85580],{"class":59,"line":180},[57,85581,85582],{"class":140},"    const ldh = new Star()\n",[57,85584,85585],{"class":59,"line":186},[57,85586,85587],{"class":140},"    console.log(Star.prototype)\n",[57,85589,85590],{"class":59,"line":197},[57,85591,85592],{"class":140},"    console.log(Star.prototype.constructor === Star)\n",[57,85594,85595,85597,85599],{"class":59,"line":241},[57,85596,52614],{"class":140},[57,85598,52010],{"class":51497},[57,85600,51504],{"class":140},[57,85602,85603,85605,85607],{"class":59,"line":249},[57,85604,51982],{"class":140},[57,85606,51997],{"class":51497},[57,85608,51504],{"class":140},[14,85610,85611],{},[44,85612],{"alt":46,"src":85613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,85615,85616],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[49,85618,85620],{"className":53264,"code":85619,"language":53266,"meta":46,"style":46},"  \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",[28,85621,85622,85630,85634,85638,85642,85647,85652,85657,85661,85666,85671,85676,85681,85686,85691,85695,85699,85704,85709,85714,85718,85723,85728,85732,85736,85740],{"__ignoreMap":46},[57,85623,85624,85626,85628],{"class":59,"line":60},[57,85625,52341],{"class":140},[57,85627,52010],{"class":51497},[57,85629,51504],{"class":140},[57,85631,85632],{"class":59,"line":67},[57,85633,85568],{"class":140},[57,85635,85636],{"class":59,"line":144},[57,85637,85573],{"class":140},[57,85639,85640],{"class":59,"line":150},[57,85641,2460],{"class":140},[57,85643,85644],{"class":59,"line":162},[57,85645,85646],{"class":140},"    \u002F\u002F const ldh = new Star()\n",[57,85648,85649],{"class":59,"line":180},[57,85650,85651],{"class":140},"    \u002F\u002F console.log(Star.prototype)\n",[57,85653,85654],{"class":59,"line":186},[57,85655,85656],{"class":140},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[57,85658,85659],{"class":59,"line":197},[57,85660,2673],{"emptyLinePlaceholder":350},[57,85662,85663],{"class":59,"line":241},[57,85664,85665],{"class":140},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[57,85667,85668],{"class":59,"line":249},[57,85669,85670],{"class":140},"    \u002F\u002F Star.prototype.sing = function () {\n",[57,85672,85673],{"class":59,"line":262},[57,85674,85675],{"class":140},"    \u002F\u002F   console.log('唱歌')\n",[57,85677,85678],{"class":59,"line":281},[57,85679,85680],{"class":140},"    \u002F\u002F }\n",[57,85682,85683],{"class":59,"line":287},[57,85684,85685],{"class":140},"    \u002F\u002F Star.prototype.dance = function () {\n",[57,85687,85688],{"class":59,"line":298},[57,85689,85690],{"class":140},"    \u002F\u002F   console.log('跳舞')\n",[57,85692,85693],{"class":59,"line":311},[57,85694,85680],{"class":140},[57,85696,85697],{"class":59,"line":322},[57,85698,85587],{"class":140},[57,85700,85701],{"class":59,"line":1929},[57,85702,85703],{"class":140},"    Star.prototype = {\n",[57,85705,85706],{"class":59,"line":1950},[57,85707,85708],{"class":140},"      sing: function () {\n",[57,85710,85711],{"class":59,"line":1955},[57,85712,85713],{"class":140},"        console.log('唱歌')\n",[57,85715,85716],{"class":59,"line":1969},[57,85717,78089],{"class":140},[57,85719,85720],{"class":59,"line":1974},[57,85721,85722],{"class":140},"      dance: function () {\n",[57,85724,85725],{"class":59,"line":2001},[57,85726,85727],{"class":140},"        console.log('跳舞')\n",[57,85729,85730],{"class":59,"line":2006},[57,85731,52595],{"class":140},[57,85733,85734],{"class":59,"line":2023},[57,85735,2460],{"class":140},[57,85737,85738],{"class":59,"line":2028},[57,85739,85587],{"class":140},[57,85741,85742,85744,85746],{"class":59,"line":2033},[57,85743,52614],{"class":140},[57,85745,52010],{"class":51497},[57,85747,51504],{"class":140},[14,85749,85750],{},"进行输出结果后会发现：",[14,85752,85753],{},[44,85754],{"alt":46,"src":85755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,85757,85758],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,85760,85761],{},"所以，要重新指回创造这个原型对象的构造函数",[49,85763,85765],{"className":71410,"code":85764,"language":71412,"meta":46,"style":46},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[28,85766,85767,85781,85786,85791,85802,85815,85820,85831,85845,85849],{"__ignoreMap":46},[57,85768,85769,85772,85774,85777,85779],{"class":59,"line":60},[57,85770,85771],{"class":81},"Star",[57,85773,974],{"class":140},[57,85775,85776],{"class":81},"prototype",[57,85778,13837],{"class":136},[57,85780,15844],{"class":140},[57,85782,85783],{"class":59,"line":67},[57,85784,85785],{"class":63},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[57,85787,85788],{"class":59,"line":144},[57,85789,85790],{"class":140},"  constructor: Star,\n",[57,85792,85793,85796,85798,85800],{"class":59,"line":150},[57,85794,85795],{"class":70},"  sing",[57,85797,51634],{"class":140},[57,85799,54646],{"class":136},[57,85801,54649],{"class":140},[57,85803,85804,85806,85808,85810,85813],{"class":59,"line":162},[57,85805,73950],{"class":140},[57,85807,58444],{"class":70},[57,85809,168],{"class":140},[57,85811,85812],{"class":74},"'唱歌'",[57,85814,238],{"class":140},[57,85816,85817],{"class":59,"line":180},[57,85818,85819],{"class":140},"   },\n",[57,85821,85822,85825,85827,85829],{"class":59,"line":186},[57,85823,85824],{"class":70},"   dance",[57,85826,51634],{"class":140},[57,85828,54646],{"class":136},[57,85830,54649],{"class":140},[57,85832,85833,85836,85838,85840,85843],{"class":59,"line":197},[57,85834,85835],{"class":140},"     console.",[57,85837,58444],{"class":70},[57,85839,168],{"class":140},[57,85841,85842],{"class":74},"'跳舞'",[57,85844,238],{"class":140},[57,85846,85847],{"class":59,"line":241},[57,85848,4582],{"class":140},[57,85850,85851],{"class":59,"line":249},[57,85852,1847],{"class":140},[14,85854,85855],{},[44,85856],{"alt":46,"src":85857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,85859,85860],{},"总结1：",[14,85862,85863],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,85865,85866],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,85868,85869],{},"constructor指的是他的来源",[14,85871,85872],{},[44,85873],{"alt":46,"src":85874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,85876,85877],{},[44,85878],{"alt":46,"src":85879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,85881,85882],{},"总结2：",[14,85884,85885],{},[44,85886],{"alt":46,"src":85887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,85889,85890],{},[44,85891],{"alt":46,"src":85892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,85894,85895],{},[44,85896],{"alt":46,"src":85897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[394,85899,85901],{"id":85900},"_4134-对象原型","4.13.4 对象原型",[14,85903,85904],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,85906,85907],{},"对象原型就是__proto__这个属性",[14,85909,85910],{},[44,85911],{"alt":46,"src":85912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,85914,85915],{},[44,85916],{"alt":46,"src":85917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,85919,85920],{},[44,85921],{"alt":46,"src":85922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,85924,85925],{},[44,85926],{"alt":46,"src":85927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[49,85929,85931],{"className":53264,"code":85930,"language":53266,"meta":46,"style":46},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[28,85932,85933,85941,85949,85953,85957,85961,85966,85974],{"__ignoreMap":46},[57,85934,85935,85937,85939],{"class":59,"line":60},[57,85936,1326],{"class":140},[57,85938,51997],{"class":51497},[57,85940,51504],{"class":140},[57,85942,85943,85945,85947],{"class":59,"line":67},[57,85944,52341],{"class":140},[57,85946,52010],{"class":51497},[57,85948,51504],{"class":140},[57,85950,85951],{"class":59,"line":144},[57,85952,85573],{"class":140},[57,85954,85955],{"class":59,"line":150},[57,85956,2460],{"class":140},[57,85958,85959],{"class":59,"line":162},[57,85960,85582],{"class":140},[57,85962,85963],{"class":59,"line":180},[57,85964,85965],{"class":140},"    console.log(ldh)\n",[57,85967,85968,85970,85972],{"class":59,"line":186},[57,85969,52614],{"class":140},[57,85971,52010],{"class":51497},[57,85973,51504],{"class":140},[57,85975,85976,85978,85980],{"class":59,"line":197},[57,85977,51982],{"class":140},[57,85979,51997],{"class":51497},[57,85981,51504],{"class":140},[14,85983,85984],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,85986,85987],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,85989,85990],{},[44,85991],{"alt":46,"src":85992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,85994,85995],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,85997,85998],{},"对象原型指向原型对象",[14,86000,86001],{},[44,86002],{"alt":46,"src":86003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,86005,86006],{},[44,86007],{"alt":46,"src":86008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,86010,86011],{},[44,86012],{"alt":46,"src":86013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[394,86015,86017],{"id":86016},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,86019,86020],{},[44,86021],{"alt":46,"src":86022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[377,86024,86025,86028,86031,86034],{},[380,86026,86027],{},"构造函数通过new的形式实例化得到实例对象",[380,86029,86030],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[380,86032,86033],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[380,86035,86036],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,86038,86039],{},[44,86040],{"alt":46,"src":86041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,86043,86044],{},"题目梳理：",[14,86046,86047],{},[44,86048],{"alt":46,"src":86049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[394,86051,86053],{"id":86052},"_4136-原型继承","4.13.6 原型继承",[14,86055,86056],{},[44,86057],{"alt":46,"src":86058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,86060,86061],{},[44,86062],{"alt":46,"src":86063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,86065,86066],{},[44,86067],{"alt":46,"src":86068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,86070,86071],{},[44,86072],{"alt":46,"src":86073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,86075,86076],{},[44,86077],{"alt":46,"src":86078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,86080,86081],{},[44,86082],{"alt":46,"src":86083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,86085,86086],{},[44,86087],{"alt":46,"src":86088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,86090,86091],{},[44,86092],{"alt":46,"src":86093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,86095,86096],{},"回顾：构造函数每次new得到对象都是不同的",[394,86098,86100],{"id":86099},"_4137-原型链","4.13.7 原型链",[14,86102,86103],{},[44,86104],{"alt":46,"src":86105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,86107,86108],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,86110,86111],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,86113,86114],{},"大哥是Object",[14,86116,86117],{},[44,86118],{"alt":46,"src":86119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,86121,86122],{},[44,86123],{"alt":46,"src":86124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,86126,86127],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,86129,86130],{},"万物皆对象",[394,86132,86134],{"id":86133},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,86136,86137],{},"模态框",[14,86139,86140],{},"以后遇见这个效果直接使用这个就行",[14,86142,86143],{},[44,86144],{"alt":46,"src":86145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,86147,86148],{},[44,86149],{"alt":46,"src":86150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,86152,86153],{},[44,86154],{"alt":46,"src":86155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,86157,86158],{},[44,86159],{"alt":46,"src":86160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,86162,86163],{},"补充知识点：",[377,86165,86166],{},[380,86167,86168],{},"append()",[14,86170,86171],{},[44,86172],{"alt":46,"src":86173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[49,86175,86177],{"className":50830,"code":86176,"language":50832,"meta":46,"style":46},"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",[28,86178,86179,86184,86189,86194,86198,86202,86206,86211,86216,86221,86225],{"__ignoreMap":46},[57,86180,86181],{"class":59,"line":60},[57,86182,86183],{"class":140},"append(param1)\n",[57,86185,86186],{"class":59,"line":67},[57,86187,86188],{"class":140},"append(param1, param2)\n",[57,86190,86191],{"class":59,"line":144},[57,86192,86193],{"class":140},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[57,86195,86196],{"class":59,"line":150},[57,86197,2673],{"emptyLinePlaceholder":350},[57,86199,86200],{"class":59,"line":162},[57,86201,2673],{"emptyLinePlaceholder":350},[57,86203,86204],{"class":59,"line":180},[57,86205,2673],{"emptyLinePlaceholder":350},[57,86207,86208],{"class":59,"line":186},[57,86209,86210],{"class":140},"let div = document.createElement(\"div\");\n",[57,86212,86213],{"class":59,"line":197},[57,86214,86215],{"class":140},"let p = document.createElement(\"p\");\n",[57,86217,86218],{"class":59,"line":241},[57,86219,86220],{"class":140},"div.append(p);\n",[57,86222,86223],{"class":59,"line":249},[57,86224,2673],{"emptyLinePlaceholder":350},[57,86226,86227,86230,86232],{"class":59,"line":262},[57,86228,86229],{"class":140},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[57,86231,14],{"class":51497},[57,86233,86234],{"class":140},"> ]\n",[377,86236,86237],{"start":67},[380,86238,86239],{},"remove()",[14,86241,86242],{},"自己删自己",[14,86244,86245],{},[44,86246],{"alt":46,"src":86247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[49,86249,86251],{"className":50830,"code":86250,"language":50832,"meta":46,"style":46},"\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",[28,86252,86253,86263,86277,86281,86289,86303,86323,86335,86343,86350,86362,86375,86410,86422,86433,86445,86457,86469,86496,86506,86510,86514,86523,86535,86549,86559,86571,86575,86579,86589,86600,86610,86620,86633,86646,86656,86660,86664,86673,86683,86695,86699,86703,86712,86722,86732,86744,86748,86752,86762,86778,86789,86799,86809,86821,86833,86845,86849,86853,86866,86877,86881,86889,86897,86901,86909,86929,86949,86957,86962,86988,86993,86998,87017,87022,87034,87039,87050,87060,87070,87075,87080,87084,87089,87094,87099,87119,87124,87144,87149,87163,87168,87173,87178,87194,87198,87203,87232,87237,87242,87247,87258,87262,87266,87270,87275,87300,87305,87330,87335,87344,87348,87353,87378,87382,87407,87411,87420,87424,87429,87447,87457,87461,87469,87477,87481],{"__ignoreMap":46},[57,86254,86255,86257,86259,86261],{"class":59,"line":60},[57,86256,51494],{"class":140},[57,86258,51498],{"class":51497},[57,86260,51501],{"class":70},[57,86262,51504],{"class":140},[57,86264,86265,86267,86269,86271,86273,86275],{"class":59,"line":67},[57,86266,1326],{"class":140},[57,86268,50832],{"class":51497},[57,86270,51513],{"class":70},[57,86272,156],{"class":140},[57,86274,51518],{"class":74},[57,86276,51504],{"class":140},[57,86278,86279],{"class":59,"line":144},[57,86280,2673],{"emptyLinePlaceholder":350},[57,86282,86283,86285,86287],{"class":59,"line":150},[57,86284,1326],{"class":140},[57,86286,51531],{"class":51497},[57,86288,51504],{"class":140},[57,86290,86291,86293,86295,86297,86299,86301],{"class":59,"line":162},[57,86292,52341],{"class":140},[57,86294,51541],{"class":51497},[57,86296,51544],{"class":70},[57,86298,156],{"class":140},[57,86300,51549],{"class":74},[57,86302,51504],{"class":140},[57,86304,86305,86307,86309,86311,86313,86315,86317,86319,86321],{"class":59,"line":180},[57,86306,52341],{"class":140},[57,86308,51541],{"class":51497},[57,86310,15192],{"class":70},[57,86312,156],{"class":140},[57,86314,51588],{"class":74},[57,86316,51568],{"class":70},[57,86318,156],{"class":140},[57,86320,51595],{"class":74},[57,86322,51504],{"class":140},[57,86324,86325,86327,86329,86331,86333],{"class":59,"line":186},[57,86326,52341],{"class":140},[57,86328,51604],{"class":51497},[57,86330,51607],{"class":140},[57,86332,51604],{"class":51497},[57,86334,51504],{"class":140},[57,86336,86337,86339,86341],{"class":59,"line":197},[57,86338,52341],{"class":140},[57,86340,342],{"class":51497},[57,86342,51504],{"class":140},[57,86344,86345,86348],{"class":59,"line":241},[57,86346,86347],{"class":70},"    .modal",[57,86349,15844],{"class":140},[57,86351,86352,86354,86356,86358,86360],{"class":59,"line":249},[57,86353,54968],{"class":81},[57,86355,51634],{"class":140},[57,86357,4246],{"class":81},[57,86359,51689],{"class":136},[57,86361,1576],{"class":140},[57,86363,86364,86367,86369,86371,86373],{"class":59,"line":262},[57,86365,86366],{"class":81},"      min-height",[57,86368,51634],{"class":140},[57,86370,728],{"class":81},[57,86372,51689],{"class":136},[57,86374,1576],{"class":140},[57,86376,86377,86379,86381,86383,86385,86387,86389,86391,86393,86395,86397,86399,86401,86403,86405,86408],{"class":59,"line":281},[57,86378,78947],{"class":81},[57,86380,51634],{"class":140},[57,86382,226],{"class":81},[57,86384,4366],{"class":81},[57,86386,2311],{"class":81},[57,86388,51689],{"class":136},[57,86390,78964],{"class":81},[57,86392,168],{"class":140},[57,86394,226],{"class":81},[57,86396,12708],{"class":140},[57,86398,226],{"class":81},[57,86400,12708],{"class":140},[57,86402,226],{"class":81},[57,86404,12708],{"class":140},[57,86406,86407],{"class":81},"0.1",[57,86409,2992],{"class":140},[57,86411,86412,86414,86416,86418,86420],{"class":59,"line":287},[57,86413,55331],{"class":81},[57,86415,51634],{"class":140},[57,86417,710],{"class":81},[57,86419,51689],{"class":136},[57,86421,1576],{"class":140},[57,86423,86424,86426,86428,86431],{"class":59,"line":298},[57,86425,54956],{"class":81},[57,86427,51634],{"class":140},[57,86429,86430],{"class":81},"fixed",[57,86432,1576],{"class":140},[57,86434,86435,86438,86440,86443],{"class":59,"line":311},[57,86436,86437],{"class":81},"      z-index",[57,86439,51634],{"class":140},[57,86441,86442],{"class":81},"999",[57,86444,1576],{"class":140},[57,86446,86447,86449,86451,86453,86455],{"class":59,"line":322},[57,86448,55035],{"class":81},[57,86450,51634],{"class":140},[57,86452,1072],{"class":81},[57,86454,745],{"class":136},[57,86456,1576],{"class":140},[57,86458,86459,86461,86463,86465,86467],{"class":59,"line":1929},[57,86460,55144],{"class":81},[57,86462,51634],{"class":140},[57,86464,1072],{"class":81},[57,86466,745],{"class":136},[57,86468,1576],{"class":140},[57,86470,86471,86473,86475,86477,86479,86482,86484,86486,86488,86490,86492,86494],{"class":59,"line":1950},[57,86472,78988],{"class":81},[57,86474,51634],{"class":140},[57,86476,78993],{"class":81},[57,86478,168],{"class":140},[57,86480,86481],{"class":81},"-50",[57,86483,745],{"class":136},[57,86485,12708],{"class":140},[57,86487,86481],{"class":81},[57,86489,745],{"class":136},[57,86491,12708],{"class":140},[57,86493,226],{"class":81},[57,86495,2992],{"class":140},[57,86497,86498,86500,86502,86504],{"class":59,"line":1955},[57,86499,55081],{"class":81},[57,86501,51634],{"class":140},[57,86503,61039],{"class":81},[57,86505,1576],{"class":140},[57,86507,86508],{"class":59,"line":1969},[57,86509,2460],{"class":140},[57,86511,86512],{"class":59,"line":1974},[57,86513,2673],{"emptyLinePlaceholder":350},[57,86515,86516,86518,86521],{"class":59,"line":2001},[57,86517,86347],{"class":70},[57,86519,86520],{"class":70}," .header",[57,86522,15844],{"class":140},[57,86524,86525,86527,86529,86531,86533],{"class":59,"line":2006},[57,86526,57556],{"class":81},[57,86528,51634],{"class":140},[57,86530,817],{"class":81},[57,86532,51689],{"class":136},[57,86534,1576],{"class":140},[57,86536,86537,86539,86541,86543,86545,86547],{"class":59,"line":2023},[57,86538,54892],{"class":81},[57,86540,51634],{"class":140},[57,86542,226],{"class":81},[57,86544,2311],{"class":81},[57,86546,51689],{"class":136},[57,86548,1576],{"class":140},[57,86550,86551,86553,86555,86557],{"class":59,"line":2028},[57,86552,54956],{"class":81},[57,86554,51634],{"class":140},[57,86556,54961],{"class":81},[57,86558,1576],{"class":140},[57,86560,86561,86563,86565,86567,86569],{"class":59,"line":2033},[57,86562,55119],{"class":81},[57,86564,51634],{"class":140},[57,86566,1116],{"class":81},[57,86568,51689],{"class":136},[57,86570,1576],{"class":140},[57,86572,86573],{"class":59,"line":2038},[57,86574,2460],{"class":140},[57,86576,86577],{"class":59,"line":2052},[57,86578,2673],{"emptyLinePlaceholder":350},[57,86580,86581,86583,86585,86587],{"class":59,"line":2057},[57,86582,86347],{"class":70},[57,86584,86520],{"class":70},[57,86586,3305],{"class":51497},[57,86588,15844],{"class":140},[57,86590,86591,86594,86596,86598],{"class":59,"line":2850},[57,86592,86593],{"class":81},"      font-style",[57,86595,51634],{"class":140},[57,86597,64038],{"class":81},[57,86599,1576],{"class":140},[57,86601,86602,86604,86606,86608],{"class":59,"line":2864},[57,86603,57613],{"class":81},[57,86605,51634],{"class":140},[57,86607,62267],{"class":81},[57,86609,1576],{"class":140},[57,86611,86612,86614,86616,86618],{"class":59,"line":2872},[57,86613,54956],{"class":81},[57,86615,51634],{"class":140},[57,86617,55028],{"class":81},[57,86619,1576],{"class":140},[57,86621,86622,86625,86627,86629,86631],{"class":59,"line":2877},[57,86623,86624],{"class":81},"      right",[57,86626,51634],{"class":140},[57,86628,991],{"class":81},[57,86630,51689],{"class":136},[57,86632,1576],{"class":140},[57,86634,86635,86637,86639,86642,86644],{"class":59,"line":2883},[57,86636,55144],{"class":81},[57,86638,51634],{"class":140},[57,86640,86641],{"class":81},"-2",[57,86643,51689],{"class":136},[57,86645,1576],{"class":140},[57,86647,86648,86650,86652,86654],{"class":59,"line":2889},[57,86649,62222],{"class":81},[57,86651,51634],{"class":140},[57,86653,62227],{"class":81},[57,86655,1576],{"class":140},[57,86657,86658],{"class":59,"line":2894},[57,86659,2460],{"class":140},[57,86661,86662],{"class":59,"line":8221},[57,86663,2673],{"emptyLinePlaceholder":350},[57,86665,86666,86668,86671],{"class":59,"line":8245},[57,86667,86347],{"class":70},[57,86669,86670],{"class":70}," .body",[57,86672,15844],{"class":140},[57,86674,86675,86677,86679,86681],{"class":59,"line":8250},[57,86676,57483],{"class":81},[57,86678,51634],{"class":140},[57,86680,51789],{"class":81},[57,86682,1576],{"class":140},[57,86684,86685,86687,86689,86691,86693],{"class":59,"line":8256},[57,86686,54892],{"class":81},[57,86688,51634],{"class":140},[57,86690,862],{"class":81},[57,86692,51689],{"class":136},[57,86694,1576],{"class":140},[57,86696,86697],{"class":59,"line":8283},[57,86698,2460],{"class":140},[57,86700,86701],{"class":59,"line":8288},[57,86702,2673],{"emptyLinePlaceholder":350},[57,86704,86705,86707,86710],{"class":59,"line":8294},[57,86706,86347],{"class":70},[57,86708,86709],{"class":70}," .footer",[57,86711,15844],{"class":140},[57,86713,86714,86716,86718,86720],{"class":59,"line":8306},[57,86715,55206],{"class":81},[57,86717,51634],{"class":140},[57,86719,51674],{"class":81},[57,86721,1576],{"class":140},[57,86723,86724,86726,86728,86730],{"class":59,"line":8318},[57,86725,55217],{"class":81},[57,86727,51634],{"class":140},[57,86729,51777],{"class":81},[57,86731,1576],{"class":140},[57,86733,86734,86736,86738,86740,86742],{"class":59,"line":8330},[57,86735,54892],{"class":81},[57,86737,51634],{"class":140},[57,86739,862],{"class":81},[57,86741,51689],{"class":136},[57,86743,1576],{"class":140},[57,86745,86746],{"class":59,"line":9989},[57,86747,2460],{"class":140},[57,86749,86750],{"class":59,"line":10014},[57,86751,2673],{"emptyLinePlaceholder":350},[57,86753,86754,86756,86758,86760],{"class":59,"line":10037},[57,86755,86347],{"class":70},[57,86757,86709],{"class":70},[57,86759,1681],{"class":51497},[57,86761,15844],{"class":140},[57,86763,86764,86766,86768,86770,86772,86774,86776],{"class":59,"line":10061},[57,86765,54892],{"class":81},[57,86767,51634],{"class":140},[57,86769,270],{"class":81},[57,86771,51689],{"class":136},[57,86773,2356],{"class":81},[57,86775,51689],{"class":136},[57,86777,1576],{"class":140},[57,86779,86780,86782,86784,86787],{"class":59,"line":10066},[57,86781,61918],{"class":81},[57,86783,51634],{"class":140},[57,86785,86786],{"class":81},"#ccc",[57,86788,1576],{"class":140},[57,86790,86791,86793,86795,86797],{"class":59,"line":10071},[57,86792,64167],{"class":81},[57,86794,51634],{"class":140},[57,86796,54934],{"class":81},[57,86798,1576],{"class":140},[57,86800,86801,86803,86805,86807],{"class":59,"line":10076},[57,86802,57613],{"class":81},[57,86804,51634],{"class":140},[57,86806,61039],{"class":81},[57,86808,1576],{"class":140},[57,86810,86811,86813,86815,86817,86819],{"class":59,"line":10085},[57,86812,55331],{"class":81},[57,86814,51634],{"class":140},[57,86816,498],{"class":81},[57,86818,51689],{"class":136},[57,86820,1576],{"class":140},[57,86822,86823,86825,86827,86829,86831],{"class":59,"line":10090},[57,86824,61947],{"class":81},[57,86826,51634],{"class":140},[57,86828,862],{"class":81},[57,86830,51689],{"class":136},[57,86832,1576],{"class":140},[57,86834,86835,86837,86839,86841,86843],{"class":59,"line":10096},[57,86836,55119],{"class":81},[57,86838,51634],{"class":140},[57,86840,965],{"class":81},[57,86842,51689],{"class":136},[57,86844,1576],{"class":140},[57,86846,86847],{"class":59,"line":10117},[57,86848,2460],{"class":140},[57,86850,86851],{"class":59,"line":10123},[57,86852,2673],{"emptyLinePlaceholder":350},[57,86854,86855,86857,86859,86861,86864],{"class":59,"line":10137},[57,86856,86347],{"class":70},[57,86858,86709],{"class":70},[57,86860,1681],{"class":51497},[57,86862,86863],{"class":70},".submit",[57,86865,15844],{"class":140},[57,86867,86868,86870,86872,86875],{"class":59,"line":10143},[57,86869,55081],{"class":81},[57,86871,51634],{"class":140},[57,86873,86874],{"class":81},"#369",[57,86876,1576],{"class":140},[57,86878,86879],{"class":59,"line":10170},[57,86880,2460],{"class":140},[57,86882,86883,86885,86887],{"class":59,"line":10179},[57,86884,52614],{"class":140},[57,86886,342],{"class":51497},[57,86888,51504],{"class":140},[57,86890,86891,86893,86895],{"class":59,"line":10185},[57,86892,51982],{"class":140},[57,86894,51531],{"class":51497},[57,86896,51504],{"class":140},[57,86898,86899],{"class":59,"line":10193},[57,86900,2673],{"emptyLinePlaceholder":350},[57,86902,86903,86905,86907],{"class":59,"line":10198},[57,86904,1326],{"class":140},[57,86906,51997],{"class":51497},[57,86908,51504],{"class":140},[57,86910,86911,86913,86915,86917,86919,86922,86925,86927],{"class":59,"line":16876},[57,86912,52341],{"class":140},[57,86914,54084],{"class":51497},[57,86916,15231],{"class":70},[57,86918,156],{"class":140},[57,86920,86921],{"class":74},"\"delete\"",[57,86923,86924],{"class":140},">删除\u003C\u002F",[57,86926,54084],{"class":51497},[57,86928,51504],{"class":140},[57,86930,86931,86933,86935,86937,86939,86942,86945,86947],{"class":59,"line":16882},[57,86932,52341],{"class":140},[57,86934,54084],{"class":51497},[57,86936,15231],{"class":70},[57,86938,156],{"class":140},[57,86940,86941],{"class":74},"\"login\"",[57,86943,86944],{"class":140},">登录\u003C\u002F",[57,86946,54084],{"class":51497},[57,86948,51504],{"class":140},[57,86950,86951,86953,86955],{"class":59,"line":16905},[57,86952,52341],{"class":140},[57,86954,52010],{"class":51497},[57,86956,51504],{"class":140},[57,86958,86959],{"class":59,"line":16911},[57,86960,86961],{"class":63},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[57,86963,86964,86966,86969,86971,86973,86975,86977,86979,86982,86984,86986],{"class":59,"line":16934},[57,86965,70281],{"class":136},[57,86967,86968],{"class":70}," Modal",[57,86970,168],{"class":140},[57,86972,51604],{"class":5489},[57,86974,13837],{"class":136},[57,86976,70127],{"class":74},[57,86978,12708],{"class":140},[57,86980,86981],{"class":5489},"message",[57,86983,13837],{"class":136},[57,86985,70127],{"class":74},[57,86987,12715],{"class":140},[57,86989,86990],{"class":59,"line":16948},[57,86991,86992],{"class":63},"      \u002F\u002F 创建Model 模态框盒子\n",[57,86994,86995],{"class":59,"line":16968},[57,86996,86997],{"class":63},"      \u002F\u002F 1.1 创建div标签\n",[57,86999,87000,87002,87005,87007,87009,87011,87013,87015],{"class":59,"line":16974},[57,87001,70248],{"class":81},[57,87003,87004],{"class":140},".modalBox ",[57,87006,156],{"class":136},[57,87008,54593],{"class":140},[57,87010,70348],{"class":70},[57,87012,168],{"class":140},[57,87014,82128],{"class":74},[57,87016,238],{"class":140},[57,87018,87019],{"class":59,"line":16985},[57,87020,87021],{"class":63},"      \u002F\u002F 1.2 给div 添加类名为model\n",[57,87023,87024,87026,87029,87031],{"class":59,"line":17008},[57,87025,70248],{"class":81},[57,87027,87028],{"class":140},".modalBox.className ",[57,87030,156],{"class":136},[57,87032,87033],{"class":74}," 'modal'\n",[57,87035,87036],{"class":59,"line":17030},[57,87037,87038],{"class":63},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[57,87040,87041,87043,87046,87048],{"class":59,"line":17035},[57,87042,70248],{"class":81},[57,87044,87045],{"class":140},".modalBox.innerHTML ",[57,87047,156],{"class":136},[57,87049,70365],{"class":74},[57,87051,87052,87055,87057],{"class":59,"line":17041},[57,87053,87054],{"class":74},"        \u003Cdiv class=\"header\">${",[57,87056,51604],{"class":140},[57,87058,87059],{"class":74},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[57,87061,87062,87065,87067],{"class":59,"line":17055},[57,87063,87064],{"class":74},"        \u003Cdiv class=\"body\">${",[57,87066,86981],{"class":140},[57,87068,87069],{"class":74},"}\u003C\u002Fdiv>\n",[57,87071,87072],{"class":59,"line":17068},[57,87073,87074],{"class":74},"      `\n",[57,87076,87077],{"class":59,"line":17073},[57,87078,87079],{"class":63},"      \u002F\u002F console.log(this.modalBox)\n",[57,87081,87082],{"class":59,"line":17087},[57,87083,2460],{"class":140},[57,87085,87086],{"class":59,"line":17092},[57,87087,87088],{"class":63},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[57,87090,87091],{"class":59,"line":17098},[57,87092,87093],{"class":63},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[57,87095,87096],{"class":59,"line":17103},[57,87097,87098],{"class":63},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[57,87100,87101,87104,87106,87108,87110,87113,87115,87117],{"class":59,"line":17117},[57,87102,87103],{"class":81},"    Modal",[57,87105,974],{"class":140},[57,87107,85776],{"class":81},[57,87109,974],{"class":140},[57,87111,87112],{"class":70},"open",[57,87114,13837],{"class":136},[57,87116,59115],{"class":136},[57,87118,54649],{"class":140},[57,87120,87121],{"class":59,"line":17122},[57,87122,87123],{"class":63},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[57,87125,87126,87128,87131,87133,87135,87137,87139,87142],{"class":59,"line":17127},[57,87127,58425],{"class":136},[57,87129,87130],{"class":81}," box",[57,87132,13837],{"class":136},[57,87134,54593],{"class":140},[57,87136,54596],{"class":70},[57,87138,168],{"class":140},[57,87140,87141],{"class":74},"'.modal'",[57,87143,238],{"class":140},[57,87145,87146],{"class":59,"line":17141},[57,87147,87148],{"class":63},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[57,87150,87151,87154,87156,87159,87161],{"class":59,"line":17153},[57,87152,87153],{"class":140},"      box ",[57,87155,1989],{"class":136},[57,87157,87158],{"class":140}," box.",[57,87160,57203],{"class":70},[57,87162,2249],{"class":140},[57,87164,87165],{"class":59,"line":17158},[57,87166,87167],{"class":63},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[57,87169,87170],{"class":59,"line":17171},[57,87171,87172],{"class":63},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[57,87174,87175],{"class":59,"line":17176},[57,87176,87177],{"class":63},"      \u002F\u002F append可以增加对象\n",[57,87179,87180,87183,87186,87188,87191],{"class":59,"line":17181},[57,87181,87182],{"class":140},"      document.body.",[57,87184,87185],{"class":70},"append",[57,87187,168],{"class":140},[57,87189,87190],{"class":81},"this",[57,87192,87193],{"class":140},".modalBox)\n",[57,87195,87196],{"class":59,"line":17186},[57,87197,2673],{"emptyLinePlaceholder":350},[57,87199,87200],{"class":59,"line":17199},[57,87201,87202],{"class":63},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[57,87204,87205,87207,87210,87212,87214,87217,87219,87221,87223,87225,87228,87230],{"class":59,"line":17204},[57,87206,70248],{"class":81},[57,87208,87209],{"class":140},".modalBox.",[57,87211,54596],{"class":70},[57,87213,168],{"class":140},[57,87215,87216],{"class":74},"'i'",[57,87218,31023],{"class":140},[57,87220,58010],{"class":70},[57,87222,168],{"class":140},[57,87224,58015],{"class":74},[57,87226,87227],{"class":140},", () ",[57,87229,84919],{"class":136},[57,87231,15844],{"class":140},[57,87233,87234],{"class":59,"line":32830},[57,87235,87236],{"class":63},"        \u002F\u002F 这个地方需要用到箭头函数\n",[57,87238,87239],{"class":59,"line":32836},[57,87240,87241],{"class":63},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[57,87243,87244],{"class":59,"line":32842},[57,87245,87246],{"class":63},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[57,87248,87249,87251,87253,87256],{"class":59,"line":32848},[57,87250,64923],{"class":81},[57,87252,974],{"class":140},[57,87254,87255],{"class":70},"close",[57,87257,2249],{"class":140},[57,87259,87260],{"class":59,"line":32854},[57,87261,65012],{"class":140},[57,87263,87264],{"class":59,"line":32865},[57,87265,2460],{"class":140},[57,87267,87268],{"class":59,"line":32871},[57,87269,2673],{"emptyLinePlaceholder":350},[57,87271,87272],{"class":59,"line":32891},[57,87273,87274],{"class":63},"    \u002F\u002F 测试一下 点击 删除按钮\n",[57,87276,87277,87279,87281,87283,87286,87288,87290,87292,87294,87296,87298],{"class":59,"line":32897},[57,87278,52604],{"class":140},[57,87280,54596],{"class":70},[57,87282,168],{"class":140},[57,87284,87285],{"class":74},"'#delete'",[57,87287,31023],{"class":140},[57,87289,58010],{"class":70},[57,87291,168],{"class":140},[57,87293,58015],{"class":74},[57,87295,87227],{"class":140},[57,87297,84919],{"class":136},[57,87299,15844],{"class":140},[57,87301,87302],{"class":59,"line":32908},[57,87303,87304],{"class":63},"      \u002F\u002F 先调用Model构造函数\n",[57,87306,87307,87309,87312,87314,87316,87318,87320,87323,87325,87328],{"class":59,"line":32914},[57,87308,58425],{"class":136},[57,87310,87311],{"class":81}," del",[57,87313,13837],{"class":136},[57,87315,11851],{"class":136},[57,87317,86968],{"class":70},[57,87319,168],{"class":140},[57,87321,87322],{"class":74},"'温馨的提示'",[57,87324,12708],{"class":140},[57,87326,87327],{"class":74},"'您没有删除权限操作'",[57,87329,238],{"class":140},[57,87331,87332],{"class":59,"line":32920},[57,87333,87334],{"class":63},"      \u002F\u002F 实例对象调用open方法\n",[57,87336,87337,87340,87342],{"class":59,"line":32926},[57,87338,87339],{"class":140},"      del.",[57,87341,87112],{"class":70},[57,87343,2249],{"class":140},[57,87345,87346],{"class":59,"line":32932},[57,87347,33658],{"class":140},[57,87349,87350],{"class":59,"line":32938},[57,87351,87352],{"class":63},"    \u002F\u002F 测试一下 点击 登录按钮\n",[57,87354,87355,87357,87359,87361,87364,87366,87368,87370,87372,87374,87376],{"class":59,"line":32944},[57,87356,52604],{"class":140},[57,87358,54596],{"class":70},[57,87360,168],{"class":140},[57,87362,87363],{"class":74},"'#login'",[57,87365,31023],{"class":140},[57,87367,58010],{"class":70},[57,87369,168],{"class":140},[57,87371,58015],{"class":74},[57,87373,87227],{"class":140},[57,87375,84919],{"class":136},[57,87377,15844],{"class":140},[57,87379,87380],{"class":59,"line":32950},[57,87381,87304],{"class":63},[57,87383,87384,87386,87389,87391,87393,87395,87397,87400,87402,87405],{"class":59,"line":32970},[57,87385,58425],{"class":136},[57,87387,87388],{"class":81}," log",[57,87390,13837],{"class":136},[57,87392,11851],{"class":136},[57,87394,86968],{"class":70},[57,87396,168],{"class":140},[57,87398,87399],{"class":74},"'友情提示'",[57,87401,12708],{"class":140},[57,87403,87404],{"class":74},"'您还没有登录呢'",[57,87406,238],{"class":140},[57,87408,87409],{"class":59,"line":32976},[57,87410,87334],{"class":63},[57,87412,87413,87416,87418],{"class":59,"line":32992},[57,87414,87415],{"class":140},"      log.",[57,87417,87112],{"class":70},[57,87419,2249],{"class":140},[57,87421,87422],{"class":59,"line":32998},[57,87423,33658],{"class":140},[57,87425,87426],{"class":59,"line":33012},[57,87427,87428],{"class":63},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[57,87430,87431,87433,87435,87437,87439,87441,87443,87445],{"class":59,"line":33018},[57,87432,87103],{"class":81},[57,87434,974],{"class":140},[57,87436,85776],{"class":81},[57,87438,974],{"class":140},[57,87440,87255],{"class":70},[57,87442,13837],{"class":136},[57,87444,59115],{"class":136},[57,87446,54649],{"class":140},[57,87448,87449,87451,87453,87455],{"class":59,"line":33033},[57,87450,70248],{"class":81},[57,87452,87209],{"class":140},[57,87454,57203],{"class":70},[57,87456,2249],{"class":140},[57,87458,87459],{"class":59,"line":33039},[57,87460,2460],{"class":140},[57,87462,87463,87465,87467],{"class":59,"line":33048},[57,87464,52614],{"class":140},[57,87466,52010],{"class":51497},[57,87468,51504],{"class":140},[57,87470,87471,87473,87475],{"class":59,"line":33054},[57,87472,51982],{"class":140},[57,87474,51997],{"class":51497},[57,87476,51504],{"class":140},[57,87478,87479],{"class":59,"line":33063},[57,87480,2673],{"emptyLinePlaceholder":350},[57,87482,87483,87485,87487],{"class":59,"line":33069},[57,87484,51982],{"class":140},[57,87486,50832],{"class":51497},[57,87488,51504],{"class":140},[14,87490,87491],{},[44,87492],{"alt":46,"src":87493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[365,87495,87497],{"id":87496},"_414-深浅拷贝","4.14 深浅拷贝",[394,87499,87501],{"id":87500},"_4141-浅拷贝","4.14.1 浅拷贝",[14,87503,87504],{},[44,87505],{"alt":46,"src":87506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,87508,87509],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,87511,87512],{},[44,87513],{"alt":46,"src":87514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,87516,87517],{},[44,87518],{"alt":46,"src":87519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,87521,87522],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,87524,87525],{},[44,87526],{"alt":46,"src":87527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,87529,11605],{},[14,87531,87532],{},[44,87533],{"alt":46,"src":87534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[394,87536,87538],{"id":87537},"_4142-深拷贝","4.14.2 深拷贝",[14,87540,87541],{},"深拷贝：拷贝的是对象，不是地址",[14,87543,87544],{},"常用的三种方法：",[377,87546,87547,87550,87553],{},[380,87548,87549],{},"通过递归实现深拷贝",[380,87551,87552],{},"lodash\u002FcloneDeep",[380,87554,87555],{},"通过JSON.stringify()实现",[22270,87557,87559],{"id":87558},"_41421-递归函数","4.14.2.1 递归函数",[14,87561,87562],{},[44,87563],{"alt":46,"src":87564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[377,87566,87567],{},[380,87568,87569],{},"死递归占溢出：",[49,87571,87573],{"className":53264,"code":87572,"language":53266,"meta":46,"style":46},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[28,87574,87575,87583,87591,87595,87600,87604,87609,87617],{"__ignoreMap":46},[57,87576,87577,87579,87581],{"class":59,"line":60},[57,87578,1326],{"class":140},[57,87580,51997],{"class":51497},[57,87582,51504],{"class":140},[57,87584,87585,87587,87589],{"class":59,"line":67},[57,87586,52341],{"class":140},[57,87588,52010],{"class":51497},[57,87590,51504],{"class":140},[57,87592,87593],{"class":59,"line":144},[57,87594,77340],{"class":140},[57,87596,87597],{"class":59,"line":150},[57,87598,87599],{"class":140},"      fn()\n",[57,87601,87602],{"class":59,"line":162},[57,87603,2460],{"class":140},[57,87605,87606],{"class":59,"line":180},[57,87607,87608],{"class":140},"    fn()\n",[57,87610,87611,87613,87615],{"class":59,"line":186},[57,87612,52614],{"class":140},[57,87614,52010],{"class":51497},[57,87616,51504],{"class":140},[57,87618,87619,87621,87623],{"class":59,"line":197},[57,87620,51982],{"class":140},[57,87622,51997],{"class":51497},[57,87624,51504],{"class":140},[377,87626,87627],{"start":67},[380,87628,87629],{},"递归函数要加判断条件：",[14,87631,87632],{},[44,87633],{"alt":46,"src":87634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[377,87636,87637],{"start":144},[380,87638,87639],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[49,87641,87643],{"className":50830,"code":87642,"language":50832,"meta":46,"style":46},"\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",[28,87644,87645,87655,87669,87673,87681,87695,87715,87727,87735,87739,87747,87759,87767,87775,87800,87812,87816,87823,87831,87839,87843],{"__ignoreMap":46},[57,87646,87647,87649,87651,87653],{"class":59,"line":60},[57,87648,51494],{"class":140},[57,87650,51498],{"class":51497},[57,87652,51501],{"class":70},[57,87654,51504],{"class":140},[57,87656,87657,87659,87661,87663,87665,87667],{"class":59,"line":67},[57,87658,1326],{"class":140},[57,87660,50832],{"class":51497},[57,87662,51513],{"class":70},[57,87664,156],{"class":140},[57,87666,51518],{"class":74},[57,87668,51504],{"class":140},[57,87670,87671],{"class":59,"line":144},[57,87672,2673],{"emptyLinePlaceholder":350},[57,87674,87675,87677,87679],{"class":59,"line":150},[57,87676,1326],{"class":140},[57,87678,51531],{"class":51497},[57,87680,51504],{"class":140},[57,87682,87683,87685,87687,87689,87691,87693],{"class":59,"line":162},[57,87684,52341],{"class":140},[57,87686,51541],{"class":51497},[57,87688,51544],{"class":70},[57,87690,156],{"class":140},[57,87692,51549],{"class":74},[57,87694,51504],{"class":140},[57,87696,87697,87699,87701,87703,87705,87707,87709,87711,87713],{"class":59,"line":180},[57,87698,52341],{"class":140},[57,87700,51541],{"class":51497},[57,87702,15192],{"class":70},[57,87704,156],{"class":140},[57,87706,51588],{"class":74},[57,87708,51568],{"class":70},[57,87710,156],{"class":140},[57,87712,51595],{"class":74},[57,87714,51504],{"class":140},[57,87716,87717,87719,87721,87723,87725],{"class":59,"line":186},[57,87718,52341],{"class":140},[57,87720,51604],{"class":51497},[57,87722,51607],{"class":140},[57,87724,51604],{"class":51497},[57,87726,51504],{"class":140},[57,87728,87729,87731,87733],{"class":59,"line":197},[57,87730,51982],{"class":140},[57,87732,51531],{"class":51497},[57,87734,51504],{"class":140},[57,87736,87737],{"class":59,"line":241},[57,87738,2673],{"emptyLinePlaceholder":350},[57,87740,87741,87743,87745],{"class":59,"line":249},[57,87742,1326],{"class":140},[57,87744,51997],{"class":51497},[57,87746,51504],{"class":140},[57,87748,87749,87751,87753,87755,87757],{"class":59,"line":262},[57,87750,52341],{"class":140},[57,87752,51808],{"class":51497},[57,87754,55511],{"class":140},[57,87756,51808],{"class":51497},[57,87758,51504],{"class":140},[57,87760,87761,87763,87765],{"class":59,"line":281},[57,87762,52341],{"class":140},[57,87764,52010],{"class":51497},[57,87766,51504],{"class":140},[57,87768,87769,87771,87773],{"class":59,"line":287},[57,87770,70281],{"class":136},[57,87772,73970],{"class":70},[57,87774,11126],{"class":140},[57,87776,87777,87779,87781,87783,87785,87787,87789,87791,87793,87795,87798],{"class":59,"line":298},[57,87778,55968],{"class":140},[57,87780,54596],{"class":70},[57,87782,168],{"class":140},[57,87784,82128],{"class":74},[57,87786,74446],{"class":140},[57,87788,156],{"class":136},[57,87790,11851],{"class":136},[57,87792,73986],{"class":70},[57,87794,17533],{"class":140},[57,87796,87797],{"class":70},"toLocaleString",[57,87799,2249],{"class":140},[57,87801,87802,87805,87808,87810],{"class":59,"line":311},[57,87803,87804],{"class":70},"      setTimeout",[57,87806,87807],{"class":140},"(getTime, ",[57,87809,6683],{"class":81},[57,87811,238],{"class":140},[57,87813,87814],{"class":59,"line":322},[57,87815,2460],{"class":140},[57,87817,87818,87821],{"class":59,"line":1929},[57,87819,87820],{"class":70},"    getTime",[57,87822,2249],{"class":140},[57,87824,87825,87827,87829],{"class":59,"line":1950},[57,87826,52614],{"class":140},[57,87828,52010],{"class":51497},[57,87830,51504],{"class":140},[57,87832,87833,87835,87837],{"class":59,"line":1955},[57,87834,51982],{"class":140},[57,87836,51997],{"class":51497},[57,87838,51504],{"class":140},[57,87840,87841],{"class":59,"line":1969},[57,87842,2673],{"emptyLinePlaceholder":350},[57,87844,87845,87847,87849],{"class":59,"line":1974},[57,87846,51982],{"class":140},[57,87848,50832],{"class":51497},[57,87850,51504],{"class":140},[14,87852,87853],{},[44,87854],{"alt":46,"src":87855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[377,87857,87858],{"start":150},[380,87859,87549],{},[14,87861,87862],{},[44,87863],{"alt":46,"src":87864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,87866,87867],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,87869,39386],{},[14,87871,87872],{},"这个是简易版的递归函数深拷贝",[14,87874,87875],{},"一定要注意先数组再对象，因为万物皆可对象",[49,87877,87879],{"className":50830,"code":87878,"language":50832,"meta":46,"style":46},"\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",[28,87880,87881,87891,87905,87909,87917,87931,87951,87963,87971,87975,87983,87991,88001,88010,88018,88034,88038,88046,88050,88054,88066,88071,88090,88106,88111,88116,88121,88136,88141,88146,88155,88163,88180,88188,88194,88202,88207,88212,88221,88225,88229,88233,88244,88253,88263,88277,88287,88295,88303,88311,88315],{"__ignoreMap":46},[57,87882,87883,87885,87887,87889],{"class":59,"line":60},[57,87884,51494],{"class":140},[57,87886,51498],{"class":51497},[57,87888,51501],{"class":70},[57,87890,51504],{"class":140},[57,87892,87893,87895,87897,87899,87901,87903],{"class":59,"line":67},[57,87894,1326],{"class":140},[57,87896,50832],{"class":51497},[57,87898,51513],{"class":70},[57,87900,156],{"class":140},[57,87902,51518],{"class":74},[57,87904,51504],{"class":140},[57,87906,87907],{"class":59,"line":144},[57,87908,2673],{"emptyLinePlaceholder":350},[57,87910,87911,87913,87915],{"class":59,"line":150},[57,87912,1326],{"class":140},[57,87914,51531],{"class":51497},[57,87916,51504],{"class":140},[57,87918,87919,87921,87923,87925,87927,87929],{"class":59,"line":162},[57,87920,52341],{"class":140},[57,87922,51541],{"class":51497},[57,87924,51544],{"class":70},[57,87926,156],{"class":140},[57,87928,51549],{"class":74},[57,87930,51504],{"class":140},[57,87932,87933,87935,87937,87939,87941,87943,87945,87947,87949],{"class":59,"line":180},[57,87934,52341],{"class":140},[57,87936,51541],{"class":51497},[57,87938,15192],{"class":70},[57,87940,156],{"class":140},[57,87942,51588],{"class":74},[57,87944,51568],{"class":70},[57,87946,156],{"class":140},[57,87948,51595],{"class":74},[57,87950,51504],{"class":140},[57,87952,87953,87955,87957,87959,87961],{"class":59,"line":186},[57,87954,52341],{"class":140},[57,87956,51604],{"class":51497},[57,87958,51607],{"class":140},[57,87960,51604],{"class":51497},[57,87962,51504],{"class":140},[57,87964,87965,87967,87969],{"class":59,"line":197},[57,87966,51982],{"class":140},[57,87968,51531],{"class":51497},[57,87970,51504],{"class":140},[57,87972,87973],{"class":59,"line":241},[57,87974,2673],{"emptyLinePlaceholder":350},[57,87976,87977,87979,87981],{"class":59,"line":249},[57,87978,1326],{"class":140},[57,87980,51997],{"class":51497},[57,87982,51504],{"class":140},[57,87984,87985,87987,87989],{"class":59,"line":262},[57,87986,52341],{"class":140},[57,87988,52010],{"class":51497},[57,87990,51504],{"class":140},[57,87992,87993,87995,87997,87999],{"class":59,"line":281},[57,87994,11494],{"class":136},[57,87996,70168],{"class":81},[57,87998,13837],{"class":136},[57,88000,15844],{"class":140},[57,88002,88003,88005,88008],{"class":59,"line":287},[57,88004,71813],{"class":140},[57,88006,88007],{"class":74},"'pink'",[57,88009,31663],{"class":140},[57,88011,88012,88014,88016],{"class":59,"line":298},[57,88013,71823],{"class":140},[57,88015,1066],{"class":81},[57,88017,31663],{"class":140},[57,88019,88020,88023,88026,88028,88031],{"class":59,"line":311},[57,88021,88022],{"class":140},"      hobby: [",[57,88024,88025],{"class":74},"'乒乓球'",[57,88027,12708],{"class":140},[57,88029,88030],{"class":74},"'足球'",[57,88032,88033],{"class":140},"],\n",[57,88035,88036],{"class":59,"line":322},[57,88037,78069],{"class":140},[57,88039,88040,88043],{"class":59,"line":1929},[57,88041,88042],{"class":140},"        baby: ",[57,88044,88045],{"class":74},"'小pink'\n",[57,88047,88048],{"class":59,"line":1950},[57,88049,52595],{"class":140},[57,88051,88052],{"class":59,"line":1955},[57,88053,2460],{"class":140},[57,88055,88056,88058,88061,88063],{"class":59,"line":1969},[57,88057,11494],{"class":136},[57,88059,88060],{"class":81}," o",[57,88062,13837],{"class":136},[57,88064,88065],{"class":140}," {}\n",[57,88067,88068],{"class":59,"line":1974},[57,88069,88070],{"class":63},"    \u002F\u002F 拷贝函数\n",[57,88072,88073,88075,88078,88080,88083,88085,88088],{"class":59,"line":2001},[57,88074,70281],{"class":136},[57,88076,88077],{"class":70}," deepCopy",[57,88079,168],{"class":140},[57,88081,88082],{"class":5489},"newObj",[57,88084,12708],{"class":140},[57,88086,88087],{"class":5489},"oldObj",[57,88089,12715],{"class":140},[57,88091,88092,88094,88096,88098,88101,88103],{"class":59,"line":2006},[57,88093,52481],{"class":136},[57,88095,1934],{"class":140},[57,88097,52044],{"class":136},[57,88099,88100],{"class":140}," k ",[57,88102,26312],{"class":136},[57,88104,88105],{"class":140}," oldObj) {\n",[57,88107,88108],{"class":59,"line":2023},[57,88109,88110],{"class":63},"        \u002F\u002F 处理数组的问题\n",[57,88112,88113],{"class":59,"line":2028},[57,88114,88115],{"class":63},"        \u002F\u002F 判断是否属于数组\n",[57,88117,88118],{"class":59,"line":2033},[57,88119,88120],{"class":63},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[57,88122,88123,88125,88128,88131,88134],{"class":59,"line":2038},[57,88124,2770],{"class":136},[57,88126,88127],{"class":140}," (oldObj[k] ",[57,88129,88130],{"class":136},"instanceof",[57,88132,88133],{"class":70}," Array",[57,88135,12715],{"class":140},[57,88137,88138],{"class":59,"line":2052},[57,88139,88140],{"class":63},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[57,88142,88143],{"class":59,"line":2057},[57,88144,88145],{"class":63},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[57,88147,88148,88151,88153],{"class":59,"line":2850},[57,88149,88150],{"class":140},"          newObj[k] ",[57,88152,156],{"class":136},[57,88154,52035],{"class":140},[57,88156,88157,88160],{"class":59,"line":2864},[57,88158,88159],{"class":70},"          deepCopy",[57,88161,88162],{"class":140},"(newObj[k], oldObj[k])\n",[57,88164,88165,88167,88169,88171,88173,88175,88178],{"class":59,"line":2872},[57,88166,80277],{"class":140},[57,88168,232],{"class":136},[57,88170,211],{"class":136},[57,88172,88127],{"class":140},[57,88174,88130],{"class":136},[57,88176,88177],{"class":70}," Object",[57,88179,12715],{"class":140},[57,88181,88182,88184,88186],{"class":59,"line":2877},[57,88183,88150],{"class":140},[57,88185,156],{"class":136},[57,88187,88065],{"class":140},[57,88189,88190,88192],{"class":59,"line":2883},[57,88191,88159],{"class":70},[57,88193,88162],{"class":140},[57,88195,88196,88198,88200],{"class":59,"line":2889},[57,88197,80277],{"class":140},[57,88199,232],{"class":136},[57,88201,15844],{"class":140},[57,88203,88204],{"class":59,"line":2894},[57,88205,88206],{"class":63},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[57,88208,88209],{"class":59,"line":8221},[57,88210,88211],{"class":63},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[57,88213,88214,88216,88218],{"class":59,"line":8245},[57,88215,88150],{"class":140},[57,88217,156],{"class":136},[57,88219,88220],{"class":140}," oldObj[k]\n",[57,88222,88223],{"class":59,"line":8250},[57,88224,2802],{"class":140},[57,88226,88227],{"class":59,"line":8256},[57,88228,52595],{"class":140},[57,88230,88231],{"class":59,"line":8283},[57,88232,2460],{"class":140},[57,88234,88235,88238,88241],{"class":59,"line":8288},[57,88236,88237],{"class":70},"    deepCopy",[57,88239,88240],{"class":140},"(o, obj) ",[57,88242,88243],{"class":63},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[57,88245,88246,88248,88250],{"class":59,"line":8294},[57,88247,73950],{"class":140},[57,88249,58444],{"class":70},[57,88251,88252],{"class":140},"(o)\n",[57,88254,88255,88258,88260],{"class":59,"line":8306},[57,88256,88257],{"class":140},"    o.age ",[57,88259,156],{"class":136},[57,88261,88262],{"class":81}," 20\n",[57,88264,88265,88268,88270,88272,88274],{"class":59,"line":8318},[57,88266,88267],{"class":140},"    o.hobby[",[57,88269,226],{"class":81},[57,88271,4716],{"class":140},[57,88273,156],{"class":136},[57,88275,88276],{"class":74}," '篮球'\n",[57,88278,88279,88282,88284],{"class":59,"line":8330},[57,88280,88281],{"class":140},"    o.family ",[57,88283,156],{"class":136},[57,88285,88286],{"class":74}," '老pink'\n",[57,88288,88289,88291,88293],{"class":59,"line":9989},[57,88290,73950],{"class":140},[57,88292,58444],{"class":70},[57,88294,70233],{"class":140},[57,88296,88297,88299,88301],{"class":59,"line":10014},[57,88298,52614],{"class":140},[57,88300,52010],{"class":51497},[57,88302,51504],{"class":140},[57,88304,88305,88307,88309],{"class":59,"line":10037},[57,88306,51982],{"class":140},[57,88308,51997],{"class":51497},[57,88310,51504],{"class":140},[57,88312,88313],{"class":59,"line":10061},[57,88314,2673],{"emptyLinePlaceholder":350},[57,88316,88317,88319,88321],{"class":59,"line":10066},[57,88318,51982],{"class":140},[57,88320,50832],{"class":51497},[57,88322,51504],{"class":140},[14,88324,88325],{},[44,88326],{"alt":46,"src":88327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22270,88329,88331,88332],{"id":88330},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[33,88333,88334],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,88336,88337],{},[18,88338,88339],{"href":88339,"rel":88340},"https:\u002F\u002Fwww.lodashjs.com\u002F",[22],[14,88342,88343],{},"lodash里边的方法都要加上一个下划线_",[14,88345,88346],{},"_.cloneDeep()",[49,88348,88350],{"className":50830,"code":88349,"language":50832,"meta":46,"style":46},"\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",[28,88351,88352,88362,88376,88380,88388,88402,88422,88434,88442,88446,88454,88459,88478,88486,88496,88504,88512,88524,88528,88534,88538,88542,88558,88566,88575,88583,88591,88599,88603],{"__ignoreMap":46},[57,88353,88354,88356,88358,88360],{"class":59,"line":60},[57,88355,51494],{"class":140},[57,88357,51498],{"class":51497},[57,88359,51501],{"class":70},[57,88361,51504],{"class":140},[57,88363,88364,88366,88368,88370,88372,88374],{"class":59,"line":67},[57,88365,1326],{"class":140},[57,88367,50832],{"class":51497},[57,88369,51513],{"class":70},[57,88371,156],{"class":140},[57,88373,51518],{"class":74},[57,88375,51504],{"class":140},[57,88377,88378],{"class":59,"line":144},[57,88379,2673],{"emptyLinePlaceholder":350},[57,88381,88382,88384,88386],{"class":59,"line":150},[57,88383,1326],{"class":140},[57,88385,51531],{"class":51497},[57,88387,51504],{"class":140},[57,88389,88390,88392,88394,88396,88398,88400],{"class":59,"line":162},[57,88391,52341],{"class":140},[57,88393,51541],{"class":51497},[57,88395,51544],{"class":70},[57,88397,156],{"class":140},[57,88399,51549],{"class":74},[57,88401,51504],{"class":140},[57,88403,88404,88406,88408,88410,88412,88414,88416,88418,88420],{"class":59,"line":180},[57,88405,52341],{"class":140},[57,88407,51541],{"class":51497},[57,88409,15192],{"class":70},[57,88411,156],{"class":140},[57,88413,51588],{"class":74},[57,88415,51568],{"class":70},[57,88417,156],{"class":140},[57,88419,51595],{"class":74},[57,88421,51504],{"class":140},[57,88423,88424,88426,88428,88430,88432],{"class":59,"line":186},[57,88425,52341],{"class":140},[57,88427,51604],{"class":51497},[57,88429,51607],{"class":140},[57,88431,51604],{"class":51497},[57,88433,51504],{"class":140},[57,88435,88436,88438,88440],{"class":59,"line":197},[57,88437,51982],{"class":140},[57,88439,51531],{"class":51497},[57,88441,51504],{"class":140},[57,88443,88444],{"class":59,"line":241},[57,88445,2673],{"emptyLinePlaceholder":350},[57,88447,88448,88450,88452],{"class":59,"line":249},[57,88449,1326],{"class":140},[57,88451,51997],{"class":51497},[57,88453,51504],{"class":140},[57,88455,88456],{"class":59,"line":262},[57,88457,88458],{"class":63},"  \u003C!-- 先引用这个库 -->\n",[57,88460,88461,88463,88465,88467,88469,88472,88474,88476],{"class":59,"line":281},[57,88462,52341],{"class":140},[57,88464,52010],{"class":51497},[57,88466,55436],{"class":70},[57,88468,156],{"class":140},[57,88470,88471],{"class":74},"\"lodash.min.js\"",[57,88473,55511],{"class":140},[57,88475,52010],{"class":51497},[57,88477,51504],{"class":140},[57,88479,88480,88482,88484],{"class":59,"line":287},[57,88481,52341],{"class":140},[57,88483,52010],{"class":51497},[57,88485,51504],{"class":140},[57,88487,88488,88490,88492,88494],{"class":59,"line":298},[57,88489,11494],{"class":136},[57,88491,70168],{"class":81},[57,88493,13837],{"class":136},[57,88495,15844],{"class":140},[57,88497,88498,88500,88502],{"class":59,"line":311},[57,88499,71813],{"class":140},[57,88501,88007],{"class":74},[57,88503,31663],{"class":140},[57,88505,88506,88508,88510],{"class":59,"line":322},[57,88507,71823],{"class":140},[57,88509,1066],{"class":81},[57,88511,31663],{"class":140},[57,88513,88514,88516,88518,88520,88522],{"class":59,"line":1929},[57,88515,88022],{"class":140},[57,88517,88025],{"class":74},[57,88519,12708],{"class":140},[57,88521,88030],{"class":74},[57,88523,88033],{"class":140},[57,88525,88526],{"class":59,"line":1950},[57,88527,78069],{"class":140},[57,88529,88530,88532],{"class":59,"line":1955},[57,88531,88042],{"class":140},[57,88533,88045],{"class":74},[57,88535,88536],{"class":59,"line":1969},[57,88537,52595],{"class":140},[57,88539,88540],{"class":59,"line":1974},[57,88541,2460],{"class":140},[57,88543,88544,88546,88548,88550,88553,88556],{"class":59,"line":2001},[57,88545,11494],{"class":136},[57,88547,88060],{"class":81},[57,88549,13837],{"class":136},[57,88551,88552],{"class":140}," _.",[57,88554,88555],{"class":70},"cloneDeep",[57,88557,70233],{"class":140},[57,88559,88560,88562,88564],{"class":59,"line":2006},[57,88561,73950],{"class":140},[57,88563,58444],{"class":70},[57,88565,88252],{"class":140},[57,88567,88568,88571,88573],{"class":59,"line":2023},[57,88569,88570],{"class":140},"    o.family.baby ",[57,88572,156],{"class":136},[57,88574,88286],{"class":74},[57,88576,88577,88579,88581],{"class":59,"line":2028},[57,88578,73950],{"class":140},[57,88580,58444],{"class":70},[57,88582,70233],{"class":140},[57,88584,88585,88587,88589],{"class":59,"line":2033},[57,88586,52614],{"class":140},[57,88588,52010],{"class":51497},[57,88590,51504],{"class":140},[57,88592,88593,88595,88597],{"class":59,"line":2038},[57,88594,51982],{"class":140},[57,88596,51997],{"class":51497},[57,88598,51504],{"class":140},[57,88600,88601],{"class":59,"line":2052},[57,88602,2673],{"emptyLinePlaceholder":350},[57,88604,88605,88607,88609],{"class":59,"line":2057},[57,88606,51982],{"class":140},[57,88608,50832],{"class":51497},[57,88610,51504],{"class":140},[14,88612,88613],{},[44,88614],{"alt":46,"src":88615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22270,88617,88619],{"id":88618},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[49,88621,88623],{"className":50830,"code":88622,"language":50832,"meta":46,"style":46},"\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",[28,88624,88625,88635,88649,88653,88661,88675,88695,88707,88715,88719,88727,88735,88745,88753,88761,88773,88777,88783,88787,88791,88796,88801,88806,88832,88840,88849,88857,88865,88873,88877],{"__ignoreMap":46},[57,88626,88627,88629,88631,88633],{"class":59,"line":60},[57,88628,51494],{"class":140},[57,88630,51498],{"class":51497},[57,88632,51501],{"class":70},[57,88634,51504],{"class":140},[57,88636,88637,88639,88641,88643,88645,88647],{"class":59,"line":67},[57,88638,1326],{"class":140},[57,88640,50832],{"class":51497},[57,88642,51513],{"class":70},[57,88644,156],{"class":140},[57,88646,51518],{"class":74},[57,88648,51504],{"class":140},[57,88650,88651],{"class":59,"line":144},[57,88652,2673],{"emptyLinePlaceholder":350},[57,88654,88655,88657,88659],{"class":59,"line":150},[57,88656,1326],{"class":140},[57,88658,51531],{"class":51497},[57,88660,51504],{"class":140},[57,88662,88663,88665,88667,88669,88671,88673],{"class":59,"line":162},[57,88664,52341],{"class":140},[57,88666,51541],{"class":51497},[57,88668,51544],{"class":70},[57,88670,156],{"class":140},[57,88672,51549],{"class":74},[57,88674,51504],{"class":140},[57,88676,88677,88679,88681,88683,88685,88687,88689,88691,88693],{"class":59,"line":180},[57,88678,52341],{"class":140},[57,88680,51541],{"class":51497},[57,88682,15192],{"class":70},[57,88684,156],{"class":140},[57,88686,51588],{"class":74},[57,88688,51568],{"class":70},[57,88690,156],{"class":140},[57,88692,51595],{"class":74},[57,88694,51504],{"class":140},[57,88696,88697,88699,88701,88703,88705],{"class":59,"line":186},[57,88698,52341],{"class":140},[57,88700,51604],{"class":51497},[57,88702,51607],{"class":140},[57,88704,51604],{"class":51497},[57,88706,51504],{"class":140},[57,88708,88709,88711,88713],{"class":59,"line":197},[57,88710,51982],{"class":140},[57,88712,51531],{"class":51497},[57,88714,51504],{"class":140},[57,88716,88717],{"class":59,"line":241},[57,88718,2673],{"emptyLinePlaceholder":350},[57,88720,88721,88723,88725],{"class":59,"line":249},[57,88722,1326],{"class":140},[57,88724,51997],{"class":51497},[57,88726,51504],{"class":140},[57,88728,88729,88731,88733],{"class":59,"line":262},[57,88730,52341],{"class":140},[57,88732,52010],{"class":51497},[57,88734,51504],{"class":140},[57,88736,88737,88739,88741,88743],{"class":59,"line":281},[57,88738,11494],{"class":136},[57,88740,70168],{"class":81},[57,88742,13837],{"class":136},[57,88744,15844],{"class":140},[57,88746,88747,88749,88751],{"class":59,"line":287},[57,88748,71813],{"class":140},[57,88750,88007],{"class":74},[57,88752,31663],{"class":140},[57,88754,88755,88757,88759],{"class":59,"line":298},[57,88756,71823],{"class":140},[57,88758,1066],{"class":81},[57,88760,31663],{"class":140},[57,88762,88763,88765,88767,88769,88771],{"class":59,"line":311},[57,88764,88022],{"class":140},[57,88766,88025],{"class":74},[57,88768,12708],{"class":140},[57,88770,88030],{"class":74},[57,88772,88033],{"class":140},[57,88774,88775],{"class":59,"line":322},[57,88776,78069],{"class":140},[57,88778,88779,88781],{"class":59,"line":1929},[57,88780,88042],{"class":140},[57,88782,88045],{"class":74},[57,88784,88785],{"class":59,"line":1950},[57,88786,52595],{"class":140},[57,88788,88789],{"class":59,"line":1955},[57,88790,2460],{"class":140},[57,88792,88793],{"class":59,"line":1969},[57,88794,88795],{"class":63},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[57,88797,88798],{"class":59,"line":1974},[57,88799,88800],{"class":63},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[57,88802,88803],{"class":59,"line":2001},[57,88804,88805],{"class":63},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[57,88807,88808,88810,88812,88814,88817,88819,88822,88824,88826,88828,88830],{"class":59,"line":2006},[57,88809,11494],{"class":136},[57,88811,88060],{"class":81},[57,88813,13837],{"class":136},[57,88815,88816],{"class":81}," JSON",[57,88818,974],{"class":140},[57,88820,88821],{"class":70},"parse",[57,88823,168],{"class":140},[57,88825,71861],{"class":81},[57,88827,974],{"class":140},[57,88829,71866],{"class":70},[57,88831,71869],{"class":140},[57,88833,88834,88836,88838],{"class":59,"line":2023},[57,88835,73950],{"class":140},[57,88837,58444],{"class":70},[57,88839,88252],{"class":140},[57,88841,88842,88844,88846],{"class":59,"line":2028},[57,88843,88570],{"class":140},[57,88845,156],{"class":136},[57,88847,88848],{"class":74}," '123'\n",[57,88850,88851,88853,88855],{"class":59,"line":2033},[57,88852,73950],{"class":140},[57,88854,58444],{"class":70},[57,88856,70233],{"class":140},[57,88858,88859,88861,88863],{"class":59,"line":2038},[57,88860,52614],{"class":140},[57,88862,52010],{"class":51497},[57,88864,51504],{"class":140},[57,88866,88867,88869,88871],{"class":59,"line":2052},[57,88868,51982],{"class":140},[57,88870,51997],{"class":51497},[57,88872,51504],{"class":140},[57,88874,88875],{"class":59,"line":2057},[57,88876,2673],{"emptyLinePlaceholder":350},[57,88878,88879,88881,88883],{"class":59,"line":2850},[57,88880,51982],{"class":140},[57,88882,50832],{"class":51497},[57,88884,51504],{"class":140},[14,88886,88887],{},[44,88888],{"alt":46,"src":88889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[365,88891,88893],{"id":88892},"_415-异常处理","4.15 异常处理",[377,88895,88896],{},[380,88897,88898],{},"throw抛异常",[14,88900,88901],{},[44,88902],{"alt":46,"src":88903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[377,88905,88906],{"start":67},[380,88907,88908],{},"try\u002Fcatch 捕获错误信息",[14,88910,88911],{},[44,88912],{"alt":46,"src":88913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[49,88915,88917],{"className":50830,"code":88916,"language":50832,"meta":46,"style":46},"\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",[28,88918,88919,88929,88943,88947,88955,88969,88989,89001,89009,89013,89021,89033,89041,89050,89057,89062,89081,89090,89101,89106,89116,89121,89126,89131,89148,89152,89157,89164,89176,89180,89192,89196,89200,89205,89210,89217,89225,89233,89237],{"__ignoreMap":46},[57,88920,88921,88923,88925,88927],{"class":59,"line":60},[57,88922,51494],{"class":140},[57,88924,51498],{"class":51497},[57,88926,51501],{"class":70},[57,88928,51504],{"class":140},[57,88930,88931,88933,88935,88937,88939,88941],{"class":59,"line":67},[57,88932,1326],{"class":140},[57,88934,50832],{"class":51497},[57,88936,51513],{"class":70},[57,88938,156],{"class":140},[57,88940,51518],{"class":74},[57,88942,51504],{"class":140},[57,88944,88945],{"class":59,"line":144},[57,88946,2673],{"emptyLinePlaceholder":350},[57,88948,88949,88951,88953],{"class":59,"line":150},[57,88950,1326],{"class":140},[57,88952,51531],{"class":51497},[57,88954,51504],{"class":140},[57,88956,88957,88959,88961,88963,88965,88967],{"class":59,"line":162},[57,88958,52341],{"class":140},[57,88960,51541],{"class":51497},[57,88962,51544],{"class":70},[57,88964,156],{"class":140},[57,88966,51549],{"class":74},[57,88968,51504],{"class":140},[57,88970,88971,88973,88975,88977,88979,88981,88983,88985,88987],{"class":59,"line":180},[57,88972,52341],{"class":140},[57,88974,51541],{"class":51497},[57,88976,15192],{"class":70},[57,88978,156],{"class":140},[57,88980,51588],{"class":74},[57,88982,51568],{"class":70},[57,88984,156],{"class":140},[57,88986,51595],{"class":74},[57,88988,51504],{"class":140},[57,88990,88991,88993,88995,88997,88999],{"class":59,"line":186},[57,88992,52341],{"class":140},[57,88994,51604],{"class":51497},[57,88996,51607],{"class":140},[57,88998,51604],{"class":51497},[57,89000,51504],{"class":140},[57,89002,89003,89005,89007],{"class":59,"line":197},[57,89004,51982],{"class":140},[57,89006,51531],{"class":51497},[57,89008,51504],{"class":140},[57,89010,89011],{"class":59,"line":241},[57,89012,2673],{"emptyLinePlaceholder":350},[57,89014,89015,89017,89019],{"class":59,"line":249},[57,89016,1326],{"class":140},[57,89018,51997],{"class":51497},[57,89020,51504],{"class":140},[57,89022,89023,89025,89027,89029,89031],{"class":59,"line":262},[57,89024,52341],{"class":140},[57,89026,14],{"class":51497},[57,89028,53691],{"class":140},[57,89030,14],{"class":51497},[57,89032,51504],{"class":140},[57,89034,89035,89037,89039],{"class":59,"line":281},[57,89036,52341],{"class":140},[57,89038,52010],{"class":51497},[57,89040,51504],{"class":140},[57,89042,89043,89045,89048],{"class":59,"line":287},[57,89044,70281],{"class":136},[57,89046,89047],{"class":70}," fn",[57,89049,11126],{"class":140},[57,89051,89052,89055],{"class":59,"line":298},[57,89053,89054],{"class":136},"      try",[57,89056,15844],{"class":140},[57,89058,89059],{"class":59,"line":311},[57,89060,89061],{"class":63},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[57,89063,89064,89066,89068,89070,89072,89074,89076,89079],{"class":59,"line":322},[57,89065,61467],{"class":136},[57,89067,7098],{"class":81},[57,89069,13837],{"class":136},[57,89071,54593],{"class":140},[57,89073,54596],{"class":70},[57,89075,168],{"class":140},[57,89077,89078],{"class":74},"'.p'",[57,89080,238],{"class":140},[57,89082,89083,89086,89088],{"class":59,"line":1929},[57,89084,89085],{"class":140},"        p.style.color ",[57,89087,156],{"class":136},[57,89089,67248],{"class":74},[57,89091,89092,89095,89098],{"class":59,"line":1950},[57,89093,89094],{"class":140},"      } ",[57,89096,89097],{"class":136},"catch",[57,89099,89100],{"class":140}," (err) {\n",[57,89102,89103],{"class":59,"line":1955},[57,89104,89105],{"class":63},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[57,89107,89108,89111,89113],{"class":59,"line":1969},[57,89109,89110],{"class":140},"        console.",[57,89112,58444],{"class":70},[57,89114,89115],{"class":140},"(err.message)\n",[57,89117,89118],{"class":59,"line":1974},[57,89119,89120],{"class":63},"        \u002F\u002F 想要中断程序，需要加return\n",[57,89122,89123],{"class":59,"line":2001},[57,89124,89125],{"class":63},"        \u002F\u002F return\n",[57,89127,89128],{"class":59,"line":2006},[57,89129,89130],{"class":63},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[57,89132,89133,89136,89138,89141,89143,89146],{"class":59,"line":2023},[57,89134,89135],{"class":136},"        throw",[57,89137,11851],{"class":136},[57,89139,89140],{"class":70}," Error",[57,89142,168],{"class":140},[57,89144,89145],{"class":74},"'你看看，选择器错误了吧'",[57,89147,238],{"class":140},[57,89149,89150],{"class":59,"line":2028},[57,89151,52595],{"class":140},[57,89153,89154],{"class":59,"line":2033},[57,89155,89156],{"class":63},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[57,89158,89159,89162],{"class":59,"line":2038},[57,89160,89161],{"class":136},"      finally",[57,89163,15844],{"class":140},[57,89165,89166,89169,89171,89174],{"class":59,"line":2052},[57,89167,89168],{"class":70},"        alert",[57,89170,168],{"class":140},[57,89172,89173],{"class":74},"'弹出对话框'",[57,89175,238],{"class":140},[57,89177,89178],{"class":59,"line":2057},[57,89179,52595],{"class":140},[57,89181,89182,89184,89186,89188,89190],{"class":59,"line":2850},[57,89183,58441],{"class":140},[57,89185,58444],{"class":70},[57,89187,168],{"class":140},[57,89189,888],{"class":81},[57,89191,238],{"class":140},[57,89193,89194],{"class":59,"line":2864},[57,89195,2673],{"emptyLinePlaceholder":350},[57,89197,89198],{"class":59,"line":2872},[57,89199,2460],{"class":140},[57,89201,89202],{"class":59,"line":2877},[57,89203,89204],{"class":63},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[57,89206,89207],{"class":59,"line":2883},[57,89208,89209],{"class":63},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[57,89211,89212,89215],{"class":59,"line":2889},[57,89213,89214],{"class":70},"    fn",[57,89216,2249],{"class":140},[57,89218,89219,89221,89223],{"class":59,"line":2894},[57,89220,52614],{"class":140},[57,89222,52010],{"class":51497},[57,89224,51504],{"class":140},[57,89226,89227,89229,89231],{"class":59,"line":8221},[57,89228,51982],{"class":140},[57,89230,51997],{"class":51497},[57,89232,51504],{"class":140},[57,89234,89235],{"class":59,"line":8245},[57,89236,2673],{"emptyLinePlaceholder":350},[57,89238,89239,89241,89243],{"class":59,"line":8250},[57,89240,51982],{"class":140},[57,89242,50832],{"class":51497},[57,89244,51504],{"class":140},[14,89246,89247],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[377,89249,89250],{"start":144},[380,89251,89252],{},"debugger",[14,89254,89255],{},[44,89256],{"alt":46,"src":89257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,89259,89260],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[365,89262,89264],{"id":89263},"_416-处理this","4.16 处理this",[394,89266,89268],{"id":89267},"_4161-this的指向","4.16.1 this的指向",[377,89270,89271],{},[380,89272,89273],{},"普通函数的this",[14,89275,89276],{},[44,89277],{"alt":46,"src":89278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[377,89280,89281],{"start":67},[380,89282,89283],{},"箭头函数的this",[14,89285,89286],{},[44,89287],{"alt":46,"src":89288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,89290,89291],{},[44,89292],{"alt":46,"src":89293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,89295,89296],{},[44,89297],{"alt":46,"src":89298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[394,89300,89302],{"id":89301},"_4162-this的改变","4.16.2 this的改变",[14,89304,89305],{},"call() apply() bind()",[377,89307,89308],{},[380,89309,89310],{},"call()",[14,89312,89313],{},[44,89314],{"alt":46,"src":89315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,89317,89318],{},"两个作用：①调用函数；②改变this指向",[49,89320,89322],{"className":53264,"code":89321,"language":53266,"meta":46,"style":46},"\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",[28,89323,89324,89332,89340,89344,89349,89353,89358,89363,89368,89372,89377,89385],{"__ignoreMap":46},[57,89325,89326,89328,89330],{"class":59,"line":60},[57,89327,1326],{"class":140},[57,89329,51997],{"class":51497},[57,89331,51504],{"class":140},[57,89333,89334,89336,89338],{"class":59,"line":67},[57,89335,52341],{"class":140},[57,89337,52010],{"class":51497},[57,89339,51504],{"class":140},[57,89341,89342],{"class":59,"line":144},[57,89343,71720],{"class":140},[57,89345,89346],{"class":59,"line":150},[57,89347,89348],{"class":140},"      uname: 'pink'\n",[57,89350,89351],{"class":59,"line":162},[57,89352,2460],{"class":140},[57,89354,89355],{"class":59,"line":180},[57,89356,89357],{"class":140},"    function fn(x, y) {\n",[57,89359,89360],{"class":59,"line":186},[57,89361,89362],{"class":140},"      console.log(this)  \u002F\u002Fwindow\n",[57,89364,89365],{"class":59,"line":197},[57,89366,89367],{"class":140},"      console.log(x + y)\n",[57,89369,89370],{"class":59,"line":241},[57,89371,2460],{"class":140},[57,89373,89374],{"class":59,"line":249},[57,89375,89376],{"class":140},"    fn.call(obj, 1, 2)\n",[57,89378,89379,89381,89383],{"class":59,"line":262},[57,89380,52614],{"class":140},[57,89382,52010],{"class":51497},[57,89384,51504],{"class":140},[57,89386,89387,89389,89391],{"class":59,"line":281},[57,89388,51982],{"class":140},[57,89390,51997],{"class":51497},[57,89392,51504],{"class":140},[14,89394,89395],{},[44,89396],{"alt":46,"src":89397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[377,89399,89400],{"start":67},[380,89401,89402],{},"apply()",[14,89404,89405],{},[44,89406],{"alt":46,"src":89407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,89409,89318],{},[14,89411,89412],{},"call传递的是普通参数，而apply必须传递的是数组",[49,89414,89416],{"className":50830,"code":89415,"language":50832,"meta":46,"style":46},"\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",[28,89417,89418,89428,89442,89446,89454,89468,89488,89500,89508,89512,89520,89528,89538,89545,89549,89554,89570,89582,89596,89600,89605,89624,89629,89633,89638,89643,89651,89656,89678,89683,89699,89715,89727,89731,89736,89755,89763,89771,89775],{"__ignoreMap":46},[57,89419,89420,89422,89424,89426],{"class":59,"line":60},[57,89421,51494],{"class":140},[57,89423,51498],{"class":51497},[57,89425,51501],{"class":70},[57,89427,51504],{"class":140},[57,89429,89430,89432,89434,89436,89438,89440],{"class":59,"line":67},[57,89431,1326],{"class":140},[57,89433,50832],{"class":51497},[57,89435,51513],{"class":70},[57,89437,156],{"class":140},[57,89439,51518],{"class":74},[57,89441,51504],{"class":140},[57,89443,89444],{"class":59,"line":144},[57,89445,2673],{"emptyLinePlaceholder":350},[57,89447,89448,89450,89452],{"class":59,"line":150},[57,89449,1326],{"class":140},[57,89451,51531],{"class":51497},[57,89453,51504],{"class":140},[57,89455,89456,89458,89460,89462,89464,89466],{"class":59,"line":162},[57,89457,52341],{"class":140},[57,89459,51541],{"class":51497},[57,89461,51544],{"class":70},[57,89463,156],{"class":140},[57,89465,51549],{"class":74},[57,89467,51504],{"class":140},[57,89469,89470,89472,89474,89476,89478,89480,89482,89484,89486],{"class":59,"line":180},[57,89471,52341],{"class":140},[57,89473,51541],{"class":51497},[57,89475,15192],{"class":70},[57,89477,156],{"class":140},[57,89479,51588],{"class":74},[57,89481,51568],{"class":70},[57,89483,156],{"class":140},[57,89485,51595],{"class":74},[57,89487,51504],{"class":140},[57,89489,89490,89492,89494,89496,89498],{"class":59,"line":186},[57,89491,52341],{"class":140},[57,89493,51604],{"class":51497},[57,89495,51607],{"class":140},[57,89497,51604],{"class":51497},[57,89499,51504],{"class":140},[57,89501,89502,89504,89506],{"class":59,"line":197},[57,89503,51982],{"class":140},[57,89505,51531],{"class":51497},[57,89507,51504],{"class":140},[57,89509,89510],{"class":59,"line":241},[57,89511,2673],{"emptyLinePlaceholder":350},[57,89513,89514,89516,89518],{"class":59,"line":249},[57,89515,1326],{"class":140},[57,89517,51997],{"class":51497},[57,89519,51504],{"class":140},[57,89521,89522,89524,89526],{"class":59,"line":262},[57,89523,52341],{"class":140},[57,89525,52010],{"class":51497},[57,89527,51504],{"class":140},[57,89529,89530,89532,89534,89536],{"class":59,"line":281},[57,89531,11494],{"class":136},[57,89533,70168],{"class":81},[57,89535,13837],{"class":136},[57,89537,15844],{"class":140},[57,89539,89540,89542],{"class":59,"line":287},[57,89541,71823],{"class":140},[57,89543,89544],{"class":81},"18\n",[57,89546,89547],{"class":59,"line":298},[57,89548,2460],{"class":140},[57,89550,89551],{"class":59,"line":311},[57,89552,89553],{"class":63},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[57,89555,89556,89558,89560,89562,89564,89566,89568],{"class":59,"line":322},[57,89557,70281],{"class":136},[57,89559,89047],{"class":70},[57,89561,168],{"class":140},[57,89563,1236],{"class":5489},[57,89565,12708],{"class":140},[57,89567,1261],{"class":5489},[57,89569,12715],{"class":140},[57,89571,89572,89574,89576,89578,89580],{"class":59,"line":1929},[57,89573,58441],{"class":140},[57,89575,58444],{"class":70},[57,89577,168],{"class":140},[57,89579,87190],{"class":81},[57,89581,238],{"class":140},[57,89583,89584,89586,89588,89591,89593],{"class":59,"line":1950},[57,89585,58441],{"class":140},[57,89587,58444],{"class":70},[57,89589,89590],{"class":140},"(x ",[57,89592,897],{"class":136},[57,89594,89595],{"class":140}," y)\n",[57,89597,89598],{"class":59,"line":1955},[57,89599,2460],{"class":140},[57,89601,89602],{"class":59,"line":1969},[57,89603,89604],{"class":63},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[57,89606,89607,89610,89613,89616,89618,89620,89622],{"class":59,"line":1974},[57,89608,89609],{"class":140},"    fn.",[57,89611,89612],{"class":70},"apply",[57,89614,89615],{"class":140},"(obj, [",[57,89617,635],{"class":81},[57,89619,12708],{"class":140},[57,89621,498],{"class":81},[57,89623,4930],{"class":140},[57,89625,89626],{"class":59,"line":2001},[57,89627,89628],{"class":63},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[57,89630,89631],{"class":59,"line":2006},[57,89632,2673],{"emptyLinePlaceholder":350},[57,89634,89635],{"class":59,"line":2023},[57,89636,89637],{"class":63},"    \u002F\u002F 使用场景：求数组最大值\n",[57,89639,89640],{"class":59,"line":2028},[57,89641,89642],{"class":63},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[57,89644,89645,89648],{"class":59,"line":2033},[57,89646,89647],{"class":63},"    \u002F\u002F console.log(max)",[57,89649,89650],{"class":63},"   \u002F\u002F3\n",[57,89652,89653],{"class":59,"line":2038},[57,89654,89655],{"class":63},"    \u002F\u002F 指向空或者Math都是可以的\n",[57,89657,89658,89660,89662,89664,89666,89668,89670,89672,89674,89676],{"class":59,"line":2052},[57,89659,11494],{"class":136},[57,89661,57892],{"class":81},[57,89663,13837],{"class":136},[57,89665,52423],{"class":140},[57,89667,728],{"class":81},[57,89669,12708],{"class":140},[57,89671,920],{"class":81},[57,89673,12708],{"class":140},[57,89675,951],{"class":81},[57,89677,33443],{"class":140},[57,89679,89680],{"class":59,"line":2057},[57,89681,89682],{"class":63},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[57,89684,89685,89687,89689,89691,89694,89696],{"class":59,"line":2850},[57,89686,11494],{"class":136},[57,89688,6224],{"class":81},[57,89690,13837],{"class":136},[57,89692,89693],{"class":140}," Math.max.",[57,89695,89612],{"class":70},[57,89697,89698],{"class":140},"(Math, arr)\n",[57,89700,89701,89703,89706,89708,89711,89713],{"class":59,"line":2864},[57,89702,11494],{"class":136},[57,89704,89705],{"class":81}," min",[57,89707,13837],{"class":136},[57,89709,89710],{"class":140}," Math.min.",[57,89712,89612],{"class":70},[57,89714,89698],{"class":140},[57,89716,89717,89719,89721,89724],{"class":59,"line":2872},[57,89718,73950],{"class":140},[57,89720,58444],{"class":70},[57,89722,89723],{"class":140},"(max, min)     ",[57,89725,89726],{"class":63},"\u002F\u002F100,4\n",[57,89728,89729],{"class":59,"line":2877},[57,89730,2673],{"emptyLinePlaceholder":350},[57,89732,89733],{"class":59,"line":2883},[57,89734,89735],{"class":63},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[57,89737,89738,89740,89742,89745,89747,89749,89752],{"class":59,"line":2889},[57,89739,73950],{"class":140},[57,89741,58444],{"class":70},[57,89743,89744],{"class":140},"(Max.",[57,89746,6288],{"class":70},[57,89748,168],{"class":140},[57,89750,89751],{"class":136},"...",[57,89753,89754],{"class":140},"arr))\n",[57,89756,89757,89759,89761],{"class":59,"line":2894},[57,89758,52614],{"class":140},[57,89760,52010],{"class":51497},[57,89762,51504],{"class":140},[57,89764,89765,89767,89769],{"class":59,"line":8221},[57,89766,51982],{"class":140},[57,89768,51997],{"class":51497},[57,89770,51504],{"class":140},[57,89772,89773],{"class":59,"line":8245},[57,89774,2673],{"emptyLinePlaceholder":350},[57,89776,89777,89779,89781],{"class":59,"line":8250},[57,89778,51982],{"class":140},[57,89780,50832],{"class":51497},[57,89782,51504],{"class":140},[14,89784,89785],{},[44,89786],{"alt":46,"src":89787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[377,89789,89790],{"start":144},[380,89791,89792],{},"bind()",[14,89794,89795],{},[44,89796],{"alt":46,"src":89797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,89799,89800],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,89802,89803],{},"bind的语法跟call很相似",[49,89805,89807],{"className":53264,"code":89806,"language":53266,"meta":46,"style":46},"\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",[28,89808,89809,89817,89825,89829,89834,89838,89842,89847,89851,89856,89861,89866,89871,89876,89881,89886,89890,89898],{"__ignoreMap":46},[57,89810,89811,89813,89815],{"class":59,"line":60},[57,89812,1326],{"class":140},[57,89814,51997],{"class":51497},[57,89816,51504],{"class":140},[57,89818,89819,89821,89823],{"class":59,"line":67},[57,89820,52341],{"class":140},[57,89822,52010],{"class":51497},[57,89824,51504],{"class":140},[57,89826,89827],{"class":59,"line":144},[57,89828,71720],{"class":140},[57,89830,89831],{"class":59,"line":150},[57,89832,89833],{"class":140},"      age: 18\n",[57,89835,89836],{"class":59,"line":162},[57,89837,2460],{"class":140},[57,89839,89840],{"class":59,"line":180},[57,89841,77340],{"class":140},[57,89843,89844],{"class":59,"line":186},[57,89845,89846],{"class":140},"      console.log(this)\n",[57,89848,89849],{"class":59,"line":197},[57,89850,2460],{"class":140},[57,89852,89853],{"class":59,"line":241},[57,89854,89855],{"class":140},"    \u002F\u002F 1.bind 不会调用函数\n",[57,89857,89858],{"class":59,"line":249},[57,89859,89860],{"class":140},"    \u002F\u002F 2.bind能改变this的指向\n",[57,89862,89863],{"class":59,"line":262},[57,89864,89865],{"class":140},"    fn.bind()\n",[57,89867,89868],{"class":59,"line":281},[57,89869,89870],{"class":140},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[57,89872,89873],{"class":59,"line":287},[57,89874,89875],{"class":140},"    const fun = fn.bind(obj)\n",[57,89877,89878],{"class":59,"line":298},[57,89879,89880],{"class":140},"    \u002F\u002F console.log(fun)\n",[57,89882,89883],{"class":59,"line":311},[57,89884,89885],{"class":140},"    \u002F\u002F 调用,查看this的指向\n",[57,89887,89888],{"class":59,"line":322},[57,89889,52848],{"class":140},[57,89891,89892,89894,89896],{"class":59,"line":1929},[57,89893,52614],{"class":140},[57,89895,52010],{"class":51497},[57,89897,51504],{"class":140},[57,89899,89900,89902,89904],{"class":59,"line":1950},[57,89901,51982],{"class":140},[57,89903,51997],{"class":51497},[57,89905,51504],{"class":140},[14,89907,89908],{},[44,89909],{"alt":46,"src":89910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[377,89912,89913],{"start":150},[380,89914,89915],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[49,89917,89919],{"className":53264,"code":89918,"language":53266,"meta":46,"style":46},"\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",[28,89920,89921,89929,89942,89950,89955,89959,89964,89969,89974,89979,89984,89989,89994,89999,90003,90011],{"__ignoreMap":46},[57,89922,89923,89925,89927],{"class":59,"line":60},[57,89924,1326],{"class":140},[57,89926,51997],{"class":51497},[57,89928,51504],{"class":140},[57,89930,89931,89933,89935,89938,89940],{"class":59,"line":67},[57,89932,52341],{"class":140},[57,89934,54084],{"class":51497},[57,89936,89937],{"class":140},">禁用\u003C\u002F",[57,89939,54084],{"class":51497},[57,89941,51504],{"class":140},[57,89943,89944,89946,89948],{"class":59,"line":144},[57,89945,52341],{"class":140},[57,89947,52010],{"class":51497},[57,89949,51504],{"class":140},[57,89951,89952],{"class":59,"line":150},[57,89953,89954],{"class":140},"    const btn = document.querySelector('button')\n",[57,89956,89957],{"class":59,"line":162},[57,89958,59213],{"class":140},[57,89960,89961],{"class":59,"line":180},[57,89962,89963],{"class":140},"      this.disabled = true\n",[57,89965,89966],{"class":59,"line":186},[57,89967,89968],{"class":140},"      \u002F\u002F 定时器是window进行调用的\n",[57,89970,89971],{"class":59,"line":197},[57,89972,89973],{"class":140},"      setTimeout(function () {\n",[57,89975,89976],{"class":59,"line":241},[57,89977,89978],{"class":140},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[57,89980,89981],{"class":59,"line":249},[57,89982,89983],{"class":140},"        this.disabled = false\n",[57,89985,89986],{"class":59,"line":262},[57,89987,89988],{"class":140},"      }.bind(this), 2000)\n",[57,89990,89991],{"class":59,"line":281},[57,89992,89993],{"class":140},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[57,89995,89996],{"class":59,"line":287},[57,89997,89998],{"class":140},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[57,90000,90001],{"class":59,"line":298},[57,90002,33658],{"class":140},[57,90004,90005,90007,90009],{"class":59,"line":311},[57,90006,52614],{"class":140},[57,90008,52010],{"class":51497},[57,90010,51504],{"class":140},[57,90012,90013,90015,90017],{"class":59,"line":322},[57,90014,51982],{"class":140},[57,90016,51997],{"class":51497},[57,90018,51504],{"class":140},[377,90020,90021],{"start":162},[380,90022,22225],{},[14,90024,90025],{},[44,90026],{"alt":46,"src":90027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[365,90029,90031],{"id":90030},"_417-性能优化","4.17 性能优化",[394,90033,90035],{"id":90034},"_4171-防抖","4.17.1 防抖",[14,90037,90038],{},[44,90039],{"alt":46,"src":90040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,90042,90043],{},[33,90044,90045],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,90047,90048],{},"防抖实现方式：",[1422,90050,90051],{},[380,90052,90053],{},"lodash 提供了防抖处理",[14,90055,90056],{},"_.debounce(func,[wait=0],[options={}])",[14,90058,90059],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[49,90061,90063],{"className":50830,"code":90062,"language":50832,"meta":46,"style":46},"\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",[28,90064,90065,90075,90089,90093,90101,90115,90135,90147,90155,90161,90171,90183,90195,90206,90218,90228,90238,90251,90255,90263,90271,90275,90283,90301,90319,90327,90346,90356,90365,90376,90381,90385,90390,90395,90400,90425,90433,90441,90445],{"__ignoreMap":46},[57,90066,90067,90069,90071,90073],{"class":59,"line":60},[57,90068,51494],{"class":140},[57,90070,51498],{"class":51497},[57,90072,51501],{"class":70},[57,90074,51504],{"class":140},[57,90076,90077,90079,90081,90083,90085,90087],{"class":59,"line":67},[57,90078,1326],{"class":140},[57,90080,50832],{"class":51497},[57,90082,51513],{"class":70},[57,90084,156],{"class":140},[57,90086,51518],{"class":74},[57,90088,51504],{"class":140},[57,90090,90091],{"class":59,"line":144},[57,90092,2673],{"emptyLinePlaceholder":350},[57,90094,90095,90097,90099],{"class":59,"line":150},[57,90096,1326],{"class":140},[57,90098,51531],{"class":51497},[57,90100,51504],{"class":140},[57,90102,90103,90105,90107,90109,90111,90113],{"class":59,"line":162},[57,90104,52341],{"class":140},[57,90106,51541],{"class":51497},[57,90108,51544],{"class":70},[57,90110,156],{"class":140},[57,90112,51549],{"class":74},[57,90114,51504],{"class":140},[57,90116,90117,90119,90121,90123,90125,90127,90129,90131,90133],{"class":59,"line":180},[57,90118,52341],{"class":140},[57,90120,51541],{"class":51497},[57,90122,15192],{"class":70},[57,90124,156],{"class":140},[57,90126,51588],{"class":74},[57,90128,51568],{"class":70},[57,90130,156],{"class":140},[57,90132,51595],{"class":74},[57,90134,51504],{"class":140},[57,90136,90137,90139,90141,90143,90145],{"class":59,"line":186},[57,90138,52341],{"class":140},[57,90140,51604],{"class":51497},[57,90142,51607],{"class":140},[57,90144,51604],{"class":51497},[57,90146,51504],{"class":140},[57,90148,90149,90151,90153],{"class":59,"line":197},[57,90150,52341],{"class":140},[57,90152,342],{"class":51497},[57,90154,51504],{"class":140},[57,90156,90157,90159],{"class":59,"line":241},[57,90158,54949],{"class":70},[57,90160,15844],{"class":140},[57,90162,90163,90165,90167,90169],{"class":59,"line":249},[57,90164,72793],{"class":81},[57,90166,51634],{"class":140},[57,90168,60702],{"class":81},[57,90170,1576],{"class":140},[57,90172,90173,90175,90177,90179,90181],{"class":59,"line":262},[57,90174,54968],{"class":81},[57,90176,51634],{"class":140},[57,90178,1996],{"class":81},[57,90180,51689],{"class":136},[57,90182,1576],{"class":140},[57,90184,90185,90187,90189,90191,90193],{"class":59,"line":281},[57,90186,54982],{"class":81},[57,90188,51634],{"class":140},[57,90190,1996],{"class":81},[57,90192,51689],{"class":136},[57,90194,1576],{"class":140},[57,90196,90197,90199,90201,90204],{"class":59,"line":287},[57,90198,55081],{"class":81},[57,90200,51634],{"class":140},[57,90202,90203],{"class":81},"gray",[57,90205,1576],{"class":140},[57,90207,90208,90210,90212,90214,90216],{"class":59,"line":298},[57,90209,55119],{"class":81},[57,90211,51634],{"class":140},[57,90213,1241],{"class":81},[57,90215,51689],{"class":136},[57,90217,1576],{"class":140},[57,90219,90220,90222,90224,90226],{"class":59,"line":311},[57,90221,57613],{"class":81},[57,90223,51634],{"class":140},[57,90225,61039],{"class":81},[57,90227,1576],{"class":140},[57,90229,90230,90232,90234,90236],{"class":59,"line":322},[57,90231,57483],{"class":81},[57,90233,51634],{"class":140},[57,90235,51789],{"class":81},[57,90237,1576],{"class":140},[57,90239,90240,90243,90245,90247,90249],{"class":59,"line":1929},[57,90241,90242],{"class":81},"      padding-top",[57,90244,51634],{"class":140},[57,90246,736],{"class":81},[57,90248,51689],{"class":136},[57,90250,1576],{"class":140},[57,90252,90253],{"class":59,"line":1950},[57,90254,2460],{"class":140},[57,90256,90257,90259,90261],{"class":59,"line":1955},[57,90258,52614],{"class":140},[57,90260,342],{"class":51497},[57,90262,51504],{"class":140},[57,90264,90265,90267,90269],{"class":59,"line":1969},[57,90266,51982],{"class":140},[57,90268,51531],{"class":51497},[57,90270,51504],{"class":140},[57,90272,90273],{"class":59,"line":1974},[57,90274,2673],{"emptyLinePlaceholder":350},[57,90276,90277,90279,90281],{"class":59,"line":2001},[57,90278,1326],{"class":140},[57,90280,51997],{"class":51497},[57,90282,51504],{"class":140},[57,90284,90285,90287,90289,90291,90293,90295,90297,90299],{"class":59,"line":2006},[57,90286,52341],{"class":140},[57,90288,51808],{"class":51497},[57,90290,53683],{"class":70},[57,90292,156],{"class":140},[57,90294,53688],{"class":74},[57,90296,55511],{"class":140},[57,90298,51808],{"class":51497},[57,90300,51504],{"class":140},[57,90302,90303,90305,90307,90309,90311,90313,90315,90317],{"class":59,"line":2023},[57,90304,52341],{"class":140},[57,90306,52010],{"class":51497},[57,90308,55436],{"class":70},[57,90310,156],{"class":140},[57,90312,88471],{"class":74},[57,90314,55511],{"class":140},[57,90316,52010],{"class":51497},[57,90318,51504],{"class":140},[57,90320,90321,90323,90325],{"class":59,"line":2028},[57,90322,52341],{"class":140},[57,90324,52010],{"class":51497},[57,90326,51504],{"class":140},[57,90328,90329,90331,90333,90335,90337,90339,90341,90344],{"class":59,"line":2033},[57,90330,11494],{"class":136},[57,90332,87130],{"class":81},[57,90334,13837],{"class":136},[57,90336,54593],{"class":140},[57,90338,54596],{"class":70},[57,90340,168],{"class":140},[57,90342,90343],{"class":74},"'.box'",[57,90345,238],{"class":140},[57,90347,90348,90350,90352,90354],{"class":59,"line":2038},[57,90349,52416],{"class":136},[57,90351,9711],{"class":140},[57,90353,156],{"class":136},[57,90355,47530],{"class":81},[57,90357,90358,90360,90363],{"class":59,"line":2052},[57,90359,70281],{"class":136},[57,90361,90362],{"class":70}," mouseMove",[57,90364,11126],{"class":140},[57,90366,90367,90370,90372,90374],{"class":59,"line":2057},[57,90368,90369],{"class":140},"      box.innerHTML ",[57,90371,156],{"class":136},[57,90373,3305],{"class":140},[57,90375,2975],{"class":136},[57,90377,90378],{"class":59,"line":2850},[57,90379,90380],{"class":63},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[57,90382,90383],{"class":59,"line":2864},[57,90384,2460],{"class":140},[57,90386,90387],{"class":59,"line":2872},[57,90388,90389],{"class":63},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[57,90391,90392],{"class":59,"line":2877},[57,90393,90394],{"class":63},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[57,90396,90397],{"class":59,"line":2883},[57,90398,90399],{"class":63},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[57,90401,90402,90405,90407,90409,90412,90415,90418,90421,90423],{"class":59,"line":2889},[57,90403,90404],{"class":140},"    box.",[57,90406,58010],{"class":70},[57,90408,168],{"class":140},[57,90410,90411],{"class":74},"'mousemove'",[57,90413,90414],{"class":140},", _.",[57,90416,90417],{"class":70},"debounce",[57,90419,90420],{"class":140},"(mouseMove, ",[57,90422,65271],{"class":81},[57,90424,259],{"class":140},[57,90426,90427,90429,90431],{"class":59,"line":2894},[57,90428,52614],{"class":140},[57,90430,52010],{"class":51497},[57,90432,51504],{"class":140},[57,90434,90435,90437,90439],{"class":59,"line":8221},[57,90436,51982],{"class":140},[57,90438,51997],{"class":51497},[57,90440,51504],{"class":140},[57,90442,90443],{"class":59,"line":8245},[57,90444,2673],{"emptyLinePlaceholder":350},[57,90446,90447,90449,90451],{"class":59,"line":8250},[57,90448,51982],{"class":140},[57,90450,50832],{"class":51497},[57,90452,51504],{"class":140},[1422,90454,90455],{},[380,90456,90457],{},"手写一个防抖函数来处理",[14,90459,90460],{},"防抖的核心就是利用定时器来实现的：",[14,90462,90463],{},"①声明一个定时器变量",[14,90465,90466],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,90468,90469],{},"③如果没有定时器则开启定时器，记得存到变量里面",[49,90471,90473],{"className":50830,"code":90472,"language":50832,"meta":46,"style":46},"\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",[28,90474,90475,90485,90499,90503,90511,90525,90545,90557,90565,90571,90581,90593,90605,90615,90627,90637,90647,90659,90663,90671,90679,90683,90691,90709,90727,90735,90753,90763,90771,90781,90785,90789,90793,90798,90803,90808,90813,90818,90823,90841,90848,90853,90861,90866,90879,90895,90905,90910,90914,90918,90938,90942,90947,90952,90957,90962,90970,90978,90982],{"__ignoreMap":46},[57,90476,90477,90479,90481,90483],{"class":59,"line":60},[57,90478,51494],{"class":140},[57,90480,51498],{"class":51497},[57,90482,51501],{"class":70},[57,90484,51504],{"class":140},[57,90486,90487,90489,90491,90493,90495,90497],{"class":59,"line":67},[57,90488,1326],{"class":140},[57,90490,50832],{"class":51497},[57,90492,51513],{"class":70},[57,90494,156],{"class":140},[57,90496,51518],{"class":74},[57,90498,51504],{"class":140},[57,90500,90501],{"class":59,"line":144},[57,90502,2673],{"emptyLinePlaceholder":350},[57,90504,90505,90507,90509],{"class":59,"line":150},[57,90506,1326],{"class":140},[57,90508,51531],{"class":51497},[57,90510,51504],{"class":140},[57,90512,90513,90515,90517,90519,90521,90523],{"class":59,"line":162},[57,90514,52341],{"class":140},[57,90516,51541],{"class":51497},[57,90518,51544],{"class":70},[57,90520,156],{"class":140},[57,90522,51549],{"class":74},[57,90524,51504],{"class":140},[57,90526,90527,90529,90531,90533,90535,90537,90539,90541,90543],{"class":59,"line":180},[57,90528,52341],{"class":140},[57,90530,51541],{"class":51497},[57,90532,15192],{"class":70},[57,90534,156],{"class":140},[57,90536,51588],{"class":74},[57,90538,51568],{"class":70},[57,90540,156],{"class":140},[57,90542,51595],{"class":74},[57,90544,51504],{"class":140},[57,90546,90547,90549,90551,90553,90555],{"class":59,"line":186},[57,90548,52341],{"class":140},[57,90550,51604],{"class":51497},[57,90552,51607],{"class":140},[57,90554,51604],{"class":51497},[57,90556,51504],{"class":140},[57,90558,90559,90561,90563],{"class":59,"line":197},[57,90560,52341],{"class":140},[57,90562,342],{"class":51497},[57,90564,51504],{"class":140},[57,90566,90567,90569],{"class":59,"line":241},[57,90568,54949],{"class":70},[57,90570,15844],{"class":140},[57,90572,90573,90575,90577,90579],{"class":59,"line":249},[57,90574,72793],{"class":81},[57,90576,51634],{"class":140},[57,90578,60702],{"class":81},[57,90580,1576],{"class":140},[57,90582,90583,90585,90587,90589,90591],{"class":59,"line":262},[57,90584,54968],{"class":81},[57,90586,51634],{"class":140},[57,90588,1996],{"class":81},[57,90590,51689],{"class":136},[57,90592,1576],{"class":140},[57,90594,90595,90597,90599,90601,90603],{"class":59,"line":281},[57,90596,54982],{"class":81},[57,90598,51634],{"class":140},[57,90600,1996],{"class":81},[57,90602,51689],{"class":136},[57,90604,1576],{"class":140},[57,90606,90607,90609,90611,90613],{"class":59,"line":287},[57,90608,55081],{"class":81},[57,90610,51634],{"class":140},[57,90612,90203],{"class":81},[57,90614,1576],{"class":140},[57,90616,90617,90619,90621,90623,90625],{"class":59,"line":298},[57,90618,55119],{"class":81},[57,90620,51634],{"class":140},[57,90622,1241],{"class":81},[57,90624,51689],{"class":136},[57,90626,1576],{"class":140},[57,90628,90629,90631,90633,90635],{"class":59,"line":311},[57,90630,57613],{"class":81},[57,90632,51634],{"class":140},[57,90634,61039],{"class":81},[57,90636,1576],{"class":140},[57,90638,90639,90641,90643,90645],{"class":59,"line":322},[57,90640,57483],{"class":81},[57,90642,51634],{"class":140},[57,90644,51789],{"class":81},[57,90646,1576],{"class":140},[57,90648,90649,90651,90653,90655,90657],{"class":59,"line":1929},[57,90650,90242],{"class":81},[57,90652,51634],{"class":140},[57,90654,736],{"class":81},[57,90656,51689],{"class":136},[57,90658,1576],{"class":140},[57,90660,90661],{"class":59,"line":1950},[57,90662,2460],{"class":140},[57,90664,90665,90667,90669],{"class":59,"line":1955},[57,90666,52614],{"class":140},[57,90668,342],{"class":51497},[57,90670,51504],{"class":140},[57,90672,90673,90675,90677],{"class":59,"line":1969},[57,90674,51982],{"class":140},[57,90676,51531],{"class":51497},[57,90678,51504],{"class":140},[57,90680,90681],{"class":59,"line":1974},[57,90682,2673],{"emptyLinePlaceholder":350},[57,90684,90685,90687,90689],{"class":59,"line":2001},[57,90686,1326],{"class":140},[57,90688,51997],{"class":51497},[57,90690,51504],{"class":140},[57,90692,90693,90695,90697,90699,90701,90703,90705,90707],{"class":59,"line":2006},[57,90694,52341],{"class":140},[57,90696,51808],{"class":51497},[57,90698,53683],{"class":70},[57,90700,156],{"class":140},[57,90702,53688],{"class":74},[57,90704,55511],{"class":140},[57,90706,51808],{"class":51497},[57,90708,51504],{"class":140},[57,90710,90711,90713,90715,90717,90719,90721,90723,90725],{"class":59,"line":2023},[57,90712,52341],{"class":140},[57,90714,52010],{"class":51497},[57,90716,55436],{"class":70},[57,90718,156],{"class":140},[57,90720,88471],{"class":74},[57,90722,55511],{"class":140},[57,90724,52010],{"class":51497},[57,90726,51504],{"class":140},[57,90728,90729,90731,90733],{"class":59,"line":2028},[57,90730,52341],{"class":140},[57,90732,52010],{"class":51497},[57,90734,51504],{"class":140},[57,90736,90737,90739,90741,90743,90745,90747,90749,90751],{"class":59,"line":2033},[57,90738,11494],{"class":136},[57,90740,87130],{"class":81},[57,90742,13837],{"class":136},[57,90744,54593],{"class":140},[57,90746,54596],{"class":70},[57,90748,168],{"class":140},[57,90750,90343],{"class":74},[57,90752,238],{"class":140},[57,90754,90755,90757,90759,90761],{"class":59,"line":2038},[57,90756,52416],{"class":136},[57,90758,9711],{"class":140},[57,90760,156],{"class":136},[57,90762,47530],{"class":81},[57,90764,90765,90767,90769],{"class":59,"line":2052},[57,90766,70281],{"class":136},[57,90768,90362],{"class":70},[57,90770,11126],{"class":140},[57,90772,90773,90775,90777,90779],{"class":59,"line":2057},[57,90774,90369],{"class":140},[57,90776,156],{"class":136},[57,90778,3305],{"class":140},[57,90780,2975],{"class":136},[57,90782,90783],{"class":59,"line":2850},[57,90784,90380],{"class":63},[57,90786,90787],{"class":59,"line":2864},[57,90788,2460],{"class":140},[57,90790,90791],{"class":59,"line":2872},[57,90792,90389],{"class":63},[57,90794,90795],{"class":59,"line":2877},[57,90796,90797],{"class":63},"    \u002F\u002F 手写防抖函数\n",[57,90799,90800],{"class":59,"line":2883},[57,90801,90802],{"class":63},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[57,90804,90805],{"class":59,"line":2889},[57,90806,90807],{"class":63},"    \u002F\u002F 1.声明定时器变量\n",[57,90809,90810],{"class":59,"line":2894},[57,90811,90812],{"class":63},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[57,90814,90815],{"class":59,"line":8221},[57,90816,90817],{"class":63},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[57,90819,90820],{"class":59,"line":8245},[57,90821,90822],{"class":63},"    \u002F\u002F 4.定时器里面写函数调用\n",[57,90824,90825,90827,90830,90832,90835,90837,90839],{"class":59,"line":8250},[57,90826,70281],{"class":136},[57,90828,90829],{"class":70}," debounce",[57,90831,168],{"class":140},[57,90833,90834],{"class":5489},"fn",[57,90836,12708],{"class":140},[57,90838,1136],{"class":5489},[57,90840,12715],{"class":140},[57,90842,90843,90845],{"class":59,"line":8256},[57,90844,79969],{"class":136},[57,90846,90847],{"class":140}," timer\n",[57,90849,90850],{"class":59,"line":8283},[57,90851,90852],{"class":63},"      \u002F\u002F return 返回一个匿名函数\n",[57,90854,90855,90857,90859],{"class":59,"line":8288},[57,90856,74179],{"class":136},[57,90858,59115],{"class":136},[57,90860,54649],{"class":140},[57,90862,90863],{"class":59,"line":8294},[57,90864,90865],{"class":63},"        \u002F\u002F 这里边写第二三四步\n",[57,90867,90868,90870,90873,90876],{"class":59,"line":8306},[57,90869,2770],{"class":136},[57,90871,90872],{"class":140}," (timer) ",[57,90874,90875],{"class":70},"clearTimeout",[57,90877,90878],{"class":140},"(timer)\n",[57,90880,90881,90884,90886,90889,90891,90893],{"class":59,"line":8318},[57,90882,90883],{"class":140},"        timer ",[57,90885,156],{"class":136},[57,90887,90888],{"class":70}," setTimeout",[57,90890,168],{"class":140},[57,90892,54646],{"class":136},[57,90894,54649],{"class":140},[57,90896,90897,90900,90902],{"class":59,"line":8330},[57,90898,90899],{"class":70},"          fn",[57,90901,13323],{"class":140},[57,90903,90904],{"class":63},"\u002F\u002F加小括号调用fn }, t)\n",[57,90906,90907],{"class":59,"line":9989},[57,90908,90909],{"class":140},"        }, t)\n",[57,90911,90912],{"class":59,"line":10014},[57,90913,52595],{"class":140},[57,90915,90916],{"class":59,"line":10037},[57,90917,2460],{"class":140},[57,90919,90920,90922,90924,90926,90928,90930,90932,90934,90936],{"class":59,"line":10061},[57,90921,90404],{"class":140},[57,90923,58010],{"class":70},[57,90925,168],{"class":140},[57,90927,90411],{"class":74},[57,90929,12708],{"class":140},[57,90931,90417],{"class":70},[57,90933,90420],{"class":140},[57,90935,65271],{"class":81},[57,90937,259],{"class":140},[57,90939,90940],{"class":59,"line":10066},[57,90941,2673],{"emptyLinePlaceholder":350},[57,90943,90944],{"class":59,"line":10071},[57,90945,90946],{"class":63},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[57,90948,90949],{"class":59,"line":10076},[57,90950,90951],{"class":63},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[57,90953,90954],{"class":59,"line":10085},[57,90955,90956],{"class":63},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[57,90958,90959],{"class":59,"line":10090},[57,90960,90961],{"class":63},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[57,90963,90964,90966,90968],{"class":59,"line":10096},[57,90965,52614],{"class":140},[57,90967,52010],{"class":51497},[57,90969,51504],{"class":140},[57,90971,90972,90974,90976],{"class":59,"line":10117},[57,90973,51982],{"class":140},[57,90975,51997],{"class":51497},[57,90977,51504],{"class":140},[57,90979,90980],{"class":59,"line":10123},[57,90981,2673],{"emptyLinePlaceholder":350},[57,90983,90984,90986,90988],{"class":59,"line":10137},[57,90985,51982],{"class":140},[57,90987,50832],{"class":51497},[57,90989,51504],{"class":140},[394,90991,90993],{"id":90992},"_4172-节流","4.17.2 节流",[14,90995,90996],{},[44,90997],{"alt":46,"src":90998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,91000,91001],{},[44,91002],{"alt":46,"src":91003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,91005,91006],{},[33,91007,91008],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,91010,91011],{},"实现方式：",[1422,91013,91014],{},[380,91015,91016],{},"lodash 提供的节流函数来处理",[14,91018,91019],{},"_.throttle(func,[wait=0],[options=])",[14,91021,91022],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[49,91024,91026],{"className":50830,"code":91025,"language":50832,"meta":46,"style":46},"\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",[28,91027,91028,91038,91052,91056,91064,91078,91098,91110,91118,91124,91134,91146,91158,91168,91180,91190,91200,91212,91216,91224,91232,91236,91244,91262,91280,91288,91306,91316,91324,91334,91338,91342,91346,91351,91356,91377,91385,91393,91397],{"__ignoreMap":46},[57,91029,91030,91032,91034,91036],{"class":59,"line":60},[57,91031,51494],{"class":140},[57,91033,51498],{"class":51497},[57,91035,51501],{"class":70},[57,91037,51504],{"class":140},[57,91039,91040,91042,91044,91046,91048,91050],{"class":59,"line":67},[57,91041,1326],{"class":140},[57,91043,50832],{"class":51497},[57,91045,51513],{"class":70},[57,91047,156],{"class":140},[57,91049,51518],{"class":74},[57,91051,51504],{"class":140},[57,91053,91054],{"class":59,"line":144},[57,91055,2673],{"emptyLinePlaceholder":350},[57,91057,91058,91060,91062],{"class":59,"line":150},[57,91059,1326],{"class":140},[57,91061,51531],{"class":51497},[57,91063,51504],{"class":140},[57,91065,91066,91068,91070,91072,91074,91076],{"class":59,"line":162},[57,91067,52341],{"class":140},[57,91069,51541],{"class":51497},[57,91071,51544],{"class":70},[57,91073,156],{"class":140},[57,91075,51549],{"class":74},[57,91077,51504],{"class":140},[57,91079,91080,91082,91084,91086,91088,91090,91092,91094,91096],{"class":59,"line":180},[57,91081,52341],{"class":140},[57,91083,51541],{"class":51497},[57,91085,15192],{"class":70},[57,91087,156],{"class":140},[57,91089,51588],{"class":74},[57,91091,51568],{"class":70},[57,91093,156],{"class":140},[57,91095,51595],{"class":74},[57,91097,51504],{"class":140},[57,91099,91100,91102,91104,91106,91108],{"class":59,"line":186},[57,91101,52341],{"class":140},[57,91103,51604],{"class":51497},[57,91105,51607],{"class":140},[57,91107,51604],{"class":51497},[57,91109,51504],{"class":140},[57,91111,91112,91114,91116],{"class":59,"line":197},[57,91113,52341],{"class":140},[57,91115,342],{"class":51497},[57,91117,51504],{"class":140},[57,91119,91120,91122],{"class":59,"line":241},[57,91121,54949],{"class":70},[57,91123,15844],{"class":140},[57,91125,91126,91128,91130,91132],{"class":59,"line":249},[57,91127,72793],{"class":81},[57,91129,51634],{"class":140},[57,91131,60702],{"class":81},[57,91133,1576],{"class":140},[57,91135,91136,91138,91140,91142,91144],{"class":59,"line":262},[57,91137,54968],{"class":81},[57,91139,51634],{"class":140},[57,91141,1996],{"class":81},[57,91143,51689],{"class":136},[57,91145,1576],{"class":140},[57,91147,91148,91150,91152,91154,91156],{"class":59,"line":281},[57,91149,54982],{"class":81},[57,91151,51634],{"class":140},[57,91153,1996],{"class":81},[57,91155,51689],{"class":136},[57,91157,1576],{"class":140},[57,91159,91160,91162,91164,91166],{"class":59,"line":287},[57,91161,55081],{"class":81},[57,91163,51634],{"class":140},[57,91165,90203],{"class":81},[57,91167,1576],{"class":140},[57,91169,91170,91172,91174,91176,91178],{"class":59,"line":298},[57,91171,55119],{"class":81},[57,91173,51634],{"class":140},[57,91175,1241],{"class":81},[57,91177,51689],{"class":136},[57,91179,1576],{"class":140},[57,91181,91182,91184,91186,91188],{"class":59,"line":311},[57,91183,57613],{"class":81},[57,91185,51634],{"class":140},[57,91187,61039],{"class":81},[57,91189,1576],{"class":140},[57,91191,91192,91194,91196,91198],{"class":59,"line":322},[57,91193,57483],{"class":81},[57,91195,51634],{"class":140},[57,91197,51789],{"class":81},[57,91199,1576],{"class":140},[57,91201,91202,91204,91206,91208,91210],{"class":59,"line":1929},[57,91203,90242],{"class":81},[57,91205,51634],{"class":140},[57,91207,736],{"class":81},[57,91209,51689],{"class":136},[57,91211,1576],{"class":140},[57,91213,91214],{"class":59,"line":1950},[57,91215,2460],{"class":140},[57,91217,91218,91220,91222],{"class":59,"line":1955},[57,91219,52614],{"class":140},[57,91221,342],{"class":51497},[57,91223,51504],{"class":140},[57,91225,91226,91228,91230],{"class":59,"line":1969},[57,91227,51982],{"class":140},[57,91229,51531],{"class":51497},[57,91231,51504],{"class":140},[57,91233,91234],{"class":59,"line":1974},[57,91235,2673],{"emptyLinePlaceholder":350},[57,91237,91238,91240,91242],{"class":59,"line":2001},[57,91239,1326],{"class":140},[57,91241,51997],{"class":51497},[57,91243,51504],{"class":140},[57,91245,91246,91248,91250,91252,91254,91256,91258,91260],{"class":59,"line":2006},[57,91247,52341],{"class":140},[57,91249,51808],{"class":51497},[57,91251,53683],{"class":70},[57,91253,156],{"class":140},[57,91255,53688],{"class":74},[57,91257,55511],{"class":140},[57,91259,51808],{"class":51497},[57,91261,51504],{"class":140},[57,91263,91264,91266,91268,91270,91272,91274,91276,91278],{"class":59,"line":2023},[57,91265,52341],{"class":140},[57,91267,52010],{"class":51497},[57,91269,55436],{"class":70},[57,91271,156],{"class":140},[57,91273,88471],{"class":74},[57,91275,55511],{"class":140},[57,91277,52010],{"class":51497},[57,91279,51504],{"class":140},[57,91281,91282,91284,91286],{"class":59,"line":2028},[57,91283,52341],{"class":140},[57,91285,52010],{"class":51497},[57,91287,51504],{"class":140},[57,91289,91290,91292,91294,91296,91298,91300,91302,91304],{"class":59,"line":2033},[57,91291,11494],{"class":136},[57,91293,87130],{"class":81},[57,91295,13837],{"class":136},[57,91297,54593],{"class":140},[57,91299,54596],{"class":70},[57,91301,168],{"class":140},[57,91303,90343],{"class":74},[57,91305,238],{"class":140},[57,91307,91308,91310,91312,91314],{"class":59,"line":2038},[57,91309,52416],{"class":136},[57,91311,9711],{"class":140},[57,91313,156],{"class":136},[57,91315,47530],{"class":81},[57,91317,91318,91320,91322],{"class":59,"line":2052},[57,91319,70281],{"class":136},[57,91321,90362],{"class":70},[57,91323,11126],{"class":140},[57,91325,91326,91328,91330,91332],{"class":59,"line":2057},[57,91327,90369],{"class":140},[57,91329,156],{"class":136},[57,91331,3305],{"class":140},[57,91333,2975],{"class":136},[57,91335,91336],{"class":59,"line":2850},[57,91337,90380],{"class":63},[57,91339,91340],{"class":59,"line":2864},[57,91341,2460],{"class":140},[57,91343,91344],{"class":59,"line":2872},[57,91345,90389],{"class":63},[57,91347,91348],{"class":59,"line":2877},[57,91349,91350],{"class":63},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[57,91352,91353],{"class":59,"line":2883},[57,91354,91355],{"class":63},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[57,91357,91358,91360,91362,91364,91366,91368,91371,91373,91375],{"class":59,"line":2889},[57,91359,90404],{"class":140},[57,91361,58010],{"class":70},[57,91363,168],{"class":140},[57,91365,90411],{"class":74},[57,91367,90414],{"class":140},[57,91369,91370],{"class":70},"throttle",[57,91372,90420],{"class":140},[57,91374,65271],{"class":81},[57,91376,259],{"class":140},[57,91378,91379,91381,91383],{"class":59,"line":2894},[57,91380,52614],{"class":140},[57,91382,52010],{"class":51497},[57,91384,51504],{"class":140},[57,91386,91387,91389,91391],{"class":59,"line":8221},[57,91388,51982],{"class":140},[57,91390,51997],{"class":51497},[57,91392,51504],{"class":140},[57,91394,91395],{"class":59,"line":8245},[57,91396,2673],{"emptyLinePlaceholder":350},[57,91398,91399,91401,91403],{"class":59,"line":8250},[57,91400,51982],{"class":140},[57,91402,50832],{"class":51497},[57,91404,51504],{"class":140},[1422,91406,91407],{},[380,91408,91409],{},"手写一个节流函数来处理",[14,91411,71149],{},[14,91413,90463],{},[14,91415,91416],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,91418,91419],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[49,91421,91423],{"className":50830,"code":91422,"language":50832,"meta":46,"style":46},"\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",[28,91424,91425,91435,91449,91453,91461,91475,91495,91507,91515,91521,91531,91543,91555,91565,91577,91587,91597,91609,91613,91621,91629,91633,91641,91659,91677,91685,91703,91713,91721,91731,91735,91739,91743,91748,91753,91758,91763,91768,91773,91790,91796,91804,91815,91830,91837,91842,91847,91857,91862,91867,91872,91876,91880,91884,91904,91912,91920,91924],{"__ignoreMap":46},[57,91426,91427,91429,91431,91433],{"class":59,"line":60},[57,91428,51494],{"class":140},[57,91430,51498],{"class":51497},[57,91432,51501],{"class":70},[57,91434,51504],{"class":140},[57,91436,91437,91439,91441,91443,91445,91447],{"class":59,"line":67},[57,91438,1326],{"class":140},[57,91440,50832],{"class":51497},[57,91442,51513],{"class":70},[57,91444,156],{"class":140},[57,91446,51518],{"class":74},[57,91448,51504],{"class":140},[57,91450,91451],{"class":59,"line":144},[57,91452,2673],{"emptyLinePlaceholder":350},[57,91454,91455,91457,91459],{"class":59,"line":150},[57,91456,1326],{"class":140},[57,91458,51531],{"class":51497},[57,91460,51504],{"class":140},[57,91462,91463,91465,91467,91469,91471,91473],{"class":59,"line":162},[57,91464,52341],{"class":140},[57,91466,51541],{"class":51497},[57,91468,51544],{"class":70},[57,91470,156],{"class":140},[57,91472,51549],{"class":74},[57,91474,51504],{"class":140},[57,91476,91477,91479,91481,91483,91485,91487,91489,91491,91493],{"class":59,"line":180},[57,91478,52341],{"class":140},[57,91480,51541],{"class":51497},[57,91482,15192],{"class":70},[57,91484,156],{"class":140},[57,91486,51588],{"class":74},[57,91488,51568],{"class":70},[57,91490,156],{"class":140},[57,91492,51595],{"class":74},[57,91494,51504],{"class":140},[57,91496,91497,91499,91501,91503,91505],{"class":59,"line":186},[57,91498,52341],{"class":140},[57,91500,51604],{"class":51497},[57,91502,51607],{"class":140},[57,91504,51604],{"class":51497},[57,91506,51504],{"class":140},[57,91508,91509,91511,91513],{"class":59,"line":197},[57,91510,52341],{"class":140},[57,91512,342],{"class":51497},[57,91514,51504],{"class":140},[57,91516,91517,91519],{"class":59,"line":241},[57,91518,54949],{"class":70},[57,91520,15844],{"class":140},[57,91522,91523,91525,91527,91529],{"class":59,"line":249},[57,91524,72793],{"class":81},[57,91526,51634],{"class":140},[57,91528,60702],{"class":81},[57,91530,1576],{"class":140},[57,91532,91533,91535,91537,91539,91541],{"class":59,"line":262},[57,91534,54968],{"class":81},[57,91536,51634],{"class":140},[57,91538,1996],{"class":81},[57,91540,51689],{"class":136},[57,91542,1576],{"class":140},[57,91544,91545,91547,91549,91551,91553],{"class":59,"line":281},[57,91546,54982],{"class":81},[57,91548,51634],{"class":140},[57,91550,1996],{"class":81},[57,91552,51689],{"class":136},[57,91554,1576],{"class":140},[57,91556,91557,91559,91561,91563],{"class":59,"line":287},[57,91558,55081],{"class":81},[57,91560,51634],{"class":140},[57,91562,90203],{"class":81},[57,91564,1576],{"class":140},[57,91566,91567,91569,91571,91573,91575],{"class":59,"line":298},[57,91568,55119],{"class":81},[57,91570,51634],{"class":140},[57,91572,1241],{"class":81},[57,91574,51689],{"class":136},[57,91576,1576],{"class":140},[57,91578,91579,91581,91583,91585],{"class":59,"line":311},[57,91580,57613],{"class":81},[57,91582,51634],{"class":140},[57,91584,61039],{"class":81},[57,91586,1576],{"class":140},[57,91588,91589,91591,91593,91595],{"class":59,"line":322},[57,91590,57483],{"class":81},[57,91592,51634],{"class":140},[57,91594,51789],{"class":81},[57,91596,1576],{"class":140},[57,91598,91599,91601,91603,91605,91607],{"class":59,"line":1929},[57,91600,90242],{"class":81},[57,91602,51634],{"class":140},[57,91604,736],{"class":81},[57,91606,51689],{"class":136},[57,91608,1576],{"class":140},[57,91610,91611],{"class":59,"line":1950},[57,91612,2460],{"class":140},[57,91614,91615,91617,91619],{"class":59,"line":1955},[57,91616,52614],{"class":140},[57,91618,342],{"class":51497},[57,91620,51504],{"class":140},[57,91622,91623,91625,91627],{"class":59,"line":1969},[57,91624,51982],{"class":140},[57,91626,51531],{"class":51497},[57,91628,51504],{"class":140},[57,91630,91631],{"class":59,"line":1974},[57,91632,2673],{"emptyLinePlaceholder":350},[57,91634,91635,91637,91639],{"class":59,"line":2001},[57,91636,1326],{"class":140},[57,91638,51997],{"class":51497},[57,91640,51504],{"class":140},[57,91642,91643,91645,91647,91649,91651,91653,91655,91657],{"class":59,"line":2006},[57,91644,52341],{"class":140},[57,91646,51808],{"class":51497},[57,91648,53683],{"class":70},[57,91650,156],{"class":140},[57,91652,53688],{"class":74},[57,91654,55511],{"class":140},[57,91656,51808],{"class":51497},[57,91658,51504],{"class":140},[57,91660,91661,91663,91665,91667,91669,91671,91673,91675],{"class":59,"line":2023},[57,91662,52341],{"class":140},[57,91664,52010],{"class":51497},[57,91666,55436],{"class":70},[57,91668,156],{"class":140},[57,91670,88471],{"class":74},[57,91672,55511],{"class":140},[57,91674,52010],{"class":51497},[57,91676,51504],{"class":140},[57,91678,91679,91681,91683],{"class":59,"line":2028},[57,91680,52341],{"class":140},[57,91682,52010],{"class":51497},[57,91684,51504],{"class":140},[57,91686,91687,91689,91691,91693,91695,91697,91699,91701],{"class":59,"line":2033},[57,91688,11494],{"class":136},[57,91690,87130],{"class":81},[57,91692,13837],{"class":136},[57,91694,54593],{"class":140},[57,91696,54596],{"class":70},[57,91698,168],{"class":140},[57,91700,90343],{"class":74},[57,91702,238],{"class":140},[57,91704,91705,91707,91709,91711],{"class":59,"line":2038},[57,91706,52416],{"class":136},[57,91708,9711],{"class":140},[57,91710,156],{"class":136},[57,91712,47530],{"class":81},[57,91714,91715,91717,91719],{"class":59,"line":2052},[57,91716,70281],{"class":136},[57,91718,90362],{"class":70},[57,91720,11126],{"class":140},[57,91722,91723,91725,91727,91729],{"class":59,"line":2057},[57,91724,90369],{"class":140},[57,91726,156],{"class":136},[57,91728,3305],{"class":140},[57,91730,2975],{"class":136},[57,91732,91733],{"class":59,"line":2850},[57,91734,90380],{"class":63},[57,91736,91737],{"class":59,"line":2864},[57,91738,2460],{"class":140},[57,91740,91741],{"class":59,"line":2872},[57,91742,90389],{"class":63},[57,91744,91745],{"class":59,"line":2877},[57,91746,91747],{"class":63},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[57,91749,91750],{"class":59,"line":2883},[57,91751,91752],{"class":63},"    \u002F\u002F 1.声明一个定时器变量\n",[57,91754,91755],{"class":59,"line":2889},[57,91756,91757],{"class":63},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[57,91759,91760],{"class":59,"line":2894},[57,91761,91762],{"class":63},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[57,91764,91765],{"class":59,"line":8221},[57,91766,91767],{"class":63},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[57,91769,91770],{"class":59,"line":8245},[57,91771,91772],{"class":63},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[57,91774,91775,91777,91780,91782,91784,91786,91788],{"class":59,"line":8250},[57,91776,70281],{"class":136},[57,91778,91779],{"class":70}," throttle",[57,91781,168],{"class":140},[57,91783,90834],{"class":5489},[57,91785,12708],{"class":140},[57,91787,1136],{"class":5489},[57,91789,12715],{"class":140},[57,91791,91792,91794],{"class":59,"line":8256},[57,91793,79969],{"class":136},[57,91795,90847],{"class":140},[57,91797,91798,91800,91802],{"class":59,"line":8283},[57,91799,74179],{"class":136},[57,91801,59115],{"class":136},[57,91803,54649],{"class":140},[57,91805,91806,91808,91810,91812],{"class":59,"line":8288},[57,91807,2770],{"class":136},[57,91809,1934],{"class":140},[57,91811,644],{"class":136},[57,91813,91814],{"class":140},"timer) {\n",[57,91816,91817,91820,91822,91824,91826,91828],{"class":59,"line":8294},[57,91818,91819],{"class":140},"          timer ",[57,91821,156],{"class":136},[57,91823,90888],{"class":70},[57,91825,168],{"class":140},[57,91827,54646],{"class":136},[57,91829,54649],{"class":140},[57,91831,91832,91835],{"class":59,"line":8306},[57,91833,91834],{"class":70},"            fn",[57,91836,2249],{"class":140},[57,91838,91839],{"class":59,"line":8318},[57,91840,91841],{"class":63},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[57,91843,91844],{"class":59,"line":8330},[57,91845,91846],{"class":63},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[57,91848,91849,91852,91854],{"class":59,"line":9989},[57,91850,91851],{"class":140},"            timer ",[57,91853,156],{"class":136},[57,91855,91856],{"class":81}," null\n",[57,91858,91859],{"class":59,"line":10014},[57,91860,91861],{"class":63},"            \u002F\u002F 不能用clearTimeout(timer)\n",[57,91863,91864],{"class":59,"line":10037},[57,91865,91866],{"class":63},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[57,91868,91869],{"class":59,"line":10061},[57,91870,91871],{"class":140},"          }, t)\n",[57,91873,91874],{"class":59,"line":10066},[57,91875,2802],{"class":140},[57,91877,91878],{"class":59,"line":10071},[57,91879,52595],{"class":140},[57,91881,91882],{"class":59,"line":10076},[57,91883,2460],{"class":140},[57,91885,91886,91888,91890,91892,91894,91896,91898,91900,91902],{"class":59,"line":10085},[57,91887,90404],{"class":140},[57,91889,58010],{"class":70},[57,91891,168],{"class":140},[57,91893,90411],{"class":74},[57,91895,12708],{"class":140},[57,91897,91370],{"class":70},[57,91899,90420],{"class":140},[57,91901,65271],{"class":81},[57,91903,259],{"class":140},[57,91905,91906,91908,91910],{"class":59,"line":10090},[57,91907,52614],{"class":140},[57,91909,52010],{"class":51497},[57,91911,51504],{"class":140},[57,91913,91914,91916,91918],{"class":59,"line":10096},[57,91915,51982],{"class":140},[57,91917,51997],{"class":51497},[57,91919,51504],{"class":140},[57,91921,91922],{"class":59,"line":10117},[57,91923,2673],{"emptyLinePlaceholder":350},[57,91925,91926,91928,91930],{"class":59,"line":10123},[57,91927,51982],{"class":140},[57,91929,50832],{"class":51497},[57,91931,51504],{"class":140},[394,91933,91935],{"id":91934},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[49,91937,91939],{"className":53264,"code":91938,"language":53266,"meta":46,"style":46},"\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",[28,91940,91941,91949,91957,91962,91967,91972,91977,91981,91989],{"__ignoreMap":46},[57,91942,91943,91945,91947],{"class":59,"line":60},[57,91944,1326],{"class":140},[57,91946,51997],{"class":51497},[57,91948,51504],{"class":140},[57,91950,91951,91953,91955],{"class":59,"line":67},[57,91952,52341],{"class":140},[57,91954,52010],{"class":51497},[57,91956,51504],{"class":140},[57,91958,91959],{"class":59,"line":144},[57,91960,91961],{"class":140},"    let timer = null\n",[57,91963,91964],{"class":59,"line":150},[57,91965,91966],{"class":140},"    timer = setTimeout(() => {\n",[57,91968,91969],{"class":59,"line":162},[57,91970,91971],{"class":140},"      clearTimeout(timer)\n",[57,91973,91974],{"class":59,"line":180},[57,91975,91976],{"class":140},"      console.log(timer)\n",[57,91978,91979],{"class":59,"line":186},[57,91980,60422],{"class":140},[57,91982,91983,91985,91987],{"class":59,"line":197},[57,91984,52614],{"class":140},[57,91986,52010],{"class":51497},[57,91988,51504],{"class":140},[57,91990,91991,91993,91995],{"class":59,"line":241},[57,91992,51982],{"class":140},[57,91994,51997],{"class":51497},[57,91996,51504],{"class":140},[14,91998,91999],{},"输出为1",[14,92001,92002],{},"在开启的定时器里边写清除定时器",[14,92004,92005],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[394,92007,92009],{"id":92008},"_4174-节流综合案例","4.17.4 节流综合案例",[14,92011,92012],{},"页面打开，可以记录上一次的视频播放位置",[14,92014,92015],{},[44,92016],{"alt":46,"src":92017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,92019,92020],{},[44,92021],{"alt":46,"src":92022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[49,92024,92026],{"className":50830,"code":92025,"language":50832,"meta":46,"style":46},"\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",[28,92027,92028,92038,92052,92056,92064,92078,92098,92118,92140,92153,92161,92167,92177,92187,92197,92201,92205,92212,92225,92237,92241,92245,92255,92267,92281,92285,92289,92296,92306,92319,92331,92341,92351,92367,92379,92383,92387,92395,92405,92417,92427,92437,92447,92451,92455,92465,92476,92480,92488,92496,92500,92508,92523,92538,92553,92574,92582,92590,92605,92627,92635,92650,92676,92702,92728,92736,92744,92763,92771,92776,92795,92800,92818,92823,92828,92836,92841,92855,92863,92868,92885,92889,92894,92916,92920,92928,92936,92940],{"__ignoreMap":46},[57,92029,92030,92032,92034,92036],{"class":59,"line":60},[57,92031,51494],{"class":140},[57,92033,51498],{"class":51497},[57,92035,51501],{"class":70},[57,92037,51504],{"class":140},[57,92039,92040,92042,92044,92046,92048,92050],{"class":59,"line":67},[57,92041,1326],{"class":140},[57,92043,50832],{"class":51497},[57,92045,51513],{"class":70},[57,92047,156],{"class":140},[57,92049,51518],{"class":74},[57,92051,51504],{"class":140},[57,92053,92054],{"class":59,"line":144},[57,92055,2673],{"emptyLinePlaceholder":350},[57,92057,92058,92060,92062],{"class":59,"line":150},[57,92059,1326],{"class":140},[57,92061,51531],{"class":51497},[57,92063,51504],{"class":140},[57,92065,92066,92068,92070,92072,92074,92076],{"class":59,"line":162},[57,92067,52341],{"class":140},[57,92069,51541],{"class":51497},[57,92071,51544],{"class":70},[57,92073,156],{"class":140},[57,92075,51549],{"class":74},[57,92077,59324],{"class":140},[57,92079,92080,92082,92084,92086,92088,92090,92092,92094,92096],{"class":59,"line":180},[57,92081,52341],{"class":140},[57,92083,51541],{"class":51497},[57,92085,51560],{"class":70},[57,92087,156],{"class":140},[57,92089,51565],{"class":74},[57,92091,51568],{"class":70},[57,92093,156],{"class":140},[57,92095,51573],{"class":74},[57,92097,59324],{"class":140},[57,92099,92100,92102,92104,92106,92108,92110,92112,92114,92116],{"class":59,"line":186},[57,92101,52341],{"class":140},[57,92103,51541],{"class":51497},[57,92105,15192],{"class":70},[57,92107,156],{"class":140},[57,92109,51588],{"class":74},[57,92111,51568],{"class":70},[57,92113,156],{"class":140},[57,92115,51595],{"class":74},[57,92117,59324],{"class":140},[57,92119,92120,92122,92124,92126,92128,92131,92133,92135,92138],{"class":59,"line":197},[57,92121,52341],{"class":140},[57,92123,51541],{"class":51497},[57,92125,15192],{"class":70},[57,92127,156],{"class":140},[57,92129,92130],{"class":74},"\"referrer\"",[57,92132,51568],{"class":70},[57,92134,156],{"class":140},[57,92136,92137],{"class":74},"\"never\"",[57,92139,59324],{"class":140},[57,92141,92142,92144,92146,92149,92151],{"class":59,"line":241},[57,92143,52341],{"class":140},[57,92145,51604],{"class":51497},[57,92147,92148],{"class":140},">综合案例\u003C\u002F",[57,92150,51604],{"class":51497},[57,92152,51504],{"class":140},[57,92154,92155,92157,92159],{"class":59,"line":249},[57,92156,52341],{"class":140},[57,92158,342],{"class":51497},[57,92160,51504],{"class":140},[57,92162,92163,92165],{"class":59,"line":262},[57,92164,6676],{"class":51497},[57,92166,15844],{"class":140},[57,92168,92169,92171,92173,92175],{"class":59,"line":281},[57,92170,54892],{"class":81},[57,92172,51634],{"class":140},[57,92174,226],{"class":81},[57,92176,1576],{"class":140},[57,92178,92179,92181,92183,92185],{"class":59,"line":287},[57,92180,54903],{"class":81},[57,92182,51634],{"class":140},[57,92184,226],{"class":81},[57,92186,1576],{"class":140},[57,92188,92189,92191,92193,92195],{"class":59,"line":298},[57,92190,72793],{"class":81},[57,92192,51634],{"class":140},[57,92194,60702],{"class":81},[57,92196,1576],{"class":140},[57,92198,92199],{"class":59,"line":311},[57,92200,2460],{"class":140},[57,92202,92203],{"class":59,"line":322},[57,92204,2673],{"emptyLinePlaceholder":350},[57,92206,92207,92210],{"class":59,"line":1929},[57,92208,92209],{"class":70},"    .container",[57,92211,15844],{"class":140},[57,92213,92214,92216,92218,92221,92223],{"class":59,"line":1950},[57,92215,54968],{"class":81},[57,92217,51634],{"class":140},[57,92219,92220],{"class":81},"1200",[57,92222,51689],{"class":136},[57,92224,1576],{"class":140},[57,92226,92227,92229,92231,92233,92235],{"class":59,"line":1955},[57,92228,54903],{"class":81},[57,92230,51634],{"class":140},[57,92232,226],{"class":81},[57,92234,51753],{"class":81},[57,92236,1576],{"class":140},[57,92238,92239],{"class":59,"line":1969},[57,92240,2460],{"class":140},[57,92242,92243],{"class":59,"line":1974},[57,92244,2673],{"emptyLinePlaceholder":350},[57,92246,92247,92250,92253],{"class":59,"line":2001},[57,92248,92249],{"class":70},"    .video",[57,92251,92252],{"class":51497}," video",[57,92254,15844],{"class":140},[57,92256,92257,92259,92261,92263,92265],{"class":59,"line":2006},[57,92258,54968],{"class":81},[57,92260,51634],{"class":140},[57,92262,728],{"class":81},[57,92264,745],{"class":136},[57,92266,1576],{"class":140},[57,92268,92269,92271,92273,92275,92277,92279],{"class":59,"line":2023},[57,92270,54892],{"class":81},[57,92272,51634],{"class":140},[57,92274,1116],{"class":81},[57,92276,51689],{"class":136},[57,92278,4366],{"class":81},[57,92280,1576],{"class":140},[57,92282,92283],{"class":59,"line":2028},[57,92284,2460],{"class":140},[57,92286,92287],{"class":59,"line":2033},[57,92288,2673],{"emptyLinePlaceholder":350},[57,92290,92291,92294],{"class":59,"line":2038},[57,92292,92293],{"class":70},"    .elevator",[57,92295,15844],{"class":140},[57,92297,92298,92300,92302,92304],{"class":59,"line":2052},[57,92299,54956],{"class":81},[57,92301,51634],{"class":140},[57,92303,86430],{"class":81},[57,92305,1576],{"class":140},[57,92307,92308,92310,92312,92315,92317],{"class":59,"line":2057},[57,92309,55144],{"class":81},[57,92311,51634],{"class":140},[57,92313,92314],{"class":81},"280",[57,92316,51689],{"class":136},[57,92318,1576],{"class":140},[57,92320,92321,92323,92325,92327,92329],{"class":59,"line":2850},[57,92322,86624],{"class":81},[57,92324,51634],{"class":140},[57,92326,1116],{"class":81},[57,92328,51689],{"class":136},[57,92330,1576],{"class":140},[57,92332,92333,92335,92337,92339],{"class":59,"line":2864},[57,92334,86437],{"class":81},[57,92336,51634],{"class":140},[57,92338,86442],{"class":81},[57,92340,1576],{"class":140},[57,92342,92343,92345,92347,92349],{"class":59,"line":2872},[57,92344,61918],{"class":81},[57,92346,51634],{"class":140},[57,92348,61039],{"class":81},[57,92350,1576],{"class":140},[57,92352,92353,92355,92357,92359,92361,92363,92365],{"class":59,"line":2877},[57,92354,62174],{"class":81},[57,92356,51634],{"class":140},[57,92358,635],{"class":81},[57,92360,51689],{"class":136},[57,92362,51718],{"class":81},[57,92364,62441],{"class":81},[57,92366,1576],{"class":140},[57,92368,92369,92371,92373,92375,92377],{"class":59,"line":2883},[57,92370,54968],{"class":81},[57,92372,51634],{"class":140},[57,92374,1323],{"class":81},[57,92376,51689],{"class":136},[57,92378,1576],{"class":140},[57,92380,92381],{"class":59,"line":2889},[57,92382,2460],{"class":140},[57,92384,92385],{"class":59,"line":2894},[57,92386,2673],{"emptyLinePlaceholder":350},[57,92388,92389,92391,92393],{"class":59,"line":8221},[57,92390,92293],{"class":70},[57,92392,1681],{"class":51497},[57,92394,15844],{"class":140},[57,92396,92397,92399,92401,92403],{"class":59,"line":8245},[57,92398,55206],{"class":81},[57,92400,51634],{"class":140},[57,92402,61066],{"class":81},[57,92404,1576],{"class":140},[57,92406,92407,92409,92411,92413,92415],{"class":59,"line":8250},[57,92408,54892],{"class":81},[57,92410,51634],{"class":140},[57,92412,862],{"class":81},[57,92414,51689],{"class":136},[57,92416,1576],{"class":140},[57,92418,92419,92421,92423,92425],{"class":59,"line":8256},[57,92420,64167],{"class":81},[57,92422,51634],{"class":140},[57,92424,54934],{"class":81},[57,92426,1576],{"class":140},[57,92428,92429,92431,92433,92435],{"class":59,"line":8283},[57,92430,57483],{"class":81},[57,92432,51634],{"class":140},[57,92434,51789],{"class":81},[57,92436,1576],{"class":140},[57,92438,92439,92441,92443,92445],{"class":59,"line":8288},[57,92440,57613],{"class":81},[57,92442,51634],{"class":140},[57,92444,62267],{"class":81},[57,92446,1576],{"class":140},[57,92448,92449],{"class":59,"line":8294},[57,92450,2460],{"class":140},[57,92452,92453],{"class":59,"line":8306},[57,92454,2673],{"emptyLinePlaceholder":350},[57,92456,92457,92459,92461,92463],{"class":59,"line":8318},[57,92458,92293],{"class":70},[57,92460,1681],{"class":51497},[57,92462,64221],{"class":70},[57,92464,15844],{"class":140},[57,92466,92467,92469,92471,92474],{"class":59,"line":8330},[57,92468,57613],{"class":81},[57,92470,51634],{"class":140},[57,92472,92473],{"class":81},"#1286ff",[57,92475,1576],{"class":140},[57,92477,92478],{"class":59,"line":9989},[57,92479,2460],{"class":140},[57,92481,92482,92484,92486],{"class":59,"line":10014},[57,92483,52614],{"class":140},[57,92485,342],{"class":51497},[57,92487,51504],{"class":140},[57,92489,92490,92492,92494],{"class":59,"line":10037},[57,92491,51982],{"class":140},[57,92493,51531],{"class":51497},[57,92495,51504],{"class":140},[57,92497,92498],{"class":59,"line":10061},[57,92499,2673],{"emptyLinePlaceholder":350},[57,92501,92502,92504,92506],{"class":59,"line":10066},[57,92503,1326],{"class":140},[57,92505,51997],{"class":51497},[57,92507,51504],{"class":140},[57,92509,92510,92512,92514,92516,92518,92521],{"class":59,"line":10071},[57,92511,52341],{"class":140},[57,92513,51808],{"class":51497},[57,92515,53683],{"class":70},[57,92517,156],{"class":140},[57,92519,92520],{"class":74},"\"container\"",[57,92522,51504],{"class":140},[57,92524,92525,92527,92529,92531,92533,92536],{"class":59,"line":10076},[57,92526,51538],{"class":140},[57,92528,51808],{"class":51497},[57,92530,53683],{"class":70},[57,92532,156],{"class":140},[57,92534,92535],{"class":74},"\"header\"",[57,92537,51504],{"class":140},[57,92539,92540,92542,92544,92546,92548,92551],{"class":59,"line":10085},[57,92541,55431],{"class":140},[57,92543,18],{"class":51497},[57,92545,61254],{"class":70},[57,92547,156],{"class":140},[57,92549,92550],{"class":74},"\"http:\u002F\u002Fpip.itcast.cn\"",[57,92552,51504],{"class":140},[57,92554,92555,92557,92559,92561,92563,92566,92568,92570,92572],{"class":59,"line":10090},[57,92556,55499],{"class":140},[57,92558,44],{"class":51497},[57,92560,55436],{"class":70},[57,92562,156],{"class":140},[57,92564,92565],{"class":74},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[57,92567,55444],{"class":70},[57,92569,156],{"class":140},[57,92571,7925],{"class":74},[57,92573,59324],{"class":140},[57,92575,92576,92578,92580],{"class":59,"line":10096},[57,92577,55604],{"class":140},[57,92579,18],{"class":51497},[57,92581,51504],{"class":140},[57,92583,92584,92586,92588],{"class":59,"line":10117},[57,92585,51973],{"class":140},[57,92587,51808],{"class":51497},[57,92589,51504],{"class":140},[57,92591,92592,92594,92596,92598,92600,92603],{"class":59,"line":10123},[57,92593,51538],{"class":140},[57,92595,51808],{"class":51497},[57,92597,53683],{"class":70},[57,92599,156],{"class":140},[57,92601,92602],{"class":74},"\"video\"",[57,92604,51504],{"class":140},[57,92606,92607,92609,92611,92613,92615,92618,92621,92623,92625],{"class":59,"line":10137},[57,92608,55431],{"class":140},[57,92610,28452],{"class":51497},[57,92612,55436],{"class":70},[57,92614,156],{"class":140},[57,92616,92617],{"class":74},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[57,92619,92620],{"class":70}," controls",[57,92622,55511],{"class":140},[57,92624,28452],{"class":51497},[57,92626,51504],{"class":140},[57,92628,92629,92631,92633],{"class":59,"line":10143},[57,92630,51973],{"class":140},[57,92632,51808],{"class":51497},[57,92634,51504],{"class":140},[57,92636,92637,92639,92641,92643,92645,92648],{"class":59,"line":10170},[57,92638,51538],{"class":140},[57,92640,51808],{"class":51497},[57,92642,53683],{"class":70},[57,92644,156],{"class":140},[57,92646,92647],{"class":74},"\"elevator\"",[57,92649,51504],{"class":140},[57,92651,92652,92654,92656,92658,92660,92662,92665,92667,92669,92672,92674],{"class":59,"line":10179},[57,92653,55431],{"class":140},[57,92655,18],{"class":51497},[57,92657,61254],{"class":70},[57,92659,156],{"class":140},[57,92661,64433],{"class":74},[57,92663,92664],{"class":70}," data-ref",[57,92666,156],{"class":140},[57,92668,92602],{"class":74},[57,92670,92671],{"class":140},">视频介绍\u003C\u002F",[57,92673,18],{"class":51497},[57,92675,51504],{"class":140},[57,92677,92678,92680,92682,92684,92686,92688,92690,92692,92695,92698,92700],{"class":59,"line":10185},[57,92679,55431],{"class":140},[57,92681,18],{"class":51497},[57,92683,61254],{"class":70},[57,92685,156],{"class":140},[57,92687,64433],{"class":74},[57,92689,92664],{"class":70},[57,92691,156],{"class":140},[57,92693,92694],{"class":74},"\"intro\"",[57,92696,92697],{"class":140},">课程简介\u003C\u002F",[57,92699,18],{"class":51497},[57,92701,51504],{"class":140},[57,92703,92704,92706,92708,92710,92712,92714,92716,92718,92721,92724,92726],{"class":59,"line":10193},[57,92705,55431],{"class":140},[57,92707,18],{"class":51497},[57,92709,61254],{"class":70},[57,92711,156],{"class":140},[57,92713,64433],{"class":74},[57,92715,92664],{"class":70},[57,92717,156],{"class":140},[57,92719,92720],{"class":74},"\"outline\"",[57,92722,92723],{"class":140},">评论列表\u003C\u002F",[57,92725,18],{"class":51497},[57,92727,51504],{"class":140},[57,92729,92730,92732,92734],{"class":59,"line":10198},[57,92731,51973],{"class":140},[57,92733,51808],{"class":51497},[57,92735,51504],{"class":140},[57,92737,92738,92740,92742],{"class":59,"line":16876},[57,92739,52614],{"class":140},[57,92741,51808],{"class":51497},[57,92743,51504],{"class":140},[57,92745,92746,92748,92750,92752,92754,92757,92759,92761],{"class":59,"line":16882},[57,92747,52341],{"class":140},[57,92749,52010],{"class":51497},[57,92751,55436],{"class":70},[57,92753,156],{"class":140},[57,92755,92756],{"class":74},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[57,92758,55511],{"class":140},[57,92760,52010],{"class":51497},[57,92762,51504],{"class":140},[57,92764,92765,92767,92769],{"class":59,"line":16905},[57,92766,52341],{"class":140},[57,92768,52010],{"class":51497},[57,92770,51504],{"class":140},[57,92772,92773],{"class":59,"line":16911},[57,92774,92775],{"class":63},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[57,92777,92778,92780,92782,92784,92786,92788,92790,92793],{"class":59,"line":16934},[57,92779,11494],{"class":136},[57,92781,92252],{"class":81},[57,92783,13837],{"class":136},[57,92785,54593],{"class":140},[57,92787,54596],{"class":70},[57,92789,168],{"class":140},[57,92791,92792],{"class":74},"'video'",[57,92794,238],{"class":140},[57,92796,92797],{"class":59,"line":16948},[57,92798,92799],{"class":63},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[57,92801,92802,92805,92807,92809,92811,92814,92816],{"class":59,"line":16968},[57,92803,92804],{"class":140},"    video.ontimeupdate ",[57,92806,156],{"class":136},[57,92808,88552],{"class":140},[57,92810,91370],{"class":70},[57,92812,92813],{"class":140},"(() ",[57,92815,84919],{"class":136},[57,92817,15844],{"class":140},[57,92819,92820],{"class":59,"line":16974},[57,92821,92822],{"class":63},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[57,92824,92825],{"class":59,"line":16985},[57,92826,92827],{"class":63},"      \u002F\u002F 控制台输出当前的时间\n",[57,92829,92830,92833],{"class":59,"line":17008},[57,92831,92832],{"class":63},"      \u002F\u002F console.log(video.currentTime)",[57,92834,92835],{"class":63},"  \u002F\u002F获得当前的视频时间\n",[57,92837,92838],{"class":59,"line":17030},[57,92839,92840],{"class":63},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[57,92842,92843,92845,92847,92849,92852],{"class":59,"line":17035},[57,92844,74880],{"class":140},[57,92846,71851],{"class":70},[57,92848,168],{"class":140},[57,92850,92851],{"class":74},"'currentTime'",[57,92853,92854],{"class":140},", video.currentTime)\n",[57,92856,92857,92859,92861],{"class":59,"line":17041},[57,92858,54732],{"class":140},[57,92860,6683],{"class":81},[57,92862,238],{"class":140},[57,92864,92865],{"class":59,"line":17055},[57,92866,92867],{"class":63},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[57,92869,92870,92873,92876,92878,92881,92883],{"class":59,"line":17068},[57,92871,92872],{"class":140},"    video.",[57,92874,92875],{"class":70},"onloadeddata",[57,92877,13837],{"class":136},[57,92879,92880],{"class":140}," () ",[57,92882,84919],{"class":136},[57,92884,15844],{"class":140},[57,92886,92887],{"class":59,"line":17073},[57,92888,60209],{"class":63},[57,92890,92891],{"class":59,"line":17087},[57,92892,92893],{"class":63},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[57,92895,92896,92899,92901,92904,92906,92908,92910,92912,92914],{"class":59,"line":17092},[57,92897,92898],{"class":140},"      video.currentTime ",[57,92900,156],{"class":136},[57,92902,92903],{"class":140}," localStorage.",[57,92905,71882],{"class":70},[57,92907,168],{"class":140},[57,92909,92851],{"class":74},[57,92911,229],{"class":140},[57,92913,71554],{"class":136},[57,92915,47530],{"class":81},[57,92917,92918],{"class":59,"line":17098},[57,92919,2460],{"class":140},[57,92921,92922,92924,92926],{"class":59,"line":17103},[57,92923,52614],{"class":140},[57,92925,52010],{"class":51497},[57,92927,51504],{"class":140},[57,92929,92930,92932,92934],{"class":59,"line":17117},[57,92931,51982],{"class":140},[57,92933,51997],{"class":51497},[57,92935,51504],{"class":140},[57,92937,92938],{"class":59,"line":17122},[57,92939,2673],{"emptyLinePlaceholder":350},[57,92941,92942,92944,92946],{"class":59,"line":17127},[57,92943,51982],{"class":140},[57,92945,50832],{"class":51497},[57,92947,51504],{"class":140},[342,92949,92950],{},"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":46,"searchDepth":67,"depth":67,"links":92952},[92953,92958,92962,92963,92964,92969,92974,92975,92976,92977,92984,92989,92990,93000,93004,93005,93009],{"id":76888,"depth":67,"text":76889,"children":92954},[92955,92956,92957],{"id":76892,"depth":144,"text":76893},{"id":76917,"depth":144,"text":76918},{"id":76929,"depth":144,"text":76930},{"id":76941,"depth":67,"text":76942,"children":92959},[92960,92961],{"id":76945,"depth":144,"text":76946},{"id":76960,"depth":144,"text":76961},{"id":77012,"depth":67,"text":77013},{"id":77056,"depth":67,"text":77057},{"id":77073,"depth":67,"text":77074,"children":92965},[92966,92967,92968],{"id":77077,"depth":144,"text":77078},{"id":77090,"depth":144,"text":77091},{"id":77195,"depth":144,"text":77196},{"id":77484,"depth":67,"text":77485,"children":92970},[92971,92972,92973],{"id":77488,"depth":144,"text":77489},{"id":77931,"depth":144,"text":77932},{"id":78342,"depth":144,"text":78343},{"id":78405,"depth":67,"text":78406},{"id":78484,"depth":67,"text":78485},{"id":78577,"depth":67,"text":78578},{"id":80422,"depth":67,"text":80423,"children":92978},[92979,92980,92981,92982,92983],{"id":80426,"depth":144,"text":80427},{"id":80438,"depth":144,"text":80439},{"id":80657,"depth":144,"text":80658},{"id":80675,"depth":144,"text":80676},{"id":80735,"depth":144,"text":80736},{"id":85003,"depth":67,"text":85004,"children":92985},[92986,92987,92988],{"id":85007,"depth":144,"text":85008},{"id":85025,"depth":144,"text":85026},{"id":85051,"depth":144,"text":85052},{"id":85060,"depth":67,"text":85061},{"id":85082,"depth":67,"text":85083,"children":92991},[92992,92993,92994,92995,92996,92997,92998,92999],{"id":85086,"depth":144,"text":85087},{"id":85347,"depth":144,"text":85348},{"id":85533,"depth":144,"text":85534},{"id":85900,"depth":144,"text":85901},{"id":86016,"depth":144,"text":86017},{"id":86052,"depth":144,"text":86053},{"id":86099,"depth":144,"text":86100},{"id":86133,"depth":144,"text":86134},{"id":87496,"depth":67,"text":87497,"children":93001},[93002,93003],{"id":87500,"depth":144,"text":87501},{"id":87537,"depth":144,"text":87538},{"id":88892,"depth":67,"text":88893},{"id":89263,"depth":67,"text":89264,"children":93006},[93007,93008],{"id":89267,"depth":144,"text":89268},{"id":89301,"depth":144,"text":89302},{"id":90030,"depth":67,"text":90031,"children":93010},[93011,93012,93013,93014],{"id":90034,"depth":144,"text":90035},{"id":90992,"depth":144,"text":90993},{"id":91934,"depth":144,"text":91935},{"id":92008,"depth":144,"text":92009},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76877,"description":347},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93021,"title":93022,"body":93023,"description":93034,"extension":348,"meta":93035,"navigation":350,"path":93037,"seo":93038,"stem":93039,"__hash__":93040},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93024,"toc":93032},[93025],[14,93026,93027,93028],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[18,93029,93030],{"href":93030,"rel":93031},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[22],{"title":46,"searchDepth":67,"depth":67,"links":93033},[],"三件套第三套学习",{"category":93036},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93022,"description":93034},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93042,"title":93043,"body":93044,"description":347,"extension":348,"meta":93149,"navigation":350,"path":93150,"seo":93151,"stem":93152,"__hash__":93153},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93045,"toc":93144},[93046,93053,93056,93059,93062,93066,93075,93078,93081,93085,93094,93097,93101,93104,93124,93127,93141],[14,93047,93048],{},[18,93049,93052],{"href":93050,"rel":93051},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[22],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93054,93043],{"id":93055},"_1安装",[14,93057,93058],{},"numpy是科学计算基础库,底层是C语言",[14,93060,93061],{},"三种方式：",[365,93063,93065],{"id":93064},"_11-通过pip安装","1.1 通过pip安装",[49,93067,93069],{"className":122,"code":93068,"language":124,"meta":46,"style":46},"pip install numpy\n",[28,93070,93071],{"__ignoreMap":46},[57,93072,93073],{"class":59,"line":60},[57,93074,93068],{"class":140},[14,93076,93077],{},"首选方式，自动处理依赖项",[14,93079,93080],{},"在提示系统命令符中使用cmd",[365,93082,93084],{"id":93083},"_12-通过anaconda安装","1.2 通过Anaconda安装",[49,93086,93088],{"className":122,"code":93087,"language":124,"meta":46,"style":46},"conda install numpy\n",[28,93089,93090],{"__ignoreMap":46},[57,93091,93092],{"class":59,"line":60},[57,93093,93087],{"class":140},[14,93095,93096],{},"自动解决环境依赖",[365,93098,93100],{"id":93099},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,93102,93103],{},"对于Debian\u002FUbuntu",[49,93105,93107],{"className":122,"code":93106,"language":124,"meta":46,"style":46},"sudo apt-get install python3-numpy\n",[28,93108,93109],{"__ignoreMap":46},[57,93110,93111,93114,93116,93119,93121],{"class":59,"line":60},[57,93112,93113],{"class":140},"sudo apt",[57,93115,948],{"class":136},[57,93117,93118],{"class":140},"get install python3",[57,93120,948],{"class":136},[57,93122,93123],{"class":140},"numpy\n",[14,93125,93126],{},"对于Fedora:",[49,93128,93130],{"className":122,"code":93129,"language":124,"meta":46,"style":46},"sudo dnf install python3-numpy\n",[28,93131,93132],{"__ignoreMap":46},[57,93133,93134,93137,93139],{"class":59,"line":60},[57,93135,93136],{"class":140},"sudo dnf install python3",[57,93138,948],{"class":136},[57,93140,93123],{"class":140},[342,93142,93143],{},"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":46,"searchDepth":67,"depth":67,"links":93145},[93146,93147,93148],{"id":93064,"depth":67,"text":93065},{"id":93083,"depth":67,"text":93084},{"id":93099,"depth":67,"text":93100},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93043,"description":347},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93155,"title":93156,"body":93157,"description":347,"extension":348,"meta":93270,"navigation":350,"path":93271,"seo":93272,"stem":93273,"__hash__":93274},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93158,"toc":93268},[93159,93162,93165,93168,93171,93174,93177,93180,93183,93186,93262,93265],[10,93160,93156],{"id":93161},"_10算数函数",[14,93163,93164],{},"加减乘除运算跟python基础语法没区别",[14,93166,93167],{},"除了python那种方法外还可以使用函数",[14,93169,93170],{},"加：np.add(a,b)",[14,93172,93173],{},"减：np.subtract(a,b)",[14,93175,93176],{},"乘：np.multiply(a,b)",[14,93178,93179],{},"除：np.divide(a,b) == a\u002Fb",[14,93181,93182],{},"取余：np.mod(a,b) == a%b",[14,93184,93185],{},"必须会的用法：",[49,93187,93189],{"className":122,"code":93188,"language":124,"meta":46,"style":46},"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",[28,93190,93191,93213,93234,93244,93257],{"__ignoreMap":46},[57,93192,93193,93195,93197,93200,93202,93205,93207,93209,93211],{"class":59,"line":60},[57,93194,18],{"class":140},[57,93196,156],{"class":136},[57,93198,93199],{"class":140},"np.arange(",[57,93201,836],{"class":81},[57,93203,93204],{"class":140},").reshape(",[57,93206,270],{"class":81},[57,93208,273],{"class":140},[57,93210,270],{"class":81},[57,93212,238],{"class":140},[57,93214,93215,93217,93219,93222,93224,93226,93228,93230,93232],{"class":59,"line":67},[57,93216,680],{"class":140},[57,93218,156],{"class":136},[57,93220,93221],{"class":140},"np.array([",[57,93223,862],{"class":81},[57,93225,273],{"class":140},[57,93227,862],{"class":81},[57,93229,273],{"class":140},[57,93231,862],{"class":81},[57,93233,4930],{"class":140},[57,93235,93236,93239,93241],{"class":59,"line":144},[57,93237,93238],{"class":140},"result",[57,93240,156],{"class":136},[57,93242,93243],{"class":140},"np.empty_like(a)\n",[57,93245,93246,93249,93252,93254],{"class":59,"line":150},[57,93247,93248],{"class":140},"np.add(a,b,",[57,93250,93251],{"class":5489},"out",[57,93253,156],{"class":136},[57,93255,93256],{"class":140},"result)\n",[57,93258,93259],{"class":59,"line":162},[57,93260,93261],{"class":140},"result\n",[14,93263,93264],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[342,93266,93267],{},"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":46,"searchDepth":67,"depth":67,"links":93269},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93156,"description":347},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93276,"title":93277,"body":93278,"description":347,"extension":348,"meta":94040,"navigation":350,"path":94041,"seo":94042,"stem":94043,"__hash__":94044},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93279,"toc":94027},[93280,93283,93286,93289,93293,93332,93336,93380,93440,93444,93447,93486,93489,93534,93538,93574,93578,93647,93651,93715,93719,93722,93725,93728,93731,93767,93771,93811,93815,93887,93890,93894,93957,93961,94024],[10,93281,93277],{"id":93282},"_11统计函数",[14,93284,93285],{},"sum max min mean",[14,93287,93288],{},"这些有axis参数，可以指定方向",[365,93290,93292],{"id":93291},"_111-sum求和函数","11.1 sum()求和函数",[49,93294,93296],{"className":122,"code":93295,"language":124,"meta":46,"style":46},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[28,93297,93298,93303,93324],{"__ignoreMap":46},[57,93299,93300],{"class":59,"line":60},[57,93301,93302],{"class":63},"#创建一维数组\n",[57,93304,93305,93307,93309,93312,93314,93316,93318,93320,93322],{"class":59,"line":67},[57,93306,18],{"class":140},[57,93308,156],{"class":136},[57,93310,93311],{"class":140},"np.random.randint(",[57,93313,635],{"class":81},[57,93315,273],{"class":140},[57,93317,728],{"class":81},[57,93319,273],{"class":140},[57,93321,1116],{"class":81},[57,93323,238],{"class":140},[57,93325,93326,93329],{"class":59,"line":144},[57,93327,93328],{"class":140},"np.sum(a)",[57,93330,93331],{"class":63},"#求和\n",[365,93333,93335],{"id":93334},"_112-max求最大值函数","11.2 max()求最大值函数",[49,93337,93339],{"className":122,"code":93338,"language":124,"meta":46,"style":46},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[28,93340,93341,93345,93365,93370,93375],{"__ignoreMap":46},[57,93342,93343],{"class":59,"line":60},[57,93344,93302],{"class":63},[57,93346,93347,93349,93351,93353,93355,93357,93359,93361,93363],{"class":59,"line":67},[57,93348,18],{"class":140},[57,93350,156],{"class":136},[57,93352,93311],{"class":140},[57,93354,635],{"class":81},[57,93356,273],{"class":140},[57,93358,728],{"class":81},[57,93360,273],{"class":140},[57,93362,1116],{"class":81},[57,93364,238],{"class":140},[57,93366,93367],{"class":59,"line":144},[57,93368,93369],{"class":140},"np.max(a)\n",[57,93371,93372],{"class":59,"line":150},[57,93373,93374],{"class":63},"#最大索引(求最大元素的索引)arg\n",[57,93376,93377],{"class":59,"line":162},[57,93378,93379],{"class":140},"np.argmax(a)\n",[49,93381,93383],{"className":122,"code":93382,"language":124,"meta":46,"style":46},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[28,93384,93385,93406,93426,93430],{"__ignoreMap":46},[57,93386,93387,93389,93391,93394,93396,93398,93400,93402,93404],{"class":59,"line":60},[57,93388,11192],{"class":140},[57,93390,156],{"class":136},[57,93392,93393],{"class":140}," np.array([",[57,93395,635],{"class":81},[57,93397,12708],{"class":140},[57,93399,736],{"class":81},[57,93401,12708],{"class":140},[57,93403,270],{"class":81},[57,93405,4930],{"class":140},[57,93407,93408,93410,93412,93414,93416,93418,93420,93422,93424],{"class":59,"line":67},[57,93409,11218],{"class":140},[57,93411,156],{"class":136},[57,93413,93393],{"class":140},[57,93415,270],{"class":81},[57,93417,12708],{"class":140},[57,93419,498],{"class":81},[57,93421,12708],{"class":140},[57,93423,710],{"class":81},[57,93425,4930],{"class":140},[57,93427,93428],{"class":59,"line":144},[57,93429,2673],{"emptyLinePlaceholder":350},[57,93431,93432,93434,93437],{"class":59,"line":150},[57,93433,165],{"class":81},[57,93435,93436],{"class":140},"(np.maximum(a, b))   ",[57,93438,93439],{"class":63},"# [3 5 4]，每个位置上取较大值\n",[365,93441,93443],{"id":93442},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,93445,93446],{},"①一维数组：",[49,93448,93450],{"className":122,"code":93449,"language":124,"meta":46,"style":46},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[28,93451,93452,93456,93476,93481],{"__ignoreMap":46},[57,93453,93454],{"class":59,"line":60},[57,93455,93302],{"class":63},[57,93457,93458,93460,93462,93464,93466,93468,93470,93472,93474],{"class":59,"line":67},[57,93459,18],{"class":140},[57,93461,156],{"class":136},[57,93463,93311],{"class":140},[57,93465,635],{"class":81},[57,93467,273],{"class":140},[57,93469,728],{"class":81},[57,93471,273],{"class":140},[57,93473,1116],{"class":81},[57,93475,238],{"class":140},[57,93477,93478],{"class":59,"line":144},[57,93479,93480],{"class":63},"#求平均值\n",[57,93482,93483],{"class":59,"line":150},[57,93484,93485],{"class":140},"np.mean(a)\n",[14,93487,93488],{},"②二维数组",[49,93490,93492],{"className":122,"code":93491,"language":124,"meta":46,"style":46},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[28,93493,93494,93499,93524,93529],{"__ignoreMap":46},[57,93495,93496],{"class":59,"line":60},[57,93497,93498],{"class":63},"#二维数组\n",[57,93500,93501,93504,93506,93508,93510,93512,93514,93516,93518,93520,93522],{"class":59,"line":67},[57,93502,93503],{"class":140},"aa",[57,93505,156],{"class":136},[57,93507,93199],{"class":140},[57,93509,635],{"class":81},[57,93511,273],{"class":140},[57,93513,939],{"class":81},[57,93515,93204],{"class":140},[57,93517,270],{"class":81},[57,93519,273],{"class":140},[57,93521,710],{"class":81},[57,93523,238],{"class":140},[57,93525,93526],{"class":59,"line":144},[57,93527,93528],{"class":63},"#对数组中的所有数求平均\n",[57,93530,93531],{"class":59,"line":150},[57,93532,93533],{"class":140},"np.mean(aa)\n",[365,93535,93537],{"id":93536},"_114-median求中位数函数","11.4 median()求中位数函数",[49,93539,93541],{"className":122,"code":93540,"language":124,"meta":46,"style":46},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[28,93542,93543,93548,93564,93569],{"__ignoreMap":46},[57,93544,93545],{"class":59,"line":60},[57,93546,93547],{"class":63},"#求中位数\n",[57,93549,93550,93552,93554,93556,93558,93560,93562],{"class":59,"line":67},[57,93551,680],{"class":140},[57,93553,156],{"class":136},[57,93555,93199],{"class":140},[57,93557,635],{"class":81},[57,93559,273],{"class":140},[57,93561,862],{"class":81},[57,93563,238],{"class":140},[57,93565,93566],{"class":59,"line":144},[57,93567,93568],{"class":140},"np.median(b)\n",[57,93570,93571],{"class":59,"line":150},[57,93572,93573],{"class":63},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[365,93575,93577],{"id":93576},"_115-power求幂运算函数","11.5 power()求幂运算函数",[49,93579,93581],{"className":122,"code":93580,"language":124,"meta":46,"style":46},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[28,93582,93583,93599,93604,93609,93618,93623,93632],{"__ignoreMap":46},[57,93584,93585,93587,93589,93591,93593,93595,93597],{"class":59,"line":60},[57,93586,680],{"class":140},[57,93588,156],{"class":136},[57,93590,93199],{"class":140},[57,93592,635],{"class":81},[57,93594,273],{"class":140},[57,93596,862],{"class":81},[57,93598,238],{"class":140},[57,93600,93601],{"class":59,"line":67},[57,93602,93603],{"class":63},"#幂运算\n",[57,93605,93606],{"class":59,"line":144},[57,93607,93608],{"class":63},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[57,93610,93611,93614,93616],{"class":59,"line":150},[57,93612,93613],{"class":140},"np.power(b,",[57,93615,498],{"class":81},[57,93617,238],{"class":140},[57,93619,93620],{"class":59,"line":162},[57,93621,93622],{"class":63},"#或者以下代码，将数据存储起来\n",[57,93624,93625,93627,93629],{"class":59,"line":180},[57,93626,1261],{"class":140},[57,93628,156],{"class":136},[57,93630,93631],{"class":140},"np.empty_like(b)\n",[57,93633,93634,93636,93638,93640,93642,93644],{"class":59,"line":186},[57,93635,93613],{"class":140},[57,93637,498],{"class":81},[57,93639,273],{"class":140},[57,93641,93251],{"class":5489},[57,93643,156],{"class":136},[57,93645,93646],{"class":140},"y)\n",[365,93648,93650],{"id":93649},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[49,93652,93654],{"className":122,"code":93653,"language":124,"meta":46,"style":46},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[28,93655,93656,93672,93677,93682,93686,93704],{"__ignoreMap":46},[57,93657,93658,93660,93662,93664,93666,93668,93670],{"class":59,"line":60},[57,93659,680],{"class":140},[57,93661,156],{"class":136},[57,93663,93199],{"class":140},[57,93665,635],{"class":81},[57,93667,273],{"class":140},[57,93669,862],{"class":81},[57,93671,238],{"class":140},[57,93673,93674],{"class":59,"line":67},[57,93675,93676],{"class":63},"#开方\n",[57,93678,93679],{"class":59,"line":144},[57,93680,93681],{"class":140},"np.sqrt(b)\n",[57,93683,93684],{"class":59,"line":150},[57,93685,93622],{"class":63},[57,93687,93688,93690,93692,93695,93698,93700,93702],{"class":59,"line":162},[57,93689,1261],{"class":140},[57,93691,156],{"class":136},[57,93693,93694],{"class":140},"np.empty_like(b,",[57,93696,93697],{"class":5489},"dtype",[57,93699,156],{"class":136},[57,93701,464],{"class":81},[57,93703,238],{"class":140},[57,93705,93706,93709,93711,93713],{"class":59,"line":180},[57,93707,93708],{"class":140},"np.sqrt(b,",[57,93710,93251],{"class":5489},[57,93712,156],{"class":136},[57,93714,93646],{"class":140},[365,93716,93718],{"id":93717},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,93720,93721],{},"对数组中的元素累计求和，可指定轴",[14,93723,93724],{},"#累计求和的意思是：",[14,93726,93727],{},"a = np.array([1, 2, 3, 4])",[14,93729,93730],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[49,93732,93734],{"className":122,"code":93733,"language":124,"meta":46,"style":46},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[28,93735,93736,93752,93757,93762],{"__ignoreMap":46},[57,93737,93738,93740,93742,93744,93746,93748,93750],{"class":59,"line":60},[57,93739,680],{"class":140},[57,93741,156],{"class":136},[57,93743,93199],{"class":140},[57,93745,635],{"class":81},[57,93747,273],{"class":140},[57,93749,862],{"class":81},[57,93751,238],{"class":140},[57,93753,93754],{"class":59,"line":67},[57,93755,93756],{"class":140},"np.cumsum(b)\n",[57,93758,93759],{"class":59,"line":144},[57,93760,93761],{"class":63},"#结果：\n",[57,93763,93764],{"class":59,"line":150},[57,93765,93766],{"class":63},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[365,93768,93770],{"id":93769},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[49,93772,93774],{"className":122,"code":93773,"language":124,"meta":46,"style":46},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[28,93775,93776,93792,93797,93802,93806],{"__ignoreMap":46},[57,93777,93778,93780,93782,93784,93786,93788,93790],{"class":59,"line":60},[57,93779,680],{"class":140},[57,93781,156],{"class":136},[57,93783,93199],{"class":140},[57,93785,635],{"class":81},[57,93787,273],{"class":140},[57,93789,862],{"class":81},[57,93791,238],{"class":140},[57,93793,93794],{"class":59,"line":67},[57,93795,93796],{"class":63},"#对数组中的元素累计求积，可指定轴\n",[57,93798,93799],{"class":59,"line":144},[57,93800,93801],{"class":140},"np.cumprod(b)\n",[57,93803,93804],{"class":59,"line":150},[57,93805,93761],{"class":63},[57,93807,93808],{"class":59,"line":162},[57,93809,93810],{"class":63},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[365,93812,93814],{"id":93813},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[49,93816,93818],{"className":122,"code":93817,"language":124,"meta":46,"style":46},"#删除数组中的重复数据，并对数据进行排序\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",[28,93819,93820,93825,93873,93878,93882],{"__ignoreMap":46},[57,93821,93822],{"class":59,"line":60},[57,93823,93824],{"class":63},"#删除数组中的重复数据，并对数据进行排序\n",[57,93826,93827,93829,93831,93833,93835,93837,93839,93841,93843,93845,93847,93849,93851,93853,93855,93857,93859,93861,93863,93865,93867,93869,93871],{"class":59,"line":67},[57,93828,18],{"class":140},[57,93830,156],{"class":136},[57,93832,93221],{"class":140},[57,93834,635],{"class":81},[57,93836,273],{"class":140},[57,93838,498],{"class":81},[57,93840,273],{"class":140},[57,93842,270],{"class":81},[57,93844,273],{"class":140},[57,93846,914],{"class":81},[57,93848,273],{"class":140},[57,93850,270],{"class":81},[57,93852,273],{"class":140},[57,93854,862],{"class":81},[57,93856,273],{"class":140},[57,93858,615],{"class":81},[57,93860,273],{"class":140},[57,93862,226],{"class":81},[57,93864,273],{"class":140},[57,93866,1191],{"class":81},[57,93868,273],{"class":140},[57,93870,710],{"class":81},[57,93872,4930],{"class":140},[57,93874,93875],{"class":59,"line":144},[57,93876,93877],{"class":140},"np.unique(a)\n",[57,93879,93880],{"class":59,"line":150},[57,93881,93761],{"class":63},[57,93883,93884],{"class":59,"line":162},[57,93885,93886],{"class":63},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,93888,93889],{},"升序形式排序",[365,93891,93893],{"id":93892},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[49,93895,93897],{"className":122,"code":93896,"language":124,"meta":46,"style":46},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[28,93898,93899,93947,93952],{"__ignoreMap":46},[57,93900,93901,93903,93905,93907,93909,93911,93913,93915,93917,93919,93921,93923,93925,93927,93929,93931,93933,93935,93937,93939,93941,93943,93945],{"class":59,"line":60},[57,93902,18],{"class":140},[57,93904,156],{"class":136},[57,93906,93221],{"class":140},[57,93908,635],{"class":81},[57,93910,273],{"class":140},[57,93912,498],{"class":81},[57,93914,273],{"class":140},[57,93916,270],{"class":81},[57,93918,273],{"class":140},[57,93920,914],{"class":81},[57,93922,273],{"class":140},[57,93924,270],{"class":81},[57,93926,273],{"class":140},[57,93928,862],{"class":81},[57,93930,273],{"class":140},[57,93932,615],{"class":81},[57,93934,273],{"class":140},[57,93936,226],{"class":81},[57,93938,273],{"class":140},[57,93940,1191],{"class":81},[57,93942,273],{"class":140},[57,93944,710],{"class":81},[57,93946,4930],{"class":140},[57,93948,93949],{"class":59,"line":67},[57,93950,93951],{"class":63},"#返回数组中非零元素的索引\n",[57,93953,93954],{"class":59,"line":144},[57,93955,93956],{"class":140},"np.nonzero(a)\n",[365,93958,93960],{"id":93959},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[49,93962,93964],{"className":122,"code":93963,"language":124,"meta":46,"style":46},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[28,93965,93966,94014,94019],{"__ignoreMap":46},[57,93967,93968,93970,93972,93974,93976,93978,93980,93982,93984,93986,93988,93990,93992,93994,93996,93998,94000,94002,94004,94006,94008,94010,94012],{"class":59,"line":60},[57,93969,18],{"class":140},[57,93971,156],{"class":136},[57,93973,93221],{"class":140},[57,93975,635],{"class":81},[57,93977,273],{"class":140},[57,93979,498],{"class":81},[57,93981,273],{"class":140},[57,93983,270],{"class":81},[57,93985,273],{"class":140},[57,93987,914],{"class":81},[57,93989,273],{"class":140},[57,93991,270],{"class":81},[57,93993,273],{"class":140},[57,93995,862],{"class":81},[57,93997,273],{"class":140},[57,93999,615],{"class":81},[57,94001,273],{"class":140},[57,94003,226],{"class":81},[57,94005,273],{"class":140},[57,94007,1191],{"class":81},[57,94009,273],{"class":140},[57,94011,710],{"class":81},[57,94013,4930],{"class":140},[57,94015,94016],{"class":59,"line":67},[57,94017,94018],{"class":63},"#计算一组数中最大值与最小值的差，可指定轴\n",[57,94020,94021],{"class":59,"line":144},[57,94022,94023],{"class":140},"np.ptp(a)\n",[342,94025,94026],{},"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":46,"searchDepth":67,"depth":67,"links":94028},[94029,94030,94031,94032,94033,94034,94035,94036,94037,94038,94039],{"id":93291,"depth":67,"text":93292},{"id":93334,"depth":67,"text":93335},{"id":93442,"depth":67,"text":93443},{"id":93536,"depth":67,"text":93537},{"id":93576,"depth":67,"text":93577},{"id":93649,"depth":67,"text":93650},{"id":93717,"depth":67,"text":93718},{"id":93769,"depth":67,"text":93770},{"id":93813,"depth":67,"text":93814},{"id":93892,"depth":67,"text":93893},{"id":93959,"depth":67,"text":93960},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93277,"description":347},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94046,"title":94047,"body":94048,"description":347,"extension":348,"meta":94703,"navigation":350,"path":94704,"seo":94705,"stem":94706,"__hash__":94707},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94049,"toc":94691},[94050,94053,94057,94060,94276,94280,94283,94492,94496,94562,94567,94571,94574,94577,94615,94619,94622,94627,94631,94634,94637,94642,94646,94649,94653,94656,94659,94664,94668,94671,94674,94679,94683,94688],[10,94051,94047],{"id":94052},"_12其他常用函数",[365,94054,94056],{"id":94055},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,94058,94059],{},"将数组的数据按照行列复制扩展",[49,94061,94063],{"className":122,"code":94062,"language":124,"meta":46,"style":46},"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",[28,94064,94065,94081,94090,94094,94099,94104,94117,94121,94126,94131,94136,94140,94145,94169,94181,94185,94189,94194,94199,94204,94209,94213,94226,94230,94234,94239,94244,94249,94254,94259,94263,94267,94272],{"__ignoreMap":46},[57,94066,94067,94069,94071,94073,94075,94077,94079],{"class":59,"line":60},[57,94068,18],{"class":140},[57,94070,156],{"class":136},[57,94072,93199],{"class":140},[57,94074,635],{"class":81},[57,94076,273],{"class":140},[57,94078,736],{"class":81},[57,94080,238],{"class":140},[57,94082,94083,94086,94088],{"class":59,"line":67},[57,94084,94085],{"class":140},"np.tile(a,",[57,94087,498],{"class":81},[57,94089,238],{"class":140},[57,94091,94092],{"class":59,"line":144},[57,94093,93761],{"class":63},[57,94095,94096],{"class":59,"line":150},[57,94097,94098],{"class":63},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[57,94100,94101],{"class":59,"line":162},[57,94102,94103],{"class":63},"#行复制两次，列复制三次\n",[57,94105,94106,94109,94111,94113,94115],{"class":59,"line":180},[57,94107,94108],{"class":140},"np.tile(a,(",[57,94110,498],{"class":81},[57,94112,273],{"class":140},[57,94114,270],{"class":81},[57,94116,259],{"class":140},[57,94118,94119],{"class":59,"line":186},[57,94120,93761],{"class":63},[57,94122,94123],{"class":59,"line":197},[57,94124,94125],{"class":74},"'''\n",[57,94127,94128],{"class":59,"line":241},[57,94129,94130],{"class":74},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[57,94132,94133],{"class":59,"line":249},[57,94134,94135],{"class":74},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[57,94137,94138],{"class":59,"line":262},[57,94139,94125],{"class":74},[57,94141,94142],{"class":59,"line":281},[57,94143,94144],{"class":63},"#创建二维数组\n",[57,94146,94147,94149,94151,94153,94155,94157,94159,94161,94163,94165,94167],{"class":59,"line":287},[57,94148,93503],{"class":140},[57,94150,156],{"class":136},[57,94152,93199],{"class":140},[57,94154,635],{"class":81},[57,94156,273],{"class":140},[57,94158,939],{"class":81},[57,94160,93204],{"class":140},[57,94162,710],{"class":81},[57,94164,273],{"class":140},[57,94166,270],{"class":81},[57,94168,238],{"class":140},[57,94170,94171,94174,94176,94178],{"class":59,"line":298},[57,94172,94173],{"class":140},"np.tile(aa,",[57,94175,498],{"class":81},[57,94177,845],{"class":140},[57,94179,94180],{"class":63},"#一个数的时候就是行\n",[57,94182,94183],{"class":59,"line":311},[57,94184,93761],{"class":63},[57,94186,94187],{"class":59,"line":322},[57,94188,94125],{"class":74},[57,94190,94191],{"class":59,"line":1929},[57,94192,94193],{"class":74},"array([[ 1,  2,  3,  1,  2,  3],\n",[57,94195,94196],{"class":59,"line":1950},[57,94197,94198],{"class":74},"       [ 4,  5,  6,  4,  5,  6],\n",[57,94200,94201],{"class":59,"line":1955},[57,94202,94203],{"class":74},"       [ 7,  8,  9,  7,  8,  9],\n",[57,94205,94206],{"class":59,"line":1969},[57,94207,94208],{"class":74},"       [10, 11, 12, 10, 11, 12]])\n",[57,94210,94211],{"class":59,"line":1974},[57,94212,94125],{"class":74},[57,94214,94215,94218,94220,94222,94224],{"class":59,"line":2001},[57,94216,94217],{"class":140},"np.tile(aa,(",[57,94219,498],{"class":81},[57,94221,273],{"class":140},[57,94223,270],{"class":81},[57,94225,259],{"class":140},[57,94227,94228],{"class":59,"line":2006},[57,94229,93761],{"class":63},[57,94231,94232],{"class":59,"line":2023},[57,94233,94125],{"class":74},[57,94235,94236],{"class":59,"line":2028},[57,94237,94238],{"class":74},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[57,94240,94241],{"class":59,"line":2033},[57,94242,94243],{"class":74},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[57,94245,94246],{"class":59,"line":2038},[57,94247,94248],{"class":74},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[57,94250,94251],{"class":59,"line":2052},[57,94252,94253],{"class":74},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[57,94255,94256],{"class":59,"line":2057},[57,94257,94258],{"class":74},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[57,94260,94261],{"class":59,"line":2850},[57,94262,94243],{"class":74},[57,94264,94265],{"class":59,"line":2864},[57,94266,94248],{"class":74},[57,94268,94269],{"class":59,"line":2872},[57,94270,94271],{"class":74},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[57,94273,94274],{"class":59,"line":2877},[57,94275,94125],{"class":74},[365,94277,94279],{"id":94278},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,94281,94282],{},"repeat()将数组中的每个元素重复若干次",[49,94284,94286],{"className":122,"code":94285,"language":124,"meta":46,"style":46},"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",[28,94287,94288,94304,94313,94317,94322,94346,94351,94360,94364,94369,94373,94378,94394,94398,94402,94407,94412,94417,94421,94426,94430,94435,94440,94444,94460,94464,94468,94473,94478,94483,94488],{"__ignoreMap":46},[57,94289,94290,94292,94294,94296,94298,94300,94302],{"class":59,"line":60},[57,94291,18],{"class":140},[57,94293,156],{"class":136},[57,94295,93199],{"class":140},[57,94297,635],{"class":81},[57,94299,273],{"class":140},[57,94301,736],{"class":81},[57,94303,238],{"class":140},[57,94305,94306,94309,94311],{"class":59,"line":67},[57,94307,94308],{"class":140},"np.repeat(a,",[57,94310,270],{"class":81},[57,94312,238],{"class":140},[57,94314,94315],{"class":59,"line":144},[57,94316,93761],{"class":63},[57,94318,94319],{"class":59,"line":150},[57,94320,94321],{"class":63},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[57,94323,94324,94326,94328,94330,94332,94334,94336,94338,94340,94342,94344],{"class":59,"line":162},[57,94325,93503],{"class":140},[57,94327,156],{"class":136},[57,94329,93199],{"class":140},[57,94331,635],{"class":81},[57,94333,273],{"class":140},[57,94335,939],{"class":81},[57,94337,93204],{"class":140},[57,94339,710],{"class":81},[57,94341,273],{"class":140},[57,94343,270],{"class":81},[57,94345,238],{"class":140},[57,94347,94348],{"class":59,"line":180},[57,94349,94350],{"class":63},"#这个重复之后二维变成一维\n",[57,94352,94353,94356,94358],{"class":59,"line":186},[57,94354,94355],{"class":140},"np.repeat(aa,",[57,94357,498],{"class":81},[57,94359,238],{"class":140},[57,94361,94362],{"class":59,"line":197},[57,94363,94125],{"class":74},[57,94365,94366],{"class":59,"line":241},[57,94367,94368],{"class":74},"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",[57,94370,94371],{"class":59,"line":249},[57,94372,94125],{"class":74},[57,94374,94375],{"class":59,"line":262},[57,94376,94377],{"class":63},"#指定axis\n",[57,94379,94380,94382,94384,94386,94388,94390,94392],{"class":59,"line":281},[57,94381,94355],{"class":140},[57,94383,498],{"class":81},[57,94385,273],{"class":140},[57,94387,47711],{"class":5489},[57,94389,156],{"class":136},[57,94391,226],{"class":81},[57,94393,238],{"class":140},[57,94395,94396],{"class":59,"line":287},[57,94397,93761],{"class":63},[57,94399,94400],{"class":59,"line":298},[57,94401,94125],{"class":74},[57,94403,94404],{"class":59,"line":311},[57,94405,94406],{"class":74},"array([[ 1,  2,  3],\n",[57,94408,94409],{"class":59,"line":322},[57,94410,94411],{"class":74},"       [ 1,  2,  3],\n",[57,94413,94414],{"class":59,"line":1929},[57,94415,94416],{"class":74},"       [ 4,  5,  6],\n",[57,94418,94419],{"class":59,"line":1950},[57,94420,94416],{"class":74},[57,94422,94423],{"class":59,"line":1955},[57,94424,94425],{"class":74},"       [ 7,  8,  9],\n",[57,94427,94428],{"class":59,"line":1969},[57,94429,94425],{"class":74},[57,94431,94432],{"class":59,"line":1974},[57,94433,94434],{"class":74},"       [10, 11, 12],\n",[57,94436,94437],{"class":59,"line":2001},[57,94438,94439],{"class":74},"       [10, 11, 12]])\n",[57,94441,94442],{"class":59,"line":2006},[57,94443,94125],{"class":74},[57,94445,94446,94448,94450,94452,94454,94456,94458],{"class":59,"line":2023},[57,94447,94355],{"class":140},[57,94449,498],{"class":81},[57,94451,273],{"class":140},[57,94453,47711],{"class":5489},[57,94455,156],{"class":136},[57,94457,635],{"class":81},[57,94459,238],{"class":140},[57,94461,94462],{"class":59,"line":2028},[57,94463,93761],{"class":63},[57,94465,94466],{"class":59,"line":2033},[57,94467,94125],{"class":74},[57,94469,94470],{"class":59,"line":2038},[57,94471,94472],{"class":74},"array([[ 1,  1,  2,  2,  3,  3],\n",[57,94474,94475],{"class":59,"line":2052},[57,94476,94477],{"class":74},"       [ 4,  4,  5,  5,  6,  6],\n",[57,94479,94480],{"class":59,"line":2057},[57,94481,94482],{"class":74},"       [ 7,  7,  8,  8,  9,  9],\n",[57,94484,94485],{"class":59,"line":2850},[57,94486,94487],{"class":74},"       [10, 10, 11, 11, 12, 12]])\n",[57,94489,94490],{"class":59,"line":2864},[57,94491,94125],{"class":74},[365,94493,94495],{"id":94494},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[49,94497,94499],{"className":122,"code":94498,"language":124,"meta":46,"style":46},"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",[28,94500,94501,94517,94522,94534,94538,94543,94553,94557],{"__ignoreMap":46},[57,94502,94503,94505,94507,94509,94511,94513,94515],{"class":59,"line":60},[57,94504,18],{"class":140},[57,94506,156],{"class":136},[57,94508,93199],{"class":140},[57,94510,635],{"class":81},[57,94512,273],{"class":140},[57,94514,736],{"class":81},[57,94516,238],{"class":140},[57,94518,94519],{"class":59,"line":67},[57,94520,94521],{"class":63},"#array([，2，3，4])\n",[57,94523,94524,94527,94529,94531],{"class":59,"line":144},[57,94525,94526],{"class":140},"np.roll(a,",[57,94528,498],{"class":81},[57,94530,845],{"class":140},[57,94532,94533],{"class":63},"#传正数向后调多少位，传负数向前调多少位\n",[57,94535,94536],{"class":59,"line":150},[57,94537,93761],{"class":63},[57,94539,94540],{"class":59,"line":162},[57,94541,94542],{"class":63},"#array([3, 4, 1, 2])\n",[57,94544,94545,94547,94549,94551],{"class":59,"line":180},[57,94546,94526],{"class":140},[57,94548,948],{"class":136},[57,94550,635],{"class":81},[57,94552,238],{"class":140},[57,94554,94555],{"class":59,"line":186},[57,94556,93761],{"class":63},[57,94558,94559],{"class":59,"line":197},[57,94560,94561],{"class":63},"#array([2, 3, 4, 1])\n",[14,94563,94564],{},[44,94565],{"alt":46,"src":94566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[365,94568,94570],{"id":94569},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,94572,94573],{},"resize()重新调整数组的大小",[14,94575,94576],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[49,94578,94580],{"className":122,"code":94579,"language":124,"meta":46,"style":46},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[28,94581,94582,94587,94600],{"__ignoreMap":46},[57,94583,94584],{"class":59,"line":60},[57,94585,94586],{"class":63},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[57,94588,94589,94592,94594,94596,94598],{"class":59,"line":67},[57,94590,94591],{"class":140},"np.resize(aa,(",[57,94593,498],{"class":81},[57,94595,273],{"class":140},[57,94597,761],{"class":81},[57,94599,259],{"class":140},[57,94601,94602,94604,94606,94608,94610,94612],{"class":59,"line":144},[57,94603,94591],{"class":140},[57,94605,498],{"class":81},[57,94607,273],{"class":140},[57,94609,836],{"class":81},[57,94611,82968],{"class":140},[57,94613,94614],{"class":63},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[365,94616,94618],{"id":94617},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,94620,94621],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,94623,94624],{},[44,94625],{"alt":46,"src":94626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[365,94628,94630],{"id":94629},"_126-保存加载文件","12.6 保存加载文件",[14,94632,94633],{},"savetxt():将数据保存到txt文件中",[14,94635,94636],{},"loadtxt():从文件加载数据",[14,94638,94639],{},[44,94640],{"alt":46,"src":94641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[365,94643,94645],{"id":94644},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,94647,94648],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[365,94650,94652],{"id":94651},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,94654,94655],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,94657,94658],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,94660,94661],{},[44,94662],{"alt":46,"src":94663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[365,94665,94667],{"id":94666},"_129-where语句","12.9 where语句",[14,94669,94670],{},"np.where(条件,x,y)",[14,94672,94673],{},"如果条件为True,对应值为x,否则对应值为y",[14,94675,94676],{},[44,94677],{"alt":46,"src":94678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[365,94680,94682],{"id":94681},"_1210-dot矩阵","12.10 dot()矩阵",[14,94684,94685],{},[44,94686],{"alt":46,"src":94687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[342,94689,94690],{},"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":46,"searchDepth":67,"depth":67,"links":94692},[94693,94694,94695,94696,94697,94698,94699,94700,94701,94702],{"id":94055,"depth":67,"text":94056},{"id":94278,"depth":67,"text":94279},{"id":94494,"depth":67,"text":94495},{"id":94569,"depth":67,"text":94570},{"id":94617,"depth":67,"text":94618},{"id":94629,"depth":67,"text":94630},{"id":94644,"depth":67,"text":94645},{"id":94651,"depth":67,"text":94652},{"id":94666,"depth":67,"text":94667},{"id":94681,"depth":67,"text":94682},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94047,"description":347},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94709,"title":94710,"body":94711,"description":347,"extension":348,"meta":95064,"navigation":350,"path":95065,"seo":95066,"stem":95067,"__hash__":95068},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94712,"toc":95062},[94713,94716,94719,94722,94725,94728,94793,94795,95059],[10,94714,94710],{"id":94715},"_13数组排序",[14,94717,94718],{},"排序主要用到的方法是np.sort和np.argsort",[14,94720,94721],{},"其中np.sort()对数组直接排序",[14,94723,94724],{},"而np.argsort()是返回排序后的原始索引",[14,94726,94727],{},"①一维数组",[49,94729,94731],{"className":122,"code":94730,"language":124,"meta":46,"style":46},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[28,94732,94733,94737,94777,94785],{"__ignoreMap":46},[57,94734,94735],{"class":59,"line":60},[57,94736,93302],{"class":63},[57,94738,94739,94741,94743,94745,94747,94749,94751,94753,94755,94757,94759,94761,94763,94765,94767,94769,94771,94773,94775],{"class":59,"line":67},[57,94740,18],{"class":140},[57,94742,156],{"class":136},[57,94744,93221],{"class":140},[57,94746,270],{"class":81},[57,94748,273],{"class":140},[57,94750,914],{"class":81},[57,94752,273],{"class":140},[57,94754,811],{"class":81},[57,94756,273],{"class":140},[57,94758,1191],{"class":81},[57,94760,273],{"class":140},[57,94762,696],{"class":81},[57,94764,273],{"class":140},[57,94766,1309],{"class":81},[57,94768,273],{"class":140},[57,94770,761],{"class":81},[57,94772,273],{"class":140},[57,94774,862],{"class":81},[57,94776,4930],{"class":140},[57,94778,94779,94782],{"class":59,"line":144},[57,94780,94781],{"class":140},"np.sort(a)",[57,94783,94784],{"class":63},"#升序排序\n",[57,94786,94787,94790],{"class":59,"line":150},[57,94788,94789],{"class":140},"np.argsort(a)",[57,94791,94792],{"class":63},"#按照元素大小来索引排序\n",[14,94794,93488],{},[49,94796,94798],{"className":122,"code":94797,"language":124,"meta":46,"style":46},"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",[28,94799,94800,94812,94838,94843,94847,94852,94857,94862,94867,94871,94879,94883,94888,94893,94898,94903,94907,94912,94925,94929,94934,94939,94944,94949,94953,94958,94970,94974,94978,94982,94986,94990,94994,94999,95014,95019,95028,95033,95037,95041,95046,95050,95055],{"__ignoreMap":46},[57,94801,94802,94805,94807,94809],{"class":59,"line":60},[57,94803,94804],{"class":140},"np.random.seed(",[57,94806,226],{"class":81},[57,94808,845],{"class":140},[57,94810,94811],{"class":63},"#保证每次值一样\n",[57,94813,94814,94816,94818,94820,94822,94824,94826,94828,94830,94832,94834,94836],{"class":59,"line":67},[57,94815,93503],{"class":140},[57,94817,156],{"class":136},[57,94819,93311],{"class":140},[57,94821,728],{"class":81},[57,94823,273],{"class":140},[57,94825,31693],{"class":5489},[57,94827,156],{"class":136},[57,94829,168],{"class":140},[57,94831,710],{"class":81},[57,94833,273],{"class":140},[57,94835,761],{"class":81},[57,94837,259],{"class":140},[57,94839,94840],{"class":59,"line":144},[57,94841,94842],{"class":63},"#原数组：\n",[57,94844,94845],{"class":59,"line":150},[57,94846,94125],{"class":74},[57,94848,94849],{"class":59,"line":162},[57,94850,94851],{"class":74},"array([[44, 47, 64, 67, 67,  9],\n",[57,94853,94854],{"class":59,"line":180},[57,94855,94856],{"class":74},"       [83, 21, 36, 87, 70, 88],\n",[57,94858,94859],{"class":59,"line":186},[57,94860,94861],{"class":74},"       [88, 12, 58, 65, 39, 87],\n",[57,94863,94864],{"class":59,"line":197},[57,94865,94866],{"class":74},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[57,94868,94869],{"class":59,"line":241},[57,94870,94125],{"class":74},[57,94872,94873,94876],{"class":59,"line":249},[57,94874,94875],{"class":140},"np.sort(aa)",[57,94877,94878],{"class":63},"#每行进行了排序\n",[57,94880,94881],{"class":59,"line":262},[57,94882,94125],{"class":74},[57,94884,94885],{"class":59,"line":281},[57,94886,94887],{"class":74},"array([[ 9, 44, 47, 64, 67, 67],\n",[57,94889,94890],{"class":59,"line":287},[57,94891,94892],{"class":74},"       [21, 36, 70, 83, 87, 88],\n",[57,94894,94895],{"class":59,"line":298},[57,94896,94897],{"class":74},"       [12, 39, 58, 65, 87, 88],\n",[57,94899,94900],{"class":59,"line":311},[57,94901,94902],{"class":74},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[57,94904,94905],{"class":59,"line":322},[57,94906,94125],{"class":74},[57,94908,94909],{"class":59,"line":1929},[57,94910,94911],{"class":63},"#axis=0时\n",[57,94913,94914,94917,94919,94921,94923],{"class":59,"line":1950},[57,94915,94916],{"class":140},"np.sort(aa,",[57,94918,47711],{"class":5489},[57,94920,156],{"class":136},[57,94922,226],{"class":81},[57,94924,238],{"class":140},[57,94926,94927],{"class":59,"line":1955},[57,94928,94125],{"class":74},[57,94930,94931],{"class":59,"line":1969},[57,94932,94933],{"class":74},"array([[44, 12, 36, 37, 25,  9],\n",[57,94935,94936],{"class":59,"line":1974},[57,94937,94938],{"class":74},"       [46, 21, 58, 65, 39, 77],\n",[57,94940,94941],{"class":59,"line":2001},[57,94942,94943],{"class":74},"       [83, 47, 64, 67, 67, 87],\n",[57,94945,94946],{"class":59,"line":2006},[57,94947,94948],{"class":74},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[57,94950,94951],{"class":59,"line":2023},[57,94952,94125],{"class":74},[57,94954,94955],{"class":59,"line":2028},[57,94956,94957],{"class":63},"#axis=1时,为默认值\n",[57,94959,94960,94962,94964,94966,94968],{"class":59,"line":2033},[57,94961,94916],{"class":140},[57,94963,47711],{"class":5489},[57,94965,156],{"class":136},[57,94967,635],{"class":81},[57,94969,238],{"class":140},[57,94971,94972],{"class":59,"line":2038},[57,94973,94125],{"class":74},[57,94975,94976],{"class":59,"line":2052},[57,94977,94887],{"class":74},[57,94979,94980],{"class":59,"line":2057},[57,94981,94892],{"class":74},[57,94983,94984],{"class":59,"line":2850},[57,94985,94897],{"class":74},[57,94987,94988],{"class":59,"line":2864},[57,94989,94902],{"class":74},[57,94991,94992],{"class":59,"line":2872},[57,94993,94125],{"class":74},[57,94995,94996],{"class":59,"line":2877},[57,94997,94998],{"class":63},"#按最后一列排序\n",[57,95000,95001,95003,95005,95008,95010,95012],{"class":59,"line":2883},[57,95002,680],{"class":140},[57,95004,156],{"class":136},[57,95006,95007],{"class":140},"aa[:,",[57,95009,948],{"class":136},[57,95011,635],{"class":81},[57,95013,33443],{"class":140},[57,95015,95016],{"class":59,"line":2889},[57,95017,95018],{"class":63},"#获取最后一列排好序的索引\n",[57,95020,95021,95023,95025],{"class":59,"line":2894},[57,95022,74255],{"class":140},[57,95024,156],{"class":136},[57,95026,95027],{"class":140},"np.argsort(b)\n",[57,95029,95030],{"class":59,"line":8221},[57,95031,95032],{"class":140},"aa[index]\n",[57,95034,95035],{"class":59,"line":8245},[57,95036,94125],{"class":74},[57,95038,95039],{"class":59,"line":8250},[57,95040,94851],{"class":74},[57,95042,95043],{"class":59,"line":8256},[57,95044,95045],{"class":74},"       [46, 88, 81, 37, 25, 77],\n",[57,95047,95048],{"class":59,"line":8283},[57,95049,94861],{"class":74},[57,95051,95052],{"class":59,"line":8288},[57,95053,95054],{"class":74},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[57,95056,95057],{"class":59,"line":8294},[57,95058,94125],{"class":74},[342,95060,95061],{},"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":46,"searchDepth":67,"depth":67,"links":95063},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94710,"description":347},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95070,"title":95071,"body":95072,"description":347,"extension":348,"meta":95102,"navigation":350,"path":95103,"seo":95104,"stem":95105,"__hash__":95106},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95073,"toc":95100},[95074,95077,95080,95083,95086,95089,95092,95095],[10,95075,95071],{"id":95076},"_14广播机制",[14,95078,95079],{},"广播的规则：",[14,95081,95082],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,95084,95085],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,95087,95088],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,95090,95091],{},"3.如果没有维度形状为1，则会引发异常",[14,95093,95094],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,95096,95097],{},[44,95098],{"alt":46,"src":95099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":46,"searchDepth":67,"depth":67,"links":95101},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95071,"description":347},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95108,"title":95109,"body":95110,"description":347,"extension":348,"meta":95208,"navigation":350,"path":95209,"seo":95210,"stem":95211,"__hash__":95212},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95111,"toc":95206},[95112,95115,95118,95203],[10,95113,95109],{"id":95114},"_15比较掩码",[14,95116,95117],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[49,95119,95121],{"className":122,"code":95120,"language":124,"meta":46,"style":46},"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",[28,95122,95123,95169,95180,95194,95198],{"__ignoreMap":46},[57,95124,95125,95127,95129,95132,95134,95136,95138,95140,95142,95144,95146,95148,95150,95152,95154,95156,95158,95160,95162,95164,95166],{"class":59,"line":60},[57,95126,18],{"class":140},[57,95128,156],{"class":136},[57,95130,95131],{"class":140},"np.array([[",[57,95133,635],{"class":81},[57,95135,273],{"class":140},[57,95137,498],{"class":81},[57,95139,273],{"class":140},[57,95141,270],{"class":81},[57,95143,48227],{"class":140},[57,95145,888],{"class":81},[57,95147,273],{"class":140},[57,95149,914],{"class":81},[57,95151,273],{"class":140},[57,95153,939],{"class":81},[57,95155,48227],{"class":140},[57,95157,1141],{"class":81},[57,95159,273],{"class":140},[57,95161,1166],{"class":81},[57,95163,273],{"class":140},[57,95165,1191],{"class":81},[57,95167,95168],{"class":140},"]])\n",[57,95170,95171,95173,95175,95177],{"class":59,"line":67},[57,95172,18],{"class":140},[57,95174,1326],{"class":136},[57,95176,1116],{"class":81},[57,95178,95179],{"class":63},"#结果是一个由True,False组成的数组\n",[57,95181,95182,95185,95187,95189,95191],{"class":59,"line":144},[57,95183,95184],{"class":140},"a[a",[57,95186,1326],{"class":136},[57,95188,1116],{"class":81},[57,95190,1356],{"class":140},[57,95192,95193],{"class":63},"#小于20的元素会存到这个数组中\n",[57,95195,95196],{"class":59,"line":150},[57,95197,93761],{"class":63},[57,95199,95200],{"class":59,"line":162},[57,95201,95202],{"class":63},"#array([ 1,  2,  3, 11, 12, 13])\n",[342,95204,95205],{},"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":46,"searchDepth":67,"depth":67,"links":95207},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95109,"description":347},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95214,"title":95215,"body":95216,"description":347,"extension":348,"meta":95308,"navigation":350,"path":95309,"seo":95310,"stem":95311,"__hash__":95312},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95217,"toc":95306},[95218,95221,95224,95227,95230,95233,95298,95303],[10,95219,95215],{"id":95220},"_16魔法命令time",[14,95222,95223],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,95225,95226],{},"%:行模式",[14,95228,95229],{},"%%:单元格模式",[14,95231,95232],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[49,95234,95236],{"className":122,"code":95235,"language":124,"meta":46,"style":46},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[28,95237,95238,95243,95250,95255,95264,95277,95281,95289],{"__ignoreMap":46},[57,95239,95240],{"class":59,"line":60},[57,95241,95242],{"class":63},"#程序执行时间\n",[57,95244,95245,95247],{"class":59,"line":67},[57,95246,137],{"class":136},[57,95248,95249],{"class":140}," time \n",[57,95251,95252],{"class":59,"line":144},[57,95253,95254],{"class":63},"#获取时间\n",[57,95256,95257,95260,95262],{"class":59,"line":150},[57,95258,95259],{"class":140},"start",[57,95261,156],{"class":136},[57,95263,32615],{"class":140},[57,95265,95266,95269,95272,95274],{"class":59,"line":162},[57,95267,95268],{"class":140},"time.sleep(",[57,95270,95271],{"class":81},"0.4",[57,95273,845],{"class":140},[57,95275,95276],{"class":63},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[57,95278,95279],{"class":59,"line":180},[57,95280,95254],{"class":63},[57,95282,95283,95285,95287],{"class":59,"line":186},[57,95284,45998],{"class":140},[57,95286,156],{"class":136},[57,95288,32615],{"class":140},[57,95290,95291,95293,95295],{"class":59,"line":197},[57,95292,45998],{"class":140},[57,95294,948],{"class":136},[57,95296,95297],{"class":140},"start\n",[14,95299,95300],{},[44,95301],{"alt":46,"src":95302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[342,95304,95305],{},"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":46,"searchDepth":67,"depth":67,"links":95307},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95215,"description":347},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95314,"title":95315,"body":95316,"description":347,"extension":348,"meta":95351,"navigation":350,"path":95352,"seo":95353,"stem":95354,"__hash__":95355},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95317,"toc":95349},[95318,95321,95324,95327,95330,95333,95336,95339,95344],[10,95319,95315],{"id":95320},"_17魔法命令timeit",[14,95322,95323],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,95325,95326],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,95328,95329],{},"单元格模式：",[14,95331,95332],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,95334,95335],{},"初始化语句执行次数由轮数来决定",[14,95337,95338],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,95340,95341],{},[44,95342],{"alt":46,"src":95343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,95345,95346],{},[44,95347],{"alt":46,"src":95348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":46,"searchDepth":67,"depth":67,"links":95350},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95315,"description":347},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95357,"title":95358,"body":95359,"description":347,"extension":348,"meta":95377,"navigation":350,"path":95378,"seo":95379,"stem":95380,"__hash__":95381},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95360,"toc":95375},[95361,95364,95367,95370],[10,95362,95358],{"id":95363},"_18魔法命令writefile和run",[14,95365,95366],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,95368,95369],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,95371,95372],{},[44,95373],{"alt":46,"src":95374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":46,"searchDepth":67,"depth":67,"links":95376},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95358,"description":347},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95383,"title":95384,"body":95385,"description":347,"extension":348,"meta":95438,"navigation":350,"path":95439,"seo":95440,"stem":95441,"__hash__":95442},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95386,"toc":95436},[95387,95390,95393,95395,95398,95401,95406,95409,95412,95415,95418,95421,95424,95427,95430,95433],[10,95388,95384],{"id":95389},"_19魔法命令memit",[14,95391,95392],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,95394,24868],{},[14,95396,95397],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,95399,95400],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,95402,95403],{},[44,95404],{"alt":46,"src":95405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,95407,95408],{},"补充：",[14,95410,95411],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,95413,95414],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,95416,95417],{},"解决方法：",[14,95419,95420],{},"1.cmd",[14,95422,95423],{},"2.依次输入以下代码：",[14,95425,95426],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,95428,95429],{},"pip install --upgrade ipython",[14,95431,95432],{},"#升级 memory_profiler 和 setuptools",[14,95434,95435],{},"pip install --upgrade memory_profiler setuptools",{"title":46,"searchDepth":67,"depth":67,"links":95437},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95384,"description":347},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95444,"title":95445,"body":95446,"description":347,"extension":348,"meta":97092,"navigation":350,"path":97093,"seo":97094,"stem":97095,"__hash__":97096},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95447,"toc":97062},[95448,95451,95455,95459,95520,95523,95528,95532,95537,95542,95547,95552,95555,95560,95564,95568,95601,95604,95607,95610,95662,95665,95701,95704,95746,95750,95771,95773,95810,95812,95817,95819,95824,95828,95831,95859,95863,95867,95920,95924,96016,96020,96024,96027,96032,96036,96061,96066,96070,96073,96076,96079,96082,96085,96088,96091,96103,96107,96111,96114,96146,96149,96172,96175,96201,96204,96230,96233,96267,96270,96332,96336,96339,96343,96346,96372,96375,96378,96383,96386,96455,96457,96462,96523,96526,96537,96543,96548,96552,96555,96568,96572,96587,96589,96612,96614,96640,96643,96646,96649,96697,96699,96704,96708,96712,96739,96743,96770,96773,96778,96783,96873,96877,96935,96940,96943,96946,96988,96992,97048,97053,97056,97059],[10,95449,95445],{"id":95450},"_2创建数组",[365,95452,95454],{"id":95453},"_21-array函数创建数组","2.1 array()函数创建数组",[394,95456,95458],{"id":95457},"_221-函数语句","2.2.1 函数语句",[49,95460,95462],{"className":122,"code":95461,"language":124,"meta":46,"style":46},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[28,95463,95464],{"__ignoreMap":46},[57,95465,95466,95469,95472,95474,95476,95478,95480,95482,95485,95487,95490,95492,95495,95497,95499,95501,95504,95506,95509,95511,95514,95516,95518],{"class":59,"line":60},[57,95467,95468],{"class":140},"numpy.array(",[57,95470,95471],{"class":81},"object",[57,95473,12708],{"class":140},[57,95475,93697],{"class":5489},[57,95477,13837],{"class":136},[57,95479,39130],{"class":81},[57,95481,12708],{"class":140},[57,95483,95484],{"class":5489},"copy",[57,95486,13837],{"class":136},[57,95488,95489],{"class":81}," True",[57,95491,12708],{"class":140},[57,95493,95494],{"class":5489},"order",[57,95496,13837],{"class":136},[57,95498,39130],{"class":81},[57,95500,12708],{"class":140},[57,95502,95503],{"class":5489},"subok",[57,95505,13837],{"class":136},[57,95507,95508],{"class":81}," False",[57,95510,12708],{"class":140},[57,95512,95513],{"class":5489},"ndmin",[57,95515,13837],{"class":136},[57,95517,4366],{"class":81},[57,95519,238],{"class":140},[14,95521,95522],{},"参数：",[14,95524,95525],{},[44,95526],{"alt":46,"src":95527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[394,95529,95531],{"id":95530},"_222-实例","2.2.2 实例",[14,95533,95534],{},[44,95535],{"alt":46,"src":95536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,95538,95539],{},[44,95540],{"alt":46,"src":95541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,95543,95544],{},[44,95545],{"alt":46,"src":95546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,95548,95549],{},[44,95550],{"alt":46,"src":95551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,95553,95554],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,95556,95557],{},[44,95558],{"alt":46,"src":95559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[365,95561,95563],{"id":95562},"_22-随机数创建数组","2.2 随机数创建数组",[394,95565,95567],{"id":95566},"_221-random语句","2.2.1 random语句",[49,95569,95571],{"className":122,"code":95570,"language":124,"meta":46,"style":46},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[28,95572,95573,95578,95583,95591,95596],{"__ignoreMap":46},[57,95574,95575],{"class":59,"line":60},[57,95576,95577],{"class":63},"#random.random()\n",[57,95579,95580],{"class":59,"line":67},[57,95581,95582],{"class":63},"#确定随机种子,就是每次运行结果是相同的\n",[57,95584,95585,95587,95589],{"class":59,"line":144},[57,95586,94804],{"class":140},[57,95588,226],{"class":81},[57,95590,238],{"class":140},[57,95592,95593],{"class":59,"line":150},[57,95594,95595],{"class":140},"np.random.random()\n",[57,95597,95598],{"class":59,"line":162},[57,95599,95600],{"class":63},"#生成一个随机的数目\n",[14,95602,95603],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,95605,95606],{},"可以指定数组形状 size",[14,95608,95609],{},"①生成一维数组",[49,95611,95613],{"className":122,"code":95612,"language":124,"meta":46,"style":46},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[28,95614,95615,95620,95633,95638,95654],{"__ignoreMap":46},[57,95616,95617],{"class":59,"line":60},[57,95618,95619],{"class":63},"#random.random(size())\n",[57,95621,95622,95625,95627,95629,95631],{"class":59,"line":67},[57,95623,95624],{"class":140},"np.random.random(",[57,95626,31693],{"class":5489},[57,95628,156],{"class":136},[57,95630,736],{"class":81},[57,95632,238],{"class":140},[57,95634,95635],{"class":59,"line":144},[57,95636,95637],{"class":63},"#生成一位的五个元素\n",[57,95639,95640,95642,95644,95646,95648,95650,95652],{"class":59,"line":150},[57,95641,18],{"class":140},[57,95643,156],{"class":136},[57,95645,95624],{"class":140},[57,95647,31693],{"class":5489},[57,95649,156],{"class":136},[57,95651,710],{"class":81},[57,95653,238],{"class":140},[57,95655,95656,95659],{"class":59,"line":162},[57,95657,95658],{"class":140},"a.shape ",[57,95660,95661],{"class":63},"#输出数组形状\n",[14,95663,95664],{},"②生成二维数组",[49,95666,95668],{"className":122,"code":95667,"language":124,"meta":46,"style":46},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[28,95669,95670,95674,95696],{"__ignoreMap":46},[57,95671,95672],{"class":59,"line":60},[57,95673,93498],{"class":63},[57,95675,95676,95678,95680,95682,95684,95686,95688,95690,95692,95694],{"class":59,"line":67},[57,95677,93503],{"class":140},[57,95679,156],{"class":136},[57,95681,95624],{"class":140},[57,95683,31693],{"class":5489},[57,95685,156],{"class":136},[57,95687,168],{"class":140},[57,95689,710],{"class":81},[57,95691,273],{"class":140},[57,95693,736],{"class":81},[57,95695,259],{"class":140},[57,95697,95698],{"class":59,"line":144},[57,95699,95700],{"class":63},"#生成四行五列的数组\n",[14,95702,95703],{},"③生成三维数组",[49,95705,95707],{"className":122,"code":95706,"language":124,"meta":46,"style":46},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[28,95708,95709,95714,95741],{"__ignoreMap":46},[57,95710,95711],{"class":59,"line":60},[57,95712,95713],{"class":63},"#三维数组\n",[57,95715,95716,95719,95721,95723,95725,95727,95729,95731,95733,95735,95737,95739],{"class":59,"line":67},[57,95717,95718],{"class":140},"aaa",[57,95720,156],{"class":136},[57,95722,95624],{"class":140},[57,95724,31693],{"class":5489},[57,95726,156],{"class":136},[57,95728,168],{"class":140},[57,95730,498],{"class":81},[57,95732,273],{"class":140},[57,95734,270],{"class":81},[57,95736,273],{"class":140},[57,95738,710],{"class":81},[57,95740,259],{"class":140},[57,95742,95743],{"class":59,"line":144},[57,95744,95745],{"class":140},"aaa.shape\n",[394,95747,95749],{"id":95748},"_222-randint语句","2.2.2 randint语句",[49,95751,95753],{"className":122,"code":95752,"language":124,"meta":46,"style":46},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[28,95754,95755,95760],{"__ignoreMap":46},[57,95756,95757],{"class":59,"line":60},[57,95758,95759],{"class":63},"#生成随机的整数 random.randint(low,high,size)\n",[57,95761,95762,95764,95766,95768],{"class":59,"line":67},[57,95763,93311],{"class":140},[57,95765,736],{"class":81},[57,95767,229],{"class":140},[57,95769,95770],{"class":63},"#0~5中的随机一个数\n",[14,95772,95609],{},[49,95774,95776],{"className":122,"code":95775,"language":124,"meta":46,"style":46},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[28,95777,95778,95783,95805],{"__ignoreMap":46},[57,95779,95780],{"class":59,"line":60},[57,95781,95782],{"class":63},"#一维\n",[57,95784,95785,95787,95789,95791,95793,95795,95797,95799,95801,95803],{"class":59,"line":67},[57,95786,93311],{"class":140},[57,95788,635],{"class":81},[57,95790,273],{"class":140},[57,95792,888],{"class":81},[57,95794,273],{"class":140},[57,95796,31693],{"class":5489},[57,95798,156],{"class":136},[57,95800,168],{"class":140},[57,95802,862],{"class":81},[57,95804,259],{"class":140},[57,95806,95807],{"class":59,"line":144},[57,95808,95809],{"class":63},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,95811,95664],{},[14,95813,95814],{},[44,95815],{"alt":46,"src":95816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,95818,95703],{},[14,95820,95821],{},[44,95822],{"alt":46,"src":95823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[394,95825,95827],{"id":95826},"_222-rand语句","2.2.2 rand语句",[14,95829,95830],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[49,95832,95834],{"className":122,"code":95833,"language":124,"meta":46,"style":46},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[28,95835,95836,95849,95854],{"__ignoreMap":46},[57,95837,95838,95841,95843,95845,95847],{"class":59,"line":60},[57,95839,95840],{"class":140},"np.random.rand(",[57,95842,728],{"class":81},[57,95844,273],{"class":140},[57,95846,862],{"class":81},[57,95848,238],{"class":140},[57,95850,95851],{"class":59,"line":67},[57,95852,95853],{"class":63},"#第一个参数100：行数，表示有100个样本\n",[57,95855,95856],{"class":59,"line":144},[57,95857,95858],{"class":63},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[365,95860,95862],{"id":95861},"_23-arange创建数组","2.3 arange()创建数组",[394,95864,95866],{"id":95865},"_231-函数语句","2.3.1 函数语句",[49,95868,95870],{"className":122,"code":95869,"language":124,"meta":46,"style":46},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[28,95871,95872,95886,95891,95896,95901,95906,95911,95916],{"__ignoreMap":46},[57,95873,95874,95877,95879,95881,95884],{"class":59,"line":60},[57,95875,95876],{"class":140},"numpy.arange([start,] stop[, step], ",[57,95878,93697],{"class":5489},[57,95880,156],{"class":136},[57,95882,95883],{"class":81},"None",[57,95885,238],{"class":140},[57,95887,95888],{"class":59,"line":67},[57,95889,95890],{"class":63},"#参数\n",[57,95892,95893],{"class":59,"line":144},[57,95894,95895],{"class":74},"\"\"\"\n",[57,95897,95898],{"class":59,"line":150},[57,95899,95900],{"class":74},"start:起始值，可选，默认从 0 开始。\n",[57,95902,95903],{"class":59,"line":162},[57,95904,95905],{"class":74},"stop:结束值（不包含该值）。\n",[57,95907,95908],{"class":59,"line":180},[57,95909,95910],{"class":74},"step:步长，可选，默认是 1。可以为浮点数。\n",[57,95912,95913],{"class":59,"line":186},[57,95914,95915],{"class":74},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[57,95917,95918],{"class":59,"line":197},[57,95919,95895],{"class":74},[394,95921,95923],{"id":95922},"_232-实例","2.3.2 实例",[49,95925,95927],{"className":122,"code":95926,"language":124,"meta":46,"style":46},"#创建一维数组\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",[28,95928,95929,95933,95957,95962,95967,95971,95994,95998,96002,96007,96012],{"__ignoreMap":46},[57,95930,95931],{"class":59,"line":60},[57,95932,93302],{"class":63},[57,95934,95935,95937,95939,95941,95943,95945,95947,95949,95951,95953,95955],{"class":59,"line":67},[57,95936,93199],{"class":140},[57,95938,635],{"class":81},[57,95940,273],{"class":140},[57,95942,1141],{"class":81},[57,95944,273],{"class":140},[57,95946,635],{"class":81},[57,95948,273],{"class":140},[57,95950,93697],{"class":5489},[57,95952,156],{"class":136},[57,95954,429],{"class":81},[57,95956,238],{"class":140},[57,95958,95959],{"class":59,"line":144},[57,95960,95961],{"class":63},"#输出结果：\n",[57,95963,95964],{"class":59,"line":150},[57,95965,95966],{"class":63},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[57,95968,95969],{"class":59,"line":162},[57,95970,94144],{"class":63},[57,95972,95973,95976,95978,95980,95982,95985,95987,95989,95991],{"class":59,"line":180},[57,95974,95975],{"class":140},"np.array([np.arange(",[57,95977,635],{"class":81},[57,95979,273],{"class":140},[57,95981,710],{"class":81},[57,95983,95984],{"class":140},"),np.arange(",[57,95986,710],{"class":81},[57,95988,273],{"class":140},[57,95990,786],{"class":81},[57,95992,95993],{"class":140},")])\n",[57,95995,95996],{"class":59,"line":186},[57,95997,93761],{"class":63},[57,95999,96000],{"class":59,"line":197},[57,96001,95895],{"class":74},[57,96003,96004],{"class":59,"line":241},[57,96005,96006],{"class":74},"array([[1, 2, 3],\n",[57,96008,96009],{"class":59,"line":249},[57,96010,96011],{"class":74},"       [4, 5, 6]])\n",[57,96013,96014],{"class":59,"line":262},[57,96015,95895],{"class":74},[365,96017,96019],{"id":96018},"_24-生态分布","2.4 生态分布",[394,96021,96023],{"id":96022},"_241-标准正态分布","2.4.1 标准正态分布",[14,96025,96026],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,96028,96029],{},[44,96030],{"alt":46,"src":96031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[394,96033,96035],{"id":96034},"_242-常规正态分布","2.4.2 常规正态分布",[49,96037,96039],{"className":122,"code":96038,"language":124,"meta":46,"style":46},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[28,96040,96041,96046,96051,96056],{"__ignoreMap":46},[57,96042,96043],{"class":59,"line":60},[57,96044,96045],{"class":140},"random.normal(loc,scale,size)也可以生成正态分布\n",[57,96047,96048],{"class":59,"line":67},[57,96049,96050],{"class":63},"#loc:期望\n",[57,96052,96053],{"class":59,"line":144},[57,96054,96055],{"class":63},"#scale:方差\n",[57,96057,96058],{"class":59,"line":150},[57,96059,96060],{"class":63},"#size:用于确定是几维的数列\n",[14,96062,96063],{},[44,96064],{"alt":46,"src":96065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[365,96067,96069],{"id":96068},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,96071,96072],{},"ndim:秩，维度个数",[14,96074,96075],{},"size:数组元素的个数",[14,96077,96078],{},"shape:数组的形状",[14,96080,96081],{},"dtype:数组元素的类型",[14,96083,96084],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,96086,96087],{},"他们都是属性，通过数组.属性的形式来确定",[14,96089,96090],{},"如果需要输出多个可以通过以下方式：",[49,96092,96094],{"className":122,"code":96093,"language":124,"meta":46,"style":46},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[28,96095,96096],{"__ignoreMap":46},[57,96097,96098,96100],{"class":59,"line":60},[57,96099,165],{"class":81},[57,96101,96102],{"class":140},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[365,96104,96106],{"id":96105},"_26-其他方式创建数组","2.6 其他方式创建数组",[394,96108,96110],{"id":96109},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,96112,96113],{},"①创建一维数组",[49,96115,96117],{"className":122,"code":96116,"language":124,"meta":46,"style":46},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[28,96118,96119,96128,96132,96137,96142],{"__ignoreMap":46},[57,96120,96121,96124,96126],{"class":59,"line":60},[57,96122,96123],{"class":140},"np.zeros(",[57,96125,862],{"class":81},[57,96127,238],{"class":140},[57,96129,96130],{"class":59,"line":67},[57,96131,95895],{"class":74},[57,96133,96134],{"class":59,"line":144},[57,96135,96136],{"class":74},"输出结果：\n",[57,96138,96139],{"class":59,"line":150},[57,96140,96141],{"class":74},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[57,96143,96144],{"class":59,"line":162},[57,96145,95895],{"class":74},[14,96147,96148],{},"上方代码等价于：",[49,96150,96152],{"className":122,"code":96151,"language":124,"meta":46,"style":46},"np.zeros(shape=(10))#创建10个元素的0数组\n",[28,96153,96154],{"__ignoreMap":46},[57,96155,96156,96158,96161,96163,96165,96167,96169],{"class":59,"line":60},[57,96157,96123],{"class":140},[57,96159,96160],{"class":5489},"shape",[57,96162,156],{"class":136},[57,96164,168],{"class":140},[57,96166,862],{"class":81},[57,96168,82968],{"class":140},[57,96170,96171],{"class":63},"#创建10个元素的0数组\n",[14,96173,96174],{},"也可以指定类型",[49,96176,96178],{"className":122,"code":96177,"language":124,"meta":46,"style":46},"#指定类型\nnp.zeros(5,dtype=int)\n",[28,96179,96180,96185],{"__ignoreMap":46},[57,96181,96182],{"class":59,"line":60},[57,96183,96184],{"class":63},"#指定类型\n",[57,96186,96187,96189,96191,96193,96195,96197,96199],{"class":59,"line":67},[57,96188,96123],{"class":140},[57,96190,736],{"class":81},[57,96192,273],{"class":140},[57,96194,93697],{"class":5489},[57,96196,156],{"class":136},[57,96198,429],{"class":81},[57,96200,238],{"class":140},[14,96202,96203],{},"②创建二维数组",[49,96205,96207],{"className":122,"code":96206,"language":124,"meta":46,"style":46},"np.zeros((3,4),dtype=int)\n",[28,96208,96209],{"__ignoreMap":46},[57,96210,96211,96214,96216,96218,96220,96222,96224,96226,96228],{"class":59,"line":60},[57,96212,96213],{"class":140},"np.zeros((",[57,96215,270],{"class":81},[57,96217,273],{"class":140},[57,96219,710],{"class":81},[57,96221,42453],{"class":140},[57,96223,93697],{"class":5489},[57,96225,156],{"class":136},[57,96227,429],{"class":81},[57,96229,238],{"class":140},[14,96231,96232],{},"③创建三维数组",[49,96234,96236],{"className":122,"code":96235,"language":124,"meta":46,"style":46},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[28,96237,96238,96243],{"__ignoreMap":46},[57,96239,96240],{"class":59,"line":60},[57,96241,96242],{"class":63},"#创建三维数组\n",[57,96244,96245,96247,96249,96251,96253,96255,96257,96259,96261,96263,96265],{"class":59,"line":67},[57,96246,96213],{"class":140},[57,96248,270],{"class":81},[57,96250,273],{"class":140},[57,96252,710],{"class":81},[57,96254,273],{"class":140},[57,96256,736],{"class":81},[57,96258,42453],{"class":140},[57,96260,93697],{"class":5489},[57,96262,156],{"class":136},[57,96264,429],{"class":81},[57,96266,238],{"class":140},[14,96268,96269],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[49,96271,96273],{"className":122,"code":96272,"language":124,"meta":46,"style":46},"#使用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",[28,96274,96275,96280,96295,96300,96305,96327],{"__ignoreMap":46},[57,96276,96277],{"class":59,"line":60},[57,96278,96279],{"class":63},"#使用zeros_like将创建的一维数组变成全0的数组\n",[57,96281,96282,96284,96286,96288,96290,96292],{"class":59,"line":67},[57,96283,18],{"class":140},[57,96285,156],{"class":136},[57,96287,93199],{"class":140},[57,96289,710],{"class":81},[57,96291,845],{"class":140},[57,96293,96294],{"class":63},"#这个得到的结果：一维数组0，1，2，3\n",[57,96296,96297],{"class":59,"line":144},[57,96298,96299],{"class":140},"np.zeros_like(a)\n",[57,96301,96302],{"class":59,"line":150},[57,96303,96304],{"class":63},"#使用zeros_like将创建的二维数组变成全0的数组\n",[57,96306,96307,96309,96311,96313,96315,96317,96319,96321,96323,96325],{"class":59,"line":162},[57,96308,93503],{"class":140},[57,96310,156],{"class":136},[57,96312,95624],{"class":140},[57,96314,31693],{"class":5489},[57,96316,156],{"class":136},[57,96318,168],{"class":140},[57,96320,710],{"class":81},[57,96322,273],{"class":140},[57,96324,736],{"class":81},[57,96326,259],{"class":140},[57,96328,96329],{"class":59,"line":180},[57,96330,96331],{"class":140},"np.zeros_like(aa)\n",[394,96333,96335],{"id":96334},"_262-ones创建数组","2.6.2 ones()创建数组",[14,96337,96338],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[394,96340,96342],{"id":96341},"_263-empty创建数组","2.6.3 empty()创建数组",[14,96344,96345],{},"①empty()用法",[49,96347,96349],{"className":122,"code":96348,"language":124,"meta":46,"style":46},"numpy.empty(shape,dtype=float,order='c')\n",[28,96350,96351],{"__ignoreMap":46},[57,96352,96353,96356,96358,96360,96362,96364,96366,96368,96370],{"class":59,"line":60},[57,96354,96355],{"class":140},"numpy.empty(shape,",[57,96357,93697],{"class":5489},[57,96359,156],{"class":136},[57,96361,464],{"class":81},[57,96363,273],{"class":140},[57,96365,95494],{"class":5489},[57,96367,156],{"class":136},[57,96369,76225],{"class":74},[57,96371,238],{"class":140},[14,96373,96374],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,96376,96377],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,96379,96380],{},[44,96381],{"alt":46,"src":96382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,96384,96385],{},"②empty()用法",[49,96387,96389],{"className":122,"code":96388,"language":124,"meta":46,"style":46},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[28,96390,96391,96412,96424,96445,96450],{"__ignoreMap":46},[57,96392,96393,96395,96397,96400,96402,96404,96406,96408,96410],{"class":59,"line":60},[57,96394,1261],{"class":140},[57,96396,156],{"class":136},[57,96398,96399],{"class":140},"np.empty(",[57,96401,862],{"class":81},[57,96403,273],{"class":140},[57,96405,93697],{"class":5489},[57,96407,156],{"class":136},[57,96409,429],{"class":81},[57,96411,238],{"class":140},[57,96413,96414,96416,96418,96420,96422],{"class":59,"line":67},[57,96415,1236],{"class":140},[57,96417,156],{"class":136},[57,96419,93199],{"class":140},[57,96421,736],{"class":81},[57,96423,238],{"class":140},[57,96425,96426,96429,96431,96434,96436,96438,96441,96443],{"class":59,"line":144},[57,96427,96428],{"class":140},"np.add(",[57,96430,498],{"class":81},[57,96432,96433],{"class":140},",x,",[57,96435,93251],{"class":5489},[57,96437,156],{"class":136},[57,96439,96440],{"class":140},"y[:",[57,96442,736],{"class":81},[57,96444,4930],{"class":140},[57,96446,96447],{"class":59,"line":150},[57,96448,96449],{"class":63},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[57,96451,96452],{"class":59,"line":162},[57,96453,96454],{"class":140},"y\n",[14,96456,11787],{},[14,96458,96459],{},[44,96460],{"alt":46,"src":96461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[49,96463,96465],{"className":122,"code":96464,"language":124,"meta":46,"style":46},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[28,96466,96467,96483,96503,96518],{"__ignoreMap":46},[57,96468,96469,96471,96473,96475,96477,96479,96481],{"class":59,"line":60},[57,96470,1236],{"class":140},[57,96472,156],{"class":136},[57,96474,93199],{"class":140},[57,96476,635],{"class":81},[57,96478,273],{"class":140},[57,96480,761],{"class":81},[57,96482,238],{"class":140},[57,96484,96485,96487,96489,96491,96493,96495,96497,96499,96501],{"class":59,"line":67},[57,96486,1261],{"class":140},[57,96488,156],{"class":136},[57,96490,96399],{"class":140},[57,96492,736],{"class":81},[57,96494,273],{"class":140},[57,96496,93697],{"class":5489},[57,96498,156],{"class":136},[57,96500,429],{"class":81},[57,96502,238],{"class":140},[57,96504,96505,96508,96510,96512,96514,96516],{"class":59,"line":144},[57,96506,96507],{"class":140},"np.add(x,",[57,96509,498],{"class":81},[57,96511,273],{"class":140},[57,96513,93251],{"class":5489},[57,96515,156],{"class":136},[57,96517,93646],{"class":140},[57,96519,96520],{"class":59,"line":150},[57,96521,96522],{"class":63},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,96524,96525],{},"③empty_like()",[14,96527,96528],{},[33,96529,96530,96531,96536],{},"创建一个",[33,96532,96533],{},[33,96534,96535],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,96538,96539,96542],{},[28,96540,96541],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,96544,96545],{},[44,96546],{"alt":46,"src":96547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[394,96549,96551],{"id":96550},"_264-用法","2.6.4 ？？用法",[14,96553,96554],{},"当想查看一个函数的参数时，可以通过？？来实现",[49,96556,96558],{"className":122,"code":96557,"language":124,"meta":46,"style":46},"np.full??\n",[28,96559,96560],{"__ignoreMap":46},[57,96561,96562,96565],{"class":59,"line":60},[57,96563,96564],{"class":140},"np.full",[57,96566,96567],{"class":77600},"??\n",[394,96569,96571],{"id":96570},"_265-full创建数组","2.6.5 full()创建数组",[49,96573,96575],{"className":122,"code":96574,"language":124,"meta":46,"style":46},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[28,96576,96577,96582],{"__ignoreMap":46},[57,96578,96579],{"class":59,"line":60},[57,96580,96581],{"class":140},"full(shape,fill_value)\n",[57,96583,96584],{"class":59,"line":67},[57,96585,96586],{"class":140},"创建全为某个指定值的数组\n",[14,96588,94727],{},[49,96590,96592],{"className":122,"code":96591,"language":124,"meta":46,"style":46},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[28,96593,96594,96599],{"__ignoreMap":46},[57,96595,96596],{"class":59,"line":60},[57,96597,96598],{"class":63},"#创建一个一维数组,以20进行填充\n",[57,96600,96601,96604,96606,96608,96610],{"class":59,"line":67},[57,96602,96603],{"class":140},"np.full(",[57,96605,862],{"class":81},[57,96607,273],{"class":140},[57,96609,1116],{"class":81},[57,96611,238],{"class":140},[14,96613,93488],{},[49,96615,96617],{"className":122,"code":96616,"language":124,"meta":46,"style":46},"#创建二维数组\nnp.full((3,5),11)\n",[28,96618,96619,96623],{"__ignoreMap":46},[57,96620,96621],{"class":59,"line":60},[57,96622,94144],{"class":63},[57,96624,96625,96628,96630,96632,96634,96636,96638],{"class":59,"line":67},[57,96626,96627],{"class":140},"np.full((",[57,96629,270],{"class":81},[57,96631,273],{"class":140},[57,96633,736],{"class":81},[57,96635,42453],{"class":140},[57,96637,888],{"class":81},[57,96639,238],{"class":140},[14,96641,96642],{},"③full_like用法",[14,96644,96645],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,96647,96648],{},"这里是指定填充而已",[49,96650,96652],{"className":122,"code":96651,"language":124,"meta":46,"style":46},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[28,96653,96654,96659,96683,96688],{"__ignoreMap":46},[57,96655,96656],{"class":59,"line":60},[57,96657,96658],{"class":63},"#创建一个指定形状数组\n",[57,96660,96661,96663,96665,96667,96669,96671,96673,96675,96677,96679,96681],{"class":59,"line":67},[57,96662,18],{"class":140},[57,96664,156],{"class":136},[57,96666,93199],{"class":140},[57,96668,635],{"class":81},[57,96670,273],{"class":140},[57,96672,742],{"class":81},[57,96674,93204],{"class":140},[57,96676,710],{"class":81},[57,96678,273],{"class":140},[57,96680,836],{"class":81},[57,96682,238],{"class":140},[57,96684,96685],{"class":59,"line":144},[57,96686,96687],{"class":63},"#进行指定填充\n",[57,96689,96690,96693,96695],{"class":59,"line":150},[57,96691,96692],{"class":140},"np.full_like(a,",[57,96694,862],{"class":81},[57,96696,238],{"class":140},[14,96698,11787],{},[14,96700,96701],{},[44,96702],{"alt":46,"src":96703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[394,96705,96707],{"id":96706},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22270,96709,96711],{"id":96710},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[49,96713,96715],{"className":122,"code":96714,"language":124,"meta":46,"style":46},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[28,96716,96717,96734],{"__ignoreMap":46},[57,96718,96719,96722,96724,96726,96728,96730,96732],{"class":59,"line":60},[57,96720,96721],{"class":140},"np.eye(",[57,96723,710],{"class":81},[57,96725,273],{"class":140},[57,96727,93697],{"class":5489},[57,96729,156],{"class":136},[57,96731,429],{"class":81},[57,96733,238],{"class":140},[57,96735,96736],{"class":59,"line":67},[57,96737,96738],{"class":63},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22270,96740,96742],{"id":96741},"_2662-法2identity","2.6.6.2 法2：identity()",[49,96744,96746],{"className":122,"code":96745,"language":124,"meta":46,"style":46},"#identity()\nnp.identity(5,dtype=int)\n",[28,96747,96748,96753],{"__ignoreMap":46},[57,96749,96750],{"class":59,"line":60},[57,96751,96752],{"class":63},"#identity()\n",[57,96754,96755,96758,96760,96762,96764,96766,96768],{"class":59,"line":67},[57,96756,96757],{"class":140},"np.identity(",[57,96759,736],{"class":81},[57,96761,273],{"class":140},[57,96763,93697],{"class":5489},[57,96765,156],{"class":136},[57,96767,429],{"class":81},[57,96769,238],{"class":140},[14,96771,96772],{},"两个函数是有区别的",[14,96774,96775],{},[44,96776],{"alt":46,"src":96777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,96779,96780],{},[44,96781],{"alt":46,"src":96782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[49,96784,96786],{"className":122,"code":96785,"language":124,"meta":46,"style":46},"# 创建一个 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",[28,96787,96788,96793,96805,96810,96815,96820,96825,96829,96834,96854,96858,96863,96868],{"__ignoreMap":46},[57,96789,96790],{"class":59,"line":60},[57,96791,96792],{"class":63},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[57,96794,96795,96797,96799,96801,96803],{"class":59,"line":67},[57,96796,96721],{"class":140},[57,96798,270],{"class":81},[57,96800,12708],{"class":140},[57,96802,710],{"class":81},[57,96804,238],{"class":140},[57,96806,96807],{"class":59,"line":144},[57,96808,96809],{"class":63},"# 输出:\n",[57,96811,96812],{"class":59,"line":150},[57,96813,96814],{"class":63},"# [[1. 0. 0. 0.]\n",[57,96816,96817],{"class":59,"line":162},[57,96818,96819],{"class":63},"#  [0. 1. 0. 0.]\n",[57,96821,96822],{"class":59,"line":180},[57,96823,96824],{"class":63},"#  [0. 0. 1. 0.]]\n",[57,96826,96827],{"class":59,"line":186},[57,96828,2673],{"emptyLinePlaceholder":350},[57,96830,96831],{"class":59,"line":197},[57,96832,96833],{"class":63},"# 对角线向上偏移1\n",[57,96835,96836,96838,96840,96842,96844,96846,96848,96850,96852],{"class":59,"line":241},[57,96837,96721],{"class":140},[57,96839,270],{"class":81},[57,96841,12708],{"class":140},[57,96843,710],{"class":81},[57,96845,12708],{"class":140},[57,96847,909],{"class":5489},[57,96849,156],{"class":136},[57,96851,635],{"class":81},[57,96853,238],{"class":140},[57,96855,96856],{"class":59,"line":249},[57,96857,96809],{"class":63},[57,96859,96860],{"class":59,"line":262},[57,96861,96862],{"class":63},"# [[0. 1. 0. 0.]\n",[57,96864,96865],{"class":59,"line":281},[57,96866,96867],{"class":63},"#  [0. 0. 1. 0.]\n",[57,96869,96870],{"class":59,"line":287},[57,96871,96872],{"class":63},"#  [0. 0. 0. 1.]]\n",[394,96874,96876],{"id":96875},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[49,96878,96880],{"className":122,"code":96879,"language":124,"meta":46,"style":46},"#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",[28,96881,96882,96887,96891,96896,96901,96906,96911,96916,96921,96926,96931],{"__ignoreMap":46},[57,96883,96884],{"class":59,"line":60},[57,96885,96886],{"class":63},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[57,96888,96889],{"class":59,"line":67},[57,96890,95895],{"class":74},[57,96892,96893],{"class":59,"line":144},[57,96894,96895],{"class":74},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[57,96897,96898],{"class":59,"line":150},[57,96899,96900],{"class":74},"参数介绍：\n",[57,96902,96903],{"class":59,"line":162},[57,96904,96905],{"class":74},"start：序列的起始值\n",[57,96907,96908],{"class":59,"line":180},[57,96909,96910],{"class":74},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[57,96912,96913],{"class":59,"line":186},[57,96914,96915],{"class":74},"num：要生长的等步长的样本数量，默认为50\n",[57,96917,96918],{"class":59,"line":197},[57,96919,96920],{"class":74},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[57,96922,96923],{"class":59,"line":241},[57,96924,96925],{"class":74},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[57,96927,96928],{"class":59,"line":249},[57,96929,96930],{"class":74},"dtype：ndarry的数据类型\n",[57,96932,96933],{"class":59,"line":262},[57,96934,95895],{"class":74},[14,96936,96937],{},[44,96938],{"alt":46,"src":96939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,96941,96942],{},"这里num=是可以省略的",[14,96944,96945],{},"也就是下方两行代码结果是一模一样的",[49,96947,96949],{"className":122,"code":96948,"language":124,"meta":46,"style":46},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[28,96950,96951,96968],{"__ignoreMap":46},[57,96952,96953,96956,96958,96960,96962,96964,96966],{"class":59,"line":60},[57,96954,96955],{"class":140},"np.linspace(",[57,96957,635],{"class":81},[57,96959,273],{"class":140},[57,96961,736],{"class":81},[57,96963,273],{"class":140},[57,96965,736],{"class":81},[57,96967,238],{"class":140},[57,96969,96970,96972,96974,96976,96978,96980,96982,96984,96986],{"class":59,"line":67},[57,96971,96955],{"class":140},[57,96973,635],{"class":81},[57,96975,273],{"class":140},[57,96977,736],{"class":81},[57,96979,273],{"class":140},[57,96981,1941],{"class":5489},[57,96983,156],{"class":136},[57,96985,736],{"class":81},[57,96987,238],{"class":140},[394,96989,96991],{"id":96990},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[49,96993,96995],{"className":122,"code":96994,"language":124,"meta":46,"style":46},"#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",[28,96996,96997,97002,97006,97011,97016,97021,97026,97030,97035,97040,97044],{"__ignoreMap":46},[57,96998,96999],{"class":59,"line":60},[57,97000,97001],{"class":63},"#logspace函数用于创建一个等比数列，格式如下：\n",[57,97003,97004],{"class":59,"line":67},[57,97005,95895],{"class":74},[57,97007,97008],{"class":59,"line":144},[57,97009,97010],{"class":74},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[57,97012,97013],{"class":59,"line":150},[57,97014,97015],{"class":74},"参数为：\n",[57,97017,97018],{"class":59,"line":162},[57,97019,97020],{"class":74},"start:序列的起始位置为：base**start\n",[57,97022,97023],{"class":59,"line":180},[57,97024,97025],{"class":74},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[57,97027,97028],{"class":59,"line":186},[57,97029,96915],{"class":74},[57,97031,97032],{"class":59,"line":197},[57,97033,97034],{"class":74},"endpoint：是否包含 stop 这个值，默认是 True\n",[57,97036,97037],{"class":59,"line":241},[57,97038,97039],{"class":74},"base：对数的底数，默认是 10（常见对数）\n",[57,97041,97042],{"class":59,"line":249},[57,97043,96930],{"class":74},[57,97045,97046],{"class":59,"line":262},[57,97047,95895],{"class":74},[14,97049,97050],{},[44,97051],{"alt":46,"src":97052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,97054,97055],{},"logspace()函数中的num参数也是可以不写num=的",[14,97057,97058],{},"endpoint是不可以省略的",[342,97060,97061],{},"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":46,"searchDepth":67,"depth":67,"links":97063},[97064,97068,97073,97077,97081,97082],{"id":95453,"depth":67,"text":95454,"children":97065},[97066,97067],{"id":95457,"depth":144,"text":95458},{"id":95530,"depth":144,"text":95531},{"id":95562,"depth":67,"text":95563,"children":97069},[97070,97071,97072],{"id":95566,"depth":144,"text":95567},{"id":95748,"depth":144,"text":95749},{"id":95826,"depth":144,"text":95827},{"id":95861,"depth":67,"text":95862,"children":97074},[97075,97076],{"id":95865,"depth":144,"text":95866},{"id":95922,"depth":144,"text":95923},{"id":96018,"depth":67,"text":96019,"children":97078},[97079,97080],{"id":96022,"depth":144,"text":96023},{"id":96034,"depth":144,"text":96035},{"id":96068,"depth":67,"text":96069},{"id":96105,"depth":67,"text":96106,"children":97083},[97084,97085,97086,97087,97088,97089,97090,97091],{"id":96109,"depth":144,"text":96110},{"id":96334,"depth":144,"text":96335},{"id":96341,"depth":144,"text":96342},{"id":96550,"depth":144,"text":96551},{"id":96570,"depth":144,"text":96571},{"id":96706,"depth":144,"text":96707},{"id":96875,"depth":144,"text":96876},{"id":96990,"depth":144,"text":96991},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95445,"description":347},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97098,"title":97099,"body":97100,"description":347,"extension":348,"meta":97193,"navigation":350,"path":97194,"seo":97195,"stem":97196,"__hash__":97197},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97101,"toc":97191},[97102,97105,97108,97111,97114,97117,97120,97123,97126,97129,97132,97135,97137,97140,97143,97148,97151,97154,97188],[10,97103,97099],{"id":97104},"_20魔法命令mprun",[14,97106,97107],{},"逐行分析数据内存的使用情况",[14,97109,97110],{},"语法格式：",[14,97112,97113],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,97115,97116],{},"分析结果列如下：",[14,97118,97119],{},"Line行号",[14,97121,97122],{},"Mem usage内存使用大小",[14,97124,97125],{},"increment内存增量",[14,97127,97128],{},"Line content代码内容",[14,97130,97131],{},"补充说明：",[14,97133,97134],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,97136,95400],{},[14,97138,97139],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,97141,97142],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,97144,97145],{},[44,97146],{"alt":46,"src":97147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,97149,97150],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,97152,97153],{},"这时候需要重新加载模块",[49,97155,97157],{"className":122,"code":97156,"language":124,"meta":46,"style":46},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[28,97158,97159,97164,97171,97176],{"__ignoreMap":46},[57,97160,97161],{"class":59,"line":60},[57,97162,97163],{"class":63},"#重新加载模块\n",[57,97165,97166,97168],{"class":59,"line":67},[57,97167,137],{"class":136},[57,97169,97170],{"class":140}," importlib\n",[57,97172,97173],{"class":59,"line":144},[57,97174,97175],{"class":140},"importlib.reload(mprun_test)\n",[57,97177,97178,97180,97183,97185],{"class":59,"line":150},[57,97179,745],{"class":136},[57,97181,97182],{"class":140},"mprun ",[57,97184,948],{"class":136},[57,97186,97187],{"class":140},"f mprun_test.fun_test mprun_test.fun_test()\n",[342,97189,97190],{},"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":46,"searchDepth":67,"depth":67,"links":97192},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97099,"description":347},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97199,"title":97200,"body":97201,"description":347,"extension":348,"meta":97218,"navigation":350,"path":97219,"seo":97220,"stem":97221,"__hash__":97222},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97202,"toc":97216},[97203,97206,97211],[10,97204,97200],{"id":97205},"_3一维数组的索引和切片",[14,97207,97208],{},[44,97209],{"alt":46,"src":97210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,97212,97213],{},[44,97214],{"alt":46,"src":97215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":46,"searchDepth":67,"depth":67,"links":97217},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97200,"description":347},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97224,"title":97225,"body":97226,"description":347,"extension":348,"meta":97709,"navigation":350,"path":97710,"seo":97711,"stem":97712,"__hash__":97713},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97227,"toc":97707},[97228,97231,97234,97239,97272,97275,97313,97316,97350,97353,97458,97461,97498,97501,97602,97605,97656,97659,97701,97704],[10,97229,97225],{"id":97230},"_4二维数组的索引与切片",[14,97232,97233],{},"①获取指定单个元素",[14,97235,97236],{},[44,97237],{"alt":46,"src":97238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[49,97240,97242],{"className":122,"code":97241,"language":124,"meta":46,"style":46},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[28,97243,97244,97249,97254,97259],{"__ignoreMap":46},[57,97245,97246],{"class":59,"line":60},[57,97247,97248],{"class":63},"#获取元素9\n",[57,97250,97251],{"class":59,"line":67},[57,97252,97253],{"class":63},"#先获取所在行，再获取所在列\n",[57,97255,97256],{"class":59,"line":144},[57,97257,97258],{"class":63},"#数组[行索引号，列索引号]\n",[57,97260,97261,97264,97266,97268,97270],{"class":59,"line":150},[57,97262,97263],{"class":140},"a[",[57,97265,635],{"class":81},[57,97267,273],{"class":140},[57,97269,498],{"class":81},[57,97271,33443],{"class":140},[14,97273,97274],{},"②获取整行元素",[49,97276,97278],{"className":122,"code":97277,"language":124,"meta":46,"style":46},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[28,97279,97280,97285,97290,97298,97303],{"__ignoreMap":46},[57,97281,97282],{"class":59,"line":60},[57,97283,97284],{"class":63},"#获取整行 数组[行索引号]\n",[57,97286,97287],{"class":59,"line":67},[57,97288,97289],{"class":63},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[57,97291,97292,97294,97296],{"class":59,"line":144},[57,97293,97263],{"class":140},[57,97295,498],{"class":81},[57,97297,33443],{"class":140},[57,97299,97300],{"class":59,"line":150},[57,97301,97302],{"class":63},"#也可以负索引获取一行\n",[57,97304,97305,97307,97309,97311],{"class":59,"line":162},[57,97306,97263],{"class":140},[57,97308,948],{"class":136},[57,97310,635],{"class":81},[57,97312,33443],{"class":140},[14,97314,97315],{},"③获取整列元素",[49,97317,97319],{"className":122,"code":97318,"language":124,"meta":46,"style":46},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[28,97320,97321,97326,97335,97340],{"__ignoreMap":46},[57,97322,97323],{"class":59,"line":60},[57,97324,97325],{"class":63},"#获取整列 数组名[:,列索引]\n",[57,97327,97328,97331,97333],{"class":59,"line":67},[57,97329,97330],{"class":140},"a[:,",[57,97332,498],{"class":81},[57,97334,33443],{"class":140},[57,97336,97337],{"class":59,"line":144},[57,97338,97339],{"class":63},"#也可以负索引获取一列\n",[57,97341,97342,97344,97346,97348],{"class":59,"line":150},[57,97343,97330],{"class":140},[57,97345,948],{"class":136},[57,97347,635],{"class":81},[57,97349,33443],{"class":140},[14,97351,97352],{},"④部分行部分列的元素",[49,97354,97356],{"className":122,"code":97355,"language":124,"meta":46,"style":46},"#部分行部分列 数组名[行切片，列切片]\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",[28,97357,97358,97363,97373,97377,97381,97386,97391,97395,97407,97411,97415,97420,97425,97430,97435,97439,97444],{"__ignoreMap":46},[57,97359,97360],{"class":59,"line":60},[57,97361,97362],{"class":63},"#部分行部分列 数组名[行切片，列切片]\n",[57,97364,97365,97368,97370],{"class":59,"line":67},[57,97366,97367],{"class":140},"a[:",[57,97369,498],{"class":81},[57,97371,97372],{"class":140},",:]\n",[57,97374,97375],{"class":59,"line":144},[57,97376,93761],{"class":63},[57,97378,97379],{"class":59,"line":150},[57,97380,94125],{"class":74},[57,97382,97383],{"class":59,"line":162},[57,97384,97385],{"class":74},"array([[ 1,  2,  3,  4,  5,  6],\n",[57,97387,97388],{"class":59,"line":180},[57,97389,97390],{"class":74},"       [ 7,  8,  9, 10, 11, 12]])\n",[57,97392,97393],{"class":59,"line":186},[57,97394,94125],{"class":74},[57,97396,97397,97399,97401,97403,97405],{"class":59,"line":197},[57,97398,97330],{"class":140},[57,97400,635],{"class":81},[57,97402,1275],{"class":140},[57,97404,710],{"class":81},[57,97406,33443],{"class":140},[57,97408,97409],{"class":59,"line":241},[57,97410,93761],{"class":63},[57,97412,97413],{"class":59,"line":249},[57,97414,94125],{"class":74},[57,97416,97417],{"class":59,"line":262},[57,97418,97419],{"class":74},"array([[ 2,  3,  4],\n",[57,97421,97422],{"class":59,"line":281},[57,97423,97424],{"class":74},"       [ 8,  9, 10],\n",[57,97426,97427],{"class":59,"line":287},[57,97428,97429],{"class":74},"       [14, 15, 16],\n",[57,97431,97432],{"class":59,"line":298},[57,97433,97434],{"class":74},"       [20, 21, 22]])\n",[57,97436,97437],{"class":59,"line":311},[57,97438,94125],{"class":74},[57,97440,97441],{"class":59,"line":322},[57,97442,97443],{"class":63},"#对列行同时进行切片，使用了step参数\n",[57,97445,97446,97449,97451,97454,97456],{"class":59,"line":1929},[57,97447,97448],{"class":140},"a[::",[57,97450,498],{"class":81},[57,97452,97453],{"class":140},",::",[57,97455,498],{"class":81},[57,97457,33443],{"class":140},[14,97459,97460],{},"⑤同时获取两个元素",[49,97462,97464],{"className":122,"code":97463,"language":124,"meta":46,"style":46},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[28,97465,97466,97471,97476],{"__ignoreMap":46},[57,97467,97468],{"class":59,"line":60},[57,97469,97470],{"class":63},"#同时获取第三行第二列，第四行第一列\n",[57,97472,97473],{"class":59,"line":67},[57,97474,97475],{"class":63},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[57,97477,97478,97481,97483,97485,97487,97489,97491,97493,97495],{"class":59,"line":144},[57,97479,97480],{"class":140},"a[(",[57,97482,498],{"class":81},[57,97484,273],{"class":140},[57,97486,270],{"class":81},[57,97488,42444],{"class":140},[57,97490,635],{"class":81},[57,97492,273],{"class":140},[57,97494,226],{"class":81},[57,97496,97497],{"class":140},")]\n",[14,97499,97500],{},"⑥切片，对行进行反向获取",[49,97502,97504],{"className":122,"code":97503,"language":124,"meta":46,"style":46},"#切片 对所有行进行反向获取\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",[28,97505,97506,97511,97521,97525,97529,97534,97539,97544,97549,97553,97558,97574,97578,97583,97588,97593,97598],{"__ignoreMap":46},[57,97507,97508],{"class":59,"line":60},[57,97509,97510],{"class":63},"#切片 对所有行进行反向获取\n",[57,97512,97513,97515,97517,97519],{"class":59,"line":67},[57,97514,97448],{"class":140},[57,97516,948],{"class":136},[57,97518,635],{"class":81},[57,97520,33443],{"class":140},[57,97522,97523],{"class":59,"line":144},[57,97524,93761],{"class":63},[57,97526,97527],{"class":59,"line":150},[57,97528,94125],{"class":74},[57,97530,97531],{"class":59,"line":162},[57,97532,97533],{"class":74},"array([[19, 20, 21, 22, 23, 24],\n",[57,97535,97536],{"class":59,"line":180},[57,97537,97538],{"class":74},"       [13, 14, 15, 16, 17, 18],\n",[57,97540,97541],{"class":59,"line":186},[57,97542,97543],{"class":74},"       [ 7,  8,  9, 10, 11, 12],\n",[57,97545,97546],{"class":59,"line":197},[57,97547,97548],{"class":74},"       [ 1,  2,  3,  4,  5,  6]])\n",[57,97550,97551],{"class":59,"line":241},[57,97552,94125],{"class":74},[57,97554,97555],{"class":59,"line":249},[57,97556,97557],{"class":63},"#对行列都进行反向切片获取\n",[57,97559,97560,97562,97564,97566,97568,97570,97572],{"class":59,"line":262},[57,97561,97448],{"class":140},[57,97563,948],{"class":136},[57,97565,635],{"class":81},[57,97567,97453],{"class":140},[57,97569,948],{"class":136},[57,97571,635],{"class":81},[57,97573,33443],{"class":140},[57,97575,97576],{"class":59,"line":281},[57,97577,94125],{"class":74},[57,97579,97580],{"class":59,"line":287},[57,97581,97582],{"class":74},"array([[24, 23, 22, 21, 20, 19],\n",[57,97584,97585],{"class":59,"line":298},[57,97586,97587],{"class":74},"       [18, 17, 16, 15, 14, 13],\n",[57,97589,97590],{"class":59,"line":311},[57,97591,97592],{"class":74},"       [12, 11, 10,  9,  8,  7],\n",[57,97594,97595],{"class":59,"line":322},[57,97596,97597],{"class":74},"       [ 6,  5,  4,  3,  2,  1]])\n",[57,97599,97600],{"class":59,"line":1929},[57,97601,94125],{"class":74},[14,97603,97604],{},"⑦修改元素",[49,97606,97608],{"className":122,"code":97607,"language":124,"meta":46,"style":46},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[28,97609,97610,97615,97633,97638],{"__ignoreMap":46},[57,97611,97612],{"class":59,"line":60},[57,97613,97614],{"class":63},"#获取前两行和前两列\n",[57,97616,97617,97620,97622,97624,97626,97629,97631],{"class":59,"line":67},[57,97618,97619],{"class":140},"sub_a",[57,97621,156],{"class":136},[57,97623,97367],{"class":140},[57,97625,498],{"class":81},[57,97627,97628],{"class":140},",:",[57,97630,498],{"class":81},[57,97632,33443],{"class":140},[57,97634,97635],{"class":59,"line":144},[57,97636,97637],{"class":63},"#修改sub_a第一个元素的值\n",[57,97639,97640,97643,97645,97647,97649,97651,97653],{"class":59,"line":150},[57,97641,97642],{"class":140},"sub_a[",[57,97644,226],{"class":81},[57,97646,273],{"class":140},[57,97648,226],{"class":81},[57,97650,1356],{"class":140},[57,97652,156],{"class":136},[57,97654,97655],{"class":81},"100\n",[14,97657,97658],{},"⑧数组复制copy()",[49,97660,97662],{"className":122,"code":97661,"language":124,"meta":46,"style":46},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[28,97663,97664,97669,97679,97684],{"__ignoreMap":46},[57,97665,97666],{"class":59,"line":60},[57,97667,97668],{"class":63},"#数组复制\n",[57,97670,97671,97674,97676],{"class":59,"line":67},[57,97672,97673],{"class":140},"copy_a",[57,97675,156],{"class":136},[57,97677,97678],{"class":140},"np.copy(sub_a)\n",[57,97680,97681],{"class":59,"line":144},[57,97682,97683],{"class":63},"#修改copy_a后不影响原数组\n",[57,97685,97686,97689,97691,97693,97695,97697,97699],{"class":59,"line":150},[57,97687,97688],{"class":140},"copy_a[",[57,97690,226],{"class":81},[57,97692,273],{"class":140},[57,97694,226],{"class":81},[57,97696,1356],{"class":140},[57,97698,156],{"class":136},[57,97700,97655],{"class":81},[14,97702,97703],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[342,97705,97706],{},"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":46,"searchDepth":67,"depth":67,"links":97708},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97225,"description":347},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97715,"title":97716,"body":97717,"description":347,"extension":348,"meta":98209,"navigation":350,"path":98210,"seo":98211,"stem":98212,"__hash__":98213},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97718,"toc":98201},[97719,97722,97726,97729,97732,97785,97788,97813,97816,97835,97855,97858,97874,97878,97924,97928,97970,97974,97977,97980,97983,97986,97989,98051,98111,98115,98118,98175,98179,98184,98193,98198],[10,97720,97716],{"id":97721},"_5改变数组的维度",[365,97723,97725],{"id":97724},"_51-使用reshape","5.1 使用reshape()",[14,97727,97728],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,97730,97731],{},"①一维数组转换为二维数组",[49,97733,97735],{"className":122,"code":97734,"language":124,"meta":46,"style":46},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[28,97736,97737,97753,97758,97763,97768],{"__ignoreMap":46},[57,97738,97739,97741,97743,97745,97747,97749,97751],{"class":59,"line":60},[57,97740,18],{"class":140},[57,97742,156],{"class":136},[57,97744,93199],{"class":140},[57,97746,635],{"class":81},[57,97748,273],{"class":140},[57,97750,939],{"class":81},[57,97752,238],{"class":140},[57,97754,97755],{"class":59,"line":67},[57,97756,97757],{"class":63},"#将一维数组进行转换\n",[57,97759,97760],{"class":59,"line":144},[57,97761,97762],{"class":63},"#注意点：元素个数不可以变\n",[57,97764,97765],{"class":59,"line":150},[57,97766,97767],{"class":63},"#转换维度要保持一致，不一致就异常！！！\n",[57,97769,97770,97772,97774,97777,97779,97781,97783],{"class":59,"line":162},[57,97771,93503],{"class":140},[57,97773,156],{"class":136},[57,97775,97776],{"class":140},"a.reshape(",[57,97778,498],{"class":81},[57,97780,273],{"class":140},[57,97782,761],{"class":81},[57,97784,238],{"class":140},[14,97786,97787],{},"②一维数组转换为三维数组",[49,97789,97791],{"className":122,"code":97790,"language":124,"meta":46,"style":46},"aaa=a.reshape(2,3,2)\n",[28,97792,97793],{"__ignoreMap":46},[57,97794,97795,97797,97799,97801,97803,97805,97807,97809,97811],{"class":59,"line":60},[57,97796,95718],{"class":140},[57,97798,156],{"class":136},[57,97800,97776],{"class":140},[57,97802,498],{"class":81},[57,97804,273],{"class":140},[57,97806,270],{"class":81},[57,97808,273],{"class":140},[57,97810,498],{"class":81},[57,97812,238],{"class":140},[14,97814,97815],{},"③二维数组转化为一维数组",[49,97817,97819],{"className":122,"code":97818,"language":124,"meta":46,"style":46},"#知道元素个数：\naa.reshape(12)\n",[28,97820,97821,97826],{"__ignoreMap":46},[57,97822,97823],{"class":59,"line":60},[57,97824,97825],{"class":63},"#知道元素个数：\n",[57,97827,97828,97831,97833],{"class":59,"line":67},[57,97829,97830],{"class":140},"aa.reshape(",[57,97832,914],{"class":81},[57,97834,238],{"class":140},[49,97836,97838],{"className":122,"code":97837,"language":124,"meta":46,"style":46},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[28,97839,97840,97845],{"__ignoreMap":46},[57,97841,97842],{"class":59,"line":60},[57,97843,97844],{"class":63},"#不知道元素个数，参数传递-1\n",[57,97846,97847,97849,97851,97853],{"class":59,"line":67},[57,97848,97830],{"class":140},[57,97850,948],{"class":136},[57,97852,635],{"class":81},[57,97854,238],{"class":140},[14,97856,97857],{},"④三维数组转换为一维数组",[49,97859,97861],{"className":122,"code":97860,"language":124,"meta":46,"style":46},"aaa.reshape(-1)\n",[28,97862,97863],{"__ignoreMap":46},[57,97864,97865,97868,97870,97872],{"class":59,"line":60},[57,97866,97867],{"class":140},"aaa.reshape(",[57,97869,948],{"class":136},[57,97871,635],{"class":81},[57,97873,238],{"class":140},[365,97875,97877],{"id":97876},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[49,97879,97881],{"className":122,"code":97880,"language":124,"meta":46,"style":46},"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",[28,97882,97883,97910,97915,97919],{"__ignoreMap":46},[57,97884,97885,97887,97889,97891,97893,97895,97897,97899,97901,97903,97905,97907],{"class":59,"line":60},[57,97886,93503],{"class":140},[57,97888,156],{"class":136},[57,97890,93199],{"class":140},[57,97892,635],{"class":81},[57,97894,273],{"class":140},[57,97896,939],{"class":81},[57,97898,93204],{"class":140},[57,97900,498],{"class":81},[57,97902,273],{"class":140},[57,97904,761],{"class":81},[57,97906,845],{"class":140},[57,97908,97909],{"class":63},"#转换为2行6列的数组\n",[57,97911,97912],{"class":59,"line":67},[57,97913,97914],{"class":140},"aa.revel()\n",[57,97916,97917],{"class":59,"line":144},[57,97918,93761],{"class":63},[57,97920,97921],{"class":59,"line":150},[57,97922,97923],{"class":63},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[365,97925,97927],{"id":97926},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[49,97929,97931],{"className":122,"code":97930,"language":124,"meta":46,"style":46},"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",[28,97932,97933,97957,97962,97966],{"__ignoreMap":46},[57,97934,97935,97937,97939,97941,97943,97945,97947,97949,97951,97953,97955],{"class":59,"line":60},[57,97936,93503],{"class":140},[57,97938,156],{"class":136},[57,97940,93199],{"class":140},[57,97942,635],{"class":81},[57,97944,273],{"class":140},[57,97946,939],{"class":81},[57,97948,93204],{"class":140},[57,97950,498],{"class":81},[57,97952,273],{"class":140},[57,97954,761],{"class":81},[57,97956,238],{"class":140},[57,97958,97959],{"class":59,"line":67},[57,97960,97961],{"class":140},"aa.flatten()\n",[57,97963,97964],{"class":59,"line":144},[57,97965,93761],{"class":63},[57,97967,97968],{"class":59,"line":150},[57,97969,97923],{"class":63},[365,97971,97973],{"id":97972},"_54-使用resize","5.4 使用resize()",[14,97975,97976],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,97978,97979],{},"通过resize方法可以改变数组的维度",[14,97981,97982],{},"#resize修改数组维度",[14,97984,97985],{},"#以元组的形式指定形状",[14,97987,97988],{},"#改变的是原数组",[49,97990,97992],{"className":122,"code":97991,"language":124,"meta":46,"style":46},"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",[28,97993,97994,98010,98030,98043,98047],{"__ignoreMap":46},[57,97995,97996,97998,98000,98002,98004,98006,98008],{"class":59,"line":60},[57,97997,18],{"class":140},[57,97999,156],{"class":136},[57,98001,93199],{"class":140},[57,98003,635],{"class":81},[57,98005,273],{"class":140},[57,98007,939],{"class":81},[57,98009,238],{"class":140},[57,98011,98012,98015,98017,98019,98021,98023,98025,98027],{"class":59,"line":67},[57,98013,98014],{"class":140},"a.shape",[57,98016,156],{"class":136},[57,98018,168],{"class":140},[57,98020,498],{"class":81},[57,98022,273],{"class":140},[57,98024,761],{"class":81},[57,98026,845],{"class":140},[57,98028,98029],{"class":63},"#改变了原数组\n",[57,98031,98032,98034,98036,98039,98041],{"class":59,"line":144},[57,98033,18],{"class":140},[57,98035,156],{"class":136},[57,98037,98038],{"class":140},"resize((",[57,98040,914],{"class":81},[57,98042,259],{"class":140},[57,98044,98045],{"class":59,"line":150},[57,98046,93761],{"class":63},[57,98048,98049],{"class":59,"line":162},[57,98050,97923],{"class":63},[49,98052,98054],{"className":122,"code":98053,"language":124,"meta":46,"style":46},"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",[28,98055,98056,98069,98073,98077,98082,98087,98092,98097,98102,98107],{"__ignoreMap":46},[57,98057,98058,98061,98063,98065,98067],{"class":59,"line":60},[57,98059,98060],{"class":140},"a.resize((",[57,98062,761],{"class":81},[57,98064,273],{"class":140},[57,98066,498],{"class":81},[57,98068,259],{"class":140},[57,98070,98071],{"class":59,"line":67},[57,98072,93761],{"class":63},[57,98074,98075],{"class":59,"line":144},[57,98076,94125],{"class":74},[57,98078,98079],{"class":59,"line":150},[57,98080,98081],{"class":74},"array([[ 1,  2],\n",[57,98083,98084],{"class":59,"line":162},[57,98085,98086],{"class":74},"       [ 3,  4],\n",[57,98088,98089],{"class":59,"line":180},[57,98090,98091],{"class":74},"       [ 5,  6],\n",[57,98093,98094],{"class":59,"line":186},[57,98095,98096],{"class":74},"       [ 7,  8],\n",[57,98098,98099],{"class":59,"line":197},[57,98100,98101],{"class":74},"       [ 9, 10],\n",[57,98103,98104],{"class":59,"line":241},[57,98105,98106],{"class":74},"       [11, 12]])\n",[57,98108,98109],{"class":59,"line":249},[57,98110,94125],{"class":74},[365,98112,98114],{"id":98113},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,98116,98117],{},"改变了原数组",[49,98119,98121],{"className":122,"code":98120,"language":124,"meta":46,"style":46},"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",[28,98122,98123,98139,98155,98159,98163,98167,98171],{"__ignoreMap":46},[57,98124,98125,98127,98129,98131,98133,98135,98137],{"class":59,"line":60},[57,98126,18],{"class":140},[57,98128,156],{"class":136},[57,98130,93199],{"class":140},[57,98132,635],{"class":81},[57,98134,273],{"class":140},[57,98136,939],{"class":81},[57,98138,238],{"class":140},[57,98140,98141,98143,98145,98147,98149,98151,98153],{"class":59,"line":67},[57,98142,98014],{"class":140},[57,98144,156],{"class":136},[57,98146,168],{"class":140},[57,98148,498],{"class":81},[57,98150,273],{"class":140},[57,98152,761],{"class":81},[57,98154,238],{"class":140},[57,98156,98157],{"class":59,"line":144},[57,98158,93761],{"class":63},[57,98160,98161],{"class":59,"line":150},[57,98162,94125],{"class":74},[57,98164,98165],{"class":59,"line":162},[57,98166,97385],{"class":74},[57,98168,98169],{"class":59,"line":180},[57,98170,97390],{"class":74},[57,98172,98173],{"class":59,"line":186},[57,98174,94125],{"class":74},[365,98176,98178],{"id":98177},"_56-重要比较","5.6 重要比较：",[14,98180,98181],{},[44,98182],{"alt":46,"src":98183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,98185,98186,98187,98189,98190,98192],{},"口诀：NumPy 函数要么用 ",[28,98188,96160],{},"，要么用 ",[28,98191,31693],{},"，创建结构用 shape，造数据用 size",[14,98194,98195],{},[44,98196],{"alt":46,"src":98197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[342,98199,98200],{},"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":46,"searchDepth":67,"depth":67,"links":98202},[98203,98204,98205,98206,98207,98208],{"id":97724,"depth":67,"text":97725},{"id":97876,"depth":67,"text":97877},{"id":97926,"depth":67,"text":97927},{"id":97972,"depth":67,"text":97973},{"id":98113,"depth":67,"text":98114},{"id":98177,"depth":67,"text":98178},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97716,"description":347},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98215,"title":98216,"body":98217,"description":347,"extension":348,"meta":99289,"navigation":350,"path":99290,"seo":99291,"stem":99292,"__hash__":99293},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98218,"toc":99283},[98219,98222,98226,98229,98232,98235,98300,98303,98343,98346,98428,98431,98436,98458,98460,98465,98470,98473,98476,98631,98634,98836,98840,98843,98846,98914,98916,98921,98924,98927,99007,99011,99014,99016,99089,99091,99096,99098,99178,99182,99185,99188,99191,99194,99197,99200,99280],[10,98220,98216],{"id":98221},"_6数组的拼接",[365,98223,98225],{"id":98224},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,98227,98228],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,98230,98231],{},"函数内部传两个数列构成的数列或者元组",[14,98233,98234],{},"①一维数组的拼接",[49,98236,98238],{"className":122,"code":98237,"language":124,"meta":46,"style":46},"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",[28,98239,98240,98260,98280,98285,98290,98295],{"__ignoreMap":46},[57,98241,98242,98244,98246,98248,98250,98252,98254,98256,98258],{"class":59,"line":60},[57,98243,18],{"class":140},[57,98245,156],{"class":136},[57,98247,93221],{"class":140},[57,98249,635],{"class":81},[57,98251,273],{"class":140},[57,98253,498],{"class":81},[57,98255,273],{"class":140},[57,98257,270],{"class":81},[57,98259,4930],{"class":140},[57,98261,98262,98264,98266,98268,98270,98272,98274,98276,98278],{"class":59,"line":67},[57,98263,680],{"class":140},[57,98265,156],{"class":136},[57,98267,93221],{"class":140},[57,98269,710],{"class":81},[57,98271,273],{"class":140},[57,98273,736],{"class":81},[57,98275,273],{"class":140},[57,98277,761],{"class":81},[57,98279,4930],{"class":140},[57,98281,98282],{"class":59,"line":144},[57,98283,98284],{"class":63},"#调用concatenate进行数组拼接\n",[57,98286,98287],{"class":59,"line":150},[57,98288,98289],{"class":140},"np.concatenate((a,b))\n",[57,98291,98292],{"class":59,"line":162},[57,98293,98294],{"class":63},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[57,98296,98297],{"class":59,"line":180},[57,98298,98299],{"class":63},"#np.concatenate([a,b])\n",[14,98301,98302],{},"②一维多个数组拼接",[49,98304,98306],{"className":122,"code":98305,"language":124,"meta":46,"style":46},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[28,98307,98308,98313,98333,98338],{"__ignoreMap":46},[57,98309,98310],{"class":59,"line":60},[57,98311,98312],{"class":63},"#也可以多个数组进行拼接\n",[57,98314,98315,98317,98319,98321,98323,98325,98327,98329,98331],{"class":59,"line":67},[57,98316,705],{"class":140},[57,98318,156],{"class":136},[57,98320,93221],{"class":140},[57,98322,862],{"class":81},[57,98324,273],{"class":140},[57,98326,888],{"class":81},[57,98328,273],{"class":140},[57,98330,939],{"class":81},[57,98332,4930],{"class":140},[57,98334,98335],{"class":59,"line":144},[57,98336,98337],{"class":140},"c\n",[57,98339,98340],{"class":59,"line":150},[57,98341,98342],{"class":140},"np.concatenate((a,b,c))\n",[14,98344,98345],{},"③二维数组拼接",[49,98347,98349],{"className":122,"code":98348,"language":124,"meta":46,"style":46},"#二维数组使用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",[28,98350,98351,98356,98380,98405,98410,98415],{"__ignoreMap":46},[57,98352,98353],{"class":59,"line":60},[57,98354,98355],{"class":63},"#二维数组使用concatenate进行拼接\n",[57,98357,98358,98360,98362,98364,98366,98368,98370,98372,98374,98376,98378],{"class":59,"line":67},[57,98359,93503],{"class":140},[57,98361,156],{"class":136},[57,98363,93199],{"class":140},[57,98365,635],{"class":81},[57,98367,273],{"class":140},[57,98369,939],{"class":81},[57,98371,93204],{"class":140},[57,98373,270],{"class":81},[57,98375,273],{"class":140},[57,98377,710],{"class":81},[57,98379,238],{"class":140},[57,98381,98382,98385,98387,98389,98391,98393,98395,98397,98399,98401,98403],{"class":59,"line":144},[57,98383,98384],{"class":140},"bb",[57,98386,156],{"class":136},[57,98388,93199],{"class":140},[57,98390,754],{"class":81},[57,98392,273],{"class":140},[57,98394,1058],{"class":81},[57,98396,93204],{"class":140},[57,98398,270],{"class":81},[57,98400,273],{"class":140},[57,98402,710],{"class":81},[57,98404,238],{"class":140},[57,98406,98407],{"class":59,"line":150},[57,98408,98409],{"class":63},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[57,98411,98412],{"class":59,"line":162},[57,98413,98414],{"class":63},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[57,98416,98417,98420,98422,98424,98426],{"class":59,"line":180},[57,98418,98419],{"class":140},"np.concatenate((aa,bb),",[57,98421,47711],{"class":5489},[57,98423,156],{"class":136},[57,98425,226],{"class":81},[57,98427,238],{"class":140},[14,98429,98430],{},"结果：",[14,98432,98433],{},[44,98434],{"alt":46,"src":98435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[49,98437,98439],{"className":122,"code":98438,"language":124,"meta":46,"style":46},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[28,98440,98441,98446],{"__ignoreMap":46},[57,98442,98443],{"class":59,"line":60},[57,98444,98445],{"class":63},"#指定axis为1进行拼接\n",[57,98447,98448,98450,98452,98454,98456],{"class":59,"line":67},[57,98449,98419],{"class":140},[57,98451,47711],{"class":5489},[57,98453,156],{"class":136},[57,98455,635],{"class":81},[57,98457,238],{"class":140},[14,98459,98430],{},[14,98461,98462],{},[44,98463],{"alt":46,"src":98464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,98466,98467],{},[33,98468,98469],{},"二维数组总结：0竖着方向，1横着方向",[14,98471,98472],{},"④三维数组拼接",[14,98474,98475],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[49,98477,98479],{"className":122,"code":98478,"language":124,"meta":46,"style":46},"#两个三行六列\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",[28,98480,98481,98486,98514,98544,98549,98566,98571,98576,98581,98598,98603,98608,98613,98626],{"__ignoreMap":46},[57,98482,98483],{"class":59,"line":60},[57,98484,98485],{"class":63},"#两个三行六列\n",[57,98487,98488,98490,98492,98494,98496,98498,98500,98502,98504,98506,98508,98510,98512],{"class":59,"line":67},[57,98489,95718],{"class":140},[57,98491,156],{"class":136},[57,98493,93199],{"class":140},[57,98495,635],{"class":81},[57,98497,273],{"class":140},[57,98499,742],{"class":81},[57,98501,93204],{"class":140},[57,98503,498],{"class":81},[57,98505,273],{"class":140},[57,98507,270],{"class":81},[57,98509,273],{"class":140},[57,98511,761],{"class":81},[57,98513,238],{"class":140},[57,98515,98516,98519,98521,98523,98525,98527,98530,98532,98534,98536,98538,98540,98542],{"class":59,"line":144},[57,98517,98518],{"class":140},"bbb",[57,98520,156],{"class":136},[57,98522,93199],{"class":140},[57,98524,754],{"class":81},[57,98526,273],{"class":140},[57,98528,98529],{"class":81},"137",[57,98531,93204],{"class":140},[57,98533,498],{"class":81},[57,98535,273],{"class":140},[57,98537,270],{"class":81},[57,98539,273],{"class":140},[57,98541,761],{"class":81},[57,98543,238],{"class":140},[57,98545,98546],{"class":59,"line":150},[57,98547,98548],{"class":63},"#axis=0\n",[57,98550,98551,98553,98555,98558,98560,98562,98564],{"class":59,"line":162},[57,98552,1111],{"class":140},[57,98554,156],{"class":136},[57,98556,98557],{"class":140},"np.concatenate((aaa,bbb),",[57,98559,47711],{"class":5489},[57,98561,156],{"class":136},[57,98563,226],{"class":81},[57,98565,238],{"class":140},[57,98567,98568],{"class":59,"line":180},[57,98569,98570],{"class":140},"s.shape\n",[57,98572,98573],{"class":59,"line":186},[57,98574,98575],{"class":63},"#输出：(4,3,6)\n",[57,98577,98578],{"class":59,"line":197},[57,98579,98580],{"class":63},"#axis=1\n",[57,98582,98583,98586,98588,98590,98592,98594,98596],{"class":59,"line":241},[57,98584,98585],{"class":140},"ss",[57,98587,156],{"class":136},[57,98589,98557],{"class":140},[57,98591,47711],{"class":5489},[57,98593,156],{"class":136},[57,98595,635],{"class":81},[57,98597,238],{"class":140},[57,98599,98600],{"class":59,"line":249},[57,98601,98602],{"class":140},"ss.shape\n",[57,98604,98605],{"class":59,"line":262},[57,98606,98607],{"class":63},"#输出：(2,6,6)\n",[57,98609,98610],{"class":59,"line":281},[57,98611,98612],{"class":63},"#axis=2\n",[57,98614,98615,98617,98619,98621,98623],{"class":59,"line":287},[57,98616,98557],{"class":140},[57,98618,47711],{"class":5489},[57,98620,156],{"class":136},[57,98622,498],{"class":81},[57,98624,98625],{"class":140},").shape\n",[57,98627,98628],{"class":59,"line":298},[57,98629,98630],{"class":63},"#输出：（2，3，12）\n",[14,98632,98633],{},"⑤四维数组拼接",[49,98635,98637],{"className":122,"code":98636,"language":124,"meta":46,"style":46},"#两个三行六列\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",[28,98638,98639,98643,98671,98699,98724,98750,98754,98767,98772,98776,98788,98793,98797,98809,98814,98819,98831],{"__ignoreMap":46},[57,98640,98641],{"class":59,"line":60},[57,98642,98485],{"class":63},[57,98644,98645,98647,98649,98651,98653,98655,98657,98659,98661,98663,98665,98667,98669],{"class":59,"line":67},[57,98646,95718],{"class":140},[57,98648,156],{"class":136},[57,98650,93199],{"class":140},[57,98652,635],{"class":81},[57,98654,273],{"class":140},[57,98656,742],{"class":81},[57,98658,93204],{"class":140},[57,98660,498],{"class":81},[57,98662,273],{"class":140},[57,98664,270],{"class":81},[57,98666,273],{"class":140},[57,98668,761],{"class":81},[57,98670,238],{"class":140},[57,98672,98673,98675,98677,98679,98681,98683,98685,98687,98689,98691,98693,98695,98697],{"class":59,"line":144},[57,98674,98518],{"class":140},[57,98676,156],{"class":136},[57,98678,93199],{"class":140},[57,98680,754],{"class":81},[57,98682,273],{"class":140},[57,98684,98529],{"class":81},[57,98686,93204],{"class":140},[57,98688,498],{"class":81},[57,98690,273],{"class":140},[57,98692,270],{"class":81},[57,98694,273],{"class":140},[57,98696,761],{"class":81},[57,98698,238],{"class":140},[57,98700,98701,98704,98706,98708,98710,98712,98714,98716,98718,98720,98722],{"class":59,"line":150},[57,98702,98703],{"class":140},"aaaa",[57,98705,156],{"class":136},[57,98707,97867],{"class":140},[57,98709,498],{"class":81},[57,98711,273],{"class":140},[57,98713,270],{"class":81},[57,98715,273],{"class":140},[57,98717,270],{"class":81},[57,98719,273],{"class":140},[57,98721,498],{"class":81},[57,98723,238],{"class":140},[57,98725,98726,98729,98731,98734,98736,98738,98740,98742,98744,98746,98748],{"class":59,"line":162},[57,98727,98728],{"class":140},"bbbb",[57,98730,156],{"class":136},[57,98732,98733],{"class":140},"bbb.reshape(",[57,98735,498],{"class":81},[57,98737,273],{"class":140},[57,98739,270],{"class":81},[57,98741,273],{"class":140},[57,98743,270],{"class":81},[57,98745,273],{"class":140},[57,98747,498],{"class":81},[57,98749,238],{"class":140},[57,98751,98752],{"class":59,"line":180},[57,98753,98548],{"class":63},[57,98755,98756,98759,98761,98763,98765],{"class":59,"line":186},[57,98757,98758],{"class":140},"np.concatenate((aaaa,bbbb),",[57,98760,47711],{"class":5489},[57,98762,156],{"class":136},[57,98764,226],{"class":81},[57,98766,98625],{"class":140},[57,98768,98769],{"class":59,"line":197},[57,98770,98771],{"class":63},"#结果：（4，3，3，2）\n",[57,98773,98774],{"class":59,"line":241},[57,98775,98580],{"class":63},[57,98777,98778,98780,98782,98784,98786],{"class":59,"line":249},[57,98779,98758],{"class":140},[57,98781,47711],{"class":5489},[57,98783,156],{"class":136},[57,98785,635],{"class":81},[57,98787,98625],{"class":140},[57,98789,98790],{"class":59,"line":262},[57,98791,98792],{"class":63},"#结果：（2，6，3，2）\n",[57,98794,98795],{"class":59,"line":281},[57,98796,98612],{"class":63},[57,98798,98799,98801,98803,98805,98807],{"class":59,"line":287},[57,98800,98758],{"class":140},[57,98802,47711],{"class":5489},[57,98804,156],{"class":136},[57,98806,498],{"class":81},[57,98808,98625],{"class":140},[57,98810,98811],{"class":59,"line":298},[57,98812,98813],{"class":63},"#结果：（2，3，6，2）\n",[57,98815,98816],{"class":59,"line":311},[57,98817,98818],{"class":63},"#axis=3\n",[57,98820,98821,98823,98825,98827,98829],{"class":59,"line":322},[57,98822,98758],{"class":140},[57,98824,47711],{"class":5489},[57,98826,156],{"class":136},[57,98828,270],{"class":81},[57,98830,98625],{"class":140},[57,98832,98833],{"class":59,"line":1929},[57,98834,98835],{"class":63},"#结果：（2，3，3，4）\n",[365,98837,98839],{"id":98838},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,98841,98842],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,98844,98845],{},"①二维数组",[49,98847,98849],{"className":122,"code":98848,"language":124,"meta":46,"style":46},"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",[28,98850,98851,98875,98899,98904,98909],{"__ignoreMap":46},[57,98852,98853,98855,98857,98859,98861,98863,98865,98867,98869,98871,98873],{"class":59,"line":60},[57,98854,93503],{"class":140},[57,98856,156],{"class":136},[57,98858,93199],{"class":140},[57,98860,635],{"class":81},[57,98862,273],{"class":140},[57,98864,939],{"class":81},[57,98866,93204],{"class":140},[57,98868,270],{"class":81},[57,98870,273],{"class":140},[57,98872,710],{"class":81},[57,98874,238],{"class":140},[57,98876,98877,98879,98881,98883,98885,98887,98889,98891,98893,98895,98897],{"class":59,"line":67},[57,98878,98384],{"class":140},[57,98880,156],{"class":136},[57,98882,93199],{"class":140},[57,98884,754],{"class":81},[57,98886,273],{"class":140},[57,98888,1058],{"class":81},[57,98890,93204],{"class":140},[57,98892,270],{"class":81},[57,98894,273],{"class":140},[57,98896,710],{"class":81},[57,98898,238],{"class":140},[57,98900,98901],{"class":59,"line":144},[57,98902,98903],{"class":140},"np.hstack((aa,bb))\n",[57,98905,98906],{"class":59,"line":150},[57,98907,98908],{"class":63},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[57,98910,98911],{"class":59,"line":162},[57,98912,98913],{"class":63},"#np.hstack([aa,bb])\n",[14,98915,98430],{},[14,98917,98918],{},[44,98919],{"alt":46,"src":98920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,98922,98923],{},"等效于concatenate()函数中axis=1时的情况",[14,98925,98926],{},"②三维数组",[49,98928,98930],{"className":122,"code":98929,"language":124,"meta":46,"style":46},"#两个三行六列\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",[28,98931,98932,98936,98964,98992,98997,99002],{"__ignoreMap":46},[57,98933,98934],{"class":59,"line":60},[57,98935,98485],{"class":63},[57,98937,98938,98940,98942,98944,98946,98948,98950,98952,98954,98956,98958,98960,98962],{"class":59,"line":67},[57,98939,95718],{"class":140},[57,98941,156],{"class":136},[57,98943,93199],{"class":140},[57,98945,635],{"class":81},[57,98947,273],{"class":140},[57,98949,742],{"class":81},[57,98951,93204],{"class":140},[57,98953,498],{"class":81},[57,98955,273],{"class":140},[57,98957,270],{"class":81},[57,98959,273],{"class":140},[57,98961,761],{"class":81},[57,98963,238],{"class":140},[57,98965,98966,98968,98970,98972,98974,98976,98978,98980,98982,98984,98986,98988,98990],{"class":59,"line":144},[57,98967,98518],{"class":140},[57,98969,156],{"class":136},[57,98971,93199],{"class":140},[57,98973,754],{"class":81},[57,98975,273],{"class":140},[57,98977,98529],{"class":81},[57,98979,93204],{"class":140},[57,98981,498],{"class":81},[57,98983,273],{"class":140},[57,98985,270],{"class":81},[57,98987,273],{"class":140},[57,98989,761],{"class":81},[57,98991,238],{"class":140},[57,98993,98994],{"class":59,"line":150},[57,98995,98996],{"class":63},"#使用hstack\n",[57,98998,98999],{"class":59,"line":162},[57,99000,99001],{"class":140},"np.hstack((aaa,bbb)).shape\n",[57,99003,99004],{"class":59,"line":180},[57,99005,99006],{"class":63},"#输出：（2，6，6）\n",[365,99008,99010],{"id":99009},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,99012,99013],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,99015,98845],{},[49,99017,99019],{"className":122,"code":99018,"language":124,"meta":46,"style":46},"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",[28,99020,99021,99045,99069,99074,99079,99084],{"__ignoreMap":46},[57,99022,99023,99025,99027,99029,99031,99033,99035,99037,99039,99041,99043],{"class":59,"line":60},[57,99024,93503],{"class":140},[57,99026,156],{"class":136},[57,99028,93199],{"class":140},[57,99030,635],{"class":81},[57,99032,273],{"class":140},[57,99034,939],{"class":81},[57,99036,93204],{"class":140},[57,99038,270],{"class":81},[57,99040,273],{"class":140},[57,99042,710],{"class":81},[57,99044,238],{"class":140},[57,99046,99047,99049,99051,99053,99055,99057,99059,99061,99063,99065,99067],{"class":59,"line":67},[57,99048,98384],{"class":140},[57,99050,156],{"class":136},[57,99052,93199],{"class":140},[57,99054,754],{"class":81},[57,99056,273],{"class":140},[57,99058,1058],{"class":81},[57,99060,93204],{"class":140},[57,99062,270],{"class":81},[57,99064,273],{"class":140},[57,99066,710],{"class":81},[57,99068,238],{"class":140},[57,99070,99071],{"class":59,"line":144},[57,99072,99073],{"class":63},"#vstack 垂直方向进行堆叠\n",[57,99075,99076],{"class":59,"line":150},[57,99077,99078],{"class":140},"np.vstack((aa,bb))\n",[57,99080,99081],{"class":59,"line":162},[57,99082,99083],{"class":63},"#与hstack传的参数类似，等价于：\n",[57,99085,99086],{"class":59,"line":180},[57,99087,99088],{"class":140},"np.vstack([aa,bb])\n",[14,99090,98430],{},[14,99092,99093],{},[44,99094],{"alt":46,"src":99095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,99097,98926],{},[49,99099,99101],{"className":122,"code":99100,"language":124,"meta":46,"style":46},"#两个三行六列\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",[28,99102,99103,99107,99135,99163,99168,99173],{"__ignoreMap":46},[57,99104,99105],{"class":59,"line":60},[57,99106,98485],{"class":63},[57,99108,99109,99111,99113,99115,99117,99119,99121,99123,99125,99127,99129,99131,99133],{"class":59,"line":67},[57,99110,95718],{"class":140},[57,99112,156],{"class":136},[57,99114,93199],{"class":140},[57,99116,635],{"class":81},[57,99118,273],{"class":140},[57,99120,742],{"class":81},[57,99122,93204],{"class":140},[57,99124,498],{"class":81},[57,99126,273],{"class":140},[57,99128,270],{"class":81},[57,99130,273],{"class":140},[57,99132,761],{"class":81},[57,99134,238],{"class":140},[57,99136,99137,99139,99141,99143,99145,99147,99149,99151,99153,99155,99157,99159,99161],{"class":59,"line":144},[57,99138,98518],{"class":140},[57,99140,156],{"class":136},[57,99142,93199],{"class":140},[57,99144,754],{"class":81},[57,99146,273],{"class":140},[57,99148,98529],{"class":81},[57,99150,93204],{"class":140},[57,99152,498],{"class":81},[57,99154,273],{"class":140},[57,99156,270],{"class":81},[57,99158,273],{"class":140},[57,99160,761],{"class":81},[57,99162,238],{"class":140},[57,99164,99165],{"class":59,"line":150},[57,99166,99167],{"class":63},"#使用vstack\n",[57,99169,99170],{"class":59,"line":162},[57,99171,99172],{"class":140},"np.vstack((aaa,bbb)).shape\n",[57,99174,99175],{"class":59,"line":180},[57,99176,99177],{"class":63},"#输出：（4，3，6）\n",[365,99179,99181],{"id":99180},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,99183,99184],{},"该方法是三维数组特有的方法",[14,99186,99187],{},"也就是说",[14,99189,99190],{},"一维数组拼接方法用：concatenate()",[14,99192,99193],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,99195,99196],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,99198,99199],{},"四维数组及多维数组只能用concatenate进行拼接",[49,99201,99203],{"className":122,"code":99202,"language":124,"meta":46,"style":46},"#两个三行六列\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",[28,99204,99205,99209,99237,99265,99270,99275],{"__ignoreMap":46},[57,99206,99207],{"class":59,"line":60},[57,99208,98485],{"class":63},[57,99210,99211,99213,99215,99217,99219,99221,99223,99225,99227,99229,99231,99233,99235],{"class":59,"line":67},[57,99212,95718],{"class":140},[57,99214,156],{"class":136},[57,99216,93199],{"class":140},[57,99218,635],{"class":81},[57,99220,273],{"class":140},[57,99222,742],{"class":81},[57,99224,93204],{"class":140},[57,99226,498],{"class":81},[57,99228,273],{"class":140},[57,99230,270],{"class":81},[57,99232,273],{"class":140},[57,99234,761],{"class":81},[57,99236,238],{"class":140},[57,99238,99239,99241,99243,99245,99247,99249,99251,99253,99255,99257,99259,99261,99263],{"class":59,"line":144},[57,99240,98518],{"class":140},[57,99242,156],{"class":136},[57,99244,93199],{"class":140},[57,99246,754],{"class":81},[57,99248,273],{"class":140},[57,99250,98529],{"class":81},[57,99252,93204],{"class":140},[57,99254,498],{"class":81},[57,99256,273],{"class":140},[57,99258,270],{"class":81},[57,99260,273],{"class":140},[57,99262,761],{"class":81},[57,99264,238],{"class":140},[57,99266,99267],{"class":59,"line":150},[57,99268,99269],{"class":63},"#使用dstack\n",[57,99271,99272],{"class":59,"line":162},[57,99273,99274],{"class":140},"np.dstack((aaa,bbb)).shape\n",[57,99276,99277],{"class":59,"line":180},[57,99278,99279],{"class":63},"#结果：（2，3，12）\n",[342,99281,99282],{},"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":46,"searchDepth":67,"depth":67,"links":99284},[99285,99286,99287,99288],{"id":98224,"depth":67,"text":98225},{"id":98838,"depth":67,"text":98839},{"id":99009,"depth":67,"text":99010},{"id":99180,"depth":67,"text":99181},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98216,"description":347},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99295,"title":99296,"body":99297,"description":347,"extension":348,"meta":99572,"navigation":350,"path":99573,"seo":99574,"stem":99575,"__hash__":99576},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99298,"toc":99570},[99299,99302,99305,99399,99402,99405,99408,99411,99414,99417,99420,99423,99567],[10,99300,99296],{"id":99301},"_7数组转置",[14,99303,99304],{},"使用transpose()函数",[49,99306,99308],{"className":122,"code":99307,"language":124,"meta":46,"style":46},"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",[28,99309,99310,99320,99344,99349,99354,99359,99364,99372,99376,99380,99385,99390,99395],{"__ignoreMap":46},[57,99311,99312,99314,99316,99318],{"class":59,"line":60},[57,99313,137],{"class":136},[57,99315,31577],{"class":140},[57,99317,31580],{"class":136},[57,99319,31583],{"class":140},[57,99321,99322,99324,99326,99328,99330,99332,99334,99336,99338,99340,99342],{"class":59,"line":67},[57,99323,18],{"class":140},[57,99325,156],{"class":136},[57,99327,31914],{"class":140},[57,99329,635],{"class":81},[57,99331,273],{"class":140},[57,99333,939],{"class":81},[57,99335,93204],{"class":140},[57,99337,710],{"class":81},[57,99339,273],{"class":140},[57,99341,270],{"class":81},[57,99343,238],{"class":140},[57,99345,99346],{"class":59,"line":144},[57,99347,99348],{"class":63},"#二维数组转置\n",[57,99350,99351],{"class":59,"line":150},[57,99352,99353],{"class":63},"#调用transpose()函数\n",[57,99355,99356],{"class":59,"line":162},[57,99357,99358],{"class":140},"a.transpose()\n",[57,99360,99361],{"class":59,"line":180},[57,99362,99363],{"class":63},"#对于二维数组也可以采用.T来实现\n",[57,99365,99366,99369],{"class":59,"line":186},[57,99367,99368],{"class":140},"a.T",[57,99370,99371],{"class":63},"#与上述代码一样\n",[57,99373,99374],{"class":59,"line":197},[57,99375,93761],{"class":63},[57,99377,99378],{"class":59,"line":241},[57,99379,94125],{"class":74},[57,99381,99382],{"class":59,"line":249},[57,99383,99384],{"class":74},"array([[ 1,  4,  7, 10],\n",[57,99386,99387],{"class":59,"line":262},[57,99388,99389],{"class":74},"       [ 2,  5,  8, 11],\n",[57,99391,99392],{"class":59,"line":281},[57,99393,99394],{"class":74},"       [ 3,  6,  9, 12]])\n",[57,99396,99397],{"class":59,"line":287},[57,99398,94125],{"class":74},[14,99400,99401],{},"也可以使用np.transpose()的形式",[14,99403,99404],{},"#多维数组进行转置 np.transpose()",[14,99406,99407],{},"#对二维数组也可以使用np.transpose()进行转置",[14,99409,99410],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,99412,99413],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,99415,99416],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,99418,99419],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,99421,99422],{},"四维及以上的数组也是一样的道理",[49,99424,99426],{"className":122,"code":99425,"language":124,"meta":46,"style":46},"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",[28,99427,99428,99456,99461,99466,99471,99489,99494,99526,99531,99536,99541,99562],{"__ignoreMap":46},[57,99429,99430,99432,99434,99436,99438,99440,99442,99444,99446,99448,99450,99452,99454],{"class":59,"line":60},[57,99431,1236],{"class":140},[57,99433,156],{"class":136},[57,99435,93199],{"class":140},[57,99437,635],{"class":81},[57,99439,273],{"class":140},[57,99441,742],{"class":81},[57,99443,93204],{"class":140},[57,99445,270],{"class":81},[57,99447,273],{"class":140},[57,99449,761],{"class":81},[57,99451,273],{"class":140},[57,99453,498],{"class":81},[57,99455,238],{"class":140},[57,99457,99458],{"class":59,"line":67},[57,99459,99460],{"class":140},"x.shape\n",[57,99462,99463],{"class":59,"line":144},[57,99464,99465],{"class":63},"#结果：（3,6,2）\n",[57,99467,99468],{"class":59,"line":150},[57,99469,99470],{"class":63},"#使用np.transpose()进行转置 变为(2,6,3)\n",[57,99472,99473,99476,99478,99480,99482,99484,99486],{"class":59,"line":162},[57,99474,99475],{"class":140},"np.transpose(x,(",[57,99477,498],{"class":81},[57,99479,273],{"class":140},[57,99481,635],{"class":81},[57,99483,273],{"class":140},[57,99485,226],{"class":81},[57,99487,99488],{"class":140},")).shape\n",[57,99490,99491],{"class":59,"line":180},[57,99492,99493],{"class":63},"#结果：(2,6,3)\n",[57,99495,99496,99498,99500,99502,99504,99506,99508,99510,99512,99514,99516,99518,99520,99522,99524],{"class":59,"line":186},[57,99497,98703],{"class":140},[57,99499,156],{"class":136},[57,99501,93199],{"class":140},[57,99503,635],{"class":81},[57,99505,273],{"class":140},[57,99507,742],{"class":81},[57,99509,93204],{"class":140},[57,99511,270],{"class":81},[57,99513,273],{"class":140},[57,99515,498],{"class":81},[57,99517,273],{"class":140},[57,99519,635],{"class":81},[57,99521,273],{"class":140},[57,99523,761],{"class":81},[57,99525,238],{"class":140},[57,99527,99528],{"class":59,"line":197},[57,99529,99530],{"class":140},"aaaa.shape\n",[57,99532,99533],{"class":59,"line":241},[57,99534,99535],{"class":63},"#结果：（3，2，1，6）\n",[57,99537,99538],{"class":59,"line":249},[57,99539,99540],{"class":63},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[57,99542,99543,99546,99548,99550,99552,99554,99556,99558,99560],{"class":59,"line":262},[57,99544,99545],{"class":140},"np.transpose(aaaa,(",[57,99547,635],{"class":81},[57,99549,273],{"class":140},[57,99551,498],{"class":81},[57,99553,273],{"class":140},[57,99555,226],{"class":81},[57,99557,273],{"class":140},[57,99559,270],{"class":81},[57,99561,99488],{"class":140},[57,99563,99564],{"class":59,"line":281},[57,99565,99566],{"class":63},"#结果：(2,1,3,6)\n",[342,99568,99569],{},"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":46,"searchDepth":67,"depth":67,"links":99571},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99296,"description":347},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99578,"title":99579,"body":99580,"description":347,"extension":348,"meta":100314,"navigation":350,"path":100315,"seo":100316,"stem":100317,"__hash__":100318},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99581,"toc":100312},[99582,99585,99588,99591,99594,99597,99600,99603,99606,99715,99718,99721,100309],[10,99583,99579],{"id":99584},"_8数组分割",[14,99586,99587],{},"split分割",[14,99589,99590],{},"numpy.split(ary,indics_or_sections,axis)",[14,99592,99593],{},"解释：",[14,99595,99596],{},"ary:被分割的数组",[14,99598,99599],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,99601,99602],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,99604,99605],{},"①一维数组的分割",[49,99607,99609],{"className":122,"code":99608,"language":124,"meta":46,"style":46},"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",[28,99610,99611,99627,99632,99641,99645,99650,99658,99662,99667,99672,99685,99689,99694,99706,99710],{"__ignoreMap":46},[57,99612,99613,99615,99617,99619,99621,99623,99625],{"class":59,"line":60},[57,99614,18],{"class":140},[57,99616,156],{"class":136},[57,99618,93199],{"class":140},[57,99620,635],{"class":81},[57,99622,273],{"class":140},[57,99624,836],{"class":81},[57,99626,238],{"class":140},[57,99628,99629],{"class":59,"line":67},[57,99630,99631],{"class":63},"#如果传入整数，必须能够平分，否则会报错\n",[57,99633,99634,99637,99639],{"class":59,"line":144},[57,99635,99636],{"class":140},"np.split(a,",[57,99638,498],{"class":81},[57,99640,238],{"class":140},[57,99642,99643],{"class":59,"line":150},[57,99644,93761],{"class":63},[57,99646,99647],{"class":59,"line":162},[57,99648,99649],{"class":63},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[57,99651,99652,99654,99656],{"class":59,"line":180},[57,99653,99636],{"class":140},[57,99655,710],{"class":81},[57,99657,238],{"class":140},[57,99659,99660],{"class":59,"line":186},[57,99661,93761],{"class":63},[57,99663,99664],{"class":59,"line":197},[57,99665,99666],{"class":63},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[57,99668,99669],{"class":59,"line":241},[57,99670,99671],{"class":63},"#传入数组\n",[57,99673,99674,99677,99679,99681,99683],{"class":59,"line":249},[57,99675,99676],{"class":140},"np.split(a,[",[57,99678,270],{"class":81},[57,99680,273],{"class":140},[57,99682,736],{"class":81},[57,99684,4930],{"class":140},[57,99686,99687],{"class":59,"line":262},[57,99688,93761],{"class":63},[57,99690,99691],{"class":59,"line":281},[57,99692,99693],{"class":63},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[57,99695,99696,99698,99700,99702,99704],{"class":59,"line":287},[57,99697,99676],{"class":140},[57,99699,736],{"class":81},[57,99701,273],{"class":140},[57,99703,786],{"class":81},[57,99705,4930],{"class":140},[57,99707,99708],{"class":59,"line":298},[57,99709,93761],{"class":63},[57,99711,99712],{"class":59,"line":311},[57,99713,99714],{"class":63},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,99716,99717],{},"②二维数组的分割",[14,99719,99720],{},"使用split()",[49,99722,99724],{"className":122,"code":99723,"language":124,"meta":46,"style":46},"#二维数组分割\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",[28,99725,99726,99731,99755,99760,99769,99773,99777,99782,99787,99792,99797,99802,99807,99812,99816,99829,99833,99837,99841,99845,99849,99854,99859,99864,99868,99873,99889,99893,99897,99902,99907,99912,99917,99922,99927,99932,99937,99942,99947,99952,99957,99962,99967,99972,99977,99982,99987,99991,99995,100015,100019,100023,100028,100033,100038,100043,100048,100053,100058,100063,100068,100073,100078,100083,100088,100093,100098,100103,100108,100113,100117,100122,100131,100135,100139,100143,100147,100151,100155,100159,100163,100167,100176,100180,100184,100188,100192,100196,100200,100204,100208,100212,100216,100220,100224,100228,100232,100236,100240,100244,100248,100252,100256,100260,100273,100277,100281,100285,100289,100293,100297,100301,100305],{"__ignoreMap":46},[57,99727,99728],{"class":59,"line":60},[57,99729,99730],{"class":63},"#二维数组分割\n",[57,99732,99733,99735,99737,99739,99741,99743,99745,99747,99749,99751,99753],{"class":59,"line":67},[57,99734,93503],{"class":140},[57,99736,156],{"class":136},[57,99738,93199],{"class":140},[57,99740,635],{"class":81},[57,99742,273],{"class":140},[57,99744,742],{"class":81},[57,99746,93204],{"class":140},[57,99748,761],{"class":81},[57,99750,273],{"class":140},[57,99752,761],{"class":81},[57,99754,238],{"class":140},[57,99756,99757],{"class":59,"line":144},[57,99758,99759],{"class":63},"#默认axis=0  传入整数平均分,按行来的\n",[57,99761,99762,99765,99767],{"class":59,"line":150},[57,99763,99764],{"class":140},"np.split(aa,",[57,99766,270],{"class":81},[57,99768,238],{"class":140},[57,99770,99771],{"class":59,"line":162},[57,99772,95961],{"class":63},[57,99774,99775],{"class":59,"line":180},[57,99776,94125],{"class":74},[57,99778,99779],{"class":59,"line":186},[57,99780,99781],{"class":74},"[array([[ 1,  2,  3,  4,  5,  6],\n",[57,99783,99784],{"class":59,"line":197},[57,99785,99786],{"class":74},"        [ 7,  8,  9, 10, 11, 12]]),\n",[57,99788,99789],{"class":59,"line":241},[57,99790,99791],{"class":74}," array([[13, 14, 15, 16, 17, 18],\n",[57,99793,99794],{"class":59,"line":249},[57,99795,99796],{"class":74},"        [19, 20, 21, 22, 23, 24]]),\n",[57,99798,99799],{"class":59,"line":262},[57,99800,99801],{"class":74}," array([[25, 26, 27, 28, 29, 30],\n",[57,99803,99804],{"class":59,"line":281},[57,99805,99806],{"class":74},"        [31, 32, 33, 34, 35, 36]])]\n",[57,99808,99809],{"class":59,"line":287},[57,99810,99811],{"class":74}," '''\n",[57,99813,99814],{"class":59,"line":298},[57,99815,99671],{"class":63},[57,99817,99818,99821,99823,99825,99827],{"class":59,"line":311},[57,99819,99820],{"class":140},"np.split(aa,[",[57,99822,498],{"class":81},[57,99824,273],{"class":140},[57,99826,736],{"class":81},[57,99828,4930],{"class":140},[57,99830,99831],{"class":59,"line":322},[57,99832,95961],{"class":63},[57,99834,99835],{"class":59,"line":1929},[57,99836,94125],{"class":74},[57,99838,99839],{"class":59,"line":1950},[57,99840,99781],{"class":74},[57,99842,99843],{"class":59,"line":1955},[57,99844,99786],{"class":74},[57,99846,99847],{"class":59,"line":1969},[57,99848,99791],{"class":74},[57,99850,99851],{"class":59,"line":1974},[57,99852,99853],{"class":74},"        [19, 20, 21, 22, 23, 24],\n",[57,99855,99856],{"class":59,"line":2001},[57,99857,99858],{"class":74},"        [25, 26, 27, 28, 29, 30]]),\n",[57,99860,99861],{"class":59,"line":2006},[57,99862,99863],{"class":74}," array([[31, 32, 33, 34, 35, 36]])]\n",[57,99865,99866],{"class":59,"line":2023},[57,99867,94125],{"class":74},[57,99869,99870],{"class":59,"line":2028},[57,99871,99872],{"class":63},"#axis=1 按照列来分\n",[57,99874,99875,99877,99879,99881,99883,99885,99887],{"class":59,"line":2033},[57,99876,99764],{"class":140},[57,99878,270],{"class":81},[57,99880,273],{"class":140},[57,99882,47711],{"class":5489},[57,99884,156],{"class":136},[57,99886,635],{"class":81},[57,99888,238],{"class":140},[57,99890,99891],{"class":59,"line":2038},[57,99892,95961],{"class":63},[57,99894,99895],{"class":59,"line":2052},[57,99896,94125],{"class":74},[57,99898,99899],{"class":59,"line":2057},[57,99900,99901],{"class":74},"[array([[ 1,  2],\n",[57,99903,99904],{"class":59,"line":2850},[57,99905,99906],{"class":74},"        [ 7,  8],\n",[57,99908,99909],{"class":59,"line":2864},[57,99910,99911],{"class":74},"        [13, 14],\n",[57,99913,99914],{"class":59,"line":2872},[57,99915,99916],{"class":74},"        [19, 20],\n",[57,99918,99919],{"class":59,"line":2877},[57,99920,99921],{"class":74},"        [25, 26],\n",[57,99923,99924],{"class":59,"line":2883},[57,99925,99926],{"class":74},"        [31, 32]]),\n",[57,99928,99929],{"class":59,"line":2889},[57,99930,99931],{"class":74}," array([[ 3,  4],\n",[57,99933,99934],{"class":59,"line":2894},[57,99935,99936],{"class":74},"        [ 9, 10],\n",[57,99938,99939],{"class":59,"line":8221},[57,99940,99941],{"class":74},"        [15, 16],\n",[57,99943,99944],{"class":59,"line":8245},[57,99945,99946],{"class":74},"        [21, 22],\n",[57,99948,99949],{"class":59,"line":8250},[57,99950,99951],{"class":74},"        [27, 28],\n",[57,99953,99954],{"class":59,"line":8256},[57,99955,99956],{"class":74},"        [33, 34]]),\n",[57,99958,99959],{"class":59,"line":8283},[57,99960,99961],{"class":74}," array([[ 5,  6],\n",[57,99963,99964],{"class":59,"line":8288},[57,99965,99966],{"class":74},"        [11, 12],\n",[57,99968,99969],{"class":59,"line":8294},[57,99970,99971],{"class":74},"        [17, 18],\n",[57,99973,99974],{"class":59,"line":8306},[57,99975,99976],{"class":74},"        [23, 24],\n",[57,99978,99979],{"class":59,"line":8318},[57,99980,99981],{"class":74},"        [29, 30],\n",[57,99983,99984],{"class":59,"line":8330},[57,99985,99986],{"class":74},"        [35, 36]])]\n",[57,99988,99989],{"class":59,"line":9989},[57,99990,99811],{"class":74},[57,99992,99993],{"class":59,"line":10014},[57,99994,99671],{"class":63},[57,99996,99997,99999,100001,100003,100005,100007,100009,100011,100013],{"class":59,"line":10037},[57,99998,99820],{"class":140},[57,100000,635],{"class":81},[57,100002,273],{"class":140},[57,100004,498],{"class":81},[57,100006,41806],{"class":140},[57,100008,47711],{"class":5489},[57,100010,156],{"class":136},[57,100012,635],{"class":81},[57,100014,238],{"class":140},[57,100016,100017],{"class":59,"line":10061},[57,100018,93761],{"class":63},[57,100020,100021],{"class":59,"line":10066},[57,100022,94125],{"class":74},[57,100024,100025],{"class":59,"line":10071},[57,100026,100027],{"class":74},"[array([[ 1],\n",[57,100029,100030],{"class":59,"line":10076},[57,100031,100032],{"class":74},"        [ 7],\n",[57,100034,100035],{"class":59,"line":10085},[57,100036,100037],{"class":74},"        [13],\n",[57,100039,100040],{"class":59,"line":10090},[57,100041,100042],{"class":74},"        [19],\n",[57,100044,100045],{"class":59,"line":10096},[57,100046,100047],{"class":74},"        [25],\n",[57,100049,100050],{"class":59,"line":10117},[57,100051,100052],{"class":74},"        [31]]),\n",[57,100054,100055],{"class":59,"line":10123},[57,100056,100057],{"class":74}," array([[ 2],\n",[57,100059,100060],{"class":59,"line":10137},[57,100061,100062],{"class":74},"        [ 8],\n",[57,100064,100065],{"class":59,"line":10143},[57,100066,100067],{"class":74},"        [14],\n",[57,100069,100070],{"class":59,"line":10170},[57,100071,100072],{"class":74},"        [20],\n",[57,100074,100075],{"class":59,"line":10179},[57,100076,100077],{"class":74},"        [26],\n",[57,100079,100080],{"class":59,"line":10185},[57,100081,100082],{"class":74},"        [32]]),\n",[57,100084,100085],{"class":59,"line":10193},[57,100086,100087],{"class":74}," array([[ 3,  4,  5,  6],\n",[57,100089,100090],{"class":59,"line":10198},[57,100091,100092],{"class":74},"        [ 9, 10, 11, 12],\n",[57,100094,100095],{"class":59,"line":16876},[57,100096,100097],{"class":74},"        [15, 16, 17, 18],\n",[57,100099,100100],{"class":59,"line":16882},[57,100101,100102],{"class":74},"        [21, 22, 23, 24],\n",[57,100104,100105],{"class":59,"line":16905},[57,100106,100107],{"class":74},"        [27, 28, 29, 30],\n",[57,100109,100110],{"class":59,"line":16911},[57,100111,100112],{"class":74},"        [33, 34, 35, 36]])]\n",[57,100114,100115],{"class":59,"line":16934},[57,100116,94125],{"class":74},[57,100118,100119],{"class":59,"line":16948},[57,100120,100121],{"class":63},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[57,100123,100124,100127,100129],{"class":59,"line":16968},[57,100125,100126],{"class":140},"np.vsplit(aa,",[57,100128,270],{"class":81},[57,100130,238],{"class":140},[57,100132,100133],{"class":59,"line":16974},[57,100134,93761],{"class":63},[57,100136,100137],{"class":59,"line":16985},[57,100138,94125],{"class":74},[57,100140,100141],{"class":59,"line":17008},[57,100142,99781],{"class":74},[57,100144,100145],{"class":59,"line":17030},[57,100146,99786],{"class":74},[57,100148,100149],{"class":59,"line":17035},[57,100150,99791],{"class":74},[57,100152,100153],{"class":59,"line":17041},[57,100154,99796],{"class":74},[57,100156,100157],{"class":59,"line":17055},[57,100158,99801],{"class":74},[57,100160,100161],{"class":59,"line":17068},[57,100162,99806],{"class":74},[57,100164,100165],{"class":59,"line":17073},[57,100166,94125],{"class":74},[57,100168,100169,100172,100174],{"class":59,"line":17087},[57,100170,100171],{"class":140},"np.hsplit(aa,",[57,100173,270],{"class":81},[57,100175,238],{"class":140},[57,100177,100178],{"class":59,"line":17092},[57,100179,93761],{"class":63},[57,100181,100182],{"class":59,"line":17098},[57,100183,94125],{"class":74},[57,100185,100186],{"class":59,"line":17103},[57,100187,99901],{"class":74},[57,100189,100190],{"class":59,"line":17117},[57,100191,99906],{"class":74},[57,100193,100194],{"class":59,"line":17122},[57,100195,99911],{"class":74},[57,100197,100198],{"class":59,"line":17127},[57,100199,99916],{"class":74},[57,100201,100202],{"class":59,"line":17141},[57,100203,99921],{"class":74},[57,100205,100206],{"class":59,"line":17153},[57,100207,99926],{"class":74},[57,100209,100210],{"class":59,"line":17158},[57,100211,99931],{"class":74},[57,100213,100214],{"class":59,"line":17171},[57,100215,99936],{"class":74},[57,100217,100218],{"class":59,"line":17176},[57,100219,99941],{"class":74},[57,100221,100222],{"class":59,"line":17181},[57,100223,99946],{"class":74},[57,100225,100226],{"class":59,"line":17186},[57,100227,99951],{"class":74},[57,100229,100230],{"class":59,"line":17199},[57,100231,99956],{"class":74},[57,100233,100234],{"class":59,"line":17204},[57,100235,99961],{"class":74},[57,100237,100238],{"class":59,"line":32830},[57,100239,99966],{"class":74},[57,100241,100242],{"class":59,"line":32836},[57,100243,99971],{"class":74},[57,100245,100246],{"class":59,"line":32842},[57,100247,99976],{"class":74},[57,100249,100250],{"class":59,"line":32848},[57,100251,99981],{"class":74},[57,100253,100254],{"class":59,"line":32854},[57,100255,99986],{"class":74},[57,100257,100258],{"class":59,"line":32865},[57,100259,94125],{"class":74},[57,100261,100262,100265,100267,100269,100271],{"class":59,"line":32871},[57,100263,100264],{"class":140},"np.vsplit(aa,[",[57,100266,498],{"class":81},[57,100268,273],{"class":140},[57,100270,736],{"class":81},[57,100272,4930],{"class":140},[57,100274,100275],{"class":59,"line":32891},[57,100276,93761],{"class":63},[57,100278,100279],{"class":59,"line":32897},[57,100280,94125],{"class":74},[57,100282,100283],{"class":59,"line":32908},[57,100284,99781],{"class":74},[57,100286,100287],{"class":59,"line":32914},[57,100288,99786],{"class":74},[57,100290,100291],{"class":59,"line":32920},[57,100292,99791],{"class":74},[57,100294,100295],{"class":59,"line":32926},[57,100296,99853],{"class":74},[57,100298,100299],{"class":59,"line":32932},[57,100300,99858],{"class":74},[57,100302,100303],{"class":59,"line":32938},[57,100304,99863],{"class":74},[57,100306,100307],{"class":59,"line":32944},[57,100308,99811],{"class":74},[342,100310,100311],{},"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":46,"searchDepth":67,"depth":67,"links":100313},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99579,"description":347},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100320,"title":100321,"body":100322,"description":347,"extension":348,"meta":100816,"navigation":350,"path":100817,"seo":100818,"stem":100819,"__hash__":100820},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100323,"toc":100807},[100324,100327,100330,100355,100359,100418,100470,100474,100476,100512,100566,100568,100606,100677,100681,100686,100690,100693,100726,100729,100733,100736,100739,100742,100745,100750,100754,100757,100760,100763,100766,100771,100775,100780,100783,100804],[10,100325,100321],{"id":100326},"_9数学函数",[14,100328,100329],{},"补充回顾：python的列表推导式",[49,100331,100333],{"className":122,"code":100332,"language":124,"meta":46,"style":46},"[1\u002Fi for i in a]\n",[28,100334,100335],{"__ignoreMap":46},[57,100336,100337,100339,100341,100343,100346,100348,100350,100352],{"class":59,"line":60},[57,100338,1306],{"class":140},[57,100340,635],{"class":81},[57,100342,1000],{"class":136},[57,100344,100345],{"class":140},"i ",[57,100347,3298],{"class":136},[57,100349,9711],{"class":140},[57,100351,26312],{"class":136},[57,100353,100354],{"class":140}," a]\n",[365,100356,100358],{"id":100357},"_91-求倒数","9.1 求倒数",[49,100360,100362],{"className":122,"code":100361,"language":124,"meta":46,"style":46},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[28,100363,100364,100369,100397,100409],{"__ignoreMap":46},[57,100365,100366],{"class":59,"line":60},[57,100367,100368],{"class":63},"#数组求倒数\n",[57,100370,100371,100373,100375,100377,100379,100381,100383,100385,100387,100389,100391,100393,100395],{"class":59,"line":67},[57,100372,18],{"class":140},[57,100374,156],{"class":136},[57,100376,1306],{"class":140},[57,100378,635],{"class":81},[57,100380,273],{"class":140},[57,100382,498],{"class":81},[57,100384,273],{"class":140},[57,100386,270],{"class":81},[57,100388,273],{"class":140},[57,100390,710],{"class":81},[57,100392,273],{"class":140},[57,100394,736],{"class":81},[57,100396,33443],{"class":140},[57,100398,100399,100401,100403,100406],{"class":59,"line":144},[57,100400,680],{"class":140},[57,100402,156],{"class":136},[57,100404,100405],{"class":140},"np.array(a)",[57,100407,100408],{"class":63},"#将列表转换为数组\n",[57,100410,100411,100413,100415],{"class":59,"line":150},[57,100412,635],{"class":81},[57,100414,1000],{"class":136},[57,100416,100417],{"class":140},"b\n",[49,100419,100421],{"className":122,"code":100420,"language":124,"meta":46,"style":46},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[28,100422,100423,100451,100460,100465],{"__ignoreMap":46},[57,100424,100425,100427,100429,100431,100433,100435,100437,100439,100441,100443,100445,100447,100449],{"class":59,"line":60},[57,100426,18],{"class":140},[57,100428,156],{"class":136},[57,100430,1306],{"class":140},[57,100432,635],{"class":81},[57,100434,273],{"class":140},[57,100436,498],{"class":81},[57,100438,273],{"class":140},[57,100440,270],{"class":81},[57,100442,273],{"class":140},[57,100444,710],{"class":81},[57,100446,273],{"class":140},[57,100448,736],{"class":81},[57,100450,33443],{"class":140},[57,100452,100453,100455,100457],{"class":59,"line":67},[57,100454,680],{"class":140},[57,100456,156],{"class":136},[57,100458,100459],{"class":140},"np.array(a)\n",[57,100461,100462],{"class":59,"line":144},[57,100463,100464],{"class":63},"#调用numpy中的函数reciprocal()\n",[57,100466,100467],{"class":59,"line":150},[57,100468,100469],{"class":140},"np.reciprocal(b)\n",[365,100471,100473],{"id":100472},"_92-求平方","9.2 求平方",[14,100475,94727],{},[49,100477,100479],{"className":122,"code":100478,"language":124,"meta":46,"style":46},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[28,100480,100481,100486,100491,100507],{"__ignoreMap":46},[57,100482,100483],{"class":59,"line":60},[57,100484,100485],{"class":63},"#square()，求平方\n",[57,100487,100488],{"class":59,"line":67},[57,100489,100490],{"class":63},"#一维数组\n",[57,100492,100493,100495,100497,100499,100501,100503,100505],{"class":59,"line":144},[57,100494,18],{"class":140},[57,100496,156],{"class":136},[57,100498,93199],{"class":140},[57,100500,635],{"class":81},[57,100502,273],{"class":140},[57,100504,862],{"class":81},[57,100506,238],{"class":140},[57,100508,100509],{"class":59,"line":150},[57,100510,100511],{"class":140},"np.square(a)\n",[49,100513,100515],{"className":122,"code":100514,"language":124,"meta":46,"style":46},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[28,100516,100517,100522,100527,100548],{"__ignoreMap":46},[57,100518,100519],{"class":59,"line":60},[57,100520,100521],{"class":63},"#或者通过循环遍历的形式来计算\n",[57,100523,100524],{"class":59,"line":67},[57,100525,100526],{"class":63},"#这是一个列表\n",[57,100528,100529,100532,100534,100536,100538,100540,100542,100545],{"class":59,"line":144},[57,100530,100531],{"class":140},"[i",[57,100533,871],{"class":136},[57,100535,100345],{"class":140},[57,100537,3298],{"class":136},[57,100539,9711],{"class":140},[57,100541,26312],{"class":136},[57,100543,100544],{"class":140}," a]",[57,100546,100547],{"class":63},"#这个求完之后在数列当中\n",[57,100549,100550,100553,100555,100557,100559,100561,100563],{"class":59,"line":150},[57,100551,100552],{"class":140},"np.array([i",[57,100554,871],{"class":136},[57,100556,100345],{"class":140},[57,100558,3298],{"class":136},[57,100560,9711],{"class":140},[57,100562,26312],{"class":136},[57,100564,100565],{"class":140}," a])\n",[14,100567,93488],{},[49,100569,100571],{"className":122,"code":100570,"language":124,"meta":46,"style":46},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[28,100572,100573,100577,100601],{"__ignoreMap":46},[57,100574,100575],{"class":59,"line":60},[57,100576,93498],{"class":63},[57,100578,100579,100581,100583,100585,100587,100589,100591,100593,100595,100597,100599],{"class":59,"line":67},[57,100580,93503],{"class":140},[57,100582,156],{"class":136},[57,100584,93199],{"class":140},[57,100586,635],{"class":81},[57,100588,273],{"class":140},[57,100590,939],{"class":81},[57,100592,93204],{"class":140},[57,100594,710],{"class":81},[57,100596,273],{"class":140},[57,100598,270],{"class":81},[57,100600,238],{"class":140},[57,100602,100603],{"class":59,"line":144},[57,100604,100605],{"class":140},"np.square(aa)\n",[49,100607,100609],{"className":122,"code":100608,"language":124,"meta":46,"style":46},"#传统的方式\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",[28,100610,100611,100616,100625,100641,100657,100672],{"__ignoreMap":46},[57,100612,100613],{"class":59,"line":60},[57,100614,100615],{"class":63},"#传统的方式\n",[57,100617,100618,100620,100622],{"class":59,"line":67},[57,100619,98384],{"class":140},[57,100621,156],{"class":136},[57,100623,100624],{"class":140},"np.empty_like(aa)\n",[57,100626,100627,100629,100631,100633,100635,100637,100639],{"class":59,"line":144},[57,100628,3298],{"class":136},[57,100630,9711],{"class":140},[57,100632,26312],{"class":136},[57,100634,32640],{"class":81},[57,100636,168],{"class":140},[57,100638,710],{"class":81},[57,100640,30983],{"class":140},[57,100642,100643,100645,100647,100649,100651,100653,100655],{"class":59,"line":150},[57,100644,3474],{"class":136},[57,100646,9773],{"class":140},[57,100648,26312],{"class":136},[57,100650,32640],{"class":81},[57,100652,168],{"class":140},[57,100654,270],{"class":81},[57,100656,30983],{"class":140},[57,100658,100659,100662,100664,100667,100669],{"class":59,"line":162},[57,100660,100661],{"class":140},"        bb[i,j]",[57,100663,156],{"class":136},[57,100665,100666],{"class":140},"aa[i,j]",[57,100668,871],{"class":136},[57,100670,100671],{"class":140},"aa[i,j]\n",[57,100673,100674],{"class":59,"line":180},[57,100675,100676],{"class":140},"bb\n",[365,100678,100680],{"id":100679},"_93-求各元素的符号","9.3 求各元素的符号",[14,100682,100683],{},[44,100684],{"alt":46,"src":100685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[365,100687,100689],{"id":100688},"_94-modf函数","9.4 modf函数",[14,100691,100692],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[49,100694,100696],{"className":122,"code":100695,"language":124,"meta":46,"style":46},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[28,100697,100698,100721],{"__ignoreMap":46},[57,100699,100700,100702,100704,100706,100708,100710,100712,100714,100716,100719],{"class":59,"line":60},[57,100701,18],{"class":140},[57,100703,156],{"class":136},[57,100705,93199],{"class":140},[57,100707,948],{"class":136},[57,100709,862],{"class":81},[57,100711,273],{"class":140},[57,100713,862],{"class":81},[57,100715,273],{"class":140},[57,100717,100718],{"class":81},"0.3",[57,100720,238],{"class":140},[57,100722,100723],{"class":59,"line":67},[57,100724,100725],{"class":140},"np.modf(a)\n",[14,100727,100728],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[365,100730,100732],{"id":100731},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,100734,100735],{},"np.cell()",[14,100737,100738],{},"np.floor()",[14,100740,100741],{},"np.rint()",[14,100743,100744],{},"对各元素分别向上取整、向下取整、四舍五入",[14,100746,100747],{},[44,100748],{"alt":46,"src":100749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[365,100751,100753],{"id":100752},"_96-around函数","9.6 around()函数",[14,100755,100756],{},"around()函数也可以实现对数的小数位数进行操作",[14,100758,100759],{},"其中的参数：",[14,100761,100762],{},"1.要传的数组",[14,100764,100765],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,100767,100768],{},[44,100769],{"alt":46,"src":100770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[365,100772,100774],{"id":100773},"_97-三角函数","9.7 三角函数",[14,100776,100777],{},[44,100778],{"alt":46,"src":100779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,100781,100782],{},"引入图像模块非常重要",[49,100784,100786],{"className":122,"code":100785,"language":124,"meta":46,"style":46},"from matplotlib import pyplot as plt\n",[28,100787,100788],{"__ignoreMap":46},[57,100789,100790,100792,100795,100797,100800,100802],{"class":59,"line":60},[57,100791,30934],{"class":136},[57,100793,100794],{"class":140}," matplotlib ",[57,100796,137],{"class":136},[57,100798,100799],{"class":140}," pyplot ",[57,100801,31580],{"class":136},[57,100803,31634],{"class":140},[342,100805,100806],{},"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":46,"searchDepth":67,"depth":67,"links":100808},[100809,100810,100811,100812,100813,100814,100815],{"id":100357,"depth":67,"text":100358},{"id":100472,"depth":67,"text":100473},{"id":100679,"depth":67,"text":100680},{"id":100688,"depth":67,"text":100689},{"id":100731,"depth":67,"text":100732},{"id":100752,"depth":67,"text":100753},{"id":100773,"depth":67,"text":100774},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100321,"description":347},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100822,"title":100823,"body":100824,"description":347,"extension":348,"meta":100828,"navigation":350,"path":100829,"seo":100830,"stem":100831,"__hash__":100832},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100825,"toc":100826},[],{"title":46,"searchDepth":67,"depth":67,"links":100827},[],{"category":50617},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100823,"description":347},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100834,"title":100835,"body":100836,"description":46,"extension":348,"meta":102844,"navigation":350,"path":102845,"seo":102846,"stem":102847,"__hash__":102848},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100837,"toc":102820},[100838,100841,100845,100848,100851,100857,100860,100883,100886,100920,100923,100964,100968,100971,101064,101067,101111,101114,101131,101134,101148,101151,101154,101199,101202,101239,101243,101246,101252,101257,101277,101281,101284,101350,101353,101371,101375,101378,101407,101417,101423,101427,101430,101436,101447,101451,101454,101484,101487,101767,101770,101773,101784,101787,101790,101812,101819,101822,101840,101843,101846,101860,101868,101871,101897,101903,101906,101909,101919,101931,101951,101960,101980,101990,102014,102027,102041,102046,102087,102104,102129,102141,102161,102167,102212,102231,102248,102261,102277,102284,102296,102305,102340,102361,102386,102399,102423,102438,102463,102466,102487,102496,102499,102510,102514,102517,102523,102535,102542,102546,102549,102561,102564,102578,102581,102591,102601,102604,102644,102647,102651,102657,102660,102674,102678,102681,102714,102718,102721,102744,102752,102755,102761,102767,102770,102773,102801,102805,102808,102814,102817],[10,100839,100835],{"id":100840},"_1环境安装与第一个-mujoco-程序",[365,100842,100844],{"id":100843},"_1目标说明","1.目标说明",[14,100846,100847],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,100849,100850],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[49,100852,100855],{"className":100853,"code":100854,"language":5460,"meta":46},[5458],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[28,100856,100854],{"__ignoreMap":46},[14,100858,100859],{},"需要掌握:",[377,100861,100862,100865,100868,100873,100878],{},[380,100863,100864],{},"Fedora 44 下 MuJoCo 的系统依赖",[380,100866,100867],{},"Python 虚拟环境创建",[380,100869,100870],{},[28,100871,100872],{},"mujoco.MjModel",[380,100874,100875],{},[28,100876,100877],{},"mujoco.MjData",[380,100879,100880],{},[28,100881,100882],{},"mujoco.mj_step(model, data)",[14,100884,100885],{},"MuJoCo 中最重要的两个对象:",[557,100887,100888,100898],{},[560,100889,100890],{},[563,100891,100892,100895],{},[566,100893,100894],{"align":24008},"对象",[566,100896,100897],{"align":24008},"含义",[603,100899,100900,100910],{},[563,100901,100902,100907],{},[608,100903,100904],{"align":24008},[28,100905,100906],{},"MjModel",[608,100908,100909],{"align":24008},"模型结构，来自 XML，基本不随时间变化",[563,100911,100912,100917],{},[608,100913,100914],{"align":24008},[28,100915,100916],{},"MjData",[608,100918,100919],{"align":24008},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,100921,100922],{},"可以先用一个类比理解：",[557,100924,100925,100935],{},[560,100926,100927],{},[563,100928,100929,100932],{},[566,100930,100931],{"align":24008},"类比",[566,100933,100934],{"align":24008},"MuJoCo 对象",[603,100936,100937,100946,100955],{},[563,100938,100939,100942],{},[608,100940,100941],{"align":24008},"游戏地图和角色配置",[608,100943,100944],{"align":24008},[28,100945,100906],{},[563,100947,100948,100951],{},[608,100949,100950],{"align":24008},"游戏运行到当前帧的状态",[608,100952,100953],{"align":24008},[28,100954,100916],{},[563,100956,100957,100960],{},[608,100958,100959],{"align":24008},"前进一帧",[608,100961,100962],{"align":24008},[28,100963,100882],{},[365,100965,100967],{"id":100966},"_2环境与依赖安装","2.环境与依赖安装",[14,100969,100970],{},"Fedora 44 系统依赖:",[49,100972,100974],{"className":51,"code":100973,"language":53,"meta":46,"style":46},"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",[28,100975,100976,100988,101001,101014,101024,101034,101053],{"__ignoreMap":46},[57,100977,100978,100980,100982,100984,100986],{"class":59,"line":60},[57,100979,24845],{"class":70},[57,100981,26584],{"class":74},[57,100983,75],{"class":74},[57,100985,26669],{"class":81},[57,100987,24947],{"class":81},[57,100989,100990,100993,100996,100999],{"class":59,"line":67},[57,100991,100992],{"class":74},"  python3",[57,100994,100995],{"class":74}," python3-pip",[57,100997,100998],{"class":74}," python3-virtualenv",[57,101000,24947],{"class":81},[57,101002,101003,101006,101009,101012],{"class":59,"line":144},[57,101004,101005],{"class":74},"  mesa-libGL",[57,101007,101008],{"class":74}," mesa-libGLU",[57,101010,101011],{"class":74}," mesa-dri-drivers",[57,101013,24947],{"class":81},[57,101015,101016,101019,101022],{"class":59,"line":150},[57,101017,101018],{"class":74},"  libglvnd-glx",[57,101020,101021],{"class":74}," libglvnd-opengl",[57,101023,24947],{"class":81},[57,101025,101026,101029,101032],{"class":59,"line":162},[57,101027,101028],{"class":74},"  glfw",[57,101030,101031],{"class":74}," glfw-devel",[57,101033,24947],{"class":81},[57,101035,101036,101039,101042,101045,101048,101051],{"class":59,"line":180},[57,101037,101038],{"class":74},"  libX11",[57,101040,101041],{"class":74}," libXcursor",[57,101043,101044],{"class":74}," libXi",[57,101046,101047],{"class":74}," libXinerama",[57,101049,101050],{"class":74}," libXrandr",[57,101052,24947],{"class":81},[57,101054,101055,101058,101061],{"class":59,"line":186},[57,101056,101057],{"class":74},"  gcc",[57,101059,101060],{"class":74}," gcc-c++",[57,101062,101063],{"class":74}," make\n",[14,101065,101066],{},"创建 Python 环境:",[49,101068,101070],{"className":51,"code":101069,"language":53,"meta":46,"style":46},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[28,101071,101072,101086,101094],{"__ignoreMap":46},[57,101073,101074,101077,101080,101083],{"class":59,"line":60},[57,101075,101076],{"class":70},"python3",[57,101078,101079],{"class":81}," -m",[57,101081,101082],{"class":74}," venv",[57,101084,101085],{"class":74}," .venv\n",[57,101087,101088,101091],{"class":59,"line":67},[57,101089,101090],{"class":81},"source",[57,101092,101093],{"class":74}," .venv\u002Fbin\u002Factivate\n",[57,101095,101096,101098,101100,101103,101105,101108],{"class":59,"line":144},[57,101097,124],{"class":70},[57,101099,101079],{"class":81},[57,101101,101102],{"class":74}," pip",[57,101104,75],{"class":74},[57,101106,101107],{"class":81}," --upgrade",[57,101109,101110],{"class":74}," pip\n",[14,101112,101113],{},"pip 安装:",[49,101115,101117],{"className":51,"code":101116,"language":53,"meta":46,"style":46},"pip install \"mujoco>=2.3\" numpy\n",[28,101118,101119],{"__ignoreMap":46},[57,101120,101121,101123,101125,101128],{"class":59,"line":60},[57,101122,24101],{"class":70},[57,101124,75],{"class":74},[57,101126,101127],{"class":74}," \"mujoco>=2.3\"",[57,101129,101130],{"class":74}," numpy\n",[14,101132,101133],{},"安装完成后，先做最小检查：",[49,101135,101137],{"className":51,"code":101136,"language":53,"meta":46,"style":46},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[28,101138,101139],{"__ignoreMap":46},[57,101140,101141,101143,101145],{"class":59,"line":60},[57,101142,124],{"class":70},[57,101144,102],{"class":81},[57,101146,101147],{"class":74}," \"import mujoco; print(mujoco.__version__)\"\n",[14,101149,101150],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,101152,101153],{},"conda 安装:",[49,101155,101157],{"className":51,"code":101156,"language":53,"meta":46,"style":46},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[28,101158,101159,101179,101189],{"__ignoreMap":46},[57,101160,101161,101163,101165,101167,101170,101173,101176],{"class":59,"line":60},[57,101162,71],{"class":70},[57,101164,29445],{"class":74},[57,101166,25384],{"class":81},[57,101168,101169],{"class":74}," mujoco-study",[57,101171,101172],{"class":74}," python=",[57,101174,101175],{"class":81},"3.10",[57,101177,101178],{"class":81}," -y\n",[57,101180,101181,101183,101186],{"class":59,"line":67},[57,101182,71],{"class":70},[57,101184,101185],{"class":74}," activate",[57,101187,101188],{"class":74}," mujoco-study\n",[57,101190,101191,101193,101195,101197],{"class":59,"line":144},[57,101192,24101],{"class":70},[57,101194,75],{"class":74},[57,101196,101127],{"class":74},[57,101198,101130],{"class":74},[14,101200,101201],{},"版本冲突说明:",[377,101203,101204,101210,101220,101229],{},[380,101205,101206,101207,28654],{},"不要安装 ",[28,101208,101209],{},"mujoco-py",[380,101211,101212,101213,101215,101216,101219],{},"如果旧项目里同时安装了 ",[28,101214,101209],{}," 和 ",[28,101217,101218],{},"mujoco","，建议新建干净虚拟环境。",[380,101221,101222,101225,101226,28654],{},[28,101223,101224],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[28,101227,101228],{},"~\u002F.mujoco\u002Fmujoco210",[380,101230,101231,101232,82736,101235,101238],{},"离屏渲染可能涉及 OpenGL 后端，",[28,101233,101234],{},"MUJOCO_GL=egl",[28,101236,101237],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[365,101240,101242],{"id":101241},"_3核心概念解释","3.核心概念解释",[14,101244,101245],{},"MuJoCo 的基本执行流程:",[49,101247,101250],{"className":101248,"code":101249,"language":5460,"meta":46},[5458],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[28,101251,101249],{"__ignoreMap":46},[14,101253,101254,101256],{},[28,101255,100906],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,101258,101259,101261,101262,630,101265,630,101268,630,101271,630,101274,28654],{},[28,101260,100916],{}," 存放仿真运行时状态，例如 ",[28,101263,101264],{},"data.time",[28,101266,101267],{},"data.qpos",[28,101269,101270],{},"data.qvel",[28,101272,101273],{},"data.ctrl",[28,101275,101276],{},"data.xpos",[394,101278,101280],{"id":101279},"xml-是什么","XML 是什么",[14,101282,101283],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[49,101285,101287],{"className":53264,"code":101286,"language":53266,"meta":46,"style":46},"\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",[28,101288,101289,101311,101342],{"__ignoreMap":46},[57,101290,101291,101293,101295,101297,101299,101301,101304,101306,101309],{"class":59,"line":60},[57,101292,1326],{"class":140},[57,101294,51997],{"class":51497},[57,101296,15192],{"class":70},[57,101298,156],{"class":140},[57,101300,53688],{"class":74},[57,101302,101303],{"class":70}," pos",[57,101305,156],{"class":140},[57,101307,101308],{"class":74},"\"0 0 1\"",[57,101310,51504],{"class":140},[57,101312,101313,101315,101318,101320,101322,101325,101327,101329,101331,101334,101336,101339],{"class":59,"line":67},[57,101314,52341],{"class":140},[57,101316,101317],{"class":51497},"geom",[57,101319,15192],{"class":70},[57,101321,156],{"class":140},[57,101323,101324],{"class":74},"\"box_geom\"",[57,101326,54021],{"class":70},[57,101328,156],{"class":140},[57,101330,53688],{"class":74},[57,101332,101333],{"class":70}," size",[57,101335,156],{"class":140},[57,101337,101338],{"class":74},"\"0.1 0.1 0.1\"",[57,101340,101341],{"class":140},"\u002F>\n",[57,101343,101344,101346,101348],{"class":59,"line":144},[57,101345,51982],{"class":140},[57,101347,51997],{"class":51497},[57,101349,51504],{"class":140},[14,101351,101352],{},"这段意思是：",[377,101354,101355,101361,101368],{},[380,101356,101357,101358,101360],{},"创建一个叫 ",[28,101359,53911],{}," 的刚体。",[380,101362,101363,101364,101367],{},"它初始放在 ",[28,101365,101366],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[380,101369,101370],{},"它里面有一个盒子形状的几何体。",[394,101372,101374],{"id":101373},"timestep-是什么","timestep 是什么",[14,101376,101377],{},"XML 里的：",[49,101379,101381],{"className":53264,"code":101380,"language":53266,"meta":46,"style":46},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[28,101382,101383],{"__ignoreMap":46},[57,101384,101385,101387,101389,101392,101394,101397,101400,101402,101405],{"class":59,"line":60},[57,101386,1326],{"class":140},[57,101388,69363],{"class":51497},[57,101390,101391],{"class":70}," timestep",[57,101393,156],{"class":140},[57,101395,101396],{"class":74},"\"0.01\"",[57,101398,101399],{"class":70}," gravity",[57,101401,156],{"class":140},[57,101403,101404],{"class":74},"\"0 0 -9.81\"",[57,101406,101341],{"class":140},[14,101408,101409,101410,101413,101414,101416],{},"表示每调用一次 ",[28,101411,101412],{},"mj_step","，仿真时间前进 ",[28,101415,39183],{}," 秒。循环 100 次，大约就是 1 秒：",[49,101418,101421],{"className":101419,"code":101420,"language":5460,"meta":46},[5458],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[28,101422,101420],{"__ignoreMap":46},[394,101424,101426],{"id":101425},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,101428,101429],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[49,101431,101434],{"className":101432,"code":101433,"language":5460,"meta":46},[5458],"x y z qw qx qy qz\n",[28,101435,101433],{"__ignoreMap":46},[14,101437,101438,101439,101442,101443,101446],{},"表示一个自由刚体的位置和姿态。其中 ",[28,101440,101441],{},"x y z"," 是位置，",[28,101444,101445],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[365,101448,101450],{"id":101449},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,101452,101453],{},"新建文件:",[49,101455,101457],{"className":51,"code":101456,"language":53,"meta":46,"style":46},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[28,101458,101459,101469,101476],{"__ignoreMap":46},[57,101460,101461,101464,101466],{"class":59,"line":60},[57,101462,101463],{"class":70},"mkdir",[57,101465,29485],{"class":81},[57,101467,101468],{"class":74}," mujoco_tutorial\n",[57,101470,101471,101474],{"class":59,"line":67},[57,101472,101473],{"class":81},"cd",[57,101475,101468],{"class":74},[57,101477,101478,101481],{"class":59,"line":144},[57,101479,101480],{"class":70},"touch",[57,101482,101483],{"class":74}," ch1_first_sim.py\n",[14,101485,101486],{},"写入:",[49,101488,101490],{"className":122,"code":101489,"language":124,"meta":46,"style":46},"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",[28,101491,101492,101499,101503,101507,101517,101522,101527,101531,101536,101541,101545,101550,101555,101560,101565,101570,101575,101579,101583,101587,101600,101614,101624,101628,101640,101652,101664,101676,101688,101692,101709,101714,101718,101729,101740,101744,101748,101762],{"__ignoreMap":46},[57,101493,101494,101496],{"class":59,"line":60},[57,101495,137],{"class":136},[57,101497,101498],{"class":140}," mujoco\n",[57,101500,101501],{"class":59,"line":67},[57,101502,2673],{"emptyLinePlaceholder":350},[57,101504,101505],{"class":59,"line":144},[57,101506,2673],{"emptyLinePlaceholder":350},[57,101508,101509,101512,101514],{"class":59,"line":150},[57,101510,101511],{"class":81},"XML",[57,101513,13837],{"class":136},[57,101515,101516],{"class":74}," \"\"\"\n",[57,101518,101519],{"class":59,"line":162},[57,101520,101521],{"class":74},"\u003Cmujoco model=\"first_sim\">\n",[57,101523,101524],{"class":59,"line":180},[57,101525,101526],{"class":74},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[57,101528,101529],{"class":59,"line":186},[57,101530,2673],{"emptyLinePlaceholder":350},[57,101532,101533],{"class":59,"line":197},[57,101534,101535],{"class":74},"  \u003Cworldbody>\n",[57,101537,101538],{"class":59,"line":241},[57,101539,101540],{"class":74},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[57,101542,101543],{"class":59,"line":249},[57,101544,2673],{"emptyLinePlaceholder":350},[57,101546,101547],{"class":59,"line":262},[57,101548,101549],{"class":74},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[57,101551,101552],{"class":59,"line":281},[57,101553,101554],{"class":74},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[57,101556,101557],{"class":59,"line":287},[57,101558,101559],{"class":74},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[57,101561,101562],{"class":59,"line":298},[57,101563,101564],{"class":74},"    \u003C\u002Fbody>\n",[57,101566,101567],{"class":59,"line":311},[57,101568,101569],{"class":74},"  \u003C\u002Fworldbody>\n",[57,101571,101572],{"class":59,"line":322},[57,101573,101574],{"class":74},"\u003C\u002Fmujoco>\n",[57,101576,101577],{"class":59,"line":1929},[57,101578,95895],{"class":74},[57,101580,101581],{"class":59,"line":1950},[57,101582,2673],{"emptyLinePlaceholder":350},[57,101584,101585],{"class":59,"line":1955},[57,101586,2673],{"emptyLinePlaceholder":350},[57,101588,101589,101591,101593,101596,101598],{"class":59,"line":1969},[57,101590,32144],{"class":136},[57,101592,2246],{"class":70},[57,101594,101595],{"class":140},"() -> ",[57,101597,95883],{"class":81},[57,101599,4012],{"class":140},[57,101601,101602,101605,101607,101610,101612],{"class":59,"line":1974},[57,101603,101604],{"class":140},"    model ",[57,101606,156],{"class":136},[57,101608,101609],{"class":140}," mujoco.MjModel.from_xml_string(",[57,101611,101511],{"class":81},[57,101613,238],{"class":140},[57,101615,101616,101619,101621],{"class":59,"line":2001},[57,101617,101618],{"class":140},"    data ",[57,101620,156],{"class":136},[57,101622,101623],{"class":140}," mujoco.MjData(model)\n",[57,101625,101626],{"class":59,"line":2006},[57,101627,2673],{"emptyLinePlaceholder":350},[57,101629,101630,101632,101634,101637],{"class":59,"line":2023},[57,101631,31496],{"class":81},[57,101633,168],{"class":140},[57,101635,101636],{"class":74},"\"nq:\"",[57,101638,101639],{"class":140},", model.nq)\n",[57,101641,101642,101644,101646,101649],{"class":59,"line":2028},[57,101643,31496],{"class":81},[57,101645,168],{"class":140},[57,101647,101648],{"class":74},"\"nv:\"",[57,101650,101651],{"class":140},", model.nv)\n",[57,101653,101654,101656,101658,101661],{"class":59,"line":2033},[57,101655,31496],{"class":81},[57,101657,168],{"class":140},[57,101659,101660],{"class":74},"\"nu:\"",[57,101662,101663],{"class":140},", model.nu)\n",[57,101665,101666,101668,101670,101673],{"class":59,"line":2038},[57,101667,31496],{"class":81},[57,101669,168],{"class":140},[57,101671,101672],{"class":74},"\"initial time:\"",[57,101674,101675],{"class":140},", data.time)\n",[57,101677,101678,101680,101682,101685],{"class":59,"line":2052},[57,101679,31496],{"class":81},[57,101681,168],{"class":140},[57,101683,101684],{"class":74},"\"initial qpos:\"",[57,101686,101687],{"class":140},", data.qpos.copy())\n",[57,101689,101690],{"class":59,"line":2057},[57,101691,2673],{"emptyLinePlaceholder":350},[57,101693,101694,101696,101699,101701,101703,101705,101707],{"class":59,"line":2850},[57,101695,3474],{"class":136},[57,101697,101698],{"class":140}," _ ",[57,101700,26312],{"class":136},[57,101702,32640],{"class":81},[57,101704,168],{"class":140},[57,101706,728],{"class":81},[57,101708,30983],{"class":140},[57,101710,101711],{"class":59,"line":2864},[57,101712,101713],{"class":140},"        mujoco.mj_step(model, data)\n",[57,101715,101716],{"class":59,"line":2872},[57,101717,2673],{"emptyLinePlaceholder":350},[57,101719,101720,101722,101724,101727],{"class":59,"line":2877},[57,101721,31496],{"class":81},[57,101723,168],{"class":140},[57,101725,101726],{"class":74},"\"final time:\"",[57,101728,101675],{"class":140},[57,101730,101731,101733,101735,101738],{"class":59,"line":2883},[57,101732,31496],{"class":81},[57,101734,168],{"class":140},[57,101736,101737],{"class":74},"\"final qpos:\"",[57,101739,101687],{"class":140},[57,101741,101742],{"class":59,"line":2889},[57,101743,2673],{"emptyLinePlaceholder":350},[57,101745,101746],{"class":59,"line":2894},[57,101747,2673],{"emptyLinePlaceholder":350},[57,101749,101750,101752,101754,101757,101760],{"class":59,"line":8221},[57,101751,1813],{"class":136},[57,101753,31417],{"class":81},[57,101755,101756],{"class":136}," ==",[57,101758,101759],{"class":74}," \"__main__\"",[57,101761,4012],{"class":140},[57,101763,101764],{"class":59,"line":8245},[57,101765,101766],{"class":140},"    main()\n",[394,101768,101769],{"id":101769},"代码逐段解释",[14,101771,101772],{},"导入库：",[49,101774,101776],{"className":122,"code":101775,"language":124,"meta":46,"style":46},"import mujoco\n",[28,101777,101778],{"__ignoreMap":46},[57,101779,101780,101782],{"class":59,"line":60},[57,101781,137],{"class":136},[57,101783,101498],{"class":140},[14,101785,101786],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,101788,101789],{},"定义 XML：",[49,101791,101793],{"className":122,"code":101792,"language":124,"meta":46,"style":46},"XML = \"\"\"\n...\n\"\"\"\n",[28,101794,101795,101803,101808],{"__ignoreMap":46},[57,101796,101797,101799,101801],{"class":59,"line":60},[57,101798,101511],{"class":81},[57,101800,13837],{"class":136},[57,101802,101516],{"class":74},[57,101804,101805],{"class":59,"line":67},[57,101806,101807],{"class":74},"...\n",[57,101809,101810],{"class":59,"line":144},[57,101811,95895],{"class":74},[14,101813,101814,101815,101818],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[28,101816,101817],{},"freejoint"," 的方块。",[14,101820,101821],{},"编译模型：",[49,101823,101825],{"className":122,"code":101824,"language":124,"meta":46,"style":46},"model = mujoco.MjModel.from_xml_string(XML)\n",[28,101826,101827],{"__ignoreMap":46},[57,101828,101829,101832,101834,101836,101838],{"class":59,"line":60},[57,101830,101831],{"class":140},"model ",[57,101833,156],{"class":136},[57,101835,101609],{"class":140},[57,101837,101511],{"class":81},[57,101839,238],{"class":140},[14,101841,101842],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,101844,101845],{},"创建数据：",[49,101847,101849],{"className":122,"code":101848,"language":124,"meta":46,"style":46},"data = mujoco.MjData(model)\n",[28,101850,101851],{"__ignoreMap":46},[57,101852,101853,101856,101858],{"class":59,"line":60},[57,101854,101855],{"class":140},"data ",[57,101857,156],{"class":136},[57,101859,101623],{"class":140},[14,101861,101862,101864,101865,101867],{},[28,101863,33598],{}," 会保存仿真当前状态。刚创建时，时间是 ",[28,101866,226],{},"，方块还在初始位置。",[14,101869,101870],{},"推进仿真：",[49,101872,101874],{"className":122,"code":101873,"language":124,"meta":46,"style":46},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[28,101875,101876,101892],{"__ignoreMap":46},[57,101877,101878,101880,101882,101884,101886,101888,101890],{"class":59,"line":60},[57,101879,3298],{"class":136},[57,101881,101698],{"class":140},[57,101883,26312],{"class":136},[57,101885,32640],{"class":81},[57,101887,168],{"class":140},[57,101889,728],{"class":81},[57,101891,30983],{"class":140},[57,101893,101894],{"class":59,"line":67},[57,101895,101896],{"class":140},"    mujoco.mj_step(model, data)\n",[14,101898,101899,101900,101902],{},"每次 ",[28,101901,101412],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[394,101904,101905],{"id":101905},"代码逐行细讲",[14,101907,101908],{},"下面把完整代码按新手视角拆开讲。",[49,101910,101911],{"className":122,"code":101775,"language":124,"meta":46,"style":46},[28,101912,101913],{"__ignoreMap":46},[57,101914,101915,101917],{"class":59,"line":60},[57,101916,137],{"class":136},[57,101918,101498],{"class":140},[14,101920,101921,101923,101924,630,101926,630,101928,28654],{},[28,101922,137],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[28,101925,100872],{},[28,101927,100877],{},[28,101929,101930],{},"mujoco.mj_step",[49,101932,101933],{"className":122,"code":101792,"language":124,"meta":46,"style":46},[28,101934,101935,101943,101947],{"__ignoreMap":46},[57,101936,101937,101939,101941],{"class":59,"line":60},[57,101938,101511],{"class":81},[57,101940,13837],{"class":136},[57,101942,101516],{"class":74},[57,101944,101945],{"class":59,"line":67},[57,101946,101807],{"class":74},[57,101948,101949],{"class":59,"line":144},[57,101950,95895],{"class":74},[14,101952,101953,101955,101956,101959],{},[28,101954,101511],{}," 是一个变量名。右边的三引号 ",[28,101957,101958],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[49,101961,101962],{"className":53264,"code":101521,"language":53266,"meta":46,"style":46},[28,101963,101964],{"__ignoreMap":46},[57,101965,101966,101968,101970,101973,101975,101978],{"class":59,"line":60},[57,101967,1326],{"class":140},[57,101969,101218],{"class":51497},[57,101971,101972],{"class":70}," model",[57,101974,156],{"class":140},[57,101976,101977],{"class":74},"\"first_sim\"",[57,101979,51504],{"class":140},[14,101981,101982,101983,101986,101987,28654],{},"这是 XML 的根标签。",[28,101984,101985],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[28,101988,101989],{},"first_sim",[49,101991,101992],{"className":53264,"code":101380,"language":53266,"meta":46,"style":46},[28,101993,101994],{"__ignoreMap":46},[57,101995,101996,101998,102000,102002,102004,102006,102008,102010,102012],{"class":59,"line":60},[57,101997,1326],{"class":140},[57,101999,69363],{"class":51497},[57,102001,101391],{"class":70},[57,102003,156],{"class":140},[57,102005,101396],{"class":74},[57,102007,101399],{"class":70},[57,102009,156],{"class":140},[57,102011,101404],{"class":74},[57,102013,101341],{"class":140},[14,102015,102016,102018,102019,102022,102023,102026],{},[28,102017,69363],{}," 用来设置仿真参数。",[28,102020,102021],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[28,102024,102025],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[49,102028,102030],{"className":53264,"code":102029,"language":53266,"meta":46,"style":46},"\u003Cworldbody>\n",[28,102031,102032],{"__ignoreMap":46},[57,102033,102034,102036,102039],{"class":59,"line":60},[57,102035,1326],{"class":140},[57,102037,102038],{"class":51497},"worldbody",[57,102040,51504],{"class":140},[14,102042,102043,102045],{},[28,102044,102038],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[49,102047,102049],{"className":53264,"code":102048,"language":53266,"meta":46,"style":46},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[28,102050,102051],{"__ignoreMap":46},[57,102052,102053,102055,102057,102059,102061,102064,102066,102068,102071,102073,102075,102078,102080,102082,102085],{"class":59,"line":60},[57,102054,1326],{"class":140},[57,102056,101317],{"class":51497},[57,102058,15192],{"class":70},[57,102060,156],{"class":140},[57,102062,102063],{"class":74},"\"floor\"",[57,102065,54021],{"class":70},[57,102067,156],{"class":140},[57,102069,102070],{"class":74},"\"plane\"",[57,102072,101333],{"class":70},[57,102074,156],{"class":140},[57,102076,102077],{"class":74},"\"2 2 0.1\"",[57,102079,78964],{"class":70},[57,102081,156],{"class":140},[57,102083,102084],{"class":74},"\"0.8 0.8 0.8 1\"",[57,102086,101341],{"class":140},[14,102088,102089,102090,102092,102093,102096,102097,102100,102101,102103],{},"这行创建地面。",[28,102091,101317],{}," 是几何体。",[28,102094,102095],{},"name=\"floor\""," 是名字。",[28,102098,102099],{},"type=\"plane\""," 表示平面。",[28,102102,55307],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[49,102105,102107],{"className":53264,"code":102106,"language":53266,"meta":46,"style":46},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[28,102108,102109],{"__ignoreMap":46},[57,102110,102111,102113,102115,102117,102119,102121,102123,102125,102127],{"class":59,"line":60},[57,102112,1326],{"class":140},[57,102114,51997],{"class":51497},[57,102116,15192],{"class":70},[57,102118,156],{"class":140},[57,102120,53688],{"class":74},[57,102122,101303],{"class":70},[57,102124,156],{"class":140},[57,102126,101308],{"class":74},[57,102128,51504],{"class":140},[14,102130,102131,102132,28654,102134,102137,102138,102140],{},"这行创建一个刚体，名字叫 ",[28,102133,53911],{},[28,102135,102136],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[28,102139,101366],{},"，也就是离地面 1 米高。",[49,102142,102144],{"className":53264,"code":102143,"language":53266,"meta":46,"style":46},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[28,102145,102146],{"__ignoreMap":46},[57,102147,102148,102150,102152,102154,102156,102159],{"class":59,"line":60},[57,102149,1326],{"class":140},[57,102151,101817],{"class":51497},[57,102153,15192],{"class":70},[57,102155,156],{"class":140},[57,102157,102158],{"class":74},"\"box_free\"",[57,102160,101341],{"class":140},[14,102162,102163,102164,102166],{},"这行很重要。",[28,102165,101817],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[49,102168,102170],{"className":53264,"code":102169,"language":53266,"meta":46,"style":46},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[28,102171,102172],{"__ignoreMap":46},[57,102173,102174,102176,102178,102180,102182,102184,102186,102188,102190,102192,102194,102196,102199,102201,102203,102205,102207,102210],{"class":59,"line":60},[57,102175,1326],{"class":140},[57,102177,101317],{"class":51497},[57,102179,15192],{"class":70},[57,102181,156],{"class":140},[57,102183,101324],{"class":74},[57,102185,54021],{"class":70},[57,102187,156],{"class":140},[57,102189,53688],{"class":74},[57,102191,101333],{"class":70},[57,102193,156],{"class":140},[57,102195,101338],{"class":74},[57,102197,102198],{"class":70}," mass",[57,102200,156],{"class":140},[57,102202,3951],{"class":74},[57,102204,78964],{"class":70},[57,102206,156],{"class":140},[57,102208,102209],{"class":74},"\"1 0 0 1\"",[57,102211,101341],{"class":140},[14,102213,102214,102215,102218,102219,102222,102223,102226,102227,102230],{},"这行给 box body 添加一个盒子形状。",[28,102216,102217],{},"type=\"box\""," 表示形状是盒子。",[28,102220,102221],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[28,102224,102225],{},"mass=\"1\""," 表示质量是 1。",[28,102228,102229],{},"rgba=\"1 0 0 1\""," 表示红色。",[49,102232,102234],{"className":122,"code":102233,"language":124,"meta":46,"style":46},"def main() -> None:\n",[28,102235,102236],{"__ignoreMap":46},[57,102237,102238,102240,102242,102244,102246],{"class":59,"line":60},[57,102239,32144],{"class":136},[57,102241,2246],{"class":70},[57,102243,101595],{"class":140},[57,102245,95883],{"class":81},[57,102247,4012],{"class":140},[14,102249,102250,102252,102253,102256,102257,102260],{},[28,102251,32144],{}," 用来定义函数。这里定义了一个叫 ",[28,102254,102255],{},"main"," 的函数。",[28,102258,102259],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[49,102262,102263],{"className":122,"code":101824,"language":124,"meta":46,"style":46},[28,102264,102265],{"__ignoreMap":46},[57,102266,102267,102269,102271,102273,102275],{"class":59,"line":60},[57,102268,101831],{"class":140},[57,102270,156],{"class":136},[57,102272,101609],{"class":140},[57,102274,101511],{"class":81},[57,102276,238],{"class":140},[14,102278,102279,102280,102283],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[28,102281,102282],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[49,102285,102286],{"className":122,"code":101848,"language":124,"meta":46,"style":46},[28,102287,102288],{"__ignoreMap":46},[57,102289,102290,102292,102294],{"class":59,"line":60},[57,102291,101855],{"class":140},[57,102293,156],{"class":136},[57,102295,101623],{"class":140},[14,102297,102298,102299,102301,102302,102304],{},"这行创建仿真数据。",[28,102300,33598],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[28,102303,33598],{}," 都会变化。",[49,102306,102308],{"className":122,"code":102307,"language":124,"meta":46,"style":46},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[28,102309,102310,102320,102330],{"__ignoreMap":46},[57,102311,102312,102314,102316,102318],{"class":59,"line":60},[57,102313,165],{"class":81},[57,102315,168],{"class":140},[57,102317,101636],{"class":74},[57,102319,101639],{"class":140},[57,102321,102322,102324,102326,102328],{"class":59,"line":67},[57,102323,165],{"class":81},[57,102325,168],{"class":140},[57,102327,101648],{"class":74},[57,102329,101651],{"class":140},[57,102331,102332,102334,102336,102338],{"class":59,"line":144},[57,102333,165],{"class":81},[57,102335,168],{"class":140},[57,102337,101660],{"class":74},[57,102339,101663],{"class":140},[14,102341,102342,102344,102345,102348,102349,102352,102353,102356,102357,102360],{},[28,102343,165],{}," 用来输出信息。",[28,102346,102347],{},"model.nq"," 是位置变量数量，",[28,102350,102351],{},"model.nv"," 是速度变量数量，",[28,102354,102355],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[28,102358,102359],{},"nu"," 是 0。",[49,102362,102364],{"className":122,"code":102363,"language":124,"meta":46,"style":46},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[28,102365,102366,102376],{"__ignoreMap":46},[57,102367,102368,102370,102372,102374],{"class":59,"line":60},[57,102369,165],{"class":81},[57,102371,168],{"class":140},[57,102373,101672],{"class":74},[57,102375,101675],{"class":140},[57,102377,102378,102380,102382,102384],{"class":59,"line":67},[57,102379,165],{"class":81},[57,102381,168],{"class":140},[57,102383,101684],{"class":74},[57,102385,101687],{"class":140},[14,102387,102388,102389,102391,102392,102394,102395,102398],{},"这里打印初始时间和初始位置。",[28,102390,101264],{}," 一开始是 0。",[28,102393,101267],{}," 是位置数组。",[28,102396,102397],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[49,102400,102401],{"className":122,"code":101873,"language":124,"meta":46,"style":46},[28,102402,102403,102419],{"__ignoreMap":46},[57,102404,102405,102407,102409,102411,102413,102415,102417],{"class":59,"line":60},[57,102406,3298],{"class":136},[57,102408,101698],{"class":140},[57,102410,26312],{"class":136},[57,102412,32640],{"class":81},[57,102414,168],{"class":140},[57,102416,728],{"class":81},[57,102418,30983],{"class":140},[57,102420,102421],{"class":59,"line":67},[57,102422,101896],{"class":140},[14,102424,102425,102427,102428,102431,102432,102434,102435,102437],{},[28,102426,3298],{}," 是循环。",[28,102429,102430],{},"range(100)"," 表示循环 100 次。",[28,102433,1407],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[28,102436,101412],{},"，仿真就前进一步。",[49,102439,102441],{"className":122,"code":102440,"language":124,"meta":46,"style":46},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[28,102442,102443,102453],{"__ignoreMap":46},[57,102444,102445,102447,102449,102451],{"class":59,"line":60},[57,102446,165],{"class":81},[57,102448,168],{"class":140},[57,102450,101726],{"class":74},[57,102452,101675],{"class":140},[57,102454,102455,102457,102459,102461],{"class":59,"line":67},[57,102456,165],{"class":81},[57,102458,168],{"class":140},[57,102460,101737],{"class":74},[57,102462,101687],{"class":140},[14,102464,102465],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[49,102467,102469],{"className":122,"code":102468,"language":124,"meta":46,"style":46},"if __name__ == \"__main__\":\n    main()\n",[28,102470,102471,102483],{"__ignoreMap":46},[57,102472,102473,102475,102477,102479,102481],{"class":59,"line":60},[57,102474,1813],{"class":136},[57,102476,31417],{"class":81},[57,102478,101756],{"class":136},[57,102480,101759],{"class":74},[57,102482,4012],{"class":140},[57,102484,102485],{"class":59,"line":67},[57,102486,101766],{"class":140},[14,102488,102489,102490,102493,102494,28654],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[28,102491,102492],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[28,102495,102492],{},[14,102497,102498],{},"运行:",[49,102500,102502],{"className":51,"code":102501,"language":53,"meta":46,"style":46},"python ch1_first_sim.py\n",[28,102503,102504],{"__ignoreMap":46},[57,102505,102506,102508],{"class":59,"line":60},[57,102507,124],{"class":70},[57,102509,101483],{"class":74},[365,102511,102513],{"id":102512},"_5运行结果说明","5.运行结果说明",[14,102515,102516],{},"你应该看到类似输出:",[49,102518,102521],{"className":102519,"code":102520,"language":5460,"meta":46},[5458],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[28,102522,102520],{"__ignoreMap":46},[14,102524,102525,102527,102528,102531,102532,28654],{},[28,102526,101817],{}," 有 7 个位置变量: ",[28,102529,102530],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[28,102533,102534],{},"vx vy vz wx wy wz",[14,102536,102537,102538,102541],{},"你还会看到 ",[28,102539,102540],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[365,102543,102545],{"id":102544},"_6验证步骤","6.验证步骤",[14,102547,102548],{},"确认版本:",[49,102550,102551],{"className":51,"code":101136,"language":53,"meta":46,"style":46},[28,102552,102553],{"__ignoreMap":46},[57,102554,102555,102557,102559],{"class":59,"line":60},[57,102556,124],{"class":70},[57,102558,102],{"class":81},[57,102560,101147],{"class":74},[14,102562,102563],{},"确认导入的是官方 bindings:",[49,102565,102567],{"className":51,"code":102566,"language":53,"meta":46,"style":46},"python -c \"import mujoco; print(mujoco)\"\n",[28,102568,102569],{"__ignoreMap":46},[57,102570,102571,102573,102575],{"class":59,"line":60},[57,102572,124],{"class":70},[57,102574,102],{"class":81},[57,102576,102577],{"class":74}," \"import mujoco; print(mujoco)\"\n",[14,102579,102580],{},"运行程序:",[49,102582,102583],{"className":51,"code":102501,"language":53,"meta":46,"style":46},[28,102584,102585],{"__ignoreMap":46},[57,102586,102587,102589],{"class":59,"line":60},[57,102588,124],{"class":70},[57,102590,101483],{"class":74},[14,102592,102593,102594,102597,102598,28654],{},"检查 ",[28,102595,102596],{},"final time"," 是否约等于 ",[28,102599,102600],{},"1.0",[14,102602,102603],{},"再做几个小实验：",[377,102605,102606,102616,102624,102637],{},[380,102607,102608,102609,102611,102612,102615],{},"把 ",[28,102610,102136],{}," 改成 ",[28,102613,102614],{},"pos=\"0 0 2\"","，观察初始高度变化。",[380,102617,102608,102618,102611,102620,102623],{},[28,102619,102025],{},[28,102621,102622],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[380,102625,102608,102626,102611,102628,102631,102632,102634,102635,28654],{},[28,102627,102021],{},[28,102629,102630],{},"timestep=\"0.005\"","，观察 100 步后的 ",[28,102633,102596],{}," 是否变成约 ",[28,102636,35526],{},[380,102638,102639,102640,102643],{},"删除 ",[28,102641,102642],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,102645,102646],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[365,102648,102650],{"id":102649},"_7常见错误与解决方案","7.常见错误与解决方案",[394,102652,102654],{"id":102653},"modulenotfounderror-no-module-named-mujoco",[28,102655,102656],{},"ModuleNotFoundError: No module named 'mujoco'",[14,102658,102659],{},"解决:",[49,102661,102663],{"className":51,"code":102662,"language":53,"meta":46,"style":46},"pip install \"mujoco>=2.3\"\n",[28,102664,102665],{"__ignoreMap":46},[57,102666,102667,102669,102671],{"class":59,"line":60},[57,102668,24101],{"class":70},[57,102670,75],{"class":74},[57,102672,102673],{"class":74}," \"mujoco>=2.3\"\n",[394,102675,102677],{"id":102676},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,102679,102680],{},"先安装系统依赖:",[49,102682,102684],{"className":51,"code":102683,"language":53,"meta":46,"style":46},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[28,102685,102686],{"__ignoreMap":46},[57,102687,102688,102690,102692,102694,102696,102699,102701,102704,102706,102709,102711],{"class":59,"line":60},[57,102689,24845],{"class":70},[57,102691,26584],{"class":74},[57,102693,75],{"class":74},[57,102695,26669],{"class":81},[57,102697,102698],{"class":74}," mesa-libGL",[57,102700,101011],{"class":74},[57,102702,102703],{"class":74}," glfw",[57,102705,101031],{"class":74},[57,102707,102708],{"class":74}," libX11",[57,102710,101044],{"class":74},[57,102712,102713],{"class":74}," libXrandr\n",[394,102715,102717],{"id":102716},"xml-解析失败","XML 解析失败",[14,102719,102720],{},"检查:",[377,102722,102723,102726,102729,102735],{},[380,102724,102725],{},"标签是否闭合",[380,102727,102728],{},"属性是否带引号",[380,102730,102731,102732],{},"根节点是否是 ",[28,102733,102734],{},"\u003Cmujoco>",[380,102736,102737,102739,102740,102743],{},[28,102738,51997],{}," 是否放在 ",[28,102741,102742],{},"\u003Cworldbody>"," 内部",[394,102745,102747,102749,102750],{"id":102746},"final-time-不是严格等于-10",[28,102748,102596],{}," 不是严格等于 ",[28,102751,102600],{},[14,102753,102754],{},"这通常不是错误。浮点数计算可能得到：",[49,102756,102759],{"className":102757,"code":102758,"language":5460,"meta":46},[5458],"1.0000000000000007\n",[28,102760,102758],{"__ignoreMap":46},[14,102762,102763,102764,102766],{},"只要接近 ",[28,102765,102600],{}," 就正常。",[394,102768,102769],{"id":102769},"方块没有掉下来",[14,102771,102772],{},"检查：",[377,102774,102775,102781,102787,102792],{},[380,102776,102777,102778],{},"方块 body 里是否有 ",[28,102779,102780],{},"\u003Cfreejoint\u002F>",[380,102782,102783,102784],{},"重力是否是 ",[28,102785,102786],{},"0 0 -9.81",[380,102788,102789,102790],{},"是否真的调用了 ",[28,102791,100882],{},[380,102793,102794,102795,102797,102798],{},"你看的是否是 ",[28,102796,102540],{},"，不是 ",[28,102799,102800],{},"initial qpos",[365,102802,102804],{"id":102803},"_8本章小结","8.本章小结",[14,102806,102807],{},"本章你已经完成了 MuJoCo 的最小闭环：",[49,102809,102812],{"className":102810,"code":102811,"language":5460,"meta":46},[5458],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[28,102813,102811],{"__ignoreMap":46},[14,102815,102816],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[342,102818,102819],{},"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":46,"searchDepth":67,"depth":67,"links":102821},[102822,102823,102824,102829,102833,102834,102835,102843],{"id":100843,"depth":67,"text":100844},{"id":100966,"depth":67,"text":100967},{"id":101241,"depth":67,"text":101242,"children":102825},[102826,102827,102828],{"id":101279,"depth":144,"text":101280},{"id":101373,"depth":144,"text":101374},{"id":101425,"depth":144,"text":101426},{"id":101449,"depth":67,"text":101450,"children":102830},[102831,102832],{"id":101769,"depth":144,"text":101769},{"id":101905,"depth":144,"text":101905},{"id":102512,"depth":67,"text":102513},{"id":102544,"depth":67,"text":102545},{"id":102649,"depth":67,"text":102650,"children":102836},[102837,102838,102839,102840,102842],{"id":102653,"depth":144,"text":102656},{"id":102676,"depth":144,"text":102677},{"id":102716,"depth":144,"text":102717},{"id":102746,"depth":144,"text":102841},"final time 不是严格等于 1.0",{"id":102769,"depth":144,"text":102769},{"id":102803,"depth":67,"text":102804},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100835,"description":46},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102850,"title":102851,"body":102852,"description":46,"extension":348,"meta":104508,"navigation":350,"path":104509,"seo":104510,"stem":104511,"__hash__":104512},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102853,"toc":104484},[102854,102857,102859,102862,102865,102882,102977,102980,102986,102988,102990,103014,103017,103031,103034,103075,103077,103090,103092,103095,103143,103155,103158,103161,103167,103180,103247,103250,103269,103272,103275,103281,103283,103292,103295,103299,103308,103390,103399,103403,103409,103423,103433,103435,103765,103768,103780,103782,103793,103795,103798,103816,103819,103822,103840,103851,103854,103869,103879,103881,103902,103919,103939,103945,103985,104001,104017,104023,104026,104050,104066,104071,104101,104118,104143,104146,104161,104170,104185,104194,104209,104216,104218,104228,104241,104248,104251,104290,104297,104299,104351,104353,104359,104362,104369,104376,104379,104381,104399,104402,104405,104439,104451,104453,104456,104478,104481],[10,102855,102851],{"id":102856},"_2xml-与-mjcf-物理建模基础",[365,102858,100844],{"id":100843},[14,102860,102861],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,102863,102864],{},"本章结束后，你应该能看懂一个简单模型里：",[377,102866,102867,102870,102873,102876,102879],{},[380,102868,102869],{},"地面在哪里。",[380,102871,102872],{},"物体初始位置在哪里。",[380,102874,102875],{},"几何体是什么形状。",[380,102877,102878],{},"哪些 body 可以自由运动。",[380,102880,102881],{},"如何用名字在 Python 里找到 XML 中的对象。",[557,102883,102884,102894],{},[560,102885,102886],{},[563,102887,102888,102891],{},[566,102889,102890],{"align":24008},"标签",[566,102892,102893],{"align":24008},"作用",[603,102895,102896,102905,102915,102924,102934,102944,102957,102967],{},[563,102897,102898,102902],{},[608,102899,102900],{"align":24008},[28,102901,102734],{},[608,102903,102904],{"align":24008},"根节点",[563,102906,102907,102912],{},[608,102908,102909],{"align":24008},[28,102910,102911],{},"\u003Coption>",[608,102913,102914],{"align":24008},"仿真参数",[563,102916,102917,102921],{},[608,102918,102919],{"align":24008},[28,102920,102742],{},[608,102922,102923],{"align":24008},"世界中的物体",[563,102925,102926,102931],{},[608,102927,102928],{"align":24008},[28,102929,102930],{},"\u003Cbody>",[608,102932,102933],{"align":24008},"刚体",[563,102935,102936,102941],{},[608,102937,102938],{"align":24008},[28,102939,102940],{},"\u003Cgeom>",[608,102942,102943],{"align":24008},"几何体、碰撞体、可视体",[563,102945,102946,102954],{},[608,102947,102948,25247,102951],{"align":24008},[28,102949,102950],{},"\u003Cjoint>",[28,102952,102953],{},"\u003Cfreejoint>",[608,102955,102956],{"align":24008},"关节",[563,102958,102959,102964],{},[608,102960,102961],{"align":24008},[28,102962,102963],{},"\u003Csite>",[608,102965,102966],{"align":24008},"标记点",[563,102968,102969,102974],{},[608,102970,102971],{"align":24008},[28,102972,102973],{},"\u003Cactuator>",[608,102975,102976],{"align":24008},"控制器",[14,102978,102979],{},"初学时可以先记住：",[49,102981,102984],{"className":102982,"code":102983,"language":5460,"meta":46},[5458],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[28,102985,102983],{"__ignoreMap":46},[365,102987,100967],{"id":100966},[14,102989,100970],{},[49,102991,102993],{"className":51,"code":102992,"language":53,"meta":46,"style":46},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[28,102994,102995],{"__ignoreMap":46},[57,102996,102997,102999,103001,103003,103005,103007,103009,103011],{"class":59,"line":60},[57,102998,24845],{"class":70},[57,103000,26584],{"class":74},[57,103002,75],{"class":74},[57,103004,26669],{"class":81},[57,103006,102698],{"class":74},[57,103008,101011],{"class":74},[57,103010,102703],{"class":74},[57,103012,103013],{"class":74}," glfw-devel\n",[14,103015,103016],{},"pip:",[49,103018,103019],{"className":51,"code":101116,"language":53,"meta":46,"style":46},[28,103020,103021],{"__ignoreMap":46},[57,103022,103023,103025,103027,103029],{"class":59,"line":60},[57,103024,24101],{"class":70},[57,103026,75],{"class":74},[57,103028,101127],{"class":74},[57,103030,101130],{"class":74},[14,103032,103033],{},"conda:",[49,103035,103037],{"className":51,"code":103036,"language":53,"meta":46,"style":46},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[28,103038,103039,103056,103065],{"__ignoreMap":46},[57,103040,103041,103043,103045,103047,103050,103052,103054],{"class":59,"line":60},[57,103042,71],{"class":70},[57,103044,29445],{"class":74},[57,103046,25384],{"class":81},[57,103048,103049],{"class":74}," mujoco-xml",[57,103051,101172],{"class":74},[57,103053,101175],{"class":81},[57,103055,101178],{"class":81},[57,103057,103058,103060,103062],{"class":59,"line":67},[57,103059,71],{"class":70},[57,103061,101185],{"class":74},[57,103063,103064],{"class":74}," mujoco-xml\n",[57,103066,103067,103069,103071,103073],{"class":59,"line":144},[57,103068,24101],{"class":70},[57,103070,75],{"class":74},[57,103072,101127],{"class":74},[57,103074,101130],{"class":74},[14,103076,101201],{},[377,103078,103079,103082,103087],{},[380,103080,103081],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[380,103083,103084,103085,28654],{},"本章使用基础标签，适用于 ",[28,103086,101224],{},[380,103088,103089],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[365,103091,101242],{"id":101241},[14,103093,103094],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[49,103096,103098],{"className":53264,"code":103097,"language":53266,"meta":46,"style":46},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[28,103099,103100,103114,103122,103127,103135],{"__ignoreMap":46},[57,103101,103102,103104,103106,103108,103110,103112],{"class":59,"line":60},[57,103103,1326],{"class":140},[57,103105,101218],{"class":51497},[57,103107,101972],{"class":70},[57,103109,156],{"class":140},[57,103111,62876],{"class":74},[57,103113,51504],{"class":140},[57,103115,103116,103118,103120],{"class":59,"line":67},[57,103117,52341],{"class":140},[57,103119,102038],{"class":51497},[57,103121,51504],{"class":140},[57,103123,103124],{"class":59,"line":144},[57,103125,103126],{"class":140},"    ...\n",[57,103128,103129,103131,103133],{"class":59,"line":150},[57,103130,52614],{"class":140},[57,103132,102038],{"class":51497},[57,103134,51504],{"class":140},[57,103136,103137,103139,103141],{"class":59,"line":162},[57,103138,51982],{"class":140},[57,103140,101218],{"class":51497},[57,103142,51504],{"class":140},[14,103144,103145,103147,103148,103150,103151,103154],{},[28,103146,51997],{}," 表示刚体。",[28,103149,101317],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[28,103152,103153],{},"joint"," 表示刚体相对父刚体如何运动。",[394,103156,103157],{"id":103157},"层级结构非常重要",[14,103159,103160],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[49,103162,103165],{"className":103163,"code":103164,"language":5460,"meta":46},[5458],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[28,103166,103164],{"__ignoreMap":46},[14,103168,103169,101215,103172,103175,103176,103179],{},[28,103170,103171],{},"red_box_geom",[28,103173,103174],{},"box_center"," 都属于 ",[28,103177,103178],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[49,103181,103183],{"className":53264,"code":103182,"language":53266,"meta":46,"style":46},"\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",[28,103184,103185,103205,103219,103239],{"__ignoreMap":46},[57,103186,103187,103189,103191,103193,103195,103197,103199,103201,103203],{"class":59,"line":60},[57,103188,1326],{"class":140},[57,103190,51997],{"class":51497},[57,103192,15192],{"class":70},[57,103194,156],{"class":140},[57,103196,53688],{"class":74},[57,103198,101303],{"class":70},[57,103200,156],{"class":140},[57,103202,101308],{"class":74},[57,103204,51504],{"class":140},[57,103206,103207,103209,103211,103213,103215,103217],{"class":59,"line":67},[57,103208,52341],{"class":140},[57,103210,101817],{"class":51497},[57,103212,15192],{"class":70},[57,103214,156],{"class":140},[57,103216,102158],{"class":74},[57,103218,101341],{"class":140},[57,103220,103221,103223,103225,103227,103229,103231,103233,103235,103237],{"class":59,"line":144},[57,103222,52341],{"class":140},[57,103224,101317],{"class":51497},[57,103226,54021],{"class":70},[57,103228,156],{"class":140},[57,103230,53688],{"class":74},[57,103232,101333],{"class":70},[57,103234,156],{"class":140},[57,103236,101338],{"class":74},[57,103238,101341],{"class":140},[57,103240,103241,103243,103245],{"class":59,"line":150},[57,103242,51982],{"class":140},[57,103244,51997],{"class":51497},[57,103246,51504],{"class":140},[14,103248,103249],{},"含义:",[377,103251,103252,103258,103263,103266],{},[380,103253,103254,103255,103257],{},"创建名为 ",[28,103256,53911],{}," 的刚体",[380,103259,103260,103261],{},"初始位置在世界坐标 ",[28,103262,101366],{},[380,103264,103265],{},"它有一个自由关节",[380,103267,103268],{},"它有一个盒子几何体",[394,103270,103271],{"id":103271},"坐标怎么理解",[14,103273,103274],{},"MuJoCo 默认使用三维坐标：",[49,103276,103279],{"className":103277,"code":103278,"language":5460,"meta":46},[5458],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[28,103280,103278],{"__ignoreMap":46},[14,103282,14905],{},[49,103284,103286],{"className":53264,"code":103285,"language":53266,"meta":46,"style":46},"pos=\"0 0 1\"\n",[28,103287,103288],{"__ignoreMap":46},[57,103289,103290],{"class":59,"line":60},[57,103291,103285],{"class":140},[14,103293,103294],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[394,103296,103298],{"id":103297},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,103300,103301,103302,82727,103305,103307],{},"不同 ",[28,103303,103304],{},"type",[28,103306,31693],{}," 含义不同：",[557,103309,103310,103325],{},[560,103311,103312],{},[563,103313,103314,103318,103323],{},[566,103315,103316],{"align":24008},[28,103317,103304],{},[566,103319,103320,103322],{"align":24008},[28,103321,31693],{}," 示例",[566,103324,100897],{"align":24008},[603,103326,103327,103341,103356,103375],{},[563,103328,103329,103333,103338],{},[608,103330,103331],{"align":24008},[28,103332,53911],{},[608,103334,103335],{"align":24008},[28,103336,103337],{},"size=\"0.1 0.2 0.3\"",[608,103339,103340],{"align":24008},"x\u002Fy\u002Fz 半边长，不是完整长度",[563,103342,103343,103348,103353],{},[608,103344,103345],{"align":24008},[28,103346,103347],{},"sphere",[608,103349,103350],{"align":24008},[28,103351,103352],{},"size=\"0.1\"",[608,103354,103355],{"align":24008},"球半径",[563,103357,103358,103363,103368],{},[608,103359,103360],{"align":24008},[28,103361,103362],{},"capsule",[608,103364,103365],{"align":24008},[28,103366,103367],{},"size=\"0.03\"",[608,103369,103370,103371,103374],{"align":24008},"胶囊半径，长度常用 ",[28,103372,103373],{},"fromto"," 指定",[563,103376,103377,103382,103387],{},[608,103378,103379],{"align":24008},[28,103380,103381],{},"plane",[608,103383,103384],{"align":24008},[28,103385,103386],{},"size=\"3 3 0.1\"",[608,103388,103389],{"align":24008},"可视平面大小，通常当地面",[14,103391,103392,103393,103395,103396,103398],{},"最容易踩坑的是 box：",[28,103394,102221],{}," 表示边长大约是 ",[28,103397,32234],{},"，因为 MuJoCo 用的是半边长。",[394,103400,103402],{"id":103401},"site-是什么","site 是什么",[14,103404,103405,103408],{},[28,103406,103407],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[377,103410,103411,103414,103417,103420],{},[380,103412,103413],{},"标记机械臂末端。",[380,103415,103416],{},"标记目标位置。",[380,103418,103419],{},"放传感器或相机参考点。",[380,103421,103422],{},"在 Python 中读取某个关键点的世界坐标。",[14,103424,103425,103426,101215,103429,103432],{},"在后面的 Reacher 任务中，",[28,103427,103428],{},"tip",[28,103430,103431],{},"target"," 就会用 site 表示。",[365,103434,101450],{"id":101449},[49,103436,103438],{"className":122,"code":103437,"language":124,"meta":46,"style":46},"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",[28,103439,103440,103446,103456,103460,103464,103472,103477,103481,103485,103489,103494,103498,103503,103508,103513,103518,103522,103526,103530,103534,103538,103542,103554,103566,103574,103578,103593,103608,103612,103625,103640,103653,103666,103670,103686,103690,103694,103705,103717,103729,103741,103745,103749,103761],{"__ignoreMap":46},[57,103441,103442,103444],{"class":59,"line":60},[57,103443,137],{"class":136},[57,103445,101498],{"class":140},[57,103447,103448,103450,103452,103454],{"class":59,"line":67},[57,103449,137],{"class":136},[57,103451,31577],{"class":140},[57,103453,31580],{"class":136},[57,103455,31583],{"class":140},[57,103457,103458],{"class":59,"line":144},[57,103459,2673],{"emptyLinePlaceholder":350},[57,103461,103462],{"class":59,"line":150},[57,103463,2673],{"emptyLinePlaceholder":350},[57,103465,103466,103468,103470],{"class":59,"line":162},[57,103467,101511],{"class":81},[57,103469,13837],{"class":136},[57,103471,101516],{"class":74},[57,103473,103474],{"class":59,"line":180},[57,103475,103476],{"class":74},"\u003Cmujoco model=\"xml_basic\">\n",[57,103478,103479],{"class":59,"line":186},[57,103480,101526],{"class":74},[57,103482,103483],{"class":59,"line":197},[57,103484,2673],{"emptyLinePlaceholder":350},[57,103486,103487],{"class":59,"line":241},[57,103488,101535],{"class":74},[57,103490,103491],{"class":59,"line":249},[57,103492,103493],{"class":74},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[57,103495,103496],{"class":59,"line":262},[57,103497,2673],{"emptyLinePlaceholder":350},[57,103499,103500],{"class":59,"line":281},[57,103501,103502],{"class":74},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[57,103504,103505],{"class":59,"line":287},[57,103506,103507],{"class":74},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[57,103509,103510],{"class":59,"line":298},[57,103511,103512],{"class":74},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[57,103514,103515],{"class":59,"line":311},[57,103516,103517],{"class":74},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[57,103519,103520],{"class":59,"line":322},[57,103521,101564],{"class":74},[57,103523,103524],{"class":59,"line":1929},[57,103525,101569],{"class":74},[57,103527,103528],{"class":59,"line":1950},[57,103529,101574],{"class":74},[57,103531,103532],{"class":59,"line":1955},[57,103533,95895],{"class":74},[57,103535,103536],{"class":59,"line":1969},[57,103537,2673],{"emptyLinePlaceholder":350},[57,103539,103540],{"class":59,"line":1974},[57,103541,2673],{"emptyLinePlaceholder":350},[57,103543,103544,103546,103548,103550,103552],{"class":59,"line":2001},[57,103545,32144],{"class":136},[57,103547,2246],{"class":70},[57,103549,101595],{"class":140},[57,103551,95883],{"class":81},[57,103553,4012],{"class":140},[57,103555,103556,103558,103560,103562,103564],{"class":59,"line":2006},[57,103557,101604],{"class":140},[57,103559,156],{"class":136},[57,103561,101609],{"class":140},[57,103563,101511],{"class":81},[57,103565,238],{"class":140},[57,103567,103568,103570,103572],{"class":59,"line":2023},[57,103569,101618],{"class":140},[57,103571,156],{"class":136},[57,103573,101623],{"class":140},[57,103575,103576],{"class":59,"line":2028},[57,103577,2673],{"emptyLinePlaceholder":350},[57,103579,103580,103583,103585,103588,103591],{"class":59,"line":2033},[57,103581,103582],{"class":140},"    box_body_id ",[57,103584,156],{"class":136},[57,103586,103587],{"class":140}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[57,103589,103590],{"class":74},"\"red_box\"",[57,103592,238],{"class":140},[57,103594,103595,103598,103600,103603,103606],{"class":59,"line":2038},[57,103596,103597],{"class":140},"    site_id ",[57,103599,156],{"class":136},[57,103601,103602],{"class":140}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[57,103604,103605],{"class":74},"\"box_center\"",[57,103607,238],{"class":140},[57,103609,103610],{"class":59,"line":2052},[57,103611,2673],{"emptyLinePlaceholder":350},[57,103613,103614,103616,103619,103621,103623],{"class":59,"line":2057},[57,103615,3374],{"class":136},[57,103617,103618],{"class":140}," box_body_id ",[57,103620,1326],{"class":136},[57,103622,4366],{"class":81},[57,103624,4012],{"class":140},[57,103626,103627,103630,103633,103635,103638],{"class":59,"line":2850},[57,103628,103629],{"class":136},"        raise",[57,103631,103632],{"class":81}," RuntimeError",[57,103634,168],{"class":140},[57,103636,103637],{"class":74},"\"body red_box not found\"",[57,103639,238],{"class":140},[57,103641,103642,103644,103647,103649,103651],{"class":59,"line":2864},[57,103643,3374],{"class":136},[57,103645,103646],{"class":140}," site_id ",[57,103648,1326],{"class":136},[57,103650,4366],{"class":81},[57,103652,4012],{"class":140},[57,103654,103655,103657,103659,103661,103664],{"class":59,"line":2872},[57,103656,103629],{"class":136},[57,103658,103632],{"class":81},[57,103660,168],{"class":140},[57,103662,103663],{"class":74},"\"site box_center not found\"",[57,103665,238],{"class":140},[57,103667,103668],{"class":59,"line":2877},[57,103669,2673],{"emptyLinePlaceholder":350},[57,103671,103672,103674,103676,103678,103680,103682,103684],{"class":59,"line":2883},[57,103673,3474],{"class":136},[57,103675,101698],{"class":140},[57,103677,26312],{"class":136},[57,103679,32640],{"class":81},[57,103681,168],{"class":140},[57,103683,1996],{"class":81},[57,103685,30983],{"class":140},[57,103687,103688],{"class":59,"line":2889},[57,103689,101713],{"class":140},[57,103691,103692],{"class":59,"line":2894},[57,103693,2673],{"emptyLinePlaceholder":350},[57,103695,103696,103698,103700,103703],{"class":59,"line":8221},[57,103697,31496],{"class":81},[57,103699,168],{"class":140},[57,103701,103702],{"class":74},"\"simulation time:\"",[57,103704,101675],{"class":140},[57,103706,103707,103709,103711,103714],{"class":59,"line":8245},[57,103708,31496],{"class":81},[57,103710,168],{"class":140},[57,103712,103713],{"class":74},"\"box body position:\"",[57,103715,103716],{"class":140},", data.xpos[box_body_id].copy())\n",[57,103718,103719,103721,103723,103726],{"class":59,"line":8250},[57,103720,31496],{"class":81},[57,103722,168],{"class":140},[57,103724,103725],{"class":74},"\"site position:\"",[57,103727,103728],{"class":140},", data.site_xpos[site_id].copy())\n",[57,103730,103731,103733,103735,103738],{"class":59,"line":8256},[57,103732,31496],{"class":81},[57,103734,168],{"class":140},[57,103736,103737],{"class":74},"\"box qpos:\"",[57,103739,103740],{"class":140},", np.array(data.qpos))\n",[57,103742,103743],{"class":59,"line":8283},[57,103744,2673],{"emptyLinePlaceholder":350},[57,103746,103747],{"class":59,"line":8288},[57,103748,2673],{"emptyLinePlaceholder":350},[57,103750,103751,103753,103755,103757,103759],{"class":59,"line":8294},[57,103752,1813],{"class":136},[57,103754,31417],{"class":81},[57,103756,101756],{"class":136},[57,103758,101759],{"class":74},[57,103760,4012],{"class":140},[57,103762,103763],{"class":59,"line":8306},[57,103764,101766],{"class":140},[14,103766,103767],{},"保存为：",[49,103769,103771],{"className":51,"code":103770,"language":53,"meta":46,"style":46},"touch ch2_xml_basic.py\n",[28,103772,103773],{"__ignoreMap":46},[57,103774,103775,103777],{"class":59,"line":60},[57,103776,101480],{"class":70},[57,103778,103779],{"class":74}," ch2_xml_basic.py\n",[14,103781,102498],{},[49,103783,103785],{"className":51,"code":103784,"language":53,"meta":46,"style":46},"python ch2_xml_basic.py\n",[28,103786,103787],{"__ignoreMap":46},[57,103788,103789,103791],{"class":59,"line":60},[57,103790,124],{"class":70},[57,103792,103779],{"class":74},[394,103794,101769],{"id":101769},[14,103796,103797],{},"用名字查找 body：",[49,103799,103801],{"className":122,"code":103800,"language":124,"meta":46,"style":46},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[28,103802,103803],{"__ignoreMap":46},[57,103804,103805,103808,103810,103812,103814],{"class":59,"line":60},[57,103806,103807],{"class":140},"box_body_id ",[57,103809,156],{"class":136},[57,103811,103587],{"class":140},[57,103813,103590],{"class":74},[57,103815,238],{"class":140},[14,103817,103818],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,103820,103821],{},"用名字查找 site：",[49,103823,103825],{"className":122,"code":103824,"language":124,"meta":46,"style":46},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[28,103826,103827],{"__ignoreMap":46},[57,103828,103829,103832,103834,103836,103838],{"class":59,"line":60},[57,103830,103831],{"class":140},"site_id ",[57,103833,156],{"class":136},[57,103835,103602],{"class":140},[57,103837,103605],{"class":74},[57,103839,238],{"class":140},[14,103841,103842,103843,103846,103847,103850],{},"注意第二个参数是对象类型。查 body 就用 ",[28,103844,103845],{},"mjOBJ_BODY","，查 site 就用 ",[28,103848,103849],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,103852,103853],{},"读取世界坐标：",[49,103855,103857],{"className":122,"code":103856,"language":124,"meta":46,"style":46},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[28,103858,103859,103864],{"__ignoreMap":46},[57,103860,103861],{"class":59,"line":60},[57,103862,103863],{"class":140},"data.xpos[box_body_id]\n",[57,103865,103866],{"class":59,"line":67},[57,103867,103868],{"class":140},"data.site_xpos[site_id]\n",[14,103870,103871,103874,103875,103878],{},[28,103872,103873],{},"xpos"," 是 body 的世界坐标，",[28,103876,103877],{},"site_xpos"," 是 site 的世界坐标。",[394,103880,101905],{"id":101905},[49,103882,103884],{"className":122,"code":103883,"language":124,"meta":46,"style":46},"import mujoco\nimport numpy as np\n",[28,103885,103886,103892],{"__ignoreMap":46},[57,103887,103888,103890],{"class":59,"line":60},[57,103889,137],{"class":136},[57,103891,101498],{"class":140},[57,103893,103894,103896,103898,103900],{"class":59,"line":67},[57,103895,137],{"class":136},[57,103897,31577],{"class":140},[57,103899,31580],{"class":136},[57,103901,31583],{"class":140},[14,103903,103904,103905,103908,103909,103912,103913,630,103916,28654],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[28,103906,103907],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[28,103910,103911],{},"as np"," 是习惯写法，后面就可以写 ",[28,103914,103915],{},"np.array(...)",[28,103917,103918],{},"np.round(...)",[49,103920,103921],{"className":122,"code":101792,"language":124,"meta":46,"style":46},[28,103922,103923,103931,103935],{"__ignoreMap":46},[57,103924,103925,103927,103929],{"class":59,"line":60},[57,103926,101511],{"class":81},[57,103928,13837],{"class":136},[57,103930,101516],{"class":74},[57,103932,103933],{"class":59,"line":67},[57,103934,101807],{"class":74},[57,103936,103937],{"class":59,"line":144},[57,103938,95895],{"class":74},[14,103940,103941,103942,28654],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[28,103943,103944],{},"mujoco.MjModel.from_xml_string(XML)",[49,103946,103948],{"className":53264,"code":103947,"language":53266,"meta":46,"style":46},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[28,103949,103950],{"__ignoreMap":46},[57,103951,103952,103954,103956,103958,103960,103962,103964,103966,103969,103971,103973,103976,103978,103980,103983],{"class":59,"line":60},[57,103953,1326],{"class":140},[57,103955,103407],{"class":51497},[57,103957,15192],{"class":70},[57,103959,156],{"class":140},[57,103961,103605],{"class":74},[57,103963,101303],{"class":70},[57,103965,156],{"class":140},[57,103967,103968],{"class":74},"\"0 0 0\"",[57,103970,101333],{"class":70},[57,103972,156],{"class":140},[57,103974,103975],{"class":74},"\"0.03\"",[57,103977,78964],{"class":70},[57,103979,156],{"class":140},[57,103981,103982],{"class":74},"\"0 1 0 1\"",[57,103984,101341],{"class":140},[14,103986,103987,103989,103990,103993,103994,103996,103997,104000],{},[28,103988,103407],{}," 是标记点。",[28,103991,103992],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[28,103995,103367],{}," 表示显示出来的小球大小。",[28,103998,103999],{},"rgba=\"0 1 0 1\""," 表示绿色。",[49,104002,104003],{"className":122,"code":103800,"language":124,"meta":46,"style":46},[28,104004,104005],{"__ignoreMap":46},[57,104006,104007,104009,104011,104013,104015],{"class":59,"line":60},[57,104008,103807],{"class":140},[57,104010,156],{"class":136},[57,104012,103587],{"class":140},[57,104014,103590],{"class":74},[57,104016,238],{"class":140},[14,104018,104019,104020,104022],{},"这行的作用是：根据名字 ",[28,104021,103590],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,104024,104025],{},"拆开看：",[377,104027,104028,104034,104039,104045],{},[380,104029,104030,104033],{},[28,104031,104032],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[380,104035,104036,104038],{},[28,104037,102282],{}," 是被查询的模型。",[380,104040,104041,104044],{},[28,104042,104043],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[380,104046,104047,104049],{},[28,104048,103590],{}," 是 XML 里写的名字。",[49,104051,104052],{"className":122,"code":103824,"language":124,"meta":46,"style":46},[28,104053,104054],{"__ignoreMap":46},[57,104055,104056,104058,104060,104062,104064],{"class":59,"line":60},[57,104057,103831],{"class":140},[57,104059,156],{"class":136},[57,104061,103602],{"class":140},[57,104063,103605],{"class":74},[57,104065,238],{"class":140},[14,104067,104068,104069,28654],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[28,104070,103605],{},[49,104072,104074],{"className":122,"code":104073,"language":124,"meta":46,"style":46},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[28,104075,104076,104088],{"__ignoreMap":46},[57,104077,104078,104080,104082,104084,104086],{"class":59,"line":60},[57,104079,1813],{"class":136},[57,104081,103618],{"class":140},[57,104083,1326],{"class":136},[57,104085,4366],{"class":81},[57,104087,4012],{"class":140},[57,104089,104090,104093,104095,104097,104099],{"class":59,"line":67},[57,104091,104092],{"class":136},"    raise",[57,104094,103632],{"class":81},[57,104096,168],{"class":140},[57,104098,103637],{"class":74},[57,104100,238],{"class":140},[14,104102,104103,104105,104106,104109,104110,104113,104114,104117],{},[28,104104,1813],{}," 是条件判断。",[28,104107,104108],{},"mj_name2id"," 找不到对象时会返回 ",[28,104111,104112],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[28,104115,104116],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[49,104119,104121],{"className":122,"code":104120,"language":124,"meta":46,"style":46},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[28,104122,104123,104139],{"__ignoreMap":46},[57,104124,104125,104127,104129,104131,104133,104135,104137],{"class":59,"line":60},[57,104126,3298],{"class":136},[57,104128,101698],{"class":140},[57,104130,26312],{"class":136},[57,104132,32640],{"class":81},[57,104134,168],{"class":140},[57,104136,1996],{"class":81},[57,104138,30983],{"class":140},[57,104140,104141],{"class":59,"line":67},[57,104142,101896],{"class":140},[14,104144,104145],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[49,104147,104149],{"className":122,"code":104148,"language":124,"meta":46,"style":46},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[28,104150,104151],{"__ignoreMap":46},[57,104152,104153,104155,104157,104159],{"class":59,"line":60},[57,104154,165],{"class":81},[57,104156,168],{"class":140},[57,104158,103713],{"class":74},[57,104160,103716],{"class":140},[14,104162,104163,104165,104166,104169],{},[28,104164,101276],{}," 保存所有 body 的世界坐标。",[28,104167,104168],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[49,104171,104173],{"className":122,"code":104172,"language":124,"meta":46,"style":46},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[28,104174,104175],{"__ignoreMap":46},[57,104176,104177,104179,104181,104183],{"class":59,"line":60},[57,104178,165],{"class":81},[57,104180,168],{"class":140},[57,104182,103725],{"class":74},[57,104184,103728],{"class":140},[14,104186,104187,104190,104191,104193],{},[28,104188,104189],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[28,104192,103174],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[49,104195,104197],{"className":122,"code":104196,"language":124,"meta":46,"style":46},"print(\"box qpos:\", np.array(data.qpos))\n",[28,104198,104199],{"__ignoreMap":46},[57,104200,104201,104203,104205,104207],{"class":59,"line":60},[57,104202,165],{"class":81},[57,104204,168],{"class":140},[57,104206,103737],{"class":74},[57,104208,103740],{"class":140},[14,104210,104211,104212,104215],{},"这里打印广义位置数组。",[28,104213,104214],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[365,104217,102513],{"id":102512},[14,104219,104220,104221,104224,104225,28654],{},"程序会输出 ",[28,104222,104223],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[28,104226,104227],{},"qpos",[14,104229,104230,104232,104233,104236,104237,104240],{},[28,104231,104168],{}," 是 body 的世界坐标位置。",[28,104234,104235],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[28,104238,104239],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,104242,82419,104243,82727,104245,104247],{},[28,104244,103174],{},[28,104246,103992],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,104249,104250],{},"如果你把 site 改成：",[49,104252,104254],{"className":53264,"code":104253,"language":53266,"meta":46,"style":46},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[28,104255,104256],{"__ignoreMap":46},[57,104257,104258,104260,104262,104264,104266,104269,104271,104273,104276,104278,104280,104282,104284,104286,104288],{"class":59,"line":60},[57,104259,1326],{"class":140},[57,104261,103407],{"class":51497},[57,104263,15192],{"class":70},[57,104265,156],{"class":140},[57,104267,104268],{"class":74},"\"box_top\"",[57,104270,101303],{"class":70},[57,104272,156],{"class":140},[57,104274,104275],{"class":74},"\"0 0 0.15\"",[57,104277,101333],{"class":70},[57,104279,156],{"class":140},[57,104281,103975],{"class":74},[57,104283,78964],{"class":70},[57,104285,156],{"class":140},[57,104287,103982],{"class":74},[57,104289,101341],{"class":140},[14,104291,104292,104293,104296],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[28,104294,104295],{},"site position"," 就会比 body position 的 z 坐标更高。",[365,104298,102545],{"id":102544},[377,104300,104301,104310,104313,104320,104326,104337],{},[380,104302,102608,104303,104305,104306,102611,104308,28654],{},[28,104304,103178],{}," 的初始高度从 ",[28,104307,635],{},[28,104309,498],{},[380,104311,104312],{},"重新运行程序。",[380,104314,104315,104316,104319],{},"观察 ",[28,104317,104318],{},"box qpos"," 和最终位置是否变化。",[380,104321,104322,104323,104325],{},"故意把 ",[28,104324,103407],{}," 名称改错，确认程序能报错。",[380,104327,102608,104328,104330,104331,102611,104333,104336],{},[28,104329,101317],{}," 的颜色 ",[28,104332,102229],{},[28,104334,104335],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[380,104338,102608,104339,82727,104341,102611,104344,104347,104348,104350],{},[28,104340,103174],{},[28,104342,104343],{},"pos",[28,104345,104346],{},"0 0 0.2","，观察 ",[28,104349,104295],{}," 如何变化。",[365,104352,102650],{"id":102649},[394,104354,104356],{"id":104355},"xml-error-schema-violation",[28,104357,104358],{},"XML Error: Schema violation",[14,104360,104361],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[394,104363,104365,81487,104367],{"id":104364},"mj_name2id-返回-1",[28,104366,104108],{},[28,104368,104112],{},[14,104370,104371,104372,104375],{},"说明名字没有找到。检查 XML 中 ",[28,104373,104374],{},"name=\"...\"","，并确认对象类型正确。",[394,104377,104378],{"id":104378},"物体不下落",[14,104380,102720],{},[377,104382,104383,104388,104393],{},[380,104384,104385,104386],{},"body 是否有 ",[28,104387,101817],{},[380,104389,104390,104391],{},"gravity 是否为 ",[28,104392,102786],{},[380,104394,104395,104396,104398],{},"body 是否被固定在 ",[28,104397,102038],{}," 中",[394,104400,104401],{"id":104401},"坐标看起来不符合预期",[14,104403,104404],{},"先区分两种坐标：",[557,104406,104407,104416],{},[560,104408,104409],{},[563,104410,104411,104414],{},[566,104412,104413],{"align":24008},"坐标",[566,104415,100897],{"align":24008},[603,104417,104418,104428],{},[563,104419,104420,104425],{},[608,104421,104422,104423],{"align":24008},"XML 里的 ",[28,104424,104343],{},[608,104426,104427],{"align":24008},"相对父 body 的局部坐标",[563,104429,104430,104436],{},[608,104431,104432,25247,104434],{"align":24008},[28,104433,101276],{},[28,104435,104189],{},[608,104437,104438],{"align":24008},"仿真更新后的世界坐标",[14,104440,104441,104442,104444,104445,82736,104448,104450],{},"如果你修改了 ",[28,104443,101267],{},"，但还没调用 ",[28,104446,104447],{},"mj_forward",[28,104449,101412],{},"，世界坐标可能还没有更新。",[365,104452,102804],{"id":102803},[14,104454,104455],{},"MJCF 建模先掌握四件事：",[377,104457,104458,104463,104468,104473],{},[380,104459,104460,104462],{},[28,104461,51997],{}," 表示刚体层级。",[380,104464,104465,104467],{},[28,104466,101317],{}," 表示形状、碰撞和质量。",[380,104469,104470,104472],{},[28,104471,103153],{}," 决定 body 能不能动、怎么动。",[380,104474,104475,104477],{},[28,104476,103407],{}," 用来标记关键点，方便 Python 读取位置。",[14,104479,104480],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[342,104482,104483],{},"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":46,"searchDepth":67,"depth":67,"links":104485},[104486,104487,104488,104494,104498,104499,104500,104507],{"id":100843,"depth":67,"text":100844},{"id":100966,"depth":67,"text":100967},{"id":101241,"depth":67,"text":101242,"children":104489},[104490,104491,104492,104493],{"id":103157,"depth":144,"text":103157},{"id":103271,"depth":144,"text":103271},{"id":103297,"depth":144,"text":103298},{"id":103401,"depth":144,"text":103402},{"id":101449,"depth":67,"text":101450,"children":104495},[104496,104497],{"id":101769,"depth":144,"text":101769},{"id":101905,"depth":144,"text":101905},{"id":102512,"depth":67,"text":102513},{"id":102544,"depth":67,"text":102545},{"id":102649,"depth":67,"text":102650,"children":104501},[104502,104503,104505,104506],{"id":104355,"depth":144,"text":104358},{"id":104364,"depth":144,"text":104504},"mj_name2id 返回 -1",{"id":104378,"depth":144,"text":104378},{"id":104401,"depth":144,"text":104401},{"id":102803,"depth":67,"text":102804},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102851,"description":46},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104514,"title":104515,"body":104516,"description":46,"extension":348,"meta":106011,"navigation":350,"path":106012,"seo":106013,"stem":106014,"__hash__":106015},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104517,"toc":105983},[104518,104521,104523,104526,104529,104567,104570,104576,104579,104581,104583,104610,104612,104626,104628,104669,104671,104695,104697,104700,104709,104718,104721,104730,104738,104747,104750,104760,104763,104815,104822,104828,104836,104884,104887,104906,104909,104917,104921,104930,104963,104965,105313,105315,105327,105329,105340,105342,105345,105366,105372,105375,105400,105410,105413,105421,105424,105427,105448,105459,105461,105481,105484,105505,105514,105533,105539,105564,105567,105581,105588,105612,105615,105623,105632,105648,105660,105668,105677,105679,105682,105706,105711,105714,105736,105738,105777,105779,105786,105788,105796,105799,105802,105814,105855,105862,105873,105880,105883,105932,105935,105938,105944,105946,105951,105977,105980],[10,104519,104515],{"id":104520},"_3python-控制接口读取状态与推进仿真",[365,104522,100844],{"id":100843},[14,104524,104525],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,104527,104528],{},"你将学习:",[377,104530,104531,104536,104541,104545,104550,104561],{},[380,104532,104533],{},[28,104534,104535],{},"MjModel.from_xml_string",[380,104537,104538],{},[28,104539,104540],{},"MjData(model)",[380,104542,104543],{},[28,104544,101412],{},[380,104546,104547],{},[28,104548,104549],{},"mj_resetData",[380,104551,104552,104553,630,104555,630,104558],{},"读取 ",[28,104554,104227],{},[28,104556,104557],{},"qvel",[28,104559,104560],{},"ctrl",[380,104562,104563,104564],{},"使用 ",[28,104565,104566],{},"model.opt.timestep",[14,104568,104569],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[49,104571,104574],{"className":104572,"code":104573,"language":5460,"meta":46},[5458],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[28,104575,104573],{"__ignoreMap":46},[14,104577,104578],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[365,104580,100967],{"id":100966},[14,104582,100970],{},[49,104584,104586],{"className":51,"code":104585,"language":53,"meta":46,"style":46},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[28,104587,104588],{"__ignoreMap":46},[57,104589,104590,104592,104594,104596,104598,104601,104603,104605,104607],{"class":59,"line":60},[57,104591,24845],{"class":70},[57,104593,26584],{"class":74},[57,104595,75],{"class":74},[57,104597,26669],{"class":81},[57,104599,104600],{"class":74}," python3",[57,104602,100995],{"class":74},[57,104604,102698],{"class":74},[57,104606,101011],{"class":74},[57,104608,104609],{"class":74}," glfw\n",[14,104611,103016],{},[49,104613,104614],{"className":51,"code":101116,"language":53,"meta":46,"style":46},[28,104615,104616],{"__ignoreMap":46},[57,104617,104618,104620,104622,104624],{"class":59,"line":60},[57,104619,24101],{"class":70},[57,104621,75],{"class":74},[57,104623,101127],{"class":74},[57,104625,101130],{"class":74},[14,104627,103033],{},[49,104629,104631],{"className":51,"code":104630,"language":53,"meta":46,"style":46},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[28,104632,104633,104650,104659],{"__ignoreMap":46},[57,104634,104635,104637,104639,104641,104644,104646,104648],{"class":59,"line":60},[57,104636,71],{"class":70},[57,104638,29445],{"class":74},[57,104640,25384],{"class":81},[57,104642,104643],{"class":74}," mujoco-python-api",[57,104645,101172],{"class":74},[57,104647,101175],{"class":81},[57,104649,101178],{"class":81},[57,104651,104652,104654,104656],{"class":59,"line":67},[57,104653,71],{"class":70},[57,104655,101185],{"class":74},[57,104657,104658],{"class":74}," mujoco-python-api\n",[57,104660,104661,104663,104665,104667],{"class":59,"line":144},[57,104662,24101],{"class":70},[57,104664,75],{"class":74},[57,104666,101127],{"class":74},[57,104668,101130],{"class":74},[14,104670,101201],{},[377,104672,104673,104680,104689],{},[380,104674,104675,101215,104677,104679],{},[28,104676,100872],{},[28,104678,100877],{}," 是官方 Python bindings 的类名。",[380,104681,104682,104683,104686,104687,28654],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[28,104684,104685],{},"mjModel"," 在 Python 中是 ",[28,104688,100906],{},[380,104690,104691,104692,28654],{},"不要使用 ",[28,104693,104694],{},"sim = mujoco_py.MjSim(...)",[365,104696,101242],{"id":101241},[14,104698,104699],{},"仿真推进核心代码:",[49,104701,104703],{"className":122,"code":104702,"language":124,"meta":46,"style":46},"mujoco.mj_step(model, data)\n",[28,104704,104705],{"__ignoreMap":46},[57,104706,104707],{"class":59,"line":60},[57,104708,104702],{"class":140},[14,104710,104711,104712,630,104714,630,104716,28654],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[28,104713,101267],{},[28,104715,101270],{},[28,104717,101264],{},[14,104719,104720],{},"重置仿真:",[49,104722,104724],{"className":122,"code":104723,"language":124,"meta":46,"style":46},"mujoco.mj_resetData(model, data)\n",[28,104725,104726],{"__ignoreMap":46},[57,104727,104728],{"class":59,"line":60},[57,104729,104723],{"class":140},[14,104731,104732,104733,82736,104735,104737],{},"如果手动修改了 ",[28,104734,101267],{},[28,104736,101270],{},"，通常应调用:",[49,104739,104741],{"className":122,"code":104740,"language":124,"meta":46,"style":46},"mujoco.mj_forward(model, data)\n",[28,104742,104743],{"__ignoreMap":46},[57,104744,104745],{"class":59,"line":60},[57,104746,104740],{"class":140},[14,104748,104749],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[394,104751,104753,630,104755,630,104757,104759],{"id":104752},"qposqvelctrl-是什么",[28,104754,104227],{},[28,104756,104557],{},[28,104758,104560],{}," 是什么",[14,104761,104762],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[557,104764,104765,104777],{},[560,104766,104767],{},[563,104768,104769,104772,104774],{},[566,104770,104771],{"align":24008},"字段",[566,104773,100897],{"align":24008},[566,104775,104776],{"align":24008},"谁来修改",[603,104778,104779,104791,104803],{},[563,104780,104781,104785,104788],{},[608,104782,104783],{"align":24008},[28,104784,101267],{},[608,104786,104787],{"align":24008},"广义位置，例如小车位置、关节角、自由物体位置姿态",[608,104789,104790],{"align":24008},"MuJoCo 更新，也可以手动设置初始状态",[563,104792,104793,104797,104800],{},[608,104794,104795],{"align":24008},[28,104796,101270],{},[608,104798,104799],{"align":24008},"广义速度，例如小车速度、关节角速度",[608,104801,104802],{"align":24008},"MuJoCo 更新，也可以手动清零",[563,104804,104805,104809,104812],{},[608,104806,104807],{"align":24008},[28,104808,101273],{},[608,104810,104811],{"align":24008},"actuator 的控制输入",[608,104813,104814],{"align":24008},"主要由你的控制代码写入",[14,104816,9298,104817,101215,104819,104821],{},[28,104818,104227],{},[28,104820,104557],{}," 不一定同维。自由刚体就是典型例子：",[49,104823,104826],{"className":104824,"code":104825,"language":5460,"meta":46},[5458],"freejoint: qpos 7 维，qvel 6 维\n",[28,104827,104825],{"__ignoreMap":46},[394,104829,104831,101215,104833,104835],{"id":104830},"mj_step-和-mj_forward-的区别",[28,104832,101412],{},[28,104834,104447],{}," 的区别",[557,104837,104838,104851],{},[560,104839,104840],{},[563,104841,104842,104845,104848],{},[566,104843,104844],{"align":24008},"函数",[566,104846,104847],{"align":24008},"是否推进时间",[566,104849,104850],{"align":24008},"什么时候用",[603,104852,104853,104866],{},[563,104854,104855,104860,104863],{},[608,104856,104857],{"align":24008},[28,104858,104859],{},"mj_step(model, data)",[608,104861,104862],{"align":24008},"是",[608,104864,104865],{"align":24008},"正常仿真循环，每调用一次前进一步",[563,104867,104868,104873,104876],{},[608,104869,104870],{"align":24008},[28,104871,104872],{},"mj_forward(model, data)",[608,104874,104875],{"align":24008},"否",[608,104877,104878,104879,630,104881,104883],{"align":24008},"手动改了 ",[28,104880,104227],{},[28,104882,104557],{}," 后，刷新派生量",[14,104885,104886],{},"例如你写：",[49,104888,104890],{"className":122,"code":104889,"language":124,"meta":46,"style":46},"data.qpos[2] = 2.0\n",[28,104891,104892],{"__ignoreMap":46},[57,104893,104894,104897,104899,104901,104903],{"class":59,"line":60},[57,104895,104896],{"class":140},"data.qpos[",[57,104898,498],{"class":81},[57,104900,4716],{"class":140},[57,104902,156],{"class":136},[57,104904,104905],{"class":81}," 2.0\n",[14,104907,104908],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[49,104910,104911],{"className":122,"code":104740,"language":124,"meta":46,"style":46},[28,104912,104913],{"__ignoreMap":46},[57,104914,104915],{"class":59,"line":60},[57,104916,104740],{"class":140},[394,104918,104920],{"id":104919},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,104922,104923,104926,104927,104929],{},[28,104924,104925],{},"mujoco.mj_resetData(model, data)"," 会把 ",[28,104928,33598],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[49,104931,104933],{"className":122,"code":104932,"language":124,"meta":46,"style":46},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[28,104934,104935,104939,104949,104959],{"__ignoreMap":46},[57,104936,104937],{"class":59,"line":60},[57,104938,104723],{"class":140},[57,104940,104941,104944,104946],{"class":59,"line":67},[57,104942,104943],{"class":140},"data.qpos[:] ",[57,104945,156],{"class":136},[57,104947,104948],{"class":140}," random_qpos\n",[57,104950,104951,104954,104956],{"class":59,"line":144},[57,104952,104953],{"class":140},"data.qvel[:] ",[57,104955,156],{"class":136},[57,104957,104958],{"class":81}," 0.0\n",[57,104960,104961],{"class":59,"line":150},[57,104962,104740],{"class":140},[365,104964,101450],{"id":101449},[49,104966,104968],{"className":122,"code":104967,"language":124,"meta":46,"style":46},"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",[28,104969,104970,104976,104986,104990,104994,105002,105007,105011,105015,105019,105024,105028,105033,105038,105043,105047,105051,105055,105059,105063,105067,105086,105093,105105,105116,105132,105148,105152,105156,105168,105180,105188,105192,105203,105207,105223,105227,105231,105240,105244,105249,105258,105262,105275,105280,105289,105293,105297,105309],{"__ignoreMap":46},[57,104971,104972,104974],{"class":59,"line":60},[57,104973,137],{"class":136},[57,104975,101498],{"class":140},[57,104977,104978,104980,104982,104984],{"class":59,"line":67},[57,104979,137],{"class":136},[57,104981,31577],{"class":140},[57,104983,31580],{"class":136},[57,104985,31583],{"class":140},[57,104987,104988],{"class":59,"line":144},[57,104989,2673],{"emptyLinePlaceholder":350},[57,104991,104992],{"class":59,"line":150},[57,104993,2673],{"emptyLinePlaceholder":350},[57,104995,104996,104998,105000],{"class":59,"line":162},[57,104997,101511],{"class":81},[57,104999,13837],{"class":136},[57,105001,101516],{"class":74},[57,105003,105004],{"class":59,"line":180},[57,105005,105006],{"class":74},"\u003Cmujoco model=\"state_api\">\n",[57,105008,105009],{"class":59,"line":186},[57,105010,101526],{"class":74},[57,105012,105013],{"class":59,"line":197},[57,105014,2673],{"emptyLinePlaceholder":350},[57,105016,105017],{"class":59,"line":241},[57,105018,101535],{"class":74},[57,105020,105021],{"class":59,"line":249},[57,105022,105023],{"class":74},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[57,105025,105026],{"class":59,"line":262},[57,105027,2673],{"emptyLinePlaceholder":350},[57,105029,105030],{"class":59,"line":281},[57,105031,105032],{"class":74},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[57,105034,105035],{"class":59,"line":287},[57,105036,105037],{"class":74},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[57,105039,105040],{"class":59,"line":298},[57,105041,105042],{"class":74},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[57,105044,105045],{"class":59,"line":311},[57,105046,101564],{"class":74},[57,105048,105049],{"class":59,"line":322},[57,105050,101569],{"class":74},[57,105052,105053],{"class":59,"line":1929},[57,105054,101574],{"class":74},[57,105056,105057],{"class":59,"line":1950},[57,105058,95895],{"class":74},[57,105060,105061],{"class":59,"line":1955},[57,105062,2673],{"emptyLinePlaceholder":350},[57,105064,105065],{"class":59,"line":1969},[57,105066,2673],{"emptyLinePlaceholder":350},[57,105068,105069,105071,105074,105077,105079,105082,105084],{"class":59,"line":1974},[57,105070,32144],{"class":136},[57,105072,105073],{"class":70}," print_state",[57,105075,105076],{"class":140},"(prefix: ",[57,105078,1585],{"class":81},[57,105080,105081],{"class":140},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[57,105083,95883],{"class":81},[57,105085,4012],{"class":140},[57,105087,105088,105090],{"class":59,"line":2001},[57,105089,31496],{"class":81},[57,105091,105092],{"class":140},"(prefix)\n",[57,105094,105095,105097,105099,105102],{"class":59,"line":2006},[57,105096,31496],{"class":81},[57,105098,168],{"class":140},[57,105100,105101],{"class":74},"\"  timestep:\"",[57,105103,105104],{"class":140},", model.opt.timestep)\n",[57,105106,105107,105109,105111,105114],{"class":59,"line":2023},[57,105108,31496],{"class":81},[57,105110,168],{"class":140},[57,105112,105113],{"class":74},"\"  time:\"",[57,105115,101675],{"class":140},[57,105117,105118,105120,105122,105125,105128,105130],{"class":59,"line":2028},[57,105119,31496],{"class":81},[57,105121,168],{"class":140},[57,105123,105124],{"class":74},"\"  qpos:\"",[57,105126,105127],{"class":140},", np.round(data.qpos.copy(), ",[57,105129,710],{"class":81},[57,105131,259],{"class":140},[57,105133,105134,105136,105138,105141,105144,105146],{"class":59,"line":2033},[57,105135,31496],{"class":81},[57,105137,168],{"class":140},[57,105139,105140],{"class":74},"\"  qvel:\"",[57,105142,105143],{"class":140},", np.round(data.qvel.copy(), ",[57,105145,710],{"class":81},[57,105147,259],{"class":140},[57,105149,105150],{"class":59,"line":2038},[57,105151,2673],{"emptyLinePlaceholder":350},[57,105153,105154],{"class":59,"line":2052},[57,105155,2673],{"emptyLinePlaceholder":350},[57,105157,105158,105160,105162,105164,105166],{"class":59,"line":2057},[57,105159,32144],{"class":136},[57,105161,2246],{"class":70},[57,105163,101595],{"class":140},[57,105165,95883],{"class":81},[57,105167,4012],{"class":140},[57,105169,105170,105172,105174,105176,105178],{"class":59,"line":2850},[57,105171,101604],{"class":140},[57,105173,156],{"class":136},[57,105175,101609],{"class":140},[57,105177,101511],{"class":81},[57,105179,238],{"class":140},[57,105181,105182,105184,105186],{"class":59,"line":2864},[57,105183,101618],{"class":140},[57,105185,156],{"class":136},[57,105187,101623],{"class":140},[57,105189,105190],{"class":59,"line":2872},[57,105191,2673],{"emptyLinePlaceholder":350},[57,105193,105194,105197,105200],{"class":59,"line":2877},[57,105195,105196],{"class":140},"    print_state(",[57,105198,105199],{"class":74},"\"initial\"",[57,105201,105202],{"class":140},", model, data)\n",[57,105204,105205],{"class":59,"line":2883},[57,105206,2673],{"emptyLinePlaceholder":350},[57,105208,105209,105211,105213,105215,105217,105219,105221],{"class":59,"line":2889},[57,105210,3474],{"class":136},[57,105212,101698],{"class":140},[57,105214,26312],{"class":136},[57,105216,32640],{"class":81},[57,105218,168],{"class":140},[57,105220,1072],{"class":81},[57,105222,30983],{"class":140},[57,105224,105225],{"class":59,"line":2894},[57,105226,101713],{"class":140},[57,105228,105229],{"class":59,"line":8221},[57,105230,2673],{"emptyLinePlaceholder":350},[57,105232,105233,105235,105238],{"class":59,"line":8245},[57,105234,105196],{"class":140},[57,105236,105237],{"class":74},"\"after 50 steps\"",[57,105239,105202],{"class":140},[57,105241,105242],{"class":59,"line":8250},[57,105243,2673],{"emptyLinePlaceholder":350},[57,105245,105246],{"class":59,"line":8256},[57,105247,105248],{"class":140},"    mujoco.mj_resetData(model, data)\n",[57,105250,105251,105253,105256],{"class":59,"line":8283},[57,105252,105196],{"class":140},[57,105254,105255],{"class":74},"\"after reset\"",[57,105257,105202],{"class":140},[57,105259,105260],{"class":59,"line":8288},[57,105261,2673],{"emptyLinePlaceholder":350},[57,105263,105264,105267,105269,105271,105273],{"class":59,"line":8294},[57,105265,105266],{"class":140},"    data.qpos[",[57,105268,498],{"class":81},[57,105270,4716],{"class":140},[57,105272,156],{"class":136},[57,105274,104905],{"class":81},[57,105276,105277],{"class":59,"line":8306},[57,105278,105279],{"class":140},"    mujoco.mj_forward(model, data)\n",[57,105281,105282,105284,105287],{"class":59,"line":8318},[57,105283,105196],{"class":140},[57,105285,105286],{"class":74},"\"after manual qpos edit\"",[57,105288,105202],{"class":140},[57,105290,105291],{"class":59,"line":8330},[57,105292,2673],{"emptyLinePlaceholder":350},[57,105294,105295],{"class":59,"line":9989},[57,105296,2673],{"emptyLinePlaceholder":350},[57,105298,105299,105301,105303,105305,105307],{"class":59,"line":10014},[57,105300,1813],{"class":136},[57,105302,31417],{"class":81},[57,105304,101756],{"class":136},[57,105306,101759],{"class":74},[57,105308,4012],{"class":140},[57,105310,105311],{"class":59,"line":10037},[57,105312,101766],{"class":140},[14,105314,103767],{},[49,105316,105318],{"className":51,"code":105317,"language":53,"meta":46,"style":46},"touch ch3_python_state.py\n",[28,105319,105320],{"__ignoreMap":46},[57,105321,105322,105324],{"class":59,"line":60},[57,105323,101480],{"class":70},[57,105325,105326],{"class":74}," ch3_python_state.py\n",[14,105328,102498],{},[49,105330,105332],{"className":51,"code":105331,"language":53,"meta":46,"style":46},"python ch3_python_state.py\n",[28,105333,105334],{"__ignoreMap":46},[57,105335,105336,105338],{"class":59,"line":60},[57,105337,124],{"class":70},[57,105339,105326],{"class":74},[394,105341,101769],{"id":101769},[14,105343,105344],{},"打印状态的函数：",[49,105346,105348],{"className":122,"code":105347,"language":124,"meta":46,"style":46},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[28,105349,105350],{"__ignoreMap":46},[57,105351,105352,105354,105356,105358,105360,105362,105364],{"class":59,"line":60},[57,105353,32144],{"class":136},[57,105355,105073],{"class":70},[57,105357,105076],{"class":140},[57,105359,1585],{"class":81},[57,105361,105081],{"class":140},[57,105363,95883],{"class":81},[57,105365,4012],{"class":140},[14,105367,105368,105369,105371],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[28,105370,33598],{}," 里发生了什么。",[14,105373,105374],{},"推进 50 步：",[49,105376,105378],{"className":122,"code":105377,"language":124,"meta":46,"style":46},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[28,105379,105380,105396],{"__ignoreMap":46},[57,105381,105382,105384,105386,105388,105390,105392,105394],{"class":59,"line":60},[57,105383,3298],{"class":136},[57,105385,101698],{"class":140},[57,105387,26312],{"class":136},[57,105389,32640],{"class":81},[57,105391,168],{"class":140},[57,105393,1072],{"class":81},[57,105395,30983],{"class":140},[57,105397,105398],{"class":59,"line":67},[57,105399,101896],{"class":140},[14,105401,105402,105403,105406,105407,105409],{},"由于 ",[28,105404,105405],{},"timestep=0.01","，所以 50 步后时间约为 ",[28,105408,35526],{}," 秒。",[14,105411,105412],{},"重置：",[49,105414,105415],{"className":122,"code":104723,"language":124,"meta":46,"style":46},[28,105416,105417],{"__ignoreMap":46},[57,105418,105419],{"class":59,"line":60},[57,105420,104723],{"class":140},[14,105422,105423],{},"这会把时间、位置、速度恢复到初始状态。",[14,105425,105426],{},"手动改高度：",[49,105428,105430],{"className":122,"code":105429,"language":124,"meta":46,"style":46},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[28,105431,105432,105444],{"__ignoreMap":46},[57,105433,105434,105436,105438,105440,105442],{"class":59,"line":60},[57,105435,104896],{"class":140},[57,105437,498],{"class":81},[57,105439,4716],{"class":140},[57,105441,156],{"class":136},[57,105443,104905],{"class":81},[57,105445,105446],{"class":59,"line":67},[57,105447,104740],{"class":140},[14,105449,105450,105451,105454,105455,105458],{},"这个例子里 ",[28,105452,105453],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[28,105456,105457],{},"2.0"," 表示把小球放到更高的位置。",[394,105460,101905],{"id":101905},[49,105462,105463],{"className":122,"code":105347,"language":124,"meta":46,"style":46},[28,105464,105465],{"__ignoreMap":46},[57,105466,105467,105469,105471,105473,105475,105477,105479],{"class":59,"line":60},[57,105468,32144],{"class":136},[57,105470,105073],{"class":70},[57,105472,105076],{"class":140},[57,105474,1585],{"class":81},[57,105476,105081],{"class":140},[57,105478,95883],{"class":81},[57,105480,4012],{"class":140},[14,105482,105483],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[377,105485,105486,105495,105500],{},[380,105487,105488,105491,105492,105494],{},[28,105489,105490],{},"prefix","：一段文字，比如 ",[28,105493,105199],{},"，用来说明现在打印的是哪个阶段。",[380,105496,105497,105499],{},[28,105498,102282],{},"：MuJoCo 模型。",[380,105501,105502,105504],{},[28,105503,33598],{},"：MuJoCo 当前状态。",[14,105506,105507,630,105510,105513],{},[28,105508,105509],{},"prefix: str",[28,105511,105512],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[49,105515,105517],{"className":122,"code":105516,"language":124,"meta":46,"style":46},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[28,105518,105519],{"__ignoreMap":46},[57,105520,105521,105523,105525,105527,105529,105531],{"class":59,"line":60},[57,105522,165],{"class":81},[57,105524,168],{"class":140},[57,105526,105124],{"class":74},[57,105528,105127],{"class":140},[57,105530,710],{"class":81},[57,105532,259],{"class":140},[14,105534,105535,105538],{},[28,105536,105537],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[49,105540,105542],{"className":122,"code":105541,"language":124,"meta":46,"style":46},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[28,105543,105544,105556],{"__ignoreMap":46},[57,105545,105546,105548,105550,105552,105554],{"class":59,"line":60},[57,105547,101831],{"class":140},[57,105549,156],{"class":136},[57,105551,101609],{"class":140},[57,105553,101511],{"class":81},[57,105555,238],{"class":140},[57,105557,105558,105560,105562],{"class":59,"line":67},[57,105559,101855],{"class":140},[57,105561,156],{"class":136},[57,105563,101623],{"class":140},[14,105565,105566],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[49,105568,105570],{"className":122,"code":105569,"language":124,"meta":46,"style":46},"print_state(\"initial\", model, data)\n",[28,105571,105572],{"__ignoreMap":46},[57,105573,105574,105577,105579],{"class":59,"line":60},[57,105575,105576],{"class":140},"print_state(",[57,105578,105199],{"class":74},[57,105580,105202],{"class":140},[14,105582,105583,105584,105587],{},"调用刚才定义的 ",[28,105585,105586],{},"print_state"," 函数，打印初始状态。",[49,105589,105590],{"className":122,"code":105377,"language":124,"meta":46,"style":46},[28,105591,105592,105608],{"__ignoreMap":46},[57,105593,105594,105596,105598,105600,105602,105604,105606],{"class":59,"line":60},[57,105595,3298],{"class":136},[57,105597,101698],{"class":140},[57,105599,26312],{"class":136},[57,105601,32640],{"class":81},[57,105603,168],{"class":140},[57,105605,1072],{"class":81},[57,105607,30983],{"class":140},[57,105609,105610],{"class":59,"line":67},[57,105611,101896],{"class":140},[14,105613,105614],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[49,105616,105617],{"className":122,"code":104723,"language":124,"meta":46,"style":46},[28,105618,105619],{"__ignoreMap":46},[57,105620,105621],{"class":59,"line":60},[57,105622,104723],{"class":140},[14,105624,105625,105626,105628,105629,105631],{},"重置 ",[28,105627,33598],{},"。注意它不会重新创建 ",[28,105630,102282],{},"，因为模型结构没有变，只是状态回到初始值。",[49,105633,105634],{"className":122,"code":104889,"language":124,"meta":46,"style":46},[28,105635,105636],{"__ignoreMap":46},[57,105637,105638,105640,105642,105644,105646],{"class":59,"line":60},[57,105639,104896],{"class":140},[57,105641,498],{"class":81},[57,105643,4716],{"class":140},[57,105645,156],{"class":136},[57,105647,104905],{"class":81},[14,105649,105650,105651,630,105654,630,105657,105659],{},"这行是“手动改状态”。在 freejoint 中，",[28,105652,105653],{},"qpos[0]",[28,105655,105656],{},"qpos[1]",[28,105658,105453],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[49,105661,105662],{"className":122,"code":104740,"language":124,"meta":46,"style":46},[28,105663,105664],{"__ignoreMap":46},[57,105665,105666],{"class":59,"line":60},[57,105667,104740],{"class":140},[14,105669,105670,105671,105673,105674,105676],{},"手动改完 ",[28,105672,104227],{}," 后，调用 ",[28,105675,104447],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[365,105678,102513],{"id":102512},[14,105680,105681],{},"你会看到:",[377,105683,105684,105689,105694,105697],{},[380,105685,105686,105687],{},"初始时间为 ",[28,105688,226],{},[380,105690,105691,105692],{},"50 步后时间约为 ",[28,105693,35526],{},[380,105695,105696],{},"reset 后状态恢复",[380,105698,105699,105700,105703,105704],{},"手动修改 ",[28,105701,105702],{},"data.qpos[2]"," 后，小球高度变为 ",[28,105705,105457],{},[14,105707,105708,105710],{},[28,105709,105453],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,105712,105713],{},"输出里可以重点看三件事：",[377,105715,105716,105724,105729],{},[380,105717,105718,105720,105721,105723],{},[28,105719,2660],{}," 是否随着 ",[28,105722,101412],{}," 增加。",[380,105725,105726,105728],{},[28,105727,104227],{}," 的 z 坐标是否因为下落而变化。",[380,105730,105731,105733,105734,28654],{},[28,105732,104549],{}," 后时间是否回到 ",[28,105735,226],{},[365,105737,102545],{"id":102544},[377,105739,105740,105746,105752,105758,105761,105770],{},[380,105741,105742,105743,28654],{},"修改 timestep 为 ",[28,105744,105745],{},"0.005",[380,105747,105748,105749,28654],{},"重新运行，检查 50 步后时间是否约为 ",[28,105750,105751],{},"0.25",[380,105753,105754,105755,28654],{},"修改重力为 ",[28,105756,105757],{},"0 0 -1.0",[380,105759,105760],{},"观察小球下降速度是否变慢。",[380,105762,102608,105763,102611,105766,105769],{},[28,105764,105765],{},"data.qpos[2] = 2.0",[28,105767,105768],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[380,105771,105772,105773,105776],{},"注释掉 ",[28,105774,105775],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[365,105778,102650],{"id":102649},[394,105780,105782,105783,105785],{"id":105781},"修改-dataqpos-后位置没有更新","修改 ",[28,105784,101267],{}," 后位置没有更新",[14,105787,102659],{},[49,105789,105790],{"className":122,"code":104740,"language":124,"meta":46,"style":46},[28,105791,105792],{"__ignoreMap":46},[57,105793,105794],{"class":59,"line":60},[57,105795,104740],{"class":140},[394,105797,105798],{"id":105798},"数组维度看不懂",[14,105800,105801],{},"打印模型维度:",[49,105803,105805],{"className":122,"code":105804,"language":124,"meta":46,"style":46},"print(model.nq, model.nv, model.nu)\n",[28,105806,105807],{"__ignoreMap":46},[57,105808,105809,105811],{"class":59,"line":60},[57,105810,165],{"class":81},[57,105812,105813],{"class":140},"(model.nq, model.nv, model.nu)\n",[557,105815,105816,105824],{},[560,105817,105818],{},[563,105819,105820,105822],{},[566,105821,104771],{"align":24008},[566,105823,100897],{"align":24008},[603,105825,105826,105836,105846],{},[563,105827,105828,105833],{},[608,105829,105830],{"align":24008},[28,105831,105832],{},"nq",[608,105834,105835],{"align":24008},"位置变量数量",[563,105837,105838,105843],{},[608,105839,105840],{"align":24008},[28,105841,105842],{},"nv",[608,105844,105845],{"align":24008},"速度变量数量",[563,105847,105848,105852],{},[608,105849,105850],{"align":24008},[28,105851,102359],{},[608,105853,105854],{"align":24008},"控制输入数量",[394,105856,105858,105859,105861],{"id":105857},"误以为-qpos-一定等于关节数","误以为 ",[28,105860,104227],{}," 一定等于关节数",[14,105863,105864,105865,82727,105867,105869,105870,105872],{},"不是。例如 ",[28,105866,101817],{},[28,105868,104227],{}," 是 7 维，但 ",[28,105871,104557],{}," 是 6 维。",[394,105874,105876,105877,105879],{"id":105875},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[28,105878,104227],{}," 的第几位",[14,105881,105882],{},"初学时可以先打印：",[49,105884,105886],{"className":122,"code":105885,"language":124,"meta":46,"style":46},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[28,105887,105888,105898,105908,105920],{"__ignoreMap":46},[57,105889,105890,105892,105894,105896],{"class":59,"line":60},[57,105891,165],{"class":81},[57,105893,168],{"class":140},[57,105895,101636],{"class":74},[57,105897,101639],{"class":140},[57,105899,105900,105902,105904,105906],{"class":59,"line":67},[57,105901,165],{"class":81},[57,105903,168],{"class":140},[57,105905,101648],{"class":74},[57,105907,101651],{"class":140},[57,105909,105910,105912,105914,105917],{"class":59,"line":144},[57,105911,165],{"class":81},[57,105913,168],{"class":140},[57,105915,105916],{"class":74},"\"qpos:\"",[57,105918,105919],{"class":140},", data.qpos)\n",[57,105921,105922,105924,105926,105929],{"class":59,"line":150},[57,105923,165],{"class":81},[57,105925,168],{"class":140},[57,105927,105928],{"class":74},"\"qvel:\"",[57,105930,105931],{"class":140},", data.qvel)\n",[14,105933,105934],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[394,105936,105937],{"id":105937},"仿真结果每次都一样",[14,105939,105940,105941,105943],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[28,105942,104227],{},"、目标点或控制输入。",[365,105945,102804],{"id":102803},[14,105947,105948,105949,24887],{},"Python 控制 MuJoCo 的核心就是读写 ",[28,105950,33598],{},[377,105952,105953,105961,105966,105971],{},[380,105954,105955,105956,101215,105958,105960],{},"用 ",[28,105957,101267],{},[28,105959,101270],{}," 读取状态。",[380,105962,105955,105963,105965],{},[28,105964,101273],{}," 写入控制。",[380,105967,105955,105968,105970],{},[28,105969,101412],{}," 推进时间。",[380,105972,105973,105974,105976],{},"手动改状态后用 ",[28,105975,104447],{}," 刷新派生量。",[14,105978,105979],{},"理解这一章后，就可以进入关节和 actuator 控制。",[342,105981,105982],{},"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":46,"searchDepth":67,"depth":67,"links":105984},[105985,105986,105987,105994,105998,105999,106000,106010],{"id":100843,"depth":67,"text":100844},{"id":100966,"depth":67,"text":100967},{"id":101241,"depth":67,"text":101242,"children":105988},[105989,105991,105993],{"id":104752,"depth":144,"text":105990},"qpos、qvel、ctrl 是什么",{"id":104830,"depth":144,"text":105992},"mj_step 和 mj_forward 的区别",{"id":104919,"depth":144,"text":104920},{"id":101449,"depth":67,"text":101450,"children":105995},[105996,105997],{"id":101769,"depth":144,"text":101769},{"id":101905,"depth":144,"text":101905},{"id":102512,"depth":67,"text":102513},{"id":102544,"depth":67,"text":102545},{"id":102649,"depth":67,"text":102650,"children":106001},[106002,106004,106005,106007,106009],{"id":105781,"depth":144,"text":106003},"修改 data.qpos 后位置没有更新",{"id":105798,"depth":144,"text":105798},{"id":105857,"depth":144,"text":106006},"误以为 qpos 一定等于关节数",{"id":105875,"depth":144,"text":106008},"不知道某个元素在 qpos 的第几位",{"id":105937,"depth":144,"text":105937},{"id":102803,"depth":67,"text":102804},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104515,"description":46},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106017,"title":106018,"body":106019,"description":46,"extension":348,"meta":107709,"navigation":350,"path":107710,"seo":107711,"stem":107712,"__hash__":107713},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106020,"toc":107685},[106021,106024,106026,106029,106031,106056,106059,106078,106081,106083,106085,106109,106111,106125,106127,106168,106170,106194,106196,106199,106233,106235,106248,106251,106319,106328,106332,106335,106369,106375,106378,106382,106421,106424,106444,106448,106491,106493,106522,106525,106531,106534,106536,106930,106932,106944,106946,106957,106959,106962,106991,106999,107002,107037,107040,107042,107050,107053,107055,107066,107076,107096,107099,107135,107147,107195,107214,107256,107269,107297,107302,107323,107333,107351,107354,107388,107391,107411,107414,107433,107439,107441,107444,107450,107456,107466,107469,107475,107484,107486,107532,107534,107540,107546,107549,107552,107572,107575,107581,107587,107589,107612,107615,107618,107627,107630,107668,107670,107673,107679,107682],[10,106022,106018],{"id":106023},"_4关节actuator-与力控制",[365,106025,100844],{"id":100843},[14,106027,106028],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,106030,104528],{},[377,106032,106033,106039,106044,106048,106053],{},[380,106034,106035,106038],{},[28,106036,106037],{},"hinge"," 关节",[380,106040,106041],{},[28,106042,106043],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[380,106045,106046],{},[28,106047,101273],{},[380,106049,106050],{},[28,106051,106052],{},"ctrlrange",[380,106054,106055],{},"读取关节角和角速度",[14,106057,106058],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[49,106060,106062],{"className":122,"code":106061,"language":124,"meta":46,"style":46},"data.ctrl[0] = ...\n",[28,106063,106064],{"__ignoreMap":46},[57,106065,106066,106069,106071,106073,106075],{"class":59,"line":60},[57,106067,106068],{"class":140},"data.ctrl[",[57,106070,226],{"class":81},[57,106072,4716],{"class":140},[57,106074,156],{"class":136},[57,106076,106077],{"class":81}," ...\n",[14,106079,106080],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[365,106082,100967],{"id":100966},[14,106084,100970],{},[49,106086,106087],{"className":51,"code":104585,"language":53,"meta":46,"style":46},[28,106088,106089],{"__ignoreMap":46},[57,106090,106091,106093,106095,106097,106099,106101,106103,106105,106107],{"class":59,"line":60},[57,106092,24845],{"class":70},[57,106094,26584],{"class":74},[57,106096,75],{"class":74},[57,106098,26669],{"class":81},[57,106100,104600],{"class":74},[57,106102,100995],{"class":74},[57,106104,102698],{"class":74},[57,106106,101011],{"class":74},[57,106108,104609],{"class":74},[14,106110,103016],{},[49,106112,106113],{"className":51,"code":101116,"language":53,"meta":46,"style":46},[28,106114,106115],{"__ignoreMap":46},[57,106116,106117,106119,106121,106123],{"class":59,"line":60},[57,106118,24101],{"class":70},[57,106120,75],{"class":74},[57,106122,101127],{"class":74},[57,106124,101130],{"class":74},[14,106126,103033],{},[49,106128,106130],{"className":51,"code":106129,"language":53,"meta":46,"style":46},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[28,106131,106132,106149,106158],{"__ignoreMap":46},[57,106133,106134,106136,106138,106140,106143,106145,106147],{"class":59,"line":60},[57,106135,71],{"class":70},[57,106137,29445],{"class":74},[57,106139,25384],{"class":81},[57,106141,106142],{"class":74}," mujoco-control",[57,106144,101172],{"class":74},[57,106146,101175],{"class":81},[57,106148,101178],{"class":81},[57,106150,106151,106153,106155],{"class":59,"line":67},[57,106152,71],{"class":70},[57,106154,101185],{"class":74},[57,106156,106157],{"class":74}," mujoco-control\n",[57,106159,106160,106162,106164,106166],{"class":59,"line":144},[57,106161,24101],{"class":70},[57,106163,75],{"class":74},[57,106165,101127],{"class":74},[57,106167,101130],{"class":74},[14,106169,101201],{},[377,106171,106172,106178,106185,106191],{},[380,106173,106174,106177],{},[28,106175,106176],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[380,106179,106180,106182,106183,28654],{},[28,106181,101273],{}," 长度等于 ",[28,106184,102355],{},[380,106186,82419,106187,106190],{},[28,106188,106189],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[380,106192,106193],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[365,106195,101242],{"id":101241},[14,106197,106198],{},"关节决定 body 如何运动:",[49,106200,106202],{"className":53264,"code":106201,"language":53266,"meta":46,"style":46},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[28,106203,106204],{"__ignoreMap":46},[57,106205,106206,106208,106210,106212,106214,106217,106219,106221,106223,106226,106228,106231],{"class":59,"line":60},[57,106207,1326],{"class":140},[57,106209,103153],{"class":51497},[57,106211,15192],{"class":70},[57,106213,156],{"class":140},[57,106215,106216],{"class":74},"\"hinge\"",[57,106218,54021],{"class":70},[57,106220,156],{"class":140},[57,106222,106216],{"class":74},[57,106224,106225],{"class":70}," axis",[57,106227,156],{"class":140},[57,106229,106230],{"class":74},"\"0 1 0\"",[57,106232,101341],{"class":140},[14,106234,103249],{},[377,106236,106237,106242,106245],{},[380,106238,106239,106240],{},"名字是 ",[28,106241,106037],{},[380,106243,106244],{},"类型是旋转关节",[380,106246,106247],{},"绕 y 轴旋转",[14,106249,106250],{},"actuator 决定如何施加控制:",[49,106252,106254],{"className":53264,"code":106253,"language":53266,"meta":46,"style":46},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[28,106255,106256,106265,106311],{"__ignoreMap":46},[57,106257,106258,106260,106263],{"class":59,"line":60},[57,106259,1326],{"class":140},[57,106261,106262],{"class":51497},"actuator",[57,106264,51504],{"class":140},[57,106266,106267,106269,106272,106274,106276,106279,106282,106284,106286,106289,106291,106293,106296,106298,106301,106304,106306,106309],{"class":59,"line":67},[57,106268,52341],{"class":140},[57,106270,106271],{"class":51497},"motor",[57,106273,15192],{"class":70},[57,106275,156],{"class":140},[57,106277,106278],{"class":74},"\"hinge_motor\"",[57,106280,106281],{"class":70}," joint",[57,106283,156],{"class":140},[57,106285,106216],{"class":74},[57,106287,106288],{"class":70}," gear",[57,106290,156],{"class":140},[57,106292,3951],{"class":74},[57,106294,106295],{"class":70}," ctrlrange",[57,106297,156],{"class":140},[57,106299,106300],{"class":74},"\"-2 2\"",[57,106302,106303],{"class":70}," ctrllimited",[57,106305,156],{"class":140},[57,106307,106308],{"class":74},"\"true\"",[57,106310,101341],{"class":140},[57,106312,106313,106315,106317],{"class":59,"line":144},[57,106314,51982],{"class":140},[57,106316,106262],{"class":51497},[57,106318,51504],{"class":140},[14,106320,106321,106324,106325,28654],{},[28,106322,106323],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[28,106326,106327],{},"[-2, 2]",[394,106329,106331],{"id":106330},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,106333,106334],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[557,106336,106337,106347],{},[560,106338,106339],{},[563,106340,106341,106343,106345],{},[566,106342,26022],{"align":24008},[566,106344,102893],{"align":24008},[566,106346,100931],{"align":24008},[603,106348,106349,106359],{},[563,106350,106351,106353,106356],{},[608,106352,103153],{"align":24008},[608,106354,106355],{"align":24008},"定义能怎么动",[608,106357,106358],{"align":24008},"门轴允许门旋转",[563,106360,106361,106363,106366],{},[608,106362,106262],{"align":24008},[608,106364,106365],{"align":24008},"定义怎么施力或控制",[608,106367,106368],{"align":24008},"人推门、马达带动门",[14,106370,106371,106372,106374],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[28,106373,101273],{}," 主动控制它。",[14,106376,106377],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[394,106379,106381],{"id":106380},"hinge-joint","hinge joint",[49,106383,106385],{"className":53264,"code":106384,"language":53266,"meta":46,"style":46},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[28,106386,106387],{"__ignoreMap":46},[57,106388,106389,106391,106393,106395,106397,106399,106401,106403,106405,106407,106409,106411,106414,106416,106419],{"class":59,"line":60},[57,106390,1326],{"class":140},[57,106392,103153],{"class":51497},[57,106394,15192],{"class":70},[57,106396,156],{"class":140},[57,106398,106216],{"class":74},[57,106400,54021],{"class":70},[57,106402,156],{"class":140},[57,106404,106216],{"class":74},[57,106406,106225],{"class":70},[57,106408,156],{"class":140},[57,106410,106230],{"class":74},[57,106412,106413],{"class":70}," damping",[57,106415,156],{"class":140},[57,106417,106418],{"class":74},"\"0.1\"",[57,106420,101341],{"class":140},[14,106422,106423],{},"含义：",[377,106425,106426,106432,106438],{},[380,106427,106428,106431],{},[28,106429,106430],{},"type=\"hinge\"","：只能绕一个轴旋转。",[380,106433,106434,106437],{},[28,106435,106436],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[380,106439,106440,106443],{},[28,106441,106442],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[394,106445,106447],{"id":106446},"motor-actuator","motor actuator",[49,106449,106451],{"className":53264,"code":106450,"language":53266,"meta":46,"style":46},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[28,106452,106453],{"__ignoreMap":46},[57,106454,106455,106457,106459,106461,106463,106465,106467,106469,106471,106473,106475,106477,106479,106481,106483,106485,106487,106489],{"class":59,"line":60},[57,106456,1326],{"class":140},[57,106458,106271],{"class":51497},[57,106460,15192],{"class":70},[57,106462,156],{"class":140},[57,106464,106278],{"class":74},[57,106466,106281],{"class":70},[57,106468,156],{"class":140},[57,106470,106216],{"class":74},[57,106472,106288],{"class":70},[57,106474,156],{"class":140},[57,106476,3951],{"class":74},[57,106478,106295],{"class":70},[57,106480,156],{"class":140},[57,106482,106300],{"class":74},[57,106484,106303],{"class":70},[57,106486,156],{"class":140},[57,106488,106308],{"class":74},[57,106490,101341],{"class":140},[14,106492,106423],{},[377,106494,106495,106504,106510,106516],{},[380,106496,106497,106500,106501,106503],{},[28,106498,106499],{},"joint=\"hinge\"","：这个电机作用在名为 ",[28,106502,106037],{}," 的关节上。",[380,106505,106506,106509],{},[28,106507,106508],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[380,106511,106512,106515],{},[28,106513,106514],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[380,106517,106518,106521],{},[28,106519,106520],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,106523,106524],{},"简单理解：",[49,106526,106529],{"className":106527,"code":106528,"language":5460,"meta":46},[5458],"实际施加效果 ≈ data.ctrl[0] * gear\n",[28,106530,106528],{"__ignoreMap":46},[14,106532,106533],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[365,106535,101450],{"id":101449},[49,106537,106539],{"className":122,"code":106538,"language":124,"meta":46,"style":46},"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",[28,106540,106541,106548,106552,106558,106568,106572,106576,106584,106589,106594,106598,106602,106607,106612,106616,106621,106626,106631,106636,106640,106644,106648,106653,106658,106663,106667,106671,106675,106679,106691,106703,106711,106715,106725,106735,106745,106749,106762,106775,106779,106796,106810,106845,106849,106853,106864,106879,106894,106906,106910,106914,106926],{"__ignoreMap":46},[57,106542,106543,106545],{"class":59,"line":60},[57,106544,137],{"class":136},[57,106546,106547],{"class":140}," math\n",[57,106549,106550],{"class":59,"line":67},[57,106551,2673],{"emptyLinePlaceholder":350},[57,106553,106554,106556],{"class":59,"line":144},[57,106555,137],{"class":136},[57,106557,101498],{"class":140},[57,106559,106560,106562,106564,106566],{"class":59,"line":150},[57,106561,137],{"class":136},[57,106563,31577],{"class":140},[57,106565,31580],{"class":136},[57,106567,31583],{"class":140},[57,106569,106570],{"class":59,"line":162},[57,106571,2673],{"emptyLinePlaceholder":350},[57,106573,106574],{"class":59,"line":180},[57,106575,2673],{"emptyLinePlaceholder":350},[57,106577,106578,106580,106582],{"class":59,"line":186},[57,106579,101511],{"class":81},[57,106581,13837],{"class":136},[57,106583,101516],{"class":74},[57,106585,106586],{"class":59,"line":197},[57,106587,106588],{"class":74},"\u003Cmujoco model=\"one_link_motor\">\n",[57,106590,106591],{"class":59,"line":241},[57,106592,106593],{"class":74},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[57,106595,106596],{"class":59,"line":249},[57,106597,2673],{"emptyLinePlaceholder":350},[57,106599,106600],{"class":59,"line":262},[57,106601,101535],{"class":74},[57,106603,106604],{"class":59,"line":281},[57,106605,106606],{"class":74},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[57,106608,106609],{"class":59,"line":287},[57,106610,106611],{"class":74},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[57,106613,106614],{"class":59,"line":298},[57,106615,2673],{"emptyLinePlaceholder":350},[57,106617,106618],{"class":59,"line":311},[57,106619,106620],{"class":74},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[57,106622,106623],{"class":59,"line":322},[57,106624,106625],{"class":74},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[57,106627,106628],{"class":59,"line":1929},[57,106629,106630],{"class":74},"        \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",[57,106632,106633],{"class":59,"line":1950},[57,106634,106635],{"class":74},"      \u003C\u002Fbody>\n",[57,106637,106638],{"class":59,"line":1955},[57,106639,101564],{"class":74},[57,106641,106642],{"class":59,"line":1969},[57,106643,101569],{"class":74},[57,106645,106646],{"class":59,"line":1974},[57,106647,2673],{"emptyLinePlaceholder":350},[57,106649,106650],{"class":59,"line":2001},[57,106651,106652],{"class":74},"  \u003Cactuator>\n",[57,106654,106655],{"class":59,"line":2006},[57,106656,106657],{"class":74},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[57,106659,106660],{"class":59,"line":2023},[57,106661,106662],{"class":74},"  \u003C\u002Factuator>\n",[57,106664,106665],{"class":59,"line":2028},[57,106666,101574],{"class":74},[57,106668,106669],{"class":59,"line":2033},[57,106670,95895],{"class":74},[57,106672,106673],{"class":59,"line":2038},[57,106674,2673],{"emptyLinePlaceholder":350},[57,106676,106677],{"class":59,"line":2052},[57,106678,2673],{"emptyLinePlaceholder":350},[57,106680,106681,106683,106685,106687,106689],{"class":59,"line":2057},[57,106682,32144],{"class":136},[57,106684,2246],{"class":70},[57,106686,101595],{"class":140},[57,106688,95883],{"class":81},[57,106690,4012],{"class":140},[57,106692,106693,106695,106697,106699,106701],{"class":59,"line":2850},[57,106694,101604],{"class":140},[57,106696,156],{"class":136},[57,106698,101609],{"class":140},[57,106700,101511],{"class":81},[57,106702,238],{"class":140},[57,106704,106705,106707,106709],{"class":59,"line":2864},[57,106706,101618],{"class":140},[57,106708,156],{"class":136},[57,106710,101623],{"class":140},[57,106712,106713],{"class":59,"line":2872},[57,106714,2673],{"emptyLinePlaceholder":350},[57,106716,106717,106719,106721,106723],{"class":59,"line":2877},[57,106718,31496],{"class":81},[57,106720,168],{"class":140},[57,106722,101636],{"class":74},[57,106724,101639],{"class":140},[57,106726,106727,106729,106731,106733],{"class":59,"line":2883},[57,106728,31496],{"class":81},[57,106730,168],{"class":140},[57,106732,101648],{"class":74},[57,106734,101651],{"class":140},[57,106736,106737,106739,106741,106743],{"class":59,"line":2889},[57,106738,31496],{"class":81},[57,106740,168],{"class":140},[57,106742,101660],{"class":74},[57,106744,101663],{"class":140},[57,106746,106747],{"class":59,"line":2894},[57,106748,2673],{"emptyLinePlaceholder":350},[57,106750,106751,106753,106756,106758,106760],{"class":59,"line":8221},[57,106752,3374],{"class":136},[57,106754,106755],{"class":140}," model.nu ",[57,106757,21220],{"class":136},[57,106759,25387],{"class":81},[57,106761,4012],{"class":140},[57,106763,106764,106766,106768,106770,106773],{"class":59,"line":8245},[57,106765,103629],{"class":136},[57,106767,103632],{"class":81},[57,106769,168],{"class":140},[57,106771,106772],{"class":74},"\"expected exactly one actuator\"",[57,106774,238],{"class":140},[57,106776,106777],{"class":59,"line":8250},[57,106778,2673],{"emptyLinePlaceholder":350},[57,106780,106781,106783,106785,106787,106789,106791,106794],{"class":59,"line":8256},[57,106782,3474],{"class":136},[57,106784,31813],{"class":140},[57,106786,26312],{"class":136},[57,106788,32640],{"class":81},[57,106790,168],{"class":140},[57,106792,106793],{"class":81},"2000",[57,106795,30983],{"class":140},[57,106797,106798,106801,106803,106805,106807],{"class":59,"line":8283},[57,106799,106800],{"class":140},"        t ",[57,106802,156],{"class":136},[57,106804,31813],{"class":140},[57,106806,871],{"class":136},[57,106808,106809],{"class":140}," model.opt.timestep\n",[57,106811,106812,106815,106817,106819,106821,106824,106826,106829,106831,106833,106836,106838,106840,106842],{"class":59,"line":8288},[57,106813,106814],{"class":140},"        data.ctrl[",[57,106816,226],{"class":81},[57,106818,4716],{"class":140},[57,106820,156],{"class":136},[57,106822,106823],{"class":81}," 1.5",[57,106825,6791],{"class":136},[57,106827,106828],{"class":140}," math.sin(",[57,106830,105457],{"class":81},[57,106832,6791],{"class":136},[57,106834,106835],{"class":140}," math.pi ",[57,106837,871],{"class":136},[57,106839,62064],{"class":81},[57,106841,6791],{"class":136},[57,106843,106844],{"class":140}," t)\n",[57,106846,106847],{"class":59,"line":8294},[57,106848,101713],{"class":140},[57,106850,106851],{"class":59,"line":8306},[57,106852,2673],{"emptyLinePlaceholder":350},[57,106854,106855,106857,106859,106862],{"class":59,"line":8318},[57,106856,31496],{"class":81},[57,106858,168],{"class":140},[57,106860,106861],{"class":74},"\"time:\"",[57,106863,101675],{"class":140},[57,106865,106866,106868,106870,106873,106875,106877],{"class":59,"line":8330},[57,106867,31496],{"class":81},[57,106869,168],{"class":140},[57,106871,106872],{"class":74},"\"joint qpos:\"",[57,106874,105127],{"class":140},[57,106876,710],{"class":81},[57,106878,259],{"class":140},[57,106880,106881,106883,106885,106888,106890,106892],{"class":59,"line":9989},[57,106882,31496],{"class":81},[57,106884,168],{"class":140},[57,106886,106887],{"class":74},"\"joint qvel:\"",[57,106889,105143],{"class":140},[57,106891,710],{"class":81},[57,106893,259],{"class":140},[57,106895,106896,106898,106900,106903],{"class":59,"line":10014},[57,106897,31496],{"class":81},[57,106899,168],{"class":140},[57,106901,106902],{"class":74},"\"last ctrl:\"",[57,106904,106905],{"class":140},", data.ctrl.copy())\n",[57,106907,106908],{"class":59,"line":10037},[57,106909,2673],{"emptyLinePlaceholder":350},[57,106911,106912],{"class":59,"line":10061},[57,106913,2673],{"emptyLinePlaceholder":350},[57,106915,106916,106918,106920,106922,106924],{"class":59,"line":10066},[57,106917,1813],{"class":136},[57,106919,31417],{"class":81},[57,106921,101756],{"class":136},[57,106923,101759],{"class":74},[57,106925,4012],{"class":140},[57,106927,106928],{"class":59,"line":10071},[57,106929,101766],{"class":140},[14,106931,103767],{},[49,106933,106935],{"className":51,"code":106934,"language":53,"meta":46,"style":46},"touch ch4_joint_motor.py\n",[28,106936,106937],{"__ignoreMap":46},[57,106938,106939,106941],{"class":59,"line":60},[57,106940,101480],{"class":70},[57,106942,106943],{"class":74}," ch4_joint_motor.py\n",[14,106945,102498],{},[49,106947,106949],{"className":51,"code":106948,"language":53,"meta":46,"style":46},"python ch4_joint_motor.py\n",[28,106950,106951],{"__ignoreMap":46},[57,106952,106953,106955],{"class":59,"line":60},[57,106954,124],{"class":70},[57,106956,106943],{"class":74},[394,106958,101769],{"id":101769},[14,106960,106961],{},"检查 actuator 数量：",[49,106963,106965],{"className":122,"code":106964,"language":124,"meta":46,"style":46},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[28,106966,106967,106979],{"__ignoreMap":46},[57,106968,106969,106971,106973,106975,106977],{"class":59,"line":60},[57,106970,1813],{"class":136},[57,106972,106755],{"class":140},[57,106974,21220],{"class":136},[57,106976,25387],{"class":81},[57,106978,4012],{"class":140},[57,106980,106981,106983,106985,106987,106989],{"class":59,"line":67},[57,106982,104092],{"class":136},[57,106984,103632],{"class":81},[57,106986,168],{"class":140},[57,106988,106772],{"class":74},[57,106990,238],{"class":140},[14,106992,106993,106995,106996,106998],{},[28,106994,102355],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[28,106997,101273],{}," 长度应该是 1。",[14,107000,107001],{},"产生正弦控制信号：",[49,107003,107005],{"className":122,"code":107004,"language":124,"meta":46,"style":46},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[28,107006,107007],{"__ignoreMap":46},[57,107008,107009,107011,107013,107015,107017,107019,107021,107023,107025,107027,107029,107031,107033,107035],{"class":59,"line":60},[57,107010,106068],{"class":140},[57,107012,226],{"class":81},[57,107014,4716],{"class":140},[57,107016,156],{"class":136},[57,107018,106823],{"class":81},[57,107020,6791],{"class":136},[57,107022,106828],{"class":140},[57,107024,105457],{"class":81},[57,107026,6791],{"class":136},[57,107028,106835],{"class":140},[57,107030,871],{"class":136},[57,107032,62064],{"class":81},[57,107034,6791],{"class":136},[57,107036,106844],{"class":140},[14,107038,107039],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,107041,101870],{},[49,107043,107044],{"className":122,"code":104702,"language":124,"meta":46,"style":46},[28,107045,107046],{"__ignoreMap":46},[57,107047,107048],{"class":59,"line":60},[57,107049,104702],{"class":140},[14,107051,107052],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[394,107054,101905],{"id":101905},[49,107056,107058],{"className":122,"code":107057,"language":124,"meta":46,"style":46},"import math\n",[28,107059,107060],{"__ignoreMap":46},[57,107061,107062,107064],{"class":59,"line":60},[57,107063,137],{"class":136},[57,107065,106547],{"class":140},[14,107067,107068,107069,101215,107072,107075],{},"导入 Python 标准库里的数学模块。后面要用 ",[28,107070,107071],{},"math.sin",[28,107073,107074],{},"math.pi"," 生成周期变化的控制信号。",[49,107077,107078],{"className":122,"code":103883,"language":124,"meta":46,"style":46},[28,107079,107080,107086],{"__ignoreMap":46},[57,107081,107082,107084],{"class":59,"line":60},[57,107083,137],{"class":136},[57,107085,101498],{"class":140},[57,107087,107088,107090,107092,107094],{"class":59,"line":67},[57,107089,137],{"class":136},[57,107091,31577],{"class":140},[57,107093,31580],{"class":136},[57,107095,31583],{"class":140},[14,107097,107098],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[49,107100,107101],{"className":53264,"code":106384,"language":53266,"meta":46,"style":46},[28,107102,107103],{"__ignoreMap":46},[57,107104,107105,107107,107109,107111,107113,107115,107117,107119,107121,107123,107125,107127,107129,107131,107133],{"class":59,"line":60},[57,107106,1326],{"class":140},[57,107108,103153],{"class":51497},[57,107110,15192],{"class":70},[57,107112,156],{"class":140},[57,107114,106216],{"class":74},[57,107116,54021],{"class":70},[57,107118,156],{"class":140},[57,107120,106216],{"class":74},[57,107122,106225],{"class":70},[57,107124,156],{"class":140},[57,107126,106230],{"class":74},[57,107128,106413],{"class":70},[57,107130,156],{"class":140},[57,107132,106418],{"class":74},[57,107134,101341],{"class":140},[14,107136,107137,107138,107140,107141,107143,107144,107146],{},"这行定义关节。",[28,107139,106037],{}," 表示旋转关节。",[28,107142,106436],{}," 表示绕 y 轴旋转。",[28,107145,106442],{}," 表示有一点阻尼，运动不会完全无损耗。",[49,107148,107150],{"className":53264,"code":107149,"language":53266,"meta":46,"style":46},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[28,107151,107152],{"__ignoreMap":46},[57,107153,107154,107156,107158,107160,107162,107165,107167,107169,107172,107175,107177,107180,107182,107184,107186,107188,107190,107193],{"class":59,"line":60},[57,107155,1326],{"class":140},[57,107157,101317],{"class":51497},[57,107159,15192],{"class":70},[57,107161,156],{"class":140},[57,107163,107164],{"class":74},"\"link_geom\"",[57,107166,54021],{"class":70},[57,107168,156],{"class":140},[57,107170,107171],{"class":74},"\"capsule\"",[57,107173,107174],{"class":70}," fromto",[57,107176,156],{"class":140},[57,107178,107179],{"class":74},"\"0 0 0 0 0 0.5\"",[57,107181,101333],{"class":70},[57,107183,156],{"class":140},[57,107185,103975],{"class":74},[57,107187,102198],{"class":70},[57,107189,156],{"class":140},[57,107191,107192],{"class":74},"\"0.5\"",[57,107194,101341],{"class":140},[14,107196,107197,107198,107200,107201,107203,107204,107207,107208,28654,107211,107213],{},"这行定义摆杆的形状。",[28,107199,103362],{}," 是胶囊体，适合表示杆子。",[28,107202,103373],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[28,107205,107206],{},"(0,0,0)"," 延伸到 ",[28,107209,107210],{},"(0,0,0.5)",[28,107212,103367],{}," 是半径。",[49,107215,107216],{"className":53264,"code":106450,"language":53266,"meta":46,"style":46},[28,107217,107218],{"__ignoreMap":46},[57,107219,107220,107222,107224,107226,107228,107230,107232,107234,107236,107238,107240,107242,107244,107246,107248,107250,107252,107254],{"class":59,"line":60},[57,107221,1326],{"class":140},[57,107223,106271],{"class":51497},[57,107225,15192],{"class":70},[57,107227,156],{"class":140},[57,107229,106278],{"class":74},[57,107231,106281],{"class":70},[57,107233,156],{"class":140},[57,107235,106216],{"class":74},[57,107237,106288],{"class":70},[57,107239,156],{"class":140},[57,107241,3951],{"class":74},[57,107243,106295],{"class":70},[57,107245,156],{"class":140},[57,107247,106300],{"class":74},[57,107249,106303],{"class":70},[57,107251,156],{"class":140},[57,107253,106308],{"class":74},[57,107255,101341],{"class":140},[14,107257,107258,107259,107261,107262,107265,107266,107268],{},"这行定义电机。它作用在 ",[28,107260,106037],{}," 关节上。",[28,107263,107264],{},"gear"," 可以理解成放大倍数。",[28,107267,106052],{}," 限制控制输入范围。",[49,107270,107271],{"className":122,"code":106964,"language":124,"meta":46,"style":46},[28,107272,107273,107285],{"__ignoreMap":46},[57,107274,107275,107277,107279,107281,107283],{"class":59,"line":60},[57,107276,1813],{"class":136},[57,107278,106755],{"class":140},[57,107280,21220],{"class":136},[57,107282,25387],{"class":81},[57,107284,4012],{"class":140},[57,107286,107287,107289,107291,107293,107295],{"class":59,"line":67},[57,107288,104092],{"class":136},[57,107290,103632],{"class":81},[57,107292,168],{"class":140},[57,107294,106772],{"class":74},[57,107296,238],{"class":140},[14,107298,107299,107301],{},[28,107300,102355],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[49,107303,107305],{"className":122,"code":107304,"language":124,"meta":46,"style":46},"for step in range(2000):\n",[28,107306,107307],{"__ignoreMap":46},[57,107308,107309,107311,107313,107315,107317,107319,107321],{"class":59,"line":60},[57,107310,3298],{"class":136},[57,107312,31813],{"class":140},[57,107314,26312],{"class":136},[57,107316,32640],{"class":81},[57,107318,168],{"class":140},[57,107320,106793],{"class":81},[57,107322,30983],{"class":140},[14,107324,107325,107326,107328,107329,107332],{},"循环 2000 步。这里没有用 ",[28,107327,1407],{},"，而是用 ",[28,107330,107331],{},"step","，因为后面要用当前步数计算时间。",[49,107334,107336],{"className":122,"code":107335,"language":124,"meta":46,"style":46},"t = step * model.opt.timestep\n",[28,107337,107338],{"__ignoreMap":46},[57,107339,107340,107343,107345,107347,107349],{"class":59,"line":60},[57,107341,107342],{"class":140},"t ",[57,107344,156],{"class":136},[57,107346,31813],{"class":140},[57,107348,871],{"class":136},[57,107350,106809],{"class":140},[14,107352,107353],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[49,107355,107356],{"className":122,"code":107004,"language":124,"meta":46,"style":46},[28,107357,107358],{"__ignoreMap":46},[57,107359,107360,107362,107364,107366,107368,107370,107372,107374,107376,107378,107380,107382,107384,107386],{"class":59,"line":60},[57,107361,106068],{"class":140},[57,107363,226],{"class":81},[57,107365,4716],{"class":140},[57,107367,156],{"class":136},[57,107369,106823],{"class":81},[57,107371,6791],{"class":136},[57,107373,106828],{"class":140},[57,107375,105457],{"class":81},[57,107377,6791],{"class":136},[57,107379,106835],{"class":140},[57,107381,871],{"class":136},[57,107383,62064],{"class":81},[57,107385,6791],{"class":136},[57,107387,106844],{"class":140},[14,107389,107390],{},"这行给电机输入一个正弦波。拆开看：",[377,107392,107393,107399,107405],{},[380,107394,107395,107398],{},[28,107396,107397],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[380,107400,107401,107404],{},[28,107402,107403],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[380,107406,107407,107410],{},[28,107408,107409],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,107412,107413],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[49,107415,107417],{"className":122,"code":107416,"language":124,"meta":46,"style":46},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[28,107418,107419],{"__ignoreMap":46},[57,107420,107421,107423,107425,107427,107429,107431],{"class":59,"line":60},[57,107422,165],{"class":81},[57,107424,168],{"class":140},[57,107426,106872],{"class":74},[57,107428,105127],{"class":140},[57,107430,710],{"class":81},[57,107432,259],{"class":140},[14,107434,107435,107436,107438],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[28,107437,101267],{}," 只有一个数。",[365,107440,102513],{"id":102512},[14,107442,107443],{},"输出类似:",[49,107445,107448],{"className":107446,"code":107447,"language":5460,"meta":46},[5458],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[28,107449,107447],{"__ignoreMap":46},[14,107451,107452,107453,107455],{},"这里 ",[28,107454,106323],{}," 是电机输入。",[14,107457,107458,107461,107462,107465],{},[28,107459,107460],{},"joint qpos"," 是关节角度，单位通常是弧度。",[28,107463,107464],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,107467,107468],{},"角度单位提示：",[49,107470,107473],{"className":107471,"code":107472,"language":5460,"meta":46},[5458],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[28,107474,107472],{"__ignoreMap":46},[14,107476,107477,107478,107480,107481,107483],{},"如果你看到 ",[28,107479,104227],{}," 是 ",[28,107482,35526],{},"，大约就是 28.6 度。",[365,107485,102545],{"id":102544},[377,107487,107488,107495,107498,107505,107508,107516,107524],{},[380,107489,102608,107490,102611,107492,28654],{},[28,107491,106508],{},[28,107493,107494],{},"gear=\"5\"",[380,107496,107497],{},"重新运行，观察关节运动是否更剧烈。",[380,107499,102608,107500,102611,107502,28654],{},[28,107501,106052],{},[28,107503,107504],{},"-0.2 0.2",[380,107506,107507],{},"重新运行，观察控制能力是否变弱。",[380,107509,107510,107511,107513,107514,28654],{},"去掉 actuator，确认 ",[28,107512,102355],{}," 变成 ",[28,107515,226],{},[380,107517,102608,107518,102611,107520,107523],{},[28,107519,106442],{},[28,107521,107522],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[380,107525,102608,107526,102611,107528,107531],{},[28,107527,106436],{},[28,107529,107530],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[365,107533,102650],{"id":102649},[394,107535,107537],{"id":107536},"indexerror-index-0-is-out-of-bounds",[28,107538,107539],{},"IndexError: index 0 is out of bounds",[14,107541,107542,107543,107545],{},"原因是 ",[28,107544,106189],{},"，没有 actuator。",[394,107547,107548],{"id":107548},"关节几乎不动",[14,107550,107551],{},"可能原因:",[377,107553,107554,107559,107563,107569],{},[380,107555,107556,107558],{},[28,107557,107264],{}," 太小",[380,107560,107561,107558],{},[28,107562,106052],{},[380,107564,107565,107568],{},[28,107566,107567],{},"damping"," 太大",[380,107570,107571],{},"重力方向导致运动不明显",[394,107573,107574],{"id":107574},"模型编译失败",[14,107576,107577,107578,107580],{},"检查 actuator 引用的 ",[28,107579,106499],{}," 是否存在，joint 名称是否拼写一致。",[394,107582,107584,107586],{"id":107583},"datactrl0-写了但没有效果",[28,107585,106323],{}," 写了但没有效果",[14,107588,102772],{},[377,107590,107591,107596,107599,107604,107609],{},[380,107592,107593,107595],{},[28,107594,102355],{}," 是否大于 0。",[380,107597,107598],{},"motor 是否引用了正确 joint。",[380,107600,107601,107603],{},[28,107602,107264],{}," 是否太小。",[380,107605,107606,107608],{},[28,107607,106052],{}," 是否把输入限制得太小。",[380,107610,107611],{},"body 是否真的有可动 joint。",[394,107613,107614],{"id":107614},"控制输入超过范围会怎样",[14,107616,107617],{},"如果设置了：",[49,107619,107621],{"className":53264,"code":107620,"language":53266,"meta":46,"style":46},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[28,107622,107623],{"__ignoreMap":46},[57,107624,107625],{"class":59,"line":60},[57,107626,107620],{"class":140},[14,107628,107629],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[49,107631,107633],{"className":122,"code":107632,"language":124,"meta":46,"style":46},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[28,107634,107635,107655],{"__ignoreMap":46},[57,107636,107637,107640,107642,107645,107647,107649,107651,107653],{"class":59,"line":60},[57,107638,107639],{"class":140},"action ",[57,107641,156],{"class":136},[57,107643,107644],{"class":140}," np.clip(action, ",[57,107646,948],{"class":136},[57,107648,105457],{"class":81},[57,107650,12708],{"class":140},[57,107652,105457],{"class":81},[57,107654,238],{"class":140},[57,107656,107657,107659,107661,107663,107665],{"class":59,"line":67},[57,107658,106068],{"class":140},[57,107660,226],{"class":81},[57,107662,4716],{"class":140},[57,107664,156],{"class":136},[57,107666,107667],{"class":140}," action\n",[365,107669,102804],{"id":102803},[14,107671,107672],{},"这一章建立了控制任务的基本形式：",[49,107674,107677],{"className":107675,"code":107676,"language":5460,"meta":46},[5458],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[28,107678,107676],{"__ignoreMap":46},[14,107680,107681],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[342,107683,107684],{},"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":46,"searchDepth":67,"depth":67,"links":107686},[107687,107688,107689,107694,107698,107699,107700,107708],{"id":100843,"depth":67,"text":100844},{"id":100966,"depth":67,"text":100967},{"id":101241,"depth":67,"text":101242,"children":107690},[107691,107692,107693],{"id":106330,"depth":144,"text":106331},{"id":106380,"depth":144,"text":106381},{"id":106446,"depth":144,"text":106447},{"id":101449,"depth":67,"text":101450,"children":107695},[107696,107697],{"id":101769,"depth":144,"text":101769},{"id":101905,"depth":144,"text":101905},{"id":102512,"depth":67,"text":102513},{"id":102544,"depth":67,"text":102545},{"id":102649,"depth":67,"text":102650,"children":107701},[107702,107703,107704,107705,107707],{"id":107536,"depth":144,"text":107539},{"id":107548,"depth":144,"text":107548},{"id":107574,"depth":144,"text":107574},{"id":107583,"depth":144,"text":107706},"data.ctrl[0] 写了但没有效果",{"id":107614,"depth":144,"text":107614},{"id":102803,"depth":67,"text":102804},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106018,"description":46},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107715,"title":107716,"body":107717,"description":46,"extension":348,"meta":109626,"navigation":350,"path":109627,"seo":109628,"stem":109629,"__hash__":109630},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107718,"toc":109602},[107719,107722,107724,107727,107735,107738,107755,107758,107783,107786,107832,107834,107836,107891,107893,107912,107914,107957,107960,107977,107980,107996,108006,108013,108015,108018,108021,108055,108058,108106,108110,108113,108127,108136,108140,108143,108168,108171,108175,108188,108191,108197,108200,108215,108217,108220,108480,108482,108494,108497,108809,108811,108823,108825,108828,108843,108848,108851,108873,108876,108879,108913,108916,108920,108931,108934,108951,108954,108968,108975,108995,109002,109016,109019,109031,109046,109066,109069,109091,109094,109098,109113,109124,109139,109142,109172,109188,109217,109225,109249,109252,109270,109280,109292,109299,109308,109314,109323,109326,109328,109337,109340,109355,109357,109360,109371,109374,109385,109388,109406,109408,109425,109428,109456,109458,109462,109465,109495,109501,109504,109508,109516,109519,109521,109542,109545,109548,109564,109567,109583,109585,109588,109599],[10,107720,107716],{"id":107721},"_5viewer-可视化与-renderer-离屏渲染",[365,107723,100844],{"id":100843},[14,107725,107726],{},"本章掌握两类可视化方式:",[377,107728,107729,107732],{},[380,107730,107731],{},"交互式 viewer: 适合人工观察仿真",[380,107733,107734],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,107736,107737],{},"使用官方接口:",[49,107739,107741],{"className":122,"code":107740,"language":124,"meta":46,"style":46},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[28,107742,107743,107750],{"__ignoreMap":46},[57,107744,107745,107747],{"class":59,"line":60},[57,107746,137],{"class":136},[57,107748,107749],{"class":140}," mujoco.viewer\n",[57,107751,107752],{"class":59,"line":67},[57,107753,107754],{"class":140},"mujoco.viewer.launch_passive(model, data)\n",[14,107756,107757],{},"以及:",[49,107759,107761],{"className":122,"code":107760,"language":124,"meta":46,"style":46},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[28,107762,107763,107773],{"__ignoreMap":46},[57,107764,107765,107768,107770],{"class":59,"line":60},[57,107766,107767],{"class":140},"renderer ",[57,107769,156],{"class":136},[57,107771,107772],{"class":140}," mujoco.Renderer(model)\n",[57,107774,107775,107778,107780],{"class":59,"line":67},[57,107776,107777],{"class":140},"image ",[57,107779,156],{"class":136},[57,107781,107782],{"class":140}," renderer.render()\n",[14,107784,107785],{},"新手建议先理解二者区别：",[557,107787,107788,107804],{},[560,107789,107790],{},[563,107791,107792,107795,107798,107801],{},[566,107793,107794],{"align":24008},"工具",[566,107796,107797],{"align":24008},"用途",[566,107799,107800],{"align":24008},"是否打开窗口",[566,107802,107803],{"align":24008},"常见场景",[603,107805,107806,107819],{},[563,107807,107808,107811,107814,107816],{},[608,107809,107810],{"align":24008},"Viewer",[608,107812,107813],{"align":24008},"人眼实时观察仿真",[608,107815,104862],{"align":24008},[608,107817,107818],{"align":24008},"调试模型、看控制效果",[563,107820,107821,107824,107827,107829],{},[608,107822,107823],{"align":24008},"Renderer",[608,107825,107826],{"align":24008},"生成图像数组",[608,107828,104875],{"align":24008},[608,107830,107831],{"align":24008},"保存图片、训练视觉策略、服务器批量采集",[365,107833,100967],{"id":100966},[14,107835,100970],{},[49,107837,107839],{"className":51,"code":107838,"language":53,"meta":46,"style":46},"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",[28,107840,107841,107853,107863,107871,107879],{"__ignoreMap":46},[57,107842,107843,107845,107847,107849,107851],{"class":59,"line":60},[57,107844,24845],{"class":70},[57,107846,26584],{"class":74},[57,107848,75],{"class":74},[57,107850,26669],{"class":81},[57,107852,24947],{"class":81},[57,107854,107855,107857,107859,107861],{"class":59,"line":67},[57,107856,101005],{"class":74},[57,107858,101008],{"class":74},[57,107860,101011],{"class":74},[57,107862,24947],{"class":81},[57,107864,107865,107867,107869],{"class":59,"line":144},[57,107866,101018],{"class":74},[57,107868,101021],{"class":74},[57,107870,24947],{"class":81},[57,107872,107873,107875,107877],{"class":59,"line":150},[57,107874,101028],{"class":74},[57,107876,101031],{"class":74},[57,107878,24947],{"class":81},[57,107880,107881,107883,107885,107887,107889],{"class":59,"line":162},[57,107882,101038],{"class":74},[57,107884,101041],{"class":74},[57,107886,101044],{"class":74},[57,107888,101047],{"class":74},[57,107890,102713],{"class":74},[14,107892,103016],{},[49,107894,107896],{"className":51,"code":107895,"language":53,"meta":46,"style":46},"pip install \"mujoco>=2.3\" numpy pillow\n",[28,107897,107898],{"__ignoreMap":46},[57,107899,107900,107902,107904,107906,107909],{"class":59,"line":60},[57,107901,24101],{"class":70},[57,107903,75],{"class":74},[57,107905,101127],{"class":74},[57,107907,107908],{"class":74}," numpy",[57,107910,107911],{"class":74}," pillow\n",[14,107913,103033],{},[49,107915,107917],{"className":51,"code":107916,"language":53,"meta":46,"style":46},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[28,107918,107919,107936,107945],{"__ignoreMap":46},[57,107920,107921,107923,107925,107927,107930,107932,107934],{"class":59,"line":60},[57,107922,71],{"class":70},[57,107924,29445],{"class":74},[57,107926,25384],{"class":81},[57,107928,107929],{"class":74}," mujoco-render",[57,107931,101172],{"class":74},[57,107933,101175],{"class":81},[57,107935,101178],{"class":81},[57,107937,107938,107940,107942],{"class":59,"line":67},[57,107939,71],{"class":70},[57,107941,101185],{"class":74},[57,107943,107944],{"class":74}," mujoco-render\n",[57,107946,107947,107949,107951,107953,107955],{"class":59,"line":144},[57,107948,24101],{"class":70},[57,107950,75],{"class":74},[57,107952,101127],{"class":74},[57,107954,107908],{"class":74},[57,107956,107911],{"class":74},[14,107958,107959],{},"离屏渲染后端:",[49,107961,107963],{"className":51,"code":107962,"language":53,"meta":46,"style":46},"export MUJOCO_GL=egl\n",[28,107964,107965],{"__ignoreMap":46},[57,107966,107967,107969,107972,107974],{"class":59,"line":60},[57,107968,25311],{"class":136},[57,107970,107971],{"class":140}," MUJOCO_GL",[57,107973,156],{"class":136},[57,107975,107976],{"class":140},"egl\n",[14,107978,107979],{},"或:",[49,107981,107983],{"className":51,"code":107982,"language":53,"meta":46,"style":46},"export MUJOCO_GL=osmesa\n",[28,107984,107985],{"__ignoreMap":46},[57,107986,107987,107989,107991,107993],{"class":59,"line":60},[57,107988,25311],{"class":136},[57,107990,107971],{"class":140},[57,107992,156],{"class":136},[57,107994,107995],{"class":140},"osmesa\n",[14,107997,107998,107999,108002,108003,28654],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[28,108000,108001],{},"egl"," 失败，再尝试 ",[28,108004,108005],{},"osmesa",[14,108007,108008,108009,108012],{},"如果你在本机桌面环境运行，通常先不要设置 ",[28,108010,108011],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[365,108014,101242],{"id":101241},[14,108016,108017],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,108019,108020],{},"典型 viewer 流程:",[49,108022,108024],{"className":122,"code":108023,"language":124,"meta":46,"style":46},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[28,108025,108026,108039,108046,108050],{"__ignoreMap":46},[57,108027,108028,108031,108034,108036],{"class":59,"line":60},[57,108029,108030],{"class":136},"with",[57,108032,108033],{"class":140}," mujoco.viewer.launch_passive(model, data) ",[57,108035,31580],{"class":136},[57,108037,108038],{"class":140}," viewer:\n",[57,108040,108041,108043],{"class":59,"line":67},[57,108042,2524],{"class":136},[57,108044,108045],{"class":140}," viewer.is_running():\n",[57,108047,108048],{"class":59,"line":144},[57,108049,101713],{"class":140},[57,108051,108052],{"class":59,"line":150},[57,108053,108054],{"class":140},"        viewer.sync()\n",[14,108056,108057],{},"典型 renderer 流程:",[49,108059,108061],{"className":122,"code":108060,"language":124,"meta":46,"style":46},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[28,108062,108063,108089,108093,108098],{"__ignoreMap":46},[57,108064,108065,108067,108069,108072,108074,108076,108078,108080,108082,108084,108087],{"class":59,"line":60},[57,108066,107767],{"class":140},[57,108068,156],{"class":136},[57,108070,108071],{"class":140}," mujoco.Renderer(model, ",[57,108073,25250],{"class":5489},[57,108075,156],{"class":136},[57,108077,42539],{"class":81},[57,108079,12708],{"class":140},[57,108081,25246],{"class":5489},[57,108083,156],{"class":136},[57,108085,108086],{"class":81},"640",[57,108088,238],{"class":140},[57,108090,108091],{"class":59,"line":67},[57,108092,104702],{"class":140},[57,108094,108095],{"class":59,"line":144},[57,108096,108097],{"class":140},"renderer.update_scene(data)\n",[57,108099,108100,108102,108104],{"class":59,"line":150},[57,108101,107777],{"class":140},[57,108103,156],{"class":136},[57,108105,107782],{"class":140},[394,108107,108109],{"id":108108},"viewer-的同步逻辑","viewer 的同步逻辑",[14,108111,108112],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[49,108114,108116],{"className":122,"code":108115,"language":124,"meta":46,"style":46},"mujoco.mj_step(model, data)\nviewer.sync()\n",[28,108117,108118,108122],{"__ignoreMap":46},[57,108119,108120],{"class":59,"line":60},[57,108121,104702],{"class":140},[57,108123,108124],{"class":59,"line":67},[57,108125,108126],{"class":140},"viewer.sync()\n",[14,108128,108129,108131,108132,108135],{},[28,108130,101412],{}," 负责算物理，",[28,108133,108134],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[394,108137,108139],{"id":108138},"为什么要-sleep","为什么要 sleep",[14,108141,108142],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[49,108144,108146],{"className":122,"code":108145,"language":124,"meta":46,"style":46},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[28,108147,108148],{"__ignoreMap":46},[57,108149,108150,108153,108155,108158,108160,108163,108165],{"class":59,"line":60},[57,108151,108152],{"class":140},"sleep_time ",[57,108154,156],{"class":136},[57,108156,108157],{"class":140}," model.opt.timestep ",[57,108159,948],{"class":136},[57,108161,108162],{"class":140}," (time.time() ",[57,108164,948],{"class":136},[57,108166,108167],{"class":140}," step_start)\n",[14,108169,108170],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[394,108172,108174],{"id":108173},"renderer-输出是什么","renderer 输出是什么",[49,108176,108178],{"className":122,"code":108177,"language":124,"meta":46,"style":46},"image = renderer.render()\n",[28,108179,108180],{"__ignoreMap":46},[57,108181,108182,108184,108186],{"class":59,"line":60},[57,108183,107777],{"class":140},[57,108185,156],{"class":136},[57,108187,107782],{"class":140},[14,108189,108190],{},"得到的是 NumPy 数组，形状通常是：",[49,108192,108195],{"className":108193,"code":108194,"language":5460,"meta":46},[5458],"(height, width, 3)\n",[28,108196,108194],{"__ignoreMap":46},[14,108198,108199],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[49,108201,108203],{"className":122,"code":108202,"language":124,"meta":46,"style":46},"Image.fromarray(image).save(\"render_output.png\")\n",[28,108204,108205],{"__ignoreMap":46},[57,108206,108207,108210,108213],{"class":59,"line":60},[57,108208,108209],{"class":140},"Image.fromarray(image).save(",[57,108211,108212],{"class":74},"\"render_output.png\"",[57,108214,238],{"class":140},[365,108216,101450],{"id":101449},[14,108218,108219],{},"交互式 Viewer:",[49,108221,108223],{"className":122,"code":108222,"language":124,"meta":46,"style":46},"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",[28,108224,108225,108231,108235,108241,108247,108251,108255,108263,108268,108272,108276,108280,108285,108290,108294,108298,108302,108307,108311,108315,108319,108323,108327,108331,108343,108355,108363,108367,108377,108397,108407,108412,108417,108421,108438,108451,108456,108460,108464,108476],{"__ignoreMap":46},[57,108226,108227,108229],{"class":59,"line":60},[57,108228,137],{"class":136},[57,108230,32026],{"class":140},[57,108232,108233],{"class":59,"line":67},[57,108234,2673],{"emptyLinePlaceholder":350},[57,108236,108237,108239],{"class":59,"line":144},[57,108238,137],{"class":136},[57,108240,101498],{"class":140},[57,108242,108243,108245],{"class":59,"line":150},[57,108244,137],{"class":136},[57,108246,107749],{"class":140},[57,108248,108249],{"class":59,"line":162},[57,108250,2673],{"emptyLinePlaceholder":350},[57,108252,108253],{"class":59,"line":180},[57,108254,2673],{"emptyLinePlaceholder":350},[57,108256,108257,108259,108261],{"class":59,"line":186},[57,108258,101511],{"class":81},[57,108260,13837],{"class":136},[57,108262,101516],{"class":74},[57,108264,108265],{"class":59,"line":197},[57,108266,108267],{"class":74},"\u003Cmujoco model=\"viewer_demo\">\n",[57,108269,108270],{"class":59,"line":241},[57,108271,101526],{"class":74},[57,108273,108274],{"class":59,"line":249},[57,108275,2673],{"emptyLinePlaceholder":350},[57,108277,108278],{"class":59,"line":262},[57,108279,101535],{"class":74},[57,108281,108282],{"class":59,"line":281},[57,108283,108284],{"class":74},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[57,108286,108287],{"class":59,"line":287},[57,108288,108289],{"class":74},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[57,108291,108292],{"class":59,"line":298},[57,108293,2673],{"emptyLinePlaceholder":350},[57,108295,108296],{"class":59,"line":311},[57,108297,101549],{"class":74},[57,108299,108300],{"class":59,"line":322},[57,108301,101554],{"class":74},[57,108303,108304],{"class":59,"line":1929},[57,108305,108306],{"class":74},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[57,108308,108309],{"class":59,"line":1950},[57,108310,101564],{"class":74},[57,108312,108313],{"class":59,"line":1955},[57,108314,101569],{"class":74},[57,108316,108317],{"class":59,"line":1969},[57,108318,101574],{"class":74},[57,108320,108321],{"class":59,"line":1974},[57,108322,95895],{"class":74},[57,108324,108325],{"class":59,"line":2001},[57,108326,2673],{"emptyLinePlaceholder":350},[57,108328,108329],{"class":59,"line":2006},[57,108330,2673],{"emptyLinePlaceholder":350},[57,108332,108333,108335,108337,108339,108341],{"class":59,"line":2023},[57,108334,32144],{"class":136},[57,108336,2246],{"class":70},[57,108338,101595],{"class":140},[57,108340,95883],{"class":81},[57,108342,4012],{"class":140},[57,108344,108345,108347,108349,108351,108353],{"class":59,"line":2028},[57,108346,101604],{"class":140},[57,108348,156],{"class":136},[57,108350,101609],{"class":140},[57,108352,101511],{"class":81},[57,108354,238],{"class":140},[57,108356,108357,108359,108361],{"class":59,"line":2033},[57,108358,101618],{"class":140},[57,108360,156],{"class":136},[57,108362,101623],{"class":140},[57,108364,108365],{"class":59,"line":2038},[57,108366,2673],{"emptyLinePlaceholder":350},[57,108368,108369,108371,108373,108375],{"class":59,"line":2052},[57,108370,34375],{"class":136},[57,108372,108033],{"class":140},[57,108374,31580],{"class":136},[57,108376,108038],{"class":140},[57,108378,108379,108382,108385,108387,108390,108392,108395],{"class":59,"line":2057},[57,108380,108381],{"class":136},"        while",[57,108383,108384],{"class":140}," viewer.is_running() ",[57,108386,217],{"class":136},[57,108388,108389],{"class":140}," data.time ",[57,108391,1326],{"class":136},[57,108393,108394],{"class":81}," 5.0",[57,108396,4012],{"class":140},[57,108398,108399,108402,108404],{"class":59,"line":2850},[57,108400,108401],{"class":140},"            step_start ",[57,108403,156],{"class":136},[57,108405,108406],{"class":140}," time.time()\n",[57,108408,108409],{"class":59,"line":2864},[57,108410,108411],{"class":140},"            mujoco.mj_step(model, data)\n",[57,108413,108414],{"class":59,"line":2872},[57,108415,108416],{"class":140},"            viewer.sync()\n",[57,108418,108419],{"class":59,"line":2877},[57,108420,2673],{"emptyLinePlaceholder":350},[57,108422,108423,108426,108428,108430,108432,108434,108436],{"class":59,"line":2883},[57,108424,108425],{"class":140},"            sleep_time ",[57,108427,156],{"class":136},[57,108429,108157],{"class":140},[57,108431,948],{"class":136},[57,108433,108162],{"class":140},[57,108435,948],{"class":136},[57,108437,108167],{"class":140},[57,108439,108440,108442,108445,108447,108449],{"class":59,"line":2889},[57,108441,4915],{"class":136},[57,108443,108444],{"class":140}," sleep_time ",[57,108446,223],{"class":136},[57,108448,4366],{"class":81},[57,108450,4012],{"class":140},[57,108452,108453],{"class":59,"line":2894},[57,108454,108455],{"class":140},"                time.sleep(sleep_time)\n",[57,108457,108458],{"class":59,"line":8221},[57,108459,2673],{"emptyLinePlaceholder":350},[57,108461,108462],{"class":59,"line":8245},[57,108463,2673],{"emptyLinePlaceholder":350},[57,108465,108466,108468,108470,108472,108474],{"class":59,"line":8250},[57,108467,1813],{"class":136},[57,108469,31417],{"class":81},[57,108471,101756],{"class":136},[57,108473,101759],{"class":74},[57,108475,4012],{"class":140},[57,108477,108478],{"class":59,"line":8256},[57,108479,101766],{"class":140},[14,108481,103767],{},[49,108483,108485],{"className":51,"code":108484,"language":53,"meta":46,"style":46},"touch ch5_viewer.py\n",[28,108486,108487],{"__ignoreMap":46},[57,108488,108489,108491],{"class":59,"line":60},[57,108490,101480],{"class":70},[57,108492,108493],{"class":74}," ch5_viewer.py\n",[14,108495,108496],{},"离屏 Renderer 保存图片:",[49,108498,108500],{"className":122,"code":108499,"language":124,"meta":46,"style":46},"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",[28,108501,108502,108514,108518,108524,108534,108538,108542,108550,108555,108559,108563,108567,108571,108576,108580,108584,108588,108592,108596,108600,108604,108608,108612,108616,108620,108632,108644,108652,108677,108681,108697,108701,108705,108720,108729,108733,108747,108752,108757,108761,108773,108785,108789,108793,108805],{"__ignoreMap":46},[57,108503,108504,108506,108509,108511],{"class":59,"line":60},[57,108505,30934],{"class":136},[57,108507,108508],{"class":140}," pathlib ",[57,108510,137],{"class":136},[57,108512,108513],{"class":140}," Path\n",[57,108515,108516],{"class":59,"line":67},[57,108517,2673],{"emptyLinePlaceholder":350},[57,108519,108520,108522],{"class":59,"line":144},[57,108521,137],{"class":136},[57,108523,101498],{"class":140},[57,108525,108526,108528,108530,108532],{"class":59,"line":150},[57,108527,30934],{"class":136},[57,108529,47460],{"class":81},[57,108531,47463],{"class":136},[57,108533,47466],{"class":140},[57,108535,108536],{"class":59,"line":162},[57,108537,2673],{"emptyLinePlaceholder":350},[57,108539,108540],{"class":59,"line":180},[57,108541,2673],{"emptyLinePlaceholder":350},[57,108543,108544,108546,108548],{"class":59,"line":186},[57,108545,101511],{"class":81},[57,108547,13837],{"class":136},[57,108549,101516],{"class":74},[57,108551,108552],{"class":59,"line":197},[57,108553,108554],{"class":74},"\u003Cmujoco model=\"renderer_demo\">\n",[57,108556,108557],{"class":59,"line":241},[57,108558,101526],{"class":74},[57,108560,108561],{"class":59,"line":249},[57,108562,2673],{"emptyLinePlaceholder":350},[57,108564,108565],{"class":59,"line":262},[57,108566,101535],{"class":74},[57,108568,108569],{"class":59,"line":281},[57,108570,108284],{"class":74},[57,108572,108573],{"class":59,"line":287},[57,108574,108575],{"class":74},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[57,108577,108578],{"class":59,"line":298},[57,108579,108289],{"class":74},[57,108581,108582],{"class":59,"line":311},[57,108583,2673],{"emptyLinePlaceholder":350},[57,108585,108586],{"class":59,"line":322},[57,108587,101549],{"class":74},[57,108589,108590],{"class":59,"line":1929},[57,108591,101554],{"class":74},[57,108593,108594],{"class":59,"line":1950},[57,108595,108306],{"class":74},[57,108597,108598],{"class":59,"line":1955},[57,108599,101564],{"class":74},[57,108601,108602],{"class":59,"line":1969},[57,108603,101569],{"class":74},[57,108605,108606],{"class":59,"line":1974},[57,108607,101574],{"class":74},[57,108609,108610],{"class":59,"line":2001},[57,108611,95895],{"class":74},[57,108613,108614],{"class":59,"line":2006},[57,108615,2673],{"emptyLinePlaceholder":350},[57,108617,108618],{"class":59,"line":2023},[57,108619,2673],{"emptyLinePlaceholder":350},[57,108621,108622,108624,108626,108628,108630],{"class":59,"line":2028},[57,108623,32144],{"class":136},[57,108625,2246],{"class":70},[57,108627,101595],{"class":140},[57,108629,95883],{"class":81},[57,108631,4012],{"class":140},[57,108633,108634,108636,108638,108640,108642],{"class":59,"line":2033},[57,108635,101604],{"class":140},[57,108637,156],{"class":136},[57,108639,101609],{"class":140},[57,108641,101511],{"class":81},[57,108643,238],{"class":140},[57,108645,108646,108648,108650],{"class":59,"line":2038},[57,108647,101618],{"class":140},[57,108649,156],{"class":136},[57,108651,101623],{"class":140},[57,108653,108654,108657,108659,108661,108663,108665,108667,108669,108671,108673,108675],{"class":59,"line":2052},[57,108655,108656],{"class":140},"    renderer ",[57,108658,156],{"class":136},[57,108660,108071],{"class":140},[57,108662,25250],{"class":5489},[57,108664,156],{"class":136},[57,108666,42539],{"class":81},[57,108668,12708],{"class":140},[57,108670,25246],{"class":5489},[57,108672,156],{"class":136},[57,108674,108086],{"class":81},[57,108676,238],{"class":140},[57,108678,108679],{"class":59,"line":2057},[57,108680,2673],{"emptyLinePlaceholder":350},[57,108682,108683,108685,108687,108689,108691,108693,108695],{"class":59,"line":2850},[57,108684,3474],{"class":136},[57,108686,101698],{"class":140},[57,108688,26312],{"class":136},[57,108690,32640],{"class":81},[57,108692,168],{"class":140},[57,108694,728],{"class":81},[57,108696,30983],{"class":140},[57,108698,108699],{"class":59,"line":2864},[57,108700,101713],{"class":140},[57,108702,108703],{"class":59,"line":2872},[57,108704,2673],{"emptyLinePlaceholder":350},[57,108706,108707,108710,108713,108715,108718],{"class":59,"line":2877},[57,108708,108709],{"class":140},"    renderer.update_scene(data, ",[57,108711,108712],{"class":5489},"camera",[57,108714,156],{"class":136},[57,108716,108717],{"class":74},"\"fixed_camera\"",[57,108719,238],{"class":140},[57,108721,108722,108725,108727],{"class":59,"line":2883},[57,108723,108724],{"class":140},"    image ",[57,108726,156],{"class":136},[57,108728,107782],{"class":140},[57,108730,108731],{"class":59,"line":2889},[57,108732,2673],{"emptyLinePlaceholder":350},[57,108734,108735,108738,108740,108743,108745],{"class":59,"line":2894},[57,108736,108737],{"class":140},"    output_path ",[57,108739,156],{"class":136},[57,108741,108742],{"class":140}," Path(",[57,108744,108212],{"class":74},[57,108746,238],{"class":140},[57,108748,108749],{"class":59,"line":8221},[57,108750,108751],{"class":140},"    Image.fromarray(image).save(output_path)\n",[57,108753,108754],{"class":59,"line":8245},[57,108755,108756],{"class":140},"    renderer.close()\n",[57,108758,108759],{"class":59,"line":8250},[57,108760,2673],{"emptyLinePlaceholder":350},[57,108762,108763,108765,108767,108770],{"class":59,"line":8256},[57,108764,31496],{"class":81},[57,108766,168],{"class":140},[57,108768,108769],{"class":74},"\"saved:\"",[57,108771,108772],{"class":140},", output_path.resolve())\n",[57,108774,108775,108777,108779,108782],{"class":59,"line":8283},[57,108776,31496],{"class":81},[57,108778,168],{"class":140},[57,108780,108781],{"class":74},"\"image shape:\"",[57,108783,108784],{"class":140},", image.shape)\n",[57,108786,108787],{"class":59,"line":8288},[57,108788,2673],{"emptyLinePlaceholder":350},[57,108790,108791],{"class":59,"line":8294},[57,108792,2673],{"emptyLinePlaceholder":350},[57,108794,108795,108797,108799,108801,108803],{"class":59,"line":8306},[57,108796,1813],{"class":136},[57,108798,31417],{"class":81},[57,108800,101756],{"class":136},[57,108802,101759],{"class":74},[57,108804,4012],{"class":140},[57,108806,108807],{"class":59,"line":8318},[57,108808,101766],{"class":140},[14,108810,103767],{},[49,108812,108814],{"className":51,"code":108813,"language":53,"meta":46,"style":46},"touch ch5_renderer.py\n",[28,108815,108816],{"__ignoreMap":46},[57,108817,108818,108820],{"class":59,"line":60},[57,108819,101480],{"class":70},[57,108821,108822],{"class":74}," ch5_renderer.py\n",[394,108824,101769],{"id":101769},[14,108826,108827],{},"viewer 上下文：",[49,108829,108831],{"className":122,"code":108830,"language":124,"meta":46,"style":46},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[28,108832,108833],{"__ignoreMap":46},[57,108834,108835,108837,108839,108841],{"class":59,"line":60},[57,108836,108030],{"class":136},[57,108838,108033],{"class":140},[57,108840,31580],{"class":136},[57,108842,108038],{"class":140},[14,108844,108845,108847],{},[28,108846,108030],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,108849,108850],{},"窗口循环：",[49,108852,108854],{"className":122,"code":108853,"language":124,"meta":46,"style":46},"while viewer.is_running() and data.time \u003C 5.0:\n",[28,108855,108856],{"__ignoreMap":46},[57,108857,108858,108861,108863,108865,108867,108869,108871],{"class":59,"line":60},[57,108859,108860],{"class":136},"while",[57,108862,108384],{"class":140},[57,108864,217],{"class":136},[57,108866,108389],{"class":140},[57,108868,1326],{"class":136},[57,108870,108394],{"class":81},[57,108872,4012],{"class":140},[14,108874,108875],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,108877,108878],{},"固定相机：",[49,108880,108882],{"className":53264,"code":108881,"language":53266,"meta":46,"style":46},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[28,108883,108884],{"__ignoreMap":46},[57,108885,108886,108888,108890,108892,108894,108896,108898,108900,108903,108906,108908,108911],{"class":59,"line":60},[57,108887,1326],{"class":140},[57,108889,108712],{"class":51497},[57,108891,15192],{"class":70},[57,108893,156],{"class":140},[57,108895,108717],{"class":74},[57,108897,101303],{"class":70},[57,108899,156],{"class":140},[57,108901,108902],{"class":74},"\"1.5 -2.0 1.2\"",[57,108904,108905],{"class":70}," xyaxes",[57,108907,156],{"class":140},[57,108909,108910],{"class":74},"\"1 0.75 0 0 0 1\"",[57,108912,101341],{"class":140},[14,108914,108915],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[394,108917,108919],{"id":108918},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[49,108921,108923],{"className":122,"code":108922,"language":124,"meta":46,"style":46},"import time\n",[28,108924,108925],{"__ignoreMap":46},[57,108926,108927,108929],{"class":59,"line":60},[57,108928,137],{"class":136},[57,108930,32026],{"class":140},[14,108932,108933],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[49,108935,108937],{"className":122,"code":108936,"language":124,"meta":46,"style":46},"import mujoco\nimport mujoco.viewer\n",[28,108938,108939,108945],{"__ignoreMap":46},[57,108940,108941,108943],{"class":59,"line":60},[57,108942,137],{"class":136},[57,108944,101498],{"class":140},[57,108946,108947,108949],{"class":59,"line":67},[57,108948,137],{"class":136},[57,108950,107749],{"class":140},[14,108952,108953],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[49,108955,108956],{"className":122,"code":108830,"language":124,"meta":46,"style":46},[28,108957,108958],{"__ignoreMap":46},[57,108959,108960,108962,108964,108966],{"class":59,"line":60},[57,108961,108030],{"class":136},[57,108963,108033],{"class":140},[57,108965,31580],{"class":136},[57,108967,108038],{"class":140},[14,108969,108970,108971,108974],{},"打开一个 viewer 窗口。",[28,108972,108973],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[49,108976,108977],{"className":122,"code":108853,"language":124,"meta":46,"style":46},[28,108978,108979],{"__ignoreMap":46},[57,108980,108981,108983,108985,108987,108989,108991,108993],{"class":59,"line":60},[57,108982,108860],{"class":136},[57,108984,108384],{"class":140},[57,108986,217],{"class":136},[57,108988,108389],{"class":140},[57,108990,1326],{"class":136},[57,108992,108394],{"class":81},[57,108994,4012],{"class":140},[14,108996,108997,108998,109001],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[28,108999,109000],{},"viewer.is_running()"," 会变成 false，循环结束。",[49,109003,109005],{"className":122,"code":109004,"language":124,"meta":46,"style":46},"step_start = time.time()\n",[28,109006,109007],{"__ignoreMap":46},[57,109008,109009,109012,109014],{"class":59,"line":60},[57,109010,109011],{"class":140},"step_start ",[57,109013,156],{"class":136},[57,109015,108406],{"class":140},[14,109017,109018],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[49,109020,109021],{"className":122,"code":108115,"language":124,"meta":46,"style":46},[28,109022,109023,109027],{"__ignoreMap":46},[57,109024,109025],{"class":59,"line":60},[57,109026,104702],{"class":140},[57,109028,109029],{"class":59,"line":67},[57,109030,108126],{"class":140},[14,109032,109033,109035,109036,109038,109039,109041,109042,109045],{},[28,109034,101412],{}," 推进物理仿真。",[28,109037,108134],{}," 把最新的 ",[28,109040,33598],{}," 同步到窗口里显示。没有 ",[28,109043,109044],{},"sync()","，窗口可能看不到最新状态。",[49,109047,109048],{"className":122,"code":108145,"language":124,"meta":46,"style":46},[28,109049,109050],{"__ignoreMap":46},[57,109051,109052,109054,109056,109058,109060,109062,109064],{"class":59,"line":60},[57,109053,108152],{"class":140},[57,109055,156],{"class":136},[57,109057,108157],{"class":140},[57,109059,948],{"class":136},[57,109061,108162],{"class":140},[57,109063,948],{"class":136},[57,109065,108167],{"class":140},[14,109067,109068],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[49,109070,109072],{"className":122,"code":109071,"language":124,"meta":46,"style":46},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[28,109073,109074,109086],{"__ignoreMap":46},[57,109075,109076,109078,109080,109082,109084],{"class":59,"line":60},[57,109077,1813],{"class":136},[57,109079,108444],{"class":140},[57,109081,223],{"class":136},[57,109083,4366],{"class":81},[57,109085,4012],{"class":140},[57,109087,109088],{"class":59,"line":67},[57,109089,109090],{"class":140},"    time.sleep(sleep_time)\n",[14,109092,109093],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[394,109095,109097],{"id":109096},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[49,109099,109101],{"className":122,"code":109100,"language":124,"meta":46,"style":46},"from pathlib import Path\n",[28,109102,109103],{"__ignoreMap":46},[57,109104,109105,109107,109109,109111],{"class":59,"line":60},[57,109106,30934],{"class":136},[57,109108,108508],{"class":140},[57,109110,137],{"class":136},[57,109112,108513],{"class":140},[14,109114,109115,109116,109119,109120,109123],{},"导入 ",[28,109117,109118],{},"Path","，用来处理文件路径。相比直接写字符串，",[28,109121,109122],{},"Path(\"render_output.png\")"," 更清晰。",[49,109125,109127],{"className":122,"code":109126,"language":124,"meta":46,"style":46},"from PIL import Image\n",[28,109128,109129],{"__ignoreMap":46},[57,109130,109131,109133,109135,109137],{"class":59,"line":60},[57,109132,30934],{"class":136},[57,109134,47460],{"class":81},[57,109136,47463],{"class":136},[57,109138,47466],{"class":140},[14,109140,109141],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[49,109143,109144],{"className":53264,"code":108881,"language":53266,"meta":46,"style":46},[28,109145,109146],{"__ignoreMap":46},[57,109147,109148,109150,109152,109154,109156,109158,109160,109162,109164,109166,109168,109170],{"class":59,"line":60},[57,109149,1326],{"class":140},[57,109151,108712],{"class":51497},[57,109153,15192],{"class":70},[57,109155,156],{"class":140},[57,109157,108717],{"class":74},[57,109159,101303],{"class":70},[57,109161,156],{"class":140},[57,109163,108902],{"class":74},[57,109165,108905],{"class":70},[57,109167,156],{"class":140},[57,109169,108910],{"class":74},[57,109171,101341],{"class":140},[14,109173,109174,109175,109177,109178,109180,109181,109184,109185,109187],{},"定义一个相机。",[28,109176,80007],{}," 是相机名字。",[28,109179,104343],{}," 是相机在世界里的位置。",[28,109182,109183],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[28,109186,104343],{}," 来调视角。",[49,109189,109191],{"className":122,"code":109190,"language":124,"meta":46,"style":46},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[28,109192,109193],{"__ignoreMap":46},[57,109194,109195,109197,109199,109201,109203,109205,109207,109209,109211,109213,109215],{"class":59,"line":60},[57,109196,107767],{"class":140},[57,109198,156],{"class":136},[57,109200,108071],{"class":140},[57,109202,25250],{"class":5489},[57,109204,156],{"class":136},[57,109206,42539],{"class":81},[57,109208,12708],{"class":140},[57,109210,25246],{"class":5489},[57,109212,156],{"class":136},[57,109214,108086],{"class":81},[57,109216,238],{"class":140},[14,109218,109219,109220,101215,109222,109224],{},"创建离屏渲染器。",[28,109221,25250],{},[28,109223,25246],{}," 决定输出图片大小。",[49,109226,109227],{"className":122,"code":101873,"language":124,"meta":46,"style":46},[28,109228,109229,109245],{"__ignoreMap":46},[57,109230,109231,109233,109235,109237,109239,109241,109243],{"class":59,"line":60},[57,109232,3298],{"class":136},[57,109234,101698],{"class":140},[57,109236,26312],{"class":136},[57,109238,32640],{"class":81},[57,109240,168],{"class":140},[57,109242,728],{"class":81},[57,109244,30983],{"class":140},[57,109246,109247],{"class":59,"line":67},[57,109248,101896],{"class":140},[14,109250,109251],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[49,109253,109255],{"className":122,"code":109254,"language":124,"meta":46,"style":46},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[28,109256,109257],{"__ignoreMap":46},[57,109258,109259,109262,109264,109266,109268],{"class":59,"line":60},[57,109260,109261],{"class":140},"renderer.update_scene(data, ",[57,109263,108712],{"class":5489},[57,109265,156],{"class":136},[57,109267,108717],{"class":74},[57,109269,238],{"class":140},[14,109271,109272,109273,109275,109276,109279],{},"告诉 renderer：用当前 ",[28,109274,33598],{}," 的状态更新画面，并使用名为 ",[28,109277,109278],{},"fixed_camera"," 的相机视角。",[49,109281,109282],{"className":122,"code":108177,"language":124,"meta":46,"style":46},[28,109283,109284],{"__ignoreMap":46},[57,109285,109286,109288,109290],{"class":59,"line":60},[57,109287,107777],{"class":140},[57,109289,156],{"class":136},[57,109291,107782],{"class":140},[14,109293,109294,109295,109298],{},"真正渲染出图像。",[28,109296,109297],{},"image"," 是一个 NumPy 数组，不是文件。",[49,109300,109302],{"className":122,"code":109301,"language":124,"meta":46,"style":46},"Image.fromarray(image).save(output_path)\n",[28,109303,109304],{"__ignoreMap":46},[57,109305,109306],{"class":59,"line":60},[57,109307,109301],{"class":140},[14,109309,109310,109311,28654],{},"把数组转换成图片，并保存到 ",[28,109312,109313],{},"render_output.png",[49,109315,109317],{"className":122,"code":109316,"language":124,"meta":46,"style":46},"renderer.close()\n",[28,109318,109319],{"__ignoreMap":46},[57,109320,109321],{"class":59,"line":60},[57,109322,109316],{"class":140},[14,109324,109325],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[365,109327,102513],{"id":102512},[14,109329,109330,109331,109333,109334,28654],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[28,109332,109313],{},"，并输出图像数组形状，例如 ",[28,109335,109336],{},"(480, 640, 3)",[14,109338,109339],{},"如果图片里看不到方块，先检查：",[377,109341,109342,109345,109348],{},[380,109343,109344],{},"方块是否掉到相机视野外。",[380,109346,109347],{},"camera 位置是否合理。",[380,109349,109350,109351,109354],{},"是否在 ",[28,109352,109353],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[365,109356,102545],{"id":102544},[14,109358,109359],{},"运行 viewer:",[49,109361,109363],{"className":51,"code":109362,"language":53,"meta":46,"style":46},"python ch5_viewer.py\n",[28,109364,109365],{"__ignoreMap":46},[57,109366,109367,109369],{"class":59,"line":60},[57,109368,124],{"class":70},[57,109370,108493],{"class":74},[14,109372,109373],{},"运行 renderer:",[49,109375,109377],{"className":51,"code":109376,"language":53,"meta":46,"style":46},"python ch5_renderer.py\n",[28,109378,109379],{"__ignoreMap":46},[57,109380,109381,109383],{"class":59,"line":60},[57,109382,124],{"class":70},[57,109384,108822],{"class":74},[14,109386,109387],{},"如果在服务器上运行:",[49,109389,109391],{"className":51,"code":109390,"language":53,"meta":46,"style":46},"MUJOCO_GL=egl python ch5_renderer.py\n",[28,109392,109393],{"__ignoreMap":46},[57,109394,109395,109397,109399,109401,109404],{"class":59,"line":60},[57,109396,108011],{"class":140},[57,109398,156],{"class":136},[57,109400,108001],{"class":74},[57,109402,109403],{"class":70}," python",[57,109405,108822],{"class":74},[14,109407,107979],{},[49,109409,109411],{"className":51,"code":109410,"language":53,"meta":46,"style":46},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[28,109412,109413],{"__ignoreMap":46},[57,109414,109415,109417,109419,109421,109423],{"class":59,"line":60},[57,109416,108011],{"class":140},[57,109418,156],{"class":136},[57,109420,108005],{"class":74},[57,109422,109403],{"class":70},[57,109424,108822],{"class":74},[14,109426,109427],{},"再做几个练习：",[377,109429,109430,109437,109440,109446],{},[380,109431,109432,109433,109436],{},"把 renderer 分辨率改成 ",[28,109434,109435],{},"height=240, width=320","，观察输出 shape。",[380,109438,109439],{},"把方块颜色改成蓝色，重新保存图片。",[380,109441,109442,109443,109445],{},"把相机 ",[28,109444,104343],{}," 改远一点，观察画面中物体是否变小。",[380,109447,109448,109449,102611,109452,109455],{},"把 viewer 示例中的 ",[28,109450,109451],{},"data.time \u003C 5.0",[28,109453,109454],{},"data.time \u003C 20.0","，观察更长时间。",[365,109457,102650],{"id":102649},[394,109459,109461],{"id":109460},"viewer-窗口打不开","viewer 窗口打不开",[14,109463,109464],{},"安装:",[49,109466,109468],{"className":51,"code":109467,"language":53,"meta":46,"style":46},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[28,109469,109470],{"__ignoreMap":46},[57,109471,109472,109474,109476,109478,109480,109482,109484,109486,109488,109490,109492],{"class":59,"line":60},[57,109473,24845],{"class":70},[57,109475,26584],{"class":74},[57,109477,75],{"class":74},[57,109479,26669],{"class":81},[57,109481,102703],{"class":74},[57,109483,101031],{"class":74},[57,109485,102708],{"class":74},[57,109487,101044],{"class":74},[57,109489,101050],{"class":74},[57,109491,101041],{"class":74},[57,109493,109494],{"class":74}," libXinerama\n",[394,109496,109498],{"id":109497},"glfwerror",[28,109499,109500],{},"GLFWError",[14,109502,109503],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[394,109505,109507],{"id":109506},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,109509,109510,109511,82736,109513,109515],{},"尝试 ",[28,109512,101234],{},[28,109514,101237],{},"。可能存在版本差异。",[394,109517,109518],{"id":109518},"保存图片是黑的",[14,109520,102772],{},[377,109522,109523,109526,109529,109539],{},[380,109524,109525],{},"XML 里是否有 light。",[380,109527,109528],{},"相机是否对着模型。",[380,109530,109531,109532,109535,109536,28654],{},"是否先 ",[28,109533,109534],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[28,109537,109538],{},"renderer.render()",[380,109540,109541],{},"物体是否已经掉出视野。",[394,109543,109544],{"id":109544},"远程服务器没有显示器",[14,109546,109547],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[49,109549,109550],{"className":51,"code":109390,"language":53,"meta":46,"style":46},[28,109551,109552],{"__ignoreMap":46},[57,109553,109554,109556,109558,109560,109562],{"class":59,"line":60},[57,109555,108011],{"class":140},[57,109557,156],{"class":136},[57,109559,108001],{"class":74},[57,109561,109403],{"class":70},[57,109563,108822],{"class":74},[14,109565,109566],{},"如果 EGL 不可用，再尝试：",[49,109568,109569],{"className":51,"code":109410,"language":53,"meta":46,"style":46},[28,109570,109571],{"__ignoreMap":46},[57,109572,109573,109575,109577,109579,109581],{"class":59,"line":60},[57,109574,108011],{"class":140},[57,109576,156],{"class":136},[57,109578,108005],{"class":74},[57,109580,109403],{"class":70},[57,109582,108822],{"class":74},[365,109584,102804],{"id":102803},[14,109586,109587],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[377,109589,109590,109593,109596],{},[380,109591,109592],{},"先用 viewer 看模型和控制是否正常。",[380,109594,109595],{},"再用 renderer 保存图片或构造视觉观测。",[380,109597,109598],{},"最后把状态、动作、图像、奖励组织成训练数据。",[342,109600,109601],{},"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":46,"searchDepth":67,"depth":67,"links":109603},[109604,109605,109606,109611,109616,109617,109618,109625],{"id":100843,"depth":67,"text":100844},{"id":100966,"depth":67,"text":100967},{"id":101241,"depth":67,"text":101242,"children":109607},[109608,109609,109610],{"id":108108,"depth":144,"text":108109},{"id":108138,"depth":144,"text":108139},{"id":108173,"depth":144,"text":108174},{"id":101449,"depth":67,"text":101450,"children":109612},[109613,109614,109615],{"id":101769,"depth":144,"text":101769},{"id":108918,"depth":144,"text":108919},{"id":109096,"depth":144,"text":109097},{"id":102512,"depth":67,"text":102513},{"id":102544,"depth":67,"text":102545},{"id":102649,"depth":67,"text":102650,"children":109619},[109620,109621,109622,109623,109624],{"id":109460,"depth":144,"text":109461},{"id":109497,"depth":144,"text":109500},{"id":109506,"depth":144,"text":109507},{"id":109518,"depth":144,"text":109518},{"id":109544,"depth":144,"text":109544},{"id":102803,"depth":67,"text":102804},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107716,"description":46},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109632,"title":109633,"body":109634,"description":46,"extension":348,"meta":111545,"navigation":350,"path":111546,"seo":111547,"stem":111548,"__hash__":111549},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109635,"toc":111521},[109636,109639,109641,109644,109646,109665,109668,109674,109677,109679,109681,109705,109707,109721,109723,109764,109766,109777,109779,109782,109788,109791,109825,109828,109860,109863,109895,109899,109902,109942,109945,109951,109954,109960,109964,109967,109973,109976,109980,109983,110023,110025,110038,110041,110043,110625,110627,110639,110642,110653,110655,110658,110677,110689,110692,110713,110716,110719,110762,110765,110768,110788,110795,110797,110815,110830,110833,110839,110842,110848,110865,110872,110903,110914,110948,110959,110976,110985,110993,110998,111012,111015,111036,111042,111056,111061,111091,111101,111126,111134,111157,111160,111176,111179,111187,111193,111215,111228,111249,111258,111297,111308,111310,111313,111319,111322,111325,111331,111334,111354,111357,111359,111398,111400,111403,111411,111414,111417,111444,111447,111457,111463,111466,111472,111474,111480,111484,111487,111489,111492,111516,111519],[10,109637,109633],{"id":109638},"_6控制任务cartpole",[365,109640,100844],{"id":100843},[14,109642,109643],{},"本章搭建一个最小 Cartpole 控制任务。",[14,109645,104528],{},[377,109647,109648,109651,109653,109656,109659,109662],{},[380,109649,109650],{},"slide joint",[380,109652,106381],{},[380,109654,109655],{},"cart force actuator",[380,109657,109658],{},"状态观测",[380,109660,109661],{},"简单控制循环",[380,109663,109664],{},"reward 设计雏形",[14,109666,109667],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[49,109669,109672],{"className":109670,"code":109671,"language":5460,"meta":46},[5458],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[28,109673,109671],{"__ignoreMap":46},[14,109675,109676],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[365,109678,100967],{"id":100966},[14,109680,100970],{},[49,109682,109683],{"className":51,"code":104585,"language":53,"meta":46,"style":46},[28,109684,109685],{"__ignoreMap":46},[57,109686,109687,109689,109691,109693,109695,109697,109699,109701,109703],{"class":59,"line":60},[57,109688,24845],{"class":70},[57,109690,26584],{"class":74},[57,109692,75],{"class":74},[57,109694,26669],{"class":81},[57,109696,104600],{"class":74},[57,109698,100995],{"class":74},[57,109700,102698],{"class":74},[57,109702,101011],{"class":74},[57,109704,104609],{"class":74},[14,109706,103016],{},[49,109708,109709],{"className":51,"code":101116,"language":53,"meta":46,"style":46},[28,109710,109711],{"__ignoreMap":46},[57,109712,109713,109715,109717,109719],{"class":59,"line":60},[57,109714,24101],{"class":70},[57,109716,75],{"class":74},[57,109718,101127],{"class":74},[57,109720,101130],{"class":74},[14,109722,103033],{},[49,109724,109726],{"className":51,"code":109725,"language":53,"meta":46,"style":46},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[28,109727,109728,109745,109754],{"__ignoreMap":46},[57,109729,109730,109732,109734,109736,109739,109741,109743],{"class":59,"line":60},[57,109731,71],{"class":70},[57,109733,29445],{"class":74},[57,109735,25384],{"class":81},[57,109737,109738],{"class":74}," mujoco-cartpole",[57,109740,101172],{"class":74},[57,109742,101175],{"class":81},[57,109744,101178],{"class":81},[57,109746,109747,109749,109751],{"class":59,"line":67},[57,109748,71],{"class":70},[57,109750,101185],{"class":74},[57,109752,109753],{"class":74}," mujoco-cartpole\n",[57,109755,109756,109758,109760,109762],{"class":59,"line":144},[57,109757,24101],{"class":70},[57,109759,75],{"class":74},[57,109761,101127],{"class":74},[57,109763,101130],{"class":74},[14,109765,101201],{},[377,109767,109768,109771,109774],{},[380,109769,109770],{},"本章不依赖 Gymnasium。",[380,109772,109773],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[380,109775,109776],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[365,109778,101242],{"id":101241},[14,109780,109781],{},"Cartpole 的模型结构:",[49,109783,109786],{"className":109784,"code":109785,"language":5460,"meta":46},[5458],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[28,109787,109785],{"__ignoreMap":46},[14,109789,109790],{},"小车通过 slide joint 左右移动:",[49,109792,109794],{"className":53264,"code":109793,"language":53266,"meta":46,"style":46},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[28,109795,109796],{"__ignoreMap":46},[57,109797,109798,109800,109802,109804,109806,109809,109811,109813,109816,109818,109820,109823],{"class":59,"line":60},[57,109799,1326],{"class":140},[57,109801,103153],{"class":51497},[57,109803,15192],{"class":70},[57,109805,156],{"class":140},[57,109807,109808],{"class":74},"\"cart_x\"",[57,109810,54021],{"class":70},[57,109812,156],{"class":140},[57,109814,109815],{"class":74},"\"slide\"",[57,109817,106225],{"class":70},[57,109819,156],{"class":140},[57,109821,109822],{"class":74},"\"1 0 0\"",[57,109824,101341],{"class":140},[14,109826,109827],{},"杆子通过 hinge joint 旋转:",[49,109829,109831],{"className":53264,"code":109830,"language":53266,"meta":46,"style":46},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[28,109832,109833],{"__ignoreMap":46},[57,109834,109835,109837,109839,109841,109843,109846,109848,109850,109852,109854,109856,109858],{"class":59,"line":60},[57,109836,1326],{"class":140},[57,109838,103153],{"class":51497},[57,109840,15192],{"class":70},[57,109842,156],{"class":140},[57,109844,109845],{"class":74},"\"pole_hinge\"",[57,109847,54021],{"class":70},[57,109849,156],{"class":140},[57,109851,106216],{"class":74},[57,109853,106225],{"class":70},[57,109855,156],{"class":140},[57,109857,106230],{"class":74},[57,109859,101341],{"class":140},[14,109861,109862],{},"控制力作用在小车 slide joint 上:",[49,109864,109866],{"className":53264,"code":109865,"language":53266,"meta":46,"style":46},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[28,109867,109868],{"__ignoreMap":46},[57,109869,109870,109872,109874,109876,109878,109881,109883,109885,109887,109889,109891,109893],{"class":59,"line":60},[57,109871,1326],{"class":140},[57,109873,106271],{"class":51497},[57,109875,15192],{"class":70},[57,109877,156],{"class":140},[57,109879,109880],{"class":74},"\"cart_motor\"",[57,109882,106281],{"class":70},[57,109884,156],{"class":140},[57,109886,109808],{"class":74},[57,109888,106288],{"class":70},[57,109890,156],{"class":140},[57,109892,54513],{"class":74},[57,109894,101341],{"class":140},[394,109896,109898],{"id":109897},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,109900,109901],{},"这个简化模型有两个关节：",[557,109903,109904,109915],{},[560,109905,109906],{},[563,109907,109908,109910,109912],{},[566,109909,102956],{"align":24008},[566,109911,24009],{"align":24008},[566,109913,109914],{"align":24008},"对应状态",[603,109916,109917,109930],{},[563,109918,109919,109924,109927],{},[608,109920,109921],{"align":24008},[28,109922,109923],{},"cart_x",[608,109925,109926],{"align":24008},"slide",[608,109928,109929],{"align":24008},"小车 x 位置",[563,109931,109932,109937,109939],{},[608,109933,109934],{"align":24008},[28,109935,109936],{},"pole_hinge",[608,109938,106037],{"align":24008},[608,109940,109941],{"align":24008},"杆子角度",[14,109943,109944],{},"所以：",[49,109946,109949],{"className":109947,"code":109948,"language":5460,"meta":46},[5458],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[28,109950,109948],{"__ignoreMap":46},[14,109952,109953],{},"把它们拼起来就是观测：",[49,109955,109958],{"className":109956,"code":109957,"language":5460,"meta":46},[5458],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[28,109959,109957],{"__ignoreMap":46},[394,109961,109963],{"id":109962},"action-是什么","action 是什么",[14,109965,109966],{},"本章只有一个 actuator：",[49,109968,109971],{"className":109969,"code":109970,"language":5460,"meta":46},[5458],"data.ctrl[0] = action\n",[28,109972,109970],{"__ignoreMap":46},[14,109974,109975],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[394,109977,109979],{"id":109978},"reward-是什么","reward 是什么",[14,109981,109982],{},"奖励函数：",[49,109984,109986],{"className":122,"code":109985,"language":124,"meta":46,"style":46},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[28,109987,109988],{"__ignoreMap":46},[57,109989,109990,109992,109995,109997,109999,110001,110004,110006,110009,110011,110013,110015,110018,110020],{"class":59,"line":60},[57,109991,17318],{"class":136},[57,109993,109994],{"class":81}," float",[57,109996,168],{"class":140},[57,109998,102600],{"class":81},[57,110000,52468],{"class":136},[57,110002,110003],{"class":81}," 0.1",[57,110005,6791],{"class":136},[57,110007,110008],{"class":140}," cart_x ",[57,110010,871],{"class":136},[57,110012,110008],{"class":140},[57,110014,948],{"class":136},[57,110016,110017],{"class":140}," pole_angle ",[57,110019,871],{"class":136},[57,110021,110022],{"class":140}," pole_angle)\n",[14,110024,106423],{},[377,110026,110027,110032,110035],{},[380,110028,110029,110030,28654],{},"基础奖励是 ",[28,110031,102600],{},[380,110033,110034],{},"小车离中心越远，扣分越多。",[380,110036,110037],{},"杆子角度越大，扣分越多。",[14,110039,110040],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[365,110042,101450],{"id":101449},[49,110044,110046],{"className":122,"code":110045,"language":124,"meta":46,"style":46},"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",[28,110047,110048,110054,110064,110068,110072,110080,110085,110089,110093,110097,110102,110106,110111,110116,110121,110125,110130,110135,110140,110144,110148,110152,110156,110160,110165,110169,110173,110177,110181,110185,110195,110202,110206,110210,110224,110238,110251,110281,110285,110289,110301,110313,110321,110325,110338,110342,110346,110355,110359,110375,110385,110398,110411,110415,110438,110456,110460,110472,110476,110480,110490,110500,110504,110520,110561,110565,110585,110601,110605,110609,110621],{"__ignoreMap":46},[57,110049,110050,110052],{"class":59,"line":60},[57,110051,137],{"class":136},[57,110053,101498],{"class":140},[57,110055,110056,110058,110060,110062],{"class":59,"line":67},[57,110057,137],{"class":136},[57,110059,31577],{"class":140},[57,110061,31580],{"class":136},[57,110063,31583],{"class":140},[57,110065,110066],{"class":59,"line":144},[57,110067,2673],{"emptyLinePlaceholder":350},[57,110069,110070],{"class":59,"line":150},[57,110071,2673],{"emptyLinePlaceholder":350},[57,110073,110074,110076,110078],{"class":59,"line":162},[57,110075,101511],{"class":81},[57,110077,13837],{"class":136},[57,110079,101516],{"class":74},[57,110081,110082],{"class":59,"line":180},[57,110083,110084],{"class":74},"\u003Cmujoco model=\"cartpole\">\n",[57,110086,110087],{"class":59,"line":186},[57,110088,101526],{"class":74},[57,110090,110091],{"class":59,"line":197},[57,110092,2673],{"emptyLinePlaceholder":350},[57,110094,110095],{"class":59,"line":241},[57,110096,101535],{"class":74},[57,110098,110099],{"class":59,"line":249},[57,110100,110101],{"class":74},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[57,110103,110104],{"class":59,"line":262},[57,110105,2673],{"emptyLinePlaceholder":350},[57,110107,110108],{"class":59,"line":281},[57,110109,110110],{"class":74},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[57,110112,110113],{"class":59,"line":287},[57,110114,110115],{"class":74},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[57,110117,110118],{"class":59,"line":298},[57,110119,110120],{"class":74},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[57,110122,110123],{"class":59,"line":311},[57,110124,2673],{"emptyLinePlaceholder":350},[57,110126,110127],{"class":59,"line":322},[57,110128,110129],{"class":74},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[57,110131,110132],{"class":59,"line":1929},[57,110133,110134],{"class":74},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[57,110136,110137],{"class":59,"line":1950},[57,110138,110139],{"class":74},"        \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",[57,110141,110142],{"class":59,"line":1955},[57,110143,106635],{"class":74},[57,110145,110146],{"class":59,"line":1969},[57,110147,101564],{"class":74},[57,110149,110150],{"class":59,"line":1974},[57,110151,101569],{"class":74},[57,110153,110154],{"class":59,"line":2001},[57,110155,2673],{"emptyLinePlaceholder":350},[57,110157,110158],{"class":59,"line":2006},[57,110159,106652],{"class":74},[57,110161,110162],{"class":59,"line":2023},[57,110163,110164],{"class":74},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[57,110166,110167],{"class":59,"line":2028},[57,110168,106662],{"class":74},[57,110170,110171],{"class":59,"line":2033},[57,110172,101574],{"class":74},[57,110174,110175],{"class":59,"line":2038},[57,110176,95895],{"class":74},[57,110178,110179],{"class":59,"line":2052},[57,110180,2673],{"emptyLinePlaceholder":350},[57,110182,110183],{"class":59,"line":2057},[57,110184,2673],{"emptyLinePlaceholder":350},[57,110186,110187,110189,110192],{"class":59,"line":2850},[57,110188,32144],{"class":136},[57,110190,110191],{"class":70}," get_observation",[57,110193,110194],{"class":140},"(data: mujoco.MjData) -> np.ndarray:\n",[57,110196,110197,110199],{"class":59,"line":2864},[57,110198,4363],{"class":136},[57,110200,110201],{"class":140}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[57,110203,110204],{"class":59,"line":2872},[57,110205,2673],{"emptyLinePlaceholder":350},[57,110207,110208],{"class":59,"line":2877},[57,110209,2673],{"emptyLinePlaceholder":350},[57,110211,110212,110214,110217,110220,110222],{"class":59,"line":2883},[57,110213,32144],{"class":136},[57,110215,110216],{"class":70}," compute_reward",[57,110218,110219],{"class":140},"(obs: np.ndarray) -> ",[57,110221,464],{"class":81},[57,110223,4012],{"class":140},[57,110225,110226,110229,110231,110234,110236],{"class":59,"line":2889},[57,110227,110228],{"class":140},"    cart_x ",[57,110230,156],{"class":136},[57,110232,110233],{"class":140}," obs[",[57,110235,226],{"class":81},[57,110237,33443],{"class":140},[57,110239,110240,110243,110245,110247,110249],{"class":59,"line":2894},[57,110241,110242],{"class":140},"    pole_angle ",[57,110244,156],{"class":136},[57,110246,110233],{"class":140},[57,110248,635],{"class":81},[57,110250,33443],{"class":140},[57,110252,110253,110255,110257,110259,110261,110263,110265,110267,110269,110271,110273,110275,110277,110279],{"class":59,"line":8221},[57,110254,4363],{"class":136},[57,110256,109994],{"class":81},[57,110258,168],{"class":140},[57,110260,102600],{"class":81},[57,110262,52468],{"class":136},[57,110264,110003],{"class":81},[57,110266,6791],{"class":136},[57,110268,110008],{"class":140},[57,110270,871],{"class":136},[57,110272,110008],{"class":140},[57,110274,948],{"class":136},[57,110276,110017],{"class":140},[57,110278,871],{"class":136},[57,110280,110022],{"class":140},[57,110282,110283],{"class":59,"line":8245},[57,110284,2673],{"emptyLinePlaceholder":350},[57,110286,110287],{"class":59,"line":8250},[57,110288,2673],{"emptyLinePlaceholder":350},[57,110290,110291,110293,110295,110297,110299],{"class":59,"line":8256},[57,110292,32144],{"class":136},[57,110294,2246],{"class":70},[57,110296,101595],{"class":140},[57,110298,95883],{"class":81},[57,110300,4012],{"class":140},[57,110302,110303,110305,110307,110309,110311],{"class":59,"line":8283},[57,110304,101604],{"class":140},[57,110306,156],{"class":136},[57,110308,101609],{"class":140},[57,110310,101511],{"class":81},[57,110312,238],{"class":140},[57,110314,110315,110317,110319],{"class":59,"line":8288},[57,110316,101618],{"class":140},[57,110318,156],{"class":136},[57,110320,101623],{"class":140},[57,110322,110323],{"class":59,"line":8294},[57,110324,2673],{"emptyLinePlaceholder":350},[57,110326,110327,110329,110331,110333,110335],{"class":59,"line":8306},[57,110328,105266],{"class":140},[57,110330,635],{"class":81},[57,110332,4716],{"class":140},[57,110334,156],{"class":136},[57,110336,110337],{"class":81}," 0.1\n",[57,110339,110340],{"class":59,"line":8318},[57,110341,105279],{"class":140},[57,110343,110344],{"class":59,"line":8330},[57,110345,2673],{"emptyLinePlaceholder":350},[57,110347,110348,110351,110353],{"class":59,"line":9989},[57,110349,110350],{"class":140},"    total_reward ",[57,110352,156],{"class":136},[57,110354,104958],{"class":81},[57,110356,110357],{"class":59,"line":10014},[57,110358,2673],{"emptyLinePlaceholder":350},[57,110360,110361,110363,110365,110367,110369,110371,110373],{"class":59,"line":10037},[57,110362,3474],{"class":136},[57,110364,31813],{"class":140},[57,110366,26312],{"class":136},[57,110368,32640],{"class":81},[57,110370,168],{"class":140},[57,110372,6683],{"class":81},[57,110374,30983],{"class":140},[57,110376,110377,110380,110382],{"class":59,"line":10061},[57,110378,110379],{"class":140},"        obs ",[57,110381,156],{"class":136},[57,110383,110384],{"class":140}," get_observation(data)\n",[57,110386,110387,110390,110392,110394,110396],{"class":59,"line":10066},[57,110388,110389],{"class":140},"        pole_angle ",[57,110391,156],{"class":136},[57,110393,110233],{"class":140},[57,110395,635],{"class":81},[57,110397,33443],{"class":140},[57,110399,110400,110403,110405,110407,110409],{"class":59,"line":10071},[57,110401,110402],{"class":140},"        pole_angular_velocity ",[57,110404,156],{"class":136},[57,110406,110233],{"class":140},[57,110408,270],{"class":81},[57,110410,33443],{"class":140},[57,110412,110413],{"class":59,"line":10076},[57,110414,2673],{"emptyLinePlaceholder":350},[57,110416,110417,110420,110422,110425,110427,110429,110431,110433,110435],{"class":59,"line":10085},[57,110418,110419],{"class":140},"        action ",[57,110421,156],{"class":136},[57,110423,110424],{"class":81}," 2.0",[57,110426,6791],{"class":136},[57,110428,110017],{"class":140},[57,110430,897],{"class":136},[57,110432,62064],{"class":81},[57,110434,6791],{"class":136},[57,110436,110437],{"class":140}," pole_angular_velocity\n",[57,110439,110440,110442,110444,110446,110448,110450,110452,110454],{"class":59,"line":10090},[57,110441,110419],{"class":140},[57,110443,156],{"class":136},[57,110445,107644],{"class":140},[57,110447,948],{"class":136},[57,110449,102600],{"class":81},[57,110451,12708],{"class":140},[57,110453,102600],{"class":81},[57,110455,238],{"class":140},[57,110457,110458],{"class":59,"line":10096},[57,110459,2673],{"emptyLinePlaceholder":350},[57,110461,110462,110464,110466,110468,110470],{"class":59,"line":10117},[57,110463,106814],{"class":140},[57,110465,226],{"class":81},[57,110467,4716],{"class":140},[57,110469,156],{"class":136},[57,110471,107667],{"class":140},[57,110473,110474],{"class":59,"line":10123},[57,110475,101713],{"class":140},[57,110477,110478],{"class":59,"line":10137},[57,110479,2673],{"emptyLinePlaceholder":350},[57,110481,110482,110485,110487],{"class":59,"line":10143},[57,110483,110484],{"class":140},"        reward ",[57,110486,156],{"class":136},[57,110488,110489],{"class":140}," compute_reward(get_observation(data))\n",[57,110491,110492,110495,110497],{"class":59,"line":10170},[57,110493,110494],{"class":140},"        total_reward ",[57,110496,9750],{"class":136},[57,110498,110499],{"class":140}," reward\n",[57,110501,110502],{"class":59,"line":10179},[57,110503,2673],{"emptyLinePlaceholder":350},[57,110505,110506,110508,110510,110512,110514,110516,110518],{"class":59,"line":10185},[57,110507,2770],{"class":136},[57,110509,31813],{"class":140},[57,110511,745],{"class":136},[57,110513,6027],{"class":81},[57,110515,101756],{"class":136},[57,110517,4366],{"class":81},[57,110519,4012],{"class":140},[57,110521,110522,110524,110526,110529,110532,110535,110538,110540,110543,110546,110548,110550,110552,110554,110557,110559],{"class":59,"line":10193},[57,110523,34847],{"class":81},[57,110525,168],{"class":140},[57,110527,110528],{"class":74},"\"step:\"",[57,110530,110531],{"class":140},", step, ",[57,110533,110534],{"class":74},"\"obs:\"",[57,110536,110537],{"class":140},", np.round(obs, ",[57,110539,270],{"class":81},[57,110541,110542],{"class":140},"), ",[57,110544,110545],{"class":74},"\"action:\"",[57,110547,12708],{"class":140},[57,110549,32215],{"class":81},[57,110551,168],{"class":140},[57,110553,464],{"class":81},[57,110555,110556],{"class":140},"(action), ",[57,110558,270],{"class":81},[57,110560,259],{"class":140},[57,110562,110563],{"class":59,"line":10198},[57,110564,2673],{"emptyLinePlaceholder":350},[57,110566,110567,110569,110571,110574,110576,110578,110581,110583],{"class":59,"line":16876},[57,110568,31496],{"class":81},[57,110570,168],{"class":140},[57,110572,110573],{"class":74},"\"total_reward:\"",[57,110575,12708],{"class":140},[57,110577,32215],{"class":81},[57,110579,110580],{"class":140},"(total_reward, ",[57,110582,270],{"class":81},[57,110584,259],{"class":140},[57,110586,110587,110589,110591,110594,110597,110599],{"class":59,"line":16882},[57,110588,31496],{"class":81},[57,110590,168],{"class":140},[57,110592,110593],{"class":74},"\"final obs:\"",[57,110595,110596],{"class":140},", np.round(get_observation(data), ",[57,110598,270],{"class":81},[57,110600,259],{"class":140},[57,110602,110603],{"class":59,"line":16905},[57,110604,2673],{"emptyLinePlaceholder":350},[57,110606,110607],{"class":59,"line":16911},[57,110608,2673],{"emptyLinePlaceholder":350},[57,110610,110611,110613,110615,110617,110619],{"class":59,"line":16934},[57,110612,1813],{"class":136},[57,110614,31417],{"class":81},[57,110616,101756],{"class":136},[57,110618,101759],{"class":74},[57,110620,4012],{"class":140},[57,110622,110623],{"class":59,"line":16948},[57,110624,101766],{"class":140},[14,110626,103767],{},[49,110628,110630],{"className":51,"code":110629,"language":53,"meta":46,"style":46},"touch ch6_cartpole.py\n",[28,110631,110632],{"__ignoreMap":46},[57,110633,110634,110636],{"class":59,"line":60},[57,110635,101480],{"class":70},[57,110637,110638],{"class":74}," ch6_cartpole.py\n",[14,110640,110641],{},"运行：",[49,110643,110645],{"className":51,"code":110644,"language":53,"meta":46,"style":46},"python ch6_cartpole.py\n",[28,110646,110647],{"__ignoreMap":46},[57,110648,110649,110651],{"class":59,"line":60},[57,110650,124],{"class":70},[57,110652,110638],{"class":74},[394,110654,101769],{"id":101769},[14,110656,110657],{},"构造观测：",[49,110659,110661],{"className":122,"code":110660,"language":124,"meta":46,"style":46},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[28,110662,110663,110671],{"__ignoreMap":46},[57,110664,110665,110667,110669],{"class":59,"line":60},[57,110666,32144],{"class":136},[57,110668,110191],{"class":70},[57,110670,110194],{"class":140},[57,110672,110673,110675],{"class":59,"line":67},[57,110674,4363],{"class":136},[57,110676,110201],{"class":140},[14,110678,110679,110682,110683,110685,110686,110688],{},[28,110680,110681],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[28,110684,104227],{}," 2 维，",[28,110687,104557],{}," 2 维，所以 obs 是 4 维。",[14,110690,110691],{},"设置初始角度：",[49,110693,110695],{"className":122,"code":110694,"language":124,"meta":46,"style":46},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[28,110696,110697,110709],{"__ignoreMap":46},[57,110698,110699,110701,110703,110705,110707],{"class":59,"line":60},[57,110700,104896],{"class":140},[57,110702,635],{"class":81},[57,110704,4716],{"class":140},[57,110706,156],{"class":136},[57,110708,110337],{"class":81},[57,110710,110711],{"class":59,"line":67},[57,110712,104740],{"class":140},[14,110714,110715],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,110717,110718],{},"简单反馈控制：",[49,110720,110722],{"className":122,"code":110721,"language":124,"meta":46,"style":46},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[28,110723,110724,110744],{"__ignoreMap":46},[57,110725,110726,110728,110730,110732,110734,110736,110738,110740,110742],{"class":59,"line":60},[57,110727,107639],{"class":140},[57,110729,156],{"class":136},[57,110731,110424],{"class":81},[57,110733,6791],{"class":136},[57,110735,110017],{"class":140},[57,110737,897],{"class":136},[57,110739,62064],{"class":81},[57,110741,6791],{"class":136},[57,110743,110437],{"class":140},[57,110745,110746,110748,110750,110752,110754,110756,110758,110760],{"class":59,"line":67},[57,110747,107639],{"class":140},[57,110749,156],{"class":136},[57,110751,107644],{"class":140},[57,110753,948],{"class":136},[57,110755,102600],{"class":81},[57,110757,12708],{"class":140},[57,110759,102600],{"class":81},[57,110761,238],{"class":140},[14,110763,110764],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,110766,110767],{},"限制动作：",[49,110769,110771],{"className":122,"code":110770,"language":124,"meta":46,"style":46},"np.clip(action, -1.0, 1.0)\n",[28,110772,110773],{"__ignoreMap":46},[57,110774,110775,110778,110780,110782,110784,110786],{"class":59,"line":60},[57,110776,110777],{"class":140},"np.clip(action, ",[57,110779,948],{"class":136},[57,110781,102600],{"class":81},[57,110783,12708],{"class":140},[57,110785,102600],{"class":81},[57,110787,238],{"class":140},[14,110789,110790,110791,110794],{},"因为 XML 里 ",[28,110792,110793],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[394,110796,101905],{"id":101905},[49,110798,110799],{"className":122,"code":110660,"language":124,"meta":46,"style":46},[28,110800,110801,110809],{"__ignoreMap":46},[57,110802,110803,110805,110807],{"class":59,"line":60},[57,110804,32144],{"class":136},[57,110806,110191],{"class":70},[57,110808,110194],{"class":140},[57,110810,110811,110813],{"class":59,"line":67},[57,110812,4363],{"class":136},[57,110814,110201],{"class":140},[14,110816,110817,110818,110821,110822,110825,110826,110829],{},"这段定义了一个函数，用来获取当前观测。",[28,110819,110820],{},"data.qpos.copy()"," 是位置数组副本，",[28,110823,110824],{},"data.qvel.copy()"," 是速度数组副本。",[28,110827,110828],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,110831,110832],{},"在本章模型里：",[49,110834,110837],{"className":110835,"code":110836,"language":5460,"meta":46},[5458],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[28,110838,110836],{"__ignoreMap":46},[14,110840,110841],{},"所以返回的 obs 是：",[49,110843,110846],{"className":110844,"code":110845,"language":5460,"meta":46},[5458],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[28,110847,110845],{"__ignoreMap":46},[49,110849,110851],{"className":122,"code":110850,"language":124,"meta":46,"style":46},"def compute_reward(obs: np.ndarray) -> float:\n",[28,110852,110853],{"__ignoreMap":46},[57,110854,110855,110857,110859,110861,110863],{"class":59,"line":60},[57,110856,32144],{"class":136},[57,110858,110216],{"class":70},[57,110860,110219],{"class":140},[57,110862,464],{"class":81},[57,110864,4012],{"class":140},[14,110866,110867,110868,110871],{},"这行定义奖励函数。输入是观测 ",[28,110869,110870],{},"obs","，输出是一个浮点数奖励。",[49,110873,110875],{"className":122,"code":110874,"language":124,"meta":46,"style":46},"cart_x = obs[0]\npole_angle = obs[1]\n",[28,110876,110877,110890],{"__ignoreMap":46},[57,110878,110879,110882,110884,110886,110888],{"class":59,"line":60},[57,110880,110881],{"class":140},"cart_x ",[57,110883,156],{"class":136},[57,110885,110233],{"class":140},[57,110887,226],{"class":81},[57,110889,33443],{"class":140},[57,110891,110892,110895,110897,110899,110901],{"class":59,"line":67},[57,110893,110894],{"class":140},"pole_angle ",[57,110896,156],{"class":136},[57,110898,110233],{"class":140},[57,110900,635],{"class":81},[57,110902,33443],{"class":140},[14,110904,110905,110906,110909,110910,110913],{},"数组索引从 0 开始。",[28,110907,110908],{},"obs[0]"," 是第一个元素，也就是小车位置。",[28,110911,110912],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[49,110915,110916],{"className":122,"code":109985,"language":124,"meta":46,"style":46},[28,110917,110918],{"__ignoreMap":46},[57,110919,110920,110922,110924,110926,110928,110930,110932,110934,110936,110938,110940,110942,110944,110946],{"class":59,"line":60},[57,110921,17318],{"class":136},[57,110923,109994],{"class":81},[57,110925,168],{"class":140},[57,110927,102600],{"class":81},[57,110929,52468],{"class":136},[57,110931,110003],{"class":81},[57,110933,6791],{"class":136},[57,110935,110008],{"class":140},[57,110937,871],{"class":136},[57,110939,110008],{"class":140},[57,110941,948],{"class":136},[57,110943,110017],{"class":140},[57,110945,871],{"class":136},[57,110947,110022],{"class":140},[14,110949,110950,110951,110954,110955,110958],{},"这行计算奖励。",[28,110952,110953],{},"cart_x * cart_x"," 是小车位置的平方，",[28,110956,110957],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[49,110960,110962],{"className":122,"code":110961,"language":124,"meta":46,"style":46},"data.qpos[1] = 0.1\n",[28,110963,110964],{"__ignoreMap":46},[57,110965,110966,110968,110970,110972,110974],{"class":59,"line":60},[57,110967,104896],{"class":140},[57,110969,635],{"class":81},[57,110971,4716],{"class":140},[57,110973,156],{"class":136},[57,110975,110337],{"class":81},[14,110977,110978,110979,110981,110982,110984],{},"手动设置杆子的初始角度。因为 ",[28,110980,105653],{}," 是小车位置，",[28,110983,105656],{}," 是杆子角度，所以这里改的是杆子。",[49,110986,110987],{"className":122,"code":104740,"language":124,"meta":46,"style":46},[28,110988,110989],{"__ignoreMap":46},[57,110990,110991],{"class":59,"line":60},[57,110992,104740],{"class":140},[14,110994,105699,110995,110997],{},[28,110996,104227],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[49,110999,111001],{"className":122,"code":111000,"language":124,"meta":46,"style":46},"total_reward = 0.0\n",[28,111002,111003],{"__ignoreMap":46},[57,111004,111005,111008,111010],{"class":59,"line":60},[57,111006,111007],{"class":140},"total_reward ",[57,111009,156],{"class":136},[57,111011,104958],{"class":81},[14,111013,111014],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[49,111016,111018],{"className":122,"code":111017,"language":124,"meta":46,"style":46},"for step in range(1000):\n",[28,111019,111020],{"__ignoreMap":46},[57,111021,111022,111024,111026,111028,111030,111032,111034],{"class":59,"line":60},[57,111023,3298],{"class":136},[57,111025,31813],{"class":140},[57,111027,26312],{"class":136},[57,111029,32640],{"class":81},[57,111031,168],{"class":140},[57,111033,6683],{"class":81},[57,111035,30983],{"class":140},[14,111037,111038,111039,111041],{},"循环 1000 步。",[28,111040,107331],{}," 是当前步数，从 0 到 999。",[49,111043,111045],{"className":122,"code":111044,"language":124,"meta":46,"style":46},"obs = get_observation(data)\n",[28,111046,111047],{"__ignoreMap":46},[57,111048,111049,111052,111054],{"class":59,"line":60},[57,111050,111051],{"class":140},"obs ",[57,111053,156],{"class":136},[57,111055,110384],{"class":140},[14,111057,111058,111059,28654],{},"读取当前状态，保存到 ",[28,111060,110870],{},[49,111062,111064],{"className":122,"code":111063,"language":124,"meta":46,"style":46},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[28,111065,111066,111078],{"__ignoreMap":46},[57,111067,111068,111070,111072,111074,111076],{"class":59,"line":60},[57,111069,110894],{"class":140},[57,111071,156],{"class":136},[57,111073,110233],{"class":140},[57,111075,635],{"class":81},[57,111077,33443],{"class":140},[57,111079,111080,111083,111085,111087,111089],{"class":59,"line":67},[57,111081,111082],{"class":140},"pole_angular_velocity ",[57,111084,156],{"class":136},[57,111086,110233],{"class":140},[57,111088,270],{"class":81},[57,111090,33443],{"class":140},[14,111092,111093,111094,111097,111098,28654],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[28,111095,111096],{},"obs[3]","？因为 obs 的顺序是 ",[28,111099,111100],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[49,111102,111104],{"className":122,"code":111103,"language":124,"meta":46,"style":46},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[28,111105,111106],{"__ignoreMap":46},[57,111107,111108,111110,111112,111114,111116,111118,111120,111122,111124],{"class":59,"line":60},[57,111109,107639],{"class":140},[57,111111,156],{"class":136},[57,111113,110424],{"class":81},[57,111115,6791],{"class":136},[57,111117,110017],{"class":140},[57,111119,897],{"class":136},[57,111121,62064],{"class":81},[57,111123,6791],{"class":136},[57,111125,110437],{"class":140},[14,111127,111128,111129,101215,111131,111133],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[28,111130,105457],{},[28,111132,35526],{}," 是人为设置的系数，不是固定公式。",[49,111135,111137],{"className":122,"code":111136,"language":124,"meta":46,"style":46},"action = np.clip(action, -1.0, 1.0)\n",[28,111138,111139],{"__ignoreMap":46},[57,111140,111141,111143,111145,111147,111149,111151,111153,111155],{"class":59,"line":60},[57,111142,107639],{"class":140},[57,111144,156],{"class":136},[57,111146,107644],{"class":140},[57,111148,948],{"class":136},[57,111150,102600],{"class":81},[57,111152,12708],{"class":140},[57,111154,102600],{"class":81},[57,111156,238],{"class":140},[14,111158,111159],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[49,111161,111162],{"className":122,"code":109970,"language":124,"meta":46,"style":46},[28,111163,111164],{"__ignoreMap":46},[57,111165,111166,111168,111170,111172,111174],{"class":59,"line":60},[57,111167,106068],{"class":140},[57,111169,226],{"class":81},[57,111171,4716],{"class":140},[57,111173,156],{"class":136},[57,111175,107667],{"class":140},[14,111177,111178],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[49,111180,111181],{"className":122,"code":104702,"language":124,"meta":46,"style":46},[28,111182,111183],{"__ignoreMap":46},[57,111184,111185],{"class":59,"line":60},[57,111186,104702],{"class":140},[14,111188,111189,111190,111192],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[28,111191,106323],{}," 计算小车和杆子的下一刻状态。",[49,111194,111196],{"className":122,"code":111195,"language":124,"meta":46,"style":46},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[28,111197,111198,111207],{"__ignoreMap":46},[57,111199,111200,111203,111205],{"class":59,"line":60},[57,111201,111202],{"class":140},"reward ",[57,111204,156],{"class":136},[57,111206,110489],{"class":140},[57,111208,111209,111211,111213],{"class":59,"line":67},[57,111210,111007],{"class":140},[57,111212,9750],{"class":136},[57,111214,110499],{"class":140},[14,111216,111217,111218,111220,111221,111224,111225,28654],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[28,111219,9750],{}," 是简写，",[28,111222,111223],{},"total_reward += reward"," 等价于 ",[28,111226,111227],{},"total_reward = total_reward + reward",[49,111229,111231],{"className":122,"code":111230,"language":124,"meta":46,"style":46},"if step % 100 == 0:\n",[28,111232,111233],{"__ignoreMap":46},[57,111234,111235,111237,111239,111241,111243,111245,111247],{"class":59,"line":60},[57,111236,1813],{"class":136},[57,111238,31813],{"class":140},[57,111240,745],{"class":136},[57,111242,6027],{"class":81},[57,111244,101756],{"class":136},[57,111246,4366],{"class":81},[57,111248,4012],{"class":140},[14,111250,111251,111253,111254,111257],{},[28,111252,745],{}," 是取余数。",[28,111255,111256],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[49,111259,111261],{"className":122,"code":111260,"language":124,"meta":46,"style":46},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[28,111262,111263],{"__ignoreMap":46},[57,111264,111265,111267,111269,111271,111273,111275,111277,111279,111281,111283,111285,111287,111289,111291,111293,111295],{"class":59,"line":60},[57,111266,165],{"class":81},[57,111268,168],{"class":140},[57,111270,110528],{"class":74},[57,111272,110531],{"class":140},[57,111274,110534],{"class":74},[57,111276,110537],{"class":140},[57,111278,270],{"class":81},[57,111280,110542],{"class":140},[57,111282,110545],{"class":74},[57,111284,12708],{"class":140},[57,111286,32215],{"class":81},[57,111288,168],{"class":140},[57,111290,464],{"class":81},[57,111292,110556],{"class":140},[57,111294,270],{"class":81},[57,111296,259],{"class":140},[14,111298,111299,111300,111303,111304,111307],{},"打印当前步数、观测和动作。",[28,111301,111302],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[28,111305,111306],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[365,111309,102513],{"id":102512},[14,111311,111312],{},"观测向量:",[49,111314,111317],{"className":111315,"code":111316,"language":5460,"meta":46},[5458],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[28,111318,111316],{"__ignoreMap":46},[14,111320,111321],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,111323,111324],{},"每隔 100 步会打印一次：",[49,111326,111329],{"className":111327,"code":111328,"language":5460,"meta":46},[5458],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[28,111330,111328],{"__ignoreMap":46},[14,111332,111333],{},"重点观察：",[377,111335,111336,111342,111347],{},[380,111337,111338,111341],{},[28,111339,111340],{},"pole_angle"," 是否越来越大。",[380,111343,111344,111346],{},[28,111345,109923],{}," 是否跑得太远。",[380,111348,111349,111350,82736,111352,28654],{},"action 是否经常被 clip 到 ",[28,111351,104112],{},[28,111353,635],{},[14,111355,111356],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[365,111358,102545],{"id":102544},[377,111360,111361,111367,111370,111376,111386,111392,111395],{},[380,111362,111363,111364,28654],{},"把初始角度改为 ",[28,111365,111366],{},"data.qpos[1] = 0.3",[380,111368,111369],{},"重新运行，观察控制是否变差。",[380,111371,111372,111373,111375],{},"把 actuator ",[28,111374,107264],{}," 改小。",[380,111377,111378,111379,111382,111383,28654],{},"打印 ",[28,111380,111381],{},"model.nq, model.nv, model.nu","，应为 ",[28,111384,111385],{},"2 2 1",[380,111387,111388,111389,111391],{},"把 reward 里的 ",[28,111390,110957],{}," 系数改大，观察总奖励变化。",[380,111393,111394],{},"把控制器改成反号，观察杆子是否更容易倒。",[380,111396,111397],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[365,111399,102650],{"id":102649},[394,111401,111402],{"id":111402},"杆子方向和预期不一致",[14,111404,102593,111405,111407,111408,111410],{},[28,111406,106436],{}," 和 capsule 的 ",[28,111409,103373],{},"，必要时用 viewer 可视化确认。",[394,111412,111413],{"id":111413},"控制器越控越倒",[14,111415,111416],{},"说明反馈符号可能反了，尝试:",[49,111418,111420],{"className":122,"code":111419,"language":124,"meta":46,"style":46},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[28,111421,111422],{"__ignoreMap":46},[57,111423,111424,111426,111428,111430,111432,111434,111436,111438,111440,111442],{"class":59,"line":60},[57,111425,107639],{"class":140},[57,111427,156],{"class":136},[57,111429,52468],{"class":136},[57,111431,105457],{"class":81},[57,111433,6791],{"class":136},[57,111435,110017],{"class":140},[57,111437,948],{"class":136},[57,111439,62064],{"class":81},[57,111441,6791],{"class":136},[57,111443,110437],{"class":140},[394,111445,111446],{"id":111446},"小车飞走",[14,111448,111449,111450,111452,111453,111456],{},"降低 ",[28,111451,107264],{}," 或缩小 ",[28,111454,111455],{},"action"," 的 clip 范围。",[394,111458,111460,111462],{"id":111459},"obs3-为什么是杆子角速度",[28,111461,111096],{}," 为什么是杆子角速度",[14,111464,111465],{},"因为这个模型里：",[49,111467,111470],{"className":111468,"code":111469,"language":5460,"meta":46},[5458],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[28,111471,111469],{"__ignoreMap":46},[14,111473,109944],{},[49,111475,111478],{"className":111476,"code":111477,"language":5460,"meta":46},[5458],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[28,111479,111477],{"__ignoreMap":46},[394,111481,111483],{"id":111482},"reward-变成负数是否错误","reward 变成负数是否错误",[14,111485,111486],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[365,111488,102804],{"id":102803},[14,111490,111491],{},"一个控制任务通常包含：",[377,111493,111494,111497,111505,111510,111513],{},[380,111495,111496],{},"模型：Cartpole 的 body、joint、actuator。",[380,111498,111499,111500,630,111502,111504],{},"观测：从 ",[28,111501,104227],{},[28,111503,104557],{}," 里取状态。",[380,111506,111507,111508,28654],{},"动作：写入 ",[28,111509,101273],{},[380,111511,111512],{},"奖励：根据任务目标打分。",[380,111514,111515],{},"循环：obs -> action -> step -> reward。",[14,111517,111518],{},"这就是后面 Gymnasium 环境的基本骨架。",[342,111520,104483],{},{"title":46,"searchDepth":67,"depth":67,"links":111522},[111523,111524,111525,111530,111534,111535,111536,111544],{"id":100843,"depth":67,"text":100844},{"id":100966,"depth":67,"text":100967},{"id":101241,"depth":67,"text":101242,"children":111526},[111527,111528,111529],{"id":109897,"depth":144,"text":109898},{"id":109962,"depth":144,"text":109963},{"id":109978,"depth":144,"text":109979},{"id":101449,"depth":67,"text":101450,"children":111531},[111532,111533],{"id":101769,"depth":144,"text":101769},{"id":101905,"depth":144,"text":101905},{"id":102512,"depth":67,"text":102513},{"id":102544,"depth":67,"text":102545},{"id":102649,"depth":67,"text":102650,"children":111537},[111538,111539,111540,111541,111543],{"id":111402,"depth":144,"text":111402},{"id":111413,"depth":144,"text":111413},{"id":111446,"depth":144,"text":111446},{"id":111459,"depth":144,"text":111542},"obs[3] 为什么是杆子角速度",{"id":111482,"depth":144,"text":111483},{"id":102803,"depth":67,"text":102804},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109633,"description":46},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111551,"title":111552,"body":111553,"description":46,"extension":348,"meta":113567,"navigation":350,"path":113568,"seo":113569,"stem":113570,"__hash__":113571},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111554,"toc":113543},[111555,111558,111560,111563,111565,111582,111585,111588,111594,111597,111599,111601,111625,111627,111641,111643,111684,111686,111704,111706,111709,111715,111718,111746,111750,111756,111781,111784,111815,111822,111825,111828,111834,111837,111843,111846,111852,111856,111859,111884,111887,111889,112649,112651,112663,112665,112676,112678,112681,112698,112701,112703,112714,112717,112719,112765,112768,112781,112784,112866,112869,112871,112887,112897,112910,112913,112952,112962,112973,112983,112996,112999,113028,113031,113041,113044,113050,113067,113078,113080,113086,113103,113114,113135,113138,113150,113153,113174,113177,113185,113193,113210,113213,113282,113289,113297,113300,113313,113320,113322,113325,113331,113334,113337,113343,113349,113351,113391,113393,113399,113408,113411,113413,113433,113436,113439,113445,113449,113451,113478,113481,113484,113511,113517,113520,113523,113525,113528,113531,113537,113540],[10,111556,111552],{"id":111557},"_7控制任务reacher-机械臂到达目标",[365,111559,100844],{"id":100843},[14,111561,111562],{},"本章搭建一个二维两关节 reacher 任务。",[14,111564,104528],{},[377,111566,111567,111570,111573,111576,111579],{},[380,111568,111569],{},"两个 hinge joint",[380,111571,111572],{},"两个 motor actuator",[380,111574,111575],{},"site 作为末端点和目标点",[380,111577,111578],{},"根据末端和目标距离设计 reward",[380,111580,111581],{},"构造机械臂任务的基本形式",[14,111583,111584],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,111586,111587],{},"Reacher 任务可以理解为：",[49,111589,111592],{"className":111590,"code":111591,"language":5460,"meta":46},[5458],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[28,111593,111591],{"__ignoreMap":46},[14,111595,111596],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[365,111598,100967],{"id":100966},[14,111600,100970],{},[49,111602,111603],{"className":51,"code":104585,"language":53,"meta":46,"style":46},[28,111604,111605],{"__ignoreMap":46},[57,111606,111607,111609,111611,111613,111615,111617,111619,111621,111623],{"class":59,"line":60},[57,111608,24845],{"class":70},[57,111610,26584],{"class":74},[57,111612,75],{"class":74},[57,111614,26669],{"class":81},[57,111616,104600],{"class":74},[57,111618,100995],{"class":74},[57,111620,102698],{"class":74},[57,111622,101011],{"class":74},[57,111624,104609],{"class":74},[14,111626,103016],{},[49,111628,111629],{"className":51,"code":101116,"language":53,"meta":46,"style":46},[28,111630,111631],{"__ignoreMap":46},[57,111632,111633,111635,111637,111639],{"class":59,"line":60},[57,111634,24101],{"class":70},[57,111636,75],{"class":74},[57,111638,101127],{"class":74},[57,111640,101130],{"class":74},[14,111642,103033],{},[49,111644,111646],{"className":51,"code":111645,"language":53,"meta":46,"style":46},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[28,111647,111648,111665,111674],{"__ignoreMap":46},[57,111649,111650,111652,111654,111656,111659,111661,111663],{"class":59,"line":60},[57,111651,71],{"class":70},[57,111653,29445],{"class":74},[57,111655,25384],{"class":81},[57,111657,111658],{"class":74}," mujoco-reacher",[57,111660,101172],{"class":74},[57,111662,101175],{"class":81},[57,111664,101178],{"class":81},[57,111666,111667,111669,111671],{"class":59,"line":67},[57,111668,71],{"class":70},[57,111670,101185],{"class":74},[57,111672,111673],{"class":74}," mujoco-reacher\n",[57,111675,111676,111678,111680,111682],{"class":59,"line":144},[57,111677,24101],{"class":70},[57,111679,75],{"class":74},[57,111681,101127],{"class":74},[57,111683,101130],{"class":74},[14,111685,101201],{},[377,111687,111688,111691,111694],{},[380,111689,111690],{},"本章使用低维状态，不使用图像输入。",[380,111692,111693],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[380,111695,111696,111697,630,111699,630,111701,111703],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[28,111698,104227],{},[28,111700,104557],{},[28,111702,103877],{}," 的方法一致。",[365,111705,101242],{"id":101241},[14,111707,111708],{},"Reacher 任务核心:",[49,111710,111713],{"className":111711,"code":111712,"language":5460,"meta":46},[5458],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[28,111714,111712],{"__ignoreMap":46},[14,111716,111717],{},"读取 site 世界坐标:",[49,111719,111721],{"className":122,"code":111720,"language":124,"meta":46,"style":46},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[28,111722,111723,111736],{"__ignoreMap":46},[57,111724,111725,111727,111729,111731,111734],{"class":59,"line":60},[57,111726,103831],{"class":140},[57,111728,156],{"class":136},[57,111730,103602],{"class":140},[57,111732,111733],{"class":74},"\"tip\"",[57,111735,238],{"class":140},[57,111737,111738,111741,111743],{"class":59,"line":67},[57,111739,111740],{"class":140},"tip_pos ",[57,111742,156],{"class":136},[57,111744,111745],{"class":140}," data.site_xpos[site_id]\n",[394,111747,111749],{"id":111748},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,111751,111752,111753,111755],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[28,111754,104227],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[49,111757,111759],{"className":122,"code":111758,"language":124,"meta":46,"style":46},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[28,111760,111761,111771],{"__ignoreMap":46},[57,111762,111763,111766,111768],{"class":59,"line":60},[57,111764,111765],{"class":140},"tip ",[57,111767,156],{"class":136},[57,111769,111770],{"class":140}," data.site_xpos[tip_site_id]\n",[57,111772,111773,111776,111778],{"class":59,"line":67},[57,111774,111775],{"class":140},"target ",[57,111777,156],{"class":136},[57,111779,111780],{"class":140}," data.site_xpos[target_site_id]\n",[14,111782,111783],{},"这样 reward 就很容易写：",[49,111785,111787],{"className":122,"code":111786,"language":124,"meta":46,"style":46},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[28,111788,111789,111804],{"__ignoreMap":46},[57,111790,111791,111794,111796,111799,111801],{"class":59,"line":60},[57,111792,111793],{"class":140},"dist ",[57,111795,156],{"class":136},[57,111797,111798],{"class":140}," np.linalg.norm(tip ",[57,111800,948],{"class":136},[57,111802,111803],{"class":140}," target)\n",[57,111805,111806,111808,111810,111812],{"class":59,"line":67},[57,111807,111202],{"class":140},[57,111809,156],{"class":136},[57,111811,52468],{"class":136},[57,111813,111814],{"class":140},"dist\n",[14,111816,111817,111818,111821],{},"距离越小，",[28,111819,111820],{},"-dist"," 越接近 0，奖励越高。",[394,111823,111824],{"id":111824},"两关节机械臂的状态",[14,111826,111827],{},"这个模型有两个 hinge joint：",[49,111829,111832],{"className":111830,"code":111831,"language":5460,"meta":46},[5458],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[28,111833,111831],{"__ignoreMap":46},[14,111835,111836],{},"再加上末端和目标位置：",[49,111838,111841],{"className":111839,"code":111840,"language":5460,"meta":46},[5458],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[28,111842,111840],{"__ignoreMap":46},[14,111844,111845],{},"总维度：",[49,111847,111850],{"className":111848,"code":111849,"language":5460,"meta":46},[5458],"2 + 2 + 3 + 3 = 10\n",[28,111851,111849],{"__ignoreMap":46},[394,111853,111855],{"id":111854},"为什么-gravity-是-0","为什么 gravity 是 0",[14,111857,111858],{},"本章把重力设为：",[49,111860,111862],{"className":53264,"code":111861,"language":53266,"meta":46,"style":46},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[28,111863,111864],{"__ignoreMap":46},[57,111865,111866,111868,111870,111872,111874,111876,111878,111880,111882],{"class":59,"line":60},[57,111867,1326],{"class":140},[57,111869,69363],{"class":51497},[57,111871,101391],{"class":70},[57,111873,156],{"class":140},[57,111875,101396],{"class":74},[57,111877,101399],{"class":70},[57,111879,156],{"class":140},[57,111881,103968],{"class":74},[57,111883,101341],{"class":140},[14,111885,111886],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[365,111888,101450],{"id":101449},[49,111890,111892],{"className":122,"code":111891,"language":124,"meta":46,"style":46},"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",[28,111893,111894,111900,111910,111914,111918,111926,111931,111936,111940,111944,111949,111954,111958,111963,111968,111973,111977,111982,111987,111992,111997,112001,112005,112009,112013,112017,112022,112027,112031,112035,112039,112043,112047,112062,112071,112083,112106,112113,112117,112121,112131,112145,112159,112166,112170,112174,112188,112200,112212,112225,112240,112257,112261,112265,112277,112289,112297,112305,112309,112325,112330,112343,112356,112371,112375,112410,112442,112446,112450,112459,112463,112479,112489,112500,112516,112532,112548,112564,112568,112586,112606,112625,112629,112633,112645],{"__ignoreMap":46},[57,111895,111896,111898],{"class":59,"line":60},[57,111897,137],{"class":136},[57,111899,101498],{"class":140},[57,111901,111902,111904,111906,111908],{"class":59,"line":67},[57,111903,137],{"class":136},[57,111905,31577],{"class":140},[57,111907,31580],{"class":136},[57,111909,31583],{"class":140},[57,111911,111912],{"class":59,"line":144},[57,111913,2673],{"emptyLinePlaceholder":350},[57,111915,111916],{"class":59,"line":150},[57,111917,2673],{"emptyLinePlaceholder":350},[57,111919,111920,111922,111924],{"class":59,"line":162},[57,111921,101511],{"class":81},[57,111923,13837],{"class":136},[57,111925,101516],{"class":74},[57,111927,111928],{"class":59,"line":180},[57,111929,111930],{"class":74},"\u003Cmujoco model=\"two_link_reacher\">\n",[57,111932,111933],{"class":59,"line":186},[57,111934,111935],{"class":74},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[57,111937,111938],{"class":59,"line":197},[57,111939,2673],{"emptyLinePlaceholder":350},[57,111941,111942],{"class":59,"line":241},[57,111943,101535],{"class":74},[57,111945,111946],{"class":59,"line":249},[57,111947,111948],{"class":74},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[57,111950,111951],{"class":59,"line":262},[57,111952,111953],{"class":74},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[57,111955,111956],{"class":59,"line":281},[57,111957,2673],{"emptyLinePlaceholder":350},[57,111959,111960],{"class":59,"line":287},[57,111961,111962],{"class":74},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[57,111964,111965],{"class":59,"line":298},[57,111966,111967],{"class":74},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[57,111969,111970],{"class":59,"line":311},[57,111971,111972],{"class":74},"      \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",[57,111974,111975],{"class":59,"line":322},[57,111976,2673],{"emptyLinePlaceholder":350},[57,111978,111979],{"class":59,"line":1929},[57,111980,111981],{"class":74},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[57,111983,111984],{"class":59,"line":1950},[57,111985,111986],{"class":74},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[57,111988,111989],{"class":59,"line":1955},[57,111990,111991],{"class":74},"        \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",[57,111993,111994],{"class":59,"line":1969},[57,111995,111996],{"class":74},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[57,111998,111999],{"class":59,"line":1974},[57,112000,106635],{"class":74},[57,112002,112003],{"class":59,"line":2001},[57,112004,101564],{"class":74},[57,112006,112007],{"class":59,"line":2006},[57,112008,101569],{"class":74},[57,112010,112011],{"class":59,"line":2023},[57,112012,2673],{"emptyLinePlaceholder":350},[57,112014,112015],{"class":59,"line":2028},[57,112016,106652],{"class":74},[57,112018,112019],{"class":59,"line":2033},[57,112020,112021],{"class":74},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[57,112023,112024],{"class":59,"line":2038},[57,112025,112026],{"class":74},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[57,112028,112029],{"class":59,"line":2052},[57,112030,106662],{"class":74},[57,112032,112033],{"class":59,"line":2057},[57,112034,101574],{"class":74},[57,112036,112037],{"class":59,"line":2850},[57,112038,95895],{"class":74},[57,112040,112041],{"class":59,"line":2864},[57,112042,2673],{"emptyLinePlaceholder":350},[57,112044,112045],{"class":59,"line":2872},[57,112046,2673],{"emptyLinePlaceholder":350},[57,112048,112049,112051,112054,112057,112059],{"class":59,"line":2877},[57,112050,32144],{"class":136},[57,112052,112053],{"class":70}," site_position",[57,112055,112056],{"class":140},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[57,112058,1585],{"class":81},[57,112060,112061],{"class":140},") -> np.ndarray:\n",[57,112063,112064,112066,112068],{"class":59,"line":2883},[57,112065,103597],{"class":140},[57,112067,156],{"class":136},[57,112069,112070],{"class":140}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[57,112072,112073,112075,112077,112079,112081],{"class":59,"line":2889},[57,112074,3374],{"class":136},[57,112076,103646],{"class":140},[57,112078,1326],{"class":136},[57,112080,4366],{"class":81},[57,112082,4012],{"class":140},[57,112084,112085,112087,112089,112091,112093,112096,112098,112100,112102,112104],{"class":59,"line":2894},[57,112086,103629],{"class":136},[57,112088,103632],{"class":81},[57,112090,168],{"class":140},[57,112092,475],{"class":136},[57,112094,112095],{"class":74},"\"site not found: ",[57,112097,1312],{"class":81},[57,112099,80007],{"class":140},[57,112101,1362],{"class":81},[57,112103,668],{"class":74},[57,112105,238],{"class":140},[57,112107,112108,112110],{"class":59,"line":8221},[57,112109,4363],{"class":136},[57,112111,112112],{"class":140}," data.site_xpos[site_id].copy()\n",[57,112114,112115],{"class":59,"line":8245},[57,112116,2673],{"emptyLinePlaceholder":350},[57,112118,112119],{"class":59,"line":8250},[57,112120,2673],{"emptyLinePlaceholder":350},[57,112122,112123,112125,112128],{"class":59,"line":8256},[57,112124,32144],{"class":136},[57,112126,112127],{"class":70}," get_obs",[57,112129,112130],{"class":140},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[57,112132,112133,112136,112138,112141,112143],{"class":59,"line":8283},[57,112134,112135],{"class":140},"    tip ",[57,112137,156],{"class":136},[57,112139,112140],{"class":140}," site_position(model, data, ",[57,112142,111733],{"class":74},[57,112144,238],{"class":140},[57,112146,112147,112150,112152,112154,112157],{"class":59,"line":8288},[57,112148,112149],{"class":140},"    target ",[57,112151,156],{"class":136},[57,112153,112140],{"class":140},[57,112155,112156],{"class":74},"\"target\"",[57,112158,238],{"class":140},[57,112160,112161,112163],{"class":59,"line":8294},[57,112162,4363],{"class":136},[57,112164,112165],{"class":140}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[57,112167,112168],{"class":59,"line":8306},[57,112169,2673],{"emptyLinePlaceholder":350},[57,112171,112172],{"class":59,"line":8318},[57,112173,2673],{"emptyLinePlaceholder":350},[57,112175,112176,112178,112181,112184,112186],{"class":59,"line":8330},[57,112177,32144],{"class":136},[57,112179,112180],{"class":70}," reward",[57,112182,112183],{"class":140},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[57,112185,464],{"class":81},[57,112187,4012],{"class":140},[57,112189,112190,112192,112194,112196,112198],{"class":59,"line":9989},[57,112191,112135],{"class":140},[57,112193,156],{"class":136},[57,112195,112140],{"class":140},[57,112197,111733],{"class":74},[57,112199,238],{"class":140},[57,112201,112202,112204,112206,112208,112210],{"class":59,"line":10014},[57,112203,112149],{"class":140},[57,112205,156],{"class":136},[57,112207,112140],{"class":140},[57,112209,112156],{"class":74},[57,112211,238],{"class":140},[57,112213,112214,112217,112219,112221,112223],{"class":59,"line":10037},[57,112215,112216],{"class":140},"    dist ",[57,112218,156],{"class":136},[57,112220,111798],{"class":140},[57,112222,948],{"class":136},[57,112224,111803],{"class":140},[57,112226,112227,112230,112232,112235,112237],{"class":59,"line":10061},[57,112228,112229],{"class":140},"    control_cost ",[57,112231,156],{"class":136},[57,112233,112234],{"class":81}," 0.01",[57,112236,6791],{"class":136},[57,112238,112239],{"class":140}," np.sum(np.square(data.ctrl))\n",[57,112241,112242,112244,112246,112248,112250,112252,112254],{"class":59,"line":10066},[57,112243,4363],{"class":136},[57,112245,109994],{"class":81},[57,112247,168],{"class":140},[57,112249,948],{"class":136},[57,112251,111793],{"class":140},[57,112253,948],{"class":136},[57,112255,112256],{"class":140}," control_cost)\n",[57,112258,112259],{"class":59,"line":10071},[57,112260,2673],{"emptyLinePlaceholder":350},[57,112262,112263],{"class":59,"line":10076},[57,112264,2673],{"emptyLinePlaceholder":350},[57,112266,112267,112269,112271,112273,112275],{"class":59,"line":10085},[57,112268,32144],{"class":136},[57,112270,2246],{"class":70},[57,112272,101595],{"class":140},[57,112274,95883],{"class":81},[57,112276,4012],{"class":140},[57,112278,112279,112281,112283,112285,112287],{"class":59,"line":10090},[57,112280,101604],{"class":140},[57,112282,156],{"class":136},[57,112284,101609],{"class":140},[57,112286,101511],{"class":81},[57,112288,238],{"class":140},[57,112290,112291,112293,112295],{"class":59,"line":10096},[57,112292,101618],{"class":140},[57,112294,156],{"class":136},[57,112296,101623],{"class":140},[57,112298,112299,112301,112303],{"class":59,"line":10117},[57,112300,110350],{"class":140},[57,112302,156],{"class":136},[57,112304,104958],{"class":81},[57,112306,112307],{"class":59,"line":10123},[57,112308,2673],{"emptyLinePlaceholder":350},[57,112310,112311,112313,112315,112317,112319,112321,112323],{"class":59,"line":10137},[57,112312,3474],{"class":136},[57,112314,31813],{"class":140},[57,112316,26312],{"class":136},[57,112318,32640],{"class":81},[57,112320,168],{"class":140},[57,112322,65271],{"class":81},[57,112324,30983],{"class":140},[57,112326,112327],{"class":59,"line":10143},[57,112328,112329],{"class":140},"        mujoco.mj_forward(model, data)\n",[57,112331,112332,112335,112337,112339,112341],{"class":59,"line":10170},[57,112333,112334],{"class":140},"        tip ",[57,112336,156],{"class":136},[57,112338,112140],{"class":140},[57,112340,111733],{"class":74},[57,112342,238],{"class":140},[57,112344,112345,112348,112350,112352,112354],{"class":59,"line":10179},[57,112346,112347],{"class":140},"        target ",[57,112349,156],{"class":136},[57,112351,112140],{"class":140},[57,112353,112156],{"class":74},[57,112355,238],{"class":140},[57,112357,112358,112361,112363,112366,112368],{"class":59,"line":10185},[57,112359,112360],{"class":140},"        error ",[57,112362,156],{"class":136},[57,112364,112365],{"class":140}," target ",[57,112367,948],{"class":136},[57,112369,112370],{"class":140}," tip\n",[57,112372,112373],{"class":59,"line":10193},[57,112374,2673],{"emptyLinePlaceholder":350},[57,112376,112377,112379,112381,112383,112385,112388,112390,112392,112395,112397,112400,112402,112404,112406,112408],{"class":59,"line":10198},[57,112378,106814],{"class":140},[57,112380,226],{"class":81},[57,112382,4716],{"class":140},[57,112384,156],{"class":136},[57,112386,112387],{"class":140}," np.clip(",[57,112389,105457],{"class":81},[57,112391,6791],{"class":136},[57,112393,112394],{"class":140}," error[",[57,112396,498],{"class":81},[57,112398,112399],{"class":140},"], ",[57,112401,948],{"class":136},[57,112403,102600],{"class":81},[57,112405,12708],{"class":140},[57,112407,102600],{"class":81},[57,112409,238],{"class":140},[57,112411,112412,112414,112416,112418,112420,112422,112424,112426,112428,112430,112432,112434,112436,112438,112440],{"class":59,"line":16876},[57,112413,106814],{"class":140},[57,112415,635],{"class":81},[57,112417,4716],{"class":140},[57,112419,156],{"class":136},[57,112421,112387],{"class":140},[57,112423,105457],{"class":81},[57,112425,6791],{"class":136},[57,112427,112394],{"class":140},[57,112429,226],{"class":81},[57,112431,112399],{"class":140},[57,112433,948],{"class":136},[57,112435,102600],{"class":81},[57,112437,12708],{"class":140},[57,112439,102600],{"class":81},[57,112441,238],{"class":140},[57,112443,112444],{"class":59,"line":16882},[57,112445,2673],{"emptyLinePlaceholder":350},[57,112447,112448],{"class":59,"line":16905},[57,112449,101713],{"class":140},[57,112451,112452,112454,112456],{"class":59,"line":16911},[57,112453,110494],{"class":140},[57,112455,9750],{"class":136},[57,112457,112458],{"class":140}," reward(model, data)\n",[57,112460,112461],{"class":59,"line":16934},[57,112462,2673],{"emptyLinePlaceholder":350},[57,112464,112465,112467,112469,112471,112473,112475,112477],{"class":59,"line":16948},[57,112466,2770],{"class":136},[57,112468,31813],{"class":140},[57,112470,745],{"class":136},[57,112472,6027],{"class":81},[57,112474,101756],{"class":136},[57,112476,4366],{"class":81},[57,112478,4012],{"class":140},[57,112480,112481,112484,112486],{"class":59,"line":16968},[57,112482,112483],{"class":140},"            obs ",[57,112485,156],{"class":136},[57,112487,112488],{"class":140}," get_obs(model, data)\n",[57,112490,112491,112493,112495,112497],{"class":59,"line":16974},[57,112492,34847],{"class":81},[57,112494,168],{"class":140},[57,112496,110528],{"class":74},[57,112498,112499],{"class":140},", step)\n",[57,112501,112502,112504,112506,112509,112512,112514],{"class":59,"line":16985},[57,112503,34847],{"class":81},[57,112505,168],{"class":140},[57,112507,112508],{"class":74},"\"  tip:\"",[57,112510,112511],{"class":140},", np.round(tip, ",[57,112513,270],{"class":81},[57,112515,259],{"class":140},[57,112517,112518,112520,112522,112525,112528,112530],{"class":59,"line":17008},[57,112519,34847],{"class":81},[57,112521,168],{"class":140},[57,112523,112524],{"class":74},"\"  target:\"",[57,112526,112527],{"class":140},", np.round(target, ",[57,112529,270],{"class":81},[57,112531,259],{"class":140},[57,112533,112534,112536,112538,112541,112544,112546],{"class":59,"line":17030},[57,112535,34847],{"class":81},[57,112537,168],{"class":140},[57,112539,112540],{"class":74},"\"  ctrl:\"",[57,112542,112543],{"class":140},", np.round(data.ctrl.copy(), ",[57,112545,270],{"class":81},[57,112547,259],{"class":140},[57,112549,112550,112552,112554,112557,112560,112562],{"class":59,"line":17035},[57,112551,34847],{"class":81},[57,112553,168],{"class":140},[57,112555,112556],{"class":74},"\"  obs_dim:\"",[57,112558,112559],{"class":140},", obs.shape[",[57,112561,226],{"class":81},[57,112563,4930],{"class":140},[57,112565,112566],{"class":59,"line":17041},[57,112567,2673],{"emptyLinePlaceholder":350},[57,112569,112570,112572,112574,112576,112578,112580,112582,112584],{"class":59,"line":17055},[57,112571,31496],{"class":81},[57,112573,168],{"class":140},[57,112575,110573],{"class":74},[57,112577,12708],{"class":140},[57,112579,32215],{"class":81},[57,112581,110580],{"class":140},[57,112583,270],{"class":81},[57,112585,259],{"class":140},[57,112587,112588,112590,112592,112595,112598,112600,112602,112604],{"class":59,"line":17068},[57,112589,31496],{"class":81},[57,112591,168],{"class":140},[57,112593,112594],{"class":74},"\"final tip:\"",[57,112596,112597],{"class":140},", np.round(site_position(model, data, ",[57,112599,111733],{"class":74},[57,112601,110542],{"class":140},[57,112603,270],{"class":81},[57,112605,259],{"class":140},[57,112607,112608,112610,112612,112615,112617,112619,112621,112623],{"class":59,"line":17073},[57,112609,31496],{"class":81},[57,112611,168],{"class":140},[57,112613,112614],{"class":74},"\"target:\"",[57,112616,112597],{"class":140},[57,112618,112156],{"class":74},[57,112620,110542],{"class":140},[57,112622,270],{"class":81},[57,112624,259],{"class":140},[57,112626,112627],{"class":59,"line":17087},[57,112628,2673],{"emptyLinePlaceholder":350},[57,112630,112631],{"class":59,"line":17092},[57,112632,2673],{"emptyLinePlaceholder":350},[57,112634,112635,112637,112639,112641,112643],{"class":59,"line":17098},[57,112636,1813],{"class":136},[57,112638,31417],{"class":81},[57,112640,101756],{"class":136},[57,112642,101759],{"class":74},[57,112644,4012],{"class":140},[57,112646,112647],{"class":59,"line":17103},[57,112648,101766],{"class":140},[14,112650,103767],{},[49,112652,112654],{"className":51,"code":112653,"language":53,"meta":46,"style":46},"touch ch7_reacher.py\n",[28,112655,112656],{"__ignoreMap":46},[57,112657,112658,112660],{"class":59,"line":60},[57,112659,101480],{"class":70},[57,112661,112662],{"class":74}," ch7_reacher.py\n",[14,112664,110641],{},[49,112666,112668],{"className":51,"code":112667,"language":53,"meta":46,"style":46},"python ch7_reacher.py\n",[28,112669,112670],{"__ignoreMap":46},[57,112671,112672,112674],{"class":59,"line":60},[57,112673,124],{"class":70},[57,112675,112662],{"class":74},[394,112677,101769],{"id":101769},[14,112679,112680],{},"读取 site 坐标：",[49,112682,112684],{"className":122,"code":112683,"language":124,"meta":46,"style":46},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[28,112685,112686],{"__ignoreMap":46},[57,112687,112688,112690,112692,112694,112696],{"class":59,"line":60},[57,112689,32144],{"class":136},[57,112691,112053],{"class":70},[57,112693,112056],{"class":140},[57,112695,1585],{"class":81},[57,112697,112061],{"class":140},[14,112699,112700],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,112702,110657],{},[49,112704,112706],{"className":122,"code":112705,"language":124,"meta":46,"style":46},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[28,112707,112708],{"__ignoreMap":46},[57,112709,112710,112712],{"class":59,"line":60},[57,112711,17318],{"class":136},[57,112713,112165],{"class":140},[14,112715,112716],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,112718,109982],{},[49,112720,112722],{"className":122,"code":112721,"language":124,"meta":46,"style":46},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[28,112723,112724,112736,112749],{"__ignoreMap":46},[57,112725,112726,112728,112730,112732,112734],{"class":59,"line":60},[57,112727,111793],{"class":140},[57,112729,156],{"class":136},[57,112731,111798],{"class":140},[57,112733,948],{"class":136},[57,112735,111803],{"class":140},[57,112737,112738,112741,112743,112745,112747],{"class":59,"line":67},[57,112739,112740],{"class":140},"control_cost ",[57,112742,156],{"class":136},[57,112744,112234],{"class":81},[57,112746,6791],{"class":136},[57,112748,112239],{"class":140},[57,112750,112751,112753,112755,112757,112759,112761,112763],{"class":59,"line":144},[57,112752,17318],{"class":136},[57,112754,109994],{"class":81},[57,112756,168],{"class":140},[57,112758,948],{"class":136},[57,112760,111793],{"class":140},[57,112762,948],{"class":136},[57,112764,112256],{"class":140},[14,112766,112767],{},"奖励由两部分组成：",[377,112769,112770,112775],{},[380,112771,112772,112774],{},[28,112773,111820],{},"：末端离目标越远，奖励越低。",[380,112776,112777,112780],{},[28,112778,112779],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,112782,112783],{},"简单控制器：",[49,112785,112787],{"className":122,"code":112786,"language":124,"meta":46,"style":46},"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",[28,112788,112789,112802,112834],{"__ignoreMap":46},[57,112790,112791,112794,112796,112798,112800],{"class":59,"line":60},[57,112792,112793],{"class":140},"error ",[57,112795,156],{"class":136},[57,112797,112365],{"class":140},[57,112799,948],{"class":136},[57,112801,112370],{"class":140},[57,112803,112804,112806,112808,112810,112812,112814,112816,112818,112820,112822,112824,112826,112828,112830,112832],{"class":59,"line":67},[57,112805,106068],{"class":140},[57,112807,226],{"class":81},[57,112809,4716],{"class":140},[57,112811,156],{"class":136},[57,112813,112387],{"class":140},[57,112815,105457],{"class":81},[57,112817,6791],{"class":136},[57,112819,112394],{"class":140},[57,112821,498],{"class":81},[57,112823,112399],{"class":140},[57,112825,948],{"class":136},[57,112827,102600],{"class":81},[57,112829,12708],{"class":140},[57,112831,102600],{"class":81},[57,112833,238],{"class":140},[57,112835,112836,112838,112840,112842,112844,112846,112848,112850,112852,112854,112856,112858,112860,112862,112864],{"class":59,"line":144},[57,112837,106068],{"class":140},[57,112839,635],{"class":81},[57,112841,4716],{"class":140},[57,112843,156],{"class":136},[57,112845,112387],{"class":140},[57,112847,105457],{"class":81},[57,112849,6791],{"class":136},[57,112851,112394],{"class":140},[57,112853,226],{"class":81},[57,112855,112399],{"class":140},[57,112857,948],{"class":136},[57,112859,102600],{"class":81},[57,112861,12708],{"class":140},[57,112863,102600],{"class":81},[57,112865,238],{"class":140},[14,112867,112868],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[394,112870,101905],{"id":101905},[49,112872,112873],{"className":122,"code":112683,"language":124,"meta":46,"style":46},[28,112874,112875],{"__ignoreMap":46},[57,112876,112877,112879,112881,112883,112885],{"class":59,"line":60},[57,112878,32144],{"class":136},[57,112880,112053],{"class":70},[57,112882,112056],{"class":140},[57,112884,1585],{"class":81},[57,112886,112061],{"class":140},[14,112888,112889,112890,112892,112893,82736,112895,28654],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[28,112891,80007],{}," 是 site 的名字，比如 ",[28,112894,111733],{},[28,112896,112156],{},[49,112898,112900],{"className":122,"code":112899,"language":124,"meta":46,"style":46},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[28,112901,112902],{"__ignoreMap":46},[57,112903,112904,112906,112908],{"class":59,"line":60},[57,112905,103831],{"class":140},[57,112907,156],{"class":136},[57,112909,112070],{"class":140},[14,112911,112912],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[49,112914,112916],{"className":122,"code":112915,"language":124,"meta":46,"style":46},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[28,112917,112918,112930],{"__ignoreMap":46},[57,112919,112920,112922,112924,112926,112928],{"class":59,"line":60},[57,112921,1813],{"class":136},[57,112923,103646],{"class":140},[57,112925,1326],{"class":136},[57,112927,4366],{"class":81},[57,112929,4012],{"class":140},[57,112931,112932,112934,112936,112938,112940,112942,112944,112946,112948,112950],{"class":59,"line":67},[57,112933,104092],{"class":136},[57,112935,103632],{"class":81},[57,112937,168],{"class":140},[57,112939,475],{"class":136},[57,112941,112095],{"class":74},[57,112943,1312],{"class":81},[57,112945,80007],{"class":140},[57,112947,1362],{"class":81},[57,112949,668],{"class":74},[57,112951,238],{"class":140},[14,112953,112954,112955,112958,112959,112961],{},"如果 site 没找到，就主动报错。",[28,112956,112957],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[28,112960,80007],{}," 的值放进字符串里。",[49,112963,112965],{"className":122,"code":112964,"language":124,"meta":46,"style":46},"return data.site_xpos[site_id].copy()\n",[28,112966,112967],{"__ignoreMap":46},[57,112968,112969,112971],{"class":59,"line":60},[57,112970,17318],{"class":136},[57,112972,112112],{"class":140},[14,112974,112975,112976,112978,112979,112982],{},"返回这个 site 的世界坐标。",[28,112977,103877],{}," 里的每一行都是一个 site 的 ",[28,112980,112981],{},"(x, y, z)"," 坐标。",[49,112984,112986],{"className":122,"code":112985,"language":124,"meta":46,"style":46},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[28,112987,112988],{"__ignoreMap":46},[57,112989,112990,112992,112994],{"class":59,"line":60},[57,112991,32144],{"class":136},[57,112993,112127],{"class":70},[57,112995,112130],{"class":140},[14,112997,112998],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[49,113000,113002],{"className":122,"code":113001,"language":124,"meta":46,"style":46},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[28,113003,113004,113016],{"__ignoreMap":46},[57,113005,113006,113008,113010,113012,113014],{"class":59,"line":60},[57,113007,111765],{"class":140},[57,113009,156],{"class":136},[57,113011,112140],{"class":140},[57,113013,111733],{"class":74},[57,113015,238],{"class":140},[57,113017,113018,113020,113022,113024,113026],{"class":59,"line":67},[57,113019,111775],{"class":140},[57,113021,156],{"class":136},[57,113023,112140],{"class":140},[57,113025,112156],{"class":74},[57,113027,238],{"class":140},[14,113029,113030],{},"分别读取末端点和目标点的世界坐标。",[49,113032,113033],{"className":122,"code":112705,"language":124,"meta":46,"style":46},[28,113034,113035],{"__ignoreMap":46},[57,113036,113037,113039],{"class":59,"line":60},[57,113038,17318],{"class":136},[57,113040,112165],{"class":140},[14,113042,113043],{},"把四部分拼成一个观测数组：",[49,113045,113048],{"className":113046,"code":113047,"language":5460,"meta":46},[5458],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[28,113049,113047],{"__ignoreMap":46},[49,113051,113053],{"className":122,"code":113052,"language":124,"meta":46,"style":46},"dist = np.linalg.norm(tip - target)\n",[28,113054,113055],{"__ignoreMap":46},[57,113056,113057,113059,113061,113063,113065],{"class":59,"line":60},[57,113058,111793],{"class":140},[57,113060,156],{"class":136},[57,113062,111798],{"class":140},[57,113064,948],{"class":136},[57,113066,111803],{"class":140},[14,113068,113069,113070,113073,113074,113077],{},"计算 tip 到 target 的距离。",[28,113071,113072],{},"tip - target"," 得到一个三维向量，",[28,113075,113076],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,113079,14905],{},[49,113081,113084],{"className":113082,"code":113083,"language":5460,"meta":46},[5458],"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",[28,113085,113083],{"__ignoreMap":46},[49,113087,113089],{"className":122,"code":113088,"language":124,"meta":46,"style":46},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[28,113090,113091],{"__ignoreMap":46},[57,113092,113093,113095,113097,113099,113101],{"class":59,"line":60},[57,113094,112740],{"class":140},[57,113096,156],{"class":136},[57,113098,112234],{"class":81},[57,113100,6791],{"class":136},[57,113102,112239],{"class":140},[14,113104,113105,113106,113109,113110,113113],{},"计算动作惩罚。",[28,113107,113108],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[28,113111,113112],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[49,113115,113117],{"className":122,"code":113116,"language":124,"meta":46,"style":46},"return float(-dist - control_cost)\n",[28,113118,113119],{"__ignoreMap":46},[57,113120,113121,113123,113125,113127,113129,113131,113133],{"class":59,"line":60},[57,113122,17318],{"class":136},[57,113124,109994],{"class":81},[57,113126,168],{"class":140},[57,113128,948],{"class":136},[57,113130,111793],{"class":140},[57,113132,948],{"class":136},[57,113134,112256],{"class":140},[14,113136,113137],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[49,113139,113140],{"className":122,"code":111000,"language":124,"meta":46,"style":46},[28,113141,113142],{"__ignoreMap":46},[57,113143,113144,113146,113148],{"class":59,"line":60},[57,113145,111007],{"class":140},[57,113147,156],{"class":136},[57,113149,104958],{"class":81},[14,113151,113152],{},"累计奖励变量，记录整个运行过程的总分。",[49,113154,113156],{"className":122,"code":113155,"language":124,"meta":46,"style":46},"for step in range(500):\n",[28,113157,113158],{"__ignoreMap":46},[57,113159,113160,113162,113164,113166,113168,113170,113172],{"class":59,"line":60},[57,113161,3298],{"class":136},[57,113163,31813],{"class":140},[57,113165,26312],{"class":136},[57,113167,32640],{"class":81},[57,113169,168],{"class":140},[57,113171,65271],{"class":81},[57,113173,30983],{"class":140},[14,113175,113176],{},"运行 500 个控制步。",[49,113178,113179],{"className":122,"code":104740,"language":124,"meta":46,"style":46},[28,113180,113181],{"__ignoreMap":46},[57,113182,113183],{"class":59,"line":60},[57,113184,104740],{"class":140},[14,113186,113187,113188,101215,113190,113192],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[28,113189,103428],{},[28,113191,103431],{}," 是当前状态下的坐标。",[49,113194,113196],{"className":122,"code":113195,"language":124,"meta":46,"style":46},"error = target - tip\n",[28,113197,113198],{"__ignoreMap":46},[57,113199,113200,113202,113204,113206,113208],{"class":59,"line":60},[57,113201,112793],{"class":140},[57,113203,156],{"class":136},[57,113205,112365],{"class":140},[57,113207,948],{"class":136},[57,113209,112370],{"class":140},[14,113211,113212],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[49,113214,113216],{"className":122,"code":113215,"language":124,"meta":46,"style":46},"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",[28,113217,113218,113250],{"__ignoreMap":46},[57,113219,113220,113222,113224,113226,113228,113230,113232,113234,113236,113238,113240,113242,113244,113246,113248],{"class":59,"line":60},[57,113221,106068],{"class":140},[57,113223,226],{"class":81},[57,113225,4716],{"class":140},[57,113227,156],{"class":136},[57,113229,112387],{"class":140},[57,113231,105457],{"class":81},[57,113233,6791],{"class":136},[57,113235,112394],{"class":140},[57,113237,498],{"class":81},[57,113239,112399],{"class":140},[57,113241,948],{"class":136},[57,113243,102600],{"class":81},[57,113245,12708],{"class":140},[57,113247,102600],{"class":81},[57,113249,238],{"class":140},[57,113251,113252,113254,113256,113258,113260,113262,113264,113266,113268,113270,113272,113274,113276,113278,113280],{"class":59,"line":67},[57,113253,106068],{"class":140},[57,113255,635],{"class":81},[57,113257,4716],{"class":140},[57,113259,156],{"class":136},[57,113261,112387],{"class":140},[57,113263,105457],{"class":81},[57,113265,6791],{"class":136},[57,113267,112394],{"class":140},[57,113269,226],{"class":81},[57,113271,112399],{"class":140},[57,113273,948],{"class":136},[57,113275,102600],{"class":81},[57,113277,12708],{"class":140},[57,113279,102600],{"class":81},[57,113281,238],{"class":140},[14,113283,113284,113285,113288],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[28,113286,113287],{},"error -> ctrl -> step"," 的流程。",[49,113290,113291],{"className":122,"code":104702,"language":124,"meta":46,"style":46},[28,113292,113293],{"__ignoreMap":46},[57,113294,113295],{"class":59,"line":60},[57,113296,104702],{"class":140},[14,113298,113299],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[49,113301,113303],{"className":122,"code":113302,"language":124,"meta":46,"style":46},"obs = get_obs(model, data)\n",[28,113304,113305],{"__ignoreMap":46},[57,113306,113307,113309,113311],{"class":59,"line":60},[57,113308,111051],{"class":140},[57,113310,156],{"class":136},[57,113312,112488],{"class":140},[14,113314,113315,113316,113319],{},"读取最新观测。后面打印 ",[28,113317,113318],{},"obs.shape[0]","，用来确认观测维度是 10。",[365,113321,102513],{"id":102512},[14,113323,113324],{},"观测维度为:",[49,113326,113329],{"className":113327,"code":113328,"language":5460,"meta":46},[5458],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[28,113330,113328],{"__ignoreMap":46},[14,113332,113333],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,113335,113336],{},"程序每 100 步打印：",[49,113338,113341],{"className":113339,"code":113340,"language":5460,"meta":46},[5458],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[28,113342,113340],{"__ignoreMap":46},[14,113344,113345,113346,113348],{},"如果控制有效，你应该看到最终 ",[28,113347,103428],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[365,113350,102545],{"id":102544},[377,113352,113353,113356,113359,113365,113371,113378,113388],{},[380,113354,113355],{},"修改目标点位置。",[380,113357,113358],{},"重新运行，观察最终 tip 是否变化。",[380,113360,113361,113362,113364],{},"把 gravity 改成 ",[28,113363,102786],{},"，观察控制是否变差。",[380,113366,111378,113367,111382,113369,28654],{},[28,113368,102355],{},[28,113370,498],{},[380,113372,102608,113373,102611,113375,113377],{},[28,113374,110793],{},[28,113376,107504],{},"，观察机械臂是否更难移动。",[380,113379,102608,113380,82727,113382,102611,113384,113387],{},[28,113381,103431],{},[28,113383,104343],{},[28,113385,113386],{},"0.2 0 0.6","，观察 reward 和 final tip。",[380,113389,113390],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[365,113392,102650],{"id":102649},[394,113394,113396],{"id":113395},"site-not-found",[28,113397,113398],{},"site not found",[14,113400,113401,113402,101215,113405,28654],{},"检查 XML 中是否有 ",[28,113403,113404],{},"site name=\"tip\"",[28,113406,113407],{},"site name=\"target\"",[394,113409,113410],{"id":113410},"机械臂完全不动",[14,113412,102720],{},[377,113414,113415,113420,113423,113428],{},[380,113416,113417,113419],{},[28,113418,102355],{}," 是否为 2",[380,113421,113422],{},"actuator 是否引用正确 joint",[380,113424,113425,113427],{},[28,113426,101273],{}," 是否被赋值",[380,113429,113430,113431],{},"是否执行了 ",[28,113432,100882],{},[394,113434,113435],{"id":113435},"控制效果不好",[14,113437,113438],{},"正常。本章重点不是控制器最优，而是任务结构:",[49,113440,113443],{"className":113441,"code":113442,"language":5460,"meta":46},[5458],"obs → action → mj_step → reward → next_obs\n",[28,113444,113442],{"__ignoreMap":46},[394,113446,113448],{"id":113447},"tip-坐标不变化","tip 坐标不变化",[14,113450,102772],{},[377,113452,113453,113458,113466,113475],{},[380,113454,113455,113456,28654],{},"是否每步调用了 ",[28,113457,100882],{},[380,113459,113460,113461,101215,113463,28654],{},"是否写入了 ",[28,113462,106323],{},[28,113464,113465],{},"data.ctrl[1]",[380,113467,113468,113469,630,113472,28654],{},"actuator 是否正确引用 ",[28,113470,113471],{},"joint1",[28,113473,113474],{},"joint2",[380,113476,113477],{},"控制输入是否太小。",[394,113479,113480],{"id":113480},"目标点不会动",[14,113482,113483],{},"本章的 target 是固定 site：",[49,113485,113487],{"className":53264,"code":113486,"language":53266,"meta":46,"style":46},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[28,113488,113489],{"__ignoreMap":46},[57,113490,113491,113493,113495,113497,113499,113501,113503,113505,113508],{"class":59,"line":60},[57,113492,1326],{"class":140},[57,113494,103407],{"class":51497},[57,113496,15192],{"class":70},[57,113498,156],{"class":140},[57,113500,112156],{"class":74},[57,113502,101303],{"class":70},[57,113504,156],{"class":140},[57,113506,113507],{"class":74},"\"0.5 0 0.4\"",[57,113509,113510],{"class":140}," ...\u002F>\n",[14,113512,113513,113514,113516],{},"它直接挂在 ",[28,113515,102038],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[394,113518,113519],{"id":113519},"机械臂不像真实机械臂",[14,113521,113522],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[365,113524,102804],{"id":102803},[14,113526,113527],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,113529,113530],{},"核心公式：",[49,113532,113535],{"className":113533,"code":113534,"language":5460,"meta":46},[5458],"distance = ||tip - target||\nreward = -distance - action_cost\n",[28,113536,113534],{"__ignoreMap":46},[14,113538,113539],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[342,113541,113542],{},"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":46,"searchDepth":67,"depth":67,"links":113544},[113545,113546,113547,113552,113556,113557,113558,113566],{"id":100843,"depth":67,"text":100844},{"id":100966,"depth":67,"text":100967},{"id":101241,"depth":67,"text":101242,"children":113548},[113549,113550,113551],{"id":111748,"depth":144,"text":111749},{"id":111824,"depth":144,"text":111824},{"id":111854,"depth":144,"text":111855},{"id":101449,"depth":67,"text":101450,"children":113553},[113554,113555],{"id":101769,"depth":144,"text":101769},{"id":101905,"depth":144,"text":101905},{"id":102512,"depth":67,"text":102513},{"id":102544,"depth":67,"text":102545},{"id":102649,"depth":67,"text":102650,"children":113559},[113560,113561,113562,113563,113564,113565],{"id":113395,"depth":144,"text":113398},{"id":113410,"depth":144,"text":113410},{"id":113435,"depth":144,"text":113435},{"id":113447,"depth":144,"text":113448},{"id":113480,"depth":144,"text":113480},{"id":113519,"depth":144,"text":113519},{"id":102803,"depth":67,"text":102804},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111552,"description":46},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113573,"title":113574,"body":113575,"description":46,"extension":348,"meta":117037,"navigation":350,"path":117038,"seo":117039,"stem":117040,"__hash__":117041},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113576,"toc":117008},[113577,113580,113582,113585,113588,113613,113616,113622,113625,113631,113633,113635,113659,113661,113679,113681,113724,113726,113753,113755,113758,113810,113813,113819,113828,113831,113869,113872,113911,113914,113922,113929,113932,113938,113940,113994,114001,114046,114049,114053,114069,114079,114081,115342,115344,115356,115358,115369,115371,115374,115395,115398,115401,115434,115440,115443,115476,115479,115482,115523,115528,115542,115545,115558,115563,115586,115588,115603,115613,115628,115635,115655,115670,115688,115691,115708,115716,115732,115738,115770,115783,115815,115825,115860,115874,115920,115934,115976,115987,116000,116006,116039,116042,116069,116079,116119,116129,116146,116153,116171,116174,116215,116228,116243,116246,116269,116272,116284,116287,116306,116311,116332,116335,116350,116353,116387,116399,116414,116417,116442,116445,116464,116467,116499,116502,116526,116532,116562,116569,116582,116585,116587,116589,116595,116598,116601,116613,116616,116618,116672,116674,116678,116684,116693,116696,116703,116705,116728,116731,116735,116737,116755,116761,116763,116796,116799,116805,116809,116812,116832,116837,116841,116848,116868,116873,116877,116880,116900,116903,116989,116993,116996,117002,117005],[10,113578,113574],{"id":113579},"_8gymnasium-风格强化学习接口基础",[365,113581,100844],{"id":100843},[14,113583,113584],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,113586,113587],{},"你将实现:",[49,113589,113591],{"className":122,"code":113590,"language":124,"meta":46,"style":46},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[28,113592,113593,113603],{"__ignoreMap":46},[57,113594,113595,113598,113600],{"class":59,"line":60},[57,113596,113597],{"class":140},"obs, info ",[57,113599,156],{"class":136},[57,113601,113602],{"class":140}," env.reset()\n",[57,113604,113605,113608,113610],{"class":59,"line":67},[57,113606,113607],{"class":140},"obs, reward, terminated, truncated, info ",[57,113609,156],{"class":136},[57,113611,113612],{"class":140}," env.step(action)\n",[14,113614,113615],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,113617,113618,113619,113621],{},"前面章节的代码都是“脚本式”的：在 ",[28,113620,102492],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,113623,113624],{},"可以先记住 Gymnasium 环境的核心交互：",[49,113626,113629],{"className":113627,"code":113628,"language":5460,"meta":46},[5458],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[28,113630,113628],{"__ignoreMap":46},[365,113632,100967],{"id":100966},[14,113634,100970],{},[49,113636,113637],{"className":51,"code":104585,"language":53,"meta":46,"style":46},[28,113638,113639],{"__ignoreMap":46},[57,113640,113641,113643,113645,113647,113649,113651,113653,113655,113657],{"class":59,"line":60},[57,113642,24845],{"class":70},[57,113644,26584],{"class":74},[57,113646,75],{"class":74},[57,113648,26669],{"class":81},[57,113650,104600],{"class":74},[57,113652,100995],{"class":74},[57,113654,102698],{"class":74},[57,113656,101011],{"class":74},[57,113658,104609],{"class":74},[14,113660,103016],{},[49,113662,113664],{"className":51,"code":113663,"language":53,"meta":46,"style":46},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[28,113665,113666],{"__ignoreMap":46},[57,113667,113668,113670,113672,113674,113676],{"class":59,"line":60},[57,113669,24101],{"class":70},[57,113671,75],{"class":74},[57,113673,101127],{"class":74},[57,113675,107908],{"class":74},[57,113677,113678],{"class":74}," gymnasium\n",[14,113680,103033],{},[49,113682,113684],{"className":51,"code":113683,"language":53,"meta":46,"style":46},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[28,113685,113686,113703,113712],{"__ignoreMap":46},[57,113687,113688,113690,113692,113694,113697,113699,113701],{"class":59,"line":60},[57,113689,71],{"class":70},[57,113691,29445],{"class":74},[57,113693,25384],{"class":81},[57,113695,113696],{"class":74}," mujoco-gym-api",[57,113698,101172],{"class":74},[57,113700,101175],{"class":81},[57,113702,101178],{"class":81},[57,113704,113705,113707,113709],{"class":59,"line":67},[57,113706,71],{"class":70},[57,113708,101185],{"class":74},[57,113710,113711],{"class":74}," mujoco-gym-api\n",[57,113713,113714,113716,113718,113720,113722],{"class":59,"line":144},[57,113715,24101],{"class":70},[57,113717,75],{"class":74},[57,113719,101127],{"class":74},[57,113721,107908],{"class":74},[57,113723,113678],{"class":74},[14,113725,101201],{},[377,113727,113728,113738,113741,113747],{},[380,113729,113730,113731,113734,113735,28654],{},"本章使用 ",[28,113732,113733],{},"gymnasium","，不是旧版 ",[28,113736,113737],{},"gym",[380,113739,113740],{},"Gymnasium API 与旧 Gym API 有差异。",[380,113742,113743,113744,28654],{},"旧 Gym 常见返回值是 4 个: ",[28,113745,113746],{},"obs, reward, done, info",[380,113748,113749,113750,28654],{},"Gymnasium 返回值是 5 个: ",[28,113751,113752],{},"obs, reward, terminated, truncated, info",[365,113754,101242],{"id":101241},[14,113756,113757],{},"强化学习环境接口包含:",[557,113759,113760,113769],{},[560,113761,113762],{},[563,113763,113764,113767],{},[566,113765,113766],{"align":24008},"方法",[566,113768,102893],{"align":24008},[603,113770,113771,113781,113791,113801],{},[563,113772,113773,113778],{},[608,113774,113775],{"align":24008},[28,113776,113777],{},"reset()",[608,113779,113780],{"align":24008},"重置环境",[563,113782,113783,113788],{},[608,113784,113785],{"align":24008},[28,113786,113787],{},"step(action)",[608,113789,113790],{"align":24008},"执行动作",[563,113792,113793,113798],{},[608,113794,113795],{"align":24008},[28,113796,113797],{},"observation_space",[608,113799,113800],{"align":24008},"观测空间",[563,113802,113803,113808],{},[608,113804,113805],{"align":24008},[28,113806,113807],{},"action_space",[608,113809,23926],{"align":24008},[14,113811,113812],{},"一个最小环境需要完成:",[49,113814,113817],{"className":113815,"code":113816,"language":5460,"meta":46},[5458],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[28,113818,113816],{"__ignoreMap":46},[394,113820,113822,101215,113825,104835],{"id":113821},"terminated-和-truncated-的区别",[28,113823,113824],{},"terminated",[28,113826,113827],{},"truncated",[14,113829,113830],{},"Gymnasium 把“结束”拆成两个概念：",[557,113832,113833,113843],{},[560,113834,113835],{},[563,113836,113837,113839,113841],{},[566,113838,104771],{"align":24008},[566,113840,100897],{"align":24008},[566,113842,21459],{"align":24008},[603,113844,113845,113857],{},[563,113846,113847,113851,113854],{},[608,113848,113849],{"align":24008},[28,113850,113824],{},[608,113852,113853],{"align":24008},"任务自然结束",[608,113855,113856],{"align":24008},"机械臂到达目标、机器人摔倒",[563,113858,113859,113863,113866],{},[608,113860,113861],{"align":24008},[28,113862,113827],{},[608,113864,113865],{"align":24008},"因外部限制截断",[608,113867,113868],{"align":24008},"达到最大步数、时间限制",[14,113870,113871],{},"本章中：",[49,113873,113875],{"className":122,"code":113874,"language":124,"meta":46,"style":46},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[28,113876,113877,113892],{"__ignoreMap":46},[57,113878,113879,113882,113884,113887,113889],{"class":59,"line":60},[57,113880,113881],{"class":140},"terminated ",[57,113883,156],{"class":136},[57,113885,113886],{"class":140}," dist ",[57,113888,1326],{"class":136},[57,113890,113891],{"class":81}," 0.05\n",[57,113893,113894,113897,113899,113901,113904,113906,113908],{"class":59,"line":67},[57,113895,113896],{"class":140},"truncated ",[57,113898,156],{"class":136},[57,113900,39070],{"class":81},[57,113902,113903],{"class":140},".steps ",[57,113905,1984],{"class":136},[57,113907,39070],{"class":81},[57,113909,113910],{"class":140},".max_steps\n",[14,113912,113913],{},"也就是：",[377,113915,113916,113919],{},[380,113917,113918],{},"末端距离目标小于 0.05，任务成功结束。",[380,113920,113921],{},"步数超过上限，episode 被截断。",[394,113923,113925,101215,113927],{"id":113924},"observation_space-和-action_space",[28,113926,113797],{},[28,113928,113807],{},[14,113930,113931],{},"这两个对象告诉算法：",[49,113933,113936],{"className":113934,"code":113935,"language":5460,"meta":46},[5458],"观测长什么样\n动作允许多大\n",[28,113937,113935],{"__ignoreMap":46},[14,113939,14905],{},[49,113941,113943],{"className":122,"code":113942,"language":124,"meta":46,"style":46},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[28,113944,113945],{"__ignoreMap":46},[57,113946,113947,113949,113952,113954,113957,113960,113963,113965,113967,113970,113972,113974,113976,113978,113980,113982,113984,113987,113989,113991],{"class":59,"line":60},[57,113948,31020],{"class":81},[57,113950,113951],{"class":140},".action_space ",[57,113953,156],{"class":136},[57,113955,113956],{"class":140}," spaces.Box(",[57,113958,113959],{"class":5489},"low",[57,113961,113962],{"class":136},"=-",[57,113964,102600],{"class":81},[57,113966,12708],{"class":140},[57,113968,113969],{"class":5489},"high",[57,113971,156],{"class":136},[57,113973,102600],{"class":81},[57,113975,12708],{"class":140},[57,113977,96160],{"class":5489},[57,113979,156],{"class":136},[57,113981,168],{"class":140},[57,113983,498],{"class":81},[57,113985,113986],{"class":140},",), ",[57,113988,93697],{"class":5489},[57,113990,156],{"class":136},[57,113992,113993],{"class":140},"np.float32)\n",[14,113995,113996,113997,114000],{},"表示动作是 2 维数组，每个值都在 ",[28,113998,113999],{},"[-1, 1]"," 范围内。",[49,114002,114004],{"className":122,"code":114003,"language":124,"meta":46,"style":46},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[28,114005,114006],{"__ignoreMap":46},[57,114007,114008,114010,114013,114015,114017,114019,114021,114024,114026,114028,114030,114032,114034,114036,114038,114040,114042,114044],{"class":59,"line":60},[57,114009,31020],{"class":81},[57,114011,114012],{"class":140},".observation_space ",[57,114014,156],{"class":136},[57,114016,113956],{"class":140},[57,114018,113959],{"class":5489},[57,114020,113962],{"class":136},[57,114022,114023],{"class":140},"np.inf, ",[57,114025,113969],{"class":5489},[57,114027,156],{"class":136},[57,114029,114023],{"class":140},[57,114031,96160],{"class":5489},[57,114033,156],{"class":136},[57,114035,168],{"class":140},[57,114037,862],{"class":81},[57,114039,113986],{"class":140},[57,114041,93697],{"class":5489},[57,114043,156],{"class":136},[57,114045,113993],{"class":140},[14,114047,114048],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[394,114050,114052],{"id":114051},"frame_skip-是什么","frame_skip 是什么",[49,114054,114056],{"className":122,"code":114055,"language":124,"meta":46,"style":46},"self.frame_skip = 5\n",[28,114057,114058],{"__ignoreMap":46},[57,114059,114060,114062,114065,114067],{"class":59,"line":60},[57,114061,31020],{"class":81},[57,114063,114064],{"class":140},".frame_skip ",[57,114066,156],{"class":136},[57,114068,54624],{"class":81},[14,114070,114071,114072,114075,114076,114078],{},"表示外部调用一次 ",[28,114073,114074],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[28,114077,101412],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[365,114080,101450],{"id":101449},[49,114082,114084],{"className":122,"code":114083,"language":124,"meta":46,"style":46},"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",[28,114085,114086,114098,114104,114114,114125,114129,114133,114141,114146,114150,114154,114158,114162,114166,114170,114174,114179,114183,114187,114191,114196,114200,114204,114208,114212,114216,114220,114224,114228,114232,114236,114240,114244,114248,114266,114281,114285,114298,114308,114323,114340,114344,114365,114384,114409,114423,114427,114437,114449,114459,114463,114505,114543,114547,114557,114573,114588,114607,114614,114618,114631,114646,114661,114674,114693,114709,114713,114754,114769,114784,114788,114827,114838,114851,114855,114865,114874,114878,114888,114903,114921,114925,114936,114953,114966,114970,114980,114984,114995,115006,115010,115024,115038,115054,115058,115071,115088,115103,115110,115114,115118,115130,115140,115158,115170,115182,115186,115194,115210,115219,115228,115236,115278,115291,115296,115300,115318,115322,115326,115338],{"__ignoreMap":46},[57,114087,114088,114090,114093,114095],{"class":59,"line":60},[57,114089,137],{"class":136},[57,114091,114092],{"class":140}," gymnasium ",[57,114094,31580],{"class":136},[57,114096,114097],{"class":140}," gym\n",[57,114099,114100,114102],{"class":59,"line":67},[57,114101,137],{"class":136},[57,114103,101498],{"class":140},[57,114105,114106,114108,114110,114112],{"class":59,"line":144},[57,114107,137],{"class":136},[57,114109,31577],{"class":140},[57,114111,31580],{"class":136},[57,114113,31583],{"class":140},[57,114115,114116,114118,114120,114122],{"class":59,"line":150},[57,114117,30934],{"class":136},[57,114119,114092],{"class":140},[57,114121,137],{"class":136},[57,114123,114124],{"class":140}," spaces\n",[57,114126,114127],{"class":59,"line":162},[57,114128,2673],{"emptyLinePlaceholder":350},[57,114130,114131],{"class":59,"line":180},[57,114132,2673],{"emptyLinePlaceholder":350},[57,114134,114135,114137,114139],{"class":59,"line":186},[57,114136,101511],{"class":81},[57,114138,13837],{"class":136},[57,114140,101516],{"class":74},[57,114142,114143],{"class":59,"line":197},[57,114144,114145],{"class":74},"\u003Cmujoco model=\"gym_reacher\">\n",[57,114147,114148],{"class":59,"line":241},[57,114149,111935],{"class":74},[57,114151,114152],{"class":59,"line":249},[57,114153,2673],{"emptyLinePlaceholder":350},[57,114155,114156],{"class":59,"line":262},[57,114157,101535],{"class":74},[57,114159,114160],{"class":59,"line":281},[57,114161,111953],{"class":74},[57,114163,114164],{"class":59,"line":287},[57,114165,2673],{"emptyLinePlaceholder":350},[57,114167,114168],{"class":59,"line":298},[57,114169,111962],{"class":74},[57,114171,114172],{"class":59,"line":311},[57,114173,111967],{"class":74},[57,114175,114176],{"class":59,"line":322},[57,114177,114178],{"class":74},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[57,114180,114181],{"class":59,"line":1929},[57,114182,2673],{"emptyLinePlaceholder":350},[57,114184,114185],{"class":59,"line":1950},[57,114186,111981],{"class":74},[57,114188,114189],{"class":59,"line":1955},[57,114190,111986],{"class":74},[57,114192,114193],{"class":59,"line":1969},[57,114194,114195],{"class":74},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[57,114197,114198],{"class":59,"line":1974},[57,114199,111996],{"class":74},[57,114201,114202],{"class":59,"line":2001},[57,114203,106635],{"class":74},[57,114205,114206],{"class":59,"line":2006},[57,114207,101564],{"class":74},[57,114209,114210],{"class":59,"line":2023},[57,114211,101569],{"class":74},[57,114213,114214],{"class":59,"line":2028},[57,114215,2673],{"emptyLinePlaceholder":350},[57,114217,114218],{"class":59,"line":2033},[57,114219,106652],{"class":74},[57,114221,114222],{"class":59,"line":2038},[57,114223,112021],{"class":74},[57,114225,114226],{"class":59,"line":2052},[57,114227,112026],{"class":74},[57,114229,114230],{"class":59,"line":2057},[57,114231,106662],{"class":74},[57,114233,114234],{"class":59,"line":2850},[57,114235,101574],{"class":74},[57,114237,114238],{"class":59,"line":2864},[57,114239,95895],{"class":74},[57,114241,114242],{"class":59,"line":2872},[57,114243,2673],{"emptyLinePlaceholder":350},[57,114245,114246],{"class":59,"line":2877},[57,114247,2673],{"emptyLinePlaceholder":350},[57,114249,114250,114252,114255,114257,114259,114261,114264],{"class":59,"line":2883},[57,114251,14966],{"class":136},[57,114253,114254],{"class":70}," ReacherEnv",[57,114256,168],{"class":140},[57,114258,113737],{"class":70},[57,114260,974],{"class":140},[57,114262,114263],{"class":70},"Env",[57,114265,30983],{"class":140},[57,114267,114268,114271,114273,114275,114278],{"class":59,"line":2889},[57,114269,114270],{"class":140},"    metadata ",[57,114272,156],{"class":136},[57,114274,4721],{"class":140},[57,114276,114277],{"class":74},"\"render_modes\"",[57,114279,114280],{"class":140},": []}\n",[57,114282,114283],{"class":59,"line":2894},[57,114284,2673],{"emptyLinePlaceholder":350},[57,114286,114287,114289,114291,114294,114296],{"class":59,"line":8221},[57,114288,30998],{"class":136},[57,114290,31001],{"class":81},[57,114292,114293],{"class":140},"(self) -> ",[57,114295,95883],{"class":81},[57,114297,4012],{"class":140},[57,114299,114300,114302,114304,114306],{"class":59,"line":8245},[57,114301,31014],{"class":81},[57,114303,17533],{"class":140},[57,114305,31026],{"class":81},[57,114307,2249],{"class":140},[57,114309,114310,114312,114315,114317,114319,114321],{"class":59,"line":8250},[57,114311,31042],{"class":81},[57,114313,114314],{"class":140},".model ",[57,114316,156],{"class":136},[57,114318,101609],{"class":140},[57,114320,101511],{"class":81},[57,114322,238],{"class":140},[57,114324,114325,114327,114330,114332,114335,114337],{"class":59,"line":8256},[57,114326,31042],{"class":81},[57,114328,114329],{"class":140},".data ",[57,114331,156],{"class":136},[57,114333,114334],{"class":140}," mujoco.MjData(",[57,114336,31020],{"class":81},[57,114338,114339],{"class":140},".model)\n",[57,114341,114342],{"class":59,"line":8283},[57,114343,2673],{"emptyLinePlaceholder":350},[57,114345,114346,114348,114351,114353,114356,114358,114361,114363],{"class":59,"line":8288},[57,114347,31042],{"class":81},[57,114349,114350],{"class":140},".tip_site_id ",[57,114352,156],{"class":136},[57,114354,114355],{"class":140}," mujoco.mj_name2id(",[57,114357,31020],{"class":81},[57,114359,114360],{"class":140},".model, mujoco.mjtObj.mjOBJ_SITE, ",[57,114362,111733],{"class":74},[57,114364,238],{"class":140},[57,114366,114367,114369,114372,114374,114376,114378,114380,114382],{"class":59,"line":8294},[57,114368,31042],{"class":81},[57,114370,114371],{"class":140},".target_site_id ",[57,114373,156],{"class":136},[57,114375,114355],{"class":140},[57,114377,31020],{"class":81},[57,114379,114360],{"class":140},[57,114381,112156],{"class":74},[57,114383,238],{"class":140},[57,114385,114386,114388,114390,114392,114394,114396,114399,114401,114403,114405,114407],{"class":59,"line":8306},[57,114387,2770],{"class":136},[57,114389,39070],{"class":81},[57,114391,114350],{"class":140},[57,114393,1326],{"class":136},[57,114395,4366],{"class":81},[57,114397,114398],{"class":136}," or",[57,114400,39070],{"class":81},[57,114402,114371],{"class":140},[57,114404,1326],{"class":136},[57,114406,4366],{"class":81},[57,114408,4012],{"class":140},[57,114410,114411,114414,114416,114418,114421],{"class":59,"line":8318},[57,114412,114413],{"class":136},"            raise",[57,114415,103632],{"class":81},[57,114417,168],{"class":140},[57,114419,114420],{"class":74},"\"required sites not found\"",[57,114422,238],{"class":140},[57,114424,114425],{"class":59,"line":8330},[57,114426,2673],{"emptyLinePlaceholder":350},[57,114428,114429,114431,114433,114435],{"class":59,"line":9989},[57,114430,31042],{"class":81},[57,114432,114064],{"class":140},[57,114434,156],{"class":136},[57,114436,54624],{"class":81},[57,114438,114439,114441,114444,114446],{"class":59,"line":10014},[57,114440,31042],{"class":81},[57,114442,114443],{"class":140},".max_steps ",[57,114445,156],{"class":136},[57,114447,114448],{"class":81}," 200\n",[57,114450,114451,114453,114455,114457],{"class":59,"line":10037},[57,114452,31042],{"class":81},[57,114454,113903],{"class":140},[57,114456,156],{"class":136},[57,114458,47530],{"class":81},[57,114460,114461],{"class":59,"line":10061},[57,114462,2673],{"emptyLinePlaceholder":350},[57,114464,114465,114467,114469,114471,114473,114475,114477,114479,114481,114483,114485,114487,114489,114491,114493,114495,114497,114499,114501,114503],{"class":59,"line":10066},[57,114466,31042],{"class":81},[57,114468,113951],{"class":140},[57,114470,156],{"class":136},[57,114472,113956],{"class":140},[57,114474,113959],{"class":5489},[57,114476,113962],{"class":136},[57,114478,102600],{"class":81},[57,114480,12708],{"class":140},[57,114482,113969],{"class":5489},[57,114484,156],{"class":136},[57,114486,102600],{"class":81},[57,114488,12708],{"class":140},[57,114490,96160],{"class":5489},[57,114492,156],{"class":136},[57,114494,168],{"class":140},[57,114496,498],{"class":81},[57,114498,113986],{"class":140},[57,114500,93697],{"class":5489},[57,114502,156],{"class":136},[57,114504,113993],{"class":140},[57,114506,114507,114509,114511,114513,114515,114517,114519,114521,114523,114525,114527,114529,114531,114533,114535,114537,114539,114541],{"class":59,"line":10071},[57,114508,31042],{"class":81},[57,114510,114012],{"class":140},[57,114512,156],{"class":136},[57,114514,113956],{"class":140},[57,114516,113959],{"class":5489},[57,114518,113962],{"class":136},[57,114520,114023],{"class":140},[57,114522,113969],{"class":5489},[57,114524,156],{"class":136},[57,114526,114023],{"class":140},[57,114528,96160],{"class":5489},[57,114530,156],{"class":136},[57,114532,168],{"class":140},[57,114534,862],{"class":81},[57,114536,113986],{"class":140},[57,114538,93697],{"class":5489},[57,114540,156],{"class":136},[57,114542,113993],{"class":140},[57,114544,114545],{"class":59,"line":10076},[57,114546,2673],{"emptyLinePlaceholder":350},[57,114548,114549,114551,114554],{"class":59,"line":10085},[57,114550,30998],{"class":136},[57,114552,114553],{"class":70}," _get_obs",[57,114555,114556],{"class":140},"(self) -> np.ndarray:\n",[57,114558,114559,114561,114563,114565,114568,114570],{"class":59,"line":10090},[57,114560,112334],{"class":140},[57,114562,156],{"class":136},[57,114564,39070],{"class":81},[57,114566,114567],{"class":140},".data.site_xpos[",[57,114569,31020],{"class":81},[57,114571,114572],{"class":140},".tip_site_id].copy()\n",[57,114574,114575,114577,114579,114581,114583,114585],{"class":59,"line":10096},[57,114576,112347],{"class":140},[57,114578,156],{"class":136},[57,114580,39070],{"class":81},[57,114582,114567],{"class":140},[57,114584,31020],{"class":81},[57,114586,114587],{"class":140},".target_site_id].copy()\n",[57,114589,114590,114592,114594,114597,114599,114602,114604],{"class":59,"line":10117},[57,114591,110379],{"class":140},[57,114593,156],{"class":136},[57,114595,114596],{"class":140}," np.concatenate([",[57,114598,31020],{"class":81},[57,114600,114601],{"class":140},".data.qpos.copy(), ",[57,114603,31020],{"class":81},[57,114605,114606],{"class":140},".data.qvel.copy(), tip, target])\n",[57,114608,114609,114611],{"class":59,"line":10123},[57,114610,15024],{"class":136},[57,114612,114613],{"class":140}," obs.astype(np.float32)\n",[57,114615,114616],{"class":59,"line":10137},[57,114617,2673],{"emptyLinePlaceholder":350},[57,114619,114620,114622,114625,114627,114629],{"class":59,"line":10143},[57,114621,30998],{"class":136},[57,114623,114624],{"class":70}," _get_reward",[57,114626,114293],{"class":140},[57,114628,464],{"class":81},[57,114630,4012],{"class":140},[57,114632,114633,114635,114637,114639,114641,114643],{"class":59,"line":10170},[57,114634,112334],{"class":140},[57,114636,156],{"class":136},[57,114638,39070],{"class":81},[57,114640,114567],{"class":140},[57,114642,31020],{"class":81},[57,114644,114645],{"class":140},".tip_site_id]\n",[57,114647,114648,114650,114652,114654,114656,114658],{"class":59,"line":10179},[57,114649,112347],{"class":140},[57,114651,156],{"class":136},[57,114653,39070],{"class":81},[57,114655,114567],{"class":140},[57,114657,31020],{"class":81},[57,114659,114660],{"class":140},".target_site_id]\n",[57,114662,114663,114666,114668,114670,114672],{"class":59,"line":10185},[57,114664,114665],{"class":140},"        dist ",[57,114667,156],{"class":136},[57,114669,111798],{"class":140},[57,114671,948],{"class":136},[57,114673,111803],{"class":140},[57,114675,114676,114679,114681,114683,114685,114688,114690],{"class":59,"line":10193},[57,114677,114678],{"class":140},"        control_cost ",[57,114680,156],{"class":136},[57,114682,112234],{"class":81},[57,114684,6791],{"class":136},[57,114686,114687],{"class":140}," np.sum(np.square(",[57,114689,31020],{"class":81},[57,114691,114692],{"class":140},".data.ctrl))\n",[57,114694,114695,114697,114699,114701,114703,114705,114707],{"class":59,"line":10198},[57,114696,15024],{"class":136},[57,114698,109994],{"class":81},[57,114700,168],{"class":140},[57,114702,948],{"class":136},[57,114704,111793],{"class":140},[57,114706,948],{"class":136},[57,114708,112256],{"class":140},[57,114710,114711],{"class":59,"line":16876},[57,114712,2673],{"emptyLinePlaceholder":350},[57,114714,114715,114717,114720,114723,114725,114728,114730,114732,114734,114736,114738,114741,114744,114746,114748,114750,114752],{"class":59,"line":16882},[57,114716,30998],{"class":136},[57,114718,114719],{"class":70}," reset",[57,114721,114722],{"class":140},"(self, ",[57,114724,871],{"class":136},[57,114726,114727],{"class":140},", seed: ",[57,114729,429],{"class":81},[57,114731,25378],{"class":136},[57,114733,39130],{"class":81},[57,114735,13837],{"class":136},[57,114737,39130],{"class":81},[57,114739,114740],{"class":140},", options: ",[57,114742,114743],{"class":81},"dict",[57,114745,25378],{"class":136},[57,114747,39130],{"class":81},[57,114749,13837],{"class":136},[57,114751,39130],{"class":81},[57,114753,30983],{"class":140},[57,114755,114756,114758,114761,114764,114766],{"class":59,"line":16905},[57,114757,31014],{"class":81},[57,114759,114760],{"class":140},"().reset(",[57,114762,114763],{"class":5489},"seed",[57,114765,156],{"class":136},[57,114767,114768],{"class":140},"seed)\n",[57,114770,114771,114774,114776,114779,114781],{"class":59,"line":16911},[57,114772,114773],{"class":140},"        mujoco.mj_resetData(",[57,114775,31020],{"class":81},[57,114777,114778],{"class":140},".model, ",[57,114780,31020],{"class":81},[57,114782,114783],{"class":140},".data)\n",[57,114785,114786],{"class":59,"line":16934},[57,114787,2673],{"emptyLinePlaceholder":350},[57,114789,114790,114792,114795,114797,114799,114802,114804,114806,114808,114810,114812,114814,114816,114818,114820,114822,114824],{"class":59,"line":16948},[57,114791,31042],{"class":81},[57,114793,114794],{"class":140},".data.qpos[:] ",[57,114796,156],{"class":136},[57,114798,39070],{"class":81},[57,114800,114801],{"class":140},".np_random.uniform(",[57,114803,113959],{"class":5489},[57,114805,113962],{"class":136},[57,114807,86407],{"class":81},[57,114809,12708],{"class":140},[57,114811,113969],{"class":5489},[57,114813,156],{"class":136},[57,114815,86407],{"class":81},[57,114817,12708],{"class":140},[57,114819,31693],{"class":5489},[57,114821,156],{"class":136},[57,114823,31020],{"class":81},[57,114825,114826],{"class":140},".model.nq)\n",[57,114828,114829,114831,114834,114836],{"class":59,"line":16968},[57,114830,31042],{"class":81},[57,114832,114833],{"class":140},".data.qvel[:] ",[57,114835,156],{"class":136},[57,114837,104958],{"class":81},[57,114839,114840,114843,114845,114847,114849],{"class":59,"line":16974},[57,114841,114842],{"class":140},"        mujoco.mj_forward(",[57,114844,31020],{"class":81},[57,114846,114778],{"class":140},[57,114848,31020],{"class":81},[57,114850,114783],{"class":140},[57,114852,114853],{"class":59,"line":16985},[57,114854,2673],{"emptyLinePlaceholder":350},[57,114856,114857,114859,114861,114863],{"class":59,"line":17008},[57,114858,31042],{"class":81},[57,114860,113903],{"class":140},[57,114862,156],{"class":136},[57,114864,47530],{"class":81},[57,114866,114867,114869,114871],{"class":59,"line":17030},[57,114868,15024],{"class":136},[57,114870,39070],{"class":81},[57,114872,114873],{"class":140},"._get_obs(), {}\n",[57,114875,114876],{"class":59,"line":17035},[57,114877,2673],{"emptyLinePlaceholder":350},[57,114879,114880,114882,114885],{"class":59,"line":17041},[57,114881,30998],{"class":136},[57,114883,114884],{"class":70}," step",[57,114886,114887],{"class":140},"(self, action):\n",[57,114889,114890,114892,114894,114897,114899,114901],{"class":59,"line":17055},[57,114891,110419],{"class":140},[57,114893,156],{"class":136},[57,114895,114896],{"class":140}," np.asarray(action, ",[57,114898,93697],{"class":5489},[57,114900,156],{"class":136},[57,114902,113993],{"class":140},[57,114904,114905,114907,114909,114911,114913,114916,114918],{"class":59,"line":17068},[57,114906,110419],{"class":140},[57,114908,156],{"class":136},[57,114910,107644],{"class":140},[57,114912,31020],{"class":81},[57,114914,114915],{"class":140},".action_space.low, ",[57,114917,31020],{"class":81},[57,114919,114920],{"class":140},".action_space.high)\n",[57,114922,114923],{"class":59,"line":17073},[57,114924,2673],{"emptyLinePlaceholder":350},[57,114926,114927,114929,114932,114934],{"class":59,"line":17087},[57,114928,31042],{"class":81},[57,114930,114931],{"class":140},".data.ctrl[:] ",[57,114933,156],{"class":136},[57,114935,107667],{"class":140},[57,114937,114938,114940,114942,114944,114946,114948,114950],{"class":59,"line":17092},[57,114939,3676],{"class":136},[57,114941,101698],{"class":140},[57,114943,26312],{"class":136},[57,114945,32640],{"class":81},[57,114947,168],{"class":140},[57,114949,31020],{"class":81},[57,114951,114952],{"class":140},".frame_skip):\n",[57,114954,114955,114958,114960,114962,114964],{"class":59,"line":17098},[57,114956,114957],{"class":140},"            mujoco.mj_step(",[57,114959,31020],{"class":81},[57,114961,114778],{"class":140},[57,114963,31020],{"class":81},[57,114965,114783],{"class":140},[57,114967,114968],{"class":59,"line":17103},[57,114969,2673],{"emptyLinePlaceholder":350},[57,114971,114972,114974,114976,114978],{"class":59,"line":17117},[57,114973,31042],{"class":81},[57,114975,113903],{"class":140},[57,114977,9750],{"class":136},[57,114979,55896],{"class":81},[57,114981,114982],{"class":59,"line":17122},[57,114983,2673],{"emptyLinePlaceholder":350},[57,114985,114986,114988,114990,114992],{"class":59,"line":17127},[57,114987,110379],{"class":140},[57,114989,156],{"class":136},[57,114991,39070],{"class":81},[57,114993,114994],{"class":140},"._get_obs()\n",[57,114996,114997,114999,115001,115003],{"class":59,"line":17141},[57,114998,110484],{"class":140},[57,115000,156],{"class":136},[57,115002,39070],{"class":81},[57,115004,115005],{"class":140},"._get_reward()\n",[57,115007,115008],{"class":59,"line":17153},[57,115009,2673],{"emptyLinePlaceholder":350},[57,115011,115012,115014,115016,115018,115020,115022],{"class":59,"line":17158},[57,115013,112334],{"class":140},[57,115015,156],{"class":136},[57,115017,39070],{"class":81},[57,115019,114567],{"class":140},[57,115021,31020],{"class":81},[57,115023,114645],{"class":140},[57,115025,115026,115028,115030,115032,115034,115036],{"class":59,"line":17171},[57,115027,112347],{"class":140},[57,115029,156],{"class":136},[57,115031,39070],{"class":81},[57,115033,114567],{"class":140},[57,115035,31020],{"class":81},[57,115037,114660],{"class":140},[57,115039,115040,115042,115044,115046,115049,115051],{"class":59,"line":17176},[57,115041,114665],{"class":140},[57,115043,156],{"class":136},[57,115045,109994],{"class":81},[57,115047,115048],{"class":140},"(np.linalg.norm(tip ",[57,115050,948],{"class":136},[57,115052,115053],{"class":140}," target))\n",[57,115055,115056],{"class":59,"line":17181},[57,115057,2673],{"emptyLinePlaceholder":350},[57,115059,115060,115063,115065,115067,115069],{"class":59,"line":17186},[57,115061,115062],{"class":140},"        terminated ",[57,115064,156],{"class":136},[57,115066,113886],{"class":140},[57,115068,1326],{"class":136},[57,115070,113891],{"class":81},[57,115072,115073,115076,115078,115080,115082,115084,115086],{"class":59,"line":17199},[57,115074,115075],{"class":140},"        truncated ",[57,115077,156],{"class":136},[57,115079,39070],{"class":81},[57,115081,113903],{"class":140},[57,115083,1984],{"class":136},[57,115085,39070],{"class":81},[57,115087,113910],{"class":140},[57,115089,115090,115093,115095,115097,115100],{"class":59,"line":17204},[57,115091,115092],{"class":140},"        info ",[57,115094,156],{"class":136},[57,115096,4721],{"class":140},[57,115098,115099],{"class":74},"\"distance\"",[57,115101,115102],{"class":140},": dist}\n",[57,115104,115105,115107],{"class":59,"line":32830},[57,115106,15024],{"class":136},[57,115108,115109],{"class":140}," obs, reward, terminated, truncated, info\n",[57,115111,115112],{"class":59,"line":32836},[57,115113,2673],{"emptyLinePlaceholder":350},[57,115115,115116],{"class":59,"line":32842},[57,115117,2673],{"emptyLinePlaceholder":350},[57,115119,115120,115122,115124,115126,115128],{"class":59,"line":32848},[57,115121,32144],{"class":136},[57,115123,2246],{"class":70},[57,115125,101595],{"class":140},[57,115127,95883],{"class":81},[57,115129,4012],{"class":140},[57,115131,115132,115135,115137],{"class":59,"line":32854},[57,115133,115134],{"class":140},"    env ",[57,115136,156],{"class":136},[57,115138,115139],{"class":140}," ReacherEnv()\n",[57,115141,115142,115145,115147,115150,115152,115154,115156],{"class":59,"line":32865},[57,115143,115144],{"class":140},"    obs, info ",[57,115146,156],{"class":136},[57,115148,115149],{"class":140}," env.reset(",[57,115151,114763],{"class":5489},[57,115153,156],{"class":136},[57,115155,226],{"class":81},[57,115157,238],{"class":140},[57,115159,115160,115162,115164,115167],{"class":59,"line":32871},[57,115161,31496],{"class":81},[57,115163,168],{"class":140},[57,115165,115166],{"class":74},"\"initial obs shape:\"",[57,115168,115169],{"class":140},", obs.shape)\n",[57,115171,115172,115174,115176,115179],{"class":59,"line":32891},[57,115173,31496],{"class":81},[57,115175,168],{"class":140},[57,115177,115178],{"class":74},"\"initial info:\"",[57,115180,115181],{"class":140},", info)\n",[57,115183,115184],{"class":59,"line":32897},[57,115185,2673],{"emptyLinePlaceholder":350},[57,115187,115188,115190,115192],{"class":59,"line":32908},[57,115189,110350],{"class":140},[57,115191,156],{"class":136},[57,115193,104958],{"class":81},[57,115195,115196,115198,115200,115202,115204,115206,115208],{"class":59,"line":32914},[57,115197,3474],{"class":136},[57,115199,31813],{"class":140},[57,115201,26312],{"class":136},[57,115203,32640],{"class":81},[57,115205,168],{"class":140},[57,115207,1116],{"class":81},[57,115209,30983],{"class":140},[57,115211,115212,115214,115216],{"class":59,"line":32920},[57,115213,110419],{"class":140},[57,115215,156],{"class":136},[57,115217,115218],{"class":140}," env.action_space.sample()\n",[57,115220,115221,115224,115226],{"class":59,"line":32926},[57,115222,115223],{"class":140},"        obs, reward, terminated, truncated, info ",[57,115225,156],{"class":136},[57,115227,113612],{"class":140},[57,115229,115230,115232,115234],{"class":59,"line":32932},[57,115231,110494],{"class":140},[57,115233,9750],{"class":136},[57,115235,110499],{"class":140},[57,115237,115238,115240,115242,115244,115246,115249,115251,115253,115256,115258,115260,115263,115265,115267,115270,115272,115274,115276],{"class":59,"line":32938},[57,115239,32648],{"class":81},[57,115241,168],{"class":140},[57,115243,110528],{"class":74},[57,115245,110531],{"class":140},[57,115247,115248],{"class":74},"\"reward:\"",[57,115250,12708],{"class":140},[57,115252,32215],{"class":81},[57,115254,115255],{"class":140},"(reward, ",[57,115257,270],{"class":81},[57,115259,110542],{"class":140},[57,115261,115262],{"class":74},"\"distance:\"",[57,115264,12708],{"class":140},[57,115266,32215],{"class":81},[57,115268,115269],{"class":140},"(info[",[57,115271,115099],{"class":74},[57,115273,112399],{"class":140},[57,115275,270],{"class":81},[57,115277,259],{"class":140},[57,115279,115280,115282,115285,115288],{"class":59,"line":32944},[57,115281,2770],{"class":136},[57,115283,115284],{"class":140}," terminated ",[57,115286,115287],{"class":136},"or",[57,115289,115290],{"class":140}," truncated:\n",[57,115292,115293],{"class":59,"line":32950},[57,115294,115295],{"class":136},"            break\n",[57,115297,115298],{"class":59,"line":32970},[57,115299,2673],{"emptyLinePlaceholder":350},[57,115301,115302,115304,115306,115308,115310,115312,115314,115316],{"class":59,"line":32976},[57,115303,31496],{"class":81},[57,115305,168],{"class":140},[57,115307,110573],{"class":74},[57,115309,12708],{"class":140},[57,115311,32215],{"class":81},[57,115313,110580],{"class":140},[57,115315,270],{"class":81},[57,115317,259],{"class":140},[57,115319,115320],{"class":59,"line":32992},[57,115321,2673],{"emptyLinePlaceholder":350},[57,115323,115324],{"class":59,"line":32998},[57,115325,2673],{"emptyLinePlaceholder":350},[57,115327,115328,115330,115332,115334,115336],{"class":59,"line":33012},[57,115329,1813],{"class":136},[57,115331,31417],{"class":81},[57,115333,101756],{"class":136},[57,115335,101759],{"class":74},[57,115337,4012],{"class":140},[57,115339,115340],{"class":59,"line":33018},[57,115341,101766],{"class":140},[14,115343,103767],{},[49,115345,115347],{"className":51,"code":115346,"language":53,"meta":46,"style":46},"touch ch8_gym_env.py\n",[28,115348,115349],{"__ignoreMap":46},[57,115350,115351,115353],{"class":59,"line":60},[57,115352,101480],{"class":70},[57,115354,115355],{"class":74}," ch8_gym_env.py\n",[14,115357,110641],{},[49,115359,115361],{"className":51,"code":115360,"language":53,"meta":46,"style":46},"python ch8_gym_env.py\n",[28,115362,115363],{"__ignoreMap":46},[57,115364,115365,115367],{"class":59,"line":60},[57,115366,124],{"class":70},[57,115368,115355],{"class":74},[394,115370,101769],{"id":101769},[14,115372,115373],{},"继承 Gymnasium 环境：",[49,115375,115377],{"className":122,"code":115376,"language":124,"meta":46,"style":46},"class ReacherEnv(gym.Env):\n",[28,115378,115379],{"__ignoreMap":46},[57,115380,115381,115383,115385,115387,115389,115391,115393],{"class":59,"line":60},[57,115382,14966],{"class":136},[57,115384,114254],{"class":70},[57,115386,168],{"class":140},[57,115388,113737],{"class":70},[57,115390,974],{"class":140},[57,115392,114263],{"class":70},[57,115394,30983],{"class":140},[14,115396,115397],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,115399,115400],{},"初始化模型：",[49,115402,115404],{"className":122,"code":115403,"language":124,"meta":46,"style":46},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[28,115405,115406,115420],{"__ignoreMap":46},[57,115407,115408,115410,115412,115414,115416,115418],{"class":59,"line":60},[57,115409,31020],{"class":81},[57,115411,114314],{"class":140},[57,115413,156],{"class":136},[57,115415,101609],{"class":140},[57,115417,101511],{"class":81},[57,115419,238],{"class":140},[57,115421,115422,115424,115426,115428,115430,115432],{"class":59,"line":67},[57,115423,31020],{"class":81},[57,115425,114329],{"class":140},[57,115427,156],{"class":136},[57,115429,114334],{"class":140},[57,115431,31020],{"class":81},[57,115433,114339],{"class":140},[14,115435,115436,115437,115439],{},"这和前面章节一样，只是现在放到了类的 ",[28,115438,31026],{}," 里。",[14,115441,115442],{},"缓存 site ID：",[49,115444,115446],{"className":122,"code":115445,"language":124,"meta":46,"style":46},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[28,115447,115448,115462],{"__ignoreMap":46},[57,115449,115450,115452,115454,115456,115458,115460],{"class":59,"line":60},[57,115451,31020],{"class":81},[57,115453,114350],{"class":140},[57,115455,156],{"class":136},[57,115457,114355],{"class":140},[57,115459,89751],{"class":81},[57,115461,238],{"class":140},[57,115463,115464,115466,115468,115470,115472,115474],{"class":59,"line":67},[57,115465,31020],{"class":81},[57,115467,114371],{"class":140},[57,115469,156],{"class":136},[57,115471,114355],{"class":140},[57,115473,89751],{"class":81},[57,115475,238],{"class":140},[14,115477,115478],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,115480,115481],{},"reset：",[49,115483,115485],{"className":122,"code":115484,"language":124,"meta":46,"style":46},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[28,115486,115487],{"__ignoreMap":46},[57,115488,115489,115491,115493,115495,115497,115499,115501,115503,115505,115507,115509,115511,115513,115515,115517,115519,115521],{"class":59,"line":60},[57,115490,32144],{"class":136},[57,115492,114719],{"class":70},[57,115494,114722],{"class":140},[57,115496,871],{"class":136},[57,115498,114727],{"class":140},[57,115500,429],{"class":81},[57,115502,25378],{"class":136},[57,115504,39130],{"class":81},[57,115506,13837],{"class":136},[57,115508,39130],{"class":81},[57,115510,114740],{"class":140},[57,115512,114743],{"class":81},[57,115514,25378],{"class":136},[57,115516,39130],{"class":81},[57,115518,13837],{"class":136},[57,115520,39130],{"class":81},[57,115522,30983],{"class":140},[14,115524,115525,115527],{},[28,115526,70253],{}," 做四件事：",[377,115529,115530,115533,115536,115539],{},[380,115531,115532],{},"设置随机种子。",[380,115534,115535],{},"重置 MuJoCo data。",[380,115537,115538],{},"随机初始化关节角。",[380,115540,115541],{},"返回初始观测和 info。",[14,115543,115544],{},"step：",[49,115546,115548],{"className":122,"code":115547,"language":124,"meta":46,"style":46},"def step(self, action):\n",[28,115549,115550],{"__ignoreMap":46},[57,115551,115552,115554,115556],{"class":59,"line":60},[57,115553,32144],{"class":136},[57,115555,114884],{"class":70},[57,115557,114887],{"class":140},[14,115559,115560,115562],{},[28,115561,107331],{}," 做六件事：",[377,115564,115565,115568,115574,115577,115580,115583],{},[380,115566,115567],{},"检查并裁剪 action。",[380,115569,115570,115571,28654],{},"写入 ",[28,115572,115573],{},"self.data.ctrl",[380,115575,115576],{},"连续推进若干个 MuJoCo 物理步。",[380,115578,115579],{},"计算新观测。",[380,115581,115582],{},"计算奖励和结束条件。",[380,115584,115585],{},"返回 Gymnasium 标准五元组。",[394,115587,101905],{"id":101905},[49,115589,115591],{"className":122,"code":115590,"language":124,"meta":46,"style":46},"import gymnasium as gym\n",[28,115592,115593],{"__ignoreMap":46},[57,115594,115595,115597,115599,115601],{"class":59,"line":60},[57,115596,137],{"class":136},[57,115598,114092],{"class":140},[57,115600,31580],{"class":136},[57,115602,114097],{"class":140},[14,115604,115605,115606,115608,115609,115612],{},"导入 Gymnasium，并起别名 ",[28,115607,113737],{},"。后面写 ",[28,115610,115611],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[49,115614,115616],{"className":122,"code":115615,"language":124,"meta":46,"style":46},"from gymnasium import spaces\n",[28,115617,115618],{"__ignoreMap":46},[57,115619,115620,115622,115624,115626],{"class":59,"line":60},[57,115621,30934],{"class":136},[57,115623,114092],{"class":140},[57,115625,137],{"class":136},[57,115627,114124],{"class":140},[14,115629,115630,115631,115634],{},"导入空间定义工具。",[28,115632,115633],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[49,115636,115637],{"className":122,"code":115376,"language":124,"meta":46,"style":46},[28,115638,115639],{"__ignoreMap":46},[57,115640,115641,115643,115645,115647,115649,115651,115653],{"class":59,"line":60},[57,115642,14966],{"class":136},[57,115644,114254],{"class":70},[57,115646,168],{"class":140},[57,115648,113737],{"class":70},[57,115650,974],{"class":140},[57,115652,114263],{"class":70},[57,115654,30983],{"class":140},[14,115656,115657,115658,115661,115662,115664,115665,101215,115667,115669],{},"定义一个类，名字叫 ",[28,115659,115660],{},"ReacherEnv","。括号里的 ",[28,115663,115611],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[28,115666,70253],{},[28,115668,107331],{}," 这两个核心方法。",[49,115671,115673],{"className":122,"code":115672,"language":124,"meta":46,"style":46},"metadata = {\"render_modes\": []}\n",[28,115674,115675],{"__ignoreMap":46},[57,115676,115677,115680,115682,115684,115686],{"class":59,"line":60},[57,115678,115679],{"class":140},"metadata ",[57,115681,156],{"class":136},[57,115683,4721],{"class":140},[57,115685,114277],{"class":74},[57,115687,114280],{"class":140},[14,115689,115690],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[49,115692,115694],{"className":122,"code":115693,"language":124,"meta":46,"style":46},"def __init__(self) -> None:\n",[28,115695,115696],{"__ignoreMap":46},[57,115697,115698,115700,115702,115704,115706],{"class":59,"line":60},[57,115699,32144],{"class":136},[57,115701,31001],{"class":81},[57,115703,114293],{"class":140},[57,115705,95883],{"class":81},[57,115707,4012],{"class":140},[14,115709,115710,115712,115713,28654],{},[28,115711,31026],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[28,115714,115715],{},"env = ReacherEnv()",[49,115717,115719],{"className":122,"code":115718,"language":124,"meta":46,"style":46},"super().__init__()\n",[28,115720,115721],{"__ignoreMap":46},[57,115722,115723,115726,115728,115730],{"class":59,"line":60},[57,115724,115725],{"class":81},"super",[57,115727,17533],{"class":140},[57,115729,31026],{"class":81},[57,115731,2249],{"class":140},[14,115733,115734,115735,115737],{},"调用父类 ",[28,115736,115611],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[49,115739,115740],{"className":122,"code":115403,"language":124,"meta":46,"style":46},[28,115741,115742,115756],{"__ignoreMap":46},[57,115743,115744,115746,115748,115750,115752,115754],{"class":59,"line":60},[57,115745,31020],{"class":81},[57,115747,114314],{"class":140},[57,115749,156],{"class":136},[57,115751,101609],{"class":140},[57,115753,101511],{"class":81},[57,115755,238],{"class":140},[57,115757,115758,115760,115762,115764,115766,115768],{"class":59,"line":67},[57,115759,31020],{"class":81},[57,115761,114329],{"class":140},[57,115763,156],{"class":136},[57,115765,114334],{"class":140},[57,115767,31020],{"class":81},[57,115769,114339],{"class":140},[14,115771,115772,115773,115775,115776,101215,115779,115782],{},"把 MuJoCo 模型和状态保存到 ",[28,115774,31020],{}," 上。",[28,115777,115778],{},"self.model",[28,115780,115781],{},"self.data"," 表示这个环境对象自己的模型和状态。",[49,115784,115785],{"className":122,"code":115445,"language":124,"meta":46,"style":46},[28,115786,115787,115801],{"__ignoreMap":46},[57,115788,115789,115791,115793,115795,115797,115799],{"class":59,"line":60},[57,115790,31020],{"class":81},[57,115792,114350],{"class":140},[57,115794,156],{"class":136},[57,115796,114355],{"class":140},[57,115798,89751],{"class":81},[57,115800,238],{"class":140},[57,115802,115803,115805,115807,115809,115811,115813],{"class":59,"line":67},[57,115804,31020],{"class":81},[57,115806,114371],{"class":140},[57,115808,156],{"class":136},[57,115810,114355],{"class":140},[57,115812,89751],{"class":81},[57,115814,238],{"class":140},[14,115816,115817,115818,101215,115821,115824],{},"提前查好 tip 和 target 的 site ID。这样 ",[28,115819,115820],{},"_get_obs",[28,115822,115823],{},"_get_reward"," 里就不用每次按名字查找。",[49,115826,115828],{"className":122,"code":115827,"language":124,"meta":46,"style":46},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[28,115829,115830,115840,115850],{"__ignoreMap":46},[57,115831,115832,115834,115836,115838],{"class":59,"line":60},[57,115833,31020],{"class":81},[57,115835,114064],{"class":140},[57,115837,156],{"class":136},[57,115839,54624],{"class":81},[57,115841,115842,115844,115846,115848],{"class":59,"line":67},[57,115843,31020],{"class":81},[57,115845,114443],{"class":140},[57,115847,156],{"class":136},[57,115849,114448],{"class":81},[57,115851,115852,115854,115856,115858],{"class":59,"line":144},[57,115853,31020],{"class":81},[57,115855,113903],{"class":140},[57,115857,156],{"class":136},[57,115859,47530],{"class":81},[14,115861,115862,115865,115866,115869,115870,115873],{},[28,115863,115864],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[28,115867,115868],{},"max_steps"," 是一个 episode 最多运行多少步。",[28,115871,115872],{},"steps"," 记录当前 episode 已经走了多少步。",[49,115875,115876],{"className":122,"code":113942,"language":124,"meta":46,"style":46},[28,115877,115878],{"__ignoreMap":46},[57,115879,115880,115882,115884,115886,115888,115890,115892,115894,115896,115898,115900,115902,115904,115906,115908,115910,115912,115914,115916,115918],{"class":59,"line":60},[57,115881,31020],{"class":81},[57,115883,113951],{"class":140},[57,115885,156],{"class":136},[57,115887,113956],{"class":140},[57,115889,113959],{"class":5489},[57,115891,113962],{"class":136},[57,115893,102600],{"class":81},[57,115895,12708],{"class":140},[57,115897,113969],{"class":5489},[57,115899,156],{"class":136},[57,115901,102600],{"class":81},[57,115903,12708],{"class":140},[57,115905,96160],{"class":5489},[57,115907,156],{"class":136},[57,115909,168],{"class":140},[57,115911,498],{"class":81},[57,115913,113986],{"class":140},[57,115915,93697],{"class":5489},[57,115917,156],{"class":136},[57,115919,113993],{"class":140},[14,115921,115922,115923,115926,115927,101215,115930,115933],{},"定义动作空间。",[28,115924,115925],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[28,115928,115929],{},"low=-1.0",[28,115931,115932],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[49,115935,115936],{"className":122,"code":114003,"language":124,"meta":46,"style":46},[28,115937,115938],{"__ignoreMap":46},[57,115939,115940,115942,115944,115946,115948,115950,115952,115954,115956,115958,115960,115962,115964,115966,115968,115970,115972,115974],{"class":59,"line":60},[57,115941,31020],{"class":81},[57,115943,114012],{"class":140},[57,115945,156],{"class":136},[57,115947,113956],{"class":140},[57,115949,113959],{"class":5489},[57,115951,113962],{"class":136},[57,115953,114023],{"class":140},[57,115955,113969],{"class":5489},[57,115957,156],{"class":136},[57,115959,114023],{"class":140},[57,115961,96160],{"class":5489},[57,115963,156],{"class":136},[57,115965,168],{"class":140},[57,115967,862],{"class":81},[57,115969,113986],{"class":140},[57,115971,93697],{"class":5489},[57,115973,156],{"class":136},[57,115975,113993],{"class":140},[14,115977,115978,115979,115982,115983,115986],{},"定义观测空间。",[28,115980,115981],{},"shape=(10,)"," 表示观测是 10 个数。",[28,115984,115985],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[49,115988,115990],{"className":122,"code":115989,"language":124,"meta":46,"style":46},"def _get_obs(self) -> np.ndarray:\n",[28,115991,115992],{"__ignoreMap":46},[57,115993,115994,115996,115998],{"class":59,"line":60},[57,115995,32144],{"class":136},[57,115997,114553],{"class":70},[57,115999,114556],{"class":140},[14,116001,116002,116003,116005],{},"定义内部函数，用来生成观测。函数名前面的 ",[28,116004,1407],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[49,116007,116009],{"className":122,"code":116008,"language":124,"meta":46,"style":46},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[28,116010,116011,116025],{"__ignoreMap":46},[57,116012,116013,116015,116017,116019,116021,116023],{"class":59,"line":60},[57,116014,111765],{"class":140},[57,116016,156],{"class":136},[57,116018,39070],{"class":81},[57,116020,114567],{"class":140},[57,116022,31020],{"class":81},[57,116024,114572],{"class":140},[57,116026,116027,116029,116031,116033,116035,116037],{"class":59,"line":67},[57,116028,111775],{"class":140},[57,116030,156],{"class":136},[57,116032,39070],{"class":81},[57,116034,114567],{"class":140},[57,116036,31020],{"class":81},[57,116038,114587],{"class":140},[14,116040,116041],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[49,116043,116045],{"className":122,"code":116044,"language":124,"meta":46,"style":46},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[28,116046,116047,116063],{"__ignoreMap":46},[57,116048,116049,116051,116053,116055,116057,116059,116061],{"class":59,"line":60},[57,116050,111051],{"class":140},[57,116052,156],{"class":136},[57,116054,114596],{"class":140},[57,116056,31020],{"class":81},[57,116058,114601],{"class":140},[57,116060,31020],{"class":81},[57,116062,114606],{"class":140},[57,116064,116065,116067],{"class":59,"line":67},[57,116066,17318],{"class":136},[57,116068,114613],{"class":140},[14,116070,116071,116072,116075,116076,116078],{},"拼接观测，并转换成 ",[28,116073,116074],{},"float32","。很多强化学习库默认使用 ",[28,116077,116074],{},"，所以这里主动转换。",[49,116080,116081],{"className":122,"code":115484,"language":124,"meta":46,"style":46},[28,116082,116083],{"__ignoreMap":46},[57,116084,116085,116087,116089,116091,116093,116095,116097,116099,116101,116103,116105,116107,116109,116111,116113,116115,116117],{"class":59,"line":60},[57,116086,32144],{"class":136},[57,116088,114719],{"class":70},[57,116090,114722],{"class":140},[57,116092,871],{"class":136},[57,116094,114727],{"class":140},[57,116096,429],{"class":81},[57,116098,25378],{"class":136},[57,116100,39130],{"class":81},[57,116102,13837],{"class":136},[57,116104,39130],{"class":81},[57,116106,114740],{"class":140},[57,116108,114743],{"class":81},[57,116110,25378],{"class":136},[57,116112,39130],{"class":81},[57,116114,13837],{"class":136},[57,116116,39130],{"class":81},[57,116118,30983],{"class":140},[14,116120,116121,116122,116124,116125,116128],{},"定义 reset。",[28,116123,114763],{}," 用来控制随机数，保证实验可以复现。",[28,116126,116127],{},"options"," 用来接收额外配置，本章暂时不用。",[49,116130,116132],{"className":122,"code":116131,"language":124,"meta":46,"style":46},"super().reset(seed=seed)\n",[28,116133,116134],{"__ignoreMap":46},[57,116135,116136,116138,116140,116142,116144],{"class":59,"line":60},[57,116137,115725],{"class":81},[57,116139,114760],{"class":140},[57,116141,114763],{"class":5489},[57,116143,156],{"class":136},[57,116145,114768],{"class":140},[14,116147,116148,116149,116152],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[28,116150,116151],{},"self.np_random"," 生成可复现的随机数。",[49,116154,116156],{"className":122,"code":116155,"language":124,"meta":46,"style":46},"mujoco.mj_resetData(self.model, self.data)\n",[28,116157,116158],{"__ignoreMap":46},[57,116159,116160,116163,116165,116167,116169],{"class":59,"line":60},[57,116161,116162],{"class":140},"mujoco.mj_resetData(",[57,116164,31020],{"class":81},[57,116166,114778],{"class":140},[57,116168,31020],{"class":81},[57,116170,114783],{"class":140},[14,116172,116173],{},"把 MuJoCo 状态重置到默认状态。",[49,116175,116177],{"className":122,"code":116176,"language":124,"meta":46,"style":46},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[28,116178,116179],{"__ignoreMap":46},[57,116180,116181,116183,116185,116187,116189,116191,116193,116195,116197,116199,116201,116203,116205,116207,116209,116211,116213],{"class":59,"line":60},[57,116182,31020],{"class":81},[57,116184,114794],{"class":140},[57,116186,156],{"class":136},[57,116188,39070],{"class":81},[57,116190,114801],{"class":140},[57,116192,113959],{"class":5489},[57,116194,113962],{"class":136},[57,116196,86407],{"class":81},[57,116198,12708],{"class":140},[57,116200,113969],{"class":5489},[57,116202,156],{"class":136},[57,116204,86407],{"class":81},[57,116206,12708],{"class":140},[57,116208,31693],{"class":5489},[57,116210,156],{"class":136},[57,116212,31020],{"class":81},[57,116214,114826],{"class":140},[14,116216,115538,116217,116220,116221,116224,116225,116227],{},[28,116218,116219],{},"[:]"," 表示修改整个数组。",[28,116222,116223],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[28,116226,102347],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[49,116229,116231],{"className":122,"code":116230,"language":124,"meta":46,"style":46},"self.data.qvel[:] = 0.0\n",[28,116232,116233],{"__ignoreMap":46},[57,116234,116235,116237,116239,116241],{"class":59,"line":60},[57,116236,31020],{"class":81},[57,116238,114833],{"class":140},[57,116240,156],{"class":136},[57,116242,104958],{"class":81},[14,116244,116245],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[49,116247,116249],{"className":122,"code":116248,"language":124,"meta":46,"style":46},"self.steps = 0\nreturn self._get_obs(), {}\n",[28,116250,116251,116261],{"__ignoreMap":46},[57,116252,116253,116255,116257,116259],{"class":59,"line":60},[57,116254,31020],{"class":81},[57,116256,113903],{"class":140},[57,116258,156],{"class":136},[57,116260,47530],{"class":81},[57,116262,116263,116265,116267],{"class":59,"line":67},[57,116264,17318],{"class":136},[57,116266,39070],{"class":81},[57,116268,114873],{"class":140},[14,116270,116271],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[49,116273,116274],{"className":122,"code":115547,"language":124,"meta":46,"style":46},[28,116275,116276],{"__ignoreMap":46},[57,116277,116278,116280,116282],{"class":59,"line":60},[57,116279,32144],{"class":136},[57,116281,114884],{"class":70},[57,116283,114887],{"class":140},[14,116285,116286],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[49,116288,116290],{"className":122,"code":116289,"language":124,"meta":46,"style":46},"action = np.asarray(action, dtype=np.float32)\n",[28,116291,116292],{"__ignoreMap":46},[57,116293,116294,116296,116298,116300,116302,116304],{"class":59,"line":60},[57,116295,107639],{"class":140},[57,116297,156],{"class":136},[57,116299,114896],{"class":140},[57,116301,93697],{"class":5489},[57,116303,156],{"class":136},[57,116305,113993],{"class":140},[14,116307,116308,116309,28654],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[28,116310,116074],{},[49,116312,116314],{"className":122,"code":116313,"language":124,"meta":46,"style":46},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[28,116315,116316],{"__ignoreMap":46},[57,116317,116318,116320,116322,116324,116326,116328,116330],{"class":59,"line":60},[57,116319,107639],{"class":140},[57,116321,156],{"class":136},[57,116323,107644],{"class":140},[57,116325,31020],{"class":81},[57,116327,114915],{"class":140},[57,116329,31020],{"class":81},[57,116331,114920],{"class":140},[14,116333,116334],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[49,116336,116338],{"className":122,"code":116337,"language":124,"meta":46,"style":46},"self.data.ctrl[:] = action\n",[28,116339,116340],{"__ignoreMap":46},[57,116341,116342,116344,116346,116348],{"class":59,"line":60},[57,116343,31020],{"class":81},[57,116345,114931],{"class":140},[57,116347,156],{"class":136},[57,116349,107667],{"class":140},[14,116351,116352],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[49,116354,116356],{"className":122,"code":116355,"language":124,"meta":46,"style":46},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[28,116357,116358,116374],{"__ignoreMap":46},[57,116359,116360,116362,116364,116366,116368,116370,116372],{"class":59,"line":60},[57,116361,3298],{"class":136},[57,116363,101698],{"class":140},[57,116365,26312],{"class":136},[57,116367,32640],{"class":81},[57,116369,168],{"class":140},[57,116371,31020],{"class":81},[57,116373,114952],{"class":140},[57,116375,116376,116379,116381,116383,116385],{"class":59,"line":67},[57,116377,116378],{"class":140},"    mujoco.mj_step(",[57,116380,31020],{"class":81},[57,116382,114778],{"class":140},[57,116384,31020],{"class":81},[57,116386,114783],{"class":140},[14,116388,116389,116390,116393,116394,116396,116397,28654],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[28,116391,116392],{},"frame_skip=5","，所以外部调用一次 ",[28,116395,114074],{},"，内部实际执行 5 次 ",[28,116398,101412],{},[49,116400,116402],{"className":122,"code":116401,"language":124,"meta":46,"style":46},"self.steps += 1\n",[28,116403,116404],{"__ignoreMap":46},[57,116405,116406,116408,116410,116412],{"class":59,"line":60},[57,116407,31020],{"class":81},[57,116409,113903],{"class":140},[57,116411,9750],{"class":136},[57,116413,55896],{"class":81},[14,116415,116416],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[49,116418,116420],{"className":122,"code":116419,"language":124,"meta":46,"style":46},"obs = self._get_obs()\nreward = self._get_reward()\n",[28,116421,116422,116432],{"__ignoreMap":46},[57,116423,116424,116426,116428,116430],{"class":59,"line":60},[57,116425,111051],{"class":140},[57,116427,156],{"class":136},[57,116429,39070],{"class":81},[57,116431,114994],{"class":140},[57,116433,116434,116436,116438,116440],{"class":59,"line":67},[57,116435,111202],{"class":140},[57,116437,156],{"class":136},[57,116439,39070],{"class":81},[57,116441,115005],{"class":140},[14,116443,116444],{},"计算新的观测和奖励。",[49,116446,116448],{"className":122,"code":116447,"language":124,"meta":46,"style":46},"dist = float(np.linalg.norm(tip - target))\n",[28,116449,116450],{"__ignoreMap":46},[57,116451,116452,116454,116456,116458,116460,116462],{"class":59,"line":60},[57,116453,111793],{"class":140},[57,116455,156],{"class":136},[57,116457,109994],{"class":81},[57,116459,115048],{"class":140},[57,116461,948],{"class":136},[57,116463,115053],{"class":140},[14,116465,116466],{},"计算末端到目标的距离，并转换成 Python float。",[49,116468,116469],{"className":122,"code":113874,"language":124,"meta":46,"style":46},[28,116470,116471,116483],{"__ignoreMap":46},[57,116472,116473,116475,116477,116479,116481],{"class":59,"line":60},[57,116474,113881],{"class":140},[57,116476,156],{"class":136},[57,116478,113886],{"class":140},[57,116480,1326],{"class":136},[57,116482,113891],{"class":81},[57,116484,116485,116487,116489,116491,116493,116495,116497],{"class":59,"line":67},[57,116486,113896],{"class":140},[57,116488,156],{"class":136},[57,116490,39070],{"class":81},[57,116492,113903],{"class":140},[57,116494,1984],{"class":136},[57,116496,39070],{"class":81},[57,116498,113910],{"class":140},[14,116500,116501],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[49,116503,116505],{"className":122,"code":116504,"language":124,"meta":46,"style":46},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[28,116506,116507,116520],{"__ignoreMap":46},[57,116508,116509,116512,116514,116516,116518],{"class":59,"line":60},[57,116510,116511],{"class":140},"info ",[57,116513,156],{"class":136},[57,116515,4721],{"class":140},[57,116517,115099],{"class":74},[57,116519,115102],{"class":140},[57,116521,116522,116524],{"class":59,"line":67},[57,116523,17318],{"class":136},[57,116525,115109],{"class":140},[14,116527,116528,116531],{},[28,116529,116530],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[49,116533,116535],{"className":122,"code":116534,"language":124,"meta":46,"style":46},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[28,116536,116537,116546],{"__ignoreMap":46},[57,116538,116539,116542,116544],{"class":59,"line":60},[57,116540,116541],{"class":140},"env ",[57,116543,156],{"class":136},[57,116545,115139],{"class":140},[57,116547,116548,116550,116552,116554,116556,116558,116560],{"class":59,"line":67},[57,116549,113597],{"class":140},[57,116551,156],{"class":136},[57,116553,115149],{"class":140},[57,116555,114763],{"class":5489},[57,116557,156],{"class":136},[57,116559,226],{"class":81},[57,116561,238],{"class":140},[14,116563,116564,116565,116568],{},"创建环境并重置。",[28,116566,116567],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[49,116570,116572],{"className":122,"code":116571,"language":124,"meta":46,"style":46},"action = env.action_space.sample()\n",[28,116573,116574],{"__ignoreMap":46},[57,116575,116576,116578,116580],{"class":59,"line":60},[57,116577,107639],{"class":140},[57,116579,156],{"class":136},[57,116581,115218],{"class":140},[14,116583,116584],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[365,116586,102513],{"id":102512},[14,116588,105681],{},[49,116590,116593],{"className":116591,"code":116592,"language":5460,"meta":46},[5458],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[28,116594,116592],{"__ignoreMap":46},[14,116596,116597],{},"这个环境已经具备强化学习环境的基本结构。",[14,116599,116600],{},"主函数里使用随机动作：",[49,116602,116603],{"className":122,"code":116571,"language":124,"meta":46,"style":46},[28,116604,116605],{"__ignoreMap":46},[57,116606,116607,116609,116611],{"class":59,"line":60},[57,116608,107639],{"class":140},[57,116610,156],{"class":136},[57,116612,115218],{"class":140},[14,116614,116615],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[365,116617,102545],{"id":102544},[377,116619,116620,116623,116629,116638,116647,116656,116662],{},[380,116621,116622],{},"运行程序。",[380,116624,116625,116626,28654],{},"确认 ",[28,116627,116628],{},"obs.shape == (10,)",[380,116630,111378,116631,116634,116635,28654],{},[28,116632,116633],{},"env.action_space","，应类似 ",[28,116636,116637],{},"Box(-1.0, 1.0, (2,), float32)",[380,116639,105782,116640,116643,116644,28654],{},[28,116641,116642],{},"self.max_steps = 10","，确认环境会更快 ",[28,116645,116646],{},"truncated=True",[380,116648,102608,116649,102611,116652,116655],{},[28,116650,116651],{},"terminated = dist \u003C 0.05",[28,116653,116654],{},"dist \u003C 0.2","，观察是否更容易结束。",[380,116657,102608,116658,116661],{},[28,116659,116660],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[380,116663,116664,116665,116667,116668,116671],{},"在 ",[28,116666,116530],{}," 里加入 ",[28,116669,116670],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[365,116673,102650],{"id":102649},[394,116675,116677],{"id":116676},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,116679,116680,116681,116683],{},"Gymnasium 的 ",[28,116682,107331],{}," 返回 5 个值:",[49,116685,116687],{"className":122,"code":116686,"language":124,"meta":46,"style":46},"obs, reward, terminated, truncated, info\n",[28,116688,116689],{"__ignoreMap":46},[57,116690,116691],{"class":59,"line":60},[57,116692,116686],{"class":140},[14,116694,116695],{},"不是旧 Gym 的 4 个值。",[394,116697,116699,116702],{"id":116698},"datactrl-action-维度错误",[28,116700,116701],{},"data.ctrl[:] = action"," 维度错误",[14,116704,102720],{},[49,116706,116708],{"className":122,"code":116707,"language":124,"meta":46,"style":46},"print(self.model.nu)\nprint(action.shape)\n",[28,116709,116710,116721],{"__ignoreMap":46},[57,116711,116712,116714,116716,116718],{"class":59,"line":60},[57,116713,165],{"class":81},[57,116715,168],{"class":140},[57,116717,31020],{"class":81},[57,116719,116720],{"class":140},".model.nu)\n",[57,116722,116723,116725],{"class":59,"line":67},[57,116724,165],{"class":81},[57,116726,116727],{"class":140},"(action.shape)\n",[14,116729,116730],{},"两者必须匹配。",[394,116732,116734],{"id":116733},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,116736,102659],{},[49,116738,116740],{"className":122,"code":116739,"language":124,"meta":46,"style":46},"mujoco.mj_forward(self.model, self.data)\n",[28,116741,116742],{"__ignoreMap":46},[57,116743,116744,116747,116749,116751,116753],{"class":59,"line":60},[57,116745,116746],{"class":140},"mujoco.mj_forward(",[57,116748,31020],{"class":81},[57,116750,114778],{"class":140},[57,116752,31020],{"class":81},[57,116754,114783],{"class":140},[394,116756,116758,116760],{"id":116757},"observation_space-维度和-obs-不一致",[28,116759,113797],{}," 维度和 obs 不一致",[14,116762,102772],{},[49,116764,116766],{"className":122,"code":116765,"language":124,"meta":46,"style":46},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[28,116767,116768,116778,116785],{"__ignoreMap":46},[57,116769,116770,116772,116774,116776],{"class":59,"line":60},[57,116771,111051],{"class":140},[57,116773,156],{"class":136},[57,116775,39070],{"class":81},[57,116777,114994],{"class":140},[57,116779,116780,116782],{"class":59,"line":67},[57,116781,165],{"class":81},[57,116783,116784],{"class":140},"(obs.shape)\n",[57,116786,116787,116789,116791,116793],{"class":59,"line":144},[57,116788,165],{"class":81},[57,116790,168],{"class":140},[57,116792,31020],{"class":81},[57,116794,116795],{"class":140},".observation_space.shape)\n",[14,116797,116798],{},"两者必须一致。本章观测是：",[49,116800,116803],{"className":116801,"code":116802,"language":5460,"meta":46},[5458],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[28,116804,116802],{"__ignoreMap":46},[394,116806,116808],{"id":116807},"action-超过范围","action 超过范围",[14,116810,116811],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[49,116813,116814],{"className":122,"code":116313,"language":124,"meta":46,"style":46},[28,116815,116816],{"__ignoreMap":46},[57,116817,116818,116820,116822,116824,116826,116828,116830],{"class":59,"line":60},[57,116819,107639],{"class":140},[57,116821,156],{"class":136},[57,116823,107644],{"class":140},[57,116825,31020],{"class":81},[57,116827,114915],{"class":140},[57,116829,31020],{"class":81},[57,116831,114920],{"class":140},[14,116833,116834,116835,28654],{},"这能避免无效动作直接写入 ",[28,116836,101273],{},[394,116838,116840],{"id":116839},"忘记返回-info","忘记返回 info",[14,116842,116680,116843,101215,116845,116847],{},[28,116844,70253],{},[28,116846,107331],{}," 都会返回 info：",[49,116849,116850],{"className":122,"code":113590,"language":124,"meta":46,"style":46},[28,116851,116852,116860],{"__ignoreMap":46},[57,116853,116854,116856,116858],{"class":59,"line":60},[57,116855,113597],{"class":140},[57,116857,156],{"class":136},[57,116859,113602],{"class":140},[57,116861,116862,116864,116866],{"class":59,"line":67},[57,116863,113607],{"class":140},[57,116865,156],{"class":136},[57,116867,113612],{"class":140},[14,116869,116870,116871,28654],{},"即使暂时没有额外信息，也返回 ",[28,116872,32656],{},[365,116874,116876],{"id":116875},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,116878,116879],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[377,116881,116882,116885,116888,116891,116894,116897],{},[380,116883,116884],{},"更稳定的 reward。",[380,116886,116887],{},"合理的 episode 长度。",[380,116889,116890],{},"可重复的随机目标采样。",[380,116892,116893],{},"render 接口。",[380,116895,116896],{},"环境注册代码。",[380,116898,116899],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,116901,116902],{},"如果只是自己写训练循环，最小形式是：",[49,116904,116906],{"className":122,"code":116905,"language":124,"meta":46,"style":46},"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",[28,116907,116908,116916,116932,116936,116952,116961,116970,116980],{"__ignoreMap":46},[57,116909,116910,116912,116914],{"class":59,"line":60},[57,116911,116541],{"class":140},[57,116913,156],{"class":136},[57,116915,115139],{"class":140},[57,116917,116918,116920,116922,116924,116926,116928,116930],{"class":59,"line":67},[57,116919,113597],{"class":140},[57,116921,156],{"class":136},[57,116923,115149],{"class":140},[57,116925,114763],{"class":5489},[57,116927,156],{"class":136},[57,116929,226],{"class":81},[57,116931,238],{"class":140},[57,116933,116934],{"class":59,"line":144},[57,116935,2673],{"emptyLinePlaceholder":350},[57,116937,116938,116940,116942,116944,116946,116948,116950],{"class":59,"line":150},[57,116939,3298],{"class":136},[57,116941,101698],{"class":140},[57,116943,26312],{"class":136},[57,116945,32640],{"class":81},[57,116947,168],{"class":140},[57,116949,6683],{"class":81},[57,116951,30983],{"class":140},[57,116953,116954,116957,116959],{"class":59,"line":162},[57,116955,116956],{"class":140},"    action ",[57,116958,156],{"class":136},[57,116960,115218],{"class":140},[57,116962,116963,116966,116968],{"class":59,"line":180},[57,116964,116965],{"class":140},"    obs, reward, terminated, truncated, info ",[57,116967,156],{"class":136},[57,116969,113612],{"class":140},[57,116971,116972,116974,116976,116978],{"class":59,"line":186},[57,116973,3374],{"class":136},[57,116975,115284],{"class":140},[57,116977,115287],{"class":136},[57,116979,115290],{"class":140},[57,116981,116982,116985,116987],{"class":59,"line":197},[57,116983,116984],{"class":140},"        obs, info ",[57,116986,156],{"class":136},[57,116988,113602],{"class":140},[365,116990,116992],{"id":116991},"_9本章小结","9.本章小结",[14,116994,116995],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[49,116997,117000],{"className":116998,"code":116999,"language":5460,"meta":46},[5458],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[28,117001,116999],{"__ignoreMap":46},[14,117003,117004],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[342,117006,117007],{},"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":46,"searchDepth":67,"depth":67,"links":117009},[117010,117011,117012,117019,117023,117024,117025,117035,117036],{"id":100843,"depth":67,"text":100844},{"id":100966,"depth":67,"text":100967},{"id":101241,"depth":67,"text":101242,"children":117013},[117014,117016,117018],{"id":113821,"depth":144,"text":117015},"terminated 和 truncated 的区别",{"id":113924,"depth":144,"text":117017},"observation_space 和 action_space",{"id":114051,"depth":144,"text":114052},{"id":101449,"depth":67,"text":101450,"children":117020},[117021,117022],{"id":101769,"depth":144,"text":101769},{"id":101905,"depth":144,"text":101905},{"id":102512,"depth":67,"text":102513},{"id":102544,"depth":67,"text":102545},{"id":102649,"depth":67,"text":102650,"children":117026},[117027,117028,117030,117031,117033,117034],{"id":116676,"depth":144,"text":116677},{"id":116698,"depth":144,"text":117029},"data.ctrl[:] = action 维度错误",{"id":116733,"depth":144,"text":116734},{"id":116757,"depth":144,"text":117032},"observation_space 维度和 obs 不一致",{"id":116807,"depth":144,"text":116808},{"id":116839,"depth":144,"text":116840},{"id":116875,"depth":67,"text":116876},{"id":116991,"depth":67,"text":116992},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113574,"description":46},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117043,"title":117044,"body":117045,"description":117468,"extension":348,"meta":117469,"navigation":350,"path":117470,"seo":117471,"stem":117472,"__hash__":117473},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117046,"toc":117458},[117047,117051,117054,117057,117077,117083,117089,117099,117102,117105,117125,117128,117132,117135,117141,117144,117158,117161,117164,117238,117241,117247,117250,117273,117276,117326,117329,117335,117338,117341,117344,117363,117366,117372,117375,117378,117381,117401,117404,117407,117410,117455],[10,117048,117050],{"id":117049},"mujoco-学习","MuJoCo 学习",[14,117052,117053],{},"初版",[14,117055,117056],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[377,117058,117059,117062,117065,117074],{},[380,117060,117061],{},"MuJoCo 模型文件在描述什么。",[380,117063,117064],{},"Python 代码怎样读取和推进仿真。",[380,117066,117067,630,117069,630,117071,117073],{},[28,117068,104227],{},[28,117070,104557],{},[28,117072,104560],{}," 这些数组为什么重要。",[380,117075,117076],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,117078,117079,117080,117082],{},"默认环境为 Fedora 44、Python >= 3.10、",[28,117081,101224],{}," 官方 Python bindings。",[14,117084,117085,117086,117088],{},"注意：本文禁止使用 ",[28,117087,101209],{},"。所有示例均使用：",[49,117090,117091],{"className":122,"code":101775,"language":124,"meta":46,"style":46},[28,117092,117093],{"__ignoreMap":46},[57,117094,117095,117097],{"class":59,"line":60},[57,117096,137],{"class":136},[57,117098,101498],{"class":140},[365,117100,117101],{"id":117101},"适合谁阅读",[14,117103,117104],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[377,117106,117107,117110,117113,117116],{},[380,117108,117109],{},"没学过 MuJoCo，只会一点 Python。",[380,117111,117112],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[380,117114,117115],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[380,117117,117118,117119,117121,117122,117124],{},"以前接触过 ",[28,117120,101209],{},"，现在想迁移到官方 ",[28,117123,101218],{}," Python bindings。",[14,117126,117127],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[365,117129,117131],{"id":117130},"mujoco-到底是什么","MuJoCo 到底是什么",[14,117133,117134],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[49,117136,117139],{"className":117137,"code":117138,"language":5460,"meta":46},[5458],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[28,117140,117138],{"__ignoreMap":46},[14,117142,117143],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[377,117145,117146,117149,117152,117155],{},[380,117147,117148],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[380,117150,117151],{},"快速测试控制算法，不必一开始就上真实机器人。",[380,117153,117154],{},"生成强化学习环境。",[380,117156,117157],{},"采集状态、动作、图像、奖励等训练数据。",[365,117159,117160],{"id":117160},"学习前的心智模型",[14,117162,117163],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[557,117165,117166,117178],{},[560,117167,117168],{},[563,117169,117170,117173,117176],{},[566,117171,117172],{"align":24008},"部分",[566,117174,117175],{"align":24008},"负责什么",[566,117177,21459],{"align":24008},[603,117179,117180,117191,117203,117215,117227],{},[563,117181,117182,117185,117188],{},[608,117183,117184],{"align":24008},"MJCF XML",[608,117186,117187],{"align":24008},"定义世界和机器人结构",[608,117189,117190],{"align":24008},"地面、盒子、关节、电机、摄像头",[563,117192,117193,117197,117200],{},[608,117194,117195],{"align":24008},[28,117196,100906],{},[608,117198,117199],{"align":24008},"编译后的静态模型",[608,117201,117202],{"align":24008},"有几个关节、有几个电机、时间步长是多少",[563,117204,117205,117209,117212],{},[608,117206,117207],{"align":24008},[28,117208,100916],{},[608,117210,117211],{"align":24008},"运行中的动态状态",[608,117213,117214],{"align":24008},"当前时间、位置、速度、电机输入",[563,117216,117217,117221,117224],{},[608,117218,117219],{"align":24008},[28,117220,101412],{},[608,117222,117223],{"align":24008},"推进一步物理仿真",[608,117225,117226],{"align":24008},"根据重力、力、碰撞更新状态",[563,117228,117229,117232,117235],{},[608,117230,117231],{"align":24008},"Viewer \u002F Renderer",[608,117233,117234],{"align":24008},"把仿真显示出来",[608,117236,117237],{"align":24008},"打开窗口或保存图片",[14,117239,117240],{},"一句话总结：",[49,117242,117245],{"className":117243,"code":117244,"language":5460,"meta":46},[5458],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[28,117246,117244],{"__ignoreMap":46},[14,117248,117249],{},"参考来源：",[1422,117251,117252,117259,117266],{},[380,117253,117254,117255],{},"MuJoCo Python 官方文档：",[18,117256,117257],{"href":117257,"rel":117258},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[22],[380,117260,117261,117262],{},"MuJoCo XML Reference：",[18,117263,117264],{"href":117264,"rel":117265},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[22],[380,117267,117268,117269],{},"MuJoCo Overview：",[18,117270,117271],{"href":117271,"rel":117272},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[22],[365,117274,117275],{"id":117275},"章节目录",[377,117277,117278,117284,117290,117296,117302,117308,117314,117320],{},[380,117279,117280],{},[18,117281,117283],{"href":117282},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[380,117285,117286],{},[18,117287,117289],{"href":117288},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[380,117291,117292],{},[18,117293,117295],{"href":117294},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[380,117297,117298],{},[18,117299,117301],{"href":117300},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[380,117303,117304],{},[18,117305,117307],{"href":117306},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[380,117309,117310],{},[18,117311,117313],{"href":117312},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[380,117315,117316],{},[18,117317,117319],{"href":117318},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[380,117321,117322],{},[18,117323,117325],{"href":117324},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[365,117327,117328],{"id":117328},"推荐学习路线",[49,117330,117333],{"className":117331,"code":117332,"language":5460,"meta":46},[5458],"环境安装\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",[28,117334,117332],{"__ignoreMap":46},[14,117336,117337],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[365,117339,117340],{"id":117340},"建议的目录结构",[14,117342,117343],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[49,117345,117347],{"className":51,"code":117346,"language":53,"meta":46,"style":46},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[28,117348,117349,117357],{"__ignoreMap":46},[57,117350,117351,117353,117355],{"class":59,"line":60},[57,117352,101463],{"class":70},[57,117354,29485],{"class":81},[57,117356,101468],{"class":74},[57,117358,117359,117361],{"class":59,"line":67},[57,117360,101473],{"class":81},[57,117362,101468],{"class":74},[14,117364,117365],{},"每一章的代码都单独保存：",[49,117367,117370],{"className":117368,"code":117369,"language":5460,"meta":46},[5458],"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",[28,117371,117369],{"__ignoreMap":46},[14,117373,117374],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[365,117376,117377],{"id":117377},"学习方法",[14,117379,117380],{},"每章建议按这个顺序操作：",[377,117382,117383,117386,117389,117392,117395,117398],{},[380,117384,117385],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[380,117387,117388],{},"复制最小可运行代码，保存成指定文件。",[380,117390,117391],{},"运行代码，确认没有报错。",[380,117393,117394],{},"对照“运行结果说明”理解输出。",[380,117396,117397],{},"做“验证步骤”，主动改一两个参数。",[380,117399,117400],{},"遇到报错先看“常见错误与解决方案”。",[14,117402,117403],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[365,117405,117406],{"id":117406},"全局排错顺序",[14,117408,117409],{},"遇到问题时，按下面顺序查：",[377,117411,117412,117418,117424,117429,117432,117435,117442,117452],{},[380,117413,117414,117415],{},"Python 环境是否激活：",[28,117416,117417],{},"which python",[380,117419,117420,117421],{},"MuJoCo 是否能导入：",[28,117422,117423],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[380,117425,117426,117427],{},"是否误装了 ",[28,117428,101209],{},[380,117430,117431],{},"XML 标签是否闭合、属性是否拼写正确",[380,117433,117434],{},"actuator 引用的 joint 名字是否存在",[380,117436,117437,117439,117440],{},[28,117438,101273],{}," 的长度是否等于 ",[28,117441,102355],{},[380,117443,105782,117444,82736,117446,117448,117449],{},[28,117445,104227],{},[28,117447,104557],{}," 后是否调用了 ",[28,117450,117451],{},"mujoco.mj_forward",[380,117453,117454],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[342,117456,117457],{},"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":46,"searchDepth":67,"depth":67,"links":117459},[117460,117461,117462,117463,117464,117465,117466,117467],{"id":117101,"depth":67,"text":117101},{"id":117130,"depth":67,"text":117131},{"id":117160,"depth":67,"text":117160},{"id":117275,"depth":67,"text":117275},{"id":117328,"depth":67,"text":117328},{"id":117340,"depth":67,"text":117340},{"id":117377,"depth":67,"text":117377},{"id":117406,"depth":67,"text":117406},"仿真搭建。",{"category":23650},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117044,"description":117468},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117475,"title":117476,"body":117477,"description":347,"extension":348,"meta":117932,"navigation":350,"path":117933,"seo":117934,"stem":117935,"__hash__":117936},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117478,"toc":117930},[117479,117482,117485,117491,117927],[10,117480,117476],{"id":117481},"_1-最常用的基本操作更新",[14,117483,117484],{},"装linux系统教程：",[14,117486,117487],{},[18,117488,117489],{"href":117489,"rel":117490},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[22],[49,117492,117496],{"className":117493,"code":117494,"language":117495,"meta":46,"style":46},"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",[28,117497,117498,117503,117508,117517,117522,117531,117536,117556,117561,117572,117577,117586,117591,117619,117624,117643,117648,117667,117671,117676,117692,117696,117701,117731,117735,117740,117756,117760,117765,117780,117784,117789,117805,117809,117814,117826,117838,117842,117847,117864,117868,117873,117891,117895,117900,117909,117913,117918],{"__ignoreMap":46},[57,117499,117500],{"class":59,"line":60},[57,117501,117502],{"class":63},"#更新相关的知识\n",[57,117504,117505],{"class":59,"line":67},[57,117506,117507],{"class":63},"# 更新软件包列表（从服务器获取最新软件信息）\n",[57,117509,117510,117512,117515],{"class":59,"line":144},[57,117511,24845],{"class":70},[57,117513,117514],{"class":74}," apt",[57,117516,26511],{"class":74},[57,117518,117519],{"class":59,"line":150},[57,117520,117521],{"class":63},"# 升级所有可更新的软件包（不删除旧包）\n",[57,117523,117524,117526,117528],{"class":59,"line":162},[57,117525,24845],{"class":70},[57,117527,117514],{"class":74},[57,117529,117530],{"class":74}," upgrade\n",[57,117532,117533],{"class":59,"line":180},[57,117534,117535],{"class":63},"#更新和升级软件包\n",[57,117537,117538,117540,117542,117545,117547,117549,117551,117554],{"class":59,"line":186},[57,117539,24845],{"class":70},[57,117541,117514],{"class":74},[57,117543,117544],{"class":74}," update",[57,117546,26459],{"class":140},[57,117548,24845],{"class":70},[57,117550,117514],{"class":74},[57,117552,117553],{"class":74}," upgrade",[57,117555,101178],{"class":81},[57,117557,117558],{"class":59,"line":197},[57,117559,117560],{"class":63},"#列出可更新的软件包及版本信息\n",[57,117562,117563,117566,117569],{"class":59,"line":241},[57,117564,117565],{"class":70},"apt",[57,117567,117568],{"class":74}," list",[57,117570,117571],{"class":81}," --upgradable\n",[57,117573,117574],{"class":59,"line":249},[57,117575,117576],{"class":63},"#彻底升级（处理依赖关系，可能删除旧包）\n",[57,117578,117579,117581,117583],{"class":59,"line":262},[57,117580,24845],{"class":70},[57,117582,117514],{"class":74},[57,117584,117585],{"class":74}," full-upgrade\n",[57,117587,117588],{"class":59,"line":281},[57,117589,117590],{"class":63},"#设置指定版本\n",[57,117592,117593,117595,117597,117599,117601,117604,117606,117608,117610,117612,117615,117617],{"class":59,"line":287},[57,117594,24845],{"class":70},[57,117596,117514],{"class":74},[57,117598,75],{"class":74},[57,117600,29171],{"class":136},[57,117602,117603],{"class":74},"package_nam",[57,117605,495],{"class":140},[57,117607,223],{"class":136},[57,117609,156],{"class":74},[57,117611,1326],{"class":136},[57,117613,117614],{"class":74},"version_numbe",[57,117616,1086],{"class":140},[57,117618,51504],{"class":136},[57,117620,117621],{"class":59,"line":298},[57,117622,117623],{"class":63},"#只安装软件包不升级\n",[57,117625,117626,117628,117630,117632,117634,117636,117638,117640],{"class":59,"line":311},[57,117627,24845],{"class":70},[57,117629,117514],{"class":74},[57,117631,75],{"class":74},[57,117633,29171],{"class":136},[57,117635,117603],{"class":74},[57,117637,495],{"class":140},[57,117639,223],{"class":136},[57,117641,117642],{"class":81}," --no-upgrade\n",[57,117644,117645],{"class":59,"line":322},[57,117646,117647],{"class":63},"#只升级，不存在就不安装\n",[57,117649,117650,117652,117654,117656,117658,117660,117662,117664],{"class":59,"line":1929},[57,117651,24845],{"class":70},[57,117653,117514],{"class":74},[57,117655,75],{"class":74},[57,117657,29171],{"class":136},[57,117659,117603],{"class":74},[57,117661,495],{"class":140},[57,117663,223],{"class":136},[57,117665,117666],{"class":81}," --only-upgrade\n",[57,117668,117669],{"class":59,"line":1950},[57,117670,2673],{"emptyLinePlaceholder":350},[57,117672,117673],{"class":59,"line":1955},[57,117674,117675],{"class":63},"#安装指定的软件命令\n",[57,117677,117678,117680,117682,117684,117686,117688,117690],{"class":59,"line":1969},[57,117679,24845],{"class":70},[57,117681,117514],{"class":74},[57,117683,75],{"class":74},[57,117685,29171],{"class":136},[57,117687,117603],{"class":74},[57,117689,495],{"class":140},[57,117691,51504],{"class":136},[57,117693,117694],{"class":59,"line":1974},[57,117695,2673],{"emptyLinePlaceholder":350},[57,117697,117698],{"class":59,"line":2001},[57,117699,117700],{"class":63},"#安装多个软件包\n",[57,117702,117703,117705,117707,117709,117711,117714,117717,117719,117721,117724,117726,117728],{"class":59,"line":2006},[57,117704,24845],{"class":70},[57,117706,117514],{"class":74},[57,117708,75],{"class":74},[57,117710,29171],{"class":136},[57,117712,117713],{"class":74},"package_",[57,117715,117716],{"class":136},"1>",[57,117718,29171],{"class":136},[57,117720,117713],{"class":74},[57,117722,117723],{"class":136},"2>",[57,117725,29171],{"class":136},[57,117727,117713],{"class":74},[57,117729,117730],{"class":136},"3>\n",[57,117732,117733],{"class":59,"line":2023},[57,117734,2673],{"emptyLinePlaceholder":350},[57,117736,117737],{"class":59,"line":2028},[57,117738,117739],{"class":63},"#更新指定的软件命令\n",[57,117741,117742,117744,117746,117748,117750,117752,117754],{"class":59,"line":2033},[57,117743,24845],{"class":70},[57,117745,117514],{"class":74},[57,117747,117544],{"class":74},[57,117749,29171],{"class":136},[57,117751,117603],{"class":74},[57,117753,495],{"class":140},[57,117755,51504],{"class":136},[57,117757,117758],{"class":59,"line":2038},[57,117759,2673],{"emptyLinePlaceholder":350},[57,117761,117762],{"class":59,"line":2052},[57,117763,117764],{"class":63},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[57,117766,117767,117769,117772,117774,117776,117778],{"class":59,"line":2057},[57,117768,117565],{"class":70},[57,117770,117771],{"class":74}," show",[57,117773,29171],{"class":136},[57,117775,117603],{"class":74},[57,117777,495],{"class":140},[57,117779,51504],{"class":136},[57,117781,117782],{"class":59,"line":2850},[57,117783,2673],{"emptyLinePlaceholder":350},[57,117785,117786],{"class":59,"line":2864},[57,117787,117788],{"class":63},"#删除软件包命令\n",[57,117790,117791,117793,117795,117797,117799,117801,117803],{"class":59,"line":2872},[57,117792,24845],{"class":70},[57,117794,117514],{"class":74},[57,117796,26348],{"class":74},[57,117798,29171],{"class":136},[57,117800,117603],{"class":74},[57,117802,495],{"class":140},[57,117804,51504],{"class":136},[57,117806,117807],{"class":59,"line":2877},[57,117808,2673],{"emptyLinePlaceholder":350},[57,117810,117811],{"class":59,"line":2883},[57,117812,117813],{"class":63},"# 清理旧版本和缓存（释放磁盘空间）\n",[57,117815,117816,117818,117820,117823],{"class":59,"line":2889},[57,117817,24845],{"class":70},[57,117819,117514],{"class":74},[57,117821,117822],{"class":74}," autoremove",[57,117824,117825],{"class":63},"  # 删除不再需要的依赖和库文件\n",[57,117827,117828,117830,117832,117835],{"class":59,"line":2894},[57,117829,24845],{"class":70},[57,117831,117514],{"class":74},[57,117833,117834],{"class":74}," clean",[57,117836,117837],{"class":63},"       # 清理下载的缓存包\n",[57,117839,117840],{"class":59,"line":8221},[57,117841,2673],{"emptyLinePlaceholder":350},[57,117843,117844],{"class":59,"line":8245},[57,117845,117846],{"class":63},"#移除软件包及配置文件\n",[57,117848,117849,117851,117853,117856,117858,117860,117862],{"class":59,"line":8250},[57,117850,24845],{"class":70},[57,117852,117514],{"class":74},[57,117854,117855],{"class":74}," purge",[57,117857,29171],{"class":136},[57,117859,117603],{"class":74},[57,117861,495],{"class":140},[57,117863,51504],{"class":136},[57,117865,117866],{"class":59,"line":8256},[57,117867,2673],{"emptyLinePlaceholder":350},[57,117869,117870],{"class":59,"line":8283},[57,117871,117872],{"class":63},"#查找软件包命令\n",[57,117874,117875,117877,117879,117882,117884,117887,117889],{"class":59,"line":8288},[57,117876,24845],{"class":70},[57,117878,117514],{"class":74},[57,117880,117881],{"class":74}," search",[57,117883,29171],{"class":136},[57,117885,117886],{"class":74},"keywor",[57,117888,731],{"class":140},[57,117890,51504],{"class":136},[57,117892,117893],{"class":59,"line":8294},[57,117894,2673],{"emptyLinePlaceholder":350},[57,117896,117897],{"class":59,"line":8306},[57,117898,117899],{"class":63},"#列出所有已安装的包\n",[57,117901,117902,117904,117906],{"class":59,"line":8318},[57,117903,117565],{"class":70},[57,117905,117568],{"class":74},[57,117907,117908],{"class":81}," --installed\n",[57,117910,117911],{"class":59,"line":8330},[57,117912,2673],{"emptyLinePlaceholder":350},[57,117914,117915],{"class":59,"line":9989},[57,117916,117917],{"class":63},"#列出所有已安装的包的版本信息\n",[57,117919,117920,117922,117924],{"class":59,"line":10014},[57,117921,117565],{"class":70},[57,117923,117568],{"class":74},[57,117925,117926],{"class":81}," --all-versions\n",[342,117928,117929],{},"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":46,"searchDepth":67,"depth":67,"links":117931},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117476,"description":347},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117938,"title":117939,"body":117940,"description":347,"extension":348,"meta":118681,"navigation":350,"path":118682,"seo":118683,"stem":118684,"__hash__":118685},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117941,"toc":118668},[117942,117945,117949,117952,117958,117962,117966,117972,117977,117982,117987,117992,117997,118000,118003,118006,118009,118013,118016,118021,118024,118029,118032,118037,118044,118047,118050,118053,118056,118059,118070,118074,118078,118083,118088,118092,118097,118101,118106,118110,118114,118119,118122,118167,118172,118176,118180,118185,118191,118196,118206,118211,118221,118226,118231,118258,118262,118265,118270,118273,118298,118302,118307,118310,118315,118320,118340,118345,118348,118363,118367,118420,118423,118428,118432,118435,118450,118453,118456,118461,118465,118469,118472,118476,118480,118483,118488,118493,118497,118504,118512,118515,118522,118527,118532,118535,118540,118547,118552,118559,118563,118565,118570,118574,118577,118580,118585,118588,118593,118596,118601,118606,118611,118615,118620,118624,118665],[10,117943,117939],{"id":117944},"_2-linux装机教程",[365,117946,117948],{"id":117947},"_21-实体机","2.1 实体机",[14,117950,117951],{},"使用清华源：（Ubuntu24.04）",[14,117953,117954],{},[18,117955,117956],{"href":117956,"rel":117957},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[22],[365,117959,117961],{"id":117960},"_22-普通虚拟机","2.2 普通虚拟机",[394,117963,117965],{"id":117964},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,117967,117968],{},[18,117969,117970],{"href":117970,"rel":117971},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[22],[14,117973,117974],{},[44,117975],{"alt":46,"src":117976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,117978,117979],{},[44,117980],{"alt":46,"src":117981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,117983,117984],{},[44,117985],{"alt":46,"src":117986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,117988,117989],{},[44,117990],{"alt":46,"src":117991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,117993,117994],{},[44,117995],{"alt":46,"src":117996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,117998,117999],{},"内存4G（4096MB）；",[14,118001,118002],{},"CPU给4个核；",[14,118004,118005],{},"硬盘动态分配60G；",[14,118007,118008],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[394,118010,118012],{"id":118011},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,118014,118015],{},"按照1.1的步骤下载Ubuntu",[14,118017,118018],{},[44,118019],{"alt":46,"src":118020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,118022,118023],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,118025,118026],{},[44,118027],{"alt":46,"src":118028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,118030,118031],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,118033,118034],{},[44,118035],{"alt":46,"src":118036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,118038,118039,118040,118043],{},"选择“正常安装”(找不到都用Alt+F7)， ",[33,118041,118042],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,118045,118046],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,118048,118049],{},"将改动写入磁盘吗 继续",[14,118051,118052],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,118054,118055],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,118057,118058],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,118060,118061,118062,118065,118066,118069],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[33,118063,118064],{},"除了"," 选不发送系统信息与不升级之外， ",[33,118067,118068],{},"其它"," 都跳过或前进）",[394,118071,118073],{"id":118072},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22270,118075,118077],{"id":118076},"_2231-全屏","2.2.3.1 全屏",[14,118079,118080],{},[44,118081],{"alt":46,"src":118082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,118084,118085],{},[44,118086],{"alt":46,"src":118087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22270,118089,118091],{"id":118090},"_2232-文件交换","2.2.3.2 文件交换",[14,118093,118094],{},[44,118095],{"alt":46,"src":118096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22270,118098,118100],{"id":118099},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,118102,118103],{},[44,118104],{"alt":46,"src":118105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[365,118107,118109],{"id":118108},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[394,118111,118113],{"id":118112},"_231-简介与优缺点","2.3.1 简介与优缺点",[377,118115,118116],{},[380,118117,118118],{},"什么情况下推荐？",[14,118120,118121],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[377,118123,118124],{"start":67},[380,118125,118126,118127],{},"优缺点：",[377,118128,118129,118159],{},[380,118130,118131,118132],{},"优点：",[377,118133,118134,118137,118144,118147,118150,118153,118156],{},[380,118135,118136],{},"WSL2是最好的Linux发行版;(bushi)",[380,118138,118139,118140,118143],{},"性能损耗极低。且比在Windows上跑深度性能 ",[33,118141,118142],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[380,118145,118146],{},"非常方便调用USB设备，可以USB直通;",[380,118148,118149],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[380,118151,118152],{},"非常方便Win与WSL2互相传文件等协同操作;",[380,118154,118155],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[380,118157,118158],{},"非常方便使用Windows的VScode远程开发;",[380,118160,118161,118162],{},"缺点：",[377,118163,118164],{},[380,118165,118166],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,118168,118169],{},[44,118170],{"alt":46,"src":118171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[394,118173,118175],{"id":118174},"_232-安装教程","2.3.2 安装教程",[22270,118177,118179],{"id":118178},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[377,118181,118182],{},[380,118183,118184],{},"方法一(图形界面)",[14,118186,118187,118188,24887],{},"用Win+R输入",[28,118189,118190],{},"appwiz.cpl",[14,118192,118193],{},[44,118194],{"alt":46,"src":118195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,118197,118198,118199,118202,118203,26742],{},"点击OK进入 ",[33,118200,118201],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[33,118204,118205],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,118207,118208],{},[44,118209],{"alt":46,"src":118210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,118212,118213,118214,101215,118217,118220],{},"选择 ",[33,118215,118216],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[33,118218,118219],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,118222,118223],{},[44,118224],{"alt":46,"src":118225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[377,118227,118228],{"start":67},[380,118229,118230],{},"方法二(命令行)",[49,118232,118236],{"className":118233,"code":118234,"language":118235,"meta":46,"style":46},"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",[28,118237,118238,118243,118248,118253],{"__ignoreMap":46},[57,118239,118240],{"class":59,"line":60},[57,118241,118242],{},"# 开启 Linux 子系统\n",[57,118244,118245],{"class":59,"line":67},[57,118246,118247],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[57,118249,118250],{"class":59,"line":144},[57,118251,118252],{},"# 开启虚拟机平台\n",[57,118254,118255],{"class":59,"line":150},[57,118256,118257],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22270,118259,118261],{"id":118260},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,118263,118264],{},"用管理员权限打开powershell",[14,118266,118267],{},[44,118268],{"alt":46,"src":118269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,118271,118272],{},"升级WSL并设置默认版本为WSL2",[49,118274,118276],{"className":118233,"code":118275,"language":118235,"meta":46,"style":46},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[28,118277,118278,118283,118288,118293],{"__ignoreMap":46},[57,118279,118280],{"class":59,"line":60},[57,118281,118282],{},"# 更新 wsl\n",[57,118284,118285],{"class":59,"line":67},[57,118286,118287],{},"wsl --update\n",[57,118289,118290],{"class":59,"line":144},[57,118291,118292],{},"# 将 wsl 版本设置为 wsl2\n",[57,118294,118295],{"class":59,"line":150},[57,118296,118297],{},"wsl --set-default-version 2\n",[22270,118299,118301],{"id":118300},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[377,118303,118304],{},[380,118305,118306],{},"方式一(商店下载)",[14,118308,118309],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,118311,118312],{},[44,118313],{"alt":46,"src":118314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[377,118316,118317],{"start":67},[380,118318,118319],{},"方式二(命令行安装)",[49,118321,118323],{"className":118233,"code":118322,"language":118235,"meta":46,"style":46},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[28,118324,118325,118330,118335],{"__ignoreMap":46},[57,118326,118327],{"class":59,"line":60},[57,118328,118329],{},"# 列出可安装的 Linux 版本\n",[57,118331,118332],{"class":59,"line":67},[57,118333,118334],{},"#（需要科学手段）\n",[57,118336,118337],{"class":59,"line":144},[57,118338,118339],{},"wsl --list --online\n",[14,118341,118342],{},[44,118343],{"alt":46,"src":118344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,118346,118347],{},"选择对应发行版并安装",[49,118349,118351],{"className":118233,"code":118350,"language":118235,"meta":46,"style":46},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[28,118352,118353,118358],{"__ignoreMap":46},[57,118354,118355],{"class":59,"line":60},[57,118356,118357],{},"# Ubuntu安装完毕后需要重启系统\n",[57,118359,118360],{"class":59,"line":67},[57,118361,118362],{},"wsl --install -d Ubuntu-24.04\n",[22270,118364,118366],{"id":118365},"_2324-查看系统状态","2.3.2.4 查看系统状态",[49,118368,118370],{"className":118233,"code":118369,"language":118235,"meta":46,"style":46},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[28,118371,118372,118377,118382,118387,118392,118396,118400,118405,118410,118415],{"__ignoreMap":46},[57,118373,118374],{"class":59,"line":60},[57,118375,118376],{},"# 查看 wsl\n",[57,118378,118379],{"class":59,"line":67},[57,118380,118381],{},"wsl -l\n",[57,118383,118384],{"class":59,"line":144},[57,118385,118386],{},"# 查看 wsl 运行版本或模式\n",[57,118388,118389],{"class":59,"line":150},[57,118390,118391],{},"wsl -l -v\n",[57,118393,118394],{"class":59,"line":162},[57,118395,2673],{"emptyLinePlaceholder":350},[57,118397,118398],{"class":59,"line":180},[57,118399,2673],{"emptyLinePlaceholder":350},[57,118401,118402],{"class":59,"line":186},[57,118403,118404],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[57,118406,118407],{"class":59,"line":197},[57,118408,118409],{},"wsl --set-version \u003Cdistro> 2\n",[57,118411,118412],{"class":59,"line":241},[57,118413,118414],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[57,118416,118417],{"class":59,"line":249},[57,118418,118419],{},"wsl --unregister \u003Cdistro>\n",[14,118421,118422],{},"输出Version为2即正常",[14,118424,118425],{},[44,118426],{"alt":46,"src":118427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22270,118429,118431],{"id":118430},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,118433,118434],{},"直接在Powershell里输入wsl命令进入子系统",[49,118436,118438],{"className":118233,"code":118437,"language":118235,"meta":46,"style":46},"# 进入子系统\nwsl\n",[28,118439,118440,118445],{"__ignoreMap":46},[57,118441,118442],{"class":59,"line":60},[57,118443,118444],{},"# 进入子系统\n",[57,118446,118447],{"class":59,"line":67},[57,118448,118449],{},"wsl\n",[14,118451,118452],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,118454,118455],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,118457,118458],{},[44,118459],{"alt":46,"src":118460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[394,118462,118464],{"id":118463},"_233-配置各种环境","2.3.3 配置各种环境",[22270,118466,118468],{"id":118467},"_2331-换源","2.3.3.1 换源",[14,118470,118471],{},"(同实体机LINUX，往下找教程)",[22270,118473,118475],{"id":118474},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23182,118477,118479],{"id":118478},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,118481,118482],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,118484,118485],{},[44,118486],{"alt":46,"src":118487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,118489,118490],{},[44,118491],{"alt":46,"src":118492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23182,118494,118496],{"id":118495},"_23322-cuda","2.3.3.2.2 CUDA",[14,118498,118499,118500],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[18,118501,118502],{"href":118502,"rel":118503},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[22],[14,118505,118506,118509],{},[44,118507],{"alt":46,"src":118508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[44,118510],{"alt":46,"src":118511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,118513,118514],{},"在下方的网站，选择合适的版本。",[14,118516,118517,118518],{},"WSL2 专属 CUDA 指南：",[18,118519,118520],{"href":118520,"rel":118521},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[22],[14,118523,118524],{},[33,118525,118526],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,118528,118529],{},[44,118530],{"alt":46,"src":118531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,118533,118534],{},"挨行敲一遍",[14,118536,118537],{},[44,118538],{"alt":46,"src":118539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,118541,118542,118543,118546],{},"敲完后，输入",[28,118544,118545],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,118548,118549],{},[44,118550],{"alt":46,"src":118551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,118553,118554,118555,118558],{},"（请详看下方教程的",[33,118556,118557],{},"安装CUDA的配置环境来看","如何配置环境）",[23182,118560,118562],{"id":118561},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,118564,118471],{},[14,118566,118567],{},[44,118568],{"alt":46,"src":118569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22270,118571,118573],{"id":118572},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,118575,118576],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,118578,118579],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,118581,118582],{},[44,118583],{"alt":46,"src":118584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,118586,118587],{},"连接WSL2",[14,118589,118590],{},[44,118591],{"alt":46,"src":118592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,118594,118595],{},"远程开发成功。",[14,118597,118598],{},[44,118599],{"alt":46,"src":118600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,118602,118603],{},[44,118604],{"alt":46,"src":118605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,118607,118608],{},[44,118609],{"alt":46,"src":118610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22270,118612,118614],{"id":118613},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,118616,118617],{},[44,118618],{"alt":46,"src":118619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22270,118621,118623],{"id":118622},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[49,118625,118627],{"className":117493,"code":118626,"language":117495,"meta":46,"style":46},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[28,118628,118629,118637,118645,118656,118660],{"__ignoreMap":46},[57,118630,118631,118633,118635],{"class":59,"line":60},[57,118632,24845],{"class":70},[57,118634,117514],{"class":74},[57,118636,26511],{"class":74},[57,118638,118639,118641,118643],{"class":59,"line":67},[57,118640,24845],{"class":70},[57,118642,117514],{"class":74},[57,118644,117530],{"class":74},[57,118646,118647,118649,118651,118653],{"class":59,"line":144},[57,118648,24845],{"class":70},[57,118650,117514],{"class":74},[57,118652,75],{"class":74},[57,118654,118655],{"class":74}," mesa-utils\n",[57,118657,118658],{"class":59,"line":150},[57,118659,2673],{"emptyLinePlaceholder":350},[57,118661,118662],{"class":59,"line":162},[57,118663,118664],{"class":63},"#然后重启wsl2即可\n",[342,118666,118667],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":46,"searchDepth":67,"depth":67,"links":118669},[118670,118671,118676],{"id":117947,"depth":67,"text":117948},{"id":117960,"depth":67,"text":117961,"children":118672},[118673,118674,118675],{"id":117964,"depth":144,"text":117965},{"id":118011,"depth":144,"text":118012},{"id":118072,"depth":144,"text":118073},{"id":118108,"depth":67,"text":118109,"children":118677},[118678,118679,118680],{"id":118112,"depth":144,"text":118113},{"id":118174,"depth":144,"text":118175},{"id":118463,"depth":144,"text":118464},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117939,"description":347},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118687,"title":118688,"body":118689,"description":347,"extension":348,"meta":121625,"navigation":350,"path":121626,"seo":121627,"stem":121628,"__hash__":121629},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118690,"toc":121597},[118691,118694,118698,118704,118708,118714,118718,118906,118909,118914,118918,118922,118925,118928,118934,118939,118942,118945,118950,118983,118988,118992,119069,119072,119077,119081,119084,119123,119126,119135,119153,119158,119165,119282,119287,119290,119317,119322,119326,119335,119385,119392,119396,119399,119413,119420,119454,119459,119463,119486,119489,119494,119498,119501,119504,119507,119549,119553,119556,119559,119600,119604,119608,119611,119616,119621,119624,119647,119650,119658,119663,119666,119671,119676,119679,119684,119688,119693,119716,119721,119783,119791,119796,119801,119804,119809,119812,119817,119822,119840,119845,119851,119856,119870,119874,119877,119880,119883,119926,119929,119934,120035,120038,120043,120047,120051,120088,120092,120096,120100,120146,120150,120195,120199,120206,120214,120269,120272,120349,120352,120375,120379,120382,120387,120392,120400,120403,120408,120413,120418,120421,120426,120435,120438,120443,120446,120517,120522,120525,120530,120533,120538,120541,120546,120549,120554,120559,120562,120637,120640,120653,120658,120661,120675,120678,120707,120712,120741,120744,120749,120753,120758,120767,120770,120775,120778,120783,120786,120789,120794,120797,120802,120807,120810,120815,120818,120943,120948,120978,120981,120986,120991,121008,121011,121054,121057,121084,121089,121102,121245,121249,121254,121268,121271,121322,121325,121355,121358,121374,121379,121393,121396,121463,121468,121477,121482,121485,121497,121502,121509,121533,121536,121541,121544,121563,121568,121575,121587,121594],[10,118692,118688],{"id":118693},"_3-安装必备配置",[365,118695,118697],{"id":118696},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[49,118699,118702],{"className":118700,"code":118701,"language":5460},[5458],"  打开下方网站（注意，该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",[28,118703,118701],{"__ignoreMap":46},[394,118705,118707],{"id":118706},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[49,118709,118712],{"className":118710,"code":118711,"language":5460},[5458],"  输入以下命令\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",[28,118713,118711],{"__ignoreMap":46},[394,118715,118717],{"id":118716},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[49,118719,118723],{"className":118720,"code":118721,"language":118722,"meta":46,"style":46},"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",[28,118724,118725,118733,118744,118756,118770,118774,118784,118789,118793,118797,118802,118806,118818,118822,118827,118831,118842,118846,118862,118866,118877,118881,118886,118890,118898],{"__ignoreMap":46},[57,118726,118727,118729,118731],{"class":59,"line":60},[57,118728,24845],{"class":70},[57,118730,117514],{"class":74},[57,118732,26511],{"class":74},[57,118734,118735,118737,118739,118741],{"class":59,"line":67},[57,118736,24845],{"class":70},[57,118738,117514],{"class":74},[57,118740,75],{"class":74},[57,118742,118743],{"class":74}," vim\n",[57,118745,118746,118748,118751,118753],{"class":59,"line":144},[57,118747,24845],{"class":70},[57,118749,118750],{"class":74}," rm",[57,118752,25594],{"class":81},[57,118754,118755],{"class":74}," \u002Fetc\u002Fapt\u002Fsources.list\n",[57,118757,118758,118760,118762,118764,118767],{"class":59,"line":150},[57,118759,24845],{"class":70},[57,118761,118750],{"class":74},[57,118763,25594],{"class":81},[57,118765,118766],{"class":74}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[57,118768,118769],{"class":81},"**\n",[57,118771,118772],{"class":59,"line":162},[57,118773,2673],{"emptyLinePlaceholder":350},[57,118775,118776,118778,118781],{"class":59,"line":180},[57,118777,24845],{"class":70},[57,118779,118780],{"class":74}," vim",[57,118782,118783],{"class":74}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[57,118785,118786],{"class":59,"line":186},[57,118787,118788],{"class":74},"```\n",[57,118790,118791],{"class":59,"line":197},[57,118792,2673],{"emptyLinePlaceholder":350},[57,118794,118795],{"class":59,"line":241},[57,118796,2673],{"emptyLinePlaceholder":350},[57,118798,118799],{"class":59,"line":249},[57,118800,118801],{"class":70},"选择好Ubuntu版本后，复制下方的内容。\n",[57,118803,118804],{"class":59,"line":262},[57,118805,2673],{"emptyLinePlaceholder":350},[57,118807,118808,118810,118813,118816],{"class":59,"line":281},[57,118809,644],{"class":136},[57,118811,118812],{"class":74},"[](",[57,118814,118815],{"class":70},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[57,118817,238],{"class":74},[57,118819,118820],{"class":59,"line":287},[57,118821,2673],{"emptyLinePlaceholder":350},[57,118823,118824],{"class":59,"line":298},[57,118825,118826],{"class":70},"粘贴进去\n",[57,118828,118829],{"class":59,"line":311},[57,118830,2673],{"emptyLinePlaceholder":350},[57,118832,118833,118835,118837,118840],{"class":59,"line":322},[57,118834,644],{"class":136},[57,118836,118812],{"class":74},[57,118838,118839],{"class":70},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[57,118841,238],{"class":74},[57,118843,118844],{"class":59,"line":1929},[57,118845,2673],{"emptyLinePlaceholder":350},[57,118847,118848,118851,118854,118857,118859],{"class":59,"line":1950},[57,118849,118850],{"class":70},"按一下ESC，然后英文冒号，输入",[57,118852,118853],{"class":74}," `",[57,118855,118856],{"class":70},":wq!",[57,118858,1387],{"class":74},[57,118860,118861],{"class":70},"然后回车\n",[57,118863,118864],{"class":59,"line":1955},[57,118865,2673],{"emptyLinePlaceholder":350},[57,118867,118868,118870,118872,118875],{"class":59,"line":1969},[57,118869,644],{"class":136},[57,118871,118812],{"class":74},[57,118873,118874],{"class":70},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[57,118876,238],{"class":74},[57,118878,118879],{"class":59,"line":1974},[57,118880,2673],{"emptyLinePlaceholder":350},[57,118882,118883],{"class":59,"line":2001},[57,118884,118885],{"class":70},"输入以下命令\n",[57,118887,118888],{"class":59,"line":2006},[57,118889,2673],{"emptyLinePlaceholder":350},[57,118891,118892,118895],{"class":59,"line":2023},[57,118893,118894],{"class":74},"```",[57,118896,118897],{"class":70},"Bash\n",[57,118899,118900,118902,118904],{"class":59,"line":2028},[57,118901,24845],{"class":70},[57,118903,117514],{"class":74},[57,118905,26511],{"class":74},[14,118907,118908],{},"这里被替换成对应学校则成功",[14,118910,118911],{},[44,118912],{"alt":46,"src":118913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[365,118915,118917],{"id":118916},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[394,118919,118921],{"id":118920},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,118923,118924],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,118926,118927],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,118929,118930],{},[18,118931,118932],{"href":118932,"rel":118933},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[22],[14,118935,118936],{},[44,118937],{"alt":46,"src":118938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,118940,118941],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,118943,118944],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,118946,118947],{},[44,118948],{"alt":46,"src":118949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[49,118951,118953],{"className":117493,"code":118952,"language":117495,"meta":46,"style":46},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[28,118954,118955,118960,118967,118972],{"__ignoreMap":46},[57,118956,118957],{"class":59,"line":60},[57,118958,118959],{"class":63},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[57,118961,118962,118964],{"class":59,"line":67},[57,118963,101473],{"class":81},[57,118965,118966],{"class":74}," ~\u002FDownloads\n",[57,118968,118969],{"class":59,"line":144},[57,118970,118971],{"class":63},"#下方chrome安装包名不一定是这个，根据名字来看\n",[57,118973,118974,118976,118978,118980],{"class":59,"line":150},[57,118975,24845],{"class":70},[57,118977,117514],{"class":74},[57,118979,75],{"class":74},[57,118981,118982],{"class":74}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,118984,118985],{},[44,118986],{"alt":46,"src":118987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[394,118989,118991],{"id":118990},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[49,118993,118995],{"className":117493,"code":118994,"language":117495,"meta":46,"style":46},"# 老版\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",[28,118996,118997,119002,119010,119021,119026,119030,119035,119045,119053,119064],{"__ignoreMap":46},[57,118998,118999],{"class":59,"line":60},[57,119000,119001],{"class":63},"# 老版\n",[57,119003,119004,119006,119008],{"class":59,"line":67},[57,119005,24845],{"class":70},[57,119007,117514],{"class":74},[57,119009,26511],{"class":74},[57,119011,119012,119014,119016,119018],{"class":59,"line":144},[57,119013,24845],{"class":70},[57,119015,117514],{"class":74},[57,119017,75],{"class":74},[57,119019,119020],{"class":74}," neofetch\n",[57,119022,119023],{"class":59,"line":150},[57,119024,119025],{"class":70},"neofetch\n",[57,119027,119028],{"class":59,"line":162},[57,119029,2673],{"emptyLinePlaceholder":350},[57,119031,119032],{"class":59,"line":180},[57,119033,119034],{"class":63},"# 新版\n",[57,119036,119037,119039,119042],{"class":59,"line":186},[57,119038,24845],{"class":70},[57,119040,119041],{"class":74}," add-apt-repository",[57,119043,119044],{"class":74}," ppa:zhangsongcui3371\u002Ffastfetch\n",[57,119046,119047,119049,119051],{"class":59,"line":197},[57,119048,24845],{"class":70},[57,119050,117514],{"class":74},[57,119052,26511],{"class":74},[57,119054,119055,119057,119059,119061],{"class":59,"line":241},[57,119056,24845],{"class":70},[57,119058,117514],{"class":74},[57,119060,75],{"class":74},[57,119062,119063],{"class":74}," fastfetch\n",[57,119065,119066],{"class":59,"line":249},[57,119067,119068],{"class":70},"fastfetch\n",[14,119070,119071],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,119073,119074],{},[44,119075],{"alt":46,"src":119076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[394,119078,119080],{"id":119079},"_323-移除snap应用","3.2.3 移除snap应用",[14,119082,119083],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[49,119085,119087],{"className":117493,"code":119086,"language":117495,"meta":46,"style":46},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[28,119088,119089,119101,119112],{"__ignoreMap":46},[57,119090,119091,119093,119095,119098],{"class":59,"line":60},[57,119092,24845],{"class":70},[57,119094,26782],{"class":74},[57,119096,119097],{"class":74}," disable",[57,119099,119100],{"class":74}," snapd.service\n",[57,119102,119103,119105,119107,119109],{"class":59,"line":67},[57,119104,24845],{"class":70},[57,119106,26782],{"class":74},[57,119108,119097],{"class":74},[57,119110,119111],{"class":74}," snapd.socket\n",[57,119113,119114,119116,119118,119120],{"class":59,"line":144},[57,119115,24845],{"class":70},[57,119117,26782],{"class":74},[57,119119,119097],{"class":74},[57,119121,119122],{"class":74}," snapd.seeded.service\n",[14,119124,119125],{},"然后查看snap应用列表",[14,119127,119128,119129,119134],{},"根据你安装的选择不同（最小安装或普通安装），有",[18,119130,119133],{"href":119131,"rel":119132},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[22],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[49,119136,119138],{"className":117493,"code":119137,"language":117495,"meta":46,"style":46},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[28,119139,119140,119145],{"__ignoreMap":46},[57,119141,119142],{"class":59,"line":60},[57,119143,119144],{"class":63},"# 查询当前系统上snap安装了哪些app\n",[57,119146,119147,119150],{"class":59,"line":67},[57,119148,119149],{"class":70},"snap",[57,119151,119152],{"class":74}," list\n",[14,119154,119155],{},[44,119156],{"alt":46,"src":119157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,119159,119160,119161,119164],{},"卸载掉图中所有应用，按照 ",[33,119162,119163],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[49,119166,119168],{"className":117493,"code":119167,"language":117495,"meta":46,"style":46},"#移除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",[28,119169,119170,119175,119187,119192,119203,119208,119219,119224,119235,119240,119244,119249,119260,119271],{"__ignoreMap":46},[57,119171,119172],{"class":59,"line":60},[57,119173,119174],{"class":63},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[57,119176,119177,119179,119182,119184],{"class":59,"line":67},[57,119178,24845],{"class":70},[57,119180,119181],{"class":74}," snap",[57,119183,26348],{"class":74},[57,119185,119186],{"class":74}," snap-store\n",[57,119188,119189],{"class":59,"line":144},[57,119190,119191],{"class":63},"#移除firefox浏览器\n",[57,119193,119194,119196,119198,119200],{"class":59,"line":150},[57,119195,24845],{"class":70},[57,119197,119181],{"class":74},[57,119199,26348],{"class":74},[57,119201,119202],{"class":74}," firefox\n",[57,119204,119205],{"class":59,"line":162},[57,119206,119207],{"class":63},"#移除gnome-42-2204\n",[57,119209,119210,119212,119214,119216],{"class":59,"line":180},[57,119211,24845],{"class":70},[57,119213,119181],{"class":74},[57,119215,26348],{"class":74},[57,119217,119218],{"class":74}," gnome-42-2204\n",[57,119220,119221],{"class":59,"line":186},[57,119222,119223],{"class":63},"#移除gtk-common-themes\n",[57,119225,119226,119228,119230,119232],{"class":59,"line":197},[57,119227,24845],{"class":70},[57,119229,119181],{"class":74},[57,119231,26348],{"class":74},[57,119233,119234],{"class":74}," gtk-common-themes\n",[57,119236,119237],{"class":59,"line":241},[57,119238,119239],{"class":63},"#移除其它...\n",[57,119241,119242],{"class":59,"line":249},[57,119243,2947],{"class":140},[57,119245,119246],{"class":59,"line":262},[57,119247,119248],{"class":63},"#移除core22,bare以及snapd\n",[57,119250,119251,119253,119255,119257],{"class":59,"line":281},[57,119252,24845],{"class":70},[57,119254,119181],{"class":74},[57,119256,26348],{"class":74},[57,119258,119259],{"class":74}," core22\n",[57,119261,119262,119264,119266,119268],{"class":59,"line":287},[57,119263,24845],{"class":70},[57,119265,119181],{"class":74},[57,119267,26348],{"class":74},[57,119269,119270],{"class":74}," bare\n",[57,119272,119273,119275,119277,119279],{"class":59,"line":298},[57,119274,24845],{"class":70},[57,119276,119181],{"class":74},[57,119278,26348],{"class":74},[57,119280,119281],{"class":74}," snapd\n",[14,119283,119284],{},[44,119285],{"alt":46,"src":119286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,119288,119289],{},"输入以下命令查看是否还有snap包",[49,119291,119293],{"className":117493,"code":119292,"language":117495,"meta":46,"style":46},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[28,119294,119295,119301,119305,119309,119313],{"__ignoreMap":46},[57,119296,119297,119299],{"class":59,"line":60},[57,119298,119149],{"class":70},[57,119300,119152],{"class":74},[57,119302,119303],{"class":59,"line":67},[57,119304,119001],{"class":63},[57,119306,119307],{"class":59,"line":144},[57,119308,119025],{"class":70},[57,119310,119311],{"class":59,"line":150},[57,119312,119034],{"class":63},[57,119314,119315],{"class":59,"line":162},[57,119316,119068],{"class":70},[14,119318,119319],{},[44,119320],{"alt":46,"src":119321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[394,119323,119325],{"id":119324},"_324-移除snap","3.2.4 移除snap",[14,119327,119328,119329,119334],{},"在删除掉",[18,119330,119333],{"href":119331,"rel":119332},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[22],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[49,119336,119338],{"className":117493,"code":119337,"language":117495,"meta":46,"style":46}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[28,119339,119340,119345,119358,119363,119374],{"__ignoreMap":46},[57,119341,119342],{"class":59,"line":60},[57,119343,119344],{"class":63}," #使用apt移除掉snap\n",[57,119346,119347,119349,119351,119353,119356],{"class":59,"line":67},[57,119348,24845],{"class":70},[57,119350,117514],{"class":74},[57,119352,117822],{"class":74},[57,119354,119355],{"class":81}," --purge",[57,119357,119281],{"class":74},[57,119359,119360],{"class":59,"line":144},[57,119361,119362],{"class":63},"#移除snapd的一些目录\n",[57,119364,119365,119367,119369,119371],{"class":59,"line":150},[57,119366,24845],{"class":70},[57,119368,118750],{"class":74},[57,119370,25594],{"class":81},[57,119372,119373],{"class":74}," \u002Fvar\u002Fcache\u002Fsnapd\n",[57,119375,119376,119378,119380,119382],{"class":59,"line":162},[57,119377,24845],{"class":70},[57,119379,118750],{"class":74},[57,119381,25594],{"class":81},[57,119383,119384],{"class":74}," ~\u002Fsnap\n",[14,119386,119387,119388,119391],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[28,119389,119390],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[394,119393,119395],{"id":119394},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,119397,119398],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[49,119400,119402],{"className":117493,"code":119401,"language":117495,"meta":46,"style":46},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[28,119403,119404],{"__ignoreMap":46},[57,119405,119406,119408,119410],{"class":59,"line":60},[57,119407,24845],{"class":70},[57,119409,118780],{"class":74},[57,119411,119412],{"class":74}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,119414,119415,119416,119419],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[28,119417,119418],{},":wq"," 回车",[49,119421,119423],{"className":117493,"code":119422,"language":117495,"meta":46,"style":46},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[28,119424,119425,119432,119446],{"__ignoreMap":46},[57,119426,119427,119430],{"class":59,"line":60},[57,119428,119429],{"class":70},"Package:",[57,119431,119281],{"class":74},[57,119433,119434,119437,119440,119443],{"class":59,"line":67},[57,119435,119436],{"class":70},"Pin:",[57,119438,119439],{"class":74}," release",[57,119441,119442],{"class":74}," a=",[57,119444,119445],{"class":81},"*\n",[57,119447,119448,119451],{"class":59,"line":144},[57,119449,119450],{"class":70},"Pin-Priority:",[57,119452,119453],{"class":81}," -10\n",[14,119455,119456],{},[44,119457],{"alt":46,"src":119458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[394,119460,119462],{"id":119461},"_326-测试是否成功","3.2.6 测试是否成功",[49,119464,119466],{"className":117493,"code":119465,"language":117495,"meta":46,"style":46},"sudo apt update\nsudo apt install firefox\n",[28,119467,119468,119476],{"__ignoreMap":46},[57,119469,119470,119472,119474],{"class":59,"line":60},[57,119471,24845],{"class":70},[57,119473,117514],{"class":74},[57,119475,26511],{"class":74},[57,119477,119478,119480,119482,119484],{"class":59,"line":67},[57,119479,24845],{"class":70},[57,119481,117514],{"class":74},[57,119483,75],{"class":74},[57,119485,119202],{"class":74},[14,119487,119488],{},"这里提示snapd无法被安装，就证明成功了",[14,119490,119491],{},[44,119492],{"alt":46,"src":119493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[394,119495,119497],{"id":119496},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,119499,119500],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,119502,119503],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,119505,119506],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[49,119508,119510],{"className":117493,"code":119509,"language":117495,"meta":46,"style":46},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[28,119511,119512,119517,119526,119531,119539],{"__ignoreMap":46},[57,119513,119514],{"class":59,"line":60},[57,119515,119516],{"class":63},"# 添加Mozilla提供的源\n",[57,119518,119519,119521,119523],{"class":59,"line":67},[57,119520,24845],{"class":70},[57,119522,119041],{"class":74},[57,119524,119525],{"class":74}," ppa:mozillateam\u002Fppa\n",[57,119527,119528],{"class":59,"line":144},[57,119529,119530],{"class":63},"# 安装Firefox\n",[57,119532,119533,119535,119537],{"class":59,"line":150},[57,119534,24845],{"class":70},[57,119536,117514],{"class":74},[57,119538,26511],{"class":74},[57,119540,119541,119543,119545,119547],{"class":59,"line":162},[57,119542,24845],{"class":70},[57,119544,117514],{"class":74},[57,119546,75],{"class":74},[57,119548,119202],{"class":74},[394,119550,119552],{"id":119551},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,119554,119555],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,119557,119558],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[49,119560,119562],{"className":117493,"code":119561,"language":117495,"meta":46,"style":46},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[28,119563,119564,119569,119579,119587,119591],{"__ignoreMap":46},[57,119565,119566],{"class":59,"line":60},[57,119567,119568],{"class":63},"#删掉禁止安装snap的配置文件\n",[57,119570,119571,119573,119575,119577],{"class":59,"line":67},[57,119572,24845],{"class":70},[57,119574,118750],{"class":74},[57,119576,25594],{"class":81},[57,119578,119412],{"class":74},[57,119580,119581,119583,119585],{"class":59,"line":144},[57,119582,24845],{"class":70},[57,119584,117514],{"class":74},[57,119586,26511],{"class":74},[57,119588,119589],{"class":59,"line":150},[57,119590,2673],{"emptyLinePlaceholder":350},[57,119592,119593,119595,119597],{"class":59,"line":162},[57,119594,24845],{"class":70},[57,119596,117514],{"class":74},[57,119598,119599],{"class":74}," dist-update\n",[365,119601,119603],{"id":119602},"_33-中文输入法","3.3 中文输入法",[394,119605,119607],{"id":119606},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,119609,119610],{},"官网下载搜狗输入法",[14,119612,119613],{},[44,119614],{"alt":46,"src":119615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,119617,119618],{},[44,119619],{"alt":46,"src":119620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,119622,119623],{},"打开终端输入如下",[49,119625,119627],{"className":117493,"code":119626,"language":117495,"meta":46,"style":46},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[28,119628,119629,119636],{"__ignoreMap":46},[57,119630,119631,119633],{"class":59,"line":60},[57,119632,101473],{"class":81},[57,119634,119635],{"class":74}," ~\u002FDownloads\u002F\n",[57,119637,119638,119640,119642,119644],{"class":59,"line":67},[57,119639,24845],{"class":70},[57,119641,117514],{"class":74},[57,119643,75],{"class":74},[57,119645,119646],{"class":74}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,119648,119649],{},"打开Fcitx",[14,119651,119652,119655],{},[44,119653],{"alt":46,"src":119654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[44,119656],{"alt":46,"src":119657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,119659,119660],{},[44,119661],{"alt":46,"src":119662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,119664,119665],{},"添加搜狗输入法",[14,119667,119668],{},[44,119669],{"alt":46,"src":119670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,119672,119673],{},[44,119674],{"alt":46,"src":119675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,119677,119678],{},"将搜狗输入法设置为唯一输入法",[14,119680,119681],{},[44,119682],{"alt":46,"src":119683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[394,119685,119687],{"id":119686},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[377,119689,119690],{},[380,119691,119692],{},"卸载旧输入法",[49,119694,119696],{"className":118720,"code":119695,"language":118722,"meta":46,"style":46},"sudo apt purge fcitx* ibus*\n",[28,119697,119698],{"__ignoreMap":46},[57,119699,119700,119702,119704,119706,119709,119711,119714],{"class":59,"line":60},[57,119701,24845],{"class":70},[57,119703,117514],{"class":74},[57,119705,117855],{"class":74},[57,119707,119708],{"class":74}," fcitx",[57,119710,871],{"class":81},[57,119712,119713],{"class":74}," ibus",[57,119715,119445],{"class":81},[377,119717,119718],{"start":67},[380,119719,119720],{},"安装Fcitx5",[49,119722,119724],{"className":117493,"code":119723,"language":117495,"meta":46,"style":46},"# 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",[28,119725,119726,119731,119745,119749,119754,119763,119771],{"__ignoreMap":46},[57,119727,119728],{"class":59,"line":60},[57,119729,119730],{"class":63},"# Ubuntu22.04及以上、Debian12及以上\n",[57,119732,119733,119735,119737,119739,119742],{"class":59,"line":67},[57,119734,24845],{"class":70},[57,119736,117514],{"class":74},[57,119738,75],{"class":74},[57,119740,119741],{"class":74}," fcitx5",[57,119743,119744],{"class":74}," fcitx5-chinese-addons\n",[57,119746,119747],{"class":59,"line":144},[57,119748,2673],{"emptyLinePlaceholder":350},[57,119750,119751],{"class":59,"line":150},[57,119752,119753],{"class":63},"# Ubuntu20.04\n",[57,119755,119756,119758,119760],{"class":59,"line":162},[57,119757,24845],{"class":70},[57,119759,119041],{"class":74},[57,119761,119762],{"class":74}," ppa:zhsj\u002Ffcitx5\n",[57,119764,119765,119767,119769],{"class":59,"line":180},[57,119766,24845],{"class":70},[57,119768,117514],{"class":74},[57,119770,26511],{"class":74},[57,119772,119773,119775,119777,119779,119781],{"class":59,"line":186},[57,119774,24845],{"class":70},[57,119776,117514],{"class":74},[57,119778,75],{"class":74},[57,119780,119741],{"class":74},[57,119782,119744],{"class":74},[377,119784,119785,119788],{"start":144},[380,119786,119787],{},"Reboot System",[380,119789,119790],{},"启动Fcitx5",[14,119792,119793],{},[44,119794],{"alt":46,"src":119795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[377,119797,119798],{"start":162},[380,119799,119800],{},"修改一些设置",[14,119802,119803],{},"将Pinyin和Keyboard - English US加入到左边。",[14,119805,119806],{},[44,119807],{"alt":46,"src":119808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,119810,119811],{},"添加快捷键以便于更好切换中英文",[14,119813,119814],{},[44,119815],{"alt":46,"src":119816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[377,119818,119819],{"start":180},[380,119820,119821],{},"重启",[49,119823,119825],{"className":118720,"code":119824,"language":118722,"meta":46,"style":46},"sudo shutdown -r now\n",[28,119826,119827],{"__ignoreMap":46},[57,119828,119829,119831,119834,119837],{"class":59,"line":60},[57,119830,24845],{"class":70},[57,119832,119833],{"class":74}," shutdown",[57,119835,119836],{"class":81}," -r",[57,119838,119839],{"class":74}," now\n",[377,119841,119842],{"start":186},[380,119843,119844],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,119846,119847],{},[18,119848,119849],{"href":119849,"rel":119850},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[22],[377,119852,119853],{"start":197},[380,119854,119855],{},"再重启",[49,119857,119858],{"className":118720,"code":119824,"language":118722,"meta":46,"style":46},[28,119859,119860],{"__ignoreMap":46},[57,119861,119862,119864,119866,119868],{"class":59,"line":60},[57,119863,24845],{"class":70},[57,119865,119833],{"class":74},[57,119867,119836],{"class":81},[57,119869,119839],{"class":74},[365,119871,119873],{"id":119872},"_34-pip3源替换","3.4 pip3源替换",[14,119875,119876],{},"非Debian系发行版需要做。",[14,119878,119879],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,119881,119882],{},"使用dnf的系统也可能不用做。",[49,119884,119886],{"className":117493,"code":119885,"language":117495,"meta":46,"style":46},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[28,119887,119888,119893,119900,119905,119910],{"__ignoreMap":46},[57,119889,119890],{"class":59,"line":60},[57,119891,119892],{"class":63},"# 检查是否已安装 pip\n",[57,119894,119895,119898],{"class":59,"line":67},[57,119896,119897],{"class":70},"pip3",[57,119899,26562],{"class":81},[57,119901,119902],{"class":59,"line":144},[57,119903,119904],{"class":63},"# 如果未安装，先安装 pip3（见下方）\n",[57,119906,119907],{"class":59,"line":150},[57,119908,119909],{"class":63},"# 配置 pip 使用清华源\n",[57,119911,119912,119914,119917,119920,119923],{"class":59,"line":162},[57,119913,119897],{"class":70},[57,119915,119916],{"class":74}," config",[57,119918,119919],{"class":74}," set",[57,119921,119922],{"class":74}," global.index-url",[57,119924,119925],{"class":74}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,119927,119928],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,119930,119931],{},[44,119932],{"alt":46,"src":119933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[49,119935,119937],{"className":117493,"code":119936,"language":117495,"meta":46,"style":46},"#安装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",[28,119938,119939,119944,119952,119963,119967,119972,119991,119995,120000,120012,120016,120021],{"__ignoreMap":46},[57,119940,119941],{"class":59,"line":60},[57,119942,119943],{"class":63},"#安装pip3\n",[57,119945,119946,119948,119950],{"class":59,"line":67},[57,119947,24845],{"class":70},[57,119949,117514],{"class":74},[57,119951,26511],{"class":74},[57,119953,119954,119956,119958,119960],{"class":59,"line":144},[57,119955,24845],{"class":70},[57,119957,26345],{"class":74},[57,119959,75],{"class":74},[57,119961,119962],{"class":74}," python3-pip\n",[57,119964,119965],{"class":59,"line":150},[57,119966,2673],{"emptyLinePlaceholder":350},[57,119968,119969],{"class":59,"line":162},[57,119970,119971],{"class":63},"#更新pip3\n",[57,119973,119974,119976,119978,119980,119982,119984,119987,119989],{"class":59,"line":180},[57,119975,101076],{"class":70},[57,119977,101079],{"class":81},[57,119979,101102],{"class":74},[57,119981,75],{"class":74},[57,119983,26699],{"class":81},[57,119985,119986],{"class":74}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[57,119988,101107],{"class":81},[57,119990,101110],{"class":74},[57,119992,119993],{"class":59,"line":186},[57,119994,2673],{"emptyLinePlaceholder":350},[57,119996,119997],{"class":59,"line":197},[57,119998,119999],{"class":63},"#设置pip源为清华源\n",[57,120001,120002,120004,120006,120008,120010],{"class":59,"line":241},[57,120003,119897],{"class":70},[57,120005,119916],{"class":74},[57,120007,119919],{"class":74},[57,120009,119922],{"class":74},[57,120011,119925],{"class":74},[57,120013,120014],{"class":59,"line":249},[57,120015,2673],{"emptyLinePlaceholder":350},[57,120017,120018],{"class":59,"line":262},[57,120019,120020],{"class":63},"#测试\n",[57,120022,120023,120025,120027,120029,120031,120033],{"class":59,"line":281},[57,120024,101076],{"class":70},[57,120026,101079],{"class":81},[57,120028,101102],{"class":74},[57,120030,75],{"class":74},[57,120032,101107],{"class":81},[57,120034,101110],{"class":74},[14,120036,120037],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,120039,120040],{},[44,120041],{"alt":46,"src":120042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[365,120044,120046],{"id":120045},"_35-显卡驱动安装","3.5 显卡驱动安装",[394,120048,120050],{"id":120049},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[49,120052,120054],{"className":118720,"code":120053,"language":118722,"meta":46,"style":46},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[28,120055,120056,120061,120076,120081],{"__ignoreMap":46},[57,120057,120058],{"class":59,"line":60},[57,120059,120060],{"class":63},"# 如果是使用apt安装的驱动\n",[57,120062,120063,120065,120067,120069,120071,120074],{"class":59,"line":67},[57,120064,24845],{"class":70},[57,120066,26345],{"class":74},[57,120068,26348],{"class":74},[57,120070,119355],{"class":81},[57,120072,120073],{"class":74}," nvidia",[57,120075,119445],{"class":81},[57,120077,120078],{"class":59,"line":144},[57,120079,120080],{"class":63},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[57,120082,120083,120085],{"class":59,"line":150},[57,120084,24845],{"class":70},[57,120086,120087],{"class":74}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[394,120089,120091],{"id":120090},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22270,120093,120095],{"id":120094},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23182,120097,120099],{"id":120098},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[49,120101,120103],{"className":118720,"code":120102,"language":118722,"meta":46,"style":46},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[28,120104,120105,120110,120121,120126,120136,120141],{"__ignoreMap":46},[57,120106,120107],{"class":59,"line":60},[57,120108,120109],{"class":63},"# 安装英伟达驱动\n",[57,120111,120112,120114,120116,120118],{"class":59,"line":67},[57,120113,24845],{"class":70},[57,120115,117514],{"class":74},[57,120117,75],{"class":74},[57,120119,120120],{"class":74}," nvidia-driver-版本号\n",[57,120122,120123],{"class":59,"line":144},[57,120124,120125],{"class":63},"# 重启 \n",[57,120127,120128,120130,120132,120134],{"class":59,"line":150},[57,120129,24845],{"class":70},[57,120131,119833],{"class":74},[57,120133,119836],{"class":81},[57,120135,119839],{"class":74},[57,120137,120138],{"class":59,"line":162},[57,120139,120140],{"class":63},"# 检查驱动是否安装成功\n",[57,120142,120143],{"class":59,"line":180},[57,120144,120145],{"class":70},"nvidia-smi\n",[23182,120147,120149],{"id":120148},"_35212-debian","3.5.2.1.2 Debian",[49,120151,120153],{"className":118720,"code":120152,"language":118722,"meta":46,"style":46},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[28,120154,120155,120159,120173,120177,120187,120191],{"__ignoreMap":46},[57,120156,120157],{"class":59,"line":60},[57,120158,120109],{"class":63},[57,120160,120161,120163,120165,120167,120170],{"class":59,"line":67},[57,120162,24845],{"class":70},[57,120164,117514],{"class":74},[57,120166,75],{"class":74},[57,120168,120169],{"class":74}," nvidia-driver",[57,120171,120172],{"class":74}," nvidia-settings\n",[57,120174,120175],{"class":59,"line":144},[57,120176,120125],{"class":63},[57,120178,120179,120181,120183,120185],{"class":59,"line":150},[57,120180,24845],{"class":70},[57,120182,119833],{"class":74},[57,120184,119836],{"class":81},[57,120186,119839],{"class":74},[57,120188,120189],{"class":59,"line":162},[57,120190,120140],{"class":63},[57,120192,120193],{"class":59,"line":180},[57,120194,120145],{"class":70},[22270,120196,120198],{"id":120197},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,120200,120201,120202,120205],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[33,120203,120204],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,120207,120208,120209],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23825,120210,120211],{},[33,120212,120213],{},"（也可以不禁用桌面环境，直接进行下一步。）",[49,120215,120217],{"className":118720,"code":120216,"language":118722,"meta":46,"style":46},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[28,120218,120219,120224,120234,120239,120252,120257],{"__ignoreMap":46},[57,120220,120221],{"class":59,"line":60},[57,120222,120223],{"class":63},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[57,120225,120226,120228,120231],{"class":59,"line":67},[57,120227,24845],{"class":70},[57,120229,120230],{"class":74}," telinit",[57,120232,120233],{"class":81}," 3\n",[57,120235,120236],{"class":59,"line":144},[57,120237,120238],{"class":63},"# ubuntu 使用下方命令\n",[57,120240,120241,120243,120246,120249],{"class":59,"line":150},[57,120242,24845],{"class":70},[57,120244,120245],{"class":74}," service",[57,120247,120248],{"class":74}," lightdm",[57,120250,120251],{"class":74}," stop\n",[57,120253,120254],{"class":59,"line":162},[57,120255,120256],{"class":63},"# Fedora 使用下方命令\n",[57,120258,120259,120261,120263,120266],{"class":59,"line":180},[57,120260,24845],{"class":70},[57,120262,26782],{"class":74},[57,120264,120265],{"class":74}," isolate",[57,120267,120268],{"class":74}," multi-user.target\n",[14,120270,120271],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[49,120273,120275],{"className":118720,"code":120274,"language":118722,"meta":46,"style":46},"# 编译环境+准备工作\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",[28,120276,120277,120282,120293,120298,120305,120310,120322,120327,120334,120339],{"__ignoreMap":46},[57,120278,120279],{"class":59,"line":60},[57,120280,120281],{"class":63},"# 编译环境+准备工作\n",[57,120283,120284,120286,120288,120290],{"class":59,"line":67},[57,120285,24845],{"class":70},[57,120287,117514],{"class":74},[57,120289,75],{"class":74},[57,120291,120292],{"class":74}," build-essential\n",[57,120294,120295],{"class":59,"line":144},[57,120296,120297],{"class":63},"# 进入到.run目录中\n",[57,120299,120300,120302],{"class":59,"line":150},[57,120301,101473],{"class":81},[57,120303,120304],{"class":74}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[57,120306,120307],{"class":59,"line":162},[57,120308,120309],{"class":63},"# 给驱动文件增加可执行权限：\n",[57,120311,120312,120314,120316,120319],{"class":59,"line":180},[57,120313,24845],{"class":70},[57,120315,24848],{"class":74},[57,120317,120318],{"class":74}," a+x",[57,120320,120321],{"class":74}," NVIDIA-Linux-x86_64-550.107.02.run\n",[57,120323,120324],{"class":59,"line":186},[57,120325,120326],{"class":63},"# 然后执行安装：\n",[57,120328,120329,120331],{"class":59,"line":197},[57,120330,24845],{"class":70},[57,120332,120333],{"class":74}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[57,120335,120336],{"class":59,"line":241},[57,120337,120338],{"class":63},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[57,120340,120341,120343,120346],{"class":59,"line":249},[57,120342,24845],{"class":70},[57,120344,120345],{"class":74}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[57,120347,120348],{"class":81},"  --no-opengl-files\n",[14,120350,120351],{},"安装完毕重启即可",[49,120353,120355],{"className":118720,"code":120354,"language":118722,"meta":46,"style":46},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[28,120356,120357,120361,120367,120371],{"__ignoreMap":46},[57,120358,120359],{"class":59,"line":60},[57,120360,120125],{"class":63},[57,120362,120363,120365],{"class":59,"line":67},[57,120364,24845],{"class":70},[57,120366,26916],{"class":74},[57,120368,120369],{"class":59,"line":144},[57,120370,120140],{"class":63},[57,120372,120373],{"class":59,"line":150},[57,120374,120145],{"class":70},[394,120376,120378],{"id":120377},"_353-安装cuda","3.5.3 安装CUDA",[14,120380,120381],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,120383,120384],{},[44,120385],{"alt":46,"src":120386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[377,120388,120389],{},[380,120390,120391],{},"先查看显卡驱动所支持的最高CUDA版本",[49,120393,120394],{"className":118720,"code":120145,"language":118722,"meta":46,"style":46},[28,120395,120396],{"__ignoreMap":46},[57,120397,120398],{"class":59,"line":60},[57,120399,120145],{"class":70},[14,120401,120402],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,120404,120405],{},[44,120406],{"alt":46,"src":120407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[377,120409,120410],{"start":67},[380,120411,120412],{},"下载CUDA并安装CUDA",[14,120414,118499,120415],{},[18,120416,118502],{"href":118502,"rel":120417},[22],[14,120419,120420],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,120422,120423],{},[44,120424],{"alt":46,"src":120425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,120427,120428,120429,120434],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[18,120430,120433],{"href":120431,"rel":120432},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[22],"Vinci机器人队单片机教程","）",[14,120436,120437],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,120439,120440],{},[44,120441],{"alt":46,"src":120442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,120444,120445],{},"将最下方框框里的命令敲入终端",[49,120447,120449],{"className":118720,"code":120448,"language":118722,"meta":46,"style":46},"# 在当前文件夹下创建一个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",[28,120450,120451,120456,120465,120470,120477,120482,120490,120495,120506,120511],{"__ignoreMap":46},[57,120452,120453],{"class":59,"line":60},[57,120454,120455],{"class":63},"# 在当前文件夹下创建一个ttt的子文件夹\n",[57,120457,120458,120460,120462],{"class":59,"line":67},[57,120459,101463],{"class":70},[57,120461,29485],{"class":81},[57,120463,120464],{"class":74}," .\u002Fttt\n",[57,120466,120467],{"class":59,"line":144},[57,120468,120469],{"class":63},"# 进入ttt文件夹\n",[57,120471,120472,120474],{"class":59,"line":150},[57,120473,101473],{"class":81},[57,120475,120476],{"class":74}," ttt\n",[57,120478,120479],{"class":59,"line":162},[57,120480,120481],{"class":63},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[57,120483,120484,120487],{"class":59,"line":180},[57,120485,120486],{"class":70},"wget",[57,120488,120489],{"class":74}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[57,120491,120492],{"class":59,"line":186},[57,120493,120494],{"class":63},"# 给予权限\n",[57,120496,120497,120499,120501,120503],{"class":59,"line":197},[57,120498,24845],{"class":70},[57,120500,24848],{"class":74},[57,120502,120318],{"class":74},[57,120504,120505],{"class":74}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[57,120507,120508],{"class":59,"line":241},[57,120509,120510],{"class":63},"# 运行脚本\n",[57,120512,120513,120515],{"class":59,"line":249},[57,120514,24845],{"class":70},[57,120516,120505],{"class":74},[14,120518,120519],{},[44,120520],{"alt":46,"src":120521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,120523,120524],{},"正在安装中：",[14,120526,120527],{},[44,120528],{"alt":46,"src":120529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,120531,120532],{},"输入accept接受即可",[14,120534,120535],{},[44,120536],{"alt":46,"src":120537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,120539,120540],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,120542,120543],{},[44,120544],{"alt":46,"src":120545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,120547,120548],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,120550,120551],{},[44,120552],{"alt":46,"src":120553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[377,120555,120556],{"start":144},[380,120557,120558],{},"配置环境",[14,120560,120561],{},"根据上方确认一下路径，比如我上面红色框起来的为",[49,120563,120565],{"className":118720,"code":120564,"language":118722,"meta":46,"style":46},"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",[28,120566,120567,120583,120598],{"__ignoreMap":46},[57,120568,120569,120572,120575,120578,120581],{"class":59,"line":60},[57,120570,120571],{"class":70},"Please",[57,120573,120574],{"class":74}," make",[57,120576,120577],{"class":74}," sure",[57,120579,120580],{"class":74}," that",[57,120582,2947],{"class":140},[57,120584,120585,120587,120590,120593,120596],{"class":59,"line":67},[57,120586,52468],{"class":70},[57,120588,120589],{"class":74},"   PATH",[57,120591,120592],{"class":74}," includes",[57,120594,120595],{"class":74}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[57,120597,2947],{"class":140},[57,120599,120600,120602,120605,120607,120610,120613,120615,120618,120621,120624,120627,120629,120632,120634],{"class":59,"line":144},[57,120601,52468],{"class":70},[57,120603,120604],{"class":74},"   LD_LIBRARY_PATH",[57,120606,120592],{"class":74},[57,120608,120609],{"class":74}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[57,120611,120612],{"class":74}," or,",[57,120614,5482],{"class":74},[57,120616,120617],{"class":74}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[57,120619,120620],{"class":74}," to",[57,120622,120623],{"class":74}," \u002Fetc\u002Fld.so.conf",[57,120625,120626],{"class":74}," and",[57,120628,27499],{"class":74},[57,120630,120631],{"class":74}," ldconfig",[57,120633,64801],{"class":74},[57,120635,120636],{"class":74}," root\n",[14,120638,120639],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[49,120641,120643],{"className":118720,"code":120642,"language":118722,"meta":46,"style":46},"which nvcc\n",[28,120644,120645],{"__ignoreMap":46},[57,120646,120647,120650],{"class":59,"line":60},[57,120648,120649],{"class":81},"which",[57,120651,120652],{"class":74}," nvcc\n",[14,120654,120655],{},[44,120656],{"alt":46,"src":120657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,120659,120660],{},"所以我进行以下操作：",[49,120662,120664],{"className":118720,"code":120663,"language":118722,"meta":46,"style":46},"sudo vim ~\u002F.bashrc\n",[28,120665,120666],{"__ignoreMap":46},[57,120667,120668,120670,120672],{"class":59,"line":60},[57,120669,24845],{"class":70},[57,120671,118780],{"class":74},[57,120673,120674],{"class":74}," ~\u002F.bashrc\n",[14,120676,120677],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[49,120679,120681],{"className":118720,"code":120680,"language":118722,"meta":46,"style":46},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[28,120682,120683,120695],{"__ignoreMap":46},[57,120684,120685,120687,120690,120692],{"class":59,"line":60},[57,120686,25311],{"class":136},[57,120688,120689],{"class":140}," PATH",[57,120691,156],{"class":136},[57,120693,120694],{"class":140},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[57,120696,120697,120699,120702,120704],{"class":59,"line":67},[57,120698,25311],{"class":136},[57,120700,120701],{"class":140}," LD_LIBRARY_PATH",[57,120703,156],{"class":136},[57,120705,120706],{"class":140},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,120708,120709],{},[44,120710],{"alt":46,"src":120711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[49,120713,120715],{"className":118720,"code":120714,"language":118722,"meta":46,"style":46},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[28,120716,120717,120722,120728,120733],{"__ignoreMap":46},[57,120718,120719],{"class":59,"line":60},[57,120720,120721],{"class":63},"# 刷新当前终端的环境变量\n",[57,120723,120724,120726],{"class":59,"line":67},[57,120725,101090],{"class":81},[57,120727,120674],{"class":74},[57,120729,120730],{"class":59,"line":144},[57,120731,120732],{"class":63},"# 验证CUDA是否安装成功\n",[57,120734,120735,120738],{"class":59,"line":150},[57,120736,120737],{"class":70},"nvcc",[57,120739,120740],{"class":81}," -V\n",[14,120742,120743],{},"出现下图这种则安装成功。",[14,120745,120746],{},[44,120747],{"alt":46,"src":120748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[394,120750,120752],{"id":120751},"_354-安装cudnn","3.5.4 安装cuDNN",[377,120754,120755],{},[380,120756,120757],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,120759,120760,120761,120766],{},"前往 NVIDIA cuDNN 下载页面：",[18,120762,120765],{"href":120763,"rel":120764},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[22],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,120768,120769],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,120771,120772],{},[44,120773],{"alt":46,"src":120774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,120776,120777],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,120779,120780],{},[44,120781],{"alt":46,"src":120782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,120784,120785],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,120787,120788],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,120790,120791],{},[33,120792,120793],{},"我这里选择所有Linux X86_64最通用的办法：",[14,120795,120796],{},"下载好的：",[14,120798,120799],{},[44,120800],{"alt":46,"src":120801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[377,120803,120804],{"start":67},[380,120805,120806],{},"安装cuDNN",[14,120808,120809],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,120811,120812],{},[44,120813],{"alt":46,"src":120814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,120816,120817],{},"解压文件，并复制到对应位置完成安装",[49,120819,120821],{"className":118720,"code":120820,"language":118722,"meta":46,"style":46},"# 解压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",[28,120822,120823,120828,120839,120844,120851,120856,120872,120886,120891,120902,120911,120915,120931],{"__ignoreMap":46},[57,120824,120825],{"class":59,"line":60},[57,120826,120827],{"class":63},"# 解压cuDNN文件\n",[57,120829,120830,120833,120836],{"class":59,"line":67},[57,120831,120832],{"class":70},"tar",[57,120834,120835],{"class":81}," -xvf",[57,120837,120838],{"class":74}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[57,120840,120841],{"class":59,"line":144},[57,120842,120843],{"class":63},"# cd进文件夹\n",[57,120845,120846,120848],{"class":59,"line":150},[57,120847,101473],{"class":81},[57,120849,120850],{"class":74}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[57,120852,120853],{"class":59,"line":162},[57,120854,120855],{"class":63},"# 复制cuDNN文件到CUDA目录\n",[57,120857,120858,120860,120862,120865,120867,120870],{"class":59,"line":180},[57,120859,24845],{"class":70},[57,120861,28130],{"class":74},[57,120863,120864],{"class":74}," include\u002Fcudnn",[57,120866,871],{"class":81},[57,120868,120869],{"class":74},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[57,120871,2947],{"class":140},[57,120873,120874,120876,120878,120881,120883],{"class":59,"line":186},[57,120875,24845],{"class":70},[57,120877,28130],{"class":74},[57,120879,120880],{"class":74}," lib\u002Flibcudnn",[57,120882,871],{"class":81},[57,120884,120885],{"class":74},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[57,120887,120888],{"class":59,"line":197},[57,120889,120890],{"class":63},"# 对比一下有没有缺文件\n",[57,120892,120893,120895,120898,120900],{"class":59,"line":241},[57,120894,27030],{"class":70},[57,120896,120897],{"class":74}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[57,120899,871],{"class":81},[57,120901,2947],{"class":140},[57,120903,120904,120906,120909],{"class":59,"line":249},[57,120905,27030],{"class":70},[57,120907,120908],{"class":74}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[57,120910,119445],{"class":81},[57,120912,120913],{"class":59,"line":262},[57,120914,120494],{"class":63},[57,120916,120917,120919,120921,120924,120926,120928],{"class":59,"line":281},[57,120918,24845],{"class":70},[57,120920,24848],{"class":74},[57,120922,120923],{"class":74}," a+r",[57,120925,120897],{"class":74},[57,120927,871],{"class":81},[57,120929,120930],{"class":140},"   \n",[57,120932,120933,120935,120937,120939,120941],{"class":59,"line":287},[57,120934,24845],{"class":70},[57,120936,24848],{"class":74},[57,120938,120923],{"class":74},[57,120940,120908],{"class":74},[57,120942,119445],{"class":81},[377,120944,120945],{"start":144},[380,120946,120947],{},"检查是否安装成功",[49,120949,120951],{"className":118720,"code":120950,"language":118722,"meta":46,"style":46},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[28,120952,120953,120958],{"__ignoreMap":46},[57,120954,120955],{"class":59,"line":60},[57,120956,120957],{"class":63},"# 检查cuDNN版本命令\n",[57,120959,120960,120963,120966,120968,120970,120973,120976],{"class":59,"line":67},[57,120961,120962],{"class":70},"cat",[57,120964,120965],{"class":74}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[57,120967,25378],{"class":136},[57,120969,30505],{"class":70},[57,120971,120972],{"class":74}," CUDNN_MAJOR",[57,120974,120975],{"class":81}," -A",[57,120977,47920],{"class":81},[14,120979,120980],{},"出现下图这样的就是安装成功了",[14,120982,120983],{},[44,120984],{"alt":46,"src":120985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[377,120987,120988],{"start":150},[380,120989,120990],{},"软链接(一般不需要)",[49,120992,120994],{"className":118720,"code":120993,"language":118722,"meta":46,"style":46},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[28,120995,120996,121001],{"__ignoreMap":46},[57,120997,120998],{"class":59,"line":60},[57,120999,121000],{"class":63},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[57,121002,121003,121005],{"class":59,"line":67},[57,121004,24845],{"class":70},[57,121006,121007],{"class":74}," ldconfig\n",[14,121009,121010],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[49,121012,121017],{"className":121013,"code":121014,"language":121015,"meta":121016,"style":46},"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",[28,121018,121019,121024,121029,121034,121039,121044,121049],{"__ignoreMap":46},[57,121020,121021],{"class":59,"line":60},[57,121022,121023],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[57,121025,121026],{"class":59,"line":67},[57,121027,121028],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[57,121030,121031],{"class":59,"line":144},[57,121032,121033],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[57,121035,121036],{"class":59,"line":150},[57,121037,121038],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[57,121040,121041],{"class":59,"line":162},[57,121042,121043],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[57,121045,121046],{"class":59,"line":180},[57,121047,121048],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[57,121050,121051],{"class":59,"line":186},[57,121052,121053],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,121055,121056],{},"运行下方的命令",[49,121058,121060],{"className":118720,"code":121059,"language":118722,"meta":46,"style":46},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[28,121061,121062,121067,121074,121079],{"__ignoreMap":46},[57,121063,121064],{"class":59,"line":60},[57,121065,121066],{"class":63},"# cd进入CUDA路径\n",[57,121068,121069,121071],{"class":59,"line":67},[57,121070,101473],{"class":81},[57,121072,121073],{"class":74}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[57,121075,121076],{"class":59,"line":144},[57,121077,121078],{"class":63}," # 查看本路径下的需要软链接的文件名\n",[57,121080,121081],{"class":59,"line":150},[57,121082,121083],{"class":70}," ls\n",[14,121085,121086],{},[44,121087],{"alt":46,"src":121088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,121090,121091,121092,18682,121095,18682,121098,121101],{},"如上图，我需要将",[28,121093,121094],{},"libcudnn_xxx_xxxxx.so.8.9.7",[28,121096,121097],{},"libcudnn_xxx_xxxxx.so.8",[28,121099,121100],{},"libcudnn_xxx_xxxxx.so","软链接",[49,121103,121105],{"className":118720,"code":121104,"language":118722,"meta":46,"style":46},"# 创建符号链接。对于每个 .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",[28,121106,121107,121112,121128,121142,121156,121170,121184,121198,121212,121217,121223,121228],{"__ignoreMap":46},[57,121108,121109],{"class":59,"line":60},[57,121110,121111],{"class":63},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[57,121113,121114,121116,121119,121122,121125],{"class":59,"line":67},[57,121115,24845],{"class":70},[57,121117,121118],{"class":74}," ln",[57,121120,121121],{"class":81}," -sf",[57,121123,121124],{"class":74}," libcudnn_cnn_train.so.8.9.7",[57,121126,121127],{"class":74}," libcudnn_cnn_train.so.8\n",[57,121129,121130,121132,121134,121136,121139],{"class":59,"line":144},[57,121131,24845],{"class":70},[57,121133,121118],{"class":74},[57,121135,121121],{"class":81},[57,121137,121138],{"class":74}," libcudnn_adv_infer.so.8.9.7",[57,121140,121141],{"class":74}," libcudnn_adv_infer.so.8\n",[57,121143,121144,121146,121148,121150,121153],{"class":59,"line":150},[57,121145,24845],{"class":70},[57,121147,121118],{"class":74},[57,121149,121121],{"class":81},[57,121151,121152],{"class":74}," libcudnn_adv_train.so.8.9.7",[57,121154,121155],{"class":74}," libcudnn_adv_train.so.8\n",[57,121157,121158,121160,121162,121164,121167],{"class":59,"line":162},[57,121159,24845],{"class":70},[57,121161,121118],{"class":74},[57,121163,121121],{"class":81},[57,121165,121166],{"class":74}," libcudnn_cnn_infer.so.8.9.7",[57,121168,121169],{"class":74}," libcudnn_cnn_infer.so.8\n",[57,121171,121172,121174,121176,121178,121181],{"class":59,"line":180},[57,121173,24845],{"class":70},[57,121175,121118],{"class":74},[57,121177,121121],{"class":81},[57,121179,121180],{"class":74}," libcudnn.so.8.9.7",[57,121182,121183],{"class":74}," libcudnn.so.8\n",[57,121185,121186,121188,121190,121192,121195],{"class":59,"line":186},[57,121187,24845],{"class":70},[57,121189,121118],{"class":74},[57,121191,121121],{"class":81},[57,121193,121194],{"class":74}," libcudnn_ops_infer.so.8.9.7",[57,121196,121197],{"class":74}," libcudnn_ops_infer.so.8\n",[57,121199,121200,121202,121204,121206,121209],{"class":59,"line":197},[57,121201,24845],{"class":70},[57,121203,121118],{"class":74},[57,121205,121121],{"class":81},[57,121207,121208],{"class":74}," libcudnn_ops_train.so.8.9.7",[57,121210,121211],{"class":74}," libcudnn_ops_train.so.8\n",[57,121213,121214],{"class":59,"line":241},[57,121215,121216],{"class":63},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[57,121218,121219,121221],{"class":59,"line":249},[57,121220,24845],{"class":70},[57,121222,121007],{"class":74},[57,121224,121225],{"class":59,"line":262},[57,121226,121227],{"class":63},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[57,121229,121230,121232,121235,121238,121240,121243],{"class":59,"line":281},[57,121231,27030],{"class":70},[57,121233,121234],{"class":81}," -l",[57,121236,121237],{"class":74}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[57,121239,871],{"class":81},[57,121241,121242],{"class":74},".so",[57,121244,119445],{"class":81},[394,121246,121248],{"id":121247},"_355-常见问题","3.5.5 常见问题",[377,121250,121251],{},[380,121252,121253],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[49,121255,121257],{"className":118720,"code":121256,"language":118722,"meta":46,"style":46},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[28,121258,121259],{"__ignoreMap":46},[57,121260,121261,121263,121265],{"class":59,"line":60},[57,121262,24845],{"class":70},[57,121264,118780],{"class":74},[57,121266,121267],{"class":74}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,121269,121270],{},"blacklist-nouveau.conf文件内容如下：",[49,121272,121274],{"className":118720,"code":121273,"language":118722,"meta":46,"style":46},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[28,121275,121276,121284,121291,121303,121313],{"__ignoreMap":46},[57,121277,121278,121281],{"class":59,"line":60},[57,121279,121280],{"class":70},"blacklist",[57,121282,121283],{"class":74}," nouveau\n",[57,121285,121286,121288],{"class":59,"line":67},[57,121287,121280],{"class":70},[57,121289,121290],{"class":74}," lbm-nouveau\n",[57,121292,121293,121295,121298,121301],{"class":59,"line":144},[57,121294,116127],{"class":70},[57,121296,121297],{"class":74}," nouveau",[57,121299,121300],{"class":74}," modeset=",[57,121302,3358],{"class":81},[57,121304,121305,121308,121310],{"class":59,"line":150},[57,121306,121307],{"class":81},"alias",[57,121309,121297],{"class":74},[57,121311,121312],{"class":74}," off\n",[57,121314,121315,121317,121320],{"class":59,"line":162},[57,121316,121307],{"class":81},[57,121318,121319],{"class":74}," lbm-nouveau",[57,121321,121312],{"class":74},[14,121323,121324],{},"接着运行下方命令",[49,121326,121328],{"className":118720,"code":121327,"language":118722,"meta":46,"style":46},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[28,121329,121330,121340,121345],{"__ignoreMap":46},[57,121331,121332,121334,121337],{"class":59,"line":60},[57,121333,24845],{"class":70},[57,121335,121336],{"class":74}," update-initramfs",[57,121338,121339],{"class":81}," -u\n",[57,121341,121342],{"class":59,"line":67},[57,121343,121344],{"class":70},"或者\n",[57,121346,121347,121349,121352],{"class":59,"line":144},[57,121348,24845],{"class":70},[57,121350,121351],{"class":74}," dracut",[57,121353,121354],{"class":81}," --force\n",[14,121356,121357],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[49,121359,121361],{"className":118720,"code":121360,"language":118722,"meta":46,"style":46},"lsmod | grep nouveau\n",[28,121362,121363],{"__ignoreMap":46},[57,121364,121365,121368,121370,121372],{"class":59,"line":60},[57,121366,121367],{"class":70},"lsmod",[57,121369,25378],{"class":136},[57,121371,30505],{"class":70},[57,121373,121283],{"class":74},[377,121375,121376],{"start":67},[380,121377,121378],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[49,121380,121382],{"className":118720,"code":121381,"language":118722,"meta":46,"style":46},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[28,121383,121384],{"__ignoreMap":46},[57,121385,121386,121388,121390],{"class":59,"line":60},[57,121387,24845],{"class":70},[57,121389,118780],{"class":74},[57,121391,121392],{"class":74}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,121394,121395],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[49,121397,121399],{"className":118720,"code":121398,"language":118722,"meta":46,"style":46},"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",[28,121400,121401,121409,121417,121425,121432,121440,121450,121458],{"__ignoreMap":46},[57,121402,121403,121406],{"class":59,"line":60},[57,121404,121405],{"class":70},"Section",[57,121407,121408],{"class":74}," \"OutputClass\"\n",[57,121410,121411,121414],{"class":59,"line":67},[57,121412,121413],{"class":70},"   Identifier",[57,121415,121416],{"class":74}," \"nvidia\"\n",[57,121418,121419,121422],{"class":59,"line":144},[57,121420,121421],{"class":70},"   MatchDriver",[57,121423,121424],{"class":74}," \"nvidia-drm\"\n",[57,121426,121427,121430],{"class":59,"line":150},[57,121428,121429],{"class":70},"   Driver",[57,121431,121416],{"class":74},[57,121433,121434,121437],{"class":59,"line":162},[57,121435,121436],{"class":70},"   Option",[57,121438,121439],{"class":74}," \"AllowEmptyInitialConfiguration\"\n",[57,121441,121442,121444,121447],{"class":59,"line":180},[57,121443,121436],{"class":70},[57,121445,121446],{"class":74}," \"PrimaryGPU\"",[57,121448,121449],{"class":74}," \"yes\"\n",[57,121451,121452,121455],{"class":59,"line":186},[57,121453,121454],{"class":70},"   ModulePath",[57,121456,121457],{"class":74}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[57,121459,121460],{"class":59,"line":197},[57,121461,121462],{"class":70},"EndSection\n",[377,121464,121465],{"start":144},[380,121466,121467],{},"安装N卡驱动提示错误",[49,121469,121471],{"className":121013,"code":121470,"language":121015,"meta":121016,"style":46},"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",[28,121472,121473],{"__ignoreMap":46},[57,121474,121475],{"class":59,"line":60},[57,121476,121470],{},[377,121478,121479],{},[380,121480,121481],{},"检查当前运行的内核版本：",[14,121483,121484],{},"运行以下命令以查看你当前正在使用的内核版本：",[49,121486,121488],{"className":117493,"code":121487,"language":117495,"meta":46,"style":46},"uname -r\n",[28,121489,121490],{"__ignoreMap":46},[57,121491,121492,121494],{"class":59,"line":60},[57,121493,70401],{"class":70},[57,121495,121496],{"class":81}," -r\n",[377,121498,121499],{"start":67},[380,121500,121501],{},"安装内核开发文件：",[14,121503,121504,121505,121508],{},"确保你已经安装了与当前内核版本相匹配的 ",[28,121506,121507],{},"kernel-devel"," 包。运行以下命令来安装：",[49,121510,121512],{"className":117493,"code":121511,"language":117495,"meta":46,"style":46},"sudo dnf install kernel-devel-$(uname -r)\n",[28,121513,121514],{"__ignoreMap":46},[57,121515,121516,121518,121520,121522,121525,121527,121529,121531],{"class":59,"line":60},[57,121517,24845],{"class":70},[57,121519,26584],{"class":74},[57,121521,75],{"class":74},[57,121523,121524],{"class":74}," kernel-devel-",[57,121526,25368],{"class":140},[57,121528,70401],{"class":70},[57,121530,119836],{"class":81},[57,121532,238],{"class":140},[14,121534,121535],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[377,121537,121538],{"start":144},[380,121539,121540],{},"安装内核源代码（如果需要）：",[14,121542,121543],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[49,121545,121547],{"className":117493,"code":121546,"language":117495,"meta":46,"style":46},"sudo dnf install kernel-headers kernel-source\n",[28,121548,121549],{"__ignoreMap":46},[57,121550,121551,121553,121555,121557,121560],{"class":59,"line":60},[57,121552,24845],{"class":70},[57,121554,26584],{"class":74},[57,121556,75],{"class":74},[57,121558,121559],{"class":74}," kernel-headers",[57,121561,121562],{"class":74}," kernel-source\n",[377,121564,121565],{"start":150},[380,121566,121567],{},"检查安装：",[14,121569,121570,121571,121574],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[28,121572,121573],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[49,121576,121578],{"className":117493,"code":121577,"language":117495,"meta":46,"style":46},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[28,121579,121580],{"__ignoreMap":46},[57,121581,121582,121584],{"class":59,"line":60},[57,121583,27030],{"class":70},[57,121585,121586],{"class":74}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,121588,121589,121590,121593],{},"如果仍然遇到问题，可以通过 ",[28,121591,121592],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[342,121595,121596],{},"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":46,"searchDepth":67,"depth":67,"links":121598},[121599,121603,121613,121617,121618],{"id":118696,"depth":67,"text":118697,"children":121600},[121601,121602],{"id":118706,"depth":144,"text":118707},{"id":118716,"depth":144,"text":118717},{"id":118916,"depth":67,"text":118917,"children":121604},[121605,121606,121607,121608,121609,121610,121611,121612],{"id":118920,"depth":144,"text":118921},{"id":118990,"depth":144,"text":118991},{"id":119079,"depth":144,"text":119080},{"id":119324,"depth":144,"text":119325},{"id":119394,"depth":144,"text":119395},{"id":119461,"depth":144,"text":119462},{"id":119496,"depth":144,"text":119497},{"id":119551,"depth":144,"text":119552},{"id":119602,"depth":67,"text":119603,"children":121614},[121615,121616],{"id":119606,"depth":144,"text":119607},{"id":119686,"depth":144,"text":119687},{"id":119872,"depth":67,"text":119873},{"id":120045,"depth":67,"text":120046,"children":121619},[121620,121621,121622,121623,121624],{"id":120049,"depth":144,"text":120050},{"id":120090,"depth":144,"text":120091},{"id":120377,"depth":144,"text":120378},{"id":120751,"depth":144,"text":120752},{"id":121247,"depth":144,"text":121248},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118688,"description":347},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121631,"title":121632,"body":121633,"description":347,"extension":348,"meta":121973,"navigation":350,"path":121974,"seo":121975,"stem":121976,"__hash__":121977},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121634,"toc":121971},[121635,121638,121643,121646,121892,121897,121900,121936,121939,121968],[10,121636,121632],{"id":121637},"_4-命令教程长期积累",[377,121639,121640],{},[380,121641,121642],{},"大多数命令",[14,121644,121645],{},"常用 Linux 命令速查：",[49,121647,121649],{"className":117493,"code":121648,"language":117495,"meta":46,"style":46},"# 文件与目录\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",[28,121650,121651,121656,121663,121670,121678,121685,121692,121700,121708,121715,121722,121730,121734,121739,121746,121754,121761,121765,121770,121777,121785,121793,121801,121809,121813,121818,121826,121833,121840,121848,121856,121860,121865,121874,121883],{"__ignoreMap":46},[57,121652,121653],{"class":59,"line":60},[57,121654,121655],{"class":63},"# 文件与目录\n",[57,121657,121658,121660],{"class":59,"line":67},[57,121659,27030],{"class":70},[57,121661,121662],{"class":63},"        # 列出目录内容\n",[57,121664,121665,121667],{"class":59,"line":144},[57,121666,101473],{"class":81},[57,121668,121669],{"class":63},"        # 切换目录\n",[57,121671,121672,121675],{"class":59,"line":150},[57,121673,121674],{"class":81},"pwd",[57,121676,121677],{"class":63},"       # 显示当前路径\n",[57,121679,121680,121682],{"class":59,"line":162},[57,121681,101463],{"class":70},[57,121683,121684],{"class":63},"     # 创建目录\n",[57,121686,121687,121689],{"class":59,"line":180},[57,121688,25591],{"class":70},[57,121690,121691],{"class":63},"        # 删除文件或目录\n",[57,121693,121694,121697],{"class":59,"line":186},[57,121695,121696],{"class":70},"cp",[57,121698,121699],{"class":63},"        # 复制文件或目录\n",[57,121701,121702,121705],{"class":59,"line":197},[57,121703,121704],{"class":70},"mv",[57,121706,121707],{"class":63},"        # 移动\u002F重命名文件或目录\n",[57,121709,121710,121712],{"class":59,"line":241},[57,121711,101480],{"class":70},[57,121713,121714],{"class":63},"     # 创建空文件\n",[57,121716,121717,121719],{"class":59,"line":249},[57,121718,120962],{"class":70},[57,121720,121721],{"class":63},"       # 查看文件内容\n",[57,121723,121724,121727],{"class":59,"line":262},[57,121725,121726],{"class":70},"head\u002Ftail",[57,121728,121729],{"class":63}," # 查看文件头部\u002F尾部\n",[57,121731,121732],{"class":59,"line":281},[57,121733,2673],{"emptyLinePlaceholder":350},[57,121735,121736],{"class":59,"line":287},[57,121737,121738],{"class":63},"# 权限管理\n",[57,121740,121741,121743],{"class":59,"line":298},[57,121742,24880],{"class":70},[57,121744,121745],{"class":63},"     # 修改文件权限\n",[57,121747,121748,121751],{"class":59,"line":311},[57,121749,121750],{"class":70},"chown",[57,121752,121753],{"class":63},"     # 修改文件所有者\n",[57,121755,121756,121758],{"class":59,"line":322},[57,121757,24845],{"class":70},[57,121759,121760],{"class":63},"      # 以管理员身份执行\n",[57,121762,121763],{"class":59,"line":1929},[57,121764,2673],{"emptyLinePlaceholder":350},[57,121766,121767],{"class":59,"line":1950},[57,121768,121769],{"class":63},"# 系统信息\n",[57,121771,121772,121774],{"class":59,"line":1955},[57,121773,70401],{"class":70},[57,121775,121776],{"class":63},"     # 系统信息\n",[57,121778,121779,121782],{"class":59,"line":1969},[57,121780,121781],{"class":70},"df",[57,121783,121784],{"class":63},"        # 磁盘使用情况\n",[57,121786,121787,121790],{"class":59,"line":1974},[57,121788,121789],{"class":70},"free",[57,121791,121792],{"class":63},"      # 内存使用情况\n",[57,121794,121795,121798],{"class":59,"line":2001},[57,121796,121797],{"class":70},"top\u002Fhtop",[57,121799,121800],{"class":63},"  # 进程监控\n",[57,121802,121803,121806],{"class":59,"line":2006},[57,121804,121805],{"class":70},"ps",[57,121807,121808],{"class":63},"        # 查看进程\n",[57,121810,121811],{"class":59,"line":2023},[57,121812,2673],{"emptyLinePlaceholder":350},[57,121814,121815],{"class":59,"line":2028},[57,121816,121817],{"class":63},"# 网络\n",[57,121819,121820,121823],{"class":59,"line":2033},[57,121821,121822],{"class":70},"ping",[57,121824,121825],{"class":63},"      # 测试网络连通性\n",[57,121827,121828,121830],{"class":59,"line":2038},[57,121829,27118],{"class":70},[57,121831,121832],{"class":63},"      # 发送 HTTP 请求\n",[57,121834,121835,121837],{"class":59,"line":2052},[57,121836,120486],{"class":70},[57,121838,121839],{"class":63},"      # 下载文件\n",[57,121841,121842,121845],{"class":59,"line":2057},[57,121843,121844],{"class":70},"ssh",[57,121846,121847],{"class":63},"       # 远程登录\n",[57,121849,121850,121853],{"class":59,"line":2850},[57,121851,121852],{"class":70},"scp",[57,121854,121855],{"class":63},"       # 远程文件传输\n",[57,121857,121858],{"class":59,"line":2864},[57,121859,2673],{"emptyLinePlaceholder":350},[57,121861,121862],{"class":59,"line":2872},[57,121863,121864],{"class":63},"# 包管理（Debian\u002FUbuntu）\n",[57,121866,121867,121869,121871],{"class":59,"line":2877},[57,121868,117565],{"class":70},[57,121870,117544],{"class":74},[57,121872,121873],{"class":63},"   # 更新软件源\n",[57,121875,121876,121878,121880],{"class":59,"line":2883},[57,121877,117565],{"class":70},[57,121879,75],{"class":74},[57,121881,121882],{"class":63},"  # 安装软件包\n",[57,121884,121885,121887,121889],{"class":59,"line":2889},[57,121886,117565],{"class":70},[57,121888,26348],{"class":74},[57,121890,121891],{"class":63},"   # 卸载软件包\n",[377,121893,121894],{"start":67},[380,121895,121896],{},"KDE Dolphin 以root打开",[14,121898,121899],{},"kde5",[49,121901,121903],{"className":117493,"code":121902,"language":117495,"meta":46,"style":46},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[28,121904,121905],{"__ignoreMap":46},[57,121906,121907,121910,121913,121916,121918,121920,121923,121926,121928,121931,121933],{"class":59,"line":60},[57,121908,121909],{"class":70},"pkexec",[57,121911,121912],{"class":74}," env",[57,121914,121915],{"class":74}," DISPLAY=",[57,121917,28412],{"class":140},[57,121919,28470],{"class":74},[57,121921,121922],{"class":140},"$XAUTHORITY ",[57,121924,121925],{"class":74},"KDE_SESSION_VERSION=",[57,121927,736],{"class":81},[57,121929,121930],{"class":74}," KDE_FULL_SESSION=",[57,121932,1645],{"class":81},[57,121934,121935],{"class":74}," dolphin\n",[14,121937,121938],{},"kde6",[49,121940,121942],{"className":117493,"code":121941,"language":117495,"meta":46,"style":46},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[28,121943,121944],{"__ignoreMap":46},[57,121945,121946,121948,121950,121952,121954,121956,121958,121960,121962,121964,121966],{"class":59,"line":60},[57,121947,121909],{"class":70},[57,121949,121912],{"class":74},[57,121951,121915],{"class":74},[57,121953,28412],{"class":140},[57,121955,28470],{"class":74},[57,121957,121922],{"class":140},[57,121959,121925],{"class":74},[57,121961,761],{"class":81},[57,121963,121930],{"class":74},[57,121965,1645],{"class":81},[57,121967,121935],{"class":74},[342,121969,121970],{},"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":46,"searchDepth":67,"depth":67,"links":121972},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121632,"description":347},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121979,"title":121980,"body":121981,"description":347,"extension":348,"meta":121995,"navigation":350,"path":121996,"seo":121997,"stem":121998,"__hash__":121999},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121982,"toc":121993},[121983,121986],[10,121984,121980],{"id":121985},"_5-各种环境配置",[14,121987,121988],{},[18,121989,121992],{"href":121990,"rel":121991},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[22],"电控组环境搭建大全",{"title":46,"searchDepth":67,"depth":67,"links":121994},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121980,"description":347},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122001,"title":122002,"body":122003,"description":347,"extension":348,"meta":122351,"navigation":350,"path":122352,"seo":122353,"stem":122354,"__hash__":122355},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122004,"toc":122343},[122005,122008,122012,122016,122020,122025,122032,122036,122329,122333,122340],[10,122006,122002],{"id":122007},"_6-拓展功能",[365,122009,122011],{"id":122010},"_61-wine","6.1 Wine",[365,122013,122015],{"id":122014},"_62-android","6.2 Android",[394,122017,122019],{"id":122018},"_621-i卡a卡","6.2.1 I卡、A卡",[377,122021,122022],{},[380,122023,122024],{},"Wayland-Waydroid(体验超级好)",[14,122026,122027,122028],{},"Waydroid 官网与安装指南：",[18,122029,122030],{"href":122030,"rel":122031},"https:\u002F\u002Fwaydro.id\u002F",[22],[394,122033,122035],{"id":122034},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[377,122037,122038],{},[380,122039,122040,122041,122043,122044,122048,122050,122053,122058,122255],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53913,122042],{},"BlissOS 官网下载：",[18,122045,122046],{"href":122046,"rel":122047},"https:\u002F\u002Fblissos.org\u002F",[22],[53913,122049],{},[44,122051],{"alt":46,"src":122052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[377,122054,122055],{"start":144},[380,122056,122057],{},"比较推荐的配置",[49,122059,122061],{"className":117493,"code":122060,"language":117495,"meta":46,"style":46},"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",[28,122062,122063,122070,122080,122090,122100,122112,122122,122129,122139,122148,122157,122167,122177,122186,122196,122206,122218,122228,122237,122247],{"__ignoreMap":46},[57,122064,122065,122068],{"class":59,"line":60},[57,122066,122067],{"class":70},"qemu-system-x86_64",[57,122069,24947],{"class":81},[57,122071,122072,122075,122078],{"class":59,"line":67},[57,122073,122074],{"class":81},"        -M",[57,122076,122077],{"class":74}," q35,vmport=off",[57,122079,24947],{"class":81},[57,122081,122082,122085,122088],{"class":59,"line":144},[57,122083,122084],{"class":81},"        -accel",[57,122086,122087],{"class":74}," kvm",[57,122089,24947],{"class":81},[57,122091,122092,122095,122098],{"class":59,"line":150},[57,122093,122094],{"class":81},"        -cpu",[57,122096,122097],{"class":74}," qemu64,+sse3,+sse4.2",[57,122099,24947],{"class":81},[57,122101,122102,122105,122108,122110],{"class":59,"line":162},[57,122103,122104],{"class":81},"        -smp",[57,122106,122107],{"class":74}," 8,cores=",[57,122109,710],{"class":81},[57,122111,24947],{"class":81},[57,122113,122114,122117,122120],{"class":59,"line":180},[57,122115,122116],{"class":81},"        -m",[57,122118,122119],{"class":74}," 6G",[57,122121,24947],{"class":81},[57,122123,122124,122127],{"class":59,"line":186},[57,122125,122126],{"class":81},"        -usb",[57,122128,24947],{"class":81},[57,122130,122131,122134,122137],{"class":59,"line":197},[57,122132,122133],{"class":81},"        -device",[57,122135,122136],{"class":74}," virtio-tablet",[57,122138,24947],{"class":81},[57,122140,122141,122143,122146],{"class":59,"line":241},[57,122142,122133],{"class":81},[57,122144,122145],{"class":74}," virtio-keyboard",[57,122147,24947],{"class":81},[57,122149,122150,122152,122155],{"class":59,"line":249},[57,122151,122133],{"class":81},[57,122153,122154],{"class":74}," usb-tablet",[57,122156,24947],{"class":81},[57,122158,122159,122162,122165],{"class":59,"line":262},[57,122160,122161],{"class":81},"        -bios",[57,122163,122164],{"class":74}," OVMF-pure-efi64.fd",[57,122166,24947],{"class":81},[57,122168,122169,122172,122175],{"class":59,"line":281},[57,122170,122171],{"class":81},"        -net",[57,122173,122174],{"class":74}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[57,122176,24947],{"class":81},[57,122178,122179,122181,122184],{"class":59,"line":287},[57,122180,122171],{"class":81},[57,122182,122183],{"class":74}," nic,model=virtio",[57,122185,24947],{"class":81},[57,122187,122188,122191,122194],{"class":59,"line":298},[57,122189,122190],{"class":81},"        -audio",[57,122192,122193],{"class":74}," sdl,model=hda",[57,122195,24947],{"class":81},[57,122197,122198,122201,122204],{"class":59,"line":311},[57,122199,122200],{"class":81},"        -display",[57,122202,122203],{"class":74}," sdl,gl=on,show-cursor=on",[57,122205,24947],{"class":81},[57,122207,122208,122210,122213,122216],{"class":59,"line":322},[57,122209,122133],{"class":81},[57,122211,122212],{"class":74}," virtio-vga-gl,xres=1920,yres=",[57,122214,122215],{"class":81},"1080",[57,122217,24947],{"class":81},[57,122219,122220,122223,122226],{"class":59,"line":1929},[57,122221,122222],{"class":81},"        -drive",[57,122224,122225],{"class":74}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[57,122227,24947],{"class":81},[57,122229,122230,122232,122235],{"class":59,"line":1950},[57,122231,122222],{"class":81},[57,122233,122234],{"class":74}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[57,122236,24947],{"class":81},[57,122238,122239,122242,122245],{"class":59,"line":1955},[57,122240,122241],{"class":81},"        -monitor",[57,122243,122244],{"class":74}," stdio",[57,122246,24947],{"class":81},[57,122248,122249,122252],{"class":59,"line":1969},[57,122250,122251],{"class":81},"        -serial",[57,122253,122254],{"class":74}," none\n",[377,122256,122257],{"start":162},[380,122258,122259,122260],{},"常用操作：",[377,122261,122262,122265,122321],{},[380,122263,122264],{},"全屏：Ctrl+Alt+F",[380,122266,122267,122268,122273],{},"adb调试",[377,122269,122270],{},[380,122271,122272],{},"使Linux与Android用ADB连接。",[49,122274,122276],{"className":117493,"code":122275,"language":117495,"meta":46,"style":46},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[28,122277,122278,122283,122294,122299,122311,122316],{"__ignoreMap":46},[57,122279,122280],{"class":59,"line":60},[57,122281,122282],{"class":63},"# 连接安卓\n",[57,122284,122285,122288,122291],{"class":59,"line":67},[57,122286,122287],{"class":70},"adb",[57,122289,122290],{"class":74}," connect",[57,122292,122293],{"class":81}," 127.0.0.1\n",[57,122295,122296],{"class":59,"line":144},[57,122297,122298],{"class":63},"# 打开shell\n",[57,122300,122301,122303,122305,122308],{"class":59,"line":150},[57,122302,122287],{"class":70},[57,122304,27152],{"class":81},[57,122306,122307],{"class":74}," 127.0.0.1:5555",[57,122309,122310],{"class":74}," shell\n",[57,122312,122313],{"class":59,"line":162},[57,122314,122315],{"class":63},"# 使用root权限\n",[57,122317,122318],{"class":59,"line":180},[57,122319,122320],{"class":70},"su\n",[380,122322,122323,122324],{},"中文输入法",[377,122325,122326],{},[380,122327,122328],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[365,122330,122332],{"id":122331},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,122334,122335,122336],{},"rEFInd 官网与文档：",[18,122337,122338],{"href":122338,"rel":122339},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[22],[342,122341,122342],{},"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":46,"searchDepth":67,"depth":67,"links":122344},[122345,122346,122350],{"id":122010,"depth":67,"text":122011},{"id":122014,"depth":67,"text":122015,"children":122347},[122348,122349],{"id":122018,"depth":144,"text":122019},{"id":122034,"depth":144,"text":122035},{"id":122331,"depth":67,"text":122332},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122002,"description":347},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122357,"title":122358,"body":122359,"description":347,"extension":348,"meta":125658,"navigation":350,"path":125659,"seo":125660,"stem":125661,"__hash__":125662},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122360,"toc":125632},[122361,122364,122368,122371,122378,122628,122631,122703,122706,122710,122714,122719,122722,122725,122728,122733,122736,122739,122742,122747,122750,122755,122758,122761,122766,122769,122774,122777,122781,122785,122788,122793,122796,122810,122813,122816,122825,122828,122837,122840,122843,122852,122855,122864,122867,122870,122879,122882,122885,122900,122903,122906,122915,122920,122923,122926,122935,122938,122947,122950,122959,122962,122971,122976,122979,122987,122992,122995,123004,123007,123015,123020,123023,123032,123035,123038,123042,123045,123050,123053,123058,123072,123077,123082,123093,123098,123104,123109,123124,123129,123132,123137,123142,123147,123155,123160,123167,123172,123183,123188,123191,123195,123198,123201,123206,123209,123228,123233,123236,123245,123250,123253,123275,123278,123308,123311,123316,123319,123333,123338,123357,123360,123363,123368,123380,123385,123390,123393,123398,123401,123416,123419,123424,123429,123433,123438,123478,123481,123485,123491,123497,123502,123505,123512,123517,123524,123527,123530,123537,123551,123554,123614,123617,123631,123643,123646,123649,123652,123716,123719,123722,123725,123745,123748,123753,123760,123764,123767,123771,123776,123781,123785,123788,123791,123833,123838,123841,123863,123878,123880,123885,123897,123957,123959,123961,124015,124017,124019,124025,124030,124033,124038,124042,124045,124107,124112,124115,124117,124121,124133,124215,124217,124219,124273,124279,124281,124285,124290,124292,124297,124301,124321,124356,124360,124363,124366,124369,124376,124379,124391,124394,124409,124412,124431,124479,124482,124499,124502,124516,124521,124524,124533,124548,124560,124598,124603,124612,124617,124622,124648,124657,124661,124665,124670,124673,124677,124681,124686,124689,124694,124697,124702,124705,124710,124713,124717,124722,124725,124730,124733,124737,124742,124745,124750,124753,124758,124761,124765,124770,124773,124778,124781,124786,124789,124793,124798,124801,124806,124809,124814,124817,124822,124825,124830,124833,124838,124841,124845,124850,124853,124858,124865,124869,124874,124877,124882,124885,124889,124894,124897,124900,124903,124906,124909,124913,124916,124926,124931,124936,124958,124963,124968,124975,124979,124984,124987,124990,124995,124998,125001,125004,125007,125010,125013,125016,125019,125022,125025,125028,125031,125036,125041,125046,125051,125056,125061,125066,125069,125073,125076,125080,125085,125090,125095,125100,125104,125110,125118,125123,125126,125131,125146,125149,125154,125188,125203,125206,125261,125287,125299,125302,125311,125314,125329,125334,125337,125343,125348,125351,125356,125359,125364,125369,125376,125379,125394,125397,125432,125437,125445,125483,125486,125489,125494,125497,125502,125513,125547,125552,125555,125564,125569,125575,125578,125583,125592,125597,125600,125603,125608,125616,125619,125624,125629],[10,122362,122358],{"id":122363},"_7-其他操作",[365,122365,122367],{"id":122366},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,122369,122370],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,122372,122373,122374,122377],{},"进入工控机的硬盘目录，进入",[28,122375,122376],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[49,122379,122383],{"className":122380,"code":122381,"language":122382,"meta":46,"style":46},"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",[28,122384,122385,122393,122404,122411,122418,122430,122437,122449,122460,122471,122478,122485,122492,122504,122516,122523,122535,122547,122554,122566,122578,122590,122601,122608,122619],{"__ignoreMap":46},[57,122386,122387,122390],{"class":59,"line":60},[57,122388,122389],{"class":51497},"network",[57,122391,122392],{"class":140},": \n",[57,122394,122395,122398,122400,122402],{"class":59,"line":67},[57,122396,122397],{"class":51497},"  version",[57,122399,51634],{"class":140},[57,122401,498],{"class":81},[57,122403,2947],{"class":140},[57,122405,122406,122409],{"class":59,"line":144},[57,122407,122408],{"class":51497},"  wifis",[57,122410,122392],{"class":140},[57,122412,122413,122416],{"class":59,"line":150},[57,122414,122415],{"class":51497},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[57,122417,122392],{"class":140},[57,122419,122420,122423,122425,122428],{"class":59,"line":162},[57,122421,122422],{"class":51497},"      renderer",[57,122424,51634],{"class":140},[57,122426,122427],{"class":74},"NetworkManager",[57,122429,2947],{"class":140},[57,122431,122432,122435],{"class":59,"line":180},[57,122433,122434],{"class":51497},"      match",[57,122436,122392],{"class":140},[57,122438,122439,122442,122444,122447],{"class":59,"line":186},[57,122440,122441],{"class":51497},"        name",[57,122443,51634],{"class":140},[57,122445,122446],{"class":74},"\"wlan0\"",[57,122448,2947],{"class":140},[57,122450,122451,122454,122456,122458],{"class":59,"line":197},[57,122452,122453],{"class":51497},"      dhcp4",[57,122455,51634],{"class":140},[57,122457,1645],{"class":81},[57,122459,2947],{"class":140},[57,122461,122462,122465,122467,122469],{"class":59,"line":241},[57,122463,122464],{"class":51497},"      dhcp6",[57,122466,51634],{"class":140},[57,122468,1645],{"class":81},[57,122470,2947],{"class":140},[57,122472,122473,122476],{"class":59,"line":249},[57,122474,122475],{"class":51497},"      access-points",[57,122477,122392],{"class":140},[57,122479,122480,122483],{"class":59,"line":262},[57,122481,122482],{"class":74},"        \"EMIS_Vinci_Robocon_5G\"",[57,122484,122392],{"class":140},[57,122486,122487,122490],{"class":59,"line":281},[57,122488,122489],{"class":51497},"          auth",[57,122491,122392],{"class":140},[57,122493,122494,122497,122499,122502],{"class":59,"line":287},[57,122495,122496],{"class":51497},"            key-management",[57,122498,51634],{"class":140},[57,122500,122501],{"class":74},"\"psk\"",[57,122503,2947],{"class":140},[57,122505,122506,122509,122511,122514],{"class":59,"line":298},[57,122507,122508],{"class":51497},"            password",[57,122510,51634],{"class":140},[57,122512,122513],{"class":74},"\"vinci666\"",[57,122515,2947],{"class":140},[57,122517,122518,122521],{"class":59,"line":311},[57,122519,122520],{"class":51497},"          networkmanager",[57,122522,122392],{"class":140},[57,122524,122525,122528,122530,122533],{"class":59,"line":322},[57,122526,122527],{"class":51497},"            uuid",[57,122529,51634],{"class":140},[57,122531,122532],{"class":74},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[57,122534,2947],{"class":140},[57,122536,122537,122540,122542,122545],{"class":59,"line":1929},[57,122538,122539],{"class":51497},"            name",[57,122541,51634],{"class":140},[57,122543,122544],{"class":74},"\"EMIS_Vinci_Robocon_5G\"",[57,122546,2947],{"class":140},[57,122548,122549,122552],{"class":59,"line":1950},[57,122550,122551],{"class":51497},"            passthrough",[57,122553,122392],{"class":140},[57,122555,122556,122559,122561,122564],{"class":59,"line":1955},[57,122557,122558],{"class":51497},"              wifi-security.auth-alg",[57,122560,51634],{"class":140},[57,122562,122563],{"class":74},"\"open\"",[57,122565,2947],{"class":140},[57,122567,122568,122571,122573,122576],{"class":59,"line":1969},[57,122569,122570],{"class":51497},"              ipv6.addr-gen-mode",[57,122572,51634],{"class":140},[57,122574,122575],{"class":74},"\"default\"",[57,122577,2947],{"class":140},[57,122579,122580,122583,122585,122588],{"class":59,"line":1974},[57,122581,122582],{"class":51497},"              ipv6.ip6-privacy",[57,122584,51634],{"class":140},[57,122586,122587],{"class":74},"\"-1\"",[57,122589,2947],{"class":140},[57,122591,122592,122595,122597,122599],{"class":59,"line":2001},[57,122593,122594],{"class":51497},"              proxy._",[57,122596,51634],{"class":140},[57,122598,7925],{"class":74},[57,122600,2947],{"class":140},[57,122602,122603,122606],{"class":59,"line":2006},[57,122604,122605],{"class":51497},"      networkmanager",[57,122607,122392],{"class":140},[57,122609,122610,122613,122615,122617],{"class":59,"line":2023},[57,122611,122612],{"class":51497},"        uuid",[57,122614,51634],{"class":140},[57,122616,122532],{"class":74},[57,122618,2947],{"class":140},[57,122620,122621,122623,122625],{"class":59,"line":2028},[57,122622,122441],{"class":51497},[57,122624,51634],{"class":140},[57,122626,122627],{"class":74},"\"EMIS_Vinci_Robocon_5G\"\n",[14,122629,122630],{},"将其改为新wifi的名和密码：",[49,122632,122634],{"className":122380,"code":122633,"language":122382,"meta":46,"style":46},"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",[28,122635,122636,122642,122651,122657,122664,122673,122681,122687,122693],{"__ignoreMap":46},[57,122637,122638,122640],{"class":59,"line":60},[57,122639,122389],{"class":51497},[57,122641,4012],{"class":140},[57,122643,122644,122646,122648],{"class":59,"line":67},[57,122645,122397],{"class":51497},[57,122647,51634],{"class":140},[57,122649,122650],{"class":81},"2\n",[57,122652,122653,122655],{"class":59,"line":144},[57,122654,122408],{"class":51497},[57,122656,4012],{"class":140},[57,122658,122659,122662],{"class":59,"line":150},[57,122660,122661],{"class":51497},"    wlan0",[57,122663,4012],{"class":140},[57,122665,122666,122668,122670],{"class":59,"line":162},[57,122667,122453],{"class":51497},[57,122669,51634],{"class":140},[57,122671,122672],{"class":81},"true\n",[57,122674,122675,122677,122679],{"class":59,"line":180},[57,122676,122464],{"class":51497},[57,122678,51634],{"class":140},[57,122680,122672],{"class":81},[57,122682,122683,122685],{"class":59,"line":186},[57,122684,122475],{"class":51497},[57,122686,4012],{"class":140},[57,122688,122689,122691],{"class":59,"line":197},[57,122690,122482],{"class":74},[57,122692,4012],{"class":140},[57,122694,122695,122698,122700],{"class":59,"line":241},[57,122696,122697],{"class":51497},"          password",[57,122699,51634],{"class":140},[57,122701,122702],{"class":74},"\"vinci666\"\n",[14,122704,122705],{},"工控机开机即可连上网。",[365,122707,122709],{"id":122708},"_72-ssh远程开发","7.2 SSH远程开发",[394,122711,122713],{"id":122712},"_721-环境准备","7.2.1 环境准备",[14,122715,122716],{},[33,122717,122718],{},"1.硬件准备",[14,122720,122721],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,122723,122724],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,122726,122727],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,122729,122730],{},[33,122731,122732],{},"2.设置固定IP",[14,122734,122735],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,122737,122738],{},"1.进入设置界面",[14,122740,122741],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,122743,122744],{},[44,122745],{"alt":46,"src":122746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,122748,122749],{},"2.配置所连接的网络",[14,122751,122752],{},[44,122753],{"alt":46,"src":122754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,122756,122757],{},"3.设置固定IP",[14,122759,122760],{},"查看当前IP地址。",[14,122762,122763],{},[44,122764],{"alt":46,"src":122765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,122767,122768],{},"设置固定IP。",[14,122770,122771],{},[44,122772],{"alt":46,"src":122773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,122775,122776],{},"至此，IP配置完毕。",[394,122778,122780],{"id":122779},"_722-环境搭建","7.2.2 环境搭建",[14,122782,122783],{},[33,122784,26022],{},[14,122786,122787],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,122789,122790],{},[33,122791,122792],{},"实现",[14,122794,122795],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[377,122797,122798,122801,122804,122807],{},[380,122799,122800],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[380,122802,122803],{},"远程主机启动SSH服务；",[380,122805,122806],{},"本地主机登陆远程主机；",[380,122808,122809],{},"实现数据传输。",[14,122811,122812],{},"1.安装SSH客户端与服务端",[14,122814,122815],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[49,122817,122819],{"className":121013,"code":122818,"language":121015,"meta":121016,"style":46}," sudo apt install openssh-server\n",[28,122820,122821],{"__ignoreMap":46},[57,122822,122823],{"class":59,"line":60},[57,122824,122818],{},[14,122826,122827],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[49,122829,122831],{"className":121013,"code":122830,"language":121015,"meta":121016,"style":46},"sudo apt install openssh-client\n",[28,122832,122833],{"__ignoreMap":46},[57,122834,122835],{"class":59,"line":60},[57,122836,122830],{},[14,122838,122839],{},"2.远程主机启动SSH服务",[14,122841,122842],{},"远程主机启动 ssh 服务命令如下：",[49,122844,122846],{"className":121013,"code":122845,"language":121015,"meta":121016,"style":46},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[28,122847,122848],{"__ignoreMap":46},[57,122849,122850],{"class":59,"line":60},[57,122851,122845],{},[14,122853,122854],{},"启动后可使用如下命令查看服务是否正常运行：",[49,122856,122858],{"className":121013,"code":122857,"language":121015,"meta":121016,"style":46},"ps -e | grep ssh\n",[28,122859,122860],{"__ignoreMap":46},[57,122861,122862],{"class":59,"line":60},[57,122863,122857],{},[14,122865,122866],{},"如果启动成功，会包含 sshd 程序。",[14,122868,122869],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[49,122871,122873],{"className":121013,"code":122872,"language":121015,"meta":121016,"style":46},"sudo systemctl enable ssh\n",[28,122874,122875],{"__ignoreMap":46},[57,122876,122877],{"class":59,"line":60},[57,122878,122872],{},[14,122880,122881],{},"3.本地远程登录",[14,122883,122884],{},"登录远程主机可以调用如下命令:",[49,122886,122888],{"className":117493,"code":122887,"language":117495,"meta":46,"style":46},"ssh -X 用户名@ip地址\n",[28,122889,122890],{"__ignoreMap":46},[57,122891,122892,122894,122897],{"class":59,"line":60},[57,122893,121844],{"class":70},[57,122895,122896],{"class":81}," -X",[57,122898,122899],{"class":74}," 用户名@ip地址\n",[14,122901,122902],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,122904,122905],{},"如果退出，可以调用exit命令：",[49,122907,122909],{"className":121013,"code":122908,"language":121015,"meta":121016,"style":46},"exit\n",[28,122910,122911],{"__ignoreMap":46},[57,122912,122913],{"class":59,"line":60},[57,122914,122908],{},[14,122916,122917],{},[33,122918,122919],{},"4.实现数据传输",[14,122921,122922],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,122924,122925],{},"上传文件指令格式如下：",[49,122927,122929],{"className":121013,"code":122928,"language":121015,"meta":121016,"style":46},"scp 本地文件路径 账号@ip:路径\n",[28,122930,122931],{"__ignoreMap":46},[57,122932,122933],{"class":59,"line":60},[57,122934,122928],{},[14,122936,122937],{},"上传文件夹指令格式如下：",[49,122939,122941],{"className":121013,"code":122940,"language":121015,"meta":121016,"style":46},"scp -r 本地文件夹路径 账号@ip:路径\n",[28,122942,122943],{"__ignoreMap":46},[57,122944,122945],{"class":59,"line":60},[57,122946,122940],{},[14,122948,122949],{},"下载文件指令格式如下：",[49,122951,122953],{"className":121013,"code":122952,"language":121015,"meta":121016,"style":46},"scp 账号@ip:路径 本地文件夹路径\n",[28,122954,122955],{"__ignoreMap":46},[57,122956,122957],{"class":59,"line":60},[57,122958,122952],{},[14,122960,122961],{},"下载文件夹指令格式如下：",[49,122963,122965],{"className":121013,"code":122964,"language":121015,"meta":121016,"style":46},"scp -r 账号@ip:路径 本地文件夹路径\n",[28,122966,122967],{"__ignoreMap":46},[57,122968,122969],{"class":59,"line":60},[57,122970,122964],{},[14,122972,122973],{},[33,122974,122975],{},"优化",[14,122977,122978],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[377,122980,122981,122984],{},[380,122982,122983],{},"本地生成密钥对；",[380,122985,122986],{},"将公钥上传至远程主机。",[14,122988,122989],{},[33,122990,122991],{},"1.生成密钥对",[14,122993,122994],{},"本地客户端生成公私钥：（一路回车默认即可）",[49,122996,122998],{"className":121013,"code":122997,"language":121015,"meta":121016,"style":46},"ssh-keygen\n",[28,122999,123000],{"__ignoreMap":46},[57,123001,123002],{"class":59,"line":60},[57,123003,122997],{},[14,123005,123006],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[377,123008,123009,123012],{},[380,123010,123011],{},"id_rsa （私钥）；",[380,123013,123014],{},"id_rsa.pub (公钥)。",[14,123016,123017],{},[33,123018,123019],{},"2.公钥上传",[14,123021,123022],{},"上传指令如下：",[49,123024,123026],{"className":121013,"code":123025,"language":121015,"meta":121016,"style":46},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[28,123027,123028],{"__ignoreMap":46},[57,123029,123030],{"class":59,"line":60},[57,123031,123025],{},[14,123033,123034],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,123036,123037],{},"以后再远程登录就无需录入密码了。",[394,123039,123041],{"id":123040},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,123043,123044],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,123046,123047],{},[33,123048,123049],{},"1.准备工作",[14,123051,123052],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,123054,123055],{},[33,123056,123057],{},"2.为VScode安装远程开发插件",[14,123059,123060,123061,123064,123065,123068,123069,28654],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[28,123062,123063],{},"扩展：商店","的搜索栏输入",[28,123066,123067],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[28,123070,123071],{},"安装",[14,123073,123074],{},[44,123075],{"alt":46,"src":123076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,123078,123079],{},[33,123080,123081],{},"3.配置远程连接",[14,123083,123084,123085,123088,123089,123092],{},"步骤1：使用快捷键",[28,123086,123087],{},"ctrl + shift + p","打开命令输入窗口，并输入",[28,123090,123091],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,123094,123095],{},[44,123096],{"alt":46,"src":123097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,123099,123100,123101,28654],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[28,123102,123103],{},"Add New SSH Host",[14,123105,123106],{},[44,123107],{"alt":46,"src":123108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,123110,123111,123112,123115,123116,123119,123120,123123],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[28,123113,123114],{},"ssh +X ubuntu@192.168.43.164","，其中，",[28,123117,123118],{},"ubuntu","需要替换为你的登录用户名，",[28,123121,123122],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,123125,123126],{},[44,123127],{"alt":46,"src":123128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,123130,123131],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,123133,123134],{},[44,123135],{"alt":46,"src":123136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,123138,123139],{},[44,123140],{"alt":46,"src":123141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,123143,123144],{},[33,123145,123146],{},"4.使用",[14,123148,123149,123150,123088,123152,123154],{},"步骤1：继续使用快捷键",[28,123151,123087],{},[28,123153,123091],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,123156,123157],{},[44,123158],{"alt":46,"src":123159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,123161,123162,123163,123166],{},"或者，也可以点击侧边栏的",[28,123164,123165],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,123168,123169],{},[44,123170],{"alt":46,"src":123171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,123173,123174,123175,123178,123179,123182],{},"步骤2：选择菜单栏的",[28,123176,123177],{},"文件","下的",[28,123180,123181],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,123184,123185],{},[44,123186],{"alt":46,"src":123187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,123189,123190],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[365,123192,123194],{"id":123193},"_73-远程桌面","7.3 远程桌面",[14,123196,123197],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,123199,123200],{},"我们选择使用VNC来看。",[377,123202,123203],{},[380,123204,123205],{},"安装VNC服务器：",[14,123207,123208],{},"这里以TigerVNC为例进行安装：",[49,123210,123212],{"className":117493,"code":123211,"language":117495,"meta":46,"style":46},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[28,123213,123214],{"__ignoreMap":46},[57,123215,123216,123218,123220,123222,123225],{"class":59,"line":60},[57,123217,24845],{"class":70},[57,123219,117514],{"class":74},[57,123221,75],{"class":74},[57,123223,123224],{"class":74}," tigervnc-standalone-server",[57,123226,123227],{"class":74}," tigervnc-common\n",[377,123229,123230],{"start":67},[380,123231,123232],{},"设置VNC密码：",[14,123234,123235],{},"为VNC用户设置密码，运行以下命令：",[49,123237,123239],{"className":117493,"code":123238,"language":117495,"meta":46,"style":46},"vncpasswd\n",[28,123240,123241],{"__ignoreMap":46},[57,123242,123243],{"class":59,"line":60},[57,123244,123238],{"class":70},[377,123246,123247],{"start":144},[380,123248,123249],{},"配置VNC启动脚本:",[14,123251,123252],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[49,123254,123256],{"className":117493,"code":123255,"language":117495,"meta":46,"style":46},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[28,123257,123258,123267],{"__ignoreMap":46},[57,123259,123260,123262,123264],{"class":59,"line":60},[57,123261,101463],{"class":70},[57,123263,29485],{"class":81},[57,123265,123266],{"class":74}," ~\u002F.vnc\n",[57,123268,123269,123272],{"class":59,"line":67},[57,123270,123271],{"class":70},"nano",[57,123273,123274],{"class":74}," ~\u002F.vnc\u002Fxstartup\n",[14,123276,123277],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[49,123279,123281],{"className":117493,"code":123280,"language":117495,"meta":46,"style":46},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[28,123282,123283,123288,123296,123303],{"__ignoreMap":46},[57,123284,123285],{"class":59,"line":60},[57,123286,123287],{"class":63},"#!\u002Fbin\u002Fsh\n",[57,123289,123290,123293],{"class":59,"line":67},[57,123291,123292],{"class":81},"unset",[57,123294,123295],{"class":74}," SESSION_MANAGER\n",[57,123297,123298,123300],{"class":59,"line":144},[57,123299,123292],{"class":81},[57,123301,123302],{"class":74}," DBUS_SESSION_BUS_ADDRESS\n",[57,123304,123305],{"class":59,"line":150},[57,123306,123307],{"class":70},"gnome-session\n",[14,123309,123310],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[377,123312,123313],{"start":150},[380,123314,123315],{},"给予执行权限：",[14,123317,123318],{},"为xstartup文件设置执行权限：",[49,123320,123322],{"className":117493,"code":123321,"language":117495,"meta":46,"style":46},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[28,123323,123324],{"__ignoreMap":46},[57,123325,123326,123328,123331],{"class":59,"line":60},[57,123327,24880],{"class":70},[57,123329,123330],{"class":74}," +x",[57,123332,123274],{"class":74},[377,123334,123335],{"start":162},[380,123336,123337],{},"启动VNC服务器：",[49,123339,123341],{"className":117493,"code":123340,"language":117495,"meta":46,"style":46},"vncserver -geometry 1920x1080 -localhost=0\n",[28,123342,123343],{"__ignoreMap":46},[57,123344,123345,123348,123351,123354],{"class":59,"line":60},[57,123346,123347],{"class":70},"vncserver",[57,123349,123350],{"class":81}," -geometry",[57,123352,123353],{"class":74}," 1920x1080",[57,123355,123356],{"class":81}," -localhost=0\n",[14,123358,123359],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,123361,123362],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[377,123364,123365],{"start":180},[380,123366,123367],{},"查看已开启的VNC服务器：",[49,123369,123371],{"className":117493,"code":123370,"language":117495,"meta":46,"style":46},"vncserver -list\n",[28,123372,123373],{"__ignoreMap":46},[57,123374,123375,123377],{"class":59,"line":60},[57,123376,123347],{"class":70},[57,123378,123379],{"class":81}," -list\n",[14,123381,123382],{},[44,123383],{"alt":46,"src":123384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[377,123386,123387],{"start":186},[380,123388,123389],{},"连接到VNC服务器：",[14,123391,123392],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[377,123394,123395],{"start":197},[380,123396,123397],{},"停止VNC服务器：",[14,123399,123400],{},"如果需要停止VNC服务器，可以使用以下命令：",[49,123402,123404],{"className":117493,"code":123403,"language":117495,"meta":46,"style":46},"vncserver -kill :1\n",[28,123405,123406],{"__ignoreMap":46},[57,123407,123408,123410,123413],{"class":59,"line":60},[57,123409,123347],{"class":70},[57,123411,123412],{"class":81}," -kill",[57,123414,123415],{"class":74}," :1\n",[14,123417,123418],{},"将:1替换为你实际使用的显示编号。",[14,123420,123421],{},[44,123422],{"alt":46,"src":123423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,123425,123426],{},[44,123427],{"alt":46,"src":123428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[365,123430,123432],{"id":123431},"_74-usb端口设置","7.4 USB端口设置",[14,123434,123435],{},[33,123436,123437],{},"首先先配置好权限",[49,123439,123441],{"className":117493,"code":123440,"language":117495,"meta":46,"style":46},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[28,123442,123443,123448,123461,123468,123473],{"__ignoreMap":46},[57,123444,123445],{"class":59,"line":60},[57,123446,123447],{"class":63},"# 将用户权限提高\n",[57,123449,123450,123452,123454,123456,123459],{"class":59,"line":67},[57,123451,24845],{"class":70},[57,123453,26843],{"class":74},[57,123455,26846],{"class":81},[57,123457,123458],{"class":74}," dialout",[57,123460,26851],{"class":140},[57,123462,123463,123465],{"class":59,"line":144},[57,123464,26870],{"class":70},[57,123466,123467],{"class":74}," dialout\n",[57,123469,123470],{"class":59,"line":150},[57,123471,123472],{"class":63},"# 查看下面命令是否输出dialout（若输出才正常）\n",[57,123474,123475],{"class":59,"line":162},[57,123476,123477],{"class":70},"groups\n",[14,123479,123480],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[394,123482,123484],{"id":123483},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,123486,123487,123490],{},[33,123488,123489],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,123492,123493,123496],{},[33,123494,123495],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,123498,123499],{},[33,123500,123501],{},"流程如下：",[14,123503,123504],{},"（1）.查找设备idVendor和idProduct",[14,123506,123507,123508,123511],{},"接入两个USB设备，在终端调用指令",[28,123509,123510],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,123513,123514],{},[44,123515],{"alt":46,"src":123516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,123518,123519,123520,123523],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[28,123521,123522],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,123525,123526],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,123528,123529],{},"（2）.编写映射规则",[14,123531,123532,123533,123536],{},"在",[28,123534,123535],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[49,123538,123540],{"className":117493,"code":123539,"language":117495,"meta":46,"style":46},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[28,123541,123542],{"__ignoreMap":46},[57,123543,123544,123546,123548],{"class":59,"line":60},[57,123545,24845],{"class":70},[57,123547,118780],{"class":74},[57,123549,123550],{"class":74}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,123552,123553],{},"输入如下内容：",[49,123555,123557],{"className":117493,"code":123556,"language":117495,"meta":46,"style":46},"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",[28,123558,123559,123589],{"__ignoreMap":46},[57,123560,123561,123564,123566,123569,123572,123575,123578,123580,123583,123586],{"class":59,"line":60},[57,123562,123563],{"class":140},"KERNEL",[57,123565,156],{"class":136},[57,123567,123568],{"class":74},"=\"ttyUSB*\",",[57,123570,123571],{"class":70}," ATTRS",[57,123573,123574],{"class":74},"{idVendor}==",[57,123576,123577],{"class":70},"\"10c4\"",[57,123579,273],{"class":70},[57,123581,123582],{"class":74}," ATTRS{idProduct}==\"ea60\",",[57,123584,123585],{"class":74}," MODE:=\"0777\",",[57,123587,123588],{"class":74}," SYMLINK+=\"mylidar\"\n",[57,123590,123591,123593,123595,123597,123599,123601,123604,123606,123609,123611],{"class":59,"line":67},[57,123592,123563],{"class":140},[57,123594,156],{"class":136},[57,123596,123568],{"class":74},[57,123598,123571],{"class":70},[57,123600,123574],{"class":74},[57,123602,123603],{"class":70},"\"1a86\"",[57,123605,273],{"class":70},[57,123607,123608],{"class":74}," ATTRS{idProduct}==\"7523\",",[57,123610,123585],{"class":74},[57,123612,123613],{"class":74}," SYMLINK+=\"mycar\"\n",[14,123615,123616],{},"代码解释：",[1422,123618,123619,123622,123625,123628],{},[380,123620,123621],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[380,123623,123624],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[380,123626,123627],{},"SYMLINK是符号连接，即绑定的别名；",[380,123629,123630],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,123632,123633,123634,123637,123640],{},"***小提示：***",[23825,123635,123636],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[28,123638,123639],{},"\u002Fetc\u002Fudev\u002Frule.d",[23825,123641,123642],{},"目录即可。",[14,123644,123645],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,123647,123648],{},"（3）.使规则生效",[14,123650,123651],{},"在终端下输入如下指令：",[49,123653,123655],{"className":117493,"code":123654,"language":117495,"meta":46,"style":46},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[28,123656,123657,123662,123674,123685,123689,123694,123707],{"__ignoreMap":46},[57,123658,123659],{"class":59,"line":60},[57,123660,123661],{"class":63},"# Ubuntu用下方命令\n",[57,123663,123664,123666,123668,123671],{"class":59,"line":67},[57,123665,24845],{"class":70},[57,123667,120245],{"class":74},[57,123669,123670],{"class":74}," udev",[57,123672,123673],{"class":74}," reload\n",[57,123675,123676,123678,123680,123682],{"class":59,"line":144},[57,123677,24845],{"class":70},[57,123679,120245],{"class":74},[57,123681,123670],{"class":74},[57,123683,123684],{"class":74}," restart\n",[57,123686,123687],{"class":59,"line":150},[57,123688,2673],{"emptyLinePlaceholder":350},[57,123690,123691],{"class":59,"line":162},[57,123692,123693],{"class":63},"#Fedora用下方命令\n",[57,123695,123696,123698,123701,123704],{"class":59,"line":180},[57,123697,24845],{"class":70},[57,123699,123700],{"class":74}," udevadm",[57,123702,123703],{"class":74}," control",[57,123705,123706],{"class":81}," --reload\n",[57,123708,123709,123711,123713],{"class":59,"line":186},[57,123710,24845],{"class":70},[57,123712,123700],{"class":74},[57,123714,123715],{"class":74}," trigger\n",[14,123717,123718],{},"再重新插拔设备即可。",[14,123720,123721],{},"（4）.测试",[14,123723,123724],{},"终端下输入如下指令",[49,123726,123728],{"className":117493,"code":123727,"language":117495,"meta":46,"style":46},"ll \u002Fdev | grep ttyUSB\n",[28,123729,123730],{"__ignoreMap":46},[57,123731,123732,123735,123738,123740,123742],{"class":59,"line":60},[57,123733,123734],{"class":70},"ll",[57,123736,123737],{"class":74}," \u002Fdev",[57,123739,25378],{"class":136},[57,123741,30505],{"class":70},[57,123743,123744],{"class":74}," ttyUSB\n",[14,123746,123747],{},"运行结果如下：",[14,123749,123750],{},[44,123751],{"alt":46,"src":123752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,123754,123755,123756,123759],{},"也可以多次插拔USB设备，会发现设备端口",[28,123757,123758],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,123761,123762],{},[33,123763,118161],{},[14,123765,123766],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[394,123768,123770],{"id":123769},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,123772,123773,123775],{},[33,123774,123489],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,123777,123778,123780],{},[33,123779,123495],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,123782,123783],{},[33,123784,123501],{},[14,123786,123787],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,123789,123790],{},"调用如下指令查看第一台雷达的USB信息：",[49,123792,123794],{"className":117493,"code":123793,"language":117495,"meta":46,"style":46},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[28,123795,123796,123816],{"__ignoreMap":46},[57,123797,123798,123801,123803,123806,123809,123811,123813],{"class":59,"line":60},[57,123799,123800],{"class":70},"udevadm",[57,123802,70018],{"class":74},[57,123804,123805],{"class":81}," --attribute-walk",[57,123807,123808],{"class":81}," --name=\u002Fdev\u002FttyUSB0",[57,123810,25378],{"class":136},[57,123812,30505],{"class":70},[57,123814,123815],{"class":74}," KERNELS\n",[57,123817,123818,123820,123822,123824,123827,123829,123831],{"class":59,"line":67},[57,123819,123800],{"class":70},[57,123821,70018],{"class":74},[57,123823,123805],{"class":81},[57,123825,123826],{"class":81}," --name=\u002Fdev\u002FttyACM0",[57,123828,25378],{"class":136},[57,123830,30505],{"class":70},[57,123832,123815],{"class":74},[14,123834,123835],{},[44,123836],{"alt":46,"src":123837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,123839,123840],{},"调用如下指令查看第二台雷达的USB信息：",[49,123842,123844],{"className":117493,"code":123843,"language":117495,"meta":46,"style":46},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[28,123845,123846],{"__ignoreMap":46},[57,123847,123848,123850,123852,123854,123857,123859,123861],{"class":59,"line":60},[57,123849,123800],{"class":70},[57,123851,70018],{"class":74},[57,123853,123805],{"class":81},[57,123855,123856],{"class":81}," --name=\u002Fdev\u002FttyUSB1",[57,123858,25378],{"class":136},[57,123860,30505],{"class":70},[57,123862,123815],{"class":74},[14,123864,123865,123866,123869,123870,123873,123874,123877],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[28,123867,123868],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[28,123871,123872],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[33,123875,123876],{},"唯一性标识","”。",[14,123879,123529],{},[14,123881,123532,123882,123884],{},[28,123883,123535],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[49,123886,123887],{"className":117493,"code":123539,"language":117495,"meta":46,"style":46},[28,123888,123889],{"__ignoreMap":46},[57,123890,123891,123893,123895],{"class":59,"line":60},[57,123892,24845],{"class":70},[57,123894,118780],{"class":74},[57,123896,123550],{"class":74},[49,123898,123900],{"className":117493,"code":123899,"language":117495,"meta":46,"style":46},"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",[28,123901,123902,123931],{"__ignoreMap":46},[57,123903,123904,123906,123908,123910,123913,123915,123918,123921,123923,123926,123928],{"class":59,"line":60},[57,123905,123563],{"class":140},[57,123907,156],{"class":136},[57,123909,123568],{"class":74},[57,123911,123912],{"class":140}," KERNELS",[57,123914,156],{"class":136},[57,123916,123917],{"class":74},"=\"1-1.3:1.0\",",[57,123919,123920],{"class":70}," MODE:",[57,123922,156],{"class":74},[57,123924,123925],{"class":70},"\"0777\"",[57,123927,273],{"class":70},[57,123929,123930],{"class":74}," SYMLINK+=\"rplidar_front\"\n",[57,123932,123933,123935,123937,123939,123941,123943,123946,123948,123950,123952,123954],{"class":59,"line":67},[57,123934,123563],{"class":140},[57,123936,156],{"class":136},[57,123938,123568],{"class":74},[57,123940,123912],{"class":140},[57,123942,156],{"class":136},[57,123944,123945],{"class":74},"=\"1-1.4:1.0\",",[57,123947,123920],{"class":70},[57,123949,156],{"class":74},[57,123951,123925],{"class":70},[57,123953,273],{"class":70},[57,123955,123956],{"class":74}," SYMLINK+=\"rplidar_back\"\n",[14,123958,123648],{},[14,123960,123651],{},[49,123962,123963],{"className":117493,"code":123654,"language":117495,"meta":46,"style":46},[28,123964,123965,123969,123979,123989,123993,123997,124007],{"__ignoreMap":46},[57,123966,123967],{"class":59,"line":60},[57,123968,123661],{"class":63},[57,123970,123971,123973,123975,123977],{"class":59,"line":67},[57,123972,24845],{"class":70},[57,123974,120245],{"class":74},[57,123976,123670],{"class":74},[57,123978,123673],{"class":74},[57,123980,123981,123983,123985,123987],{"class":59,"line":144},[57,123982,24845],{"class":70},[57,123984,120245],{"class":74},[57,123986,123670],{"class":74},[57,123988,123684],{"class":74},[57,123990,123991],{"class":59,"line":150},[57,123992,2673],{"emptyLinePlaceholder":350},[57,123994,123995],{"class":59,"line":162},[57,123996,123693],{"class":63},[57,123998,123999,124001,124003,124005],{"class":59,"line":180},[57,124000,24845],{"class":70},[57,124002,123700],{"class":74},[57,124004,123703],{"class":74},[57,124006,123706],{"class":81},[57,124008,124009,124011,124013],{"class":59,"line":186},[57,124010,24845],{"class":70},[57,124012,123700],{"class":74},[57,124014,123715],{"class":74},[14,124016,123718],{},[14,124018,123721],{},[14,124020,123724,124021,124024],{},[28,124022,124023],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,124026,124027],{},[44,124028],{"alt":46,"src":124029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,124031,124032],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,124034,124035,124037],{},[33,124036,118161],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[394,124039,124041],{"id":124040},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,124043,124044],{},"（1）.查看所连接的主机USB接口的信息",[49,124046,124048],{"className":117493,"code":124047,"language":117495,"meta":46,"style":46},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[28,124049,124050,124080],{"__ignoreMap":46},[57,124051,124052,124054,124056,124059,124061,124063,124065,124067,124070,124073,124075,124078],{"class":59,"line":60},[57,124053,123800],{"class":70},[57,124055,70018],{"class":74},[57,124057,124058],{"class":81}," -a",[57,124060,29485],{"class":81},[57,124062,28691],{"class":140},[57,124064,123800],{"class":70},[57,124066,70018],{"class":74},[57,124068,124069],{"class":81}," -q",[57,124071,124072],{"class":74}," path",[57,124074,25384],{"class":81},[57,124076,124077],{"class":74}," \u002Fdev\u002FttyACM0",[57,124079,238],{"class":140},[57,124081,124082,124084,124086,124088,124090,124092,124094,124096,124098,124100,124102,124105],{"class":59,"line":67},[57,124083,123800],{"class":70},[57,124085,70018],{"class":74},[57,124087,124058],{"class":81},[57,124089,29485],{"class":81},[57,124091,28691],{"class":140},[57,124093,123800],{"class":70},[57,124095,70018],{"class":74},[57,124097,124069],{"class":81},[57,124099,124072],{"class":74},[57,124101,25384],{"class":81},[57,124103,124104],{"class":74}," \u002Fdev\u002FttyUSB0",[57,124106,238],{"class":140},[14,124108,124109],{},[44,124110],{"alt":46,"src":124111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,124113,124114],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,124116,123529],{},[14,124118,123532,124119,123884],{},[28,124120,123535],{},[49,124122,124123],{"className":117493,"code":123539,"language":117495,"meta":46,"style":46},[28,124124,124125],{"__ignoreMap":46},[57,124126,124127,124129,124131],{"class":59,"line":60},[57,124128,24845],{"class":70},[57,124130,118780],{"class":74},[57,124132,123550],{"class":74},[49,124134,124136],{"className":117493,"code":124135,"language":117495,"meta":46,"style":46},"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",[28,124137,124138,124166,124192],{"__ignoreMap":46},[57,124139,124140,124142,124144,124147,124149,124151,124153,124155,124158,124161,124163],{"class":59,"line":60},[57,124141,123563],{"class":140},[57,124143,156],{"class":136},[57,124145,124146],{"class":74},"=\"ttyACM*\",",[57,124148,123571],{"class":70},[57,124150,123574],{"class":74},[57,124152,123603],{"class":70},[57,124154,273],{"class":70},[57,124156,124157],{"class":74}," ATTRS{idProduct}==\"55d4\",",[57,124159,124160],{"class":74}," ATTRS{serial}==\"0001\",",[57,124162,123585],{"class":74},[57,124164,124165],{"class":74}," SYMLINK+=\"ttyACM_MCU\"\n",[57,124167,124168,124170,124172,124174,124176,124178,124180,124182,124184,124187,124189],{"class":59,"line":67},[57,124169,123563],{"class":140},[57,124171,156],{"class":136},[57,124173,124146],{"class":74},[57,124175,123571],{"class":70},[57,124177,123574],{"class":74},[57,124179,123603],{"class":70},[57,124181,273],{"class":70},[57,124183,124157],{"class":74},[57,124185,124186],{"class":74}," ATTRS{serial}==\"0002\",",[57,124188,123585],{"class":74},[57,124190,124191],{"class":74}," SYMLINK+=\"ttyACM_Lidar\"\n",[57,124193,124194,124196,124198,124200,124202,124204,124206,124208,124210,124212],{"class":59,"line":144},[57,124195,123563],{"class":140},[57,124197,156],{"class":136},[57,124199,123568],{"class":74},[57,124201,123571],{"class":70},[57,124203,123574],{"class":74},[57,124205,123603],{"class":70},[57,124207,273],{"class":70},[57,124209,123608],{"class":74},[57,124211,123585],{"class":74},[57,124213,124214],{"class":74}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,124216,123648],{},[14,124218,123651],{},[49,124220,124221],{"className":117493,"code":123654,"language":117495,"meta":46,"style":46},[28,124222,124223,124227,124237,124247,124251,124255,124265],{"__ignoreMap":46},[57,124224,124225],{"class":59,"line":60},[57,124226,123661],{"class":63},[57,124228,124229,124231,124233,124235],{"class":59,"line":67},[57,124230,24845],{"class":70},[57,124232,120245],{"class":74},[57,124234,123670],{"class":74},[57,124236,123673],{"class":74},[57,124238,124239,124241,124243,124245],{"class":59,"line":144},[57,124240,24845],{"class":70},[57,124242,120245],{"class":74},[57,124244,123670],{"class":74},[57,124246,123684],{"class":74},[57,124248,124249],{"class":59,"line":150},[57,124250,2673],{"emptyLinePlaceholder":350},[57,124252,124253],{"class":59,"line":162},[57,124254,123693],{"class":63},[57,124256,124257,124259,124261,124263],{"class":59,"line":180},[57,124258,24845],{"class":70},[57,124260,123700],{"class":74},[57,124262,123703],{"class":74},[57,124264,123706],{"class":81},[57,124266,124267,124269,124271],{"class":59,"line":186},[57,124268,24845],{"class":70},[57,124270,123700],{"class":74},[57,124272,123715],{"class":74},[14,124274,124275,124276],{},"再重新插拔设备即可，或者 ",[33,124277,124278],{},"直接重启系统。",[14,124280,123721],{},[14,124282,123724,124283,124024],{},[28,124284,124023],{},[14,124286,124287],{},[44,124288],{"alt":46,"src":124289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,124291,124032],{},[14,124293,124294,124296],{},[33,124295,118161],{}," 一些设备可能没有串口号等。",[394,124298,124300],{"id":124299},"_744-其他注意事项","7.4.4 其他注意事项",[14,124302,124303,124304,124306,124307,124310,124311,18682,124314,124317,124318,124320],{},"并非所有的USB设备端口号都是",[28,124305,123758],{},"的格式，比如Arduino的端口号可能是",[28,124308,124309],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[28,124312,124313],{},"videon",[28,124315,124316],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[28,124319,124313],{},"端口，绑定时需要关联的也是该接口。",[14,124322,124323,124324,124327,124328,124331,124332,124334,124335,124338,124339,124342,124343,124346,124347,124346,124350,124346,124353,28654],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[28,124325,124326],{},"KERNEL==\"ttyUSB*\"","修改为",[28,124329,124330],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[28,124333,124326],{},"修改为类似于",[28,124336,124337],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[28,124340,124341],{},"video[0,2,4,6]","表示可以绑定的端口为",[28,124344,124345],{},"video0","或",[28,124348,124349],{},"video2",[28,124351,124352],{},"video4",[28,124354,124355],{},"video6",[365,124357,124359],{"id":124358},"_75-挂载内网网页","7.5 挂载内网网页",[14,124361,124362],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,124364,124365],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,124367,124368],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,124370,124371,124372],{},"Termux 下载地址（F-Droid）：",[18,124373,124374],{"href":124374,"rel":124375},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[22],[14,124377,124378],{},"首先打开app后，先更新软件缓存：",[49,124380,124382],{"className":117493,"code":124381,"language":117495,"meta":46,"style":46},"pkg update\n",[28,124383,124384],{"__ignoreMap":46},[57,124385,124386,124389],{"class":59,"line":60},[57,124387,124388],{"class":70},"pkg",[57,124390,26511],{"class":74},[14,124392,124393],{},"然后换源",[49,124395,124397],{"className":117493,"code":124396,"language":117495,"meta":46,"style":46},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[28,124398,124399],{"__ignoreMap":46},[57,124400,124401,124403,124406],{"class":59,"line":60},[57,124402,123271],{"class":70},[57,124404,124405],{"class":140}," $PREFIX",[57,124407,124408],{"class":74},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,124410,124411],{},"将该文件内容替换为下面：",[49,124413,124415],{"className":117493,"code":124414,"language":117495,"meta":46,"style":46},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[28,124416,124417],{"__ignoreMap":46},[57,124418,124419,124422,124425,124428],{"class":59,"line":60},[57,124420,124421],{"class":70},"deb",[57,124423,124424],{"class":74}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[57,124426,124427],{"class":74}," stable",[57,124429,124430],{"class":74}," main\n",[1422,124432,124433,124460],{},[380,124434,124435,124436,124438,124439],{},"如果你使用的是",[28,124437,123271],{},"编辑器：",[1422,124440,124441,124448,124454],{},[380,124442,124443,124444,124447],{},"按 ",[28,124445,124446],{},"Ctrl+O"," 保存文件。",[380,124449,124443,124450,124453],{},[28,124451,124452],{},"Enter"," 确认文件名。",[380,124455,124443,124456,124459],{},[28,124457,124458],{},"Ctrl+X"," 退出编辑器。",[380,124461,124435,124462,124438,124465],{},[28,124463,124464],{},"vim",[1422,124466,124467,124473],{},[380,124468,124443,124469,124472],{},[28,124470,124471],{},"Esc"," 退出编辑模式。",[380,124474,124475,124476,124478],{},"输入 ",[28,124477,119418],{}," 保存并退出。",[14,124480,124481],{},"接下来重新更新软件源：",[49,124483,124485],{"className":117493,"code":124484,"language":117495,"meta":46,"style":46},"pkg update && pkg upgrade\n",[28,124486,124487],{"__ignoreMap":46},[57,124488,124489,124491,124493,124495,124497],{"class":59,"line":60},[57,124490,124388],{"class":70},[57,124492,117544],{"class":74},[57,124494,26459],{"class":140},[57,124496,124388],{"class":70},[57,124498,117530],{"class":74},[14,124500,124501],{},"安装python：",[49,124503,124505],{"className":117493,"code":124504,"language":117495,"meta":46,"style":46},"pkg install python\n",[28,124506,124507],{"__ignoreMap":46},[57,124508,124509,124511,124513],{"class":59,"line":60},[57,124510,124388],{"class":70},[57,124512,75],{"class":74},[57,124514,124515],{"class":74}," python\n",[14,124517,124518,26742],{},[33,124519,124520],{},"通过Termux访问设备存储",[14,124522,124523],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[49,124525,124527],{"className":117493,"code":124526,"language":117495,"meta":46,"style":46},"termux-setup-storage\n",[28,124528,124529],{"__ignoreMap":46},[57,124530,124531],{"class":59,"line":60},[57,124532,124526],{"class":70},[377,124534,124535],{},[380,124536,124537,26742,124540],{},[33,124538,124539],{},"进入HTML文件所在的目录",[377,124541,124542],{},[380,124543,124544,124545,124547],{},"使用",[28,124546,101473],{},"命令进入HTML文件所在的目录：",[49,124549,124551],{"className":117493,"code":124550,"language":117495,"meta":46,"style":46},"cd ~\u002Fyour_html_folder\n",[28,124552,124553],{"__ignoreMap":46},[57,124554,124555,124557],{"class":59,"line":60},[57,124556,101473],{"class":81},[57,124558,124559],{"class":74}," ~\u002Fyour_html_folder\n",[377,124561,124562],{"start":67},[380,124563,124564,26742,124567,124572,124589],{},[33,124565,124566],{},"启动Python HTTP服务器",[377,124568,124569],{},[380,124570,124571],{},"运行以下命令启动一个简单的HTTP服务器：",[49,124573,124575],{"className":117493,"code":124574,"language":117495,"meta":46,"style":46},"python -m http.server 8000\n",[28,124576,124577],{"__ignoreMap":46},[57,124578,124579,124581,124583,124586],{"class":59,"line":60},[57,124580,124],{"class":70},[57,124582,101079],{"class":81},[57,124584,124585],{"class":74}," http.server",[57,124587,124588],{"class":81}," 8000\n",[377,124590,124591],{"start":144},[380,124592,124593,124594,124597],{},"这会在端口",[28,124595,124596],{},"8000","上启动一个Web服务器。",[1422,124599,124600],{},[380,124601,124602],{},"启动服务器后，Termux会显示日志信息，例如：",[49,124604,124606],{"className":121013,"code":124605,"language":121015,"meta":121016,"style":46},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[28,124607,124608],{"__ignoreMap":46},[57,124609,124610],{"class":59,"line":60},[57,124611,124605],{},[1422,124613,124614],{},[380,124615,124616],{},"这表示服务器已成功启动。",[14,124618,124619],{},[33,124620,124621],{},"在浏览器中访问HTML文件",[377,124623,124624],{},[380,124625,124626,26742,124629,124634],{},[33,124627,124628],{},"在同一设备上访问",[377,124630,124631],{},[380,124632,124633],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[49,124635,124638],{"className":124636,"code":124637,"language":71861,"meta":46,"style":46},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[28,124639,124640],{"__ignoreMap":46},[57,124641,124642,124645],{"class":59,"line":60},[57,124643,124644],{"class":140},"http:",[57,124646,124647],{"class":63},"\u002F\u002Flocalhost:8000\n",[1422,124649,124650],{},[380,124651,124652,124653,124656],{},"如果HTML文件中有",[28,124654,124655],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[365,124658,124660],{"id":124659},"_76-linux重点知识","7.6 Linux重点知识",[394,124662,124664],{"id":124663},"_761-关于点的说明","7.6.1 关于点的说明",[14,124666,124667],{},[44,124668],{"alt":46,"src":124669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,124671,124672],{},"一点本目录，两点上目录",[394,124674,124676],{"id":124675},"_762-目录","7.6.2 目录",[22270,124678,124680],{"id":124679},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,124682,124683],{},[33,124684,124685],{},"\u002Fboot:",[14,124687,124688],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,124690,124691],{},[33,124692,124693],{},"\u002Fetc:",[14,124695,124696],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,124698,124699],{},[33,124700,124701],{},"\u002Flib：",[14,124703,124704],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,124706,124707],{},[33,124708,124709],{},"\u002Fsys:",[14,124711,124712],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22270,124714,124716],{"id":124715},"_7622-指令集合","7.6.2.2 指令集合",[14,124718,124719],{},[33,124720,124721],{},"\u002Fbin:",[14,124723,124724],{},"为二进制文件的缩写，存放最经常使用的命令",[14,124726,124727],{},[33,124728,124729],{},"\u002Fsbin:",[14,124731,124732],{},"只有系统管理员才能使用的程序和指令",[22270,124734,124736],{"id":124735},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,124738,124739],{},[33,124740,124741],{},"\u002Fdev:",[14,124743,124744],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,124746,124747],{},[33,124748,124749],{},"\u002Fmedia:",[14,124751,124752],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,124754,124755],{},[33,124756,124757],{},"\u002Fmnt:",[14,124759,124760],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22270,124762,124764],{"id":124763},"_7624-临时文件","7.6.2.4 临时文件",[14,124766,124767],{},[33,124768,124769],{},"\u002Frun:",[14,124771,124772],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,124774,124775],{},[33,124776,124777],{},"\u002Flost+found:",[14,124779,124780],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,124782,124783],{},[33,124784,124785],{},"\u002Ftmp:",[14,124787,124788],{},"这个目录是用来存放一些临时文件的",[22270,124790,124792],{"id":124791},"_7625-账户","7.6.2.5 账户",[14,124794,124795],{},[33,124796,124797],{},"\u002Froot：",[14,124799,124800],{},"系统管理员的用户主目录",[14,124802,124803,26742],{},[33,124804,124805],{},"\u002Fhome",[14,124807,124808],{},"用户的主目录，以用户的账号命名的",[14,124810,124811,26742],{},[33,124812,124813],{},"\u002Fusr",[14,124815,124816],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,124818,124819],{},[33,124820,124821],{},"\u002Fusr\u002Fbin：",[14,124823,124824],{},"系统用户使用的应用程序与指令",[14,124826,124827],{},[33,124828,124829],{},"\u002Fusr\u002Fsbin：",[14,124831,124832],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,124834,124835],{},[33,124836,124837],{},"\u002Fusr\u002Fsrc：",[14,124839,124840],{},"内核源代码默认的放置目录",[22270,124842,124844],{"id":124843},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,124846,124847],{},[33,124848,124849],{},"\u002Fvar：",[14,124851,124852],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,124854,124855],{},[33,124856,124857],{},"\u002Fproc:",[14,124859,124860,124861,124864],{},"管理 ",[33,124862,124863],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22270,124866,124868],{"id":124867},"_7627-扩展用的","7.6.2.7 扩展用的",[14,124870,124871],{},[33,124872,124873],{},"\u002Fopt:",[14,124875,124876],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,124878,124879],{},[33,124880,124881],{},"\u002Fsrv:",[14,124883,124884],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[394,124886,124888],{"id":124887},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,124890,124891],{},[44,124892],{"alt":46,"src":124893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,124895,124896],{},"windows-->linux:",[14,124898,124899],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,124901,124902],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,124904,124905],{},"linux传输文件到windows",[14,124907,124908],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[394,124910,124912],{"id":124911},"_764-易忘知识","7.6.4 易忘知识",[14,124914,124915],{},"操作系统内核查看",[49,124917,124918],{"className":117493,"code":121487,"language":117495,"meta":46,"style":46},[28,124919,124920],{"__ignoreMap":46},[57,124921,124922,124924],{"class":59,"line":60},[57,124923,70401],{"class":70},[57,124925,121496],{"class":81},[14,124927,124928],{},[44,124929],{"alt":46,"src":124930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,124932,124933],{},[44,124934],{"alt":46,"src":124935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[49,124937,124939],{"className":117493,"code":124938,"language":117495,"meta":46,"style":46},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[28,124940,124941,124953],{"__ignoreMap":46},[57,124942,124943,124945,124948,124951],{"class":59,"line":60},[57,124944,121704],{"class":70},[57,124946,124947],{"class":74}," mvtest",[57,124949,124950],{"class":74}," mvtest2",[57,124952,2947],{"class":140},[57,124954,124955],{"class":59,"line":67},[57,124956,124957],{"class":70},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,124959,124960],{},[44,124961],{"alt":46,"src":124962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,124964,124965],{},[44,124966],{"alt":46,"src":124967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,124969,124970,124971,124974],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[28,124972,124973],{},"du -a"," 可以快速查看磁盘使用细节。",[394,124976,124978],{"id":124977},"_765-vim","7.6.5 Vim",[14,124980,124981],{},[44,124982],{"alt":46,"src":124983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,124985,124986],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,124988,124989],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,124991,124992],{},[33,124993,124994],{},"1.命令模式：",[14,124996,124997],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,124999,125000],{},"x 删除当前光标所在处的字符",[14,125002,125003],{},"：切换到底线命令模式，以在最底一行输入命令",[14,125005,125006],{},"a 进行插入模式，在光标下一个位置输入文本",[14,125008,125009],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,125011,125012],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,125014,125015],{},"dd 剪切当前行",[14,125017,125018],{},"yy 复制当前行",[14,125020,125021],{},"p 粘贴剪贴板内容到光标下方",[14,125023,125024],{},"P 粘贴剪贴板内容到光标上方",[14,125026,125027],{},"u 撤销上一次操作",[14,125029,125030],{},"ctrl+r 重做上一次操作",[14,125032,125033,125035],{},[1211,125034],{}," 保存文件",[14,125037,125038,125040],{},[1061,125039],{}," 退出Vim编辑器",[14,125042,125043,125045],{},[1061,125044],{},"! 强制退出Vim编辑器，不保存修改",[14,125047,125048],{},[33,125049,125050],{},"2.输入模式：",[14,125052,125053],{},[44,125054],{"alt":46,"src":125055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,125057,125058],{},[33,125059,125060],{},"3.底线命令模式：",[14,125062,125063],{},[44,125064],{"alt":46,"src":125065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,125067,125068],{},"按下esc可以退出底线命令模式",[394,125070,125072],{"id":125071},"_766-apt","7.6.6 apt",[14,125074,125075],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[394,125077,125079],{"id":125078},"_767-home与root的区别","7.6.7 home与root的区别",[14,125081,125082],{},[44,125083],{"alt":46,"src":125084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,125086,125087],{},[44,125088],{"alt":46,"src":125089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,125091,125092],{},[44,125093],{"alt":46,"src":125094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,125096,125097],{},[44,125098],{"alt":46,"src":125099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[394,125101,125103],{"id":125102},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,125105,125106],{},[18,125107,125108],{"href":125108,"rel":125109},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[22],[377,125111,125112,125115],{},[380,125113,125114],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[380,125116,125117],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,125119,125120],{},[44,125121],{"alt":46,"src":125122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,125124,125125],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,125127,125128],{},[44,125129],{"alt":46,"src":125130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[49,125132,125134],{"className":121013,"code":125133,"language":121015,"meta":121016,"style":46},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[28,125135,125136,125141],{"__ignoreMap":46},[57,125137,125138],{"class":59,"line":60},[57,125139,125140],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[57,125142,125143],{"class":59,"line":67},[57,125144,125145],{},".\u002Fpycharm.sh\n",[14,125147,125148],{},"3️⃣创建.desktop文件",[14,125150,125151],{},[33,125152,125153],{},"原理：",[1422,125155,125156,125166],{},[380,125157,125158,125159,125165],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[33,125160,125161,125164],{},[28,125162,125163],{},".desktop"," 文件"," 来识别应用。",[380,125167,125168,125170,125171],{},[28,125169,125163],{}," 文件相当于一个“应用注册表”，告诉系统：",[1422,125172,125173,125176,125179,125182,125185],{},[380,125174,125175],{},"应用名字（Name）",[380,125177,125178],{},"图标（Icon）",[380,125180,125181],{},"执行命令（Exec）",[380,125183,125184],{},"分类（Categories）",[380,125186,125187],{},"是否需要终端（Terminal）",[49,125189,125191],{"className":121013,"code":125190,"language":121015,"meta":121016,"style":46},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[28,125192,125193,125198],{"__ignoreMap":46},[57,125194,125195],{"class":59,"line":60},[57,125196,125197],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[57,125199,125200],{"class":59,"line":67},[57,125201,125202],{},"nano pycharm.desktop\n",[14,125204,125205],{},"nano是一个命令行下的编辑器，也可以使用vim",[49,125207,125209],{"className":121013,"code":125208,"language":121015,"meta":121016,"style":46},"[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",[28,125210,125211,125216,125221,125226,125231,125236,125241,125246,125251,125256],{"__ignoreMap":46},[57,125212,125213],{"class":59,"line":60},[57,125214,125215],{},"[Desktop Entry]\n",[57,125217,125218],{"class":59,"line":67},[57,125219,125220],{},"Version=1.0\n",[57,125222,125223],{"class":59,"line":144},[57,125224,125225],{},"Type=Application\n",[57,125227,125228],{"class":59,"line":150},[57,125229,125230],{},"Name=PyCharm\n",[57,125232,125233],{"class":59,"line":162},[57,125234,125235],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[57,125237,125238],{"class":59,"line":180},[57,125239,125240],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[57,125242,125243],{"class":59,"line":186},[57,125244,125245],{},"Comment=JetBrains PyCharm IDE\n",[57,125247,125248],{"class":59,"line":197},[57,125249,125250],{},"Categories=Development;IDE;\n",[57,125252,125253],{"class":59,"line":241},[57,125254,125255],{},"Terminal=false\n",[57,125257,125258],{"class":59,"line":249},[57,125259,125260],{},"StartupWMClass=jetbrains-pycharm\n",[1422,125262,125263,125269,125275,125281],{},[380,125264,125265,125268],{},[28,125266,125267],{},"Exec"," → 点击图标时执行的命令",[380,125270,125271,125274],{},[28,125272,125273],{},"Icon"," → 显示在菜单和桌面上的图标",[380,125276,125277,125280],{},[28,125278,125279],{},"Terminal=false"," → 不打开终端",[380,125282,125283,125286],{},[28,125284,125285],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125288,125289,125290],"blockquote",{},[14,125291,125292,125293,125295,125296],{},"可以理解成 ",[28,125294,125163],{}," 文件是 Linux 的 ",[33,125297,125298],{},"快捷方式配置文件",[14,125300,125301],{},"4️⃣设置可执行权限",[49,125303,125305],{"className":121013,"code":125304,"language":121015,"meta":121016,"style":46},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[28,125306,125307],{"__ignoreMap":46},[57,125308,125309],{"class":59,"line":60},[57,125310,125304],{},[14,125312,125313],{},"5️⃣桌面图标启动的话如下：",[49,125315,125317],{"className":121013,"code":125316,"language":121015,"meta":121016,"style":46},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[28,125318,125319,125324],{"__ignoreMap":46},[57,125320,125321],{"class":59,"line":60},[57,125322,125323],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[57,125325,125326],{"class":59,"line":67},[57,125327,125328],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[377,125330,125331],{"start":144},[380,125332,125333],{},"下载Appimage文件实现软件的安装",[14,125335,125336],{},"1️⃣先下载appimage",[14,125338,125339],{},[18,125340,125341],{"href":125341,"rel":125342},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[22],[14,125344,125345],{},[44,125346],{"alt":46,"src":125347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,125349,125350],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,125352,125353],{},[44,125354],{"alt":46,"src":125355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,125357,125358],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,125360,125361],{},[44,125362],{"alt":46,"src":125363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,125365,125366],{},[44,125367],{"alt":46,"src":125368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,125370,125371,125372,125375],{},"3️⃣给他们放在",[28,125373,125374],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,125377,125378],{},"4️⃣给软件执行权限",[49,125380,125382],{"className":121013,"code":125381,"language":121015,"meta":121016,"style":46},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[28,125383,125384,125389],{"__ignoreMap":46},[57,125385,125386],{"class":59,"line":60},[57,125387,125388],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[57,125390,125391],{"class":59,"line":67},[57,125392,125393],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,125395,125396],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[49,125398,125400],{"className":117493,"code":125399,"language":117495,"meta":46,"style":46},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[28,125401,125402,125409,125416,125422],{"__ignoreMap":46},[57,125403,125404,125406],{"class":59,"line":60},[57,125405,101473],{"class":81},[57,125407,125408],{"class":74}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[57,125410,125411,125413],{"class":59,"line":67},[57,125412,101480],{"class":70},[57,125414,125415],{"class":74}," .\u002Fqqmusic.desktop\n",[57,125417,125418,125420],{"class":59,"line":144},[57,125419,124464],{"class":70},[57,125421,125415],{"class":74},[57,125423,125424,125426,125428,125430],{"class":59,"line":150},[57,125425,24845],{"class":70},[57,125427,24848],{"class":74},[57,125429,123330],{"class":74},[57,125431,125415],{"class":74},[14,125433,125434,125436],{},[28,125435,101480],{},"：一个 Linux 命令，主要功能是：",[1422,125438,125439,125442],{},[380,125440,125441],{},"如果文件不存在，就创建一个新的空文件",[380,125443,125444],{},"如果文件已存在，就更新该文件的最后修改时间",[49,125446,125448],{"className":121013,"code":125447,"language":121015,"meta":121016,"style":46},"[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",[28,125449,125450,125454,125459,125464,125469,125473,125478],{"__ignoreMap":46},[57,125451,125452],{"class":59,"line":60},[57,125453,125215],{},[57,125455,125456],{"class":59,"line":67},[57,125457,125458],{},"Name=QQ音乐\n",[57,125460,125461],{"class":59,"line":144},[57,125462,125463],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[57,125465,125466],{"class":59,"line":150},[57,125467,125468],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[57,125470,125471],{"class":59,"line":162},[57,125472,125225],{},[57,125474,125475],{"class":59,"line":180},[57,125476,125477],{},"Categories=Audio;Music;Player;\n",[57,125479,125480],{"class":59,"line":186},[57,125481,125482],{},"Comment=QQ Music Client for Linux\n",[14,125484,125485],{},"将文件复制进去",[14,125487,125488],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,125490,125491],{},[44,125492],{"alt":46,"src":125493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,125495,125496],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,125498,125499],{},[44,125500],{"alt":46,"src":125501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,125503,125504,125505,125508,125509,125512],{},"如果你用的不是KDE，那么也可以直接修改",[28,125506,125507],{},"qqmuic.desktop","：在exec的末尾加上",[28,125510,125511],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[49,125514,125516],{"className":121013,"code":125515,"language":121015,"meta":121016,"style":46},"[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",[28,125517,125518,125522,125526,125531,125535,125539,125543],{"__ignoreMap":46},[57,125519,125520],{"class":59,"line":60},[57,125521,125215],{},[57,125523,125524],{"class":59,"line":67},[57,125525,125458],{},[57,125527,125528],{"class":59,"line":144},[57,125529,125530],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[57,125532,125533],{"class":59,"line":150},[57,125534,125468],{},[57,125536,125537],{"class":59,"line":162},[57,125538,125225],{},[57,125540,125541],{"class":59,"line":180},[57,125542,125477],{},[57,125544,125545],{"class":59,"line":186},[57,125546,125482],{},[14,125548,125549],{},[44,125550],{"alt":46,"src":125551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,125553,125554],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[49,125556,125558],{"className":121013,"code":125557,"language":121015,"meta":121016,"style":46},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[28,125559,125560],{"__ignoreMap":46},[57,125561,125562],{"class":59,"line":60},[57,125563,125557],{},[377,125565,125566],{"start":150},[380,125567,125568],{},"去Flathub上安装软件",[14,125570,125571],{},[18,125572,125573],{"href":125573,"rel":125574},"https:\u002F\u002Fflathub.org\u002F",[22],[14,125576,125577],{},"1️⃣去上面的官网搜索软件+下载软件",[14,125579,125580],{},[44,125581],{"alt":46,"src":125582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[49,125584,125586],{"className":121013,"code":125585,"language":121015,"meta":121016,"style":46},"flatpak install flathub com.obsproject.Studio\n",[28,125587,125588],{"__ignoreMap":46},[57,125589,125590],{"class":59,"line":60},[57,125591,125585],{},[14,125593,125594],{},[44,125595],{"alt":46,"src":125596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,125598,125599],{},"2️⃣运行软件",[14,125601,125602],{},"a.官方方式：",[14,125604,125605],{},[44,125606],{"alt":46,"src":125607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[49,125609,125610],{"className":121013,"code":125585,"language":121015,"meta":121016,"style":46},[28,125611,125612],{"__ignoreMap":46},[57,125613,125614],{"class":59,"line":60},[57,125615,125585],{},[14,125617,125618],{},"b.当普通软件运行：",[14,125620,125621],{},[44,125622],{"alt":46,"src":125623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,125625,125626],{},[44,125627],{"alt":46,"src":125628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[342,125630,125631],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":46,"searchDepth":67,"depth":67,"links":125633},[125634,125635,125640,125641,125647,125648],{"id":122366,"depth":67,"text":122367},{"id":122708,"depth":67,"text":122709,"children":125636},[125637,125638,125639],{"id":122712,"depth":144,"text":122713},{"id":122779,"depth":144,"text":122780},{"id":123040,"depth":144,"text":123041},{"id":123193,"depth":67,"text":123194},{"id":123431,"depth":67,"text":123432,"children":125642},[125643,125644,125645,125646],{"id":123483,"depth":144,"text":123484},{"id":123769,"depth":144,"text":123770},{"id":124040,"depth":144,"text":124041},{"id":124299,"depth":144,"text":124300},{"id":124358,"depth":67,"text":124359},{"id":124659,"depth":67,"text":124660,"children":125649},[125650,125651,125652,125653,125654,125655,125656,125657],{"id":124663,"depth":144,"text":124664},{"id":124675,"depth":144,"text":124676},{"id":124887,"depth":144,"text":124888},{"id":124911,"depth":144,"text":124912},{"id":124977,"depth":144,"text":124978},{"id":125071,"depth":144,"text":125072},{"id":125078,"depth":144,"text":125079},{"id":125102,"depth":144,"text":125103},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122358,"description":347},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125664,"title":125665,"body":125666,"description":347,"extension":348,"meta":125670,"navigation":350,"path":125671,"seo":125672,"stem":125673,"__hash__":125674},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125667,"toc":125668},[],{"title":46,"searchDepth":67,"depth":67,"links":125669},[],{"category":30532},"\u002Fwiki\u002F2025-01-27-linux",{"title":125665,"description":347},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125676,"title":125677,"body":125678,"description":125682,"extension":348,"meta":126073,"navigation":350,"path":126074,"seo":126075,"stem":126076,"__hash__":126077},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125679,"toc":126071},[125680,125683,125687,125704,125707,125760,125764,125766,125806,125815,125819,125822,126063,126068],[14,125681,125682],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125684,125686],{"id":125685},"_1ubuntu环境配置","1.Ubuntu环境配置",[377,125688,125689,125692,125695,125698,125701],{},[380,125690,125691],{},"ubuntu环境换源",[380,125693,125694],{},"安装cuda",[380,125696,125697],{},"安装miniconda",[380,125699,125700],{},"安装pytorch",[380,125702,125703],{},"安装genesis",[14,125705,125706],{},"参考链接：",[49,125708,125710],{"className":51,"code":125709,"language":53,"meta":46,"style":46},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[28,125711,125712],{"__ignoreMap":46},[57,125713,125714,125717,125720,125723,125725,125728,125731,125733,125736,125739,125741,125744,125747,125749,125752,125755,125757],{"class":59,"line":60},[57,125715,125716],{"class":70},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[57,125718,125719],{"class":74},"=blogdetail",[57,125721,125722],{"class":140},"&sharetype",[57,125724,156],{"class":136},[57,125726,125727],{"class":74},"blogdetail",[57,125729,125730],{"class":140},"&sharerId",[57,125732,156],{"class":136},[57,125734,125735],{"class":74},"144728092",[57,125737,125738],{"class":140},"&sharerefer",[57,125740,156],{"class":136},[57,125742,125743],{"class":74},"PC",[57,125745,125746],{"class":140},"&sharesource",[57,125748,156],{"class":136},[57,125750,125751],{"class":74},"qq_69379513",[57,125753,125754],{"class":140},"&sharefrom",[57,125756,156],{"class":136},[57,125758,125759],{"class":74},"from_link\n",[10,125761,125763],{"id":125762},"_2genesis-报错issue","2.Genesis 报错issue",[14,125765,125706],{},[49,125767,125768],{"className":51,"code":125709,"language":53,"meta":46,"style":46},[28,125769,125770],{"__ignoreMap":46},[57,125771,125772,125774,125776,125778,125780,125782,125784,125786,125788,125790,125792,125794,125796,125798,125800,125802,125804],{"class":59,"line":60},[57,125773,125716],{"class":70},[57,125775,125719],{"class":74},[57,125777,125722],{"class":140},[57,125779,156],{"class":136},[57,125781,125727],{"class":74},[57,125783,125730],{"class":140},[57,125785,156],{"class":136},[57,125787,125735],{"class":74},[57,125789,125738],{"class":140},[57,125791,156],{"class":136},[57,125793,125743],{"class":74},[57,125795,125746],{"class":140},[57,125797,156],{"class":136},[57,125799,125751],{"class":74},[57,125801,125754],{"class":140},[57,125803,156],{"class":136},[57,125805,125759],{"class":74},[49,125807,125809],{"className":51,"code":125808,"language":53,"meta":46,"style":46},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[28,125810,125811],{"__ignoreMap":46},[57,125812,125813],{"class":59,"line":60},[57,125814,125808],{"class":70},[10,125816,125818],{"id":125817},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,125820,125821],{},"hello_robot.py",[49,125823,125825],{"className":122,"code":125824,"language":124,"meta":46,"style":46},"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",[28,125826,125827,125833,125848,125852,125864,125876,125880,125893,125897,125916,125926,125936,125950,125954,125958,125963,125967,125977,125984,125998,126005,126015,126020,126024,126042,126047,126051,126058],{"__ignoreMap":46},[57,125828,125829,125831],{"class":59,"line":60},[57,125830,137],{"class":136},[57,125832,45502],{"class":140},[57,125834,125835,125838,125841,125843,125845],{"class":59,"line":67},[57,125836,125837],{"class":140},"os.environ[",[57,125839,125840],{"class":74},"'PYOPENGL_PLATFORM'",[57,125842,4716],{"class":140},[57,125844,156],{"class":136},[57,125846,125847],{"class":74}," 'glx'\n",[57,125849,125850],{"class":59,"line":144},[57,125851,2673],{"emptyLinePlaceholder":350},[57,125853,125854,125856,125859,125861],{"class":59,"line":150},[57,125855,137],{"class":136},[57,125857,125858],{"class":140}," genesis ",[57,125860,31580],{"class":136},[57,125862,125863],{"class":140}," gs\n",[57,125865,125866,125868,125871,125873],{"class":59,"line":162},[57,125867,30934],{"class":136},[57,125869,125870],{"class":140}," pynput ",[57,125872,137],{"class":136},[57,125874,125875],{"class":140}," keyboard\n",[57,125877,125878],{"class":59,"line":180},[57,125879,2673],{"emptyLinePlaceholder":350},[57,125881,125882,125885,125888,125890],{"class":59,"line":186},[57,125883,125884],{"class":140},"gs.init(",[57,125886,125887],{"class":5489},"backend",[57,125889,156],{"class":136},[57,125891,125892],{"class":140},"gs.gpu)\n",[57,125894,125895],{"class":59,"line":197},[57,125896,2673],{"emptyLinePlaceholder":350},[57,125898,125899,125902,125904,125907,125910,125912,125914],{"class":59,"line":241},[57,125900,125901],{"class":140},"scene ",[57,125903,156],{"class":136},[57,125905,125906],{"class":140}," gs.Scene(",[57,125908,125909],{"class":5489},"show_viewer",[57,125911,156],{"class":136},[57,125913,31673],{"class":81},[57,125915,238],{"class":140},[57,125917,125918,125921,125923],{"class":59,"line":249},[57,125919,125920],{"class":140},"plane ",[57,125922,156],{"class":136},[57,125924,125925],{"class":140}," scene.add_entity(gs.morphs.Plane())\n",[57,125927,125928,125931,125933],{"class":59,"line":262},[57,125929,125930],{"class":140},"franka ",[57,125932,156],{"class":136},[57,125934,125935],{"class":140}," scene.add_entity(\n",[57,125937,125938,125941,125943,125945,125948],{"class":59,"line":281},[57,125939,125940],{"class":140},"    gs.morphs.MJCF(",[57,125942,45551],{"class":5489},[57,125944,156],{"class":136},[57,125946,125947],{"class":74},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[57,125949,38244],{"class":140},[57,125951,125952],{"class":59,"line":287},[57,125953,238],{"class":140},[57,125955,125956],{"class":59,"line":298},[57,125957,2673],{"emptyLinePlaceholder":350},[57,125959,125960],{"class":59,"line":311},[57,125961,125962],{"class":140},"scene.build()\n",[57,125964,125965],{"class":59,"line":322},[57,125966,2673],{"emptyLinePlaceholder":350},[57,125968,125969,125971,125974],{"class":59,"line":1929},[57,125970,32144],{"class":136},[57,125972,125973],{"class":70}," on_press",[57,125975,125976],{"class":140},"(key):\n",[57,125978,125979,125982],{"class":59,"line":1950},[57,125980,125981],{"class":136},"    try",[57,125983,4012],{"class":140},[57,125985,125986,125988,125991,125993,125996],{"class":59,"line":1955},[57,125987,2770],{"class":136},[57,125989,125990],{"class":140}," key.char ",[57,125992,3222],{"class":136},[57,125994,125995],{"class":74}," 'q'",[57,125997,4012],{"class":140},[57,125999,126000,126002],{"class":59,"line":1969},[57,126001,16004],{"class":136},[57,126003,126004],{"class":81}," False\n",[57,126006,126007,126010,126013],{"class":59,"line":1974},[57,126008,126009],{"class":136},"    except",[57,126011,126012],{"class":81}," AttributeError",[57,126014,4012],{"class":140},[57,126016,126017],{"class":59,"line":2001},[57,126018,126019],{"class":136},"        pass\n",[57,126021,126022],{"class":59,"line":2006},[57,126023,2673],{"emptyLinePlaceholder":350},[57,126025,126026,126029,126031,126034,126037,126039],{"class":59,"line":2023},[57,126027,126028],{"class":140},"listener ",[57,126030,156],{"class":136},[57,126032,126033],{"class":140}," keyboard.Listener(",[57,126035,126036],{"class":5489},"on_press",[57,126038,156],{"class":136},[57,126040,126041],{"class":140},"on_press)\n",[57,126043,126044],{"class":59,"line":2028},[57,126045,126046],{"class":140},"listener.start()\n",[57,126048,126049],{"class":59,"line":2033},[57,126050,2673],{"emptyLinePlaceholder":350},[57,126052,126053,126055],{"class":59,"line":2038},[57,126054,108860],{"class":136},[57,126056,126057],{"class":140}," listener.running:\n",[57,126059,126060],{"class":59,"line":2052},[57,126061,126062],{"class":140},"    scene.step()\n",[14,126064,126065],{},[44,126066],{"alt":46,"src":126067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[342,126069,126070],{},"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":46,"searchDepth":67,"depth":67,"links":126072},[],{"category":23650},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125677,"description":125682},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126079,"title":126080,"body":126081,"description":347,"extension":348,"meta":126096,"navigation":350,"path":126097,"seo":126098,"stem":126099,"__hash__":126100},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126082,"toc":126093},[126083,126086,126090],[10,126084,126080],{"id":126085},"_1-基础知识",[365,126087,126089],{"id":126088},"_11-js的组成","1.1 js的组成",[14,126091,126092],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":46,"searchDepth":67,"depth":67,"links":126094},[126095],{"id":126088,"depth":67,"text":126089},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126080,"description":347},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126102,"title":126103,"body":126104,"description":347,"extension":348,"meta":126243,"navigation":350,"path":126244,"seo":126245,"stem":126246,"__hash__":126247},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126105,"toc":126231},[126106,126109,126113,126116,126120,126130,126134,126137,126140,126143,126147,126154,126160,126164,126170,126181,126185,126188,126192,126195,126199,126202,126206,126209,126213,126216,126219,126222,126225,126228],[10,126107,126103],{"id":126108},"_2-vscode必备内容",[365,126110,126112],{"id":126111},"_21-标签分类","2.1 标签分类",[14,126114,126115],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[365,126117,126119],{"id":126118},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,126121,126122,126123,126125,126126,126129],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[28,126124,644],{}," 然后按 ",[28,126127,126128],{},"Tab","，快速自动生成基本结构。",[365,126131,126133],{"id":126132},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,126135,126136],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,126138,126139],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,126141,126142],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[365,126144,126146],{"id":126145},"_24-视图缩放","2.4 视图缩放",[14,126148,126149,126150,126153],{},"缩放视图 ",[28,126151,126152],{},"ctrl+"," 可实现代码增大。",[14,126155,126156,126159],{},[28,126157,126158],{},"ctrl-"," 可实现代码减小。",[365,126161,126163],{"id":126162},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,126165,126166,126167,28654],{},"VSCode 新建文件快捷键为 ",[28,126168,126169],{},"ctrl+N",[14,126171,126172,126173,126176,126177,126180],{},"保存快捷键为 ",[28,126174,126175],{},"ctrl+S","，将文本保存为 ",[28,126178,126179],{},".html"," 文件。",[365,126182,126184],{"id":126183},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,126186,126187],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[365,126189,126191],{"id":126190},"_27-vscode-icons","2.7 vscode-icons",[14,126193,126194],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[365,126196,126198],{"id":126197},"_28-easy-less","2.8 Easy LESS",[14,126200,126201],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[365,126203,126205],{"id":126204},"_29-会了吧插件","2.9 会了吧插件",[14,126207,126208],{},"会了吧插件可以展示代码中英语单词的意思。",[365,126210,126212],{"id":126211},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,126214,126215],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,126217,126218],{},"②选定多个相同的单词:ctrl+D",[14,126220,126221],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,126223,126224],{},"④全局替换某些单词:ctrl+h",[14,126226,126227],{},"⑤快速定位到某一行:ctrl+g",[14,126229,126230],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":46,"searchDepth":67,"depth":67,"links":126232},[126233,126234,126235,126236,126237,126238,126239,126240,126241,126242],{"id":126111,"depth":67,"text":126112},{"id":126118,"depth":67,"text":126119},{"id":126132,"depth":67,"text":126133},{"id":126145,"depth":67,"text":126146},{"id":126162,"depth":67,"text":126163},{"id":126183,"depth":67,"text":126184},{"id":126190,"depth":67,"text":126191},{"id":126197,"depth":67,"text":126198},{"id":126204,"depth":67,"text":126205},{"id":126211,"depth":67,"text":126212},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126103,"description":347},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126249,"title":126250,"body":126251,"description":347,"extension":348,"meta":126410,"navigation":350,"path":126411,"seo":126412,"stem":126413,"__hash__":126414},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126252,"toc":126402},[126253,126256,126260,126270,126276,126282,126286,126295,126299,126304,126307,126310,126314,126317,126327,126336,126345,126354,126364,126371,126376,126381,126394],[10,126254,126250],{"id":126255},"_3-html文本与容器标签",[365,126257,126259],{"id":126258},"_31-标题标签","3.1 标题标签",[14,126261,126262,126265,126266,126269],{},[28,126263,126264],{},"\u003Ch1>","我是一级标签",[28,126267,126268],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,126271,126272,126265,126274],{},[28,126273,126264],{},[28,126275,126268],{},[14,126277,123532,126278,126281],{},[28,126279,126280],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[365,126283,126285],{"id":126284},"_32-段落标签","3.2 段落标签",[14,126287,126288,126291,126292],{},[28,126289,126290],{},"\u003Cp>","....",[28,126293,126294],{},"\u003C\u002Fp>",[365,126296,126298],{"id":126297},"_33-换行标签","3.3 换行标签",[14,126300,126301],{},[28,126302,126303],{},"\u003Cbr \u002F>",[14,126305,126306],{},"具有强制换行的作用",[14,126308,126309],{},"单标签",[365,126311,126313],{"id":126312},"_34-文本格式化标签","3.4 文本格式化标签",[14,126315,126316],{},"提供粗体、斜体和下划线等效果",[14,126318,126319,126320,82736,126323,126326],{},"加粗：",[28,126321,126322],{},"\u003Cstrong>...\u003C\u002Fstrong>",[28,126324,126325],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,126328,126329,126330,82736,126333,126326],{},"斜体：",[28,126331,126332],{},"\u003Cem>...\u003C\u002Fem>",[28,126334,126335],{},"\u003Ci>...\u003C\u002Fi>",[14,126337,126338,126339,82736,126342,126326],{},"删除线：",[28,126340,126341],{},"\u003Cdel>...\u003C\u002Fdel>",[28,126343,126344],{},"\u003Cs>...\u003C\u002Fs>",[14,126346,126347,126348,82736,126351,126326],{},"下划线：",[28,126349,126350],{},"\u003Cins>...\u003C\u002Fins>",[28,126352,126353],{},"\u003Cu>...\u003C\u002Fu>",[365,126355,126357,126358,18682,126361,102890],{"id":126356},"_35-div和span标签","3.5 ",[28,126359,126360],{},"\u003Cdiv>",[28,126362,126363],{},"\u003Cspan>",[14,126365,126366,101215,126368,126370],{},[28,126367,126360],{},[28,126369,126363],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,126372,126373],{},[28,126374,126375],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,126377,126378],{},[28,126379,126380],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,126382,126383,126384,126386,126387,126389,126390,126393],{},"两者特点：①",[28,126385,126360],{}," 标签用来布局，但一行通常只放一个 ",[28,126388,126360],{},"。可以理解为一个大盒子，独占一行，在 ",[28,126391,126392],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,126395,77446,126396,126398,126399,126401],{},[28,126397,126363],{}," 标签也可用于布局，一行可以放多个 ",[28,126400,126363],{},"，可理解为小盒子。",{"title":46,"searchDepth":67,"depth":67,"links":126403},[126404,126405,126406,126407,126408],{"id":126258,"depth":67,"text":126259},{"id":126284,"depth":67,"text":126285},{"id":126297,"depth":67,"text":126298},{"id":126312,"depth":67,"text":126313},{"id":126356,"depth":67,"text":126409},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126250,"description":347},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126416,"title":126417,"body":126418,"description":347,"extension":348,"meta":126615,"navigation":350,"path":126616,"seo":126617,"stem":126618,"__hash__":126619},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126419,"toc":126607},[126420,126423,126427,126430,126436,126443,126449,126455,126458,126461,126464,126467,126470,126473,126476,126480,126483,126486,126489,126495,126501,126507,126514,126518,126524,126530,126533,126536,126542,126548,126554,126557,126560,126564,126567,126577,126583,126587,126596,126600,126603],[10,126421,126417],{"id":126422},"_4-html图像与链接",[365,126424,126426],{"id":126425},"_41-图像标签","4.1 图像标签",[14,126428,126429],{},"（1）标签",[14,126431,126432,126435],{},[28,126433,126434],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,126437,126438,126439,126442],{},"src是",[28,126440,126441],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,126444,126445,126446],{},"alt:文本，替换文本。图像不能显示的文字 ",[28,126447,126448],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,126450,126451,126452],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[28,126453,126454],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,126456,126457],{},"width:像素，设置图像的宽度",[14,126459,126460],{},"height:像素，设置图像的高度",[14,126462,126463],{},"border：像素，设置图像的边框粗细",[14,126465,126466],{},"（2）图像标签属性的注意点：",[14,126468,126469],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,126471,126472],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,126474,126475],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[365,126477,126479],{"id":126478},"_42-路径注意要点","4.2 路径注意要点：",[14,126481,126482],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,126484,126485],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,126487,126488],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,126490,126491,126492],{},"①同一级路径：图像文件位于HTML文件同一级，如",[28,126493,126494],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,126496,126497,126498],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[28,126499,126500],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,126502,126503,126504],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[28,126505,126506],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,126508,126509,126510,668],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[18,126511,126512],{"href":126512,"rel":126513},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[22],[365,126515,126517],{"id":126516},"_43-超链接标签","4.3 超链接标签",[14,126519,126520,126523],{},[28,126521,126522],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,126525,126526,126527],{},"①语法格式：",[28,126528,126529],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,126531,126532],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,126534,126535],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,126537,126538,126539],{},"③链接分类：外部链接：",[28,126540,126541],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,126543,126544,126545],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[28,126546,126547],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,126549,126550,126551],{},"空链接：如果当时没有确定链接目标时，",[28,126552,126553],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,126555,126556],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,126558,126559],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[365,126561,126563],{"id":126562},"_44-锚点链接","4.4 锚点链接",[14,126565,126566],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,126568,126569,126570,126573,126574],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[28,126571,126572],{},"\u003Ca href=\"#two\">","第二级",[28,126575,126576],{},"\u003C\u002Fa>",[14,126578,126579,126580],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[28,126581,126582],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[365,126584,126586],{"id":126585},"_45-注释标签","4.5 注释标签",[14,126588,126589,126592,126593],{},[28,126590,126591],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[28,126594,126595],{},"ctrl+\u002F",[365,126597,126599],{"id":126598},"_46-特殊字符","4.6 特殊字符",[14,126601,126602],{},"可以实现添加多个空格",[44,126604],{"style":126605,"src":126606},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":46,"searchDepth":67,"depth":67,"links":126608},[126609,126610,126611,126612,126613,126614],{"id":126425,"depth":67,"text":126426},{"id":126478,"depth":67,"text":126479},{"id":126516,"depth":67,"text":126517},{"id":126562,"depth":67,"text":126563},{"id":126585,"depth":67,"text":126586},{"id":126598,"depth":67,"text":126599},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126417,"description":347},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126621,"title":126622,"body":126623,"description":347,"extension":348,"meta":126916,"navigation":350,"path":126917,"seo":126918,"stem":126919,"__hash__":126920},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126624,"toc":126907},[126625,126628,126632,126635,126638,126641,126644,126647,126650,126653,126656,126659,126679,126685,126689,126692,126695,126698,126701,126704,126707,126711,126714,126717,126720,126723,126736,126741,126744,126747,126762,126765,126768,126771,126774,126777,126781,126784,126791,126794,126797,126800,126803,126806,126812,126815,126818,126824,126827,126830,126833,126839,126842,126845,126859,126866,126869,126872,126879,126888,126891,126894,126897,126901,126904],[10,126626,126622],{"id":126627},"_5-html表格列表与表单",[365,126629,126631],{"id":126630},"_51-表格标签","5.1 表格标签",[14,126633,126634],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,126636,126637],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,126639,126640],{},"②表格基本语法：",[44,126642],{"style":126605,"src":126643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,126645,126646],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[44,126648],{"style":126605,"src":126649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,126651,126652],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[44,126654],{"style":126605,"src":126655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,126657,126658],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,126660,126661,126664,126665,126667,126668,126671,126672,126674,126675,126678],{},[28,126662,126663],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[28,126666,126663],{},"内部必须拥有",[28,126669,126670],{},"\u003Ctr>","标签，一般位于第一行，",[28,126673,126663],{},"比",[28,126676,126677],{},"\u003Cth>","范围广",[14,126680,126681,126684],{},[28,126682,126683],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[365,126686,126688],{"id":126687},"_52-合并单元格","5.2 合并单元格",[14,126690,126691],{},"（1）合并单元格方式：",[14,126693,126694],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,126696,126697],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,126699,126700],{},"（2）目标单元格：",[14,126702,126703],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,126705,126706],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[365,126708,126710],{"id":126709},"_53-列表标签","5.3 列表标签",[14,126712,126713],{},"（1）分类：无序列表、有序列表、自定义列表",[14,126715,126716],{},"①无序列表：",[44,126718],{"style":126605,"src":126719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,126721,126722],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,126724,126725,126728,126729,126732,126733,126735],{},[28,126726,126727],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[28,126730,126731],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[28,126734,126727],{},"中输入其他标签或文字是不对的",[14,126737,126738,126740],{},[28,126739,126731],{},"之间相当于一个容器，可以容纳所有元素",[14,126742,126743],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,126745,126746],{},"在css中去除前边的小圆点采用如下代码:",[49,126748,126752],{"className":126749,"code":126750,"language":126751,"meta":46,"style":46},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[28,126753,126754],{"__ignoreMap":46},[57,126755,126756,126759],{"class":59,"line":60},[57,126757,126758],{"class":51497},"list-style",[57,126760,126761],{"class":140},": none;\n",[14,126763,126764],{},"②有序列表：",[44,126766],{"style":126605,"src":126767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,126769,126770],{},"③自定义列表：",[44,126772],{"style":126605,"src":126773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[44,126775],{"style":126605,"src":126776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[365,126778,126780],{"id":126779},"_54-表单标签","5.4 表单标签",[14,126782,126783],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,126785,126786,126787,126790],{},"（1）表单域：包含单元素的区域，",[28,126788,126789],{},"\u003Cform>","标签可以实现信息的收集和传递。",[44,126792],{"style":126605,"src":126793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,126795,126796],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,126798,126799],{},"表单元素提交必须有name属性",[14,126801,126802],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,126804,126805],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,126807,77423,126808,126811],{},[28,126809,126810],{},"\u003Cinput>","输入表单元素",[44,126813],{"style":126605,"src":126814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[44,126816],{"style":126605,"src":126817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,126819,126820,126821],{},"单选按钮：",[28,126822,126823],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[44,126825],{"style":126605,"src":126826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,126828,126829],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[44,126831],{"style":126605,"src":126832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,126834,126835,126838],{},[33,126836,126837],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,126840,126841],{},"②select下拉表单元素：可以节约页面控件",[44,126843],{"style":126605,"src":126844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,126846,126847,14067,126849,126852,126853,126855,126856,126858],{},[33,126848,454],{},[28,126850,126851],{},"\u003Cselect>","中至少包含一对",[28,126854,102911],{},"；在",[28,126857,102911],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,126860,126861,126862,126865],{},"③",[28,126863,126864],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[44,126867],{"style":126605,"src":126868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,126870,126871],{},"3行20列",[365,126873,126875,126876,102890],{"id":126874},"_55-lable标签","5.5 ",[28,126877,126878],{},"\u003Clable>",[14,126880,126881,126882,126884,126885,126887],{},"它不是表单标签，但常常与表单标签搭配使用，",[28,126883,126878],{},"标签用于绑定一个表单标签，当点击",[28,126886,126878],{},"标签内的文本",[14,126889,126890],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[44,126892],{"style":126605,"src":126893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[44,126895],{"style":126605,"src":126896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[365,126898,126900],{"id":126899},"_56-实例","5.6 实例",[44,126902],{"style":126605,"src":126903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[342,126905,126906],{},"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":46,"searchDepth":67,"depth":67,"links":126908},[126909,126910,126911,126912,126913,126915],{"id":126630,"depth":67,"text":126631},{"id":126687,"depth":67,"text":126688},{"id":126709,"depth":67,"text":126710},{"id":126779,"depth":67,"text":126780},{"id":126874,"depth":67,"text":126914},"5.5 \u003Clable>标签",{"id":126899,"depth":67,"text":126900},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126622,"description":347},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126922,"title":126923,"body":126924,"description":347,"extension":348,"meta":127473,"navigation":350,"path":127474,"seo":127475,"stem":127476,"__hash__":127477},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126925,"toc":127448},[126926,126929,126933,126936,126939,126943,126946,126949,126952,126955,126958,126961,126964,126968,126971,126975,126978,126981,126984,126988,126991,126994,126997,127003,127006,127009,127012,127015,127018,127021,127024,127057,127061,127064,127067,127070,127074,127077,127080,127083,127086,127089,127093,127096,127099,127102,127106,127109,127113,127116,127120,127123,127128,127132,127135,127139,127142,127145,127148,127151,127178,127181,127185,127188,127191,127196,127199,127202,127206,127209,127214,127217,127220,127223,127227,127230,127233,127236,127240,127243,127246,127249,127253,127257,127260,127300,127303,127307,127314,127317,127321,127324,127370,127374,127377,127380,127383,127411,127415,127418,127445],[10,126927,126923],{"id":126928},"_6-css语法与文本样式",[365,126930,126932],{"id":126931},"_61-css语法规范","6.1 css语法规范",[14,126934,126935],{},"由两部分组成，选择器及一条或多条声明",[44,126937],{"style":126605,"src":126938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,126940,126941],{},[33,126942,454],{},[14,126944,126945],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,126947,126948],{},"②属性与属性值以“键值对”的形式出现",[14,126950,126951],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,126953,126954],{},"④属性和属性值之间用英文“;”分开",[44,126956],{"style":126605,"src":126957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[44,126959],{"style":126605,"src":126960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[44,126962],{"style":126605,"src":126963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[365,126965,126967],{"id":126966},"_62-css选择器","6.2 css选择器",[14,126969,126970],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[394,126972,126974],{"id":126973},"_621-标签选择器","6.2.1 标签选择器",[14,126976,126977],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,126979,126980],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[44,126982],{"style":126605,"src":126983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[394,126985,126987],{"id":126986},"_622-类选择器","6.2.2 类选择器",[14,126989,126990],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,126992,126993],{},"②样例",[44,126995],{"style":126605,"src":126996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,126998,126999,127000,127002],{},"③ ",[33,127001,126837],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,127004,127005],{},"可以理解为给这个标签起了个名字，来表示；",[14,127007,127008],{},"长名称或词组可以使用横线来为选择器命名；",[14,127010,127011],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,127013,127014],{},"命名要有意义；",[44,127016],{"style":126605,"src":127017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,127019,127020],{},"类选择器也可以指定特殊的元素p.center{}",[14,127022,127023],{},"p.center和.center都对",[49,127025,127027],{"className":126749,"code":127026,"language":126751,"meta":46,"style":46},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[28,127028,127029,127034,127043,127053],{"__ignoreMap":46},[57,127030,127031],{"class":59,"line":60},[57,127032,127033],{"class":63},"\u002F* 类选择器指定特殊元素 *\u002F\n",[57,127035,127036,127038,127041],{"class":59,"line":67},[57,127037,14],{"class":51497},[57,127039,127040],{"class":70},".center",[57,127042,15844],{"class":140},[57,127044,127045,127047,127049,127051],{"class":59,"line":144},[57,127046,70723],{"class":81},[57,127048,51634],{"class":140},[57,127050,51789],{"class":81},[57,127052,1576],{"class":140},[57,127054,127055],{"class":59,"line":150},[57,127056,1847],{"class":140},[394,127058,127060],{"id":127059},"_623-多类名使用","6.2.3 多类名使用",[14,127062,127063],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[44,127065],{"style":126605,"src":127066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,127068,127069],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[394,127071,127073],{"id":127072},"_624-id选择器","6.2.4 id选择器",[14,127075,127076],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,127078,127079],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[44,127081],{"style":126605,"src":127082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,127084,127085],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,127087,127088],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[394,127090,127092],{"id":127091},"_625-通配符选择器","6.2.5 通配符选择器",[14,127094,127095],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,127097,127098],{},"* {",[14,127100,127101],{},"color=\"red\"}",[394,127103,127105],{"id":127104},"_626-总结","6.2.6 总结",[44,127107],{"style":126605,"src":127108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[365,127110,127112],{"id":127111},"_63-css字体属性","6.3 css字体属性",[14,127114,127115],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[394,127117,127119],{"id":127118},"_631-字体系列","6.3.1 字体系列",[14,127121,127122],{},"font-family: '宋体';",[14,127124,127125,127127],{},[33,127126,454],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[394,127129,127131],{"id":127130},"_632-字体大小","6.3.2 字体大小",[14,127133,127134],{},"font-size: 20px",[14,127136,127137,26742],{},[33,127138,126837],{},[14,127140,127141],{},"①px（像素）大小是网页的最常用单位",[14,127143,127144],{},"②谷歌浏览器默认为16px",[14,127146,127147],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,127149,127150],{},"④可以给body指定整个页面的大小：会自动引用",[49,127152,127154],{"className":126749,"code":127153,"language":126751,"meta":46,"style":46},"body {\n  font-size: 16px;\n}\n",[28,127155,127156,127162,127174],{"__ignoreMap":46},[57,127157,127158,127160],{"class":59,"line":60},[57,127159,51997],{"class":51497},[57,127161,15844],{"class":140},[57,127163,127164,127166,127168,127170,127172],{"class":59,"line":67},[57,127165,70823],{"class":81},[57,127167,51634],{"class":140},[57,127169,1017],{"class":81},[57,127171,51689],{"class":136},[57,127173,1576],{"class":140},[57,127175,127176],{"class":59,"line":144},[57,127177,1847],{"class":140},[14,127179,127180],{},"⑤标题标签比较特殊，需要单独指定大小",[394,127182,127184],{"id":127183},"_633-字体粗细","6.3.3 字体粗细",[14,127186,127187],{},"font-weight: bold;",[14,127189,127190],{},"font-weight: 100；",[14,127192,127193,127195],{},[33,127194,454],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,127197,127198],{},"font-weight= 400;",[14,127200,127201],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[394,127203,127205],{"id":127204},"_634-文字样式","6.3.4 文字样式",[14,127207,127208],{},"font-style: normal；",[14,127210,127211,26742],{},[33,127212,127213],{},"属性值",[14,127215,127216],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,127218,127219],{},"②italic：浏览器会显示斜体的字体样式",[44,127221],{"style":126605,"src":127222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[394,127224,127226],{"id":127225},"_635-字体符合属性","6.3.5 字体符合属性",[44,127228],{"style":126605,"src":127229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[44,127231],{"style":126605,"src":127232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,127234,127235],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,127237,127238,26742],{},[33,127239,126837],{},[14,127241,127242],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,127244,127245],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,127247,127248],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[365,127250,127252],{"id":127251},"_64-css-test文本属性","6.4 css test文本属性",[394,127254,127256],{"id":127255},"_641-文本颜色","6.4.1 文本颜色",[14,127258,127259],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[49,127261,127263],{"className":126749,"code":127262,"language":126751,"meta":46,"style":46},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[28,127264,127265,127270,127276,127286,127291,127296],{"__ignoreMap":46},[57,127266,127267],{"class":59,"line":60},[57,127268,127269],{"class":63},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[57,127271,127272,127274],{"class":59,"line":67},[57,127273,14],{"class":51497},[57,127275,15844],{"class":140},[57,127277,127278,127280,127282,127284],{"class":59,"line":144},[57,127279,71102],{"class":81},[57,127281,51634],{"class":140},[57,127283,57618],{"class":81},[57,127285,1576],{"class":140},[57,127287,127288],{"class":59,"line":150},[57,127289,127290],{"class":63},"  \u002F* color: #ff0000; *\u002F\n",[57,127292,127293],{"class":59,"line":162},[57,127294,127295],{"class":63},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[57,127297,127298],{"class":59,"line":180},[57,127299,1847],{"class":140},[44,127301],{"style":126605,"src":127302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[394,127304,127306],{"id":127305},"_642-对齐文本","6.4.2 对齐文本",[14,127308,127309,127310,127313],{},"text-align属于用于设置元素内文本内容的 ",[33,127311,127312],{},"水平对齐"," 方式",[14,127315,127316],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[394,127318,127320],{"id":127319},"_643-装饰文本","6.4.3 装饰文本",[14,127322,127323],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[49,127325,127327],{"className":126749,"code":127326,"language":126751,"meta":46,"style":46},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[28,127328,127329,127335,127345,127349,127355,127366],{"__ignoreMap":46},[57,127330,127331,127333],{"class":59,"line":60},[57,127332,18],{"class":51497},[57,127334,15844],{"class":140},[57,127336,127337,127339,127341,127343],{"class":59,"line":67},[57,127338,70699],{"class":81},[57,127340,51634],{"class":140},[57,127342,54934],{"class":81},[57,127344,1576],{"class":140},[57,127346,127347],{"class":59,"line":144},[57,127348,1847],{"class":140},[57,127350,127351,127353],{"class":59,"line":150},[57,127352,14],{"class":51497},[57,127354,15844],{"class":140},[57,127356,127357,127359,127361,127364],{"class":59,"line":162},[57,127358,70699],{"class":81},[57,127360,51634],{"class":140},[57,127362,127363],{"class":81},"underline",[57,127365,1576],{"class":140},[57,127367,127368],{"class":59,"line":180},[57,127369,1847],{"class":140},[394,127371,127373],{"id":127372},"_644-文本缩进","6.4.4 文本缩进",[14,127375,127376],{},"实现文本的第一行首行缩进自己指定的距离",[14,127378,127379],{},"20px往右边走；-20px往左边走",[14,127381,127382],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[49,127384,127386],{"className":126749,"code":127385,"language":126751,"meta":46,"style":46},"p {\n  text-indent: 2em;\n}\n",[28,127387,127388,127394,127407],{"__ignoreMap":46},[57,127389,127390,127392],{"class":59,"line":60},[57,127391,14],{"class":51497},[57,127393,15844],{"class":140},[57,127395,127396,127399,127401,127403,127405],{"class":59,"line":67},[57,127397,127398],{"class":81},"  text-indent",[57,127400,51634],{"class":140},[57,127402,498],{"class":81},[57,127404,23825],{"class":136},[57,127406,1576],{"class":140},[57,127408,127409],{"class":59,"line":144},[57,127410,1847],{"class":140},[394,127412,127414],{"id":127413},"_645-行间距","6.4.5 行间距",[14,127416,127417],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[49,127419,127421],{"className":126749,"code":127420,"language":126751,"meta":46,"style":46},"p {\n  line-height: 1.6;\n}\n",[28,127422,127423,127429,127441],{"__ignoreMap":46},[57,127424,127425,127427],{"class":59,"line":60},[57,127426,14],{"class":51497},[57,127428,15844],{"class":140},[57,127430,127431,127434,127436,127439],{"class":59,"line":67},[57,127432,127433],{"class":81},"  line-height",[57,127435,51634],{"class":140},[57,127437,127438],{"class":81},"1.6",[57,127440,1576],{"class":140},[57,127442,127443],{"class":59,"line":144},[57,127444,1847],{"class":140},[342,127446,127447],{},"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":46,"searchDepth":67,"depth":67,"links":127449},[127450,127451,127459,127466],{"id":126931,"depth":67,"text":126932},{"id":126966,"depth":67,"text":126967,"children":127452},[127453,127454,127455,127456,127457,127458],{"id":126973,"depth":144,"text":126974},{"id":126986,"depth":144,"text":126987},{"id":127059,"depth":144,"text":127060},{"id":127072,"depth":144,"text":127073},{"id":127091,"depth":144,"text":127092},{"id":127104,"depth":144,"text":127105},{"id":127111,"depth":67,"text":127112,"children":127460},[127461,127462,127463,127464,127465],{"id":127118,"depth":144,"text":127119},{"id":127130,"depth":144,"text":127131},{"id":127183,"depth":144,"text":127184},{"id":127204,"depth":144,"text":127205},{"id":127225,"depth":144,"text":127226},{"id":127251,"depth":67,"text":127252,"children":127467},[127468,127469,127470,127471,127472],{"id":127255,"depth":144,"text":127256},{"id":127305,"depth":144,"text":127306},{"id":127319,"depth":144,"text":127320},{"id":127372,"depth":144,"text":127373},{"id":127413,"depth":144,"text":127414},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126923,"description":347},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127479,"title":127480,"body":127481,"description":347,"extension":348,"meta":128130,"navigation":350,"path":128131,"seo":128132,"stem":128133,"__hash__":128134},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127482,"toc":128111},[127483,127486,127490,127494,127554,127558,127568,127571,127574,127578,127603,127607,127610,127613,127616,127619,127622,127626,127629,127632,127674,127677,127703,127709,127712,127716,127720,127726,127729,127732,127735,127738,127741,127744,127789,127793,127796,127799,127803,127807,127836,127839,127844,127847,127850,127853,127856,127860,127864,127867,127869,127872,127876,127879,127883,127886,127889,127892,127896,127900,127906,127916,127919,127922,127925,127928,127931,128054,128062,128070,128108],[10,127484,127480],{"id":127485},"_7-css引入方式与选择器进阶",[365,127487,127489],{"id":127488},"_71-css引入方式","7.1 css引入方式",[394,127491,127493],{"id":127492},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[49,127495,127499],{"className":127496,"code":127497,"language":127498,"meta":46,"style":46},"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",[28,127500,127501,127509,127516,127528,127541,127546],{"__ignoreMap":46},[57,127502,127503,127505,127507],{"class":59,"line":60},[57,127504,1326],{"class":140},[57,127506,342],{"class":51497},[57,127508,51504],{"class":140},[57,127510,127511,127514],{"class":59,"line":67},[57,127512,127513],{"class":51497},"  h1",[57,127515,15844],{"class":140},[57,127517,127518,127521,127523,127526],{"class":59,"line":144},[57,127519,127520],{"class":81},"    color",[57,127522,51634],{"class":140},[57,127524,127525],{"class":81},"blue",[57,127527,1576],{"class":140},[57,127529,127530,127533,127535,127537,127539],{"class":59,"line":150},[57,127531,127532],{"class":81},"    font-size",[57,127534,51634],{"class":140},[57,127536,1216],{"class":81},[57,127538,51689],{"class":136},[57,127540,1576],{"class":140},[57,127542,127543],{"class":59,"line":162},[57,127544,127545],{"class":140},"  }\n",[57,127547,127548,127550,127552],{"class":59,"line":180},[57,127549,51982],{"class":140},[57,127551,342],{"class":51497},[57,127553,51504],{"class":140},[14,127555,127556,26742],{},[33,127557,126837],{},[14,127559,77423,127560,127563,127564,127567],{},[28,127561,127562],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[28,127565,127566],{},"\u003Chead>","标签中",[14,127569,127570],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,127572,127573],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[394,127575,127577],{"id":127576},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[49,127579,127581],{"className":127496,"code":127580,"language":127498,"meta":46,"style":46},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[28,127582,127583],{"__ignoreMap":46},[57,127584,127585,127587,127589,127591,127593,127596,127599,127601],{"class":59,"line":60},[57,127586,1326],{"class":140},[57,127588,14],{"class":51497},[57,127590,62823],{"class":70},[57,127592,156],{"class":140},[57,127594,127595],{"class":74},"\"color: red; font-size: 16px;\"",[57,127597,127598],{"class":140},">这是一个段落\u003C\u002F",[57,127600,14],{"class":51497},[57,127602,51504],{"class":140},[14,127604,127605,26742],{},[33,127606,126837],{},[14,127608,127609],{},"①style其实就是标签的属性",[14,127611,127612],{},"②在双引号中间，写法要符合css规范",[14,127614,127615],{},"③可以控制当前的标签设置样式",[14,127617,127618],{},"④书写繁琐，简单时才用",[14,127620,127621],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[394,127623,127625],{"id":127624},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,127627,127628],{},"使用最多，单独建一个css文件，然后html引用",[14,127630,127631],{},"①css文件部分： style.css",[49,127633,127635],{"className":126749,"code":127634,"language":126751,"meta":46,"style":46},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[28,127636,127637,127642,127648,127658,127670],{"__ignoreMap":46},[57,127638,127639],{"class":59,"line":60},[57,127640,127641],{"class":63},"\u002F* style.css *\u002F\n",[57,127643,127644,127646],{"class":59,"line":67},[57,127645,10],{"class":51497},[57,127647,15844],{"class":140},[57,127649,127650,127652,127654,127656],{"class":59,"line":144},[57,127651,71102],{"class":81},[57,127653,51634],{"class":140},[57,127655,127525],{"class":81},[57,127657,1576],{"class":140},[57,127659,127660,127662,127664,127666,127668],{"class":59,"line":150},[57,127661,70823],{"class":81},[57,127663,51634],{"class":140},[57,127665,1216],{"class":81},[57,127667,51689],{"class":136},[57,127669,1576],{"class":140},[57,127671,127672],{"class":59,"line":162},[57,127673,1847],{"class":140},[14,127675,127676],{},"②html部分",[49,127678,127680],{"className":127496,"code":127679,"language":127498,"meta":46,"style":46},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[28,127681,127682],{"__ignoreMap":46},[57,127683,127684,127686,127688,127690,127692,127694,127696,127698,127701],{"class":59,"line":60},[57,127685,1326],{"class":140},[57,127687,69202],{"class":51497},[57,127689,69205],{"class":70},[57,127691,156],{"class":140},[57,127693,69210],{"class":74},[57,127695,61254],{"class":70},[57,127697,156],{"class":140},[57,127699,127700],{"class":74},"\"style.css\"",[57,127702,51504],{"class":140},[14,127704,127705,127708],{},[28,127706,127707],{},"\u003Chr>","水平线标签（但是不常用！）",[14,127710,127711],{},"ctrl+0回到页面原来大小",[365,127713,127715],{"id":127714},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[394,127717,127719],{"id":127718},"_721-快速生成html","7.2.1 快速生成html",[14,127721,127722,127723],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[28,127724,127725],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,127727,127728],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,127730,127731],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,127733,127734],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,127736,127737],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,127739,127740],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,127742,127743],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[49,127745,127747],{"className":127496,"code":127746,"language":127498,"meta":46,"style":46},"\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",[28,127748,127749,127754,127759,127764,127769,127774,127779,127784],{"__ignoreMap":46},[57,127750,127751],{"class":59,"line":60},[57,127752,127753],{"class":63},"\u003C!-- Emmet 语法示例 -->\n",[57,127755,127756],{"class":59,"line":67},[57,127757,127758],{"class":63},"\u003C!-- div*3        → 生成3个div -->\n",[57,127760,127761],{"class":59,"line":144},[57,127762,127763],{"class":63},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[57,127765,127766],{"class":59,"line":150},[57,127767,127768],{"class":63},"\u003C!-- div+p        → 兄弟div和p -->\n",[57,127770,127771],{"class":59,"line":162},[57,127772,127773],{"class":63},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[57,127775,127776],{"class":59,"line":180},[57,127777,127778],{"class":63},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[57,127780,127781],{"class":59,"line":186},[57,127782,127783],{"class":63},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[57,127785,127786],{"class":59,"line":197},[57,127787,127788],{"class":63},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[394,127790,127792],{"id":127791},"_722-快速生成css","7.2.2 快速生成css",[14,127794,127795],{},"简写开头",[14,127797,127798],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[365,127800,127802],{"id":127801},"_73-css复合选择器","7.3 css复合选择器",[394,127804,127806],{"id":127805},"_731-后代选择器","7.3.1 后代选择器",[49,127808,127810],{"className":126749,"code":127809,"language":126751,"meta":46,"style":46},".parent .child {\n  color: blue;\n}\n",[28,127811,127812,127822,127832],{"__ignoreMap":46},[57,127813,127814,127817,127820],{"class":59,"line":60},[57,127815,127816],{"class":70},".parent",[57,127818,127819],{"class":70}," .child",[57,127821,15844],{"class":140},[57,127823,127824,127826,127828,127830],{"class":59,"line":67},[57,127825,71102],{"class":81},[57,127827,51634],{"class":140},[57,127829,127525],{"class":81},[57,127831,1576],{"class":140},[57,127833,127834],{"class":59,"line":144},[57,127835,1847],{"class":140},[14,127837,127838],{},"元素1 元素2 {样式声明}",[14,127840,127841],{},[33,127842,127843],{},"注意点:",[14,127845,127846],{},"①元素1和元素2中间用空格隔开",[14,127848,127849],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,127851,127852],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,127854,127855],{},"④元素1和元素2可以是任意基础选择器",[394,127857,127859],{"id":127858},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,127861,127862],{},[33,127863,127843],{},[14,127865,127866],{},"①元素1和元素2中间用大于号隔开",[14,127868,127849],{},[14,127870,127871],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[394,127873,127875],{"id":127874},"_733-并集选择器","7.3.3 并集选择器",[14,127877,127878],{},"元素1，元素2 {样式声明}",[14,127880,127881],{},[33,127882,127843],{},[14,127884,127885],{},"①元素1和元素2中间用逗号隔开",[14,127887,127888],{},"②逗号可以理解为和的意思",[14,127890,127891],{},"③并集选择器通常用于集体声明",[394,127893,127895],{"id":127894},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,127897,127898],{},[33,127899,127843],{},[14,127901,127902,127903,127905],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69202,127904],{},"－:visited－:hover－:active。",[14,127907,127908,127909,127912,127913,26009],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127910,127911],"hover",{}," 、 ",[127914,127915],"first-child",{},[14,127917,127918],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,127920,127921],{},"link对没访问的进行设置",[14,127923,127924],{},"vistied对已访问的进行改变",[14,127926,127927],{},"hover鼠标经过就会变",[14,127929,127930],{},"active常按(点)就会变",[49,127932,127934],{"className":126749,"code":127933,"language":126751,"meta":46,"style":46},"\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",[28,127935,127936,127941,127950,127960,127970,127974,127983,127994,127998,128006,128016,128026,128030,128039,128050],{"__ignoreMap":46},[57,127937,127938],{"class":59,"line":60},[57,127939,127940],{"class":63},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[57,127942,127943,127945,127948],{"class":59,"line":67},[57,127944,18],{"class":51497},[57,127946,127947],{"class":70},":link",[57,127949,15844],{"class":140},[57,127951,127952,127954,127956,127958],{"class":59,"line":144},[57,127953,71102],{"class":81},[57,127955,51634],{"class":140},[57,127957,62566],{"class":81},[57,127959,1576],{"class":140},[57,127961,127962,127964,127966,127968],{"class":59,"line":150},[57,127963,70699],{"class":81},[57,127965,51634],{"class":140},[57,127967,54934],{"class":81},[57,127969,1576],{"class":140},[57,127971,127972],{"class":59,"line":162},[57,127973,1847],{"class":140},[57,127975,127976,127978,127981],{"class":59,"line":180},[57,127977,18],{"class":51497},[57,127979,127980],{"class":70},":visited",[57,127982,15844],{"class":140},[57,127984,127985,127987,127989,127992],{"class":59,"line":186},[57,127986,71102],{"class":81},[57,127988,51634],{"class":140},[57,127990,127991],{"class":81},"purple",[57,127993,1576],{"class":140},[57,127995,127996],{"class":59,"line":197},[57,127997,1847],{"class":140},[57,127999,128000,128002,128004],{"class":59,"line":241},[57,128001,18],{"class":51497},[57,128003,61137],{"class":70},[57,128005,15844],{"class":140},[57,128007,128008,128010,128012,128014],{"class":59,"line":249},[57,128009,71102],{"class":81},[57,128011,51634],{"class":140},[57,128013,55086],{"class":81},[57,128015,1576],{"class":140},[57,128017,128018,128020,128022,128024],{"class":59,"line":262},[57,128019,70699],{"class":81},[57,128021,51634],{"class":140},[57,128023,127363],{"class":81},[57,128025,1576],{"class":140},[57,128027,128028],{"class":59,"line":281},[57,128029,1847],{"class":140},[57,128031,128032,128034,128037],{"class":59,"line":287},[57,128033,18],{"class":51497},[57,128035,128036],{"class":70},":active",[57,128038,15844],{"class":140},[57,128040,128041,128043,128045,128048],{"class":59,"line":298},[57,128042,71102],{"class":81},[57,128044,51634],{"class":140},[57,128046,128047],{"class":81},"green",[57,128049,1576],{"class":140},[57,128051,128052],{"class":59,"line":311},[57,128053,1847],{"class":140},[394,128055,128057,128058,128061],{"id":128056},"_735-伪类选择器","7.3.5 ",[128059,128060],"focus",{},"伪类选择器",[14,128063,128064,128066,128067,128069],{},[128059,128065],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[28,128068,126810],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[49,128071,128073],{"className":126749,"code":128072,"language":126751,"meta":46,"style":46},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[28,128074,128075,128083,128094,128104],{"__ignoreMap":46},[57,128076,128077,128079,128081],{"class":59,"line":60},[57,128078,54018],{"class":51497},[57,128080,62097],{"class":70},[57,128082,15844],{"class":140},[57,128084,128085,128088,128090,128092],{"class":59,"line":67},[57,128086,128087],{"class":81},"  border-color",[57,128089,51634],{"class":140},[57,128091,55086],{"class":81},[57,128093,1576],{"class":140},[57,128095,128096,128098,128100,128102],{"class":59,"line":144},[57,128097,70995],{"class":81},[57,128099,51634],{"class":140},[57,128101,54934],{"class":81},[57,128103,1576],{"class":140},[57,128105,128106],{"class":59,"line":150},[57,128107,1847],{"class":140},[342,128109,128110],{},"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":46,"searchDepth":67,"depth":67,"links":128112},[128113,128118,128122],{"id":127488,"depth":67,"text":127489,"children":128114},[128115,128116,128117],{"id":127492,"depth":144,"text":127493},{"id":127576,"depth":144,"text":127577},{"id":127624,"depth":144,"text":127625},{"id":127714,"depth":67,"text":127715,"children":128119},[128120,128121],{"id":127718,"depth":144,"text":127719},{"id":127791,"depth":144,"text":127792},{"id":127801,"depth":67,"text":127802,"children":128123},[128124,128125,128126,128127,128128],{"id":127805,"depth":144,"text":127806},{"id":127858,"depth":144,"text":127859},{"id":127874,"depth":144,"text":127875},{"id":127894,"depth":144,"text":127895},{"id":128056,"depth":144,"text":128129},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127480,"description":347},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128136,"title":128137,"body":128138,"description":347,"extension":348,"meta":130061,"navigation":350,"path":130062,"seo":130063,"stem":130064,"__hash__":130065},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128139,"toc":130035},[128140,128143,128147,128156,128160,128186,128191,128194,128197,128200,128203,128207,128210,128220,128228,128232,128267,128272,128275,128278,128281,128284,128288,128291,128300,128304,128317,128322,128325,128328,128331,128335,128338,128342,128345,128400,128403,128434,128437,128491,128495,128498,128664,128787,128790,128793,128796,128799,128803,128806,128810,128813,128816,128820,128823,128854,128881,128909,128912,128916,128942,128985,128989,129083,129086,129113,129116,129119,129122,129125,129128,129131,129134,129137,129140,129144,129201,129228,129232,129280,129284,129325,129327,129330,129333,129336,129339,129343,129435,129438,129441,129444,129448,129571,129772,129776,129780,129783,129786,129789,129793,129796,129799,129824,129827,129830,129833,129836,129839,129843,129851,129913,129916,129974,129977,129980,129983,129986,129989,129992,129995,130032],[10,128141,128137],{"id":128142},"_8-css显示模式与背景特性",[365,128144,128146],{"id":128145},"_81-css元素显示模式","8.1 css元素显示模式",[14,128148,128149,128150,128152,128153,128155],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[28,128151,126360],{},"自己占一行，比如一行可以放多个",[28,128154,126363],{},"，HTML 元素一般分为块元素和行内元素两种类型",[394,128157,128159],{"id":128158},"_811-块元素","8.1.1 块元素",[14,128161,128162,128163,128165,128166,630,128169,630,128171,630,128173,630,128176,630,128179,128182,128183,128185],{},"常见的块元素有",[28,128164,126264],{},"~",[28,128167,128168],{},"\u003Ch6>",[28,128170,126290],{},[28,128172,126360],{},[28,128174,128175],{},"\u003Cul>",[28,128177,128178],{},"\u003Col>",[28,128180,128181],{},"\u003Cli>","等，其中 ",[28,128184,126360],{}," 标签是最典型的块元素",[14,128187,128188],{},[33,128189,128190],{},"块级元素的特点：",[14,128192,128193],{},"① 比较霸道，自己独占一行。",[14,128195,128196],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,128198,128199],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,128201,128202],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,128204,128205],{},[33,128206,454],{},[14,128208,128209],{},"①文字类的元素内不能使用块级元素",[14,128211,77446,128212,128214,128215,128217,128218],{},[28,128213,126290],{}," 标签主要用于存放文字，因此 ",[28,128216,126290],{}," 里面不能放块级元素，特别是不能放",[28,128219,126360],{},[14,128221,128222,128223,128165,128225,128227],{},"⑥同理， ",[28,128224,126264],{},[28,128226,128168],{},"等都是文字类块级标签，里面也不能放其他块级元素",[394,128229,128231],{"id":128230},"_812-行内元素","8.1.2 行内元素",[14,128233,128234,128235,630,128237,630,128240,630,128243,630,128246,630,128249,630,128252,630,128255,630,128258,630,128261,128263,128264,128266],{},"常见的行内元素有 ",[28,128236,126522],{},[28,128238,128239],{},"\u003Cstrong>",[28,128241,128242],{},"\u003Cb>",[28,128244,128245],{},"\u003Cem>",[28,128247,128248],{},"\u003Ci>",[28,128250,128251],{},"\u003Cdel>",[28,128253,128254],{},"\u003Cs>",[28,128256,128257],{},"\u003Cins>",[28,128259,128260],{},"\u003Cu>",[28,128262,126363],{}," 等，其中 ",[28,128265,126363],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,128268,128269],{},[33,128270,128271],{},"特点：",[14,128273,128274],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,128276,128277],{},"② 高、宽直接设置是无效的。",[14,128279,128280],{},"③ 默认宽度就是它本身内容的宽度。",[14,128282,128283],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,128285,128286],{},[33,128287,454],{},[14,128289,128290],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,128292,128293,128294,128296,128297,128299],{},"②特殊情况链接 ",[28,128295,126522],{}," 里面可以放块级元素，但是给 ",[28,128298,126522],{}," 转换一下块级模式最安全",[394,128301,128303],{"id":128302},"_813-行内块元素","8.1.3 行内块元素",[14,128305,128306,128307,630,128310,630,128313,128316],{},"在行内元素中有几个特殊的标签 —— ",[28,128308,128309],{},"\u003Cimg \u002F>",[28,128311,128312],{},"\u003Cinput \u002F>",[28,128314,128315],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,128318,128319],{},[33,128320,128321],{},"行内块元素的特点：",[14,128323,128324],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,128326,128327],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,128329,128330],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[394,128332,128334],{"id":128333},"_814-总结","8.1.4 总结",[44,128336],{"style":126605,"src":128337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[394,128339,128341],{"id":128340},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,128343,128344],{},"①转换为块元素：display:block;",[49,128346,128348],{"className":126749,"code":128347,"language":126751,"meta":46,"style":46},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[28,128349,128350,128355,128361,128372,128384,128396],{"__ignoreMap":46},[57,128351,128352],{"class":59,"line":60},[57,128353,128354],{"class":63},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[57,128356,128357,128359],{"class":59,"line":67},[57,128358,18],{"class":51497},[57,128360,15844],{"class":140},[57,128362,128363,128366,128368,128370],{"class":59,"line":144},[57,128364,128365],{"class":81},"  display",[57,128367,51634],{"class":140},[57,128369,61066],{"class":81},[57,128371,1576],{"class":140},[57,128373,128374,128376,128378,128380,128382],{"class":59,"line":150},[57,128375,70765],{"class":81},[57,128377,51634],{"class":140},[57,128379,728],{"class":81},[57,128381,51689],{"class":136},[57,128383,1576],{"class":140},[57,128385,128386,128388,128390,128392,128394],{"class":59,"line":162},[57,128387,70985],{"class":81},[57,128389,51634],{"class":140},[57,128391,817],{"class":81},[57,128393,51689],{"class":136},[57,128395,1576],{"class":140},[57,128397,128398],{"class":59,"line":180},[57,128399,1847],{"class":140},[14,128401,128402],{},"②转换为行内元素：display:inline;",[49,128404,128406],{"className":126749,"code":128405,"language":126751,"meta":46,"style":46},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[28,128407,128408,128413,128419,128430],{"__ignoreMap":46},[57,128409,128410],{"class":59,"line":60},[57,128411,128412],{"class":63},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[57,128414,128415,128417],{"class":59,"line":67},[57,128416,51808],{"class":51497},[57,128418,15844],{"class":140},[57,128420,128421,128423,128425,128428],{"class":59,"line":144},[57,128422,128365],{"class":81},[57,128424,51634],{"class":140},[57,128426,128427],{"class":81},"inline",[57,128429,1576],{"class":140},[57,128431,128432],{"class":59,"line":150},[57,128433,1847],{"class":140},[14,128435,128436],{},"③转换为行内块：display:inline-block;",[49,128438,128440],{"className":126749,"code":128439,"language":126751,"meta":46,"style":46},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[28,128441,128442,128447,128453,128463,128475,128487],{"__ignoreMap":46},[57,128443,128444],{"class":59,"line":60},[57,128445,128446],{"class":63},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[57,128448,128449,128451],{"class":59,"line":67},[57,128450,57],{"class":51497},[57,128452,15844],{"class":140},[57,128454,128455,128457,128459,128461],{"class":59,"line":144},[57,128456,128365],{"class":81},[57,128458,51634],{"class":140},[57,128460,72580],{"class":81},[57,128462,1576],{"class":140},[57,128464,128465,128467,128469,128471,128473],{"class":59,"line":150},[57,128466,70765],{"class":81},[57,128468,51634],{"class":140},[57,128470,1028],{"class":81},[57,128472,51689],{"class":136},[57,128474,1576],{"class":140},[57,128476,128477,128479,128481,128483,128485],{"class":59,"line":162},[57,128478,70985],{"class":81},[57,128480,51634],{"class":140},[57,128482,1367],{"class":81},[57,128484,51689],{"class":136},[57,128486,1576],{"class":140},[57,128488,128489],{"class":59,"line":180},[57,128490,1847],{"class":140},[394,128492,128494],{"id":128493},"_816-小米侧边栏","8.1.6 小米侧边栏",[44,128496],{"style":126605,"src":128497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[49,128499,128501],{"className":127496,"code":128500,"language":127498,"meta":46,"style":46},"\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",[28,128502,128503,128508,128523,128542,128561,128580,128599,128618,128637,128656],{"__ignoreMap":46},[57,128504,128505],{"class":59,"line":60},[57,128506,128507],{"class":63},"\u003C!-- 小米侧边栏案例 -->\n",[57,128509,128510,128512,128514,128516,128518,128521],{"class":59,"line":67},[57,128511,1326],{"class":140},[57,128513,51808],{"class":51497},[57,128515,53683],{"class":70},[57,128517,156],{"class":140},[57,128519,128520],{"class":74},"\"sidebar\"",[57,128522,51504],{"class":140},[57,128524,128525,128527,128529,128531,128533,128535,128538,128540],{"class":59,"line":144},[57,128526,52341],{"class":140},[57,128528,18],{"class":51497},[57,128530,61254],{"class":70},[57,128532,156],{"class":140},[57,128534,61259],{"class":74},[57,128536,128537],{"class":140},">手机 电话卡\u003C\u002F",[57,128539,18],{"class":51497},[57,128541,51504],{"class":140},[57,128543,128544,128546,128548,128550,128552,128554,128557,128559],{"class":59,"line":150},[57,128545,52341],{"class":140},[57,128547,18],{"class":51497},[57,128549,61254],{"class":70},[57,128551,156],{"class":140},[57,128553,61259],{"class":74},[57,128555,128556],{"class":140},">电视 盒子\u003C\u002F",[57,128558,18],{"class":51497},[57,128560,51504],{"class":140},[57,128562,128563,128565,128567,128569,128571,128573,128576,128578],{"class":59,"line":162},[57,128564,52341],{"class":140},[57,128566,18],{"class":51497},[57,128568,61254],{"class":70},[57,128570,156],{"class":140},[57,128572,61259],{"class":74},[57,128574,128575],{"class":140},">笔记本 平板\u003C\u002F",[57,128577,18],{"class":51497},[57,128579,51504],{"class":140},[57,128581,128582,128584,128586,128588,128590,128592,128595,128597],{"class":59,"line":180},[57,128583,52341],{"class":140},[57,128585,18],{"class":51497},[57,128587,61254],{"class":70},[57,128589,156],{"class":140},[57,128591,61259],{"class":74},[57,128593,128594],{"class":140},">出行 穿戴\u003C\u002F",[57,128596,18],{"class":51497},[57,128598,51504],{"class":140},[57,128600,128601,128603,128605,128607,128609,128611,128614,128616],{"class":59,"line":186},[57,128602,52341],{"class":140},[57,128604,18],{"class":51497},[57,128606,61254],{"class":70},[57,128608,156],{"class":140},[57,128610,61259],{"class":74},[57,128612,128613],{"class":140},">智能 路由器\u003C\u002F",[57,128615,18],{"class":51497},[57,128617,51504],{"class":140},[57,128619,128620,128622,128624,128626,128628,128630,128633,128635],{"class":59,"line":197},[57,128621,52341],{"class":140},[57,128623,18],{"class":51497},[57,128625,61254],{"class":70},[57,128627,156],{"class":140},[57,128629,61259],{"class":74},[57,128631,128632],{"class":140},">健康 儿童\u003C\u002F",[57,128634,18],{"class":51497},[57,128636,51504],{"class":140},[57,128638,128639,128641,128643,128645,128647,128649,128652,128654],{"class":59,"line":241},[57,128640,52341],{"class":140},[57,128642,18],{"class":51497},[57,128644,61254],{"class":70},[57,128646,156],{"class":140},[57,128648,61259],{"class":74},[57,128650,128651],{"class":140},">耳机 音响\u003C\u002F",[57,128653,18],{"class":51497},[57,128655,51504],{"class":140},[57,128657,128658,128660,128662],{"class":59,"line":249},[57,128659,51982],{"class":140},[57,128661,51808],{"class":51497},[57,128663,51504],{"class":140},[49,128665,128667],{"className":126749,"code":128666,"language":126751,"meta":46,"style":46},".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",[28,128668,128669,128678,128688,128701,128713,128725,128737,128747,128758,128762,128772,128783],{"__ignoreMap":46},[57,128670,128671,128674,128676],{"class":59,"line":60},[57,128672,128673],{"class":70},".sidebar",[57,128675,1681],{"class":51497},[57,128677,15844],{"class":140},[57,128679,128680,128682,128684,128686],{"class":59,"line":67},[57,128681,128365],{"class":81},[57,128683,51634],{"class":140},[57,128685,61066],{"class":81},[57,128687,1576],{"class":140},[57,128689,128690,128692,128694,128697,128699],{"class":59,"line":144},[57,128691,70765],{"class":81},[57,128693,51634],{"class":140},[57,128695,128696],{"class":81},"234",[57,128698,51689],{"class":136},[57,128700,1576],{"class":140},[57,128702,128703,128705,128707,128709,128711],{"class":59,"line":150},[57,128704,70985],{"class":81},[57,128706,51634],{"class":140},[57,128708,868],{"class":81},[57,128710,51689],{"class":136},[57,128712,1576],{"class":140},[57,128714,128715,128717,128719,128721,128723],{"class":59,"line":162},[57,128716,127433],{"class":81},[57,128718,51634],{"class":140},[57,128720,868],{"class":81},[57,128722,51689],{"class":136},[57,128724,1576],{"class":140},[57,128726,128727,128729,128731,128733,128735],{"class":59,"line":180},[57,128728,71020],{"class":81},[57,128730,51634],{"class":140},[57,128732,1367],{"class":81},[57,128734,51689],{"class":136},[57,128736,1576],{"class":140},[57,128738,128739,128741,128743,128745],{"class":59,"line":186},[57,128740,71102],{"class":81},[57,128742,51634],{"class":140},[57,128744,61039],{"class":81},[57,128746,1576],{"class":140},[57,128748,128749,128751,128753,128756],{"class":59,"line":197},[57,128750,71075],{"class":81},[57,128752,51634],{"class":140},[57,128754,128755],{"class":81},"#55585a",[57,128757,1576],{"class":140},[57,128759,128760],{"class":59,"line":241},[57,128761,1847],{"class":140},[57,128763,128764,128766,128768,128770],{"class":59,"line":249},[57,128765,128673],{"class":70},[57,128767,1681],{"class":51497},[57,128769,61137],{"class":70},[57,128771,15844],{"class":140},[57,128773,128774,128776,128778,128781],{"class":59,"line":262},[57,128775,71075],{"class":81},[57,128777,51634],{"class":140},[57,128779,128780],{"class":81},"#ff6700",[57,128782,1576],{"class":140},[57,128784,128785],{"class":59,"line":281},[57,128786,1847],{"class":140},[44,128788],{"style":126605,"src":128789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,128791,128792],{},"行高=盒子高度：实现文字的垂直居中",[14,128794,128795],{},"原理讲解：",[44,128797],{"style":126605,"src":128798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[365,128800,128802],{"id":128801},"_82-css背景","8.2 css背景",[14,128804,128805],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[394,128807,128809],{"id":128808},"_821-背景颜色","8.2.1 背景颜色",[14,128811,128812],{},"background-color:颜色值;",[14,128814,128815],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[394,128817,128819],{"id":128818},"_822-背景图片","8.2.2 背景图片",[14,128821,128822],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[49,128824,128826],{"className":126749,"code":128825,"language":126751,"meta":46,"style":46},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[28,128827,128828,128834,128850],{"__ignoreMap":46},[57,128829,128830,128832],{"class":59,"line":60},[57,128831,51808],{"class":51497},[57,128833,15844],{"class":140},[57,128835,128836,128839,128841,128843,128845,128848],{"class":59,"line":67},[57,128837,128838],{"class":81},"  background-image",[57,128840,51634],{"class":140},[57,128842,61923],{"class":81},[57,128844,168],{"class":140},[57,128846,128847],{"class":5489},"images\u002Fbg.png",[57,128849,2992],{"class":140},[57,128851,128852],{"class":59,"line":144},[57,128853,1847],{"class":140},[557,128855,128856,128865],{},[560,128857,128858],{},[563,128859,128860,128863],{},[566,128861,128862],{"align":24008},"参数值",[566,128864,102893],{"align":24008},[603,128866,128867,128874],{},[563,128868,128869,128871],{},[608,128870,54934],{"align":24008},[608,128872,128873],{"align":24008},"无背景图（默认的）",[563,128875,128876,128878],{},[608,128877,61923],{"align":24008},[608,128879,128880],{"align":24008},"使用绝对或相对地址指定背景图像",[49,128882,128883],{"className":126749,"code":128825,"language":126751,"meta":46,"style":46},[28,128884,128885,128891,128905],{"__ignoreMap":46},[57,128886,128887,128889],{"class":59,"line":60},[57,128888,51808],{"class":51497},[57,128890,15844],{"class":140},[57,128892,128893,128895,128897,128899,128901,128903],{"class":59,"line":67},[57,128894,128838],{"class":81},[57,128896,51634],{"class":140},[57,128898,61923],{"class":81},[57,128900,168],{"class":140},[57,128902,128847],{"class":5489},[57,128904,2992],{"class":140},[57,128906,128907],{"class":59,"line":144},[57,128908,1847],{"class":140},[14,128910,128911],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[394,128913,128915],{"id":128914},"_823-背景平铺","8.2.3 背景平铺",[49,128917,128919],{"className":126749,"code":128918,"language":126751,"meta":46,"style":46},"div {\n  background-repeat: no-repeat;\n}\n",[28,128920,128921,128927,128938],{"__ignoreMap":46},[57,128922,128923,128925],{"class":59,"line":60},[57,128924,51808],{"class":51497},[57,128926,15844],{"class":140},[57,128928,128929,128932,128934,128936],{"class":59,"line":67},[57,128930,128931],{"class":81},"  background-repeat",[57,128933,51634],{"class":140},[57,128935,61933],{"class":81},[57,128937,1576],{"class":140},[57,128939,128940],{"class":59,"line":144},[57,128941,1847],{"class":140},[557,128943,128944,128952],{},[560,128945,128946],{},[563,128947,128948,128950],{},[566,128949,128862],{"align":24008},[566,128951,102893],{"align":24008},[603,128953,128954,128962,128969,128977],{},[563,128955,128956,128959],{},[608,128957,128958],{"align":24008},"repeat",[608,128960,128961],{"align":24008},"背景图像在纵向和横向上平铺（默认的）",[563,128963,128964,128966],{},[608,128965,61933],{"align":24008},[608,128967,128968],{"align":24008},"背景图像不平铺",[563,128970,128971,128974],{},[608,128972,128973],{"align":24008},"repeat-x",[608,128975,128976],{"align":24008},"背景图像在横向上平铺",[563,128978,128979,128982],{},[608,128980,128981],{"align":24008},"repeat-y",[608,128983,128984],{"align":24008},"背景图像在纵向平铺",[394,128986,128988],{"id":128987},"_824-背景图片位置","8.2.4 背景图片位置",[49,128990,128992],{"className":126749,"code":128991,"language":126751,"meta":46,"style":46},"\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",[28,128993,128994,128999,129005,129019,129023,129028,129034,129050,129054,129059,129065,129079],{"__ignoreMap":46},[57,128995,128996],{"class":59,"line":60},[57,128997,128998],{"class":63},"\u002F* 方位名词 *\u002F\n",[57,129000,129001,129003],{"class":59,"line":67},[57,129002,51808],{"class":51497},[57,129004,15844],{"class":140},[57,129006,129007,129010,129012,129014,129017],{"class":59,"line":144},[57,129008,129009],{"class":81},"  background-position",[57,129011,51634],{"class":140},[57,129013,51789],{"class":81},[57,129015,129016],{"class":81}," top",[57,129018,1576],{"class":140},[57,129020,129021],{"class":59,"line":150},[57,129022,1847],{"class":140},[57,129024,129025],{"class":59,"line":162},[57,129026,129027],{"class":63},"\u002F* 精确单位 *\u002F\n",[57,129029,129030,129032],{"class":59,"line":180},[57,129031,51808],{"class":51497},[57,129033,15844],{"class":140},[57,129035,129036,129038,129040,129042,129044,129046,129048],{"class":59,"line":186},[57,129037,129009],{"class":81},[57,129039,51634],{"class":140},[57,129041,1116],{"class":81},[57,129043,51689],{"class":136},[57,129045,57701],{"class":81},[57,129047,51689],{"class":136},[57,129049,1576],{"class":140},[57,129051,129052],{"class":59,"line":197},[57,129053,1847],{"class":140},[57,129055,129056],{"class":59,"line":241},[57,129057,129058],{"class":63},"\u002F* 混合单位 *\u002F\n",[57,129060,129061,129063],{"class":59,"line":249},[57,129062,51808],{"class":51497},[57,129064,15844],{"class":140},[57,129066,129067,129069,129071,129073,129075,129077],{"class":59,"line":262},[57,129068,129009],{"class":81},[57,129070,51634],{"class":140},[57,129072,1116],{"class":81},[57,129074,51689],{"class":136},[57,129076,17416],{"class":81},[57,129078,1576],{"class":140},[57,129080,129081],{"class":59,"line":281},[57,129082,1847],{"class":140},[14,129084,129085],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[557,129087,129088,129096],{},[560,129089,129090],{},[563,129091,129092,129094],{},[566,129093,128862],{"align":24008},[566,129095,26138],{"align":24008},[603,129097,129098,129105],{},[563,129099,129100,129102],{},[608,129101,52165],{"align":24008},[608,129103,129104],{"align":24008},"百分数|由浮点数和单位标识符组成的长度值",[563,129106,129107,129110],{},[608,129108,129109],{"align":24008},"position",[608,129111,129112],{"align":24008},"top|center|bottom|left|center|right 方位名词",[14,129114,129115],{},"其他说明：",[14,129117,129118],{},"①参数是方位名词",[14,129120,129121],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,129123,129124],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,129126,129127],{},"②参数是精确单位",[14,129129,129130],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,129132,129133],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,129135,129136],{},"③参数是混合单位",[14,129138,129139],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[394,129141,129143],{"id":129142},"_825-背景图片固定","8.2.5 背景图片固定",[49,129145,129147],{"className":126749,"code":129146,"language":126751,"meta":46,"style":46},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[28,129148,129149,129154,129160,129172,129176,129181,129187,129197],{"__ignoreMap":46},[57,129150,129151],{"class":59,"line":60},[57,129152,129153],{"class":63},"\u002F* 背景滚动（默认） *\u002F\n",[57,129155,129156,129158],{"class":59,"line":67},[57,129157,51808],{"class":51497},[57,129159,15844],{"class":140},[57,129161,129162,129165,129167,129170],{"class":59,"line":144},[57,129163,129164],{"class":81},"  background-attachment",[57,129166,51634],{"class":140},[57,129168,129169],{"class":81},"scroll",[57,129171,1576],{"class":140},[57,129173,129174],{"class":59,"line":150},[57,129175,1847],{"class":140},[57,129177,129178],{"class":59,"line":162},[57,129179,129180],{"class":63},"\u002F* 背景固定 *\u002F\n",[57,129182,129183,129185],{"class":59,"line":180},[57,129184,51808],{"class":51497},[57,129186,15844],{"class":140},[57,129188,129189,129191,129193,129195],{"class":59,"line":186},[57,129190,129164],{"class":81},[57,129192,51634],{"class":140},[57,129194,86430],{"class":81},[57,129196,1576],{"class":140},[57,129198,129199],{"class":59,"line":197},[57,129200,1847],{"class":140},[557,129202,129203,129212],{},[560,129204,129205],{},[563,129206,129207,129210],{},[566,129208,129209],{"align":24008},"参数",[566,129211,102893],{"align":24008},[603,129213,129214,129221],{},[563,129215,129216,129218],{},[608,129217,129169],{"align":24008},[608,129219,129220],{"align":24008},"背景图像是随对象内容滚动",[563,129222,129223,129225],{},[608,129224,86430],{"align":24008},[608,129226,129227],{"align":24008},"背景图像固定",[394,129229,129231],{"id":129230},"_826-背景样式合写","8.2.6 背景样式合写",[49,129233,129235],{"className":126749,"code":129234,"language":126751,"meta":46,"style":46},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[28,129236,129237,129242,129248,129276],{"__ignoreMap":46},[57,129238,129239],{"class":59,"line":60},[57,129240,129241],{"class":63},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[57,129243,129244,129246],{"class":59,"line":67},[57,129245,51808],{"class":51497},[57,129247,15844],{"class":140},[57,129249,129250,129252,129254,129256,129259,129261,129263,129265,129267,129270,129272,129274],{"class":59,"line":144},[57,129251,70808],{"class":81},[57,129253,51634],{"class":140},[57,129255,61039],{"class":81},[57,129257,129258],{"class":81}," url",[57,129260,168],{"class":140},[57,129262,128847],{"class":5489},[57,129264,229],{"class":140},[57,129266,61933],{"class":81},[57,129268,129269],{"class":81}," fixed",[57,129271,17416],{"class":81},[57,129273,129016],{"class":81},[57,129275,1576],{"class":140},[57,129277,129278],{"class":59,"line":150},[57,129279,1847],{"class":140},[394,129281,129283],{"id":129282},"_827-背景色半透明","8.2.7 背景色半透明",[49,129285,129287],{"className":126749,"code":129286,"language":126751,"meta":46,"style":46},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[28,129288,129289,129295,129321],{"__ignoreMap":46},[57,129290,129291,129293],{"class":59,"line":60},[57,129292,51808],{"class":51497},[57,129294,15844],{"class":140},[57,129296,129297,129299,129301,129303,129305,129307,129309,129311,129313,129315,129317,129319],{"class":59,"line":67},[57,129298,70808],{"class":81},[57,129300,51634],{"class":140},[57,129302,55307],{"class":81},[57,129304,168],{"class":140},[57,129306,226],{"class":81},[57,129308,12708],{"class":140},[57,129310,226],{"class":81},[57,129312,12708],{"class":140},[57,129314,226],{"class":81},[57,129316,12708],{"class":140},[57,129318,100718],{"class":81},[57,129320,2992],{"class":140},[57,129322,129323],{"class":59,"line":144},[57,129324,1847],{"class":140},[14,129326,99593],{},[14,129328,129329],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,129331,129332],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,129334,129335],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,129337,129338],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[394,129340,129342],{"id":129341},"_828-总结","8.2.8 总结",[557,129344,129345,129356],{},[560,129346,129347],{},[563,129348,129349,129352,129354],{},[566,129350,129351],{"align":24008},"属性",[566,129353,102893],{"align":24008},[566,129355,571],{"align":24008},[603,129357,129358,129369,129380,129391,129402,129413,129424],{},[563,129359,129360,129363,129366],{},[608,129361,129362],{"align":24008},"background-color",[608,129364,129365],{"align":24008},"背景颜色",[608,129367,129368],{"align":24008},"预定义的颜色值\u002F十六进制\u002FRGB代码",[563,129370,129371,129374,129377],{},[608,129372,129373],{"align":24008},"background-image",[608,129375,129376],{"align":24008},"背景图片",[608,129378,129379],{"align":24008},"url(图片路径)",[563,129381,129382,129385,129388],{},[608,129383,129384],{"align":24008},"background-repeat",[608,129386,129387],{"align":24008},"是否平铺",[608,129389,129390],{"align":24008},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[563,129392,129393,129396,129399],{},[608,129394,129395],{"align":24008},"background-position",[608,129397,129398],{"align":24008},"背景位置",[608,129400,129401],{"align":24008},"length\u002Fposition 分别是x和y坐标",[563,129403,129404,129407,129410],{},[608,129405,129406],{"align":24008},"background-attachment",[608,129408,129409],{"align":24008},"背景附着",[608,129411,129412],{"align":24008},"scroll(背景滚动) \u002Ffixed (背景固定)",[563,129414,129415,129418,129421],{},[608,129416,129417],{"align":24008},"背景简写",[608,129419,129420],{"align":24008},"书写更简单",[608,129422,129423],{"align":24008},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[563,129425,129426,129429,129432],{},[608,129427,129428],{"align":24008},"背景半透明",[608,129430,129431],{"align":24008},"背景颜色半透明",[608,129433,129434],{"align":24008},"background: rgba(0,0,0.3); 后面必须是4个值",[14,129436,129437],{},"颜色渐变：",[44,129439],{"style":126605,"src":129440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[44,129442],{"style":126605,"src":129443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[394,129445,129447],{"id":129446},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[49,129449,129451],{"className":127496,"code":129450,"language":127498,"meta":46,"style":46},"\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",[28,129452,129453,129468,129487,129506,129525,129544,129563],{"__ignoreMap":46},[57,129454,129455,129457,129459,129461,129463,129466],{"class":59,"line":60},[57,129456,1326],{"class":140},[57,129458,51808],{"class":51497},[57,129460,53683],{"class":70},[57,129462,156],{"class":140},[57,129464,129465],{"class":74},"\"nav\"",[57,129467,51504],{"class":140},[57,129469,129470,129472,129474,129476,129478,129480,129483,129485],{"class":59,"line":67},[57,129471,52341],{"class":140},[57,129473,18],{"class":51497},[57,129475,61254],{"class":70},[57,129477,156],{"class":140},[57,129479,61259],{"class":74},[57,129481,129482],{"class":140},">五彩导航1\u003C\u002F",[57,129484,18],{"class":51497},[57,129486,51504],{"class":140},[57,129488,129489,129491,129493,129495,129497,129499,129502,129504],{"class":59,"line":144},[57,129490,52341],{"class":140},[57,129492,18],{"class":51497},[57,129494,61254],{"class":70},[57,129496,156],{"class":140},[57,129498,61259],{"class":74},[57,129500,129501],{"class":140},">五彩导航2\u003C\u002F",[57,129503,18],{"class":51497},[57,129505,51504],{"class":140},[57,129507,129508,129510,129512,129514,129516,129518,129521,129523],{"class":59,"line":150},[57,129509,52341],{"class":140},[57,129511,18],{"class":51497},[57,129513,61254],{"class":70},[57,129515,156],{"class":140},[57,129517,61259],{"class":74},[57,129519,129520],{"class":140},">五彩导航3\u003C\u002F",[57,129522,18],{"class":51497},[57,129524,51504],{"class":140},[57,129526,129527,129529,129531,129533,129535,129537,129540,129542],{"class":59,"line":162},[57,129528,52341],{"class":140},[57,129530,18],{"class":51497},[57,129532,61254],{"class":70},[57,129534,156],{"class":140},[57,129536,61259],{"class":74},[57,129538,129539],{"class":140},">五彩导航4\u003C\u002F",[57,129541,18],{"class":51497},[57,129543,51504],{"class":140},[57,129545,129546,129548,129550,129552,129554,129556,129559,129561],{"class":59,"line":180},[57,129547,52341],{"class":140},[57,129549,18],{"class":51497},[57,129551,61254],{"class":70},[57,129553,156],{"class":140},[57,129555,61259],{"class":74},[57,129557,129558],{"class":140},">五彩导航5\u003C\u002F",[57,129560,18],{"class":51497},[57,129562,51504],{"class":140},[57,129564,129565,129567,129569],{"class":59,"line":186},[57,129566,51982],{"class":140},[57,129568,51808],{"class":51497},[57,129570,51504],{"class":140},[49,129572,129574],{"className":126749,"code":129573,"language":126751,"meta":46,"style":46},".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",[28,129575,129576,129585,129595,129607,129619,129629,129641,129651,129655,129680,129703,129726,129749],{"__ignoreMap":46},[57,129577,129578,129581,129583],{"class":59,"line":60},[57,129579,129580],{"class":70},".nav",[57,129582,1681],{"class":51497},[57,129584,15844],{"class":140},[57,129586,129587,129589,129591,129593],{"class":59,"line":67},[57,129588,128365],{"class":81},[57,129590,51634],{"class":140},[57,129592,72580],{"class":81},[57,129594,1576],{"class":140},[57,129596,129597,129599,129601,129603,129605],{"class":59,"line":144},[57,129598,70765],{"class":81},[57,129600,51634],{"class":140},[57,129602,1233],{"class":81},[57,129604,51689],{"class":136},[57,129606,1576],{"class":140},[57,129608,129609,129611,129613,129615,129617],{"class":59,"line":150},[57,129610,70985],{"class":81},[57,129612,51634],{"class":140},[57,129614,1272],{"class":81},[57,129616,51689],{"class":136},[57,129618,1576],{"class":140},[57,129620,129621,129623,129625,129627],{"class":59,"line":162},[57,129622,70723],{"class":81},[57,129624,51634],{"class":140},[57,129626,51789],{"class":81},[57,129628,1576],{"class":140},[57,129630,129631,129633,129635,129637,129639],{"class":59,"line":180},[57,129632,127433],{"class":81},[57,129634,51634],{"class":140},[57,129636,1272],{"class":81},[57,129638,51689],{"class":136},[57,129640,1576],{"class":140},[57,129642,129643,129645,129647,129649],{"class":59,"line":186},[57,129644,71102],{"class":81},[57,129646,51634],{"class":140},[57,129648,61039],{"class":81},[57,129650,1576],{"class":140},[57,129652,129653],{"class":59,"line":197},[57,129654,1847],{"class":140},[57,129656,129657,129659,129661,129664,129666,129668,129671,129673,129675,129677],{"class":59,"line":241},[57,129658,129580],{"class":70},[57,129660,1681],{"class":51497},[57,129662,129663],{"class":70},":nth-child",[57,129665,168],{"class":140},[57,129667,635],{"class":81},[57,129669,129670],{"class":140},") { ",[57,129672,129362],{"class":81},[57,129674,51634],{"class":140},[57,129676,128780],{"class":81},[57,129678,129679],{"class":140},"; }\n",[57,129681,129682,129684,129686,129688,129690,129692,129694,129696,129698,129701],{"class":59,"line":249},[57,129683,129580],{"class":70},[57,129685,1681],{"class":51497},[57,129687,129663],{"class":70},[57,129689,168],{"class":140},[57,129691,498],{"class":81},[57,129693,129670],{"class":140},[57,129695,129362],{"class":81},[57,129697,51634],{"class":140},[57,129699,129700],{"class":81},"#ff0000",[57,129702,129679],{"class":140},[57,129704,129705,129707,129709,129711,129713,129715,129717,129719,129721,129724],{"class":59,"line":262},[57,129706,129580],{"class":70},[57,129708,1681],{"class":51497},[57,129710,129663],{"class":70},[57,129712,168],{"class":140},[57,129714,270],{"class":81},[57,129716,129670],{"class":140},[57,129718,129362],{"class":81},[57,129720,51634],{"class":140},[57,129722,129723],{"class":81},"#00a4ff",[57,129725,129679],{"class":140},[57,129727,129728,129730,129732,129734,129736,129738,129740,129742,129744,129747],{"class":59,"line":281},[57,129729,129580],{"class":70},[57,129731,1681],{"class":51497},[57,129733,129663],{"class":70},[57,129735,168],{"class":140},[57,129737,710],{"class":81},[57,129739,129670],{"class":140},[57,129741,129362],{"class":81},[57,129743,51634],{"class":140},[57,129745,129746],{"class":81},"#ff00ff",[57,129748,129679],{"class":140},[57,129750,129751,129753,129755,129757,129759,129761,129763,129765,129767,129770],{"class":59,"line":287},[57,129752,129580],{"class":70},[57,129754,1681],{"class":51497},[57,129756,129663],{"class":70},[57,129758,168],{"class":140},[57,129760,736],{"class":81},[57,129762,129670],{"class":140},[57,129764,129362],{"class":81},[57,129766,51634],{"class":140},[57,129768,129769],{"class":81},"#00ff00",[57,129771,129679],{"class":140},[365,129773,129775],{"id":129774},"_83-css三大特性","8.3 css三大特性",[394,129777,129779],{"id":129778},"_831-层叠性","8.3.1 层叠性",[14,129781,129782],{},"为了解决样式冲突问题",[14,129784,129785],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,129787,129788],{},"   ②样式不冲突，不会层叠",[394,129790,129792],{"id":129791},"_832-继承性","8.3.2 继承性",[14,129794,129795],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,129797,129798],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[49,129800,129802],{"className":126749,"code":129801,"language":126751,"meta":46,"style":46},"p {\n  color: #333;\n}\n",[28,129803,129804,129810,129820],{"__ignoreMap":46},[57,129805,129806,129808],{"class":59,"line":60},[57,129807,14],{"class":51497},[57,129809,15844],{"class":140},[57,129811,129812,129814,129816,129818],{"class":59,"line":67},[57,129813,71102],{"class":81},[57,129815,51634],{"class":140},[57,129817,62566],{"class":81},[57,129819,1576],{"class":140},[57,129821,129822],{"class":59,"line":144},[57,129823,1847],{"class":140},[44,129825],{"style":126605,"src":129826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,129828,129829],{},"解释：①行高可以跟单位也可以不跟单位",[14,129831,129832],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,129834,129835],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,129837,129838],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[394,129840,129842],{"id":129841},"_833-优先级","8.3.3 优先级",[377,129844,129845,129848],{},[380,129846,129847],{},"选择器相同，则执行层叠性",[380,129849,129850],{},"选择器不同，则根据选择器权重执行",[557,129852,129853,129863],{},[560,129854,129855],{},[563,129856,129857,129860],{},[566,129858,129859],{"align":24008},"选择器",[566,129861,129862],{"align":24008},"选择器权重",[603,129864,129865,129873,129881,129889,129897,129905],{},[563,129866,129867,129870],{},[608,129868,129869],{"align":24008},"继承 或者*",[608,129871,129872],{"align":24008},"0，0，0，0",[563,129874,129875,129878],{},[608,129876,129877],{"align":24008},"标签选择器",[608,129879,129880],{"align":24008},"0，0，0，1",[563,129882,129883,129886],{},[608,129884,129885],{"align":24008},"类选择器，伪类选择器",[608,129887,129888],{"align":24008},"0，0，1，0",[563,129890,129891,129894],{},[608,129892,129893],{"align":24008},"ID选择器",[608,129895,129896],{"align":24008},"0，1，0，0",[563,129898,129899,129902],{},[608,129900,129901],{"align":24008},"行内样式",[608,129903,129904],{"align":24008},"1，0，0，0",[563,129906,129907,129910],{},[608,129908,129909],{"align":24008},"！important",[608,129911,129912],{"align":24008},"无穷大",[14,129914,129915],{},"! important用法：",[49,129917,129919],{"className":126749,"code":129918,"language":126751,"meta":46,"style":46},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[28,129920,129921,129926,129932,129945,129949,129954,129960,129970],{"__ignoreMap":46},[57,129922,129923],{"class":59,"line":60},[57,129924,129925],{"class":63},"\u002F* !important 拥有最高优先级 *\u002F\n",[57,129927,129928,129930],{"class":59,"line":67},[57,129929,51808],{"class":51497},[57,129931,15844],{"class":140},[57,129933,129934,129936,129938,129940,129943],{"class":59,"line":144},[57,129935,71102],{"class":81},[57,129937,51634],{"class":140},[57,129939,51842],{"class":81},[57,129941,129942],{"class":136}," !important",[57,129944,1576],{"class":140},[57,129946,129947],{"class":59,"line":150},[57,129948,1847],{"class":140},[57,129950,129951],{"class":59,"line":162},[57,129952,129953],{"class":63},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[57,129955,129956,129958],{"class":59,"line":180},[57,129957,51808],{"class":51497},[57,129959,15844],{"class":140},[57,129961,129962,129964,129966,129968],{"class":59,"line":186},[57,129963,71102],{"class":81},[57,129965,51634],{"class":140},[57,129967,57618],{"class":81},[57,129969,1576],{"class":140},[57,129971,129972],{"class":59,"line":197},[57,129973,1847],{"class":140},[14,129975,129976],{},"优先级注意点：",[14,129978,129979],{},"①权重是有4组数字组成,但是不会有进位",[14,129981,129982],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,129984,129985],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,129987,129988],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,129990,129991],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,129993,129994],{},"⑥复合选择器",[557,129996,129997,130007],{},[560,129998,129999],{},[563,130000,130001,130004],{},[566,130002,130003],{"align":24008},"div ul li",[566,130005,130006],{"align":24008},"0,0,0,3",[603,130008,130009,130017,130025],{},[563,130010,130011,130014],{},[608,130012,130013],{"align":24008},".nav ul li",[608,130015,130016],{"align":24008},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[563,130018,130019,130022],{},[608,130020,130021],{"align":24008},"a:hover",[608,130023,130024],{"align":24008},"0,0,1,1",[563,130026,130027,130030],{},[608,130028,130029],{"align":24008},".nav a",[608,130031,130024],{"align":24008},[342,130033,130034],{},"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":46,"searchDepth":67,"depth":67,"links":130036},[130037,130045,130056],{"id":128145,"depth":67,"text":128146,"children":130038},[130039,130040,130041,130042,130043,130044],{"id":128158,"depth":144,"text":128159},{"id":128230,"depth":144,"text":128231},{"id":128302,"depth":144,"text":128303},{"id":128333,"depth":144,"text":128334},{"id":128340,"depth":144,"text":128341},{"id":128493,"depth":144,"text":128494},{"id":128801,"depth":67,"text":128802,"children":130046},[130047,130048,130049,130050,130051,130052,130053,130054,130055],{"id":128808,"depth":144,"text":128809},{"id":128818,"depth":144,"text":128819},{"id":128914,"depth":144,"text":128915},{"id":128987,"depth":144,"text":128988},{"id":129142,"depth":144,"text":129143},{"id":129230,"depth":144,"text":129231},{"id":129282,"depth":144,"text":129283},{"id":129341,"depth":144,"text":129342},{"id":129446,"depth":144,"text":129447},{"id":129774,"depth":67,"text":129775,"children":130057},[130058,130059,130060],{"id":129778,"depth":144,"text":129779},{"id":129791,"depth":144,"text":129792},{"id":129841,"depth":144,"text":129842},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128137,"description":347},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130067,"title":130068,"body":130069,"description":347,"extension":348,"meta":131659,"navigation":350,"path":131660,"seo":131661,"stem":131662,"__hash__":131663},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130070,"toc":131638},[130071,130074,130078,130081,130084,130087,130090,130093,130096,130099,130103,130111,130148,130184,130187,130201,130206,130240,130243,130336,130341,130344,130374,130377,130382,130390,130394,130401,130447,130491,130496,130499,130502,130505,130508,130511,130514,130516,130519,130523,130528,130572,130577,130580,130583,130620,130625,130628,130631,130634,130637,130669,130672,130675,130678,130710,130713,130716,130719,130723,130726,130758,130761,130765,130785,130788,130796,130799,130803,130808,130811,130843,130848,130851,130889,130893,130898,130901,130904,130935,130938,130955,130960,131012,131072,131077,131131,131169,131173,131177,131180,131184,131192,131195,131197,131208,131213,131261,131295,131298,131301,131304,131307,131351,131354,131357,131360,131363,131366,131369,131413,131416,131419,131422,131425,131428,131431,131437,131440,131484,131487,131490,131493,131496,131499,131543,131546,131548,131551,131555,131559,131597,131601,131604,131607,131611,131619,131623,131626,131629,131632,131635],[10,130072,130068],{"id":130073},"_9-css盒模型浮动与切图",[365,130075,130077],{"id":130076},"_91-盒子模型","9.1 盒子模型",[14,130079,130080],{},"利用盒子来设计网页",[14,130082,130083],{},"盒子包含：边框、外边距、内边距、实际内容",[14,130085,130086],{},"网页布局设置：",[14,130088,130089],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,130091,130092],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,130094,130095],{},"③往盒子里装内容",[44,130097],{"style":126605,"src":130098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[394,130100,130102],{"id":130101},"_911-边框border","9.1.1 边框（border）",[377,130104,130105,130108],{},[380,130106,130107],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[380,130109,130110],{},"语法",[49,130112,130114],{"className":126749,"code":130113,"language":126751,"meta":46,"style":46},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[28,130115,130116,130121,130127,130144],{"__ignoreMap":46},[57,130117,130118],{"class":59,"line":60},[57,130119,130120],{"class":63},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[57,130122,130123,130125],{"class":59,"line":67},[57,130124,51808],{"class":51497},[57,130126,15844],{"class":140},[57,130128,130129,130131,130133,130135,130137,130139,130142],{"class":59,"line":144},[57,130130,71093],{"class":81},[57,130132,51634],{"class":140},[57,130134,635],{"class":81},[57,130136,51689],{"class":136},[57,130138,51718],{"class":81},[57,130140,130141],{"class":81}," #ccc",[57,130143,1576],{"class":140},[57,130145,130146],{"class":59,"line":150},[57,130147,1847],{"class":140},[557,130149,130150,130158],{},[560,130151,130152],{},[563,130153,130154,130156],{},[566,130155,129351],{"align":24008},[566,130157,102893],{"align":24008},[603,130159,130160,130168,130176],{},[563,130161,130162,130165],{},[608,130163,130164],{"align":24008},"border-width",[608,130166,130167],{"align":24008},"定义边框粗细，单位是px",[563,130169,130170,130173],{},[608,130171,130172],{"align":24008},"border-style",[608,130174,130175],{"align":24008},"边框的样式",[563,130177,130178,130181],{},[608,130179,130180],{"align":24008},"border-color",[608,130182,130183],{"align":24008},"边框的颜色",[14,130185,130186],{},"边框样式 border-style 可以设置如下值：",[1422,130188,130189,130192,130195,130198],{},[380,130190,130191],{},"none：没有边框即忽略所有边框的宽度（默认值）",[380,130193,130194],{},"solid：边框为单实线(最为常用的)",[380,130196,130197],{},"dashed：边框为虚线",[380,130199,130200],{},"dotted：边框为点线",[377,130202,130203],{"start":144},[380,130204,130205],{},"边框的合写分写",[49,130207,130208],{"className":126749,"code":130113,"language":126751,"meta":46,"style":46},[28,130209,130210,130214,130220,130236],{"__ignoreMap":46},[57,130211,130212],{"class":59,"line":60},[57,130213,130120],{"class":63},[57,130215,130216,130218],{"class":59,"line":67},[57,130217,51808],{"class":51497},[57,130219,15844],{"class":140},[57,130221,130222,130224,130226,130228,130230,130232,130234],{"class":59,"line":144},[57,130223,71093],{"class":81},[57,130225,51634],{"class":140},[57,130227,635],{"class":81},[57,130229,51689],{"class":136},[57,130231,51718],{"class":81},[57,130233,130141],{"class":81},[57,130235,1576],{"class":140},[57,130237,130238],{"class":59,"line":150},[57,130239,1847],{"class":140},[14,130241,130242],{},"边框分开写法：",[49,130244,130246],{"className":126749,"code":130245,"language":126751,"meta":46,"style":46},"\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",[28,130247,130248,130253,130259,130277,130295,130314,130332],{"__ignoreMap":46},[57,130249,130250],{"class":59,"line":60},[57,130251,130252],{"class":63},"\u002F* 边框分开写法 *\u002F\n",[57,130254,130255,130257],{"class":59,"line":67},[57,130256,51808],{"class":51497},[57,130258,15844],{"class":140},[57,130260,130261,130264,130266,130268,130270,130272,130275],{"class":59,"line":144},[57,130262,130263],{"class":81},"  border-top",[57,130265,51634],{"class":140},[57,130267,635],{"class":81},[57,130269,51689],{"class":136},[57,130271,51718],{"class":81},[57,130273,130274],{"class":81}," #000",[57,130276,1576],{"class":140},[57,130278,130279,130282,130284,130286,130288,130290,130293],{"class":59,"line":150},[57,130280,130281],{"class":81},"  border-right",[57,130283,51634],{"class":140},[57,130285,498],{"class":81},[57,130287,51689],{"class":136},[57,130289,62438],{"class":81},[57,130291,130292],{"class":81}," #333",[57,130294,1576],{"class":140},[57,130296,130297,130300,130302,130304,130306,130309,130312],{"class":59,"line":162},[57,130298,130299],{"class":81},"  border-bottom",[57,130301,51634],{"class":140},[57,130303,270],{"class":81},[57,130305,51689],{"class":136},[57,130307,130308],{"class":81}," dotted",[57,130310,130311],{"class":81}," #666",[57,130313,1576],{"class":140},[57,130315,130316,130319,130321,130323,130325,130327,130330],{"class":59,"line":180},[57,130317,130318],{"class":81},"  border-left",[57,130320,51634],{"class":140},[57,130322,635],{"class":81},[57,130324,51689],{"class":136},[57,130326,51718],{"class":81},[57,130328,130329],{"class":81}," #999",[57,130331,1576],{"class":140},[57,130333,130334],{"class":59,"line":186},[57,130335,1847],{"class":140},[377,130337,130338],{"start":150},[380,130339,130340],{},"表格的细线边框",[14,130342,130343],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[49,130345,130347],{"className":126749,"code":130346,"language":126751,"meta":46,"style":46},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[28,130348,130349,130354,130360,130370],{"__ignoreMap":46},[57,130350,130351],{"class":59,"line":60},[57,130352,130353],{"class":63},"\u002F* 表格细线边框合并 *\u002F\n",[57,130355,130356,130358],{"class":59,"line":67},[57,130357,557],{"class":51497},[57,130359,15844],{"class":140},[57,130361,130362,130364,130366,130368],{"class":59,"line":144},[57,130363,70775],{"class":81},[57,130365,51634],{"class":140},[57,130367,65232],{"class":81},[57,130369,1576],{"class":140},[57,130371,130372],{"class":59,"line":150},[57,130373,1847],{"class":140},[14,130375,130376],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[377,130378,130379],{"start":162},[380,130380,130381],{},"解决边框额外增加盒子的实际大小的方法：",[1422,130383,130384,130387],{},[380,130385,130386],{},"测量盒子大小的时候,不量边框",[380,130388,130389],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[394,130391,130393],{"id":130392},"_912-内边距","9.1.2 内边距",[377,130395,130396,130399],{},[380,130397,130398],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[380,130400,130110],{},[557,130402,130403,130413],{},[560,130404,130405],{},[563,130406,130407,130410],{},[566,130408,130409],{"align":24008},"值的个数",[566,130411,130412],{"align":24008},"表达意思",[603,130414,130415,130423,130431,130439],{},[563,130416,130417,130420],{},[608,130418,130419],{"align":24008},"padding: 5px;",[608,130421,130422],{"align":24008},"1个值，代表上下左右都有5个元素",[563,130424,130425,130428],{},[608,130426,130427],{"align":24008},"padding: 5px 10px;",[608,130429,130430],{"align":24008},"2个值，代表上下内边距为5像素，左右内边距为10像素",[563,130432,130433,130436],{},[608,130434,130435],{"align":24008},"padding: 5px 10px 20px;",[608,130437,130438],{"align":24008},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[563,130440,130441,130444],{},[608,130442,130443],{"align":24008},"padding: 5px 10px 20px 30px;",[608,130445,130446],{"align":24008},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[557,130448,130449,130457],{},[560,130450,130451],{},[563,130452,130453,130455],{},[566,130454,129351],{"align":24008},[566,130456,102893],{"align":24008},[603,130458,130459,130467,130475,130483],{},[563,130460,130461,130464],{},[608,130462,130463],{"align":24008},"padding-left",[608,130465,130466],{"align":24008},"左内边距",[563,130468,130469,130472],{},[608,130470,130471],{"align":24008},"padding-right",[608,130473,130474],{"align":24008},"右内边距",[563,130476,130477,130480],{},[608,130478,130479],{"align":24008},"padding-top",[608,130481,130482],{"align":24008},"上内边距",[563,130484,130485,130488],{},[608,130486,130487],{"align":24008},"padding-bottom",[608,130489,130490],{"align":24008},"下内边距",[377,130492,130493],{"start":144},[380,130494,130495],{},"内边距会影响盒子的实际大小",[14,130497,130498],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,130500,130501],{},"①内容和边框有了距离，添加了内边距",[14,130503,130504],{},"②padding影响了盒子实际大小",[14,130506,130507],{},"内边距对盒子大小的影响：",[14,130509,130510],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,130512,130513],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,130515,95417],{},[14,130517,130518],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[394,130520,130522],{"id":130521},"_913-外边距","9.1.3 外边距",[377,130524,130525],{},[380,130526,130527],{},"控制盒子与盒子之间的距离",[557,130529,130530,130538],{},[560,130531,130532],{},[563,130533,130534,130536],{},[566,130535,129351],{"align":24008},[566,130537,102893],{"align":24008},[603,130539,130540,130548,130556,130564],{},[563,130541,130542,130545],{},[608,130543,130544],{"align":24008},"margin-left",[608,130546,130547],{"align":24008},"左外边距",[563,130549,130550,130553],{},[608,130551,130552],{"align":24008},"margin-right",[608,130554,130555],{"align":24008},"右外边距",[563,130557,130558,130561],{},[608,130559,130560],{"align":24008},"margin-top",[608,130562,130563],{"align":24008},"上外边距",[563,130565,130566,130569],{},[608,130567,130568],{"align":24008},"margin-bottom",[608,130570,130571],{"align":24008},"下外边距",[377,130573,130574],{"start":67},[380,130575,130576],{},"外边距可以让块级盒子水平居中的两个条件：",[14,130578,130579],{},"①盒子必须指定了宽度（width）",[14,130581,130582],{},"②盒子左右的外边距都设置为 auto",[49,130584,130586],{"className":126749,"code":130585,"language":126751,"meta":46,"style":46},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[28,130587,130588,130593,130600,130616],{"__ignoreMap":46},[57,130589,130590],{"class":59,"line":60},[57,130591,130592],{"class":63},"\u002F* margin 复合写法（同上） *\u002F\n",[57,130594,130595,130598],{"class":59,"line":67},[57,130596,130597],{"class":70},".box",[57,130599,15844],{"class":140},[57,130601,130602,130604,130606,130608,130610,130613],{"class":59,"line":144},[57,130603,70667],{"class":81},[57,130605,51634],{"class":140},[57,130607,226],{"class":81},[57,130609,51753],{"class":81},[57,130611,130612],{"class":140},";  ",[57,130614,130615],{"class":63},"\u002F* 块级盒子水平居中 *\u002F\n",[57,130617,130618],{"class":59,"line":150},[57,130619,1847],{"class":140},[377,130621,130622],{"start":144},[380,130623,130624],{},"外边距塌陷问题",[14,130626,130627],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[44,130629],{"style":126605,"src":130630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,130632,130633],{},"解决方案：",[14,130635,130636],{},"①可以为父亲元素定义上边距",[49,130638,130639],{"className":126749,"code":130585,"language":126751,"meta":46,"style":46},[28,130640,130641,130645,130651,130665],{"__ignoreMap":46},[57,130642,130643],{"class":59,"line":60},[57,130644,130592],{"class":63},[57,130646,130647,130649],{"class":59,"line":67},[57,130648,130597],{"class":70},[57,130650,15844],{"class":140},[57,130652,130653,130655,130657,130659,130661,130663],{"class":59,"line":144},[57,130654,70667],{"class":81},[57,130656,51634],{"class":140},[57,130658,226],{"class":81},[57,130660,51753],{"class":81},[57,130662,130612],{"class":140},[57,130664,130615],{"class":63},[57,130666,130667],{"class":59,"line":150},[57,130668,1847],{"class":140},[14,130670,130671],{},"②可以为父亲元素定义上内边距",[14,130673,130674],{},"③可以为父亲元素添加overflow:hidden",[44,130676],{"style":126605,"src":130677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[49,130679,130680],{"className":126749,"code":130585,"language":126751,"meta":46,"style":46},[28,130681,130682,130686,130692,130706],{"__ignoreMap":46},[57,130683,130684],{"class":59,"line":60},[57,130685,130592],{"class":63},[57,130687,130688,130690],{"class":59,"line":67},[57,130689,130597],{"class":70},[57,130691,15844],{"class":140},[57,130693,130694,130696,130698,130700,130702,130704],{"class":59,"line":144},[57,130695,70667],{"class":81},[57,130697,51634],{"class":140},[57,130699,226],{"class":81},[57,130701,51753],{"class":81},[57,130703,130612],{"class":140},[57,130705,130615],{"class":63},[57,130707,130708],{"class":59,"line":150},[57,130709,1847],{"class":140},[44,130711],{"style":126605,"src":130712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,130714,130715],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,130717,130718],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[394,130720,130722],{"id":130721},"_914-清除内外边距","9.1.4 清除内外边距",[14,130724,130725],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[49,130727,130728],{"className":126749,"code":130585,"language":126751,"meta":46,"style":46},[28,130729,130730,130734,130740,130754],{"__ignoreMap":46},[57,130731,130732],{"class":59,"line":60},[57,130733,130592],{"class":63},[57,130735,130736,130738],{"class":59,"line":67},[57,130737,130597],{"class":70},[57,130739,15844],{"class":140},[57,130741,130742,130744,130746,130748,130750,130752],{"class":59,"line":144},[57,130743,70667],{"class":81},[57,130745,51634],{"class":140},[57,130747,226],{"class":81},[57,130749,51753],{"class":81},[57,130751,130612],{"class":140},[57,130753,130615],{"class":63},[57,130755,130756],{"class":59,"line":150},[57,130757,1847],{"class":140},[14,130759,130760],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[394,130762,130764],{"id":130763},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1422,130766,130767,130770,130773,130776,130779,130782],{},[380,130768,130769],{},"文件→打开 ：可以打开我们要测量的图片",[380,130771,130772],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[380,130774,130775],{},"右击标尺，把里面的单位改为像素",[380,130777,130778],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[380,130780,130781],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[380,130783,130784],{},"用选区拖动 可以测量大小",[44,130786],{"style":126605,"src":130787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1422,130789,130790,130793],{},[380,130791,130792],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[380,130794,130795],{},"吸管取色工具",[44,130797],{"style":126605,"src":130798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[394,130800,130802],{"id":130801},"_916-案例","9.1.6 案例",[377,130804,130805],{},[380,130806,130807],{},"小米商品",[44,130809],{"style":126605,"src":130810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[49,130812,130813],{"className":126749,"code":130585,"language":126751,"meta":46,"style":46},[28,130814,130815,130819,130825,130839],{"__ignoreMap":46},[57,130816,130817],{"class":59,"line":60},[57,130818,130592],{"class":63},[57,130820,130821,130823],{"class":59,"line":67},[57,130822,130597],{"class":70},[57,130824,15844],{"class":140},[57,130826,130827,130829,130831,130833,130835,130837],{"class":59,"line":144},[57,130828,70667],{"class":81},[57,130830,51634],{"class":140},[57,130832,226],{"class":81},[57,130834,51753],{"class":81},[57,130836,130612],{"class":140},[57,130838,130615],{"class":63},[57,130840,130841],{"class":59,"line":150},[57,130842,1847],{"class":140},[377,130844,130845],{"start":67},[380,130846,130847],{},"快报模块",[44,130849],{"style":126605,"src":130850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[49,130852,130854],{"className":127496,"code":130853,"language":127498,"meta":46,"style":46},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[28,130855,130856,130861,130876,130881],{"__ignoreMap":46},[57,130857,130858],{"class":59,"line":60},[57,130859,130860],{"class":63},"\u003C!-- HTML 代码示例 -->\n",[57,130862,130863,130865,130867,130869,130871,130874],{"class":59,"line":67},[57,130864,1326],{"class":140},[57,130866,51808],{"class":51497},[57,130868,53683],{"class":70},[57,130870,156],{"class":140},[57,130872,130873],{"class":74},"\"example\"",[57,130875,51504],{"class":140},[57,130877,130878],{"class":59,"line":144},[57,130879,130880],{"class":140},"  示例内容\n",[57,130882,130883,130885,130887],{"class":59,"line":150},[57,130884,51982],{"class":140},[57,130886,51808],{"class":51497},[57,130888,51504],{"class":140},[394,130890,130892],{"id":130891},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[377,130894,130895],{},[380,130896,130897],{},"圆角边框",[14,130899,130900],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[44,130902],{"style":126605,"src":130903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[49,130905,130907],{"className":126749,"code":130906,"language":126751,"meta":46,"style":46},"div {\n  border: 1px solid #ccc;\n}\n",[28,130908,130909,130915,130931],{"__ignoreMap":46},[57,130910,130911,130913],{"class":59,"line":60},[57,130912,51808],{"class":51497},[57,130914,15844],{"class":140},[57,130916,130917,130919,130921,130923,130925,130927,130929],{"class":59,"line":67},[57,130918,71093],{"class":81},[57,130920,51634],{"class":140},[57,130922,635],{"class":81},[57,130924,51689],{"class":136},[57,130926,51718],{"class":81},[57,130928,130141],{"class":81},[57,130930,1576],{"class":140},[57,130932,130933],{"class":59,"line":144},[57,130934,1847],{"class":140},[14,130936,130937],{},"解释:",[1422,130939,130940,130943,130946,130949,130952],{},[380,130941,130942],{},"参数值可以为数值或百分比的形式",[380,130944,130945],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[380,130947,130948],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[380,130950,130951],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[380,130953,130954],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[377,130956,130957],{"start":67},[380,130958,130959],{},"盒子阴影",[49,130961,130963],{"className":126749,"code":130962,"language":126751,"meta":46,"style":46},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[28,130964,130965,130971,131008],{"__ignoreMap":46},[57,130966,130967,130969],{"class":59,"line":60},[57,130968,51808],{"class":51497},[57,130970,15844],{"class":140},[57,130972,130973,130976,130978,130980,130982,130984,130986,130988,130990,130992,130994,130996,130998,131000,131002,131004,131006],{"class":59,"line":67},[57,130974,130975],{"class":81},"  box-shadow",[57,130977,51634],{"class":140},[57,130979,226],{"class":81},[57,130981,15027],{"class":81},[57,130983,51689],{"class":136},[57,130985,2311],{"class":81},[57,130987,51689],{"class":136},[57,130989,78964],{"class":81},[57,130991,168],{"class":140},[57,130993,226],{"class":81},[57,130995,12708],{"class":140},[57,130997,226],{"class":81},[57,130999,12708],{"class":140},[57,131001,226],{"class":81},[57,131003,12708],{"class":140},[57,131005,86407],{"class":81},[57,131007,2992],{"class":140},[57,131009,131010],{"class":59,"line":144},[57,131011,1847],{"class":140},[557,131013,131014,131022],{},[560,131015,131016],{},[563,131017,131018,131020],{},[566,131019,571],{"align":24008},[566,131021,27758],{"align":24008},[603,131023,131024,131032,131040,131048,131056,131064],{},[563,131025,131026,131029],{},[608,131027,131028],{"align":24008},"h-shadow",[608,131030,131031],{"align":24008},"必需,水平阴影的位置,允许负值",[563,131033,131034,131037],{},[608,131035,131036],{"align":24008},"v-shadow",[608,131038,131039],{"align":24008},"必需,垂直阴影的位置,允许负值",[563,131041,131042,131045],{},[608,131043,131044],{"align":24008},"blur",[608,131046,131047],{"align":24008},"可选,模糊距离,就是影子的虚实",[563,131049,131050,131053],{},[608,131051,131052],{"align":24008},"spread",[608,131054,131055],{"align":24008},"可选,阴影尺寸",[563,131057,131058,131061],{},[608,131059,131060],{"align":24008},"color",[608,131062,131063],{"align":24008},"可选,阴影的颜色",[563,131065,131066,131069],{},[608,131067,131068],{"align":24008},"inset",[608,131070,131071],{"align":24008},"可选,将外部阴影(outset)改为内部阴影",[377,131073,131074],{"start":144},[380,131075,131076],{},"文字阴影",[49,131078,131080],{"className":126749,"code":131079,"language":126751,"meta":46,"style":46},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[28,131081,131082,131088,131127],{"__ignoreMap":46},[57,131083,131084,131086],{"class":59,"line":60},[57,131085,14],{"class":51497},[57,131087,15844],{"class":140},[57,131089,131090,131093,131095,131097,131099,131101,131103,131105,131107,131109,131111,131113,131115,131117,131119,131121,131123,131125],{"class":59,"line":67},[57,131091,131092],{"class":81},"  text-shadow",[57,131094,51634],{"class":140},[57,131096,635],{"class":81},[57,131098,51689],{"class":136},[57,131100,25387],{"class":81},[57,131102,51689],{"class":136},[57,131104,15027],{"class":81},[57,131106,51689],{"class":136},[57,131108,78964],{"class":81},[57,131110,168],{"class":140},[57,131112,226],{"class":81},[57,131114,12708],{"class":140},[57,131116,226],{"class":81},[57,131118,12708],{"class":140},[57,131120,226],{"class":81},[57,131122,12708],{"class":140},[57,131124,100718],{"class":81},[57,131126,2992],{"class":140},[57,131128,131129],{"class":59,"line":144},[57,131130,1847],{"class":140},[557,131132,131133,131141],{},[560,131134,131135],{},[563,131136,131137,131139],{},[566,131138,571],{"align":24008},[566,131140,27758],{"align":24008},[603,131142,131143,131149,131156,131163],{},[563,131144,131145,131147],{},[608,131146,131028],{"align":24008},[608,131148,131031],{"align":24008},[563,131150,131151,131153],{},[608,131152,131036],{"align":24008},[608,131154,131155],{"align":24008},"必需,垂直阴影位置,允许负值",[563,131157,131158,131160],{},[608,131159,131044],{"align":24008},[608,131161,131162],{"align":24008},"可选,模糊的距离",[563,131164,131165,131167],{},[608,131166,131060],{"align":24008},[608,131168,131063],{"align":24008},[365,131170,131172],{"id":131171},"_92-浮动","9.2 浮动",[394,131174,131176],{"id":131175},"_921-浮动介绍","9.2.1 浮动介绍",[14,131178,131179],{},"在16.2中详细介绍",[394,131181,131183],{"id":131182},"_922-清除浮动","9.2.2 清除浮动",[377,131185,131186,131189],{},[380,131187,131188],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[380,131190,131191],{},"清除浮动的本质",[14,131193,131194],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,131196,9298],{},[1422,131198,131199,131202,131205],{},[380,131200,131201],{},"如果父盒子本身有高度，则不需要清除浮动",[380,131203,131204],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[380,131206,131207],{},"父级有了高度，就不会影响下面的标准流了",[377,131209,131210],{"start":144},[380,131211,131212],{},"清除浮动样式",[49,131214,131216],{"className":126749,"code":131215,"language":126751,"meta":46,"style":46},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[28,131217,131218,131225,131236,131240,131247,131257],{"__ignoreMap":46},[57,131219,131220,131223],{"class":59,"line":60},[57,131221,131222],{"class":70},".left",[57,131224,15844],{"class":140},[57,131226,131227,131230,131232,131234],{"class":59,"line":67},[57,131228,131229],{"class":81},"  float",[57,131231,51634],{"class":140},[57,131233,24008],{"class":81},[57,131235,1576],{"class":140},[57,131237,131238],{"class":59,"line":144},[57,131239,1847],{"class":140},[57,131241,131242,131245],{"class":59,"line":150},[57,131243,131244],{"class":70},".right",[57,131246,15844],{"class":140},[57,131248,131249,131251,131253,131255],{"class":59,"line":162},[57,131250,131229],{"class":81},[57,131252,51634],{"class":140},[57,131254,72719],{"class":81},[57,131256,1576],{"class":140},[57,131258,131259],{"class":59,"line":180},[57,131260,1847],{"class":140},[557,131262,131263,131271],{},[560,131264,131265],{},[563,131266,131267,131269],{},[566,131268,127213],{"align":24008},[566,131270,27758],{"align":24008},[603,131272,131273,131280,131287],{},[563,131274,131275,131277],{},[608,131276,24008],{"align":24008},[608,131278,131279],{"align":24008},"不允许左侧有浮动元素（清除左侧浮动的影响）",[563,131281,131282,131284],{},[608,131283,72719],{"align":24008},[608,131285,131286],{"align":24008},"不允许右侧有浮动元素（清除右侧浮动的影响）",[563,131288,131289,131292],{},[608,131290,131291],{"align":24008},"both",[608,131293,131294],{"align":24008},"同时清除左右侧浮动的影响",[14,131296,131297],{},"法一",[14,131299,131300],{},"额外标签法也称为隔墙法",[14,131302,131303],{},"使用方式：",[14,131305,131306],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[49,131308,131309],{"className":126749,"code":131215,"language":126751,"meta":46,"style":46},[28,131310,131311,131317,131327,131331,131337,131347],{"__ignoreMap":46},[57,131312,131313,131315],{"class":59,"line":60},[57,131314,131222],{"class":70},[57,131316,15844],{"class":140},[57,131318,131319,131321,131323,131325],{"class":59,"line":67},[57,131320,131229],{"class":81},[57,131322,51634],{"class":140},[57,131324,24008],{"class":81},[57,131326,1576],{"class":140},[57,131328,131329],{"class":59,"line":144},[57,131330,1847],{"class":140},[57,131332,131333,131335],{"class":59,"line":150},[57,131334,131244],{"class":70},[57,131336,15844],{"class":140},[57,131338,131339,131341,131343,131345],{"class":59,"line":162},[57,131340,131229],{"class":81},[57,131342,51634],{"class":140},[57,131344,72719],{"class":81},[57,131346,1576],{"class":140},[57,131348,131349],{"class":59,"line":180},[57,131350,1847],{"class":140},[14,131352,131353],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,131355,131356],{},"优点： 通俗易懂，书写方便",[14,131358,131359],{},"缺点： 添加许多无意义的标签，结构化较差",[14,131361,131362],{},"注意： 要求这个新的空标签必须是块级元素。",[14,131364,131365],{},"法二",[14,131367,131368],{},"父级添加overflow属性",[49,131370,131371],{"className":126749,"code":131215,"language":126751,"meta":46,"style":46},[28,131372,131373,131379,131389,131393,131399,131409],{"__ignoreMap":46},[57,131374,131375,131377],{"class":59,"line":60},[57,131376,131222],{"class":70},[57,131378,15844],{"class":140},[57,131380,131381,131383,131385,131387],{"class":59,"line":67},[57,131382,131229],{"class":81},[57,131384,51634],{"class":140},[57,131386,24008],{"class":81},[57,131388,1576],{"class":140},[57,131390,131391],{"class":59,"line":144},[57,131392,1847],{"class":140},[57,131394,131395,131397],{"class":59,"line":150},[57,131396,131244],{"class":70},[57,131398,15844],{"class":140},[57,131400,131401,131403,131405,131407],{"class":59,"line":162},[57,131402,131229],{"class":81},[57,131404,51634],{"class":140},[57,131406,72719],{"class":81},[57,131408,1576],{"class":140},[57,131410,131411],{"class":59,"line":180},[57,131412,1847],{"class":140},[14,131414,131415],{},"overflow: hidden;",[14,131417,131418],{},"优点：代码简洁",[14,131420,131421],{},"缺点：无法显示溢出的部分",[14,131423,131424],{},"注意：是给父元素添加代码",[14,131426,131427],{},"法三",[14,131429,131430],{},"父级添加after伪元素",[14,131432,131433,131436],{},[131434,131435],"after",{}," 方式是额外标签法的升级版",[14,131438,131439],{},"使用的时候复制就可以",[49,131441,131442],{"className":126749,"code":131215,"language":126751,"meta":46,"style":46},[28,131443,131444,131450,131460,131464,131470,131480],{"__ignoreMap":46},[57,131445,131446,131448],{"class":59,"line":60},[57,131447,131222],{"class":70},[57,131449,15844],{"class":140},[57,131451,131452,131454,131456,131458],{"class":59,"line":67},[57,131453,131229],{"class":81},[57,131455,51634],{"class":140},[57,131457,24008],{"class":81},[57,131459,1576],{"class":140},[57,131461,131462],{"class":59,"line":144},[57,131463,1847],{"class":140},[57,131465,131466,131468],{"class":59,"line":150},[57,131467,131244],{"class":70},[57,131469,15844],{"class":140},[57,131471,131472,131474,131476,131478],{"class":59,"line":162},[57,131473,131229],{"class":81},[57,131475,51634],{"class":140},[57,131477,72719],{"class":81},[57,131479,1576],{"class":140},[57,131481,131482],{"class":59,"line":180},[57,131483,1847],{"class":140},[14,131485,131486],{},"优点：没有增加标签，结构更简单",[14,131488,131489],{},"缺点：照顾低版本浏览器",[14,131491,131492],{},"代表网站： 百度、淘宝网、网易等",[14,131494,131495],{},"法四",[14,131497,131498],{},"父级添加双伪元素",[49,131500,131501],{"className":126749,"code":131215,"language":126751,"meta":46,"style":46},[28,131502,131503,131509,131519,131523,131529,131539],{"__ignoreMap":46},[57,131504,131505,131507],{"class":59,"line":60},[57,131506,131222],{"class":70},[57,131508,15844],{"class":140},[57,131510,131511,131513,131515,131517],{"class":59,"line":67},[57,131512,131229],{"class":81},[57,131514,51634],{"class":140},[57,131516,24008],{"class":81},[57,131518,1576],{"class":140},[57,131520,131521],{"class":59,"line":144},[57,131522,1847],{"class":140},[57,131524,131525,131527],{"class":59,"line":150},[57,131526,131244],{"class":70},[57,131528,15844],{"class":140},[57,131530,131531,131533,131535,131537],{"class":59,"line":162},[57,131532,131229],{"class":81},[57,131534,51634],{"class":140},[57,131536,72719],{"class":81},[57,131538,1576],{"class":140},[57,131540,131541],{"class":59,"line":180},[57,131542,1847],{"class":140},[14,131544,131545],{},"优点：代码更简洁",[14,131547,131489],{},[14,131549,131550],{},"代表网站：小米、腾讯等",[365,131552,131554],{"id":131553},"_93-ps切图","9.3 PS切图",[394,131556,131558],{"id":131557},"_931-常见图片格式","9.3.1 常见图片格式",[557,131560,131561,131571],{},[560,131562,131563],{},[563,131564,131565,131568],{},[566,131566,131567],{"align":24008},"jpg图像格式",[566,131569,131570],{"align":24008},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[603,131572,131573,131581,131589],{},[563,131574,131575,131578],{},[608,131576,131577],{"align":24008},"gif图像格式",[608,131579,131580],{"align":24008},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[563,131582,131583,131586],{},[608,131584,131585],{"align":24008},"png图像格式",[608,131587,131588],{"align":24008},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[563,131590,131591,131594],{},[608,131592,131593],{"align":24008},"PSD图像格式",[608,131595,131596],{"align":24008},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[394,131598,131600],{"id":131599},"_932-图层切图","9.3.2 图层切图",[14,131602,131603],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,131605,131606],{},"按住shift选中两个图层->图层菜单->合并图层",[394,131608,131610],{"id":131609},"_933-切片切图","9.3.3 切片切图",[1422,131612,131613,131616],{},[380,131614,131615],{},"利用切片工具手动划出",[380,131617,131618],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[394,131620,131622],{"id":131621},"_934-切图步骤","9.3.4 切图步骤",[14,131624,131625],{},"用切片工具选中：",[44,131627],{"style":126605,"src":131628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,131630,131631],{},"文件 -> 导出",[44,131633],{"style":126605,"src":131634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[342,131636,131637],{},"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":46,"searchDepth":67,"depth":67,"links":131639},[131640,131649,131653],{"id":130076,"depth":67,"text":130077,"children":131641},[131642,131643,131644,131645,131646,131647,131648],{"id":130101,"depth":144,"text":130102},{"id":130392,"depth":144,"text":130393},{"id":130521,"depth":144,"text":130522},{"id":130721,"depth":144,"text":130722},{"id":130763,"depth":144,"text":130764},{"id":130801,"depth":144,"text":130802},{"id":130891,"depth":144,"text":130892},{"id":131171,"depth":67,"text":131172,"children":131650},[131651,131652],{"id":131175,"depth":144,"text":131176},{"id":131182,"depth":144,"text":131183},{"id":131553,"depth":67,"text":131554,"children":131654},[131655,131656,131657,131658],{"id":131557,"depth":144,"text":131558},{"id":131599,"depth":144,"text":131600},{"id":131609,"depth":144,"text":131610},{"id":131621,"depth":144,"text":131622},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130068,"description":347},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131665,"title":131666,"body":131667,"description":347,"extension":348,"meta":132308,"navigation":350,"path":132309,"seo":132310,"stem":132311,"__hash__":132312},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131668,"toc":132296},[131669,131672,131676,131702,131736,131740,131744,131747,131789,131796,131806,131814,131816,131819,131822,131825,131832,131846,131850,131853,131882,131886,131889,131903,131907,131910,131938,131942,131945,131971,131975,131980,132013,132018,132046,132050,132067,132113,132118,132162,132179,132286,132294],[10,131670,131666],{"id":131671},"_10-css规范与学成在线案例",[365,131673,131675],{"id":131674},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[377,131677,131678,131684,131690,131696],{},[380,131679,131680,131683],{},[33,131681,131682],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[380,131685,131686,131689],{},[33,131687,131688],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[380,131691,131692,131695],{},[33,131693,131694],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[380,131697,131698,131701],{},[33,131699,131700],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[49,131703,131704],{"className":126749,"code":130113,"language":126751,"meta":46,"style":46},[28,131705,131706,131710,131716,131732],{"__ignoreMap":46},[57,131707,131708],{"class":59,"line":60},[57,131709,130120],{"class":63},[57,131711,131712,131714],{"class":59,"line":67},[57,131713,51808],{"class":51497},[57,131715,15844],{"class":140},[57,131717,131718,131720,131722,131724,131726,131728,131730],{"class":59,"line":144},[57,131719,71093],{"class":81},[57,131721,51634],{"class":140},[57,131723,635],{"class":81},[57,131725,51689],{"class":136},[57,131727,51718],{"class":81},[57,131729,130141],{"class":81},[57,131731,1576],{"class":140},[57,131733,131734],{"class":59,"line":150},[57,131735,1847],{"class":140},[365,131737,131739],{"id":131738},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[394,131741,131743],{"id":131742},"_1021-header头部制作","10.2.1 header头部制作",[44,131745],{"style":126605,"src":131746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1422,131748,131749,131756,131763,131769,131776,131783],{},[380,131750,131751,131752,131755],{},"1号是版心盒子 ",[33,131753,131754],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[380,131757,131758,131759,131762],{},"版心盒子 里面包含 2号盒子 ",[33,131760,131761],{},"logo"," 图标",[380,131764,131765,131766,131768],{},"版心盒子 里面包含 3号盒子 ",[33,131767,53910],{}," 导航栏",[380,131770,131771,131772,131775],{},"版心盒子 里面包含 4号盒子 ",[33,131773,131774],{},"search"," 搜索框",[380,131777,131778,131779,131782],{},"版心盒子 里面包含 5号盒子 ",[33,131780,131781],{},"user"," 个人信息",[380,131784,131785,131786],{},"注意，要求里面的 ",[33,131787,131788],{},"4个子盒子 必须都浮动",[377,131790,131791],{},[380,131792,131793],{},[33,131794,131795],{},"导航栏注意点:",[14,131797,131798,131799,131802,131803],{},"实际开发中， ",[33,131800,131801],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[33,131804,131805],{},"用 li 包含链接(li+a)的做法",[1422,131807,131808,131811],{},[380,131809,131810],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[380,131812,131813],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,131815,9298],{},[14,131817,131818],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,131820,131821],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,131823,131824],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[377,131826,131827],{"start":67},[380,131828,131829],{},[33,131830,131831],{},"4号盒子search的细节：",[1422,131833,131834,131837,131840],{},[380,131835,131836],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[380,131838,131839],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[380,131841,131842,131845],{},[28,131843,131844],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[394,131847,131849],{"id":131848},"_1022-banner制作","10.2.2 banner制作",[44,131851],{"style":126605,"src":131852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1422,131854,131855,131862,131868,131875],{},[380,131856,131857,131858,131861],{},"1号盒子是通栏的大盒子 ",[33,131859,131860],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[380,131863,131864,131865,131867],{},"2号盒子是版心 ",[33,131866,1211],{}," ， 要水平居中对齐",[380,131869,131870,131871,131874],{},"3号盒子版心内，左对齐 ",[33,131872,131873],{},"subnav"," 侧导航栏",[380,131876,131877,131878,131881],{},"4号盒子版心内，右对齐 ",[33,131879,131880],{},"course"," 课程",[394,131883,131885],{"id":131884},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[44,131887],{"style":126605,"src":131888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1422,131890,131891,131894,131897,131900],{},[380,131892,131893],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[380,131895,131896],{},"1号盒子是标题 H3 左侧浮动",[380,131898,131899],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[380,131901,131902],{},"3号盒子 右浮动 mod 修改",[394,131904,131906],{"id":131905},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[44,131908],{"style":126605,"src":131909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1422,131911,131912,131918,131925,131932,131935],{},[380,131913,131914,131915,131917],{},"1号盒子为最大的盒子 ",[33,131916,53911],{}," 版心水平居中对齐",[380,131919,131920,131921,131924],{},"2号盒子为上面部分 ",[33,131922,131923],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[380,131926,131927,131928,131931],{},"3号盒子为底下部分 ",[33,131929,131930],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[380,131933,131934],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[380,131936,131937],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[394,131939,131941],{"id":131940},"_1025-底部模块制作","10.2.5 底部模块制作",[44,131943],{"style":126605,"src":131944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1422,131946,131947,131954,131957,131964],{},[380,131948,131949,131950,131953],{},"1号盒子通栏大盒子 底部 ",[33,131951,131952],{},"footer"," 给高度 底色是白色",[380,131955,131956],{},"2号盒子版心水平居中",[380,131958,131959,131960,131963],{},"3号盒子版权 ",[33,131961,131962],{},"copyright"," 左对齐",[380,131965,131966,131967,131970],{},"4号盒子 链接组 ",[33,131968,131969],{},"links"," 右对齐",[394,131972,131974],{"id":131973},"_1026-代码模块","10.2.6 代码模块",[377,131976,131977],{},[380,131978,131979],{},"html部分",[49,131981,131983],{"className":127496,"code":131982,"language":127498,"meta":46,"style":46},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[28,131984,131985],{"__ignoreMap":46},[57,131986,131987,131989,131991,131993,131995,131998,132001,132003,132006,132009,132011],{"class":59,"line":60},[57,131988,1326],{"class":140},[57,131990,18],{"class":51497},[57,131992,61254],{"class":70},[57,131994,156],{"class":140},[57,131996,131997],{"class":74},"\"https:\u002F\u002Fexample.com\"",[57,131999,132000],{"class":70}," target",[57,132002,156],{"class":140},[57,132004,132005],{"class":74},"\"_blank\"",[57,132007,132008],{"class":140},">链接文字\u003C\u002F",[57,132010,18],{"class":51497},[57,132012,51504],{"class":140},[377,132014,132015],{"start":67},[380,132016,132017],{},"css部分",[49,132019,132020],{"className":127496,"code":131982,"language":127498,"meta":46,"style":46},[28,132021,132022],{"__ignoreMap":46},[57,132023,132024,132026,132028,132030,132032,132034,132036,132038,132040,132042,132044],{"class":59,"line":60},[57,132025,1326],{"class":140},[57,132027,18],{"class":51497},[57,132029,61254],{"class":70},[57,132031,156],{"class":140},[57,132033,131997],{"class":74},[57,132035,132000],{"class":70},[57,132037,156],{"class":140},[57,132039,132005],{"class":74},[57,132041,132008],{"class":140},[57,132043,18],{"class":51497},[57,132045,51504],{"class":140},[394,132047,132049],{"id":132048},"_1027-收获","10.2.7 收获",[377,132051,132052,132055,132058,132061,132064],{},[380,132053,132054],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[380,132056,132057],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[380,132059,132060],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[380,132062,132063],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[380,132065,132066],{},"遗忘代码",[49,132068,132070],{"className":126749,"code":132069,"language":126751,"meta":46,"style":46},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[28,132071,132072,132094,132099,132109],{"__ignoreMap":46},[57,132073,132074,132076,132078,132080,132082,132084,132086,132088,132090,132092],{"class":59,"line":60},[57,132075,51808],{"class":51497},[57,132077,12708],{"class":140},[57,132079,14],{"class":51497},[57,132081,12708],{"class":140},[57,132083,10],{"class":51497},[57,132085,12708],{"class":140},[57,132087,1422],{"class":51497},[57,132089,12708],{"class":140},[57,132091,380],{"class":51497},[57,132093,15844],{"class":140},[57,132095,132096],{"class":59,"line":67},[57,132097,132098],{"class":63},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[57,132100,132101,132103,132105,132107],{"class":59,"line":144},[57,132102,128365],{"class":81},[57,132104,51634],{"class":140},[57,132106,61066],{"class":81},[57,132108,1576],{"class":140},[57,132110,132111],{"class":59,"line":150},[57,132112,1847],{"class":140},[377,132114,132115],{"start":180},[380,132116,132117],{},"html引css的程序",[49,132119,132120],{"className":126749,"code":132069,"language":126751,"meta":46,"style":46},[28,132121,132122,132144,132148,132158],{"__ignoreMap":46},[57,132123,132124,132126,132128,132130,132132,132134,132136,132138,132140,132142],{"class":59,"line":60},[57,132125,51808],{"class":51497},[57,132127,12708],{"class":140},[57,132129,14],{"class":51497},[57,132131,12708],{"class":140},[57,132133,10],{"class":51497},[57,132135,12708],{"class":140},[57,132137,1422],{"class":51497},[57,132139,12708],{"class":140},[57,132141,380],{"class":51497},[57,132143,15844],{"class":140},[57,132145,132146],{"class":59,"line":67},[57,132147,132098],{"class":63},[57,132149,132150,132152,132154,132156],{"class":59,"line":144},[57,132151,128365],{"class":81},[57,132153,51634],{"class":140},[57,132155,61066],{"class":81},[57,132157,1576],{"class":140},[57,132159,132160],{"class":59,"line":150},[57,132161,1847],{"class":140},[377,132163,132164,132167,132170,132173,132176],{"start":186},[380,132165,132166],{},"浮动的盒子不会有外边距合并问题",[380,132168,132169],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[380,132171,132172],{},"ctrl+g快速定位行；shift+alt多个光标",[380,132174,132175],{},"学习上方各个模块的选择器起名方法，以后就这样用",[380,132177,132178],{},"在写选择器时尽量写全一些，例如",[49,132180,132182],{"className":126749,"code":132181,"language":126751,"meta":46,"style":46},"\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",[28,132183,132184,132189,132205,132210,132225,132230,132245,132250,132265,132270],{"__ignoreMap":46},[57,132185,132186],{"class":59,"line":60},[57,132187,132188],{"class":63},"\u002F* 静态定位（默认） *\u002F\n",[57,132190,132191,132194,132196,132198,132200,132203],{"class":59,"line":67},[57,132192,132193],{"class":70},".static",[57,132195,80004],{"class":140},[57,132197,129109],{"class":81},[57,132199,51634],{"class":140},[57,132201,132202],{"class":81},"static",[57,132204,129679],{"class":140},[57,132206,132207],{"class":59,"line":144},[57,132208,132209],{"class":63},"\u002F* 相对定位 *\u002F\n",[57,132211,132212,132215,132217,132219,132221,132223],{"class":59,"line":150},[57,132213,132214],{"class":70},".relative",[57,132216,80004],{"class":140},[57,132218,129109],{"class":81},[57,132220,51634],{"class":140},[57,132222,54961],{"class":81},[57,132224,129679],{"class":140},[57,132226,132227],{"class":59,"line":162},[57,132228,132229],{"class":63},"\u002F* 绝对定位 *\u002F\n",[57,132231,132232,132235,132237,132239,132241,132243],{"class":59,"line":180},[57,132233,132234],{"class":70},".absolute",[57,132236,80004],{"class":140},[57,132238,129109],{"class":81},[57,132240,51634],{"class":140},[57,132242,55028],{"class":81},[57,132244,129679],{"class":140},[57,132246,132247],{"class":59,"line":186},[57,132248,132249],{"class":63},"\u002F* 固定定位 *\u002F\n",[57,132251,132252,132255,132257,132259,132261,132263],{"class":59,"line":197},[57,132253,132254],{"class":70},".fixed",[57,132256,80004],{"class":140},[57,132258,129109],{"class":81},[57,132260,51634],{"class":140},[57,132262,86430],{"class":81},[57,132264,129679],{"class":140},[57,132266,132267],{"class":59,"line":241},[57,132268,132269],{"class":63},"\u002F* 粘性定位 *\u002F\n",[57,132271,132272,132275,132277,132279,132281,132284],{"class":59,"line":249},[57,132273,132274],{"class":70},".sticky",[57,132276,80004],{"class":140},[57,132278,129109],{"class":81},[57,132280,51634],{"class":140},[57,132282,132283],{"class":81},"sticky",[57,132285,129679],{"class":140},[377,132287,132288,132291],{"start":281},[380,132289,132290],{},"一定要用好注释",[380,132292,132293],{},"浮动的盒子不会有外边距合并的问题",[342,132295,131637],{},{"title":46,"searchDepth":67,"depth":67,"links":132297},[132298,132299],{"id":131674,"depth":67,"text":131675},{"id":131738,"depth":67,"text":131739,"children":132300},[132301,132302,132303,132304,132305,132306,132307],{"id":131742,"depth":144,"text":131743},{"id":131848,"depth":144,"text":131849},{"id":131884,"depth":144,"text":131885},{"id":131905,"depth":144,"text":131906},{"id":131940,"depth":144,"text":131941},{"id":131973,"depth":144,"text":131974},{"id":132048,"depth":144,"text":132049},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131666,"description":347},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132314,"title":132315,"body":132316,"description":347,"extension":348,"meta":133802,"navigation":350,"path":133803,"seo":133804,"stem":133805,"__hash__":133806},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132317,"toc":133794},[132318,132321,132325,132329,132340,132344,132361,132405,132438,132441,132458,132461,132464,132508,132512,132516,132519,132522,132526,132529,132540,132603,132644,132647,132662,132716,132724,132727,132738,132792,132818,132821,132834,132888,132920,132974,132997,133051,133054,133057,133064,133118,133139,133193,133196,133199,133284,133292,133349,133372,133376,133379,133397,133401,133420,133474,133512,133516,133519,133522,133544,133548,133556,133559,133564,133575,133578,133582,133596,133640,133643,133647,133650,133655,133681,133686,133763,133766,133770,133773,133776,133779,133782,133785,133788,133791],[10,132319,132315],{"id":132320},"_11-传统布局与定位体系",[365,132322,132324],{"id":132323},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[394,132326,132328],{"id":132327},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1422,132330,132331,132334,132337],{},[380,132332,132333],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[380,132335,132336],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[380,132338,132339],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[394,132341,132343],{"id":132342},"_1112-浮动","11.1.2 浮动",[1422,132345,132346,132349,132352,132355,132358],{},[380,132347,132348],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[380,132350,132351],{},"浮动可以改变元素标签默认的排列方式",[380,132353,132354],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[380,132356,132357],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[380,132359,132360],{},"在使用行内块转换时盒子之间是有空隙的",[49,132362,132363],{"className":126749,"code":131215,"language":126751,"meta":46,"style":46},[28,132364,132365,132371,132381,132385,132391,132401],{"__ignoreMap":46},[57,132366,132367,132369],{"class":59,"line":60},[57,132368,131222],{"class":70},[57,132370,15844],{"class":140},[57,132372,132373,132375,132377,132379],{"class":59,"line":67},[57,132374,131229],{"class":81},[57,132376,51634],{"class":140},[57,132378,24008],{"class":81},[57,132380,1576],{"class":140},[57,132382,132383],{"class":59,"line":144},[57,132384,1847],{"class":140},[57,132386,132387,132389],{"class":59,"line":150},[57,132388,131244],{"class":70},[57,132390,15844],{"class":140},[57,132392,132393,132395,132397,132399],{"class":59,"line":162},[57,132394,131229],{"class":81},[57,132396,51634],{"class":140},[57,132398,72719],{"class":81},[57,132400,1576],{"class":140},[57,132402,132403],{"class":59,"line":180},[57,132404,1847],{"class":140},[557,132406,132407,132415],{},[560,132408,132409],{},[563,132410,132411,132413],{},[566,132412,127213],{"align":24008},[566,132414,27758],{"align":24008},[603,132416,132417,132424,132431],{},[563,132418,132419,132421],{},[608,132420,54934],{"align":24008},[608,132422,132423],{"align":24008},"元素不浮动（默认值）",[563,132425,132426,132428],{},[608,132427,24008],{"align":24008},[608,132429,132430],{"align":24008},"元素向左浮动",[563,132432,132433,132435],{},[608,132434,72719],{"align":24008},[608,132436,132437],{"align":24008},"元素向右浮动",[14,132439,132440],{},"浮动重点：",[1422,132442,132443,132446,132449,132452,132455],{},[380,132444,132445],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[380,132447,132448],{},"浮动的元素会一行内显示并且元素顶部对齐",[380,132450,132451],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[380,132453,132454],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[380,132456,132457],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,132459,132460],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,132462,132463],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[49,132465,132466],{"className":126749,"code":131215,"language":126751,"meta":46,"style":46},[28,132467,132468,132474,132484,132488,132494,132504],{"__ignoreMap":46},[57,132469,132470,132472],{"class":59,"line":60},[57,132471,131222],{"class":70},[57,132473,15844],{"class":140},[57,132475,132476,132478,132480,132482],{"class":59,"line":67},[57,132477,131229],{"class":81},[57,132479,51634],{"class":140},[57,132481,24008],{"class":81},[57,132483,1576],{"class":140},[57,132485,132486],{"class":59,"line":144},[57,132487,1847],{"class":140},[57,132489,132490,132492],{"class":59,"line":150},[57,132491,131244],{"class":70},[57,132493,15844],{"class":140},[57,132495,132496,132498,132500,132502],{"class":59,"line":162},[57,132497,131229],{"class":81},[57,132499,51634],{"class":140},[57,132501,72719],{"class":81},[57,132503,1576],{"class":140},[57,132505,132506],{"class":59,"line":180},[57,132507,1847],{"class":140},[394,132509,132511],{"id":132510},"_1113-定位","11.1.3 定位",[22270,132513,132515],{"id":132514},"_11131-使用场景","11.1.3.1 使用场景",[14,132517,132518],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,132520,132521],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22270,132523,132525],{"id":132524},"_11132-定位组成","11.1.3.2 定位组成",[14,132527,132528],{},"定位 = 定位模式 + 边偏移",[377,132530,132531],{},[380,132532,132533,132536,132537],{},[33,132534,132535],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[33,132538,132539],{},"定位模式",[49,132541,132543],{"className":126749,"code":132542,"language":126751,"meta":46,"style":46},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[28,132544,132545,132551,132565,132582,132599],{"__ignoreMap":46},[57,132546,132547,132549],{"class":59,"line":60},[57,132548,130597],{"class":70},[57,132550,15844],{"class":140},[57,132552,132553,132556,132558,132560,132562],{"class":59,"line":67},[57,132554,132555],{"class":81},"  position",[57,132557,51634],{"class":140},[57,132559,54961],{"class":81},[57,132561,130612],{"class":140},[57,132563,132564],{"class":63},"\u002F* 定位模式 *\u002F\n",[57,132566,132567,132570,132572,132574,132576,132579],{"class":59,"line":144},[57,132568,132569],{"class":81},"  top",[57,132571,51634],{"class":140},[57,132573,862],{"class":81},[57,132575,51689],{"class":136},[57,132577,132578],{"class":140},";           ",[57,132580,132581],{"class":63},"\u002F* 边偏移：上 *\u002F\n",[57,132583,132584,132587,132589,132591,132593,132596],{"class":59,"line":150},[57,132585,132586],{"class":81},"  left",[57,132588,51634],{"class":140},[57,132590,1116],{"class":81},[57,132592,51689],{"class":136},[57,132594,132595],{"class":140},";          ",[57,132597,132598],{"class":63},"\u002F* 边偏移：左 *\u002F\n",[57,132600,132601],{"class":59,"line":162},[57,132602,1847],{"class":140},[557,132604,132605,132614],{},[560,132606,132607],{},[563,132608,132609,132611],{},[566,132610,571],{"align":24008},[566,132612,132613],{"align":24008},"语义",[603,132615,132616,132623,132630,132637],{},[563,132617,132618,132620],{},[608,132619,132202],{"align":24008},[608,132621,132622],{"align":24008},"静态定位",[563,132624,132625,132627],{},[608,132626,54961],{"align":24008},[608,132628,132629],{"align":24008},"相对定位",[563,132631,132632,132634],{},[608,132633,55028],{"align":24008},[608,132635,132636],{"align":24008},"绝对定位",[563,132638,132639,132641],{},[608,132640,86430],{"align":24008},[608,132642,132643],{"align":24008},"固定定位",[14,132645,132646],{},"（1）静态定位：",[1422,132648,132649,132660],{},[380,132650,132651,132652,132655,132656,132659],{},"静态定位是元素的 ",[33,132653,132654],{},"默认定位方式"," ， ",[33,132657,132658],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[380,132661,5454],{},[49,132663,132664],{"className":126749,"code":132542,"language":126751,"meta":46,"style":46},[28,132665,132666,132672,132684,132698,132712],{"__ignoreMap":46},[57,132667,132668,132670],{"class":59,"line":60},[57,132669,130597],{"class":70},[57,132671,15844],{"class":140},[57,132673,132674,132676,132678,132680,132682],{"class":59,"line":67},[57,132675,132555],{"class":81},[57,132677,51634],{"class":140},[57,132679,54961],{"class":81},[57,132681,130612],{"class":140},[57,132683,132564],{"class":63},[57,132685,132686,132688,132690,132692,132694,132696],{"class":59,"line":144},[57,132687,132569],{"class":81},[57,132689,51634],{"class":140},[57,132691,862],{"class":81},[57,132693,51689],{"class":136},[57,132695,132578],{"class":140},[57,132697,132581],{"class":63},[57,132699,132700,132702,132704,132706,132708,132710],{"class":59,"line":150},[57,132701,132586],{"class":81},[57,132703,51634],{"class":140},[57,132705,1116],{"class":81},[57,132707,51689],{"class":136},[57,132709,132595],{"class":140},[57,132711,132598],{"class":63},[57,132713,132714],{"class":59,"line":162},[57,132715,1847],{"class":140},[1422,132717,132718,132721],{},[380,132719,132720],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[380,132722,132723],{},"静态定位在布局时我们几乎不用的",[14,132725,132726],{},"（2）相对定位",[1422,132728,132729,132736],{},[380,132730,132731,132732,132735],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[33,132733,132734],{},"原来的位置"," 来说的（自恋型）",[380,132737,5454],{},[49,132739,132740],{"className":126749,"code":132542,"language":126751,"meta":46,"style":46},[28,132741,132742,132748,132760,132774,132788],{"__ignoreMap":46},[57,132743,132744,132746],{"class":59,"line":60},[57,132745,130597],{"class":70},[57,132747,15844],{"class":140},[57,132749,132750,132752,132754,132756,132758],{"class":59,"line":67},[57,132751,132555],{"class":81},[57,132753,51634],{"class":140},[57,132755,54961],{"class":81},[57,132757,130612],{"class":140},[57,132759,132564],{"class":63},[57,132761,132762,132764,132766,132768,132770,132772],{"class":59,"line":144},[57,132763,132569],{"class":81},[57,132765,51634],{"class":140},[57,132767,862],{"class":81},[57,132769,51689],{"class":136},[57,132771,132578],{"class":140},[57,132773,132581],{"class":63},[57,132775,132776,132778,132780,132782,132784,132786],{"class":59,"line":150},[57,132777,132586],{"class":81},[57,132779,51634],{"class":140},[57,132781,1116],{"class":81},[57,132783,51689],{"class":136},[57,132785,132595],{"class":140},[57,132787,132598],{"class":63},[57,132789,132790],{"class":59,"line":162},[57,132791,1847],{"class":140},[1422,132793,132794],{},[380,132795,132796,132797,132799,132800,132802,132803,132806,132807,132810,132811,132813,132814,132817],{},"相对定位的特点：",[53913,132798],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53913,132801],{},"  ② ",[33,132804,132805],{},"原来"," 在标准流的 ",[33,132808,132809],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53913,132812],{},"  ③因此， ",[33,132815,132816],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,132819,132820],{},"（3）绝对定位",[1422,132822,132823,132832],{},[380,132824,132825,132827,132828,132831],{},[33,132826,132636],{}," 是元素在移动位置的时候，是相对于它 ",[33,132829,132830],{},"祖先元素"," 来说的（拼爹型）",[380,132833,5454],{},[49,132835,132836],{"className":126749,"code":132542,"language":126751,"meta":46,"style":46},[28,132837,132838,132844,132856,132870,132884],{"__ignoreMap":46},[57,132839,132840,132842],{"class":59,"line":60},[57,132841,130597],{"class":70},[57,132843,15844],{"class":140},[57,132845,132846,132848,132850,132852,132854],{"class":59,"line":67},[57,132847,132555],{"class":81},[57,132849,51634],{"class":140},[57,132851,54961],{"class":81},[57,132853,130612],{"class":140},[57,132855,132564],{"class":63},[57,132857,132858,132860,132862,132864,132866,132868],{"class":59,"line":144},[57,132859,132569],{"class":81},[57,132861,51634],{"class":140},[57,132863,862],{"class":81},[57,132865,51689],{"class":136},[57,132867,132578],{"class":140},[57,132869,132581],{"class":63},[57,132871,132872,132874,132876,132878,132880,132882],{"class":59,"line":150},[57,132873,132586],{"class":81},[57,132875,51634],{"class":140},[57,132877,1116],{"class":81},[57,132879,51689],{"class":136},[57,132881,132595],{"class":140},[57,132883,132598],{"class":63},[57,132885,132886],{"class":59,"line":162},[57,132887,1847],{"class":140},[1422,132889,132890,132905,132914,132917],{},[380,132891,132892,132893,132895,132896,132898,132899,132901,132902,132904],{},"绝对定位的特点：",[53913,132894],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53913,132897],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53913,132900],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53913,132903],{},"  (4)固定定位",[380,132906,132907,132909,132910,132913],{},[33,132908,132643],{}," 是元素 ",[33,132911,132912],{},"固定于浏览器可视区的位置"," 。（认死理型）",[380,132915,132916],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[380,132918,132919],{},"语法:",[49,132921,132922],{"className":126749,"code":132542,"language":126751,"meta":46,"style":46},[28,132923,132924,132930,132942,132956,132970],{"__ignoreMap":46},[57,132925,132926,132928],{"class":59,"line":60},[57,132927,130597],{"class":70},[57,132929,15844],{"class":140},[57,132931,132932,132934,132936,132938,132940],{"class":59,"line":67},[57,132933,132555],{"class":81},[57,132935,51634],{"class":140},[57,132937,54961],{"class":81},[57,132939,130612],{"class":140},[57,132941,132564],{"class":63},[57,132943,132944,132946,132948,132950,132952,132954],{"class":59,"line":144},[57,132945,132569],{"class":81},[57,132947,51634],{"class":140},[57,132949,862],{"class":81},[57,132951,51689],{"class":136},[57,132953,132578],{"class":140},[57,132955,132581],{"class":63},[57,132957,132958,132960,132962,132964,132966,132968],{"class":59,"line":150},[57,132959,132586],{"class":81},[57,132961,51634],{"class":140},[57,132963,1116],{"class":81},[57,132965,51689],{"class":136},[57,132967,132595],{"class":140},[57,132969,132598],{"class":63},[57,132971,132972],{"class":59,"line":162},[57,132973,1847],{"class":140},[1422,132975,132976,132985],{},[380,132977,132978,132979,132981,132982,132984],{},"特点:",[53913,132980],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53913,132983],{},"  ②固定定位不再占有原先的位置,完全脱标",[380,132986,132987,132988,132990,132991,132993,132994,132996],{},"固定在版心位置的方法:",[53913,132989],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53913,132992],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53913,132995],{},"  实例：",[49,132998,132999],{"className":126749,"code":132542,"language":126751,"meta":46,"style":46},[28,133000,133001,133007,133019,133033,133047],{"__ignoreMap":46},[57,133002,133003,133005],{"class":59,"line":60},[57,133004,130597],{"class":70},[57,133006,15844],{"class":140},[57,133008,133009,133011,133013,133015,133017],{"class":59,"line":67},[57,133010,132555],{"class":81},[57,133012,51634],{"class":140},[57,133014,54961],{"class":81},[57,133016,130612],{"class":140},[57,133018,132564],{"class":63},[57,133020,133021,133023,133025,133027,133029,133031],{"class":59,"line":144},[57,133022,132569],{"class":81},[57,133024,51634],{"class":140},[57,133026,862],{"class":81},[57,133028,51689],{"class":136},[57,133030,132578],{"class":140},[57,133032,132581],{"class":63},[57,133034,133035,133037,133039,133041,133043,133045],{"class":59,"line":150},[57,133036,132586],{"class":81},[57,133038,51634],{"class":140},[57,133040,1116],{"class":81},[57,133042,51689],{"class":136},[57,133044,132595],{"class":140},[57,133046,132598],{"class":63},[57,133048,133049],{"class":59,"line":162},[57,133050,1847],{"class":140},[44,133052],{"style":126605,"src":133053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,133055,133056],{},"(5)粘性定位",[1422,133058,133059,133062],{},[380,133060,133061],{},"粘性定位可以被认为是相对定位和固定定位的混合",[380,133063,5454],{},[49,133065,133066],{"className":126749,"code":132542,"language":126751,"meta":46,"style":46},[28,133067,133068,133074,133086,133100,133114],{"__ignoreMap":46},[57,133069,133070,133072],{"class":59,"line":60},[57,133071,130597],{"class":70},[57,133073,15844],{"class":140},[57,133075,133076,133078,133080,133082,133084],{"class":59,"line":67},[57,133077,132555],{"class":81},[57,133079,51634],{"class":140},[57,133081,54961],{"class":81},[57,133083,130612],{"class":140},[57,133085,132564],{"class":63},[57,133087,133088,133090,133092,133094,133096,133098],{"class":59,"line":144},[57,133089,132569],{"class":81},[57,133091,51634],{"class":140},[57,133093,862],{"class":81},[57,133095,51689],{"class":136},[57,133097,132578],{"class":140},[57,133099,132581],{"class":63},[57,133101,133102,133104,133106,133108,133110,133112],{"class":59,"line":150},[57,133103,132586],{"class":81},[57,133105,51634],{"class":140},[57,133107,1116],{"class":81},[57,133109,51689],{"class":136},[57,133111,132595],{"class":140},[57,133113,132598],{"class":63},[57,133115,133116],{"class":59,"line":162},[57,133117,1847],{"class":140},[1422,133119,133120],{},[380,133121,133122,133123,133125,133126,133128,133129,133131,133132,133135,133136,133138],{},"粘性定位的特点：",[53913,133124],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53913,133127],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53913,133130],{},"  ③必须添加 top 、left、right、bottom ",[33,133133,133134],{},"其中一个"," 才有效",[53913,133137],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[49,133140,133141],{"className":126749,"code":132542,"language":126751,"meta":46,"style":46},[28,133142,133143,133149,133161,133175,133189],{"__ignoreMap":46},[57,133144,133145,133147],{"class":59,"line":60},[57,133146,130597],{"class":70},[57,133148,15844],{"class":140},[57,133150,133151,133153,133155,133157,133159],{"class":59,"line":67},[57,133152,132555],{"class":81},[57,133154,51634],{"class":140},[57,133156,54961],{"class":81},[57,133158,130612],{"class":140},[57,133160,132564],{"class":63},[57,133162,133163,133165,133167,133169,133171,133173],{"class":59,"line":144},[57,133164,132569],{"class":81},[57,133166,51634],{"class":140},[57,133168,862],{"class":81},[57,133170,51689],{"class":136},[57,133172,132578],{"class":140},[57,133174,132581],{"class":63},[57,133176,133177,133179,133181,133183,133185,133187],{"class":59,"line":150},[57,133178,132586],{"class":81},[57,133180,51634],{"class":140},[57,133182,1116],{"class":81},[57,133184,51689],{"class":136},[57,133186,132595],{"class":140},[57,133188,132598],{"class":63},[57,133190,133191],{"class":59,"line":162},[57,133192,1847],{"class":140},[44,133194],{"style":126605,"src":133195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,133197,133198],{},"(6)总结",[557,133200,133201,133216],{},[560,133202,133203],{},[563,133204,133205,133207,133210,133213],{},[566,133206,132539],{"align":24008},[566,133208,133209],{"align":24008},"是否脱标",[566,133211,133212],{"align":24008},"移动位置",[566,133214,133215],{"align":24008},"是否常用",[603,133217,133218,133231,133245,133259,133272],{},[563,133219,133220,133223,133225,133228],{},[608,133221,133222],{"align":24008},"Static 静态定位",[608,133224,104875],{"align":24008},[608,133226,133227],{"align":24008},"不能使用边偏移",[608,133229,133230],{"align":24008},"很少",[563,133232,133233,133236,133239,133242],{},[608,133234,133235],{"align":24008},"Relative 相对定位",[608,133237,133238],{"align":24008},"否(占有位置)",[608,133240,133241],{"align":24008},"相对于自身位置移动",[608,133243,133244],{"align":24008},"基本单独使用",[563,133246,133247,133250,133253,133256],{},[608,133248,133249],{"align":24008},"Absolute 绝对定位",[608,133251,133252],{"align":24008},"是(不占有位置)",[608,133254,133255],{"align":24008},"带有定位的父级",[608,133257,133258],{"align":24008},"要和定位父级元素搭配使用",[563,133260,133261,133264,133266,133269],{},[608,133262,133263],{"align":24008},"Fixed 固定定位",[608,133265,133252],{"align":24008},[608,133267,133268],{"align":24008},"浏览器可视区",[608,133270,133271],{"align":24008},"单独使用,不需要父级",[563,133273,133274,133277,133279,133281],{},[608,133275,133276],{"align":24008},"Sticky 粘性定位",[608,133278,133238],{"align":24008},[608,133280,133268],{"align":24008},[608,133282,133283],{"align":24008},"当前阶段少",[377,133285,133286],{"start":67},[380,133287,133288,133291],{},[33,133289,133290],{},"边偏移"," 则决定了该元素的最终位置",[557,133293,133294,133305],{},[560,133295,133296],{},[563,133297,133298,133301,133303],{},[566,133299,133300],{"align":24008},"边偏移属性",[566,133302,27761],{"align":24008},[566,133304,27758],{"align":24008},[603,133306,133307,133318,133329,133339],{},[563,133308,133309,133312,133315],{},[608,133310,133311],{"align":24008},"top",[608,133313,133314],{"align":24008},"top: 80px;",[608,133316,133317],{"align":24008},"顶端偏移量，定义元素相对于父元素上边线的距离",[563,133319,133320,133323,133326],{},[608,133321,133322],{"align":24008},"bottom",[608,133324,133325],{"align":24008},"bottom: 80px ;",[608,133327,133328],{"align":24008},"底部偏移量，定义元素相对于其父元素下边线的距离",[563,133330,133331,133333,133336],{},[608,133332,24008],{"align":24008},[608,133334,133335],{"align":24008},"left: 80px ;",[608,133337,133338],{"align":24008},"左侧偏移量，定义元素相对于其父元素左边线的距离",[563,133340,133341,133343,133346],{},[608,133342,72719],{"align":24008},[608,133344,133345],{"align":24008},"right: 80px ;",[608,133347,133348],{"align":24008},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1422,133350,133351],{},[380,133352,9298,133353,133355,133356,133358,133359,133361,133362,133365,133366,133368,133369,133371],{},[53913,133354],{},"  ① ",[33,133357,133290],{}," 需要和 ",[33,133360,132539],{}," 联合使用， ",[33,133363,133364],{},"单独使用无效"," ；",[53913,133367],{},"  ②top和bottom不要同时使用",[53913,133370],{},"  ③left和right不要同时使用",[22270,133373,133375],{"id":133374},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,133377,133378],{},"子级是绝对定位的话，父级要用相对定位",[1422,133380,133381,133384,133387,133390],{},[380,133382,133383],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[380,133385,133386],{},"父盒子需要加定位限制子盒子在父盒子内显示",[380,133388,133389],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[380,133391,133392,133393,133396],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[33,133394,133395],{},"子绝父绝"," 也会遇到",[22270,133398,133400],{"id":133399},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1422,133402,133403,133418],{},[380,133404,133405,133406,133409,133410,133413,133414,133417],{},"在使用 ",[33,133407,133408],{},"定位"," 布局时，可能会 ",[33,133411,133412],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[33,133415,133416],{},"z-index"," 来控制盒子的前后次序 (z轴)",[380,133419,5454],{},[49,133421,133422],{"className":126749,"code":132542,"language":126751,"meta":46,"style":46},[28,133423,133424,133430,133442,133456,133470],{"__ignoreMap":46},[57,133425,133426,133428],{"class":59,"line":60},[57,133427,130597],{"class":70},[57,133429,15844],{"class":140},[57,133431,133432,133434,133436,133438,133440],{"class":59,"line":67},[57,133433,132555],{"class":81},[57,133435,51634],{"class":140},[57,133437,54961],{"class":81},[57,133439,130612],{"class":140},[57,133441,132564],{"class":63},[57,133443,133444,133446,133448,133450,133452,133454],{"class":59,"line":144},[57,133445,132569],{"class":81},[57,133447,51634],{"class":140},[57,133449,862],{"class":81},[57,133451,51689],{"class":136},[57,133453,132578],{"class":140},[57,133455,132581],{"class":63},[57,133457,133458,133460,133462,133464,133466,133468],{"class":59,"line":150},[57,133459,132586],{"class":81},[57,133461,51634],{"class":140},[57,133463,1116],{"class":81},[57,133465,51689],{"class":136},[57,133467,132595],{"class":140},[57,133469,132598],{"class":63},[57,133471,133472],{"class":59,"line":162},[57,133473,1847],{"class":140},[1422,133475,133476],{},[380,133477,133478,133479,133355,133481,133483,133484,127912,133487,82736,133490,133492,133493,133495,133496,133499,133500,133365,133503,133505,133506,133509,133511],{},"z-index的特性",[53913,133480],{},[33,133482,127213],{}," ： ",[33,133485,133486],{},"正整数",[33,133488,133489],{},"负整数",[33,133491,226],{}," ，默认值是 0，数值越大，盒子越靠上；",[53913,133494],{},"  ②如果 ",[33,133497,133498],{},"属性值相同"," ，则按照书写顺序， ",[33,133501,133502],{},"后来居上",[53913,133504],{},"  ③数字后面 ",[33,133507,133508],{},"不能加单位",[53913,133510],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22270,133513,133515],{"id":133514},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,133517,133518],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,133520,133521],{},"方法:",[1422,133523,133524,133534],{},[380,133525,133526,133527,133530,133531],{},"left: 50%; 让 ",[33,133528,133529],{},"盒子的左侧"," 移动到 ",[33,133532,133533],{},"父级元素的水平中心位置",[380,133535,133536,133537,133540,133541],{},"margin-left: -100px; 让盒子 ",[33,133538,133539],{},"向左"," 移动 ",[33,133542,133543],{},"自身宽度的一半",[22270,133545,133547],{"id":133546},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[377,133549,133550,133553],{},[380,133551,133552],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[380,133554,133555],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,133557,133558],{},"也就是说绝对定位和固定定位和浮动类似",[377,133560,133561],{"start":144},[380,133562,133563],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1422,133565,133566,133569,133572],{},[380,133567,133568],{},"可以用inline-block 转换为行内块",[380,133570,133571],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[380,133573,133574],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,133576,133577],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22270,133579,133581],{"id":133580},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[377,133583,133584,133587,133590,133593],{},[380,133585,133586],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[380,133588,133589],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[380,133591,133592],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[380,133594,133595],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[49,133597,133598],{"className":126749,"code":131215,"language":126751,"meta":46,"style":46},[28,133599,133600,133606,133616,133620,133626,133636],{"__ignoreMap":46},[57,133601,133602,133604],{"class":59,"line":60},[57,133603,131222],{"class":70},[57,133605,15844],{"class":140},[57,133607,133608,133610,133612,133614],{"class":59,"line":67},[57,133609,131229],{"class":81},[57,133611,51634],{"class":140},[57,133613,24008],{"class":81},[57,133615,1576],{"class":140},[57,133617,133618],{"class":59,"line":144},[57,133619,1847],{"class":140},[57,133621,133622,133624],{"class":59,"line":150},[57,133623,131244],{"class":70},[57,133625,15844],{"class":140},[57,133627,133628,133630,133632,133634],{"class":59,"line":162},[57,133629,131229],{"class":81},[57,133631,51634],{"class":140},[57,133633,72719],{"class":81},[57,133635,1576],{"class":140},[57,133637,133638],{"class":59,"line":180},[57,133639,1847],{"class":140},[44,133641],{"style":126605,"src":133642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22270,133644,133646],{"id":133645},"_11138-轮播图","11.1.3.8 轮播图",[44,133648],{"style":126605,"src":133649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[377,133651,133652],{},[380,133653,133654],{},"制作顺序:",[1422,133656,133657,133660,133663,133672],{},[380,133658,133659],{},"大盒子我们类名为： tb-promo 淘宝广告",[380,133661,133662],{},"里面先放一张图片",[380,133664,133665,133666,133668,133669,133671],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53913,133667],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53913,133670],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[380,133673,133674,133675,133677,133678,133680],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53913,133676],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53913,133679],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[377,133682,133683],{"start":67},[380,133684,133685],{},"代码模块",[49,133687,133689],{"className":126749,"code":133688,"language":126751,"meta":46,"style":46},"\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",[28,133690,133691,133696,133703,133713,133723,133733,133737,133742,133749,133759],{"__ignoreMap":46},[57,133692,133693],{"class":59,"line":60},[57,133694,133695],{"class":63},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[57,133697,133698,133701],{"class":59,"line":67},[57,133699,133700],{"class":70},".son",[57,133702,15844],{"class":140},[57,133704,133705,133707,133709,133711],{"class":59,"line":144},[57,133706,132555],{"class":81},[57,133708,51634],{"class":140},[57,133710,55028],{"class":81},[57,133712,1576],{"class":140},[57,133714,133715,133717,133719,133721],{"class":59,"line":150},[57,133716,132569],{"class":81},[57,133718,51634],{"class":140},[57,133720,226],{"class":81},[57,133722,1576],{"class":140},[57,133724,133725,133727,133729,133731],{"class":59,"line":162},[57,133726,132586],{"class":81},[57,133728,51634],{"class":140},[57,133730,226],{"class":81},[57,133732,1576],{"class":140},[57,133734,133735],{"class":59,"line":180},[57,133736,1847],{"class":140},[57,133738,133739],{"class":59,"line":186},[57,133740,133741],{"class":63},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[57,133743,133744,133747],{"class":59,"line":197},[57,133745,133746],{"class":70},".father",[57,133748,15844],{"class":140},[57,133750,133751,133753,133755,133757],{"class":59,"line":241},[57,133752,132555],{"class":81},[57,133754,51634],{"class":140},[57,133756,54961],{"class":81},[57,133758,1576],{"class":140},[57,133760,133761],{"class":59,"line":249},[57,133762,1847],{"class":140},[14,133764,133765],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[394,133767,133769],{"id":133768},"_1114-定位数值的移动","11.1.4 定位数值的移动",[44,133771],{"style":126605,"src":133772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,133774,133775],{},"✨ 黄金口诀：",[14,133777,133778],{},"\"TOP正下负上，LEFT正右负左\"",[14,133780,133781],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,133783,133784],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,133786,133787],{},"✨ 简单记：",[14,133789,133790],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[342,133792,133793],{},"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":46,"searchDepth":67,"depth":67,"links":133795},[133796],{"id":132323,"depth":67,"text":132324,"children":133797},[133798,133799,133800,133801],{"id":132327,"depth":144,"text":132328},{"id":132342,"depth":144,"text":132343},{"id":132510,"depth":144,"text":132511},{"id":133768,"depth":144,"text":133769},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132315,"description":347},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133808,"title":133809,"body":133810,"description":347,"extension":348,"meta":135233,"navigation":350,"path":135234,"seo":135235,"stem":135236,"__hash__":135237},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133811,"toc":135212},[133812,133815,133819,133827,133831,133836,133844,133856,133860,133865,133873,133884,133888,133893,133934,133942,133946,133949,133952,133955,134049,134052,134146,134149,134243,134246,134249,134284,134287,134290,134320,134323,134326,134329,134332,134335,134338,134341,134411,134414,134418,134422,134463,134467,134473,134476,134479,134483,134486,134489,134492,134573,134576,134579,134583,134587,134590,134593,134596,134599,134602,134608,134617,134621,134640,134644,134654,134657,134660,134663,134666,134669,134672,134675,134678,134687,134691,134700,134703,134708,134761,134766,134932,134935,134938,134943,134946,134949,134952,134955,134960,135108,135111,135114,135119,135122,135127,135161,135164,135167,135171,135174,135181,135184,135187,135190,135193,135196,135199,135202,135206,135209],[10,133813,133809],{"id":133814},"_12-显示隐藏与图形资源",[365,133816,133818],{"id":133817},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1422,133820,133821,133824],{},[380,133822,133823],{},"目的:让一个元素在页面中消失或者显示出来",[380,133825,133826],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[394,133828,133830],{"id":133829},"_1211-display-显示","12.1.1 display 显示",[377,133832,133833],{},[380,133834,133835],{},"display 设置或检索对象是否及如何显示",[1422,133837,133838,133841],{},[380,133839,133840],{},"display: none;隐藏对象",[380,133842,133843],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[377,133845,133846,133853],{"start":67},[380,133847,133848,133849,133852],{},"特点： display 隐藏元素后， ",[33,133850,133851],{},"不再占"," 有原来的位置",[380,133854,133855],{},"在js中使用非常的广泛",[394,133857,133859],{"id":133858},"_1212-visibility可见性","12.1.2 visibility可见性",[377,133861,133862],{},[380,133863,133864],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1422,133866,133867,133870],{},[380,133868,133869],{},"visibility： visible；元素可见",[380,133871,133872],{},"visibility：hidden；元素隐藏",[377,133874,133875,133878,133881],{"start":67},[380,133876,133877],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[380,133879,133880],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[380,133882,133883],{},"隐藏后继续占有原有位置",[394,133885,133887],{"id":133886},"_1213-overflow溢出","12.1.3 overflow溢出",[1422,133889,133890],{},[380,133891,133892],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[557,133894,133895,133903],{},[560,133896,133897],{},[563,133898,133899,133901],{},[566,133900,127213],{"align":24008},[566,133902,27758],{"align":24008},[603,133904,133905,133913,133920,133927],{},[563,133906,133907,133910],{},[608,133908,133909],{"align":24008},"visible",[608,133911,133912],{"align":24008},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[563,133914,133915,133917],{},[608,133916,61911],{"align":24008},[608,133918,133919],{"align":24008},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[563,133921,133922,133924],{},[608,133923,129169],{"align":24008},[608,133925,133926],{"align":24008},"不管超出内容否，总是显示滚动条",[563,133928,133929,133931],{},[608,133930,72860],{"align":24008},[608,133932,133933],{"align":24008},"超出自动显示滚动条，不超出不显示滚动条",[1422,133935,133936,133939],{},[380,133937,133938],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[380,133940,133941],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[394,133943,133945],{"id":133944},"_1214-案例收获","12.1.4 案例收获",[44,133947],{"style":126605,"src":133948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,133950,133951],{},"问题：没做出来动态效果，使用hover没实现",[14,133953,133954],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[49,133956,133957],{"className":126749,"code":132181,"language":126751,"meta":46,"style":46},[28,133958,133959,133963,133977,133981,133995,133999,134013,134017,134031,134035],{"__ignoreMap":46},[57,133960,133961],{"class":59,"line":60},[57,133962,132188],{"class":63},[57,133964,133965,133967,133969,133971,133973,133975],{"class":59,"line":67},[57,133966,132193],{"class":70},[57,133968,80004],{"class":140},[57,133970,129109],{"class":81},[57,133972,51634],{"class":140},[57,133974,132202],{"class":81},[57,133976,129679],{"class":140},[57,133978,133979],{"class":59,"line":144},[57,133980,132209],{"class":63},[57,133982,133983,133985,133987,133989,133991,133993],{"class":59,"line":150},[57,133984,132214],{"class":70},[57,133986,80004],{"class":140},[57,133988,129109],{"class":81},[57,133990,51634],{"class":140},[57,133992,54961],{"class":81},[57,133994,129679],{"class":140},[57,133996,133997],{"class":59,"line":162},[57,133998,132229],{"class":63},[57,134000,134001,134003,134005,134007,134009,134011],{"class":59,"line":180},[57,134002,132234],{"class":70},[57,134004,80004],{"class":140},[57,134006,129109],{"class":81},[57,134008,51634],{"class":140},[57,134010,55028],{"class":81},[57,134012,129679],{"class":140},[57,134014,134015],{"class":59,"line":186},[57,134016,132249],{"class":63},[57,134018,134019,134021,134023,134025,134027,134029],{"class":59,"line":197},[57,134020,132254],{"class":70},[57,134022,80004],{"class":140},[57,134024,129109],{"class":81},[57,134026,51634],{"class":140},[57,134028,86430],{"class":81},[57,134030,129679],{"class":140},[57,134032,134033],{"class":59,"line":241},[57,134034,132269],{"class":63},[57,134036,134037,134039,134041,134043,134045,134047],{"class":59,"line":249},[57,134038,132274],{"class":70},[57,134040,80004],{"class":140},[57,134042,129109],{"class":81},[57,134044,51634],{"class":140},[57,134046,132283],{"class":81},[57,134048,129679],{"class":140},[14,134050,134051],{},"完整代码：",[49,134053,134054],{"className":126749,"code":132181,"language":126751,"meta":46,"style":46},[28,134055,134056,134060,134074,134078,134092,134096,134110,134114,134128,134132],{"__ignoreMap":46},[57,134057,134058],{"class":59,"line":60},[57,134059,132188],{"class":63},[57,134061,134062,134064,134066,134068,134070,134072],{"class":59,"line":67},[57,134063,132193],{"class":70},[57,134065,80004],{"class":140},[57,134067,129109],{"class":81},[57,134069,51634],{"class":140},[57,134071,132202],{"class":81},[57,134073,129679],{"class":140},[57,134075,134076],{"class":59,"line":144},[57,134077,132209],{"class":63},[57,134079,134080,134082,134084,134086,134088,134090],{"class":59,"line":150},[57,134081,132214],{"class":70},[57,134083,80004],{"class":140},[57,134085,129109],{"class":81},[57,134087,51634],{"class":140},[57,134089,54961],{"class":81},[57,134091,129679],{"class":140},[57,134093,134094],{"class":59,"line":162},[57,134095,132229],{"class":63},[57,134097,134098,134100,134102,134104,134106,134108],{"class":59,"line":180},[57,134099,132234],{"class":70},[57,134101,80004],{"class":140},[57,134103,129109],{"class":81},[57,134105,51634],{"class":140},[57,134107,55028],{"class":81},[57,134109,129679],{"class":140},[57,134111,134112],{"class":59,"line":186},[57,134113,132249],{"class":63},[57,134115,134116,134118,134120,134122,134124,134126],{"class":59,"line":197},[57,134117,132254],{"class":70},[57,134119,80004],{"class":140},[57,134121,129109],{"class":81},[57,134123,51634],{"class":140},[57,134125,86430],{"class":81},[57,134127,129679],{"class":140},[57,134129,134130],{"class":59,"line":241},[57,134131,132269],{"class":63},[57,134133,134134,134136,134138,134140,134142,134144],{"class":59,"line":249},[57,134135,132274],{"class":70},[57,134137,80004],{"class":140},[57,134139,129109],{"class":81},[57,134141,51634],{"class":140},[57,134143,132283],{"class":81},[57,134145,129679],{"class":140},[14,134147,134148],{},"分布思路重点详解：",[49,134150,134151],{"className":126749,"code":132181,"language":126751,"meta":46,"style":46},[28,134152,134153,134157,134171,134175,134189,134193,134207,134211,134225,134229],{"__ignoreMap":46},[57,134154,134155],{"class":59,"line":60},[57,134156,132188],{"class":63},[57,134158,134159,134161,134163,134165,134167,134169],{"class":59,"line":67},[57,134160,132193],{"class":70},[57,134162,80004],{"class":140},[57,134164,129109],{"class":81},[57,134166,51634],{"class":140},[57,134168,132202],{"class":81},[57,134170,129679],{"class":140},[57,134172,134173],{"class":59,"line":144},[57,134174,132209],{"class":63},[57,134176,134177,134179,134181,134183,134185,134187],{"class":59,"line":150},[57,134178,132214],{"class":70},[57,134180,80004],{"class":140},[57,134182,129109],{"class":81},[57,134184,51634],{"class":140},[57,134186,54961],{"class":81},[57,134188,129679],{"class":140},[57,134190,134191],{"class":59,"line":162},[57,134192,132229],{"class":63},[57,134194,134195,134197,134199,134201,134203,134205],{"class":59,"line":180},[57,134196,132234],{"class":70},[57,134198,80004],{"class":140},[57,134200,129109],{"class":81},[57,134202,51634],{"class":140},[57,134204,55028],{"class":81},[57,134206,129679],{"class":140},[57,134208,134209],{"class":59,"line":186},[57,134210,132249],{"class":63},[57,134212,134213,134215,134217,134219,134221,134223],{"class":59,"line":197},[57,134214,132254],{"class":70},[57,134216,80004],{"class":140},[57,134218,129109],{"class":81},[57,134220,51634],{"class":140},[57,134222,86430],{"class":81},[57,134224,129679],{"class":140},[57,134226,134227],{"class":59,"line":241},[57,134228,132269],{"class":63},[57,134230,134231,134233,134235,134237,134239,134241],{"class":59,"line":249},[57,134232,132274],{"class":70},[57,134234,80004],{"class":140},[57,134236,129109],{"class":81},[57,134238,51634],{"class":140},[57,134240,132283],{"class":81},[57,134242,129679],{"class":140},[44,134244],{"style":126605,"src":134245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,134247,134248],{},"图片太大，盒子太小，此时需要修改图片的大小",[49,134250,134252],{"className":127496,"code":134251,"language":127498,"meta":46,"style":46},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[28,134253,134254],{"__ignoreMap":46},[57,134255,134256,134258,134260,134262,134264,134267,134269,134271,134274,134277,134279,134282],{"class":59,"line":60},[57,134257,1326],{"class":140},[57,134259,44],{"class":51497},[57,134261,55436],{"class":70},[57,134263,156],{"class":140},[57,134265,134266],{"class":74},"\"images\u002Fpic.jpg\"",[57,134268,55444],{"class":70},[57,134270,156],{"class":140},[57,134272,134273],{"class":74},"\"描述文字\"",[57,134275,134276],{"class":70}," title",[57,134278,156],{"class":140},[57,134280,134281],{"class":74},"\"悬停提示\"",[57,134283,51504],{"class":140},[44,134285],{"style":126605,"src":134286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,134288,134289],{},"制造遮罩层",[49,134291,134292],{"className":127496,"code":134251,"language":127498,"meta":46,"style":46},[28,134293,134294],{"__ignoreMap":46},[57,134295,134296,134298,134300,134302,134304,134306,134308,134310,134312,134314,134316,134318],{"class":59,"line":60},[57,134297,1326],{"class":140},[57,134299,44],{"class":51497},[57,134301,55436],{"class":70},[57,134303,156],{"class":140},[57,134305,134266],{"class":74},[57,134307,55444],{"class":70},[57,134309,156],{"class":140},[57,134311,134273],{"class":74},[57,134313,134276],{"class":70},[57,134315,156],{"class":140},[57,134317,134281],{"class":74},[57,134319,51504],{"class":140},[14,134321,134322],{},"此时是这样的为标准流",[44,134324],{"style":126605,"src":134325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,134327,134328],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,134330,134331],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,134333,134334],{},"让他在中间，用center(background-position)",[14,134336,134337],{},"将需要变的尽可能放到一个盒子中",[14,134339,134340],{},"放大盒子上内部盒子发生变化",[49,134342,134344],{"className":126749,"code":134343,"language":126751,"meta":46,"style":46},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[28,134345,134346,134352,134362,134366,134373,134383,134395,134407],{"__ignoreMap":46},[57,134347,134348,134350],{"class":59,"line":60},[57,134349,127816],{"class":70},[57,134351,15844],{"class":140},[57,134353,134354,134356,134358,134360],{"class":59,"line":67},[57,134355,132555],{"class":81},[57,134357,51634],{"class":140},[57,134359,54961],{"class":81},[57,134361,1576],{"class":140},[57,134363,134364],{"class":59,"line":144},[57,134365,1847],{"class":140},[57,134367,134368,134371],{"class":59,"line":150},[57,134369,134370],{"class":70},".child",[57,134372,15844],{"class":140},[57,134374,134375,134377,134379,134381],{"class":59,"line":162},[57,134376,132555],{"class":81},[57,134378,51634],{"class":140},[57,134380,55028],{"class":81},[57,134382,1576],{"class":140},[57,134384,134385,134387,134389,134391,134393],{"class":59,"line":180},[57,134386,132569],{"class":81},[57,134388,51634],{"class":140},[57,134390,1072],{"class":81},[57,134392,745],{"class":136},[57,134394,1576],{"class":140},[57,134396,134397,134399,134401,134403,134405],{"class":59,"line":186},[57,134398,132586],{"class":81},[57,134400,51634],{"class":140},[57,134402,1072],{"class":81},[57,134404,745],{"class":136},[57,134406,1576],{"class":140},[57,134408,134409],{"class":59,"line":197},[57,134410,1847],{"class":140},[14,134412,134413],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[365,134415,134417],{"id":134416},"_122-精灵图","12.2 精灵图",[394,134419,134421],{"id":134420},"_1221-理解","12.2.1 理解",[377,134423,134424,134442],{},[380,134425,134426,134427,132655,134430,134433,134434,134437,134438,134441],{},"目的： ",[33,134428,134429],{},"为了有效地减少服务器接收和发送请求的次数",[33,134431,134432],{},"提高"," 页面的 ",[33,134435,134436],{},"加载速度"," ，出现了 ",[33,134439,134440],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[380,134443,134444,134445,134447,134448,134450,134451,134453,134454,134456,134457,134459,134460,134462],{},"使用精灵图核心：",[53913,134446],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53913,134449],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53913,134452],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53913,134455],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53913,134458],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53913,134461],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[394,134464,134466],{"id":134465},"_1222-扒图","12.2.2 扒图",[49,134468,134471],{"className":134469,"code":134470,"language":5460},[5458],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[28,134472,134470],{"__ignoreMap":46},[44,134474],{"style":126605,"src":134475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[44,134477],{"style":126605,"src":134478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[394,134480,134482],{"id":134481},"_1223-精灵图的实现","12.2.3 精灵图的实现",[44,134484],{"style":126605,"src":134485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,134487,134488],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[44,134490],{"style":126605,"src":134491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[49,134493,134495],{"className":126749,"code":134494,"language":126751,"meta":46,"style":46},"\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",[28,134496,134497,134502,134509,134521,134533,134552,134569],{"__ignoreMap":46},[57,134498,134499],{"class":59,"line":60},[57,134500,134501],{"class":63},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[57,134503,134504,134507],{"class":59,"line":67},[57,134505,134506],{"class":70},".icon",[57,134508,15844],{"class":140},[57,134510,134511,134513,134515,134517,134519],{"class":59,"line":144},[57,134512,70765],{"class":81},[57,134514,51634],{"class":140},[57,134516,1116],{"class":81},[57,134518,51689],{"class":136},[57,134520,1576],{"class":140},[57,134522,134523,134525,134527,134529,134531],{"class":59,"line":150},[57,134524,70985],{"class":81},[57,134526,51634],{"class":140},[57,134528,1116],{"class":81},[57,134530,51689],{"class":136},[57,134532,1576],{"class":140},[57,134534,134535,134537,134539,134541,134543,134546,134548,134550],{"class":59,"line":162},[57,134536,70808],{"class":81},[57,134538,51634],{"class":140},[57,134540,61923],{"class":81},[57,134542,168],{"class":140},[57,134544,134545],{"class":5489},"sprites.png",[57,134547,229],{"class":140},[57,134549,61933],{"class":81},[57,134551,1576],{"class":140},[57,134553,134554,134556,134558,134560,134562,134565,134567],{"class":59,"line":180},[57,134555,129009],{"class":81},[57,134557,51634],{"class":140},[57,134559,51960],{"class":81},[57,134561,51689],{"class":136},[57,134563,134564],{"class":81}," -20",[57,134566,51689],{"class":136},[57,134568,1576],{"class":140},[57,134570,134571],{"class":59,"line":186},[57,134572,1847],{"class":140},[44,134574],{"style":126605,"src":134575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,134577,134578],{},"在前端中坐标轴的正方向是右和下",[365,134580,134582],{"id":134581},"_123-字体图标","12.3 字体图标",[394,134584,134586],{"id":134585},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,134588,134589],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,134591,134592],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,134594,134595],{},"1.图片文件还是比较大的。",[14,134597,134598],{},"2.图片本身放大和缩小会失真。",[14,134600,134601],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,134603,134604,134605,26009],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[33,134606,134607],{},"字体图标 iconfont",[14,134609,134610,134613,134614,28654],{},[33,134611,134612],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[33,134615,134616],{},"展示的是图标，本质属于字体",[394,134618,134620],{"id":134619},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1422,134622,134623,134628,134631,134634,134637],{},[380,134624,134625,134627],{},[33,134626,26145],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[380,134629,134630],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[380,134632,134633],{},"兼容性：几乎支持所有的浏览器，请放心使用",[380,134635,134636],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[380,134638,134639],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[394,134641,134643],{"id":134642},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1422,134645,134646],{},[380,134647,134648,134649],{},"icomoon字体库：",[18,134650,134653],{"href":134651,"rel":134652},"http:\u002F\u002Ficomoon.io\u002F",[22],"http:\u002F\u002Ficomoon.io",[14,134655,134656],{},"进去之后点icomoon app",[44,134658],{"style":126605,"src":134659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,134661,134662],{},"可以对其编辑：",[44,134664],{"style":126605,"src":134665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,134667,134668],{},"生成字体：",[44,134670],{"style":126605,"src":134671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,134673,134674],{},"下载：",[44,134676],{"style":126605,"src":134677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1422,134679,134680],{},[380,134681,134682,134683],{},"阿里iconfont字体库： ",[18,134684,134685],{"href":134685,"rel":134686},"http:\u002F\u002Fwww.iconfont.cn\u002F",[22],[394,134688,134690],{"id":134689},"_1234-字体图标的引入","12.3.4 字体图标的引入",[377,134692,134693],{},[380,134694,134695,134696,134699],{},"把下载包里面的 ",[33,134697,134698],{},"fonts"," 文件夹放入页面根目录下",[44,134701],{"style":126605,"src":134702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[377,134704,134705],{"start":67},[380,134706,134707],{},"字体文件格式",[557,134709,134710,134719],{},[560,134711,134712],{},[563,134713,134714,134717],{},[566,134715,134716],{"align":24008},"格式",[566,134718,24012],{"align":24008},[603,134720,134721,134731,134741,134751],{},[563,134722,134723,134728],{},[608,134724,134725],{"align":24008},[33,134726,134727],{},".ttf",[608,134729,134730],{"align":24008},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[563,134732,134733,134738],{},[608,134734,134735],{"align":24008},[33,134736,134737],{},".woff",[608,134739,134740],{"align":24008},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[563,134742,134743,134748],{},[608,134744,134745],{"align":24008},[33,134746,134747],{},".eot",[608,134749,134750],{"align":24008},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[563,134752,134753,134758],{},[608,134754,134755],{"align":24008},[33,134756,134757],{},"svg",[608,134759,134760],{"align":24008},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[377,134762,134763],{"start":144},[380,134764,134765],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[49,134767,134769],{"className":126749,"code":134768,"language":126751,"meta":46,"style":46},"\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",[28,134770,134771,134776,134783,134795,134811,134836,134857,134877,134897,134901,134907,134917,134928],{"__ignoreMap":46},[57,134772,134773],{"class":59,"line":60},[57,134774,134775],{"class":63},"\u002F* 引入字体图标 *\u002F\n",[57,134777,134778,134781],{"class":59,"line":67},[57,134779,134780],{"class":136},"@font-face",[57,134782,15844],{"class":140},[57,134784,134785,134788,134790,134793],{"class":59,"line":144},[57,134786,134787],{"class":81},"  font-family",[57,134789,51634],{"class":140},[57,134791,134792],{"class":74},"'icomoon'",[57,134794,1576],{"class":140},[57,134796,134797,134800,134802,134804,134806,134809],{"class":59,"line":150},[57,134798,134799],{"class":81},"  src",[57,134801,51634],{"class":140},[57,134803,61923],{"class":81},[57,134805,168],{"class":140},[57,134807,134808],{"class":74},"'fonts\u002Ficomoon.eot'",[57,134810,2992],{"class":140},[57,134812,134813,134815,134817,134819,134821,134824,134826,134829,134831,134834],{"class":59,"line":162},[57,134814,134799],{"class":81},[57,134816,51634],{"class":140},[57,134818,61923],{"class":81},[57,134820,168],{"class":140},[57,134822,134823],{"class":74},"'fonts\u002Ficomoon.eot?#iefix'",[57,134825,229],{"class":140},[57,134827,134828],{"class":81},"format",[57,134830,168],{"class":140},[57,134832,134833],{"class":74},"'embedded-opentype'",[57,134835,38244],{"class":140},[57,134837,134838,134841,134843,134846,134848,134850,134852,134855],{"class":59,"line":180},[57,134839,134840],{"class":81},"       url",[57,134842,168],{"class":140},[57,134844,134845],{"class":74},"'fonts\u002Ficomoon.woff'",[57,134847,229],{"class":140},[57,134849,134828],{"class":81},[57,134851,168],{"class":140},[57,134853,134854],{"class":74},"'woff'",[57,134856,38244],{"class":140},[57,134858,134859,134861,134863,134866,134868,134870,134872,134875],{"class":59,"line":186},[57,134860,134840],{"class":81},[57,134862,168],{"class":140},[57,134864,134865],{"class":74},"'fonts\u002Ficomoon.ttf'",[57,134867,229],{"class":140},[57,134869,134828],{"class":81},[57,134871,168],{"class":140},[57,134873,134874],{"class":74},"'truetype'",[57,134876,38244],{"class":140},[57,134878,134879,134881,134883,134886,134888,134890,134892,134895],{"class":59,"line":197},[57,134880,134840],{"class":81},[57,134882,168],{"class":140},[57,134884,134885],{"class":74},"'fonts\u002Ficomoon.svg#icomoon'",[57,134887,229],{"class":140},[57,134889,134828],{"class":81},[57,134891,168],{"class":140},[57,134893,134894],{"class":74},"'svg'",[57,134896,2992],{"class":140},[57,134898,134899],{"class":59,"line":241},[57,134900,1847],{"class":140},[57,134902,134903,134905],{"class":59,"line":249},[57,134904,134506],{"class":70},[57,134906,15844],{"class":140},[57,134908,134909,134911,134913,134915],{"class":59,"line":262},[57,134910,134787],{"class":81},[57,134912,51634],{"class":140},[57,134914,134792],{"class":74},[57,134916,1576],{"class":140},[57,134918,134919,134922,134924,134926],{"class":59,"line":281},[57,134920,134921],{"class":81},"  font-style",[57,134923,51634],{"class":140},[57,134925,64038],{"class":81},[57,134927,1576],{"class":140},[57,134929,134930],{"class":59,"line":287},[57,134931,1847],{"class":140},[14,134933,134934],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[44,134936],{"style":126605,"src":134937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[377,134939,134940],{"start":150},[380,134941,134942],{},"添加字体",[44,134944],{"style":126605,"src":134945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,134947,134948],{},"复制：",[44,134950],{"style":126605,"src":134951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,134953,134954],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[377,134956,134957],{"start":162},[380,134958,134959],{},"代码展示：",[49,134961,134962],{"className":126749,"code":134768,"language":126751,"meta":46,"style":46},[28,134963,134964,134968,134974,134984,134998,135020,135038,135056,135074,135078,135084,135094,135104],{"__ignoreMap":46},[57,134965,134966],{"class":59,"line":60},[57,134967,134775],{"class":63},[57,134969,134970,134972],{"class":59,"line":67},[57,134971,134780],{"class":136},[57,134973,15844],{"class":140},[57,134975,134976,134978,134980,134982],{"class":59,"line":144},[57,134977,134787],{"class":81},[57,134979,51634],{"class":140},[57,134981,134792],{"class":74},[57,134983,1576],{"class":140},[57,134985,134986,134988,134990,134992,134994,134996],{"class":59,"line":150},[57,134987,134799],{"class":81},[57,134989,51634],{"class":140},[57,134991,61923],{"class":81},[57,134993,168],{"class":140},[57,134995,134808],{"class":74},[57,134997,2992],{"class":140},[57,134999,135000,135002,135004,135006,135008,135010,135012,135014,135016,135018],{"class":59,"line":162},[57,135001,134799],{"class":81},[57,135003,51634],{"class":140},[57,135005,61923],{"class":81},[57,135007,168],{"class":140},[57,135009,134823],{"class":74},[57,135011,229],{"class":140},[57,135013,134828],{"class":81},[57,135015,168],{"class":140},[57,135017,134833],{"class":74},[57,135019,38244],{"class":140},[57,135021,135022,135024,135026,135028,135030,135032,135034,135036],{"class":59,"line":180},[57,135023,134840],{"class":81},[57,135025,168],{"class":140},[57,135027,134845],{"class":74},[57,135029,229],{"class":140},[57,135031,134828],{"class":81},[57,135033,168],{"class":140},[57,135035,134854],{"class":74},[57,135037,38244],{"class":140},[57,135039,135040,135042,135044,135046,135048,135050,135052,135054],{"class":59,"line":186},[57,135041,134840],{"class":81},[57,135043,168],{"class":140},[57,135045,134865],{"class":74},[57,135047,229],{"class":140},[57,135049,134828],{"class":81},[57,135051,168],{"class":140},[57,135053,134874],{"class":74},[57,135055,38244],{"class":140},[57,135057,135058,135060,135062,135064,135066,135068,135070,135072],{"class":59,"line":197},[57,135059,134840],{"class":81},[57,135061,168],{"class":140},[57,135063,134885],{"class":74},[57,135065,229],{"class":140},[57,135067,134828],{"class":81},[57,135069,168],{"class":140},[57,135071,134894],{"class":74},[57,135073,2992],{"class":140},[57,135075,135076],{"class":59,"line":241},[57,135077,1847],{"class":140},[57,135079,135080,135082],{"class":59,"line":249},[57,135081,134506],{"class":70},[57,135083,15844],{"class":140},[57,135085,135086,135088,135090,135092],{"class":59,"line":262},[57,135087,134787],{"class":81},[57,135089,51634],{"class":140},[57,135091,134792],{"class":74},[57,135093,1576],{"class":140},[57,135095,135096,135098,135100,135102],{"class":59,"line":281},[57,135097,134921],{"class":81},[57,135099,51634],{"class":140},[57,135101,64038],{"class":81},[57,135103,1576],{"class":140},[57,135105,135106],{"class":59,"line":287},[57,135107,1847],{"class":140},[44,135109],{"style":126605,"src":135110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,135112,135113],{},"更加细节展示：",[377,135115,135116],{},[380,135117,135118],{},"html 标签内添加小图标",[44,135120],{"style":126605,"src":135121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[377,135123,135124],{"start":67},[380,135125,135126],{},"给标签定义字体",[49,135128,135129],{"className":127496,"code":130853,"language":127498,"meta":46,"style":46},[28,135130,135131,135135,135149,135153],{"__ignoreMap":46},[57,135132,135133],{"class":59,"line":60},[57,135134,130860],{"class":63},[57,135136,135137,135139,135141,135143,135145,135147],{"class":59,"line":67},[57,135138,1326],{"class":140},[57,135140,51808],{"class":51497},[57,135142,53683],{"class":70},[57,135144,156],{"class":140},[57,135146,130873],{"class":74},[57,135148,51504],{"class":140},[57,135150,135151],{"class":59,"line":144},[57,135152,130880],{"class":140},[57,135154,135155,135157,135159],{"class":59,"line":150},[57,135156,51982],{"class":140},[57,135158,51808],{"class":51497},[57,135160,51504],{"class":140},[14,135162,135163],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[44,135165],{"style":126605,"src":135166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[394,135168,135170],{"id":135169},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,135172,135173],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,135175,135176,135177,135180],{},"把压缩包里面的 ",[33,135178,135179],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,135182,135183],{},"打开网站，点下方：",[44,135185],{"style":126605,"src":135186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[44,135188],{"style":126605,"src":135189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[44,135191],{"style":126605,"src":135192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,135194,135195],{},"点yes重新加载",[14,135197,135198],{},"然后重复之前的操作就可以实现了",[14,135200,135201],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[394,135203,135205],{"id":135204},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[44,135207],{"style":126605,"src":135208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[342,135210,135211],{},"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":46,"searchDepth":67,"depth":67,"links":135213},[135214,135220,135225],{"id":133817,"depth":67,"text":133818,"children":135215},[135216,135217,135218,135219],{"id":133829,"depth":144,"text":133830},{"id":133858,"depth":144,"text":133859},{"id":133886,"depth":144,"text":133887},{"id":133944,"depth":144,"text":133945},{"id":134416,"depth":67,"text":134417,"children":135221},[135222,135223,135224],{"id":134420,"depth":144,"text":134421},{"id":134465,"depth":144,"text":134466},{"id":134481,"depth":144,"text":134482},{"id":134581,"depth":67,"text":134582,"children":135226},[135227,135228,135229,135230,135231,135232],{"id":134585,"depth":144,"text":134586},{"id":134619,"depth":144,"text":134620},{"id":134642,"depth":144,"text":134643},{"id":134689,"depth":144,"text":134690},{"id":135169,"depth":144,"text":135170},{"id":135204,"depth":144,"text":135205},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133809,"description":347},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135239,"title":135240,"body":135241,"description":347,"extension":348,"meta":136468,"navigation":350,"path":136469,"seo":136470,"stem":136471,"__hash__":136472},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135242,"toc":136449},[135243,135246,135250,135253,135267,135335,135365,135368,135372,135376,135478,135525,135529,135532,135535,135569,135572,135575,135578,135581,135584,135587,135590,135592,135595,135598,135601,135604,135607,135610,135613,135641,135644,135648,135651,135658,135661,135664,135690,135693,135697,135700,135703,135710,135714,135717,135719,135751,135754,135757,135769,135775,135778,135781,135784,135786,135790,135793,135796,135799,135844,135848,135850,135853,135860,135902,135905,135909,135914,135928,135932,135935,135938,135941,135944,135947,135981,135984,135987,136041,136044,136047,136050,136053,136105,136108,136111,136160,136164,136166,136169,136172,136175,136178,136181,136239,136242,136248,136251,136254,136286,136289,136293,136297,136300,136332,136336,136339,136383,136387,136390,136393,136396,136399,136402,136405,136408,136410,136413,136415,136418,136421,136424,136427,136432,136435,136437,136440,136443,136446],[10,135244,135240],{"id":135245},"_13-界面样式与布局技巧",[365,135247,135249],{"id":135248},"_131-css三角","13.1 css三角",[14,135251,135252],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1422,135254,135255,135258,135261,135264],{},[380,135256,135257],{},"用css 边框可以模拟三角效果",[380,135259,135260],{},"宽度高度为0",[380,135262,135263],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[380,135265,135266],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[49,135268,135270],{"className":126749,"code":135269,"language":126751,"meta":46,"style":46},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[28,135271,135272,135277,135284,135294,135304,135320,135331],{"__ignoreMap":46},[57,135273,135274],{"class":59,"line":60},[57,135275,135276],{"class":63},"\u002F* CSS 实现三角形 *\u002F\n",[57,135278,135279,135282],{"class":59,"line":67},[57,135280,135281],{"class":70},".triangle",[57,135283,15844],{"class":140},[57,135285,135286,135288,135290,135292],{"class":59,"line":144},[57,135287,70765],{"class":81},[57,135289,51634],{"class":140},[57,135291,226],{"class":81},[57,135293,1576],{"class":140},[57,135295,135296,135298,135300,135302],{"class":59,"line":150},[57,135297,70985],{"class":81},[57,135299,51634],{"class":140},[57,135301,226],{"class":81},[57,135303,1576],{"class":140},[57,135305,135306,135308,135310,135312,135314,135316,135318],{"class":59,"line":162},[57,135307,71093],{"class":81},[57,135309,51634],{"class":140},[57,135311,862],{"class":81},[57,135313,51689],{"class":136},[57,135315,51718],{"class":81},[57,135317,64188],{"class":81},[57,135319,1576],{"class":140},[57,135321,135322,135325,135327,135329],{"class":59,"line":180},[57,135323,135324],{"class":81},"  border-bottom-color",[57,135326,51634],{"class":140},[57,135328,62566],{"class":81},[57,135330,1576],{"class":140},[57,135332,135333],{"class":59,"line":186},[57,135334,1847],{"class":140},[49,135336,135337],{"className":126749,"code":130906,"language":126751,"meta":46,"style":46},[28,135338,135339,135345,135361],{"__ignoreMap":46},[57,135340,135341,135343],{"class":59,"line":60},[57,135342,51808],{"class":51497},[57,135344,15844],{"class":140},[57,135346,135347,135349,135351,135353,135355,135357,135359],{"class":59,"line":67},[57,135348,71093],{"class":81},[57,135350,51634],{"class":140},[57,135352,635],{"class":81},[57,135354,51689],{"class":136},[57,135356,51718],{"class":81},[57,135358,130141],{"class":81},[57,135360,1576],{"class":140},[57,135362,135363],{"class":59,"line":144},[57,135364,1847],{"class":140},[44,135366],{"style":126605,"src":135367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[365,135369,135371],{"id":135370},"_132-css用户界面样式","13.2 css用户界面样式",[394,135373,135375],{"id":135374},"_1321-鼠标样式","13.2.1 鼠标样式",[49,135377,135379],{"className":126749,"code":135378,"language":126751,"meta":46,"style":46},"\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",[28,135380,135381,135386,135405,135423,135442,135459],{"__ignoreMap":46},[57,135382,135383],{"class":59,"line":60},[57,135384,135385],{"class":63},"\u002F* 鼠标样式 *\u002F\n",[57,135387,135388,135390,135392,135395,135397,135399,135402],{"class":59,"line":67},[57,135389,51808],{"class":51497},[57,135391,80004],{"class":140},[57,135393,135394],{"class":81},"cursor",[57,135396,51634],{"class":140},[57,135398,62227],{"class":81},[57,135400,135401],{"class":140},"; }   ",[57,135403,135404],{"class":63},"\u002F* 手型 *\u002F\n",[57,135406,135407,135409,135411,135413,135415,135418,135420],{"class":59,"line":144},[57,135408,51808],{"class":51497},[57,135410,80004],{"class":140},[57,135412,135394],{"class":81},[57,135414,51634],{"class":140},[57,135416,135417],{"class":81},"default",[57,135419,135401],{"class":140},[57,135421,135422],{"class":63},"\u002F* 默认 *\u002F\n",[57,135424,135425,135427,135429,135431,135433,135436,135439],{"class":59,"line":150},[57,135426,51808],{"class":51497},[57,135428,80004],{"class":140},[57,135430,135394],{"class":81},[57,135432,51634],{"class":140},[57,135434,135435],{"class":81},"move",[57,135437,135438],{"class":140},"; }      ",[57,135440,135441],{"class":63},"\u002F* 移动 *\u002F\n",[57,135443,135444,135446,135448,135450,135452,135454,135456],{"class":59,"line":162},[57,135445,51808],{"class":51497},[57,135447,80004],{"class":140},[57,135449,135394],{"class":81},[57,135451,51634],{"class":140},[57,135453,5460],{"class":81},[57,135455,135438],{"class":140},[57,135457,135458],{"class":63},"\u002F* 文本 *\u002F\n",[57,135460,135461,135463,135465,135467,135469,135472,135475],{"class":59,"line":180},[57,135462,51808],{"class":51497},[57,135464,80004],{"class":140},[57,135466,135394],{"class":81},[57,135468,51634],{"class":140},[57,135470,135471],{"class":81},"not-allowed",[57,135473,135474],{"class":140},"; } ",[57,135476,135477],{"class":63},"\u002F* 禁止 *\u002F\n",[557,135479,135480,135488],{},[560,135481,135482],{},[563,135483,135484,135486],{},[566,135485,127213],{"align":24008},[566,135487,27758],{"align":24008},[603,135489,135490,135497,135504,135511,135518],{},[563,135491,135492,135494],{},[608,135493,135417],{"align":24008},[608,135495,135496],{"align":24008},"小白 默认",[563,135498,135499,135501],{},[608,135500,62227],{"align":24008},[608,135502,135503],{"align":24008},"小手",[563,135505,135506,135508],{},[608,135507,135435],{"align":24008},[608,135509,135510],{"align":24008},"移动",[563,135512,135513,135515],{},[608,135514,5460],{"align":24008},[608,135516,135517],{"align":24008},"文本",[563,135519,135520,135522],{},[608,135521,135471],{"align":24008},[608,135523,135524],{"align":24008},"禁止",[394,135526,135528],{"id":135527},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,135530,135531],{},"去除表单轮廓线",[14,135533,135534],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[49,135536,135537],{"className":126749,"code":130113,"language":126751,"meta":46,"style":46},[28,135538,135539,135543,135549,135565],{"__ignoreMap":46},[57,135540,135541],{"class":59,"line":60},[57,135542,130120],{"class":63},[57,135544,135545,135547],{"class":59,"line":67},[57,135546,51808],{"class":51497},[57,135548,15844],{"class":140},[57,135550,135551,135553,135555,135557,135559,135561,135563],{"class":59,"line":144},[57,135552,71093],{"class":81},[57,135554,51634],{"class":140},[57,135556,635],{"class":81},[57,135558,51689],{"class":136},[57,135560,51718],{"class":81},[57,135562,130141],{"class":81},[57,135564,1576],{"class":140},[57,135566,135567],{"class":59,"line":150},[57,135568,1847],{"class":140},[14,135570,135571],{},"文本域：",[44,135573],{"style":126605,"src":135574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,135576,135577],{},"此时会有一个空白区域",[44,135579],{"style":126605,"src":135580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,135582,135583],{},"写在同一行就不会出现这个问题",[44,135585],{"style":126605,"src":135586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,135588,135589],{},"文本域是行内块元素，一定记住！！！",[14,135591,98430],{},[44,135593],{"style":126605,"src":135594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,135596,135597],{},"文本域尽量放在一行",[14,135599,135600],{},"知识回顾：cols是列，rols是行",[44,135602],{"style":126605,"src":135603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,135605,135606],{},"它可以进行拖动，显然这是我们不愿意看到的",[44,135608],{"style":126605,"src":135609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,135611,135612],{},"使用resize进行解决",[49,135614,135616],{"className":126749,"code":135615,"language":126751,"meta":46,"style":46},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[28,135617,135618,135624,135637],{"__ignoreMap":46},[57,135619,135620,135622],{"class":59,"line":60},[57,135621,54018],{"class":51497},[57,135623,15844],{"class":140},[57,135625,135626,135628,135630,135632,135634],{"class":59,"line":67},[57,135627,70995],{"class":81},[57,135629,51634],{"class":140},[57,135631,54934],{"class":81},[57,135633,130612],{"class":140},[57,135635,135636],{"class":63},"\u002F* 取消表单轮廓线 *\u002F\n",[57,135638,135639],{"class":59,"line":144},[57,135640,1847],{"class":140},[14,135642,135643],{},"此时就无法通过右下方实现拖动了",[394,135645,135647],{"id":135646},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,135649,135650],{},"实现一个盒子中的文字和图片对齐",[14,135652,135653,135654,135657],{},"用于设置一个元素的 ",[33,135655,135656],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,135659,135660],{},"图片和文字默认是基线对齐",[44,135662],{"style":126605,"src":135663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[49,135665,135666],{"className":126749,"code":135615,"language":126751,"meta":46,"style":46},[28,135667,135668,135674,135686],{"__ignoreMap":46},[57,135669,135670,135672],{"class":59,"line":60},[57,135671,54018],{"class":51497},[57,135673,15844],{"class":140},[57,135675,135676,135678,135680,135682,135684],{"class":59,"line":67},[57,135677,70995],{"class":81},[57,135679,51634],{"class":140},[57,135681,54934],{"class":81},[57,135683,130612],{"class":140},[57,135685,135636],{"class":63},[57,135687,135688],{"class":59,"line":144},[57,135689,1847],{"class":140},[44,135691],{"style":126605,"src":135692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22270,135694,135696],{"id":135695},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,135698,135699],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[44,135701],{"style":126605,"src":135702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,135704,135705,135706,135709],{},"此时可以给图片、表单这些行内块元素的 ",[33,135707,135708],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22270,135711,135713],{"id":135712},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,135715,135716],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,135718,14905],{},[49,135720,135722],{"className":126749,"code":135721,"language":126751,"meta":46,"style":46},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[28,135723,135724,135729,135735,135747],{"__ignoreMap":46},[57,135725,135726],{"class":59,"line":60},[57,135727,135728],{"class":63},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[57,135730,135731,135733],{"class":59,"line":67},[57,135732,44],{"class":51497},[57,135734,15844],{"class":140},[57,135736,135737,135740,135742,135745],{"class":59,"line":144},[57,135738,135739],{"class":81},"  vertical-align",[57,135741,51634],{"class":140},[57,135743,135744],{"class":81},"middle",[57,135746,1576],{"class":140},[57,135748,135749],{"class":59,"line":150},[57,135750,1847],{"class":140},[44,135752],{"style":126605,"src":135753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,135755,135756],{},"主要解决方法有两种：",[377,135758,135759],{},[380,135760,135761,135764,135765,135768],{},[33,135762,135763],{},"给图片"," 添加 ",[33,135766,135767],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,135770,135771,135772],{},"2.把图片转换为块级元素 ",[33,135773,135774],{},"display: block",[14,135776,135777],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,135779,135780],{},"img {",[14,135782,135783],{},"vertical-align:middle;",[14,135785,1362],{},[394,135787,135789],{"id":135788},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,135791,135792],{},"效果：",[44,135794],{"style":126605,"src":135795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,135797,135798],{},"单行文本溢出显示省略号--必须满足三个条件：",[49,135800,135802],{"className":126749,"code":135801,"language":126751,"meta":46,"style":46},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[28,135803,135804,135809,135815,135825,135830,135840],{"__ignoreMap":46},[57,135805,135806],{"class":59,"line":60},[57,135807,135808],{"class":63},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[57,135810,135811,135813],{"class":59,"line":67},[57,135812,44],{"class":51497},[57,135814,15844],{"class":140},[57,135816,135817,135819,135821,135823],{"class":59,"line":144},[57,135818,135739],{"class":81},[57,135820,51634],{"class":140},[57,135822,135744],{"class":81},[57,135824,1576],{"class":140},[57,135826,135827],{"class":59,"line":150},[57,135828,135829],{"class":63},"  \u002F* 或 *\u002F\n",[57,135831,135832,135834,135836,135838],{"class":59,"line":162},[57,135833,128365],{"class":81},[57,135835,51634],{"class":140},[57,135837,61066],{"class":81},[57,135839,1576],{"class":140},[57,135841,135842],{"class":59,"line":180},[57,135843,1847],{"class":140},[394,135845,135847],{"id":135846},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,135849,135792],{},[44,135851],{"style":126605,"src":135852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,135854,135855,135856,135859],{},"多行文本溢出显示省略号， ",[33,135857,135858],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[49,135861,135862],{"className":126749,"code":135801,"language":126751,"meta":46,"style":46},[28,135863,135864,135868,135874,135884,135888,135898],{"__ignoreMap":46},[57,135865,135866],{"class":59,"line":60},[57,135867,135808],{"class":63},[57,135869,135870,135872],{"class":59,"line":67},[57,135871,44],{"class":51497},[57,135873,15844],{"class":140},[57,135875,135876,135878,135880,135882],{"class":59,"line":144},[57,135877,135739],{"class":81},[57,135879,51634],{"class":140},[57,135881,135744],{"class":81},[57,135883,1576],{"class":140},[57,135885,135886],{"class":59,"line":150},[57,135887,135829],{"class":63},[57,135889,135890,135892,135894,135896],{"class":59,"line":162},[57,135891,128365],{"class":81},[57,135893,51634],{"class":140},[57,135895,61066],{"class":81},[57,135897,1576],{"class":140},[57,135899,135900],{"class":59,"line":180},[57,135901,1847],{"class":140},[14,135903,135904],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[365,135906,135908],{"id":135907},"_133-常见布局技巧","13.3 常见布局技巧",[14,135910,135911],{},[33,135912,135913],{},"巧妙利用一个技术更快更好的布局：",[377,135915,135916,135919,135922,135925],{},[380,135917,135918],{},"margin负值的运用",[380,135920,135921],{},"文字围绕浮动元素",[380,135923,135924],{},"行内块的巧妙运用",[380,135926,135927],{},"CSS三角强化",[394,135929,135931],{"id":135930},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,135933,135934],{},"应用场景：",[44,135936],{"style":126605,"src":135937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[44,135939],{"style":126605,"src":135940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,135942,135943],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,135945,135946],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[49,135948,135949],{"className":126749,"code":130113,"language":126751,"meta":46,"style":46},[28,135950,135951,135955,135961,135977],{"__ignoreMap":46},[57,135952,135953],{"class":59,"line":60},[57,135954,130120],{"class":63},[57,135956,135957,135959],{"class":59,"line":67},[57,135958,51808],{"class":51497},[57,135960,15844],{"class":140},[57,135962,135963,135965,135967,135969,135971,135973,135975],{"class":59,"line":144},[57,135964,71093],{"class":81},[57,135966,51634],{"class":140},[57,135968,635],{"class":81},[57,135970,51689],{"class":136},[57,135972,51718],{"class":81},[57,135974,130141],{"class":81},[57,135976,1576],{"class":140},[57,135978,135979],{"class":59,"line":150},[57,135980,1847],{"class":140},[44,135982],{"style":126605,"src":135983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,135985,135986],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[49,135988,135990],{"className":126749,"code":135989,"language":126751,"meta":46,"style":46},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[28,135991,135992,135997,136003,136013,136025,136037],{"__ignoreMap":46},[57,135993,135994],{"class":59,"line":60},[57,135995,135996],{"class":63},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[57,135998,135999,136001],{"class":59,"line":67},[57,136000,130597],{"class":70},[57,136002,15844],{"class":140},[57,136004,136005,136007,136009,136011],{"class":59,"line":144},[57,136006,132555],{"class":81},[57,136008,51634],{"class":140},[57,136010,54961],{"class":81},[57,136012,1576],{"class":140},[57,136014,136015,136017,136019,136021,136023],{"class":59,"line":150},[57,136016,132569],{"class":81},[57,136018,51634],{"class":140},[57,136020,862],{"class":81},[57,136022,51689],{"class":136},[57,136024,1576],{"class":140},[57,136026,136027,136029,136031,136033,136035],{"class":59,"line":162},[57,136028,132586],{"class":81},[57,136030,51634],{"class":140},[57,136032,1116],{"class":81},[57,136034,51689],{"class":136},[57,136036,1576],{"class":140},[57,136038,136039],{"class":59,"line":180},[57,136040,1847],{"class":140},[14,136042,136043],{},"加上上述代码会发现：",[44,136045],{"style":126605,"src":136046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,136048,136049],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,136051,136052],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[49,136054,136055],{"className":126749,"code":135989,"language":126751,"meta":46,"style":46},[28,136056,136057,136061,136067,136077,136089,136101],{"__ignoreMap":46},[57,136058,136059],{"class":59,"line":60},[57,136060,135996],{"class":63},[57,136062,136063,136065],{"class":59,"line":67},[57,136064,130597],{"class":70},[57,136066,15844],{"class":140},[57,136068,136069,136071,136073,136075],{"class":59,"line":144},[57,136070,132555],{"class":81},[57,136072,51634],{"class":140},[57,136074,54961],{"class":81},[57,136076,1576],{"class":140},[57,136078,136079,136081,136083,136085,136087],{"class":59,"line":150},[57,136080,132569],{"class":81},[57,136082,51634],{"class":140},[57,136084,862],{"class":81},[57,136086,51689],{"class":136},[57,136088,1576],{"class":140},[57,136090,136091,136093,136095,136097,136099],{"class":59,"line":162},[57,136092,132586],{"class":81},[57,136094,51634],{"class":140},[57,136096,1116],{"class":81},[57,136098,51689],{"class":136},[57,136100,1576],{"class":140},[57,136102,136103],{"class":59,"line":180},[57,136104,1847],{"class":140},[14,136106,136107],{},"解决方式2：",[14,136109,136110],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[49,136112,136114],{"className":126749,"code":136113,"language":126751,"meta":46,"style":46},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[28,136115,136116,136122,136132,136144,136156],{"__ignoreMap":46},[57,136117,136118,136120],{"class":59,"line":60},[57,136119,51808],{"class":51497},[57,136121,15844],{"class":140},[57,136123,136124,136126,136128,136130],{"class":59,"line":67},[57,136125,132555],{"class":81},[57,136127,51634],{"class":140},[57,136129,54961],{"class":81},[57,136131,1576],{"class":140},[57,136133,136134,136136,136138,136140,136142],{"class":59,"line":144},[57,136135,132569],{"class":81},[57,136137,51634],{"class":140},[57,136139,862],{"class":81},[57,136141,51689],{"class":136},[57,136143,1576],{"class":140},[57,136145,136146,136148,136150,136152,136154],{"class":59,"line":150},[57,136147,132586],{"class":81},[57,136149,51634],{"class":140},[57,136151,1116],{"class":81},[57,136153,51689],{"class":136},[57,136155,1576],{"class":140},[57,136157,136158],{"class":59,"line":162},[57,136159,1847],{"class":140},[394,136161,136163],{"id":136162},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,136165,135934],{},[44,136167],{"style":126605,"src":136168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,136170,136171],{},"实现结构图：",[44,136173],{"style":126605,"src":136174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,136176,136177],{},"巧妙运用浮动元素不会压住文字的特性",[14,136179,136180],{},"代码显示：",[49,136182,136184],{"className":126749,"code":136183,"language":126751,"meta":46,"style":46},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[28,136185,136186,136192,136202,136206,136211,136215,136221,136235],{"__ignoreMap":46},[57,136187,136188,136190],{"class":59,"line":60},[57,136189,130597],{"class":70},[57,136191,15844],{"class":140},[57,136193,136194,136196,136198,136200],{"class":59,"line":67},[57,136195,131229],{"class":81},[57,136197,51634],{"class":140},[57,136199,24008],{"class":81},[57,136201,1576],{"class":140},[57,136203,136204],{"class":59,"line":144},[57,136205,1847],{"class":140},[57,136207,136208],{"class":59,"line":150},[57,136209,136210],{"class":140},"```Css\n",[57,136212,136213],{"class":59,"line":162},[57,136214,130592],{"class":63},[57,136216,136217,136219],{"class":59,"line":180},[57,136218,130597],{"class":70},[57,136220,15844],{"class":140},[57,136222,136223,136225,136227,136229,136231,136233],{"class":59,"line":186},[57,136224,70667],{"class":81},[57,136226,51634],{"class":140},[57,136228,226],{"class":81},[57,136230,51753],{"class":81},[57,136232,130612],{"class":140},[57,136234,130615],{"class":63},[57,136236,136237],{"class":59,"line":197},[57,136238,1847],{"class":140},[14,136240,136241],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[49,136243,136246],{"className":136244,"code":136245,"language":5460},[5458],"\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",[28,136247,136245],{"__ignoreMap":46},[44,136249],{"style":126605,"src":136250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,136252,136253],{},"最终展示结果：",[49,136255,136256],{"className":126749,"code":130585,"language":126751,"meta":46,"style":46},[28,136257,136258,136262,136268,136282],{"__ignoreMap":46},[57,136259,136260],{"class":59,"line":60},[57,136261,130592],{"class":63},[57,136263,136264,136266],{"class":59,"line":67},[57,136265,130597],{"class":70},[57,136267,15844],{"class":140},[57,136269,136270,136272,136274,136276,136278,136280],{"class":59,"line":144},[57,136271,70667],{"class":81},[57,136273,51634],{"class":140},[57,136275,226],{"class":81},[57,136277,51753],{"class":81},[57,136279,130612],{"class":140},[57,136281,130615],{"class":63},[57,136283,136284],{"class":59,"line":150},[57,136285,1847],{"class":140},[44,136287],{"style":126605,"src":136288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[365,136290,136292],{"id":136291},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[394,136294,136296],{"id":136295},"_1341-原理","13.4.1 原理",[44,136298],{"style":126605,"src":136299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[49,136301,136302],{"className":126749,"code":130585,"language":126751,"meta":46,"style":46},[28,136303,136304,136308,136314,136328],{"__ignoreMap":46},[57,136305,136306],{"class":59,"line":60},[57,136307,130592],{"class":63},[57,136309,136310,136312],{"class":59,"line":67},[57,136311,130597],{"class":70},[57,136313,15844],{"class":140},[57,136315,136316,136318,136320,136322,136324,136326],{"class":59,"line":144},[57,136317,70667],{"class":81},[57,136319,51634],{"class":140},[57,136321,226],{"class":81},[57,136323,51753],{"class":81},[57,136325,130612],{"class":140},[57,136327,130615],{"class":63},[57,136329,136330],{"class":59,"line":150},[57,136331,1847],{"class":140},[394,136333,136335],{"id":136334},"_1342-实例","13.4.2 实例",[44,136337],{"style":126605,"src":136338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[49,136340,136341],{"className":126749,"code":131215,"language":126751,"meta":46,"style":46},[28,136342,136343,136349,136359,136363,136369,136379],{"__ignoreMap":46},[57,136344,136345,136347],{"class":59,"line":60},[57,136346,131222],{"class":70},[57,136348,15844],{"class":140},[57,136350,136351,136353,136355,136357],{"class":59,"line":67},[57,136352,131229],{"class":81},[57,136354,51634],{"class":140},[57,136356,24008],{"class":81},[57,136358,1576],{"class":140},[57,136360,136361],{"class":59,"line":144},[57,136362,1847],{"class":140},[57,136364,136365,136367],{"class":59,"line":150},[57,136366,131244],{"class":70},[57,136368,15844],{"class":140},[57,136370,136371,136373,136375,136377],{"class":59,"line":162},[57,136372,131229],{"class":81},[57,136374,51634],{"class":140},[57,136376,72719],{"class":81},[57,136378,1576],{"class":140},[57,136380,136381],{"class":59,"line":180},[57,136382,1847],{"class":140},[365,136384,136386],{"id":136385},"_135-css的初始化","13.5 css的初始化",[14,136388,136389],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,136391,136392],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,136394,136395],{},"每个网页都必须首先进行 CSS初始化。",[14,136397,136398],{},"这里我们以 京东CSS初始化代码为例。",[14,136400,136401],{},"在网页右键查看网页源代码",[14,136403,136404],{},"找到css的link引入语句",[14,136406,136407],{},"然后ctrl+f 输入body",[14,136409,77423],{},[44,136411],{"style":126605,"src":136412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,136414,77446],{},[44,136416],{"style":126605,"src":136417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,136419,136420],{},"③打开了网页上传压缩的代码",[44,136422],{"style":126605,"src":136423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,136425,136426],{},"④从body前可以查看这个网页的初始化代码",[14,136428,136429],{},[33,136430,136431],{},"Unicode编码字体：",[14,136433,136434],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,136436,83404],{},[14,136438,136439],{},"黑体 \\9ED1\\4F53",[14,136441,136442],{},"宋体 \\5B8B\\4F53",[14,136444,136445],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[342,136447,136448],{},"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":46,"searchDepth":67,"depth":67,"links":136450},[136451,136452,136459,136463,136467],{"id":135248,"depth":67,"text":135249},{"id":135370,"depth":67,"text":135371,"children":136453},[136454,136455,136456,136457,136458],{"id":135374,"depth":144,"text":135375},{"id":135527,"depth":144,"text":135528},{"id":135646,"depth":144,"text":135647},{"id":135788,"depth":144,"text":135789},{"id":135846,"depth":144,"text":135847},{"id":135907,"depth":67,"text":135908,"children":136460},[136461,136462],{"id":135930,"depth":144,"text":135931},{"id":136162,"depth":144,"text":136163},{"id":136291,"depth":67,"text":136292,"children":136464},[136465,136466],{"id":136295,"depth":144,"text":136296},{"id":136334,"depth":144,"text":136335},{"id":136385,"depth":67,"text":136386},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135240,"description":347},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136474,"title":136475,"body":136476,"description":347,"extension":348,"meta":138162,"navigation":350,"path":138163,"seo":138164,"stem":138165,"__hash__":138166},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136477,"toc":138151},[136478,136481,136485,136489,136492,136499,136502,136505,136543,136546,136548,136562,136566,136575,136579,136584,136587,136590,136593,136628,136633,136636,136666,136669,136674,136677,136680,136710,136713,136767,136770,136774,136779,136791,136794,136798,136828,136831,136836,136839,136869,136872,136876,136893,136897,136901,136904,136937,136940,136944,136947,136950,136953,136956,136959,137070,137073,137076,137079,137181,137184,137188,137192,137196,137199,137239,137242,137244,137260,137264,137267,137272,137353,137356,137359,137485,137490,137493,137501,137504,137509,137594,137597,137601,137604,137607,137611,137631,137636,137720,137723,137728,137731,137734,137812,137815,137818,137821,137824,137827,137832,137835,137838,137910,137913,137918,137921,138018,138021,138027,138030,138033,138036,138039,138042,138045,138048,138051,138055,138060,138063,138096,138101,138104,138145,138148],[10,136479,136475],{"id":136480},"_14-html5与css3新特性",[365,136482,136484],{"id":136483},"_141-html5的新特性","14.1 HTML5的新特性",[394,136486,136488],{"id":136487},"_1411-基本标签","14.1.1 基本标签",[14,136490,136491],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,136493,136494,136495,136498],{},"这些新特性都有兼容性问题，基本是 ",[33,136496,136497],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,136500,136501],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,136503,136504],{},"现在使用的是新特性：",[1422,136506,136507,136513,136519,136525,136531,136537],{},[380,136508,136509,136512],{},[28,136510,136511],{},"\u003Cheader>"," 头部标签",[380,136514,136515,136518],{},[28,136516,136517],{},"\u003Cnav>"," 导航标签",[380,136520,136521,136524],{},[28,136522,136523],{},"\u003Carticle>"," 内容标签",[380,136526,136527,136530],{},[28,136528,136529],{},"\u003Csection>"," 定义文档某个区域",[380,136532,136533,136536],{},[28,136534,136535],{},"\u003Caside>"," 侧边栏标签",[380,136538,136539,136542],{},[28,136540,136541],{},"\u003Cfooter>"," 尾部标签",[44,136544],{"style":126605,"src":136545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,136547,454],{},[1422,136549,136550,136553,136556,136559],{},[380,136551,136552],{},"这种语义化标准主要是针对搜索引擎的",[380,136554,136555],{},"这些标签页面中可以经常使用",[380,136557,136558],{},"在IE9中，需要把这些元素转换为块级元素",[380,136560,136561],{},"移动端更喜欢使用这些标签",[394,136563,136565],{"id":136564},"_1412-多媒体标签","14.1.2 多媒体标签",[14,136567,136568,136569,136571,136572,136574],{},"音频 ",[33,136570,28443],{}," 和视频 ",[33,136573,28452],{}," 两个标签",[22270,136576,136578],{"id":136577},"_14121-视频标签-video","14.1.2.1 视频标签- video",[377,136580,136581],{},[380,136582,136583],{},"支持格式：",[44,136585],{"style":126605,"src":136586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,136588,136589],{},"尽量使用MP4，兼容性好",[14,136591,136592],{},"用MP4就可以",[49,136594,136596],{"className":127496,"code":136595,"language":127498,"meta":46,"style":46},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[28,136597,136598],{"__ignoreMap":46},[57,136599,136600,136602,136604,136606,136608,136611,136613,136616,136619,136622,136624,136626],{"class":59,"line":60},[57,136601,1326],{"class":140},[57,136603,28452],{"class":51497},[57,136605,55436],{"class":70},[57,136607,156],{"class":140},[57,136609,136610],{"class":74},"\"movie.mp4\"",[57,136612,92620],{"class":70},[57,136614,136615],{"class":70}," autoplay",[57,136617,136618],{"class":70}," muted",[57,136620,136621],{"class":70}," loop",[57,136623,55511],{"class":140},[57,136625,28452],{"class":51497},[57,136627,51504],{"class":140},[377,136629,136630],{"start":67},[380,136631,136632],{},"兼容写法",[14,136634,136635],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[49,136637,136638],{"className":127496,"code":136595,"language":127498,"meta":46,"style":46},[28,136639,136640],{"__ignoreMap":46},[57,136641,136642,136644,136646,136648,136650,136652,136654,136656,136658,136660,136662,136664],{"class":59,"line":60},[57,136643,1326],{"class":140},[57,136645,28452],{"class":51497},[57,136647,55436],{"class":70},[57,136649,156],{"class":140},[57,136651,136610],{"class":74},[57,136653,92620],{"class":70},[57,136655,136615],{"class":70},[57,136657,136618],{"class":70},[57,136659,136621],{"class":70},[57,136661,55511],{"class":140},[57,136663,28452],{"class":51497},[57,136665,51504],{"class":140},[14,136667,136668],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[377,136670,136671],{"start":144},[380,136672,136673],{},"video常用属性",[44,136675],{"style":126605,"src":136676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,136678,136679],{},"poster属性后面是跟的等待加载图片的地址",[49,136681,136682],{"className":127496,"code":134251,"language":127498,"meta":46,"style":46},[28,136683,136684],{"__ignoreMap":46},[57,136685,136686,136688,136690,136692,136694,136696,136698,136700,136702,136704,136706,136708],{"class":59,"line":60},[57,136687,1326],{"class":140},[57,136689,44],{"class":51497},[57,136691,55436],{"class":70},[57,136693,156],{"class":140},[57,136695,134266],{"class":74},[57,136697,55444],{"class":70},[57,136699,156],{"class":140},[57,136701,134273],{"class":74},[57,136703,134276],{"class":70},[57,136705,156],{"class":140},[57,136707,134281],{"class":74},[57,136709,51504],{"class":140},[14,136711,136712],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[49,136714,136716],{"className":126749,"code":136715,"language":126751,"meta":46,"style":46},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[28,136717,136718,136723,136729,136753,136758,136763],{"__ignoreMap":46},[57,136719,136720],{"class":59,"line":60},[57,136721,136722],{"class":63},"\u002F* 2D 位移 *\u002F\n",[57,136724,136725,136727],{"class":59,"line":67},[57,136726,51808],{"class":51497},[57,136728,15844],{"class":140},[57,136730,136731,136734,136736,136739,136741,136743,136745,136747,136749,136751],{"class":59,"line":144},[57,136732,136733],{"class":81},"  transform",[57,136735,51634],{"class":140},[57,136737,136738],{"class":81},"translate",[57,136740,168],{"class":140},[57,136742,728],{"class":81},[57,136744,51689],{"class":136},[57,136746,12708],{"class":140},[57,136748,1072],{"class":81},[57,136750,51689],{"class":136},[57,136752,2992],{"class":140},[57,136754,136755],{"class":59,"line":150},[57,136756,136757],{"class":63},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[57,136759,136760],{"class":59,"line":162},[57,136761,136762],{"class":63},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[57,136764,136765],{"class":59,"line":180},[57,136766,1847],{"class":140},[14,136768,136769],{},"muted:自动静音属性",[22270,136771,136773],{"id":136772},"_14122-音频标签audio","14.1.2.2 音频标签audio",[377,136775,136776],{},[380,136777,136778],{},"基本使用",[14,136780,136781,136782,136787,136788],{},"当前 ",[33,136783,136784],{},[28,136785,136786],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[33,136789,136790],{},"mp3格式",[44,136792],{"style":126605,"src":136793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[377,136795,136796],{"start":67},[380,136797,136632],{},[49,136799,136800],{"className":127496,"code":136595,"language":127498,"meta":46,"style":46},[28,136801,136802],{"__ignoreMap":46},[57,136803,136804,136806,136808,136810,136812,136814,136816,136818,136820,136822,136824,136826],{"class":59,"line":60},[57,136805,1326],{"class":140},[57,136807,28452],{"class":51497},[57,136809,55436],{"class":70},[57,136811,156],{"class":140},[57,136813,136610],{"class":74},[57,136815,92620],{"class":70},[57,136817,136615],{"class":70},[57,136819,136618],{"class":70},[57,136821,136621],{"class":70},[57,136823,55511],{"class":140},[57,136825,28452],{"class":51497},[57,136827,51504],{"class":140},[14,136829,136830],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[377,136832,136833],{"start":144},[380,136834,136835],{},"常用属性",[44,136837],{"style":126605,"src":136838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[49,136840,136841],{"className":127496,"code":136595,"language":127498,"meta":46,"style":46},[28,136842,136843],{"__ignoreMap":46},[57,136844,136845,136847,136849,136851,136853,136855,136857,136859,136861,136863,136865,136867],{"class":59,"line":60},[57,136846,1326],{"class":140},[57,136848,28452],{"class":51497},[57,136850,55436],{"class":70},[57,136852,156],{"class":140},[57,136854,136610],{"class":74},[57,136856,92620],{"class":70},[57,136858,136615],{"class":70},[57,136860,136618],{"class":70},[57,136862,136621],{"class":70},[57,136864,55511],{"class":140},[57,136866,28452],{"class":51497},[57,136868,51504],{"class":140},[14,136870,136871],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22270,136873,136875],{"id":136874},"_14123-总结","14.1.2.3 总结",[1422,136877,136878,136881,136884,136887,136890],{},[380,136879,136880],{},"音频标签和视频标签使用方式基本一致",[380,136882,136883],{},"浏览器支持情况不同",[380,136885,136886],{},"谷歌浏览器把音频和视频自动播放禁止了",[380,136888,136889],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[380,136891,136892],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[394,136894,136896],{"id":136895},"_1413-表单元素","14.1.3 表单元素",[22270,136898,136900],{"id":136899},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[44,136902],{"style":126605,"src":136903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[49,136905,136907],{"className":127496,"code":136906,"language":127498,"meta":46,"style":46},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[28,136908,136909],{"__ignoreMap":46},[57,136910,136911,136913,136915,136917,136919,136921,136923,136925,136928,136930,136932,136935],{"class":59,"line":60},[57,136912,1326],{"class":140},[57,136914,54018],{"class":51497},[57,136916,54021],{"class":70},[57,136918,156],{"class":140},[57,136920,62896],{"class":74},[57,136922,15192],{"class":70},[57,136924,156],{"class":140},[57,136926,136927],{"class":74},"\"username\"",[57,136929,61217],{"class":70},[57,136931,156],{"class":140},[57,136933,136934],{"class":74},"\"请输入用户名\"",[57,136936,51504],{"class":140},[44,136938],{"style":126605,"src":136939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22270,136941,136943],{"id":136942},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[44,136945],{"style":126605,"src":136946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,136948,136949],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,136951,136952],{},"快捷操作：",[44,136954],{"style":126605,"src":136955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,136957,136958],{},"例子1：",[49,136960,136962],{"className":127496,"code":136961,"language":127498,"meta":46,"style":46},"\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",[28,136963,136964,136987,137014,137043,137062],{"__ignoreMap":46},[57,136965,136966,136968,136970,136972,136974,136977,136980,136982,136985],{"class":59,"line":60},[57,136967,1326],{"class":140},[57,136969,66822],{"class":51497},[57,136971,66825],{"class":70},[57,136973,156],{"class":140},[57,136975,136976],{"class":74},"\"\u002Fsubmit\"",[57,136978,136979],{"class":70}," method",[57,136981,156],{"class":140},[57,136983,136984],{"class":74},"\"post\"",[57,136986,51504],{"class":140},[57,136988,136989,136991,136993,136995,136997,136999,137001,137003,137005,137007,137009,137012],{"class":59,"line":67},[57,136990,52341],{"class":140},[57,136992,54018],{"class":51497},[57,136994,54021],{"class":70},[57,136996,156],{"class":140},[57,136998,62896],{"class":74},[57,137000,15192],{"class":70},[57,137002,156],{"class":140},[57,137004,136927],{"class":74},[57,137006,61217],{"class":70},[57,137008,156],{"class":140},[57,137010,137011],{"class":74},"\"用户名\"",[57,137013,51504],{"class":140},[57,137015,137016,137018,137020,137022,137024,137027,137029,137031,137034,137036,137038,137041],{"class":59,"line":144},[57,137017,52341],{"class":140},[57,137019,54018],{"class":51497},[57,137021,54021],{"class":70},[57,137023,156],{"class":140},[57,137025,137026],{"class":74},"\"password\"",[57,137028,15192],{"class":70},[57,137030,156],{"class":140},[57,137032,137033],{"class":74},"\"pwd\"",[57,137035,61217],{"class":70},[57,137037,156],{"class":140},[57,137039,137040],{"class":74},"\"密码\"",[57,137042,51504],{"class":140},[57,137044,137045,137047,137049,137051,137053,137055,137058,137060],{"class":59,"line":150},[57,137046,52341],{"class":140},[57,137048,54084],{"class":51497},[57,137050,54021],{"class":70},[57,137052,156],{"class":140},[57,137054,66845],{"class":74},[57,137056,137057],{"class":140},">提交\u003C\u002F",[57,137059,54084],{"class":51497},[57,137061,51504],{"class":140},[57,137063,137064,137066,137068],{"class":59,"line":162},[57,137065,51982],{"class":140},[57,137067,66822],{"class":51497},[57,137069,51504],{"class":140},[44,137071],{"style":126605,"src":137072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,137074,137075],{},"value是表单域的内容",[14,137077,137078],{},"例子2：",[49,137080,137081],{"className":127496,"code":136961,"language":127498,"meta":46,"style":46},[28,137082,137083,137103,137129,137155,137173],{"__ignoreMap":46},[57,137084,137085,137087,137089,137091,137093,137095,137097,137099,137101],{"class":59,"line":60},[57,137086,1326],{"class":140},[57,137088,66822],{"class":51497},[57,137090,66825],{"class":70},[57,137092,156],{"class":140},[57,137094,136976],{"class":74},[57,137096,136979],{"class":70},[57,137098,156],{"class":140},[57,137100,136984],{"class":74},[57,137102,51504],{"class":140},[57,137104,137105,137107,137109,137111,137113,137115,137117,137119,137121,137123,137125,137127],{"class":59,"line":67},[57,137106,52341],{"class":140},[57,137108,54018],{"class":51497},[57,137110,54021],{"class":70},[57,137112,156],{"class":140},[57,137114,62896],{"class":74},[57,137116,15192],{"class":70},[57,137118,156],{"class":140},[57,137120,136927],{"class":74},[57,137122,61217],{"class":70},[57,137124,156],{"class":140},[57,137126,137011],{"class":74},[57,137128,51504],{"class":140},[57,137130,137131,137133,137135,137137,137139,137141,137143,137145,137147,137149,137151,137153],{"class":59,"line":144},[57,137132,52341],{"class":140},[57,137134,54018],{"class":51497},[57,137136,54021],{"class":70},[57,137138,156],{"class":140},[57,137140,137026],{"class":74},[57,137142,15192],{"class":70},[57,137144,156],{"class":140},[57,137146,137033],{"class":74},[57,137148,61217],{"class":70},[57,137150,156],{"class":140},[57,137152,137040],{"class":74},[57,137154,51504],{"class":140},[57,137156,137157,137159,137161,137163,137165,137167,137169,137171],{"class":59,"line":150},[57,137158,52341],{"class":140},[57,137160,54084],{"class":51497},[57,137162,54021],{"class":70},[57,137164,156],{"class":140},[57,137166,66845],{"class":74},[57,137168,137057],{"class":140},[57,137170,54084],{"class":51497},[57,137172,51504],{"class":140},[57,137174,137175,137177,137179],{"class":59,"line":162},[57,137176,51982],{"class":140},[57,137178,66822],{"class":51497},[57,137180,51504],{"class":140},[44,137182],{"style":126605,"src":137183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[365,137185,137187],{"id":137186},"_142-css新特性","14.2 CSS新特性",[394,137189,137191],{"id":137190},"_1421-新增选择器","14.2.1 新增选择器",[22270,137193,137195],{"id":137194},"_14211-属性选择器","14.2.1.1 属性选择器",[44,137197],{"style":126605,"src":137198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[49,137200,137202],{"className":126749,"code":137201,"language":126751,"meta":46,"style":46},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[28,137203,137204,137219,137235],{"__ignoreMap":46},[57,137205,137206,137208,137210,137212,137214,137216],{"class":59,"line":60},[57,137207,54018],{"class":51497},[57,137209,1306],{"class":140},[57,137211,103304],{"class":70},[57,137213,156],{"class":136},[57,137215,62896],{"class":74},[57,137217,137218],{"class":140},"] {\n",[57,137220,137221,137223,137225,137227,137229,137231,137233],{"class":59,"line":67},[57,137222,71093],{"class":81},[57,137224,51634],{"class":140},[57,137226,635],{"class":81},[57,137228,51689],{"class":136},[57,137230,51718],{"class":81},[57,137232,130329],{"class":81},[57,137234,1576],{"class":140},[57,137236,137237],{"class":59,"line":144},[57,137238,1847],{"class":140},[44,137240],{"style":126605,"src":137241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,137243,454],{},[1422,137245,137246,137249,137252,137255],{},[380,137247,137248],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[380,137250,137251],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[380,137253,137254],{},"属性选择器也可以选择出来自定义的属性",[380,137256,137257,137259],{},[33,137258,9298],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22270,137261,137263],{"id":137262},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[44,137265],{"style":126605,"src":137266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[377,137268,137269],{},[380,137270,137271],{},"fist-child",[49,137273,137275],{"className":126749,"code":137274,"language":126751,"meta":46,"style":46},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[28,137276,137277,137282,137297,137317,137335],{"__ignoreMap":46},[57,137278,137279],{"class":59,"line":60},[57,137280,137281],{"class":63},"\u002F* 属性选择器 *\u002F\n",[57,137283,137284,137286,137288,137290,137292,137294],{"class":59,"line":67},[57,137285,54018],{"class":51497},[57,137287,1306],{"class":140},[57,137289,103304],{"class":70},[57,137291,156],{"class":136},[57,137293,62896],{"class":74},[57,137295,137296],{"class":140},"] { }\n",[57,137298,137299,137301,137303,137305,137308,137311,137314],{"class":59,"line":144},[57,137300,54018],{"class":51497},[57,137302,1306],{"class":140},[57,137304,14966],{"class":70},[57,137306,137307],{"class":136},"^=",[57,137309,137310],{"class":74},"\"icon\"",[57,137312,137313],{"class":140},"] { }  ",[57,137315,137316],{"class":63},"\u002F* 以 icon 开头 *\u002F\n",[57,137318,137319,137321,137323,137325,137328,137330,137332],{"class":59,"line":150},[57,137320,54018],{"class":51497},[57,137322,1306],{"class":140},[57,137324,14966],{"class":70},[57,137326,137327],{"class":136},"$=",[57,137329,137310],{"class":74},[57,137331,137313],{"class":140},[57,137333,137334],{"class":63},"\u002F* 以 icon 结尾 *\u002F\n",[57,137336,137337,137339,137341,137343,137346,137348,137350],{"class":59,"line":162},[57,137338,54018],{"class":51497},[57,137340,1306],{"class":140},[57,137342,14966],{"class":70},[57,137344,137345],{"class":136},"*=",[57,137347,137310],{"class":74},[57,137349,137313],{"class":140},[57,137351,137352],{"class":63},"\u002F* 包含 icon *\u002F\n",[14,137354,137355],{},"ul的第一个儿子文本为红色",[14,137357,137358],{},"一定要在冒号前加空格，不然就是选中所有的了",[49,137360,137362],{"className":126749,"code":137361,"language":126751,"meta":46,"style":46},".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",[28,137363,137364,137370,137380,137384,137388,137393,137406,137419,137435,137452,137469],{"__ignoreMap":46},[57,137365,137366,137368],{"class":59,"line":60},[57,137367,127040],{"class":70},[57,137369,15844],{"class":140},[57,137371,137372,137374,137376,137378],{"class":59,"line":67},[57,137373,71102],{"class":81},[57,137375,51634],{"class":140},[57,137377,57618],{"class":81},[57,137379,1576],{"class":140},[57,137381,137382],{"class":59,"line":144},[57,137383,1847],{"class":140},[57,137385,137386],{"class":59,"line":150},[57,137387,136210],{"class":140},[57,137389,137390],{"class":59,"line":162},[57,137391,137392],{"class":63},"\u002F* 结构伪类选择器 *\u002F\n",[57,137394,137395,137397,137400,137403],{"class":59,"line":180},[57,137396,380],{"class":51497},[57,137398,137399],{"class":70},":first-child",[57,137401,137402],{"class":140}," { }           ",[57,137404,137405],{"class":63},"\u002F* 第一个 *\u002F\n",[57,137407,137408,137410,137413,137416],{"class":59,"line":186},[57,137409,380],{"class":51497},[57,137411,137412],{"class":70},":last-child",[57,137414,137415],{"class":140}," { }            ",[57,137417,137418],{"class":63},"\u002F* 最后一个 *\u002F\n",[57,137420,137421,137423,137425,137427,137429,137432],{"class":59,"line":197},[57,137422,380],{"class":51497},[57,137424,129663],{"class":70},[57,137426,168],{"class":140},[57,137428,498],{"class":81},[57,137430,137431],{"class":140},") { }          ",[57,137433,137434],{"class":63},"\u002F* 第2个 *\u002F\n",[57,137436,137437,137439,137441,137443,137446,137449],{"class":59,"line":241},[57,137438,380],{"class":51497},[57,137440,129663],{"class":70},[57,137442,168],{"class":140},[57,137444,137445],{"class":81},"2n",[57,137447,137448],{"class":140},") { }         ",[57,137450,137451],{"class":63},"\u002F* 偶数 *\u002F\n",[57,137453,137454,137456,137458,137460,137463,137466],{"class":59,"line":249},[57,137455,380],{"class":51497},[57,137457,129663],{"class":70},[57,137459,168],{"class":140},[57,137461,137462],{"class":81},"2n+1",[57,137464,137465],{"class":140},") { }       ",[57,137467,137468],{"class":63},"\u002F* 奇数 *\u002F\n",[57,137470,137471,137473,137475,137477,137480,137482],{"class":59,"line":262},[57,137472,380],{"class":51497},[57,137474,129663],{"class":70},[57,137476,168],{"class":140},[57,137478,137479],{"class":81},"-n+3",[57,137481,137465],{"class":140},[57,137483,137484],{"class":63},"\u002F* 前3个 *\u002F\n",[51808,137486,137489],{"className":137487},[137488],"example","\n  示例内容\n",[14,137491,137492],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1422,137494,137495],{},[380,137496,137497,137500],{},[28,137498,137499],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,137502,137503],{},"也就是说它选择的是熊大",[377,137505,137506],{"start":180},[380,137507,137508],{},"权重",[49,137510,137512],{"className":126749,"code":137511,"language":126751,"meta":46,"style":46},"\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",[28,137513,137514,137518,137528,137538,137552,137566,137580],{"__ignoreMap":46},[57,137515,137516],{"class":59,"line":60},[57,137517,137392],{"class":63},[57,137519,137520,137522,137524,137526],{"class":59,"line":67},[57,137521,380],{"class":51497},[57,137523,137399],{"class":70},[57,137525,137402],{"class":140},[57,137527,137405],{"class":63},[57,137529,137530,137532,137534,137536],{"class":59,"line":144},[57,137531,380],{"class":51497},[57,137533,137412],{"class":70},[57,137535,137415],{"class":140},[57,137537,137418],{"class":63},[57,137539,137540,137542,137544,137546,137548,137550],{"class":59,"line":150},[57,137541,380],{"class":51497},[57,137543,129663],{"class":70},[57,137545,168],{"class":140},[57,137547,498],{"class":81},[57,137549,137431],{"class":140},[57,137551,137434],{"class":63},[57,137553,137554,137556,137558,137560,137562,137564],{"class":59,"line":162},[57,137555,380],{"class":51497},[57,137557,129663],{"class":70},[57,137559,168],{"class":140},[57,137561,137445],{"class":81},[57,137563,137448],{"class":140},[57,137565,137451],{"class":63},[57,137567,137568,137570,137572,137574,137576,137578],{"class":59,"line":180},[57,137569,380],{"class":51497},[57,137571,129663],{"class":70},[57,137573,168],{"class":140},[57,137575,137462],{"class":81},[57,137577,137465],{"class":140},[57,137579,137468],{"class":63},[57,137581,137582,137584,137586,137588,137590,137592],{"class":59,"line":186},[57,137583,380],{"class":51497},[57,137585,129663],{"class":70},[57,137587,168],{"class":140},[57,137589,137479],{"class":81},[57,137591,137465],{"class":140},[57,137593,137484],{"class":63},[14,137595,137596],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22270,137598,137600],{"id":137599},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,137602,137603],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[44,137605],{"style":126605,"src":137606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[377,137608,137609],{},[380,137610,454],{},[1422,137612,137613,137616,137619,137622,137625,137628],{},[380,137614,137615],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[380,137617,137618],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[380,137620,137621],{},"语法： element::before {}",[380,137623,137624],{},"before 和 after 必须有 content 属性",[380,137626,137627],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[380,137629,137630],{},"伪元素选择器和标签选择器一样，权重为 1",[377,137632,137633],{"start":67},[380,137634,137635],{},"实例",[49,137637,137638],{"className":126749,"code":137511,"language":126751,"meta":46,"style":46},[28,137639,137640,137644,137654,137664,137678,137692,137706],{"__ignoreMap":46},[57,137641,137642],{"class":59,"line":60},[57,137643,137392],{"class":63},[57,137645,137646,137648,137650,137652],{"class":59,"line":67},[57,137647,380],{"class":51497},[57,137649,137399],{"class":70},[57,137651,137402],{"class":140},[57,137653,137405],{"class":63},[57,137655,137656,137658,137660,137662],{"class":59,"line":144},[57,137657,380],{"class":51497},[57,137659,137412],{"class":70},[57,137661,137415],{"class":140},[57,137663,137418],{"class":63},[57,137665,137666,137668,137670,137672,137674,137676],{"class":59,"line":150},[57,137667,380],{"class":51497},[57,137669,129663],{"class":70},[57,137671,168],{"class":140},[57,137673,498],{"class":81},[57,137675,137431],{"class":140},[57,137677,137434],{"class":63},[57,137679,137680,137682,137684,137686,137688,137690],{"class":59,"line":162},[57,137681,380],{"class":51497},[57,137683,129663],{"class":70},[57,137685,168],{"class":140},[57,137687,137445],{"class":81},[57,137689,137448],{"class":140},[57,137691,137451],{"class":63},[57,137693,137694,137696,137698,137700,137702,137704],{"class":59,"line":180},[57,137695,380],{"class":51497},[57,137697,129663],{"class":70},[57,137699,168],{"class":140},[57,137701,137462],{"class":81},[57,137703,137465],{"class":140},[57,137705,137468],{"class":63},[57,137707,137708,137710,137712,137714,137716,137718],{"class":59,"line":186},[57,137709,380],{"class":51497},[57,137711,129663],{"class":70},[57,137713,168],{"class":140},[57,137715,137479],{"class":81},[57,137717,137465],{"class":140},[57,137719,137484],{"class":63},[44,137721],{"style":126605,"src":137722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[377,137724,137725],{"start":144},[380,137726,137727],{},"使用场景1",[44,137729],{"style":126605,"src":137730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,137732,137733],{},"不需要再加盒子来整红色那部分了",[49,137735,137737],{"className":126749,"code":137736,"language":126751,"meta":46,"style":46},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[28,137738,137739,137744,137753,137764,137774,137778,137787,137798,137808],{"__ignoreMap":46},[57,137740,137741],{"class":59,"line":60},[57,137742,137743],{"class":63},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[57,137745,137746,137748,137751],{"class":59,"line":67},[57,137747,51808],{"class":51497},[57,137749,137750],{"class":70},"::before",[57,137752,15844],{"class":140},[57,137754,137755,137758,137760,137762],{"class":59,"line":144},[57,137756,137757],{"class":81},"  content",[57,137759,51634],{"class":140},[57,137761,7925],{"class":74},[57,137763,1576],{"class":140},[57,137765,137766,137768,137770,137772],{"class":59,"line":150},[57,137767,128365],{"class":81},[57,137769,51634],{"class":140},[57,137771,61066],{"class":81},[57,137773,1576],{"class":140},[57,137775,137776],{"class":59,"line":162},[57,137777,1847],{"class":140},[57,137779,137780,137782,137785],{"class":59,"line":180},[57,137781,51808],{"class":51497},[57,137783,137784],{"class":70},"::after",[57,137786,15844],{"class":140},[57,137788,137789,137791,137793,137796],{"class":59,"line":186},[57,137790,137757],{"class":81},[57,137792,51634],{"class":140},[57,137794,137795],{"class":74},"\"→\"",[57,137797,1576],{"class":140},[57,137799,137800,137802,137804,137806],{"class":59,"line":197},[57,137801,71102],{"class":81},[57,137803,51634],{"class":140},[57,137805,62267],{"class":81},[57,137807,1576],{"class":140},[57,137809,137810],{"class":59,"line":241},[57,137811,1847],{"class":140},[44,137813],{"style":126605,"src":137814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,137816,137817],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[44,137819],{"style":126605,"src":137820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,137822,137823],{},"但是在引用时需要先转义一下",[14,137825,137826],{},"content='\\e930'",[377,137828,137829],{"start":150},[380,137830,137831],{},"使用场景2",[14,137833,137834],{},"仿土豆效果",[14,137836,137837],{},"通过使用伪元素选择器可以减少body中盒子的数量",[49,137839,137840],{"className":126749,"code":137736,"language":126751,"meta":46,"style":46},[28,137841,137842,137846,137854,137864,137874,137878,137886,137896,137906],{"__ignoreMap":46},[57,137843,137844],{"class":59,"line":60},[57,137845,137743],{"class":63},[57,137847,137848,137850,137852],{"class":59,"line":67},[57,137849,51808],{"class":51497},[57,137851,137750],{"class":70},[57,137853,15844],{"class":140},[57,137855,137856,137858,137860,137862],{"class":59,"line":144},[57,137857,137757],{"class":81},[57,137859,51634],{"class":140},[57,137861,7925],{"class":74},[57,137863,1576],{"class":140},[57,137865,137866,137868,137870,137872],{"class":59,"line":150},[57,137867,128365],{"class":81},[57,137869,51634],{"class":140},[57,137871,61066],{"class":81},[57,137873,1576],{"class":140},[57,137875,137876],{"class":59,"line":162},[57,137877,1847],{"class":140},[57,137879,137880,137882,137884],{"class":59,"line":180},[57,137881,51808],{"class":51497},[57,137883,137784],{"class":70},[57,137885,15844],{"class":140},[57,137887,137888,137890,137892,137894],{"class":59,"line":186},[57,137889,137757],{"class":81},[57,137891,51634],{"class":140},[57,137893,137795],{"class":74},[57,137895,1576],{"class":140},[57,137897,137898,137900,137902,137904],{"class":59,"line":197},[57,137899,71102],{"class":81},[57,137901,51634],{"class":140},[57,137903,62267],{"class":81},[57,137905,1576],{"class":140},[57,137907,137908],{"class":59,"line":241},[57,137909,1847],{"class":140},[44,137911],{"style":126605,"src":137912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[377,137914,137915],{"start":162},[380,137916,137917],{},"使用场景3",[14,137919,137920],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[49,137922,137924],{"className":126749,"code":137923,"language":126751,"meta":46,"style":46},".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",[28,137925,137926,137932,137942,137946,137950,137954,137962,137972,137982,137986,137994,138004,138014],{"__ignoreMap":46},[57,137927,137928,137930],{"class":59,"line":60},[57,137929,130597],{"class":70},[57,137931,15844],{"class":140},[57,137933,137934,137936,137938,137940],{"class":59,"line":67},[57,137935,131229],{"class":81},[57,137937,51634],{"class":140},[57,137939,24008],{"class":81},[57,137941,1576],{"class":140},[57,137943,137944],{"class":59,"line":144},[57,137945,1847],{"class":140},[57,137947,137948],{"class":59,"line":150},[57,137949,136210],{"class":140},[57,137951,137952],{"class":59,"line":162},[57,137953,137743],{"class":63},[57,137955,137956,137958,137960],{"class":59,"line":180},[57,137957,51808],{"class":51497},[57,137959,137750],{"class":70},[57,137961,15844],{"class":140},[57,137963,137964,137966,137968,137970],{"class":59,"line":186},[57,137965,137757],{"class":81},[57,137967,51634],{"class":140},[57,137969,7925],{"class":74},[57,137971,1576],{"class":140},[57,137973,137974,137976,137978,137980],{"class":59,"line":197},[57,137975,128365],{"class":81},[57,137977,51634],{"class":140},[57,137979,61066],{"class":81},[57,137981,1576],{"class":140},[57,137983,137984],{"class":59,"line":241},[57,137985,1847],{"class":140},[57,137987,137988,137990,137992],{"class":59,"line":249},[57,137989,51808],{"class":51497},[57,137991,137784],{"class":70},[57,137993,15844],{"class":140},[57,137995,137996,137998,138000,138002],{"class":59,"line":262},[57,137997,137757],{"class":81},[57,137999,51634],{"class":140},[57,138001,137795],{"class":74},[57,138003,1576],{"class":140},[57,138005,138006,138008,138010,138012],{"class":59,"line":281},[57,138007,71102],{"class":81},[57,138009,51634],{"class":140},[57,138011,62267],{"class":81},[57,138013,1576],{"class":140},[57,138015,138016],{"class":59,"line":287},[57,138017,1847],{"class":140},[14,138019,138020],{},"div {\nmargin: 0 auto;\n}",[49,138022,138025],{"className":138023,"code":138024,"language":5460},[5458],"\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",[28,138026,138024],{"__ignoreMap":46},[14,138028,138029],{},"如果想让多个元素都发生变化",[14,138031,138032],{},"不能如下操作：",[14,138034,138035],{},"transition: width 2s ease 0.5s;",[14,138037,138038],{},"transition: height 2s ease 0.5s;不对！！！",[14,138040,138041],{},"上方会样式冲突，导致不显示任何过渡效果",[14,138043,138044],{},"使用如下：加逗号隔开",[14,138046,138047],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,138049,138050],{},"transition all 2s ease;",[394,138052,138054],{"id":138053},"_1426-过渡练习","14.2.6 过渡练习",[377,138056,138057],{},[380,138058,138059],{},"进度条",[44,138061],{"style":126605,"src":138062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[49,138064,138066],{"className":126749,"code":138065,"language":126751,"meta":46,"style":46},"div {\n  transition: all 0.3s ease;\n}\n",[28,138067,138068,138074,138092],{"__ignoreMap":46},[57,138069,138070,138072],{"class":59,"line":60},[57,138071,51808],{"class":51497},[57,138073,15844],{"class":140},[57,138075,138076,138079,138081,138083,138086,138088,138090],{"class":59,"line":67},[57,138077,138078],{"class":81},"  transition",[57,138080,51634],{"class":140},[57,138082,28390],{"class":81},[57,138084,138085],{"class":81}," 0.3",[57,138087,1111],{"class":136},[57,138089,78877],{"class":81},[57,138091,1576],{"class":140},[57,138093,138094],{"class":59,"line":144},[57,138095,1847],{"class":140},[377,138097,138098],{"start":67},[380,138099,138100],{},"小米logo",[14,138102,138103],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[49,138105,138107],{"className":126749,"code":138106,"language":126751,"meta":46,"style":46},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[28,138108,138109,138114,138120,138136,138141],{"__ignoreMap":46},[57,138110,138111],{"class":59,"line":60},[57,138112,138113],{"class":63},"\u002F* CSS3 过渡 *\u002F\n",[57,138115,138116,138118],{"class":59,"line":67},[57,138117,51808],{"class":51497},[57,138119,15844],{"class":140},[57,138121,138122,138124,138126,138128,138130,138132,138134],{"class":59,"line":144},[57,138123,138078],{"class":81},[57,138125,51634],{"class":140},[57,138127,28390],{"class":81},[57,138129,138085],{"class":81},[57,138131,1111],{"class":136},[57,138133,78877],{"class":81},[57,138135,1576],{"class":140},[57,138137,138138],{"class":59,"line":150},[57,138139,138140],{"class":63},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[57,138142,138143],{"class":59,"line":162},[57,138144,1847],{"class":140},[14,138146,138147],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[342,138149,138150],{},"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":46,"searchDepth":67,"depth":67,"links":138152},[138153,138158],{"id":136483,"depth":67,"text":136484,"children":138154},[138155,138156,138157],{"id":136487,"depth":144,"text":136488},{"id":136564,"depth":144,"text":136565},{"id":136895,"depth":144,"text":136896},{"id":137186,"depth":67,"text":137187,"children":138159},[138160,138161],{"id":137190,"depth":144,"text":137191},{"id":138053,"depth":144,"text":138054},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136475,"description":347},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138168,"title":138169,"body":138170,"description":347,"extension":348,"meta":139914,"navigation":350,"path":139915,"seo":139916,"stem":139917,"__hash__":139918},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138171,"toc":139895},[138172,138175,138179,138182,138188,138194,138198,138200,138203,138206,138209,138212,138215,138218,138221,138225,138229,138232,138235,138238,138242,138245,138248,138253,138256,138259,138262,138266,138269,138278,138281,138284,138288,138291,138294,138299,138306,138320,138328,138335,138340,138343,138346,138349,138356,138360,138366,138372,138375,138378,138383,138389,138391,138399,138404,138407,138413,138415,138420,138425,138428,138430,138435,138438,138443,138448,138482,138486,138490,138493,138497,138500,138586,138589,138626,138629,138665,138669,138674,138687,138741,138743,138771,138773,138801,138807,138821,138823,138867,138869,138913,138916,138923,138934,138936,138963,138965,138991,138998,139014,139016,139110,139112,139206,139213,139216,139221,139227,139301,139304,139306,139342,139344,139380,139383,139390,139409,139412,139415,139417,139442,139444,139468,139471,139474,139504,139508,139511,139574,139576,139642,139644,139708,139711,139743,139745,139771,139773,139799,139802,139833,139835,139861,139863,139889,139892],[10,138173,138169],{"id":138174},"_15-品优购项目上篇-搭建与公共模块",[365,138176,138178],{"id":138177},"_151-项目规划","15.1 项目规划",[44,138180],{"style":126605,"src":138181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,138183,138184,138187],{},[33,138185,138186],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,138189,138190,138193],{},[33,138191,138192],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[365,138195,138197],{"id":138196},"_152-项目介绍","15.2 项目介绍",[14,138199,138186],{},[44,138201],{"style":126605,"src":138202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,138204,138205],{},"主页：",[44,138207],{"style":126605,"src":138208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,138210,138211],{},"列表页：",[44,138213],{"style":126605,"src":138214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,138216,138217],{},"注册页：",[44,138219],{"style":126605,"src":138220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[365,138222,138224],{"id":138223},"_153-项目搭建工作","15.3 项目搭建工作",[394,138226,138228],{"id":138227},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[44,138230],{"style":126605,"src":138231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,138233,138234],{},"经常更换的图片要放到upload文件夹中",[14,138236,138237],{},"不经常换的放到images文件夹中",[394,138239,138241],{"id":138240},"_1532-创建文件如下","15.3.2 创建文件如下",[44,138243],{"style":126605,"src":138244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[44,138246],{"style":126605,"src":138247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,138249,138250],{},[33,138251,138252],{},"初始化样式：",[14,138254,138255],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,138257,138258],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,138260,138261],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[394,138263,138265],{"id":138264},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,138267,138268],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,138270,138271,138272,138277],{},"这里最典型的应用就是 ",[33,138273,138274],{},[28,138275,138276],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[44,138279],{"style":126605,"src":138280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,138282,138283],{},"通过link方法来引入",[394,138285,138287],{"id":138286},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[44,138289],{"style":126605,"src":138290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,138292,138293],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[377,138295,138296],{},[380,138297,138298],{},"制作favicon图标",[14,138300,138301,138302,138305],{},"①把品优购图标切成 ",[28,138303,138304],{},"png"," 图片",[14,138307,138308,138309,138311,138312,138315,138316],{},"②把 ",[28,138310,138304],{}," 图片转换为 ",[28,138313,138314],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[18,138317,138318],{"href":138318,"rel":138319},"http:\u002F\u002Fwww.bitbug.net\u002F",[22],[377,138321,138322,138325],{"start":67},[380,138323,138324],{},"favicon图标放到网站根目录下",[380,138326,138327],{},"HTML页面引入favicon",[14,138329,138330,138331,138334],{},"在html 页面里面的 ",[28,138332,138333],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,138336,138337],{},[28,138338,138339],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,138341,138342],{},"复制这行代码或者在生成这个的网站进行复制",[44,138344],{"style":126605,"src":138345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,138347,138348],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,138350,138351,138352],{},"例如:",[18,138353,138354],{"href":138354,"rel":138355},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[22],[394,138357,138359],{"id":138358},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,138361,138362,138365],{},[33,138363,138364],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,138367,138368,138371],{},[33,138369,138370],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,138373,138374],{},"页面必须有三个标签用来符合 SEO 优化",[44,138376],{"style":126605,"src":138377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[377,138379,138380],{},[380,138381,138382],{},"title网站标题",[14,138384,138385,138388],{},[33,138386,138387],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,138390,68987],{},[1422,138392,138393,138396],{},[380,138394,138395],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[380,138397,138398],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[377,138400,138401],{"start":67},[380,138402,138403],{},"description网站描述",[14,138405,138406],{},"简要说明我们网站主要是做什么的",[14,138408,138409,138412],{},[33,138410,138411],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,138414,68987],{},[14,138416,138417],{},[28,138418,138419],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[377,138421,138422],{"start":144},[380,138423,138424],{},"keywords关键词",[14,138426,138427],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,138429,68987],{},[14,138431,138432],{},[28,138433,138434],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,138436,138437],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,138439,138440],{},[33,138441,138442],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[377,138444,138445],{"start":150},[380,138446,138447],{},"代码总结",[49,138449,138450],{"className":127496,"code":130853,"language":127498,"meta":46,"style":46},[28,138451,138452,138456,138470,138474],{"__ignoreMap":46},[57,138453,138454],{"class":59,"line":60},[57,138455,130860],{"class":63},[57,138457,138458,138460,138462,138464,138466,138468],{"class":59,"line":67},[57,138459,1326],{"class":140},[57,138461,51808],{"class":51497},[57,138463,53683],{"class":70},[57,138465,156],{"class":140},[57,138467,130873],{"class":74},[57,138469,51504],{"class":140},[57,138471,138472],{"class":59,"line":144},[57,138473,130880],{"class":140},[57,138475,138476,138478,138480],{"class":59,"line":150},[57,138477,51982],{"class":140},[57,138479,51808],{"class":51497},[57,138481,51504],{"class":140},[365,138483,138485],{"id":138484},"_154-项目公共部分制作","15.4 项目公共部分制作",[394,138487,138489],{"id":138488},"_1541-常用模块类命名","15.4.1 常用模块类命名",[44,138491],{"style":126605,"src":138492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[394,138494,138496],{"id":138495},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,138498,138499],{},"布局思路：",[1422,138501,138502,138505,138508,138530,138563],{},[380,138503,138504],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[380,138506,138507],{},"里面包含版心的盒子",[380,138509,138510,138511],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1422,138512,138513,138521,138527],{},[380,138514,138515,138516,21772,138518,138520],{},"1 号盒子 里面包含一个",[28,138517,1422],{},[28,138519,1422],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[380,138522,138523,138524,138526],{},"里面的内容是水平排列，所以需要给",[28,138525,380],{},"设置浮动",[380,138528,138529],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[380,138531,138532,138533],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1422,138534,138535,138549,138554],{},[380,138536,138537,138538,21772,138540,138542,138543,138545,138546,138548],{},"2 号盒子 里面包含一个",[28,138539,1422],{},[28,138541,1422],{},"包裹",[28,138544,380],{},"，中间的",[28,138547,1337],{},"可以用样式去设置，也可以用字符 |",[380,138550,138551,138552,138526],{},"里面内容水平排列，给",[28,138553,380],{},[380,138555,138556,138557,138559,138560,138562],{},"找到里面所有偶数的 ",[28,138558,380],{}," 设置样式（偶数的 ",[28,138561,380],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[380,138564,138565,138566],{},"需要用到字体图标",[1422,138567,138568,138574,138577,138580,138583],{},[380,138569,138570,138571],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[28,138572,138573],{},"arrow-icon",[380,138575,138576],{},"先要引入字体图片的资源",[380,138578,138579],{},"在样式里面利用 font-face 来进行声明",[380,138581,138582],{},"在伪元素的 content属性设置 图标的编码",[380,138584,138585],{},"给伪元素设置font-family属性",[14,138587,138588],{},"结构实例代码：",[49,138590,138592],{"className":126749,"code":138591,"language":126751,"meta":46,"style":46},"div::before {\n  content: \"\";\n  display: block;\n}\n",[28,138593,138594,138602,138612,138622],{"__ignoreMap":46},[57,138595,138596,138598,138600],{"class":59,"line":60},[57,138597,51808],{"class":51497},[57,138599,137750],{"class":70},[57,138601,15844],{"class":140},[57,138603,138604,138606,138608,138610],{"class":59,"line":67},[57,138605,137757],{"class":81},[57,138607,51634],{"class":140},[57,138609,7925],{"class":74},[57,138611,1576],{"class":140},[57,138613,138614,138616,138618,138620],{"class":59,"line":144},[57,138615,128365],{"class":81},[57,138617,51634],{"class":140},[57,138619,61066],{"class":81},[57,138621,1576],{"class":140},[57,138623,138624],{"class":59,"line":150},[57,138625,1847],{"class":140},[14,138627,138628],{},"样式实例代码：",[49,138630,138631],{"className":126749,"code":138591,"language":126751,"meta":46,"style":46},[28,138632,138633,138641,138651,138661],{"__ignoreMap":46},[57,138634,138635,138637,138639],{"class":59,"line":60},[57,138636,51808],{"class":51497},[57,138638,137750],{"class":70},[57,138640,15844],{"class":140},[57,138642,138643,138645,138647,138649],{"class":59,"line":67},[57,138644,137757],{"class":81},[57,138646,51634],{"class":140},[57,138648,7925],{"class":74},[57,138650,1576],{"class":140},[57,138652,138653,138655,138657,138659],{"class":59,"line":144},[57,138654,128365],{"class":81},[57,138656,51634],{"class":140},[57,138658,61066],{"class":81},[57,138660,1576],{"class":140},[57,138662,138663],{"class":59,"line":150},[57,138664,1847],{"class":140},[394,138666,138668],{"id":138667},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1422,138670,138671],{},[380,138672,138673],{},"header 盒子必须要有高度",[14,138675,138676,138677,138679,138680],{},"1 号盒子是 ",[28,138678,131761],{}," 标志定位，在正常开发过程中， ",[33,138681,138682,138683,138686],{},"logo的布局其实是有讲究的，需要进行 ",[28,138684,138685],{},"logoSEO","的优化 （★★★）",[1422,138688,138689,138697,138705,138732],{},[380,138690,138691,138693,138694,138696],{},[28,138692,131761],{}," 里面首先放一个 ",[28,138695,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[380,138698,138699,138701,138702,138704],{},[28,138700,10],{}," 里面再放一个链接，可以返回首页的，把 ",[28,138703,131761],{}," 的背景图片给链接即可",[380,138706,138707,138708],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1422,138709,138710,138725],{},[380,138711,138712,138713,138716,138717,138720,138721,138724],{},"方法1：",[28,138714,138715],{},"text-indent"," 移到盒子外面（",[28,138718,138719],{},"text-indent: -9999px",") ，然后 ",[28,138722,138723],{},"overflow:hidden"," ，淘宝的做法",[380,138726,138727,138728,138731],{},"方法2：直接给 ",[28,138729,138730],{},"font-size: 0;"," 就看不到文字了，京东的做法",[380,138733,138734,138735,138737,138738,138740],{},"最后给链接一个 ",[28,138736,51604],{}," 属性，这样鼠标放到 ",[28,138739,131761],{}," 上就可以看到提示文字了",[14,138742,138588],{},[49,138744,138745],{"className":127496,"code":131982,"language":127498,"meta":46,"style":46},[28,138746,138747],{"__ignoreMap":46},[57,138748,138749,138751,138753,138755,138757,138759,138761,138763,138765,138767,138769],{"class":59,"line":60},[57,138750,1326],{"class":140},[57,138752,18],{"class":51497},[57,138754,61254],{"class":70},[57,138756,156],{"class":140},[57,138758,131997],{"class":74},[57,138760,132000],{"class":70},[57,138762,156],{"class":140},[57,138764,132005],{"class":74},[57,138766,132008],{"class":140},[57,138768,18],{"class":51497},[57,138770,51504],{"class":140},[14,138772,138628],{},[49,138774,138775],{"className":127496,"code":131982,"language":127498,"meta":46,"style":46},[28,138776,138777],{"__ignoreMap":46},[57,138778,138779,138781,138783,138785,138787,138789,138791,138793,138795,138797,138799],{"class":59,"line":60},[57,138780,1326],{"class":140},[57,138782,18],{"class":51497},[57,138784,61254],{"class":70},[57,138786,156],{"class":140},[57,138788,131997],{"class":74},[57,138790,132000],{"class":70},[57,138792,156],{"class":140},[57,138794,132005],{"class":74},[57,138796,132008],{"class":140},[57,138798,18],{"class":51497},[57,138800,51504],{"class":140},[14,138802,138803,138804,138806],{},"2 号盒子是 ",[28,138805,131774],{}," 搜索模块定位",[1422,138808,138809,138812,138815,138818],{},[380,138810,138811],{},"search盒子利用定位的方式放在对应的位置",[380,138813,138814],{},"search盒子设置绝对定位，header盒子设置相对定位",[380,138816,138817],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[380,138819,138820],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,138822,138588],{},[49,138824,138825],{"className":126749,"code":132069,"language":126751,"meta":46,"style":46},[28,138826,138827,138849,138853,138863],{"__ignoreMap":46},[57,138828,138829,138831,138833,138835,138837,138839,138841,138843,138845,138847],{"class":59,"line":60},[57,138830,51808],{"class":51497},[57,138832,12708],{"class":140},[57,138834,14],{"class":51497},[57,138836,12708],{"class":140},[57,138838,10],{"class":51497},[57,138840,12708],{"class":140},[57,138842,1422],{"class":51497},[57,138844,12708],{"class":140},[57,138846,380],{"class":51497},[57,138848,15844],{"class":140},[57,138850,138851],{"class":59,"line":67},[57,138852,132098],{"class":63},[57,138854,138855,138857,138859,138861],{"class":59,"line":144},[57,138856,128365],{"class":81},[57,138858,51634],{"class":140},[57,138860,61066],{"class":81},[57,138862,1576],{"class":140},[57,138864,138865],{"class":59,"line":150},[57,138866,1847],{"class":140},[14,138868,138628],{},[49,138870,138871],{"className":126749,"code":132069,"language":126751,"meta":46,"style":46},[28,138872,138873,138895,138899,138909],{"__ignoreMap":46},[57,138874,138875,138877,138879,138881,138883,138885,138887,138889,138891,138893],{"class":59,"line":60},[57,138876,51808],{"class":51497},[57,138878,12708],{"class":140},[57,138880,14],{"class":51497},[57,138882,12708],{"class":140},[57,138884,10],{"class":51497},[57,138886,12708],{"class":140},[57,138888,1422],{"class":51497},[57,138890,12708],{"class":140},[57,138892,380],{"class":51497},[57,138894,15844],{"class":140},[57,138896,138897],{"class":59,"line":67},[57,138898,132098],{"class":63},[57,138900,138901,138903,138905,138907],{"class":59,"line":144},[57,138902,128365],{"class":81},[57,138904,51634],{"class":140},[57,138906,61066],{"class":81},[57,138908,1576],{"class":140},[57,138910,138911],{"class":59,"line":150},[57,138912,1847],{"class":140},[14,138914,138915],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,138917,138918,138919,138922],{},"3 号盒子是 ",[28,138920,138921],{},"hotwords"," 热词模块定位",[1422,138924,138925,138928,138931],{},[380,138926,138927],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[380,138929,138930],{},"给里面所有的a标签设置 左右10px的外边距",[380,138932,138933],{},"给第一个a标签设置文字变红色（#c81623）",[14,138935,138588],{},[49,138937,138939],{"className":126749,"code":138938,"language":126751,"meta":46,"style":46},"div {\n  margin: 0 auto;\n}\n",[28,138940,138941,138947,138959],{"__ignoreMap":46},[57,138942,138943,138945],{"class":59,"line":60},[57,138944,51808],{"class":51497},[57,138946,15844],{"class":140},[57,138948,138949,138951,138953,138955,138957],{"class":59,"line":67},[57,138950,70667],{"class":81},[57,138952,51634],{"class":140},[57,138954,226],{"class":81},[57,138956,51753],{"class":81},[57,138958,1576],{"class":140},[57,138960,138961],{"class":59,"line":144},[57,138962,1847],{"class":140},[14,138964,138628],{},[49,138966,138967],{"className":126749,"code":138938,"language":126751,"meta":46,"style":46},[28,138968,138969,138975,138987],{"__ignoreMap":46},[57,138970,138971,138973],{"class":59,"line":60},[57,138972,51808],{"class":51497},[57,138974,15844],{"class":140},[57,138976,138977,138979,138981,138983,138985],{"class":59,"line":67},[57,138978,70667],{"class":81},[57,138980,51634],{"class":140},[57,138982,226],{"class":81},[57,138984,51753],{"class":81},[57,138986,1576],{"class":140},[57,138988,138989],{"class":59,"line":144},[57,138990,1847],{"class":140},[14,138992,138993,138994,138997],{},"4 号盒子是 ",[28,138995,138996],{},"shopcar"," 购物车模块",[1422,138999,139000,139005,139008,139011],{},[380,139001,123532,139002,139004],{},[28,139003,138996],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[380,139006,139007],{},"count 统计部分用绝对定位做",[380,139009,139010],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[380,139012,139013],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,139015,138588],{},[49,139017,139018],{"className":126749,"code":132181,"language":126751,"meta":46,"style":46},[28,139019,139020,139024,139038,139042,139056,139060,139074,139078,139092,139096],{"__ignoreMap":46},[57,139021,139022],{"class":59,"line":60},[57,139023,132188],{"class":63},[57,139025,139026,139028,139030,139032,139034,139036],{"class":59,"line":67},[57,139027,132193],{"class":70},[57,139029,80004],{"class":140},[57,139031,129109],{"class":81},[57,139033,51634],{"class":140},[57,139035,132202],{"class":81},[57,139037,129679],{"class":140},[57,139039,139040],{"class":59,"line":144},[57,139041,132209],{"class":63},[57,139043,139044,139046,139048,139050,139052,139054],{"class":59,"line":150},[57,139045,132214],{"class":70},[57,139047,80004],{"class":140},[57,139049,129109],{"class":81},[57,139051,51634],{"class":140},[57,139053,54961],{"class":81},[57,139055,129679],{"class":140},[57,139057,139058],{"class":59,"line":162},[57,139059,132229],{"class":63},[57,139061,139062,139064,139066,139068,139070,139072],{"class":59,"line":180},[57,139063,132234],{"class":70},[57,139065,80004],{"class":140},[57,139067,129109],{"class":81},[57,139069,51634],{"class":140},[57,139071,55028],{"class":81},[57,139073,129679],{"class":140},[57,139075,139076],{"class":59,"line":186},[57,139077,132249],{"class":63},[57,139079,139080,139082,139084,139086,139088,139090],{"class":59,"line":197},[57,139081,132254],{"class":70},[57,139083,80004],{"class":140},[57,139085,129109],{"class":81},[57,139087,51634],{"class":140},[57,139089,86430],{"class":81},[57,139091,129679],{"class":140},[57,139093,139094],{"class":59,"line":241},[57,139095,132269],{"class":63},[57,139097,139098,139100,139102,139104,139106,139108],{"class":59,"line":249},[57,139099,132274],{"class":70},[57,139101,80004],{"class":140},[57,139103,129109],{"class":81},[57,139105,51634],{"class":140},[57,139107,132283],{"class":81},[57,139109,129679],{"class":140},[14,139111,138628],{},[49,139113,139114],{"className":126749,"code":132181,"language":126751,"meta":46,"style":46},[28,139115,139116,139120,139134,139138,139152,139156,139170,139174,139188,139192],{"__ignoreMap":46},[57,139117,139118],{"class":59,"line":60},[57,139119,132188],{"class":63},[57,139121,139122,139124,139126,139128,139130,139132],{"class":59,"line":67},[57,139123,132193],{"class":70},[57,139125,80004],{"class":140},[57,139127,129109],{"class":81},[57,139129,51634],{"class":140},[57,139131,132202],{"class":81},[57,139133,129679],{"class":140},[57,139135,139136],{"class":59,"line":144},[57,139137,132209],{"class":63},[57,139139,139140,139142,139144,139146,139148,139150],{"class":59,"line":150},[57,139141,132214],{"class":70},[57,139143,80004],{"class":140},[57,139145,129109],{"class":81},[57,139147,51634],{"class":140},[57,139149,54961],{"class":81},[57,139151,129679],{"class":140},[57,139153,139154],{"class":59,"line":162},[57,139155,132229],{"class":63},[57,139157,139158,139160,139162,139164,139166,139168],{"class":59,"line":180},[57,139159,132234],{"class":70},[57,139161,80004],{"class":140},[57,139163,129109],{"class":81},[57,139165,51634],{"class":140},[57,139167,55028],{"class":81},[57,139169,129679],{"class":140},[57,139171,139172],{"class":59,"line":186},[57,139173,132249],{"class":63},[57,139175,139176,139178,139180,139182,139184,139186],{"class":59,"line":197},[57,139177,132254],{"class":70},[57,139179,80004],{"class":140},[57,139181,129109],{"class":81},[57,139183,51634],{"class":140},[57,139185,86430],{"class":81},[57,139187,129679],{"class":140},[57,139189,139190],{"class":59,"line":241},[57,139191,132269],{"class":63},[57,139193,139194,139196,139198,139200,139202,139204],{"class":59,"line":249},[57,139195,132274],{"class":70},[57,139197,80004],{"class":140},[57,139199,129109],{"class":81},[57,139201,51634],{"class":140},[57,139203,132283],{"class":81},[57,139205,129679],{"class":140},[394,139207,139209,139210,139212],{"id":139208},"_1544-nav导航模块制作","15.4.4 ",[28,139211,53910],{},"导航模块制作",[44,139214],{"style":126605,"src":139215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,139217,139218,139220],{},[28,139219,53910],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,139222,139223,139224],{},"1 号盒子左侧浮动，",[28,139225,139226],{},"dropdown",[1422,139228,139229,139239,139247,139253,139261,139271,139279,139290],{},[380,139230,139231,139232,101215,139235,139238],{},"1号盒子有讲究，根据相关性 里面包含 ",[28,139233,139234],{},".dt",[28,139236,139237],{},".dd"," 两个盒子",[380,139240,139241,139243,139244,139246],{},[28,139242,139234],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[28,139245,139237],{}," 挤到下面去了",[380,139248,139249,139250,139252],{},"给 ",[28,139251,139237],{}," 盒子设置宽度 和 高度，以及背景颜色",[380,139254,139249,139255,139257,139258,120434],{},[28,139256,139237],{}," 盒子里面定义 无序列表 （",[28,139259,139260],{},"ul > li > a",[380,139262,139263,139264,139266,139267,139270],{},"每个 ",[28,139265,380],{}," 都有一个高度（",[28,139268,139269],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[380,139272,139249,139273,139275,139276,120434],{},[28,139274,380],{}," 里面的a设置文字大小（",[28,139277,139278],{},"14px",[380,139280,139249,139281,139283,139284,139286,139287,139289],{},[28,139282,380],{}," 设置 ",[28,139285,127910],{},"，当鼠标移入的时候，让",[28,139288,380],{},"的背景变成白色，让里面的文字变成红色",[380,139291,139292,139294,139295,139297,139298,139300],{},[28,139293,380],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[28,139296,380],{},"的右侧，那么给",[28,139299,380],{},"设置相对定位",[14,139302,139303],{},"一定要注意相关性",[14,139305,138588],{},[49,139307,139308],{"className":126749,"code":138591,"language":126751,"meta":46,"style":46},[28,139309,139310,139318,139328,139338],{"__ignoreMap":46},[57,139311,139312,139314,139316],{"class":59,"line":60},[57,139313,51808],{"class":51497},[57,139315,137750],{"class":70},[57,139317,15844],{"class":140},[57,139319,139320,139322,139324,139326],{"class":59,"line":67},[57,139321,137757],{"class":81},[57,139323,51634],{"class":140},[57,139325,7925],{"class":74},[57,139327,1576],{"class":140},[57,139329,139330,139332,139334,139336],{"class":59,"line":144},[57,139331,128365],{"class":81},[57,139333,51634],{"class":140},[57,139335,61066],{"class":81},[57,139337,1576],{"class":140},[57,139339,139340],{"class":59,"line":150},[57,139341,1847],{"class":140},[14,139343,138628],{},[49,139345,139346],{"className":126749,"code":138591,"language":126751,"meta":46,"style":46},[28,139347,139348,139356,139366,139376],{"__ignoreMap":46},[57,139349,139350,139352,139354],{"class":59,"line":60},[57,139351,51808],{"class":51497},[57,139353,137750],{"class":70},[57,139355,15844],{"class":140},[57,139357,139358,139360,139362,139364],{"class":59,"line":67},[57,139359,137757],{"class":81},[57,139361,51634],{"class":140},[57,139363,7925],{"class":74},[57,139365,1576],{"class":140},[57,139367,139368,139370,139372,139374],{"class":59,"line":144},[57,139369,128365],{"class":81},[57,139371,51634],{"class":140},[57,139373,61066],{"class":81},[57,139375,1576],{"class":140},[57,139377,139378],{"class":59,"line":150},[57,139379,1847],{"class":140},[14,139381,139382],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,139384,139385,139386,139389],{},"2 号盒子左侧浮动，",[28,139387,139388],{},"navitems"," 导航栏组",[1422,139391,139392,139397,139406],{},[380,139393,139394,139395],{},"里面结构是 ",[28,139396,139260],{},[380,139398,139399,139400,139402,139403,139405],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[28,139401,18],{},"左右的",[28,139404,31080],{},"把两侧撑开",[380,139407,139408],{},"让文字垂直居中（行高等于高度）",[44,139410],{"style":126605,"src":139411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,139413,139414],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,139416,138588],{},[49,139418,139420],{"className":126749,"code":139419,"language":126751,"meta":46,"style":46},".box {\n  float: left;\n}\n",[28,139421,139422,139428,139438],{"__ignoreMap":46},[57,139423,139424,139426],{"class":59,"line":60},[57,139425,130597],{"class":70},[57,139427,15844],{"class":140},[57,139429,139430,139432,139434,139436],{"class":59,"line":67},[57,139431,131229],{"class":81},[57,139433,51634],{"class":140},[57,139435,24008],{"class":81},[57,139437,1576],{"class":140},[57,139439,139440],{"class":59,"line":144},[57,139441,1847],{"class":140},[14,139443,138628],{},[49,139445,139446],{"className":126749,"code":139419,"language":126751,"meta":46,"style":46},[28,139447,139448,139454,139464],{"__ignoreMap":46},[57,139449,139450,139452],{"class":59,"line":60},[57,139451,130597],{"class":70},[57,139453,15844],{"class":140},[57,139455,139456,139458,139460,139462],{"class":59,"line":67},[57,139457,131229],{"class":81},[57,139459,51634],{"class":140},[57,139461,24008],{"class":81},[57,139463,1576],{"class":140},[57,139465,139466],{"class":59,"line":144},[57,139467,1847],{"class":140},[14,139469,139470],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[44,139472],{"style":126605,"src":139473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[49,139475,139476],{"className":126749,"code":130906,"language":126751,"meta":46,"style":46},[28,139477,139478,139484,139500],{"__ignoreMap":46},[57,139479,139480,139482],{"class":59,"line":60},[57,139481,51808],{"class":51497},[57,139483,15844],{"class":140},[57,139485,139486,139488,139490,139492,139494,139496,139498],{"class":59,"line":67},[57,139487,71093],{"class":81},[57,139489,51634],{"class":140},[57,139491,635],{"class":81},[57,139493,51689],{"class":136},[57,139495,51718],{"class":81},[57,139497,130141],{"class":81},[57,139499,1576],{"class":140},[57,139501,139502],{"class":59,"line":144},[57,139503,1847],{"class":140},[394,139505,139507],{"id":139506},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[44,139509],{"style":126605,"src":139510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1422,139512,139513,139518,139523],{},[380,139514,139515,139517],{},[28,139516,131952],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[380,139519,139520,139522],{},[28,139521,131952],{}," 里面有一个大的版心",[380,139524,139525,139526,139529,139530],{},"版心里面包含 1 号盒子，",[28,139527,139528],{},"mod_service"," 是服务模块，mod 是模块的意思",[1422,139531,139532,139537,139550,139566,139571],{},[380,139533,139249,139534,139536],{},[28,139535,139528],{}," 设置高度（80px）和下边框",[380,139538,139539,139540,139543,139544,139546,139547,139549],{},"在里面定义 ",[28,139541,139542],{},"ul > li"," ,每个",[28,139545,380],{}," 宽度是300px 高度是 50px，给每个",[28,139548,380],{},"设置35px的左内边距",[380,139551,139552,139553,139555,139556,139558,139559,139561,139562,18682,139564,120434],{},"在每个",[28,139554,380],{},"里面，放一个 ",[28,139557,23182],{},"（里面放图标），一个",[28,139560,51808],{},"（里面放",[28,139563,51808],{},[28,139565,14],{},[380,139567,139249,139568,139570],{},[28,139569,23182],{},"设置浮动，让h5与这个div左右排列",[380,139572,139573],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,139575,138588],{},[49,139577,139579],{"className":126749,"code":139578,"language":126751,"meta":46,"style":46},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[28,139580,139581,139587,139599,139611,139638],{"__ignoreMap":46},[57,139582,139583,139585],{"class":59,"line":60},[57,139584,134506],{"class":70},[57,139586,15844],{"class":140},[57,139588,139589,139591,139593,139595,139597],{"class":59,"line":67},[57,139590,70765],{"class":81},[57,139592,51634],{"class":140},[57,139594,1116],{"class":81},[57,139596,51689],{"class":136},[57,139598,1576],{"class":140},[57,139600,139601,139603,139605,139607,139609],{"class":59,"line":144},[57,139602,70985],{"class":81},[57,139604,51634],{"class":140},[57,139606,1116],{"class":81},[57,139608,51689],{"class":136},[57,139610,1576],{"class":140},[57,139612,139613,139615,139617,139619,139621,139623,139625,139627,139630,139632,139634,139636],{"class":59,"line":150},[57,139614,70808],{"class":81},[57,139616,51634],{"class":140},[57,139618,61923],{"class":81},[57,139620,168],{"class":140},[57,139622,134545],{"class":5489},[57,139624,229],{"class":140},[57,139626,61933],{"class":81},[57,139628,139629],{"class":81}," -10",[57,139631,51689],{"class":136},[57,139633,134564],{"class":81},[57,139635,51689],{"class":136},[57,139637,1576],{"class":140},[57,139639,139640],{"class":59,"line":162},[57,139641,1847],{"class":140},[14,139643,138628],{},[49,139645,139646],{"className":126749,"code":139578,"language":126751,"meta":46,"style":46},[28,139647,139648,139654,139666,139678,139704],{"__ignoreMap":46},[57,139649,139650,139652],{"class":59,"line":60},[57,139651,134506],{"class":70},[57,139653,15844],{"class":140},[57,139655,139656,139658,139660,139662,139664],{"class":59,"line":67},[57,139657,70765],{"class":81},[57,139659,51634],{"class":140},[57,139661,1116],{"class":81},[57,139663,51689],{"class":136},[57,139665,1576],{"class":140},[57,139667,139668,139670,139672,139674,139676],{"class":59,"line":144},[57,139669,70985],{"class":81},[57,139671,51634],{"class":140},[57,139673,1116],{"class":81},[57,139675,51689],{"class":136},[57,139677,1576],{"class":140},[57,139679,139680,139682,139684,139686,139688,139690,139692,139694,139696,139698,139700,139702],{"class":59,"line":150},[57,139681,70808],{"class":81},[57,139683,51634],{"class":140},[57,139685,61923],{"class":81},[57,139687,168],{"class":140},[57,139689,134545],{"class":5489},[57,139691,229],{"class":140},[57,139693,61933],{"class":81},[57,139695,139629],{"class":81},[57,139697,51689],{"class":136},[57,139699,134564],{"class":81},[57,139701,51689],{"class":136},[57,139703,1576],{"class":140},[57,139705,139706],{"class":59,"line":162},[57,139707,1847],{"class":140},[14,139709,139710],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1422,139712,139713,139716,139722,139728,139740],{},[380,139714,139715],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[380,139717,139718,139719,120434],{},"里面的布局利用 自定义列表来实现（",[28,139720,139721],{},"dl > dt + dd",[380,139723,139249,139724,139727],{},[28,139725,139726],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[380,139729,139249,139730,139733,139734,18682,139736,139739],{},[28,139731,139732],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[28,139735,139732],{},[28,139737,139738],{},"dd","之间有些距离",[380,139741,139742],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,139744,138588],{},[49,139746,139747],{"className":126749,"code":138938,"language":126751,"meta":46,"style":46},[28,139748,139749,139755,139767],{"__ignoreMap":46},[57,139750,139751,139753],{"class":59,"line":60},[57,139752,51808],{"class":51497},[57,139754,15844],{"class":140},[57,139756,139757,139759,139761,139763,139765],{"class":59,"line":67},[57,139758,70667],{"class":81},[57,139760,51634],{"class":140},[57,139762,226],{"class":81},[57,139764,51753],{"class":81},[57,139766,1576],{"class":140},[57,139768,139769],{"class":59,"line":144},[57,139770,1847],{"class":140},[14,139772,138628],{},[49,139774,139775],{"className":126749,"code":138938,"language":126751,"meta":46,"style":46},[28,139776,139777,139783,139795],{"__ignoreMap":46},[57,139778,139779,139781],{"class":59,"line":60},[57,139780,51808],{"class":51497},[57,139782,15844],{"class":140},[57,139784,139785,139787,139789,139791,139793],{"class":59,"line":67},[57,139786,70667],{"class":81},[57,139788,51634],{"class":140},[57,139790,226],{"class":81},[57,139792,51753],{"class":81},[57,139794,1576],{"class":140},[57,139796,139797],{"class":59,"line":144},[57,139798,1847],{"class":140},[14,139800,139801],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1422,139803,139804,139813,139816,139827],{},[380,139805,139806,139807,139809,139810,139812],{},"分为上下两块，上面是 ",[28,139808,131969],{}," 友情链接，下面是 ",[28,139811,131962],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[380,139814,139815],{},"把内容分别复制到相应模块中",[380,139817,139249,139818,139820,139821,139823,139824,139826],{},[28,139819,131969],{}," 设置 15px 的下外边距，给",[28,139822,131969],{}," 里面 的 ",[28,139825,18],{}," 标签设置 左右 3px 的外边距",[380,139828,139829,139830,139832],{},"给",[28,139831,131962],{}," 设置 20px 的行高",[14,139834,138588],{},[49,139836,139837],{"className":126749,"code":138938,"language":126751,"meta":46,"style":46},[28,139838,139839,139845,139857],{"__ignoreMap":46},[57,139840,139841,139843],{"class":59,"line":60},[57,139842,51808],{"class":51497},[57,139844,15844],{"class":140},[57,139846,139847,139849,139851,139853,139855],{"class":59,"line":67},[57,139848,70667],{"class":81},[57,139850,51634],{"class":140},[57,139852,226],{"class":81},[57,139854,51753],{"class":81},[57,139856,1576],{"class":140},[57,139858,139859],{"class":59,"line":144},[57,139860,1847],{"class":140},[14,139862,138628],{},[49,139864,139865],{"className":126749,"code":138938,"language":126751,"meta":46,"style":46},[28,139866,139867,139873,139885],{"__ignoreMap":46},[57,139868,139869,139871],{"class":59,"line":60},[57,139870,51808],{"class":51497},[57,139872,15844],{"class":140},[57,139874,139875,139877,139879,139881,139883],{"class":59,"line":67},[57,139876,70667],{"class":81},[57,139878,51634],{"class":140},[57,139880,226],{"class":81},[57,139882,51753],{"class":81},[57,139884,1576],{"class":140},[57,139886,139887],{"class":59,"line":144},[57,139888,1847],{"class":140},[14,139890,139891],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[342,139893,139894],{},"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":46,"searchDepth":67,"depth":67,"links":139896},[139897,139898,139899,139906],{"id":138177,"depth":67,"text":138178},{"id":138196,"depth":67,"text":138197},{"id":138223,"depth":67,"text":138224,"children":139900},[139901,139902,139903,139904,139905],{"id":138227,"depth":144,"text":138228},{"id":138240,"depth":144,"text":138241},{"id":138264,"depth":144,"text":138265},{"id":138286,"depth":144,"text":138287},{"id":138358,"depth":144,"text":138359},{"id":138484,"depth":67,"text":138485,"children":139907},[139908,139909,139910,139911,139913],{"id":138488,"depth":144,"text":138489},{"id":138495,"depth":144,"text":138496},{"id":138667,"depth":144,"text":138668},{"id":139208,"depth":144,"text":139912},"15.4.4 nav导航模块制作",{"id":139506,"depth":144,"text":139507},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138169,"description":347},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139920,"title":139921,"body":139922,"description":347,"extension":348,"meta":142324,"navigation":350,"path":142325,"seo":142326,"stem":142327,"__hash__":142328},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139923,"toc":142301},[139924,139927,139931,139935,139947,139950,139953,139956,139967,139969,139993,139995,140019,140024,140027,140029,140065,140067,140103,140106,140111,140114,140117,140120,140150,140157,140160,140170,140172,140206,140209,140243,140249,140266,140268,140304,140306,140342,140347,140372,140374,140400,140402,140426,140433,140436,140500,140502,140544,140546,140586,140593,140598,140600,140630,140632,140662,140666,140669,140676,140688,140690,140716,140718,140742,140745,140747,140771,140777,140787,140789,140819,140821,140851,140858,140899,140901,140937,140939,140975,140979,140982,140985,140988,140994,140999,141002,141025,141028,141052,141055,141079,141084,141087,141090,141093,141096,141099,141173,141175,141205,141207,141237,141240,141243,141275,141279,141283,141297,141306,141309,141314,141316,141410,141412,141506,141529,141531,141555,141557,141581,141588,141591,141601,141603,141627,141632,141640,141642,141672,141677,141717,141719,141745,141747,141773,141777,141780,141785,141788,141792,141800,141807,141815,141817,141847,141849,141879,141887,141890,141893,141895,141925,141927,141957,141960,141965,141967,141991,141993,142017,142020,142105,142107,142131,142133,142157,142161,142163,142187,142189,142223,142227,142241,142244,142249,142252,142257,142260,142290,142298],[10,139925,139921],{"id":139926},"_16-品优购项目下篇-主体与页面开发",[365,139928,139930],{"id":139929},"_161-项目主体模块制作","16.1 项目主体模块制作",[394,139932,139934],{"id":139933},"_1611-首页制作","16.1.1 首页制作",[14,139936,139937,139939,139940,139942,139943,139946],{},[33,139938,102255],{}," 主体模块是 ",[33,139941,74255],{}," 里面专有的，注意需要新的样式文件 ",[33,139944,139945],{},"index.css，"," 就不要写在common.css中了",[44,139948],{"style":126605,"src":139949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[44,139951],{"style":126605,"src":139952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,139954,139955],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1422,139957,139958,139961,139964],{},[380,139959,139960],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[380,139962,139963],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[380,139965,139966],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,139968,138588],{},[49,139970,139971],{"className":126749,"code":139419,"language":126751,"meta":46,"style":46},[28,139972,139973,139979,139989],{"__ignoreMap":46},[57,139974,139975,139977],{"class":59,"line":60},[57,139976,130597],{"class":70},[57,139978,15844],{"class":140},[57,139980,139981,139983,139985,139987],{"class":59,"line":67},[57,139982,131229],{"class":81},[57,139984,51634],{"class":140},[57,139986,24008],{"class":81},[57,139988,1576],{"class":140},[57,139990,139991],{"class":59,"line":144},[57,139992,1847],{"class":140},[14,139994,138628],{},[49,139996,139997],{"className":126749,"code":139419,"language":126751,"meta":46,"style":46},[28,139998,139999,140005,140015],{"__ignoreMap":46},[57,140000,140001,140003],{"class":59,"line":60},[57,140002,130597],{"class":70},[57,140004,15844],{"class":140},[57,140006,140007,140009,140011,140013],{"class":59,"line":67},[57,140008,131229],{"class":81},[57,140010,51634],{"class":140},[57,140012,24008],{"class":81},[57,140014,1576],{"class":140},[57,140016,140017],{"class":59,"line":144},[57,140018,1847],{"class":140},[377,140020,140021],{},[380,140022,140023],{},"左侧focus模块制作",[44,140025],{"style":126605,"src":140026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,140028,138588],{},[49,140030,140031],{"className":126749,"code":128072,"language":126751,"meta":46,"style":46},[28,140032,140033,140041,140051,140061],{"__ignoreMap":46},[57,140034,140035,140037,140039],{"class":59,"line":60},[57,140036,54018],{"class":51497},[57,140038,62097],{"class":70},[57,140040,15844],{"class":140},[57,140042,140043,140045,140047,140049],{"class":59,"line":67},[57,140044,128087],{"class":81},[57,140046,51634],{"class":140},[57,140048,55086],{"class":81},[57,140050,1576],{"class":140},[57,140052,140053,140055,140057,140059],{"class":59,"line":144},[57,140054,70995],{"class":81},[57,140056,51634],{"class":140},[57,140058,54934],{"class":81},[57,140060,1576],{"class":140},[57,140062,140063],{"class":59,"line":150},[57,140064,1847],{"class":140},[14,140066,138628],{},[49,140068,140069],{"className":126749,"code":128072,"language":126751,"meta":46,"style":46},[28,140070,140071,140079,140089,140099],{"__ignoreMap":46},[57,140072,140073,140075,140077],{"class":59,"line":60},[57,140074,54018],{"class":51497},[57,140076,62097],{"class":70},[57,140078,15844],{"class":140},[57,140080,140081,140083,140085,140087],{"class":59,"line":67},[57,140082,128087],{"class":81},[57,140084,51634],{"class":140},[57,140086,55086],{"class":81},[57,140088,1576],{"class":140},[57,140090,140091,140093,140095,140097],{"class":59,"line":144},[57,140092,70995],{"class":81},[57,140094,51634],{"class":140},[57,140096,54934],{"class":81},[57,140098,1576],{"class":140},[57,140100,140101],{"class":59,"line":150},[57,140102,1847],{"class":140},[14,140104,140105],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[377,140107,140108],{"start":67},[380,140109,140110],{},"右侧newsflash模块制作",[44,140112],{"style":126605,"src":140113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,140115,140116],{},"右侧的模块 分为上中下三个盒子",[14,140118,140119],{},"结构代码：",[49,140121,140122],{"className":127496,"code":134251,"language":127498,"meta":46,"style":46},[28,140123,140124],{"__ignoreMap":46},[57,140125,140126,140128,140130,140132,140134,140136,140138,140140,140142,140144,140146,140148],{"class":59,"line":60},[57,140127,1326],{"class":140},[57,140129,44],{"class":51497},[57,140131,55436],{"class":70},[57,140133,156],{"class":140},[57,140135,134266],{"class":74},[57,140137,55444],{"class":70},[57,140139,156],{"class":140},[57,140141,134273],{"class":74},[57,140143,134276],{"class":70},[57,140145,156],{"class":140},[57,140147,134281],{"class":74},[57,140149,51504],{"class":140},[14,140151,140152,140153,140156],{},"1 号盒子为 ",[28,140154,140155],{},"news"," 新闻模块 高度为 165px",[44,140158],{"style":126605,"src":140159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,140161,140162,140163,140166,140167],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[28,140164,140165],{},"news-hd","，下面是 ",[28,140168,140169],{},"news-bd",[14,140171,140119],{},[49,140173,140174],{"className":127496,"code":130853,"language":127498,"meta":46,"style":46},[28,140175,140176,140180,140194,140198],{"__ignoreMap":46},[57,140177,140178],{"class":59,"line":60},[57,140179,130860],{"class":63},[57,140181,140182,140184,140186,140188,140190,140192],{"class":59,"line":67},[57,140183,1326],{"class":140},[57,140185,51808],{"class":51497},[57,140187,53683],{"class":70},[57,140189,156],{"class":140},[57,140191,130873],{"class":74},[57,140193,51504],{"class":140},[57,140195,140196],{"class":59,"line":144},[57,140197,130880],{"class":140},[57,140199,140200,140202,140204],{"class":59,"line":150},[57,140201,51982],{"class":140},[57,140203,51808],{"class":51497},[57,140205,51504],{"class":140},[14,140207,140208],{},"样式代码：",[49,140210,140211],{"className":127496,"code":130853,"language":127498,"meta":46,"style":46},[28,140212,140213,140217,140231,140235],{"__ignoreMap":46},[57,140214,140215],{"class":59,"line":60},[57,140216,130860],{"class":63},[57,140218,140219,140221,140223,140225,140227,140229],{"class":59,"line":67},[57,140220,1326],{"class":140},[57,140222,51808],{"class":51497},[57,140224,53683],{"class":70},[57,140226,156],{"class":140},[57,140228,130873],{"class":74},[57,140230,51504],{"class":140},[57,140232,140233],{"class":59,"line":144},[57,140234,130880],{"class":140},[57,140236,140237,140239,140241],{"class":59,"line":150},[57,140238,51982],{"class":140},[57,140240,51808],{"class":51497},[57,140242,51504],{"class":140},[14,140244,140245,140246,140248],{},"上面是",[28,140247,140165],{},"，设置高度是 33px，设置下边框",[1422,140250,140251,140257],{},[380,140252,140253,140254,140256],{},"里面放一个",[28,140255,23182],{}," 标题",[380,140258,140259,140260,140262,140263,140265],{},"放一个a",[28,140261,102890],{},"，内容是 更多，然后让 ",[28,140264,18],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,140267,140119],{},[49,140269,140270],{"className":126749,"code":138591,"language":126751,"meta":46,"style":46},[28,140271,140272,140280,140290,140300],{"__ignoreMap":46},[57,140273,140274,140276,140278],{"class":59,"line":60},[57,140275,51808],{"class":51497},[57,140277,137750],{"class":70},[57,140279,15844],{"class":140},[57,140281,140282,140284,140286,140288],{"class":59,"line":67},[57,140283,137757],{"class":81},[57,140285,51634],{"class":140},[57,140287,7925],{"class":74},[57,140289,1576],{"class":140},[57,140291,140292,140294,140296,140298],{"class":59,"line":144},[57,140293,128365],{"class":81},[57,140295,51634],{"class":140},[57,140297,61066],{"class":81},[57,140299,1576],{"class":140},[57,140301,140302],{"class":59,"line":150},[57,140303,1847],{"class":140},[14,140305,140208],{},[49,140307,140308],{"className":126749,"code":138591,"language":126751,"meta":46,"style":46},[28,140309,140310,140318,140328,140338],{"__ignoreMap":46},[57,140311,140312,140314,140316],{"class":59,"line":60},[57,140313,51808],{"class":51497},[57,140315,137750],{"class":70},[57,140317,15844],{"class":140},[57,140319,140320,140322,140324,140326],{"class":59,"line":67},[57,140321,137757],{"class":81},[57,140323,51634],{"class":140},[57,140325,7925],{"class":74},[57,140327,1576],{"class":140},[57,140329,140330,140332,140334,140336],{"class":59,"line":144},[57,140331,128365],{"class":81},[57,140333,51634],{"class":140},[57,140335,61066],{"class":81},[57,140337,1576],{"class":140},[57,140339,140340],{"class":59,"line":150},[57,140341,1847],{"class":140},[14,140343,140344,140345],{},"下面是",[28,140346,140169],{},[1422,140348,140349,140357],{},[380,140350,140351,140352,101215,140354,140356],{},"里面包含 ",[28,140353,1422],{},[28,140355,380],{}," 还有链接",[380,140358,139829,140359,140361,140362,140364,140365,140368,140369],{},[28,140360,380],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[28,140363,131415],{}," 2.设置 ",[28,140366,140367],{},"white-space: nowrap;"," 3. 设置 ",[28,140370,140371],{},"text-overflow: ellipsis;",[14,140373,140119],{},[49,140375,140377],{"className":126749,"code":140376,"language":126751,"meta":46,"style":46},"div {\n  overflow: hidden;\n}\n",[28,140378,140379,140385,140396],{"__ignoreMap":46},[57,140380,140381,140383],{"class":59,"line":60},[57,140382,51808],{"class":51497},[57,140384,15844],{"class":140},[57,140386,140387,140390,140392,140394],{"class":59,"line":67},[57,140388,140389],{"class":81},"  overflow",[57,140391,51634],{"class":140},[57,140393,61911],{"class":81},[57,140395,1576],{"class":140},[57,140397,140398],{"class":59,"line":144},[57,140399,1847],{"class":140},[14,140401,140208],{},[49,140403,140404],{"className":126749,"code":140376,"language":126751,"meta":46,"style":46},[28,140405,140406,140412,140422],{"__ignoreMap":46},[57,140407,140408,140410],{"class":59,"line":60},[57,140409,51808],{"class":51497},[57,140411,15844],{"class":140},[57,140413,140414,140416,140418,140420],{"class":59,"line":67},[57,140415,140389],{"class":81},[57,140417,51634],{"class":140},[57,140419,61911],{"class":81},[57,140421,1576],{"class":140},[57,140423,140424],{"class":59,"line":144},[57,140425,1847],{"class":140},[14,140427,140428,140429,140432],{},"2 号盒子为 ",[28,140430,140431],{},"lifeservice"," 生活服务模块 高度为 209px",[44,140434],{"style":126605,"src":140435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1422,140437,140438,140441,140451,140475,140486],{},[380,140439,140440],{},"设置边框（左右下边框）",[380,140442,140443,140444,140447,140448,140450],{},"里面的内容 是 ",[28,140445,140446],{},"ul > 12*li","，给",[28,140449,380],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[380,140452,140453,140454],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1422,140455,140456,140461,140470],{},[380,140457,140458,140460],{},[28,140459,140431],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[380,140462,140463,140464,140466,140467,140469],{},"可以让 ",[28,140465,140431],{}," 里面的 ",[28,140468,1422],{}," 宽度为 252，就可以装的下 4 个 小 li",[380,140471,140472,140474],{},[28,140473,140431],{}," 盒子 overflow 隐藏多余的部分就可以了",[380,140476,116664,140477,140479,140480,140482,140483,140485],{},[28,140478,380],{}," 里面放一个 ",[28,140481,857],{},"（里面放图标），下面的文本用 ",[28,140484,14],{}," 标签包裹",[380,140487,139249,140488,140490,140491,140493,140494,139283,140496,140499],{},[28,140489,857],{}," 设置 24px宽和28px的高（注意 ",[28,140492,857],{}," 是行内元素， 转成行内块），给 ",[28,140495,380],{},[28,140497,140498],{},"text-align:center"," 让里面内容居中显示",[14,140501,140119],{},[49,140503,140505],{"className":126749,"code":140504,"language":126751,"meta":46,"style":46},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[28,140506,140507,140525,140530,140540],{"__ignoreMap":46},[57,140508,140509,140511,140513,140515,140517,140519,140521,140523],{"class":59,"line":60},[57,140510,57],{"class":51497},[57,140512,12708],{"class":140},[57,140514,18],{"class":51497},[57,140516,12708],{"class":140},[57,140518,23825],{"class":51497},[57,140520,12708],{"class":140},[57,140522,33],{"class":51497},[57,140524,15844],{"class":140},[57,140526,140527],{"class":59,"line":67},[57,140528,140529],{"class":63},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[57,140531,140532,140534,140536,140538],{"class":59,"line":144},[57,140533,128365],{"class":81},[57,140535,51634],{"class":140},[57,140537,128427],{"class":81},[57,140539,1576],{"class":140},[57,140541,140542],{"class":59,"line":150},[57,140543,1847],{"class":140},[14,140545,140208],{},[49,140547,140548],{"className":126749,"code":140504,"language":126751,"meta":46,"style":46},[28,140549,140550,140568,140572,140582],{"__ignoreMap":46},[57,140551,140552,140554,140556,140558,140560,140562,140564,140566],{"class":59,"line":60},[57,140553,57],{"class":51497},[57,140555,12708],{"class":140},[57,140557,18],{"class":51497},[57,140559,12708],{"class":140},[57,140561,23825],{"class":51497},[57,140563,12708],{"class":140},[57,140565,33],{"class":51497},[57,140567,15844],{"class":140},[57,140569,140570],{"class":59,"line":67},[57,140571,140529],{"class":63},[57,140573,140574,140576,140578,140580],{"class":59,"line":144},[57,140575,128365],{"class":81},[57,140577,51634],{"class":140},[57,140579,128427],{"class":81},[57,140581,1576],{"class":140},[57,140583,140584],{"class":59,"line":150},[57,140585,1847],{"class":140},[14,140587,140588,140589,140592],{},"3 号盒子为 ",[28,140590,140591],{},"bargain"," 特价商品",[1422,140594,140595],{},[380,140596,140597],{},"这个比较简单，直接插入一张图片即可",[14,140599,140119],{},[49,140601,140602],{"className":127496,"code":134251,"language":127498,"meta":46,"style":46},[28,140603,140604],{"__ignoreMap":46},[57,140605,140606,140608,140610,140612,140614,140616,140618,140620,140622,140624,140626,140628],{"class":59,"line":60},[57,140607,1326],{"class":140},[57,140609,44],{"class":51497},[57,140611,55436],{"class":70},[57,140613,156],{"class":140},[57,140615,134266],{"class":74},[57,140617,55444],{"class":70},[57,140619,156],{"class":140},[57,140621,134273],{"class":74},[57,140623,134276],{"class":70},[57,140625,156],{"class":140},[57,140627,134281],{"class":74},[57,140629,51504],{"class":140},[14,140631,140208],{},[49,140633,140634],{"className":127496,"code":134251,"language":127498,"meta":46,"style":46},[28,140635,140636],{"__ignoreMap":46},[57,140637,140638,140640,140642,140644,140646,140648,140650,140652,140654,140656,140658,140660],{"class":59,"line":60},[57,140639,1326],{"class":140},[57,140641,44],{"class":51497},[57,140643,55436],{"class":70},[57,140645,156],{"class":140},[57,140647,134266],{"class":74},[57,140649,55444],{"class":70},[57,140651,156],{"class":140},[57,140653,134273],{"class":74},[57,140655,134276],{"class":70},[57,140657,156],{"class":140},[57,140659,134281],{"class":74},[57,140661,51504],{"class":140},[394,140663,140665],{"id":140664},"_1612-推荐模块制作","16.1.2 推荐模块制作",[44,140667],{"style":126605,"src":140668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,140670,140671,140672,140675],{},"大盒子 ",[28,140673,140674],{},"recom"," 推荐模块 recommend",[1422,140677,140678],{},[380,140679,140680,140681,140683,140684,140687],{},"给这个 ",[28,140682,140674],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[28,140685,140686],{},"#ebebeb","），设置距离上边 12px",[14,140689,140119],{},[49,140691,140693],{"className":126749,"code":140692,"language":126751,"meta":46,"style":46},"div {\n  background-color: #f0f0f0;\n}\n",[28,140694,140695,140701,140712],{"__ignoreMap":46},[57,140696,140697,140699],{"class":59,"line":60},[57,140698,51808],{"class":51497},[57,140700,15844],{"class":140},[57,140702,140703,140705,140707,140710],{"class":59,"line":67},[57,140704,71075],{"class":81},[57,140706,51634],{"class":140},[57,140708,140709],{"class":81},"#f0f0f0",[57,140711,1576],{"class":140},[57,140713,140714],{"class":59,"line":144},[57,140715,1847],{"class":140},[14,140717,140208],{},[49,140719,140720],{"className":126749,"code":140692,"language":126751,"meta":46,"style":46},[28,140721,140722,140728,140738],{"__ignoreMap":46},[57,140723,140724,140726],{"class":59,"line":60},[57,140725,51808],{"class":51497},[57,140727,15844],{"class":140},[57,140729,140730,140732,140734,140736],{"class":59,"line":67},[57,140731,71075],{"class":81},[57,140733,51634],{"class":140},[57,140735,140709],{"class":81},[57,140737,1576],{"class":140},[57,140739,140740],{"class":59,"line":144},[57,140741,1847],{"class":140},[14,140743,140744],{},"里面包含 2 个盒子， 浮动即可",[14,140746,140119],{},[49,140748,140749],{"className":126749,"code":139419,"language":126751,"meta":46,"style":46},[28,140750,140751,140757,140767],{"__ignoreMap":46},[57,140752,140753,140755],{"class":59,"line":60},[57,140754,130597],{"class":70},[57,140756,15844],{"class":140},[57,140758,140759,140761,140763,140765],{"class":59,"line":67},[57,140760,131229],{"class":81},[57,140762,51634],{"class":140},[57,140764,24008],{"class":81},[57,140766,1576],{"class":140},[57,140768,140769],{"class":59,"line":144},[57,140770,1847],{"class":140},[14,140772,140773,140774],{},"1 号盒子 ",[28,140775,140776],{},"recom_hd",[1422,140778,140779,140782],{},[380,140780,140781],{},"设置宽度205px，高度163px",[380,140783,140253,140784,140786],{},[28,140785,44],{},"标签，插入图片即可",[14,140788,140119],{},[49,140790,140791],{"className":127496,"code":134251,"language":127498,"meta":46,"style":46},[28,140792,140793],{"__ignoreMap":46},[57,140794,140795,140797,140799,140801,140803,140805,140807,140809,140811,140813,140815,140817],{"class":59,"line":60},[57,140796,1326],{"class":140},[57,140798,44],{"class":51497},[57,140800,55436],{"class":70},[57,140802,156],{"class":140},[57,140804,134266],{"class":74},[57,140806,55444],{"class":70},[57,140808,156],{"class":140},[57,140810,134273],{"class":74},[57,140812,134276],{"class":70},[57,140814,156],{"class":140},[57,140816,134281],{"class":74},[57,140818,51504],{"class":140},[14,140820,140208],{},[49,140822,140823],{"className":127496,"code":134251,"language":127498,"meta":46,"style":46},[28,140824,140825],{"__ignoreMap":46},[57,140826,140827,140829,140831,140833,140835,140837,140839,140841,140843,140845,140847,140849],{"class":59,"line":60},[57,140828,1326],{"class":140},[57,140830,44],{"class":51497},[57,140832,55436],{"class":70},[57,140834,156],{"class":140},[57,140836,134266],{"class":74},[57,140838,55444],{"class":70},[57,140840,156],{"class":140},[57,140842,134273],{"class":74},[57,140844,134276],{"class":70},[57,140846,156],{"class":140},[57,140848,134281],{"class":74},[57,140850,51504],{"class":140},[14,140852,140853,140854,140857],{},"2 号盒子 ",[28,140855,140856],{},"recom_bd"," ，注意里面的小竖线",[1422,140859,140860,140871,140874,140879,140884],{},[380,140861,140862,140863,140865,140866,140868,140869],{},"右侧结构里面放 ",[28,140864,1422],{}," 包含 4个 ",[28,140867,380],{},"，每个li里面包含一个",[28,140870,44],{},[380,140872,140873],{},"直接利用切片工具把里面的内容当成一张图片",[380,140875,139249,140876,140878],{},[28,140877,380],{}," 设置浮动",[380,140880,139249,140881,140883],{},[28,140882,44],{}," 设置宽高，宽度 248px，高度 163px",[380,140885,140886,140887,140447,140890,140892,140893,140895,140896],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[28,140888,140889],{},"top 10px",[28,140891,380],{},"设置相对定位（注意，最后一个",[28,140894,380],{},"不用设置伪元素），可以利用 ",[28,140897,140898],{},"nth-child(-n+3){...}",[14,140900,140119],{},[49,140902,140903],{"className":126749,"code":138591,"language":126751,"meta":46,"style":46},[28,140904,140905,140913,140923,140933],{"__ignoreMap":46},[57,140906,140907,140909,140911],{"class":59,"line":60},[57,140908,51808],{"class":51497},[57,140910,137750],{"class":70},[57,140912,15844],{"class":140},[57,140914,140915,140917,140919,140921],{"class":59,"line":67},[57,140916,137757],{"class":81},[57,140918,51634],{"class":140},[57,140920,7925],{"class":74},[57,140922,1576],{"class":140},[57,140924,140925,140927,140929,140931],{"class":59,"line":144},[57,140926,128365],{"class":81},[57,140928,51634],{"class":140},[57,140930,61066],{"class":81},[57,140932,1576],{"class":140},[57,140934,140935],{"class":59,"line":150},[57,140936,1847],{"class":140},[14,140938,140208],{},[49,140940,140941],{"className":126749,"code":138591,"language":126751,"meta":46,"style":46},[28,140942,140943,140951,140961,140971],{"__ignoreMap":46},[57,140944,140945,140947,140949],{"class":59,"line":60},[57,140946,51808],{"class":51497},[57,140948,137750],{"class":70},[57,140950,15844],{"class":140},[57,140952,140953,140955,140957,140959],{"class":59,"line":67},[57,140954,137757],{"class":81},[57,140956,51634],{"class":140},[57,140958,7925],{"class":74},[57,140960,1576],{"class":140},[57,140962,140963,140965,140967,140969],{"class":59,"line":144},[57,140964,128365],{"class":81},[57,140966,51634],{"class":140},[57,140968,61066],{"class":81},[57,140970,1576],{"class":140},[57,140972,140973],{"class":59,"line":150},[57,140974,1847],{"class":140},[394,140976,140978],{"id":140977},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[44,140980],{"style":126605,"src":140981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,140983,140984],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,140986,140987],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,140989,140990,140993],{},[28,140991,140992],{},"box_hd"," 制作",[14,140995,140773,140996,140998],{},[28,140997,140992],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[44,141000],{"style":126605,"src":141001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1422,141003,141004,141009,141014,141017],{},[380,141005,141006,141008],{},[28,141007,140992],{}," 给 30px 的高度，2个像素的下边框",[380,141010,141011,141012],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[28,141013,139260],{},[380,141015,141016],{},"左侧盒左浮动，右侧盒子右浮动",[380,141018,141019,141021,141022,141024],{},[28,141020,18],{},"标签之间的距离用左右的",[28,141023,31080],{},"撑开即可",[14,141026,141027],{},"结构代码",[49,141029,141030],{"className":126749,"code":139419,"language":126751,"meta":46,"style":46},[28,141031,141032,141038,141048],{"__ignoreMap":46},[57,141033,141034,141036],{"class":59,"line":60},[57,141035,130597],{"class":70},[57,141037,15844],{"class":140},[57,141039,141040,141042,141044,141046],{"class":59,"line":67},[57,141041,131229],{"class":81},[57,141043,51634],{"class":140},[57,141045,24008],{"class":81},[57,141047,1576],{"class":140},[57,141049,141050],{"class":59,"line":144},[57,141051,1847],{"class":140},[14,141053,141054],{},"样式代码",[49,141056,141057],{"className":126749,"code":139419,"language":126751,"meta":46,"style":46},[28,141058,141059,141065,141075],{"__ignoreMap":46},[57,141060,141061,141063],{"class":59,"line":60},[57,141062,130597],{"class":70},[57,141064,15844],{"class":140},[57,141066,141067,141069,141071,141073],{"class":59,"line":67},[57,141068,131229],{"class":81},[57,141070,51634],{"class":140},[57,141072,24008],{"class":81},[57,141074,1576],{"class":140},[57,141076,141077],{"class":59,"line":144},[57,141078,1847],{"class":140},[14,141080,141081,140993],{},[28,141082,141083],{},"box_bd",[14,141085,141086],{},"2 号盒子 box_bd，不要给高度",[44,141088],{"style":126605,"src":141089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,141091,141092],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,141094,141095],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,141097,141098],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1422,141100,141101,141113,141129],{},[380,141102,141103,141105,141106,141109,141110,141112],{},[28,141104,141083],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[28,141107,141108],{},"tab_content","，在",[28,141111,141108],{}," 里面包裹tab选项卡对应的内容",[380,141114,141115,141116,141119,141120,141122,141123,141125,141126,141128],{},"内容被一个大盒子包裹（",[28,141117,141118],{},"tab_list_item","），里面是 ",[28,141121,1422],{}," 包裹 5个 ",[28,141124,380],{},"，每个",[28,141127,380],{},"设置对应的宽度，然后设置浮动",[380,141130,141131,141132,141134,141135,141137,141138],{},"而这5个",[28,141133,380],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[28,141136,380],{},"设置",[1422,141139,141140,141158,141161],{},[380,141141,141142,141143,141145,141146,141148,141149,141151,141152,141154,141155,141157],{},"第一个小 ",[28,141144,380],{}," 分为上下结构，上面是 ",[28,141147,1422],{}," 包裹 ",[28,141150,380],{}," ，",[28,141153,380],{},"里面包裹 ",[28,141156,18],{},"，下面插入一张图片",[380,141159,141160],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[380,141162,141163,141164,141166,141167,141169,141170,141172],{},"后面的小 ",[28,141165,380],{}," 里面先放一个",[28,141168,18],{},"标签，然后在",[28,141171,18],{},"标签里面插入图片即可",[14,141174,141027],{},[49,141176,141177],{"className":127496,"code":134251,"language":127498,"meta":46,"style":46},[28,141178,141179],{"__ignoreMap":46},[57,141180,141181,141183,141185,141187,141189,141191,141193,141195,141197,141199,141201,141203],{"class":59,"line":60},[57,141182,1326],{"class":140},[57,141184,44],{"class":51497},[57,141186,55436],{"class":70},[57,141188,156],{"class":140},[57,141190,134266],{"class":74},[57,141192,55444],{"class":70},[57,141194,156],{"class":140},[57,141196,134273],{"class":74},[57,141198,134276],{"class":70},[57,141200,156],{"class":140},[57,141202,134281],{"class":74},[57,141204,51504],{"class":140},[14,141206,141054],{},[49,141208,141209],{"className":127496,"code":134251,"language":127498,"meta":46,"style":46},[28,141210,141211],{"__ignoreMap":46},[57,141212,141213,141215,141217,141219,141221,141223,141225,141227,141229,141231,141233,141235],{"class":59,"line":60},[57,141214,1326],{"class":140},[57,141216,44],{"class":51497},[57,141218,55436],{"class":70},[57,141220,156],{"class":140},[57,141222,134266],{"class":74},[57,141224,55444],{"class":70},[57,141226,156],{"class":140},[57,141228,134273],{"class":74},[57,141230,134276],{"class":70},[57,141232,156],{"class":140},[57,141234,134281],{"class":74},[57,141236,51504],{"class":140},[14,141238,141239],{},"tab栏切换需求！！！！！！介绍：",[44,141241],{"style":126605,"src":141242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1422,141244,141245,141253,141259,141262],{},[380,141246,141247,141250,141251],{},[28,141248,141249],{},"tab","栏的布局是 ",[28,141252,139260],{},[380,141254,141255,141256,141258],{},"有多少个",[28,141257,141249],{},"选项卡，那么对应就有多少个内容",[380,141260,141261],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[380,141263,141264,141265,141268,141269,141271,141272,141274],{},"等后面我们学习了",[28,141266,141267],{},"js","之后，我们就会配合",[28,141270,141267],{},"来实现，",[28,141273,141249],{},"栏的切换",[365,141276,141278],{"id":141277},"_162-列表制作","16.2 列表制作",[394,141280,141282],{"id":141281},"_1621-准备工作","16.2.1 准备工作",[1422,141284,141285,141288,141291,141294],{},[380,141286,141287],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[380,141289,141290],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[380,141292,141293],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[380,141295,141296],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[394,141298,141300,141301,101215,141303,141305],{"id":141299},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[28,141302,131754],{},[28,141304,53910],{}," 修改",[44,141307],{"style":126605,"src":141308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1422,141310,141311],{},[380,141312,141313],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,141315,140119],{},[49,141317,141318],{"className":126749,"code":132181,"language":126751,"meta":46,"style":46},[28,141319,141320,141324,141338,141342,141356,141360,141374,141378,141392,141396],{"__ignoreMap":46},[57,141321,141322],{"class":59,"line":60},[57,141323,132188],{"class":63},[57,141325,141326,141328,141330,141332,141334,141336],{"class":59,"line":67},[57,141327,132193],{"class":70},[57,141329,80004],{"class":140},[57,141331,129109],{"class":81},[57,141333,51634],{"class":140},[57,141335,132202],{"class":81},[57,141337,129679],{"class":140},[57,141339,141340],{"class":59,"line":144},[57,141341,132209],{"class":63},[57,141343,141344,141346,141348,141350,141352,141354],{"class":59,"line":150},[57,141345,132214],{"class":70},[57,141347,80004],{"class":140},[57,141349,129109],{"class":81},[57,141351,51634],{"class":140},[57,141353,54961],{"class":81},[57,141355,129679],{"class":140},[57,141357,141358],{"class":59,"line":162},[57,141359,132229],{"class":63},[57,141361,141362,141364,141366,141368,141370,141372],{"class":59,"line":180},[57,141363,132234],{"class":70},[57,141365,80004],{"class":140},[57,141367,129109],{"class":81},[57,141369,51634],{"class":140},[57,141371,55028],{"class":81},[57,141373,129679],{"class":140},[57,141375,141376],{"class":59,"line":186},[57,141377,132249],{"class":63},[57,141379,141380,141382,141384,141386,141388,141390],{"class":59,"line":197},[57,141381,132254],{"class":70},[57,141383,80004],{"class":140},[57,141385,129109],{"class":81},[57,141387,51634],{"class":140},[57,141389,86430],{"class":81},[57,141391,129679],{"class":140},[57,141393,141394],{"class":59,"line":241},[57,141395,132269],{"class":63},[57,141397,141398,141400,141402,141404,141406,141408],{"class":59,"line":249},[57,141399,132274],{"class":70},[57,141401,80004],{"class":140},[57,141403,129109],{"class":81},[57,141405,51634],{"class":140},[57,141407,132283],{"class":81},[57,141409,129679],{"class":140},[14,141411,140208],{},[49,141413,141414],{"className":126749,"code":132181,"language":126751,"meta":46,"style":46},[28,141415,141416,141420,141434,141438,141452,141456,141470,141474,141488,141492],{"__ignoreMap":46},[57,141417,141418],{"class":59,"line":60},[57,141419,132188],{"class":63},[57,141421,141422,141424,141426,141428,141430,141432],{"class":59,"line":67},[57,141423,132193],{"class":70},[57,141425,80004],{"class":140},[57,141427,129109],{"class":81},[57,141429,51634],{"class":140},[57,141431,132202],{"class":81},[57,141433,129679],{"class":140},[57,141435,141436],{"class":59,"line":144},[57,141437,132209],{"class":63},[57,141439,141440,141442,141444,141446,141448,141450],{"class":59,"line":150},[57,141441,132214],{"class":70},[57,141443,80004],{"class":140},[57,141445,129109],{"class":81},[57,141447,51634],{"class":140},[57,141449,54961],{"class":81},[57,141451,129679],{"class":140},[57,141453,141454],{"class":59,"line":162},[57,141455,132229],{"class":63},[57,141457,141458,141460,141462,141464,141466,141468],{"class":59,"line":180},[57,141459,132234],{"class":70},[57,141461,80004],{"class":140},[57,141463,129109],{"class":81},[57,141465,51634],{"class":140},[57,141467,55028],{"class":81},[57,141469,129679],{"class":140},[57,141471,141472],{"class":59,"line":186},[57,141473,132249],{"class":63},[57,141475,141476,141478,141480,141482,141484,141486],{"class":59,"line":197},[57,141477,132254],{"class":70},[57,141479,80004],{"class":140},[57,141481,129109],{"class":81},[57,141483,51634],{"class":140},[57,141485,86430],{"class":81},[57,141487,129679],{"class":140},[57,141489,141490],{"class":59,"line":241},[57,141491,132269],{"class":63},[57,141493,141494,141496,141498,141500,141502,141504],{"class":59,"line":249},[57,141495,132274],{"class":70},[57,141497,80004],{"class":140},[57,141499,129109],{"class":81},[57,141501,51634],{"class":140},[57,141503,132283],{"class":81},[57,141505,129679],{"class":140},[1422,141507,141508,141519],{},[380,141509,141510,141511,141514,141515,101215,141517],{},"1 号盒子左侧浮动 ",[28,141512,141513],{},"sk_list"," 里面包含 ",[28,141516,1422],{},[28,141518,380],{},[380,141520,141521,141522,141514,141525,101215,141527],{},"2 号盒子左侧浮动 ",[28,141523,141524],{},"sk_con",[28,141526,1422],{},[28,141528,380],{},[14,141530,140119],{},[49,141532,141533],{"className":126749,"code":139419,"language":126751,"meta":46,"style":46},[28,141534,141535,141541,141551],{"__ignoreMap":46},[57,141536,141537,141539],{"class":59,"line":60},[57,141538,130597],{"class":70},[57,141540,15844],{"class":140},[57,141542,141543,141545,141547,141549],{"class":59,"line":67},[57,141544,131229],{"class":81},[57,141546,51634],{"class":140},[57,141548,24008],{"class":81},[57,141550,1576],{"class":140},[57,141552,141553],{"class":59,"line":144},[57,141554,1847],{"class":140},[14,141556,140208],{},[49,141558,141559],{"className":126749,"code":139419,"language":126751,"meta":46,"style":46},[28,141560,141561,141567,141577],{"__ignoreMap":46},[57,141562,141563,141565],{"class":59,"line":60},[57,141564,130597],{"class":70},[57,141566,15844],{"class":140},[57,141568,141569,141571,141573,141575],{"class":59,"line":67},[57,141570,131229],{"class":81},[57,141572,51634],{"class":140},[57,141574,24008],{"class":81},[57,141576,1576],{"class":140},[57,141578,141579],{"class":59,"line":144},[57,141580,1847],{"class":140},[394,141582,141584,141585],{"id":141583},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[28,141586,141587],{},"sk_container",[44,141589],{"style":126605,"src":141590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1422,141592,141593,141598],{},[380,141594,140773,141595,141597],{},[28,141596,141587],{}," 给宽度 1200，不要给高度",[380,141599,141600],{},"一定不要忘记清除浮动",[14,141602,140119],{},[49,141604,141605],{"className":126749,"code":139419,"language":126751,"meta":46,"style":46},[28,141606,141607,141613,141623],{"__ignoreMap":46},[57,141608,141609,141611],{"class":59,"line":60},[57,141610,130597],{"class":70},[57,141612,15844],{"class":140},[57,141614,141615,141617,141619,141621],{"class":59,"line":67},[57,141616,131229],{"class":81},[57,141618,51634],{"class":140},[57,141620,24008],{"class":81},[57,141622,1576],{"class":140},[57,141624,141625],{"class":59,"line":144},[57,141626,1847],{"class":140},[377,141628,141629],{},[380,141630,141631],{},"sk_hd制作",[1422,141633,141634],{},[380,141635,140853,141636,141639],{},[28,141637,141638],{},"sk_hd"," ，插入图片即可",[14,141641,140119],{},[49,141643,141644],{"className":127496,"code":134251,"language":127498,"meta":46,"style":46},[28,141645,141646],{"__ignoreMap":46},[57,141647,141648,141650,141652,141654,141656,141658,141660,141662,141664,141666,141668,141670],{"class":59,"line":60},[57,141649,1326],{"class":140},[57,141651,44],{"class":51497},[57,141653,55436],{"class":70},[57,141655,156],{"class":140},[57,141657,134266],{"class":74},[57,141659,55444],{"class":70},[57,141661,156],{"class":140},[57,141663,134273],{"class":74},[57,141665,134276],{"class":70},[57,141667,156],{"class":140},[57,141669,134281],{"class":74},[57,141671,51504],{"class":140},[377,141673,141674],{"start":67},[380,141675,141676],{},"sk_bd制作",[1422,141678,141679],{},[380,141680,141681,141682,141685,141686,101215,141688,141690],{},"3 号盒子 ",[28,141683,141684],{},"sk_bd"," ，里面包含很多的 ",[28,141687,1422],{},[28,141689,380],{},[1422,141691,141692,141701],{},[380,141693,141694,141695,141697,141698,141700],{},"当鼠标移入到 ",[28,141696,380],{}," 上面的时候显示红色的边框，在这里先给 ",[28,141699,380],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[380,141702,141703,141704,141706,141707,141709,141710,141713,141714,141716],{},"由于给每个 ",[28,141705,380],{}," 都设置了外边距，导致一行的最后一个 ",[28,141708,380],{}," 掉了下来，在这里我们利用 ",[28,141711,141712],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[28,141715,380],{},"，去掉外边距就好了",[14,141718,140119],{},[49,141720,141721],{"className":126749,"code":138938,"language":126751,"meta":46,"style":46},[28,141722,141723,141729,141741],{"__ignoreMap":46},[57,141724,141725,141727],{"class":59,"line":60},[57,141726,51808],{"class":51497},[57,141728,15844],{"class":140},[57,141730,141731,141733,141735,141737,141739],{"class":59,"line":67},[57,141732,70667],{"class":81},[57,141734,51634],{"class":140},[57,141736,226],{"class":81},[57,141738,51753],{"class":81},[57,141740,1576],{"class":140},[57,141742,141743],{"class":59,"line":144},[57,141744,1847],{"class":140},[14,141746,140208],{},[49,141748,141749],{"className":126749,"code":138938,"language":126751,"meta":46,"style":46},[28,141750,141751,141757,141769],{"__ignoreMap":46},[57,141752,141753,141755],{"class":59,"line":60},[57,141754,51808],{"class":51497},[57,141756,15844],{"class":140},[57,141758,141759,141761,141763,141765,141767],{"class":59,"line":67},[57,141760,70667],{"class":81},[57,141762,51634],{"class":140},[57,141764,226],{"class":81},[57,141766,51753],{"class":81},[57,141768,1576],{"class":140},[57,141770,141771],{"class":59,"line":144},[57,141772,1847],{"class":140},[365,141774,141776],{"id":141775},"_163-注册页面制作","16.3 注册页面制作",[44,141778],{"style":126605,"src":141779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,141781,141782,141784],{},[33,141783,9298],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[44,141786],{"style":126605,"src":141787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[394,141789,141791],{"id":141790},"_1631-准备工作","16.3.1 准备工作",[1422,141793,141794,141797],{},[380,141795,141796],{},"创建register.html，引入 base.css，引入favicon图标",[380,141798,141799],{},"创建register.css ，在html页面进行引入",[394,141801,141803,141804,141806],{"id":141802},"_1632-header-头部实现","16.3.2 ",[28,141805,131754],{}," 头部实现",[1422,141808,141809,141812],{},[380,141810,141811],{},"整个内容用 版心 进行包裹",[380,141813,141814],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,141816,140119],{},[49,141818,141819],{"className":127496,"code":134251,"language":127498,"meta":46,"style":46},[28,141820,141821],{"__ignoreMap":46},[57,141822,141823,141825,141827,141829,141831,141833,141835,141837,141839,141841,141843,141845],{"class":59,"line":60},[57,141824,1326],{"class":140},[57,141826,44],{"class":51497},[57,141828,55436],{"class":70},[57,141830,156],{"class":140},[57,141832,134266],{"class":74},[57,141834,55444],{"class":70},[57,141836,156],{"class":140},[57,141838,134273],{"class":74},[57,141840,134276],{"class":70},[57,141842,156],{"class":140},[57,141844,134281],{"class":74},[57,141846,51504],{"class":140},[14,141848,140208],{},[49,141850,141851],{"className":127496,"code":134251,"language":127498,"meta":46,"style":46},[28,141852,141853],{"__ignoreMap":46},[57,141854,141855,141857,141859,141861,141863,141865,141867,141869,141871,141873,141875,141877],{"class":59,"line":60},[57,141856,1326],{"class":140},[57,141858,44],{"class":51497},[57,141860,55436],{"class":70},[57,141862,156],{"class":140},[57,141864,134266],{"class":74},[57,141866,55444],{"class":70},[57,141868,156],{"class":140},[57,141870,134273],{"class":74},[57,141872,134276],{"class":70},[57,141874,156],{"class":140},[57,141876,134281],{"class":74},[57,141878,51504],{"class":140},[394,141880,141882,141883,141886],{"id":141881},"_1633-registerarea-主体模块实现","16.3.3 ",[28,141884,141885],{},"registerarea"," 主体模块实现",[44,141888],{"style":126605,"src":141889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,141891,141892],{},"整个大盒子 高度为 522px，设置4个边框",[14,141894,140119],{},[49,141896,141897],{"className":126749,"code":130906,"language":126751,"meta":46,"style":46},[28,141898,141899,141905,141921],{"__ignoreMap":46},[57,141900,141901,141903],{"class":59,"line":60},[57,141902,51808],{"class":51497},[57,141904,15844],{"class":140},[57,141906,141907,141909,141911,141913,141915,141917,141919],{"class":59,"line":67},[57,141908,71093],{"class":81},[57,141910,51634],{"class":140},[57,141912,635],{"class":81},[57,141914,51689],{"class":136},[57,141916,51718],{"class":81},[57,141918,130141],{"class":81},[57,141920,1576],{"class":140},[57,141922,141923],{"class":59,"line":144},[57,141924,1847],{"class":140},[14,141926,140208],{},[49,141928,141929],{"className":126749,"code":130906,"language":126751,"meta":46,"style":46},[28,141930,141931,141937,141953],{"__ignoreMap":46},[57,141932,141933,141935],{"class":59,"line":60},[57,141934,51808],{"class":51497},[57,141936,15844],{"class":140},[57,141938,141939,141941,141943,141945,141947,141949,141951],{"class":59,"line":67},[57,141940,71093],{"class":81},[57,141942,51634],{"class":140},[57,141944,635],{"class":81},[57,141946,51689],{"class":136},[57,141948,51718],{"class":81},[57,141950,130141],{"class":81},[57,141952,1576],{"class":140},[57,141954,141955],{"class":59,"line":144},[57,141956,1847],{"class":140},[14,141958,141959],{},"1号盒子 是一个 h3 标签，放标题",[1422,141961,141962],{},[380,141963,141964],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,141966,140119],{},[49,141968,141969],{"className":126749,"code":139419,"language":126751,"meta":46,"style":46},[28,141970,141971,141977,141987],{"__ignoreMap":46},[57,141972,141973,141975],{"class":59,"line":60},[57,141974,130597],{"class":70},[57,141976,15844],{"class":140},[57,141978,141979,141981,141983,141985],{"class":59,"line":67},[57,141980,131229],{"class":81},[57,141982,51634],{"class":140},[57,141984,24008],{"class":81},[57,141986,1576],{"class":140},[57,141988,141989],{"class":59,"line":144},[57,141990,1847],{"class":140},[14,141992,140208],{},[49,141994,141995],{"className":126749,"code":139419,"language":126751,"meta":46,"style":46},[28,141996,141997,142003,142013],{"__ignoreMap":46},[57,141998,141999,142001],{"class":59,"line":60},[57,142000,130597],{"class":70},[57,142002,15844],{"class":140},[57,142004,142005,142007,142009,142011],{"class":59,"line":67},[57,142006,131229],{"class":81},[57,142008,51634],{"class":140},[57,142010,24008],{"class":81},[57,142012,1576],{"class":140},[57,142014,142015],{"class":59,"line":144},[57,142016,1847],{"class":140},[14,142018,142019],{},"2号盒子 里面放注册的内容",[1422,142021,142022,142025,142034,142048,142061,142064,142067,142085,142099],{},[380,142023,142024],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[380,142026,142027,142028,142030,142031,142033],{},"里面的内容利用 ",[28,142029,1422],{}," 包含 ",[28,142032,380],{}," 来实现的（不需要用表格）",[380,142035,139263,142036,142038,142039,142041,142042,142044,142045,142047],{},[28,142037,380],{}," 里面，左侧放 ",[28,142040,33805],{}," 标签， 中间放",[28,142043,54018],{}," 标签， 右侧放 ",[28,142046,57],{}," 提示信息",[380,142049,142050,142051,142053,142054,142056,142057,142060],{},"左侧 ",[28,142052,33805],{},"里面的文字都是右对齐，我们可以给",[28,142055,33805],{},"设置一个宽度（88px），然后利用",[28,142058,142059],{},"text-align"," 来设置右对齐",[380,142062,142063],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[380,142065,142066],{},"右侧 span修饰一下文字颜色",[380,142068,142069,142070],{},"提示信息的样式优化",[1422,142071,142072,142075,142078],{},[380,142073,142074],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[380,142076,142077],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[380,142079,142080,142081,142084],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[28,142082,142083],{},"vertical-algin"," 来设置 图片与文字对齐方式",[380,142086,142087,142088],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1422,142089,142090,142096],{},[380,142091,142092,142093,142095],{},"设置 ",[28,142094,23825],{}," 的 左右 12px 的内边距，设置一下文字颜色",[380,142097,142098],{},"分别设置 背景颜色",[380,142100,142101,142102,142104],{},"同意协议 和 完成注册 都是用 ",[28,142103,380],{}," 进行包裹",[14,142106,140119],{},[49,142108,142109],{"className":126749,"code":140692,"language":126751,"meta":46,"style":46},[28,142110,142111,142117,142127],{"__ignoreMap":46},[57,142112,142113,142115],{"class":59,"line":60},[57,142114,51808],{"class":51497},[57,142116,15844],{"class":140},[57,142118,142119,142121,142123,142125],{"class":59,"line":67},[57,142120,71075],{"class":81},[57,142122,51634],{"class":140},[57,142124,140709],{"class":81},[57,142126,1576],{"class":140},[57,142128,142129],{"class":59,"line":144},[57,142130,1847],{"class":140},[14,142132,140208],{},[49,142134,142135],{"className":126749,"code":140692,"language":126751,"meta":46,"style":46},[28,142136,142137,142143,142153],{"__ignoreMap":46},[57,142138,142139,142141],{"class":59,"line":60},[57,142140,51808],{"class":51497},[57,142142,15844],{"class":140},[57,142144,142145,142147,142149,142151],{"class":59,"line":67},[57,142146,71075],{"class":81},[57,142148,51634],{"class":140},[57,142150,140709],{"class":81},[57,142152,1576],{"class":140},[57,142154,142155],{"class":59,"line":144},[57,142156,1847],{"class":140},[394,142158,142160],{"id":142159},"_1634-底部实现","16.3.4 底部实现",[14,142162,140119],{},[49,142164,142165],{"className":126749,"code":140692,"language":126751,"meta":46,"style":46},[28,142166,142167,142173,142183],{"__ignoreMap":46},[57,142168,142169,142171],{"class":59,"line":60},[57,142170,51808],{"class":51497},[57,142172,15844],{"class":140},[57,142174,142175,142177,142179,142181],{"class":59,"line":67},[57,142176,71075],{"class":81},[57,142178,51634],{"class":140},[57,142180,140709],{"class":81},[57,142182,1576],{"class":140},[57,142184,142185],{"class":59,"line":144},[57,142186,1847],{"class":140},[14,142188,140208],{},[49,142190,142191],{"className":127496,"code":130853,"language":127498,"meta":46,"style":46},[28,142192,142193,142197,142211,142215],{"__ignoreMap":46},[57,142194,142195],{"class":59,"line":60},[57,142196,130860],{"class":63},[57,142198,142199,142201,142203,142205,142207,142209],{"class":59,"line":67},[57,142200,1326],{"class":140},[57,142202,51808],{"class":51497},[57,142204,53683],{"class":70},[57,142206,156],{"class":140},[57,142208,130873],{"class":74},[57,142210,51504],{"class":140},[57,142212,142213],{"class":59,"line":144},[57,142214,130880],{"class":140},[57,142216,142217,142219,142221],{"class":59,"line":150},[57,142218,51982],{"class":140},[57,142220,51808],{"class":51497},[57,142222,51504],{"class":140},[365,142224,142226],{"id":142225},"_164-项目总结","16.4 项目总结",[377,142228,142229,142232,142235,142238],{},[380,142230,142231],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[380,142233,142234],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[380,142236,142237],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[380,142239,142240],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[44,142242],{"style":126605,"src":142243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[377,142245,142246],{"start":162},[380,142247,142248],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[44,142250],{"style":126605,"src":142251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[377,142253,142254],{"start":180},[380,142255,142256],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[44,142258],{"style":126605,"src":142259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[49,142261,142262],{"className":127496,"code":136906,"language":127498,"meta":46,"style":46},[28,142263,142264],{"__ignoreMap":46},[57,142265,142266,142268,142270,142272,142274,142276,142278,142280,142282,142284,142286,142288],{"class":59,"line":60},[57,142267,1326],{"class":140},[57,142269,54018],{"class":51497},[57,142271,54021],{"class":70},[57,142273,156],{"class":140},[57,142275,62896],{"class":74},[57,142277,15192],{"class":70},[57,142279,156],{"class":140},[57,142281,136927],{"class":74},[57,142283,61217],{"class":70},[57,142285,156],{"class":140},[57,142287,136934],{"class":74},[57,142289,51504],{"class":140},[377,142291,142292,142295],{"start":186},[380,142293,142294],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[380,142296,142297],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[342,142299,142300],{},"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":46,"searchDepth":67,"depth":67,"links":142302},[142303,142308,142315,142323],{"id":139929,"depth":67,"text":139930,"children":142304},[142305,142306,142307],{"id":139933,"depth":144,"text":139934},{"id":140664,"depth":144,"text":140665},{"id":140977,"depth":144,"text":140978},{"id":141277,"depth":67,"text":141278,"children":142309},[142310,142311,142313],{"id":141281,"depth":144,"text":141282},{"id":141299,"depth":144,"text":142312},"16.2.2 列表页 header 和 nav 修改",{"id":141583,"depth":144,"text":142314},"16.2.3 列表页主体 sk_container",{"id":141775,"depth":67,"text":141776,"children":142316},[142317,142318,142320,142322],{"id":141790,"depth":144,"text":141791},{"id":141802,"depth":144,"text":142319},"16.3.2 header 头部实现",{"id":141881,"depth":144,"text":142321},"16.3.3 registerarea 主体模块实现",{"id":142159,"depth":144,"text":142160},{"id":142225,"depth":67,"text":142226},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139921,"description":347},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142330,"title":142331,"body":142332,"description":347,"extension":348,"meta":142440,"navigation":350,"path":142441,"seo":142442,"stem":142443,"__hash__":142444},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142333,"toc":142435},[142334,142337,142341,142344,142347,142356,142365,142369,142374,142381,142399,142402,142405,142408,142411,142414,142417,142420,142423,142426,142429,142432],[10,142335,142331],{"id":142336},"_17-web服务器与网站发布",[365,142338,142340],{"id":142339},"_171-web服务器","17.1 Web服务器",[14,142342,142343],{},"把自己网站上传到服务器上，可以让其他人访问",[44,142345],{"style":126605,"src":142346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,142348,142349,142352,142353],{},[33,142350,142351],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[33,142354,142355],{},"Web 服务器等",[14,142357,142358,142359,101215,142362,26009],{},"根据服务器在网络中所在的位置不同，又可分为 ",[33,142360,142361],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[33,142363,142364],{},"远程服务器",[394,142366,142368],{"id":142367},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,142370,142371],{},[33,142372,142373],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,142375,142376,142377],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[18,142378,142379],{"href":142379,"rel":142380},"http:\u002F\u002Ffree.3v.do\u002F",[22],[1422,142382,142383,142386,142389,142396],{},[380,142384,142385],{},"去免费空间网站注册账号。",[380,142387,142388],{},"记录下主机名、用户名、密码、域名。",[380,142390,142391,142392,142395],{},"利用 ",[28,142393,142394],{},"utftp"," 软件 上传网站到远程服务器",[380,142397,142398],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,142400,142401],{},"使用软件上传，对上传软件文件进行解压",[44,142403],{"style":126605,"src":142404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[44,142406],{"style":126605,"src":142407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,142409,142410],{},"输入刚刚申请的服务器账号信息：",[44,142412],{"style":126605,"src":142413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[44,142415],{"style":126605,"src":142416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[44,142418],{"style":126605,"src":142419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[44,142421],{"style":126605,"src":142422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,142424,142425],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[44,142427],{"style":126605,"src":142428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,142430,142431],{},"浏览器输入域名即可访问",[14,142433,142434],{},"首页一定必须是index",{"title":46,"searchDepth":67,"depth":67,"links":142436},[142437],{"id":142339,"depth":67,"text":142340,"children":142438},[142439],{"id":142367,"depth":144,"text":142368},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142331,"description":347},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142446,"title":142447,"body":142448,"description":347,"extension":348,"meta":143375,"navigation":350,"path":143376,"seo":143377,"stem":143378,"__hash__":143379},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142449,"toc":143358},[142450,142453,142457,142460,142463,142474,142477,142481,142485,142490,142493,142496,142499,142502,142506,142532,142536,142540,142543,142546,142550,142583,142587,142590,142593,142657,142661,142665,142668,142671,142674,142678,142723,142727,142730,142760,142764,142768,142771,142774,142778,142781,142850,142853,142961,142963,142969,142973,142976,142979,143075,143078,143082,143106,143110,143113,143117,143120,143124,143127,143130,143133,143136,143140,143143,143146,143150,143154,143157,143160,143163,143166,143170,143173,143177,143180,143183,143228,143232,143236,143239,143242,143245,143277,143281,143284,143318,143322,143325,143355],[10,142451,142447],{"id":142452},"_18-2d动画与3d转换",[365,142454,142456],{"id":142455},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,142458,142459],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,142461,142462],{},"转换（transform）你可以简单理解为变形",[1422,142464,142465,142468,142471],{},[380,142466,142467],{},"移动：translate",[380,142469,142470],{},"旋转：rotate",[380,142472,142473],{},"缩放：scale",[44,142475],{"style":126605,"src":142476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[394,142478,142480],{"id":142479},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22270,142482,142484],{"id":142483},"_18111-translate介绍","18.1.1.1 translate介绍",[14,142486,142487,142488],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[33,142489,133408],{},[44,142491],{"style":126605,"src":142492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,142494,142495],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,142497,142498],{},"对于行内元素无效",[14,142500,142501],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22270,142503,142505],{"id":142504},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[49,142507,142508],{"className":126749,"code":138938,"language":126751,"meta":46,"style":46},[28,142509,142510,142516,142528],{"__ignoreMap":46},[57,142511,142512,142514],{"class":59,"line":60},[57,142513,51808],{"class":51497},[57,142515,15844],{"class":140},[57,142517,142518,142520,142522,142524,142526],{"class":59,"line":67},[57,142519,70667],{"class":81},[57,142521,51634],{"class":140},[57,142523,226],{"class":81},[57,142525,51753],{"class":81},[57,142527,1576],{"class":140},[57,142529,142530],{"class":59,"line":144},[57,142531,1847],{"class":140},[394,142533,142535],{"id":142534},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22270,142537,142539],{"id":142538},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,142541,142542],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[44,142544],{"style":126605,"src":142545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22270,142547,142549],{"id":142548},"_18122-旋转效果","18.1.2.2 旋转效果",[49,142551,142553],{"className":126749,"code":142552,"language":126751,"meta":46,"style":46},"div {\n  transform: rotate(45deg);\n}\n",[28,142554,142555,142561,142579],{"__ignoreMap":46},[57,142556,142557,142559],{"class":59,"line":60},[57,142558,51808],{"class":51497},[57,142560,15844],{"class":140},[57,142562,142563,142565,142567,142570,142572,142574,142577],{"class":59,"line":67},[57,142564,136733],{"class":81},[57,142566,51634],{"class":140},[57,142568,142569],{"class":81},"rotate",[57,142571,168],{"class":140},[57,142573,945],{"class":81},[57,142575,142576],{"class":136},"deg",[57,142578,2992],{"class":140},[57,142580,142581],{"class":59,"line":144},[57,142582,1847],{"class":140},[22270,142584,142586],{"id":142585},"_18123-三角做法","18.1.2.3 三角做法",[14,142588,142589],{},"该下标当经过最外层大盒子时会实现向上反转",[44,142591],{"style":126605,"src":142592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[49,142594,142595],{"className":126749,"code":135269,"language":126751,"meta":46,"style":46},[28,142596,142597,142601,142607,142617,142627,142643,142653],{"__ignoreMap":46},[57,142598,142599],{"class":59,"line":60},[57,142600,135276],{"class":63},[57,142602,142603,142605],{"class":59,"line":67},[57,142604,135281],{"class":70},[57,142606,15844],{"class":140},[57,142608,142609,142611,142613,142615],{"class":59,"line":144},[57,142610,70765],{"class":81},[57,142612,51634],{"class":140},[57,142614,226],{"class":81},[57,142616,1576],{"class":140},[57,142618,142619,142621,142623,142625],{"class":59,"line":150},[57,142620,70985],{"class":81},[57,142622,51634],{"class":140},[57,142624,226],{"class":81},[57,142626,1576],{"class":140},[57,142628,142629,142631,142633,142635,142637,142639,142641],{"class":59,"line":162},[57,142630,71093],{"class":81},[57,142632,51634],{"class":140},[57,142634,862],{"class":81},[57,142636,51689],{"class":136},[57,142638,51718],{"class":81},[57,142640,64188],{"class":81},[57,142642,1576],{"class":140},[57,142644,142645,142647,142649,142651],{"class":59,"line":180},[57,142646,135324],{"class":81},[57,142648,51634],{"class":140},[57,142650,62566],{"class":81},[57,142652,1576],{"class":140},[57,142654,142655],{"class":59,"line":186},[57,142656,1847],{"class":140},[394,142658,142660],{"id":142659},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22270,142662,142664],{"id":142663},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,142666,142667],{},"设置中心点",[44,142669],{"style":126605,"src":142670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,142672,142673],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22270,142675,142677],{"id":142676},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[49,142679,142681],{"className":126749,"code":142680,"language":126751,"meta":46,"style":46},"\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",[28,142682,142683,142688,142694,142709,142714,142719],{"__ignoreMap":46},[57,142684,142685],{"class":59,"line":60},[57,142686,142687],{"class":63},"\u002F* 转换中心点 *\u002F\n",[57,142689,142690,142692],{"class":59,"line":67},[57,142691,51808],{"class":51497},[57,142693,15844],{"class":140},[57,142695,142696,142699,142701,142703,142705,142707],{"class":59,"line":144},[57,142697,142698],{"class":81},"  transform-origin",[57,142700,51634],{"class":140},[57,142702,51789],{"class":81},[57,142704,17416],{"class":81},[57,142706,130612],{"class":140},[57,142708,135422],{"class":63},[57,142710,142711],{"class":59,"line":150},[57,142712,142713],{"class":63},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[57,142715,142716],{"class":59,"line":162},[57,142717,142718],{"class":63},"  \u002F* transform-origin: left top; *\u002F\n",[57,142720,142721],{"class":59,"line":180},[57,142722,1847],{"class":140},[22270,142724,142726],{"id":142725},"_18133-旋转案例","18.1.3.3 旋转案例",[44,142728],{"style":126605,"src":142729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[49,142731,142732],{"className":126749,"code":142552,"language":126751,"meta":46,"style":46},[28,142733,142734,142740,142756],{"__ignoreMap":46},[57,142735,142736,142738],{"class":59,"line":60},[57,142737,51808],{"class":51497},[57,142739,15844],{"class":140},[57,142741,142742,142744,142746,142748,142750,142752,142754],{"class":59,"line":67},[57,142743,136733],{"class":81},[57,142745,51634],{"class":140},[57,142747,142569],{"class":81},[57,142749,168],{"class":140},[57,142751,945],{"class":81},[57,142753,142576],{"class":136},[57,142755,2992],{"class":140},[57,142757,142758],{"class":59,"line":144},[57,142759,1847],{"class":140},[394,142761,142763],{"id":142762},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22270,142765,142767],{"id":142766},"_18141-scale介绍","18.1.4.1 scale介绍",[14,142769,142770],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[44,142772],{"style":126605,"src":142773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22270,142775,142777],{"id":142776},"_18142-分页按钮","18.1.4.2 分页按钮",[44,142779],{"style":126605,"src":142780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[49,142782,142784],{"className":126749,"code":142783,"language":126751,"meta":46,"style":46},"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",[28,142785,142786,142792,142808,142812,142816,142821,142827,142841,142846],{"__ignoreMap":46},[57,142787,142788,142790],{"class":59,"line":60},[57,142789,51808],{"class":51497},[57,142791,15844],{"class":140},[57,142793,142794,142796,142798,142801,142803,142806],{"class":59,"line":67},[57,142795,136733],{"class":81},[57,142797,51634],{"class":140},[57,142799,142800],{"class":81},"scale",[57,142802,168],{"class":140},[57,142804,142805],{"class":81},"1.2",[57,142807,2992],{"class":140},[57,142809,142810],{"class":59,"line":144},[57,142811,1847],{"class":140},[57,142813,142814],{"class":59,"line":150},[57,142815,136210],{"class":140},[57,142817,142818],{"class":59,"line":162},[57,142819,142820],{"class":63},"\u002F* 2D 缩放 *\u002F\n",[57,142822,142823,142825],{"class":59,"line":180},[57,142824,51808],{"class":51497},[57,142826,15844],{"class":140},[57,142828,142829,142831,142833,142835,142837,142839],{"class":59,"line":186},[57,142830,136733],{"class":81},[57,142832,51634],{"class":140},[57,142834,142800],{"class":81},[57,142836,168],{"class":140},[57,142838,142805],{"class":81},[57,142840,2992],{"class":140},[57,142842,142843],{"class":59,"line":197},[57,142844,142845],{"class":63},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[57,142847,142848],{"class":59,"line":241},[57,142849,1847],{"class":140},[14,142851,142852],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[49,142854,142856],{"className":126749,"code":142855,"language":126751,"meta":46,"style":46},"\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",[28,142857,142858,142863,142873,142894,142915,142919,142924,142930,142957],{"__ignoreMap":46},[57,142859,142860],{"class":59,"line":60},[57,142861,142862],{"class":63},"\u002F* 定义动画 *\u002F\n",[57,142864,142865,142868,142871],{"class":59,"line":67},[57,142866,142867],{"class":136},"@keyframes",[57,142869,142870],{"class":5489}," move",[57,142872,15844],{"class":140},[57,142874,142875,142878,142880,142882,142884,142887,142889,142891],{"class":59,"line":144},[57,142876,142877],{"class":70},"  0%",[57,142879,80004],{"class":140},[57,142881,48331],{"class":81},[57,142883,51634],{"class":140},[57,142885,142886],{"class":81},"translateX",[57,142888,168],{"class":140},[57,142890,226],{"class":81},[57,142892,142893],{"class":140},"); }\n",[57,142895,142896,142899,142901,142903,142905,142907,142909,142911,142913],{"class":59,"line":150},[57,142897,142898],{"class":70},"  100%",[57,142900,80004],{"class":140},[57,142902,48331],{"class":81},[57,142904,51634],{"class":140},[57,142906,142886],{"class":81},[57,142908,168],{"class":140},[57,142910,728],{"class":81},[57,142912,51689],{"class":136},[57,142914,142893],{"class":140},[57,142916,142917],{"class":59,"line":162},[57,142918,1847],{"class":140},[57,142920,142921],{"class":59,"line":180},[57,142922,142923],{"class":63},"\u002F* 调用动画 *\u002F\n",[57,142925,142926,142928],{"class":59,"line":186},[57,142927,51808],{"class":51497},[57,142929,15844],{"class":140},[57,142931,142932,142935,142937,142939,142941,142943,142945,142947,142949,142952,142955],{"class":59,"line":197},[57,142933,142934],{"class":81},"  animation",[57,142936,51634],{"class":140},[57,142938,135435],{"class":81},[57,142940,25387],{"class":81},[57,142942,1111],{"class":136},[57,142944,78877],{"class":81},[57,142946,4366],{"class":81},[57,142948,1111],{"class":136},[57,142950,142951],{"class":81}," infinite",[57,142953,142954],{"class":81}," alternate",[57,142956,1576],{"class":140},[57,142958,142959],{"class":59,"line":241},[57,142960,1847],{"class":140},[14,142962,142852],{},[49,142964,142967],{"className":142965,"code":142966,"language":5460},[5458],"\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",[28,142968,142966],{"__ignoreMap":46},[22270,142970,142972],{"id":142971},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,142974,142975],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[44,142977],{"style":126605,"src":142978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[49,142980,142981],{"className":126749,"code":142855,"language":126751,"meta":46,"style":46},[28,142982,142983,142987,142995,143013,143033,143037,143041,143047,143071],{"__ignoreMap":46},[57,142984,142985],{"class":59,"line":60},[57,142986,142862],{"class":63},[57,142988,142989,142991,142993],{"class":59,"line":67},[57,142990,142867],{"class":136},[57,142992,142870],{"class":5489},[57,142994,15844],{"class":140},[57,142996,142997,142999,143001,143003,143005,143007,143009,143011],{"class":59,"line":144},[57,142998,142877],{"class":70},[57,143000,80004],{"class":140},[57,143002,48331],{"class":81},[57,143004,51634],{"class":140},[57,143006,142886],{"class":81},[57,143008,168],{"class":140},[57,143010,226],{"class":81},[57,143012,142893],{"class":140},[57,143014,143015,143017,143019,143021,143023,143025,143027,143029,143031],{"class":59,"line":150},[57,143016,142898],{"class":70},[57,143018,80004],{"class":140},[57,143020,48331],{"class":81},[57,143022,51634],{"class":140},[57,143024,142886],{"class":81},[57,143026,168],{"class":140},[57,143028,728],{"class":81},[57,143030,51689],{"class":136},[57,143032,142893],{"class":140},[57,143034,143035],{"class":59,"line":162},[57,143036,1847],{"class":140},[57,143038,143039],{"class":59,"line":180},[57,143040,142923],{"class":63},[57,143042,143043,143045],{"class":59,"line":186},[57,143044,51808],{"class":51497},[57,143046,15844],{"class":140},[57,143048,143049,143051,143053,143055,143057,143059,143061,143063,143065,143067,143069],{"class":59,"line":197},[57,143050,142934],{"class":81},[57,143052,51634],{"class":140},[57,143054,135435],{"class":81},[57,143056,25387],{"class":81},[57,143058,1111],{"class":136},[57,143060,78877],{"class":81},[57,143062,4366],{"class":81},[57,143064,1111],{"class":136},[57,143066,142951],{"class":81},[57,143068,142954],{"class":81},[57,143070,1576],{"class":140},[57,143072,143073],{"class":59,"line":241},[57,143074,1847],{"class":140},[14,143076,143077],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[394,143079,143081],{"id":143080},"_1823-知识点回顾","18.2.3 知识点回顾",[49,143083,143084],{"className":126749,"code":128918,"language":126751,"meta":46,"style":46},[28,143085,143086,143092,143102],{"__ignoreMap":46},[57,143087,143088,143090],{"class":59,"line":60},[57,143089,51808],{"class":51497},[57,143091,15844],{"class":140},[57,143093,143094,143096,143098,143100],{"class":59,"line":67},[57,143095,128931],{"class":81},[57,143097,51634],{"class":140},[57,143099,61933],{"class":81},[57,143101,1576],{"class":140},[57,143103,143104],{"class":59,"line":144},[57,143105,1847],{"class":140},[365,143107,143109],{"id":143108},"_183-3d-转换","18.3 3D 转换",[14,143111,143112],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[394,143114,143116],{"id":143115},"_1831-坐标轴认识","18.3.1 坐标轴认识",[44,143118],{"style":126605,"src":143119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[394,143121,143123],{"id":143122},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[44,143125],{"style":126605,"src":143126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,143128,143129],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,143131,143132],{},"translate3d的效果需要搭配透视perspective来使用",[44,143134],{"style":126605,"src":143135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[394,143137,143139],{"id":143138},"_1833-透视-perspective","18.3.3 透视 perspective",[44,143141],{"style":126605,"src":143142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,143144,143145],{},"透视写在父盒子上，单位为像素",[394,143147,143149],{"id":143148},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22270,143151,143153],{"id":143152},"_18341-分开解释","18.3.4.1 分开解释",[44,143155],{"style":126605,"src":143156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[44,143158],{"style":126605,"src":143159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[44,143161],{"style":126605,"src":143162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,143164,143165],{},"总结来说就是左手原则",[22270,143167,143169],{"id":143168},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[44,143171],{"style":126605,"src":143172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[394,143174,143176],{"id":143175},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[44,143178],{"style":126605,"src":143179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[44,143181],{"style":126605,"src":143182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[49,143184,143186],{"className":126749,"code":143185,"language":126751,"meta":46,"style":46},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[28,143187,143188,143194,143207,143224],{"__ignoreMap":46},[57,143189,143190,143192],{"class":59,"line":60},[57,143191,51808],{"class":51497},[57,143193,15844],{"class":140},[57,143195,143196,143199,143201,143203,143205],{"class":59,"line":67},[57,143197,143198],{"class":81},"  perspective",[57,143200,51634],{"class":140},[57,143202,65271],{"class":81},[57,143204,51689],{"class":136},[57,143206,1576],{"class":140},[57,143208,143209,143211,143213,143216,143218,143220,143222],{"class":59,"line":144},[57,143210,136733],{"class":81},[57,143212,51634],{"class":140},[57,143214,143215],{"class":81},"rotateX",[57,143217,168],{"class":140},[57,143219,945],{"class":81},[57,143221,142576],{"class":136},[57,143223,2992],{"class":140},[57,143225,143226],{"class":59,"line":150},[57,143227,1847],{"class":140},[394,143229,143231],{"id":143230},"_1836-案例","18.3.6 案例",[22270,143233,143235],{"id":143234},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[44,143237],{"style":126605,"src":143238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[44,143240],{"style":126605,"src":143241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[44,143243],{"style":126605,"src":143244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[49,143246,143248],{"className":126749,"code":143247,"language":126751,"meta":46,"style":46},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[28,143249,143250,143255,143261,143273],{"__ignoreMap":46},[57,143251,143252],{"class":59,"line":60},[57,143253,143254],{"class":63},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[57,143256,143257,143259],{"class":59,"line":67},[57,143258,133746],{"class":70},[57,143260,15844],{"class":140},[57,143262,143263,143265,143267,143269,143271],{"class":59,"line":144},[57,143264,143198],{"class":81},[57,143266,51634],{"class":140},[57,143268,65271],{"class":81},[57,143270,51689],{"class":136},[57,143272,1576],{"class":140},[57,143274,143275],{"class":59,"line":150},[57,143276,1847],{"class":140},[22270,143278,143280],{"id":143279},"_18362-3d导航栏","18.3.6.2 3D导航栏",[44,143282],{"style":126605,"src":143283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[49,143285,143286],{"className":127496,"code":130853,"language":127498,"meta":46,"style":46},[28,143287,143288,143292,143306,143310],{"__ignoreMap":46},[57,143289,143290],{"class":59,"line":60},[57,143291,130860],{"class":63},[57,143293,143294,143296,143298,143300,143302,143304],{"class":59,"line":67},[57,143295,1326],{"class":140},[57,143297,51808],{"class":51497},[57,143299,53683],{"class":70},[57,143301,156],{"class":140},[57,143303,130873],{"class":74},[57,143305,51504],{"class":140},[57,143307,143308],{"class":59,"line":144},[57,143309,130880],{"class":140},[57,143311,143312,143314,143316],{"class":59,"line":150},[57,143313,51982],{"class":140},[57,143315,51808],{"class":51497},[57,143317,51504],{"class":140},[22270,143319,143321],{"id":143320},"_18363-旋转木马","18.3.6.3 旋转木马",[44,143323],{"style":126605,"src":143324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[49,143326,143327],{"className":126749,"code":142552,"language":126751,"meta":46,"style":46},[28,143328,143329,143335,143351],{"__ignoreMap":46},[57,143330,143331,143333],{"class":59,"line":60},[57,143332,51808],{"class":51497},[57,143334,15844],{"class":140},[57,143336,143337,143339,143341,143343,143345,143347,143349],{"class":59,"line":67},[57,143338,136733],{"class":81},[57,143340,51634],{"class":140},[57,143342,142569],{"class":81},[57,143344,168],{"class":140},[57,143346,945],{"class":81},[57,143348,142576],{"class":136},[57,143350,2992],{"class":140},[57,143352,143353],{"class":59,"line":144},[57,143354,1847],{"class":140},[342,143356,143357],{},"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":46,"searchDepth":67,"depth":67,"links":143359},[143360,143367],{"id":142455,"depth":67,"text":142456,"children":143361},[143362,143363,143364,143365,143366],{"id":142479,"depth":144,"text":142480},{"id":142534,"depth":144,"text":142535},{"id":142659,"depth":144,"text":142660},{"id":142762,"depth":144,"text":142763},{"id":143080,"depth":144,"text":143081},{"id":143108,"depth":67,"text":143109,"children":143368},[143369,143370,143371,143372,143373,143374],{"id":143115,"depth":144,"text":143116},{"id":143122,"depth":144,"text":143123},{"id":143138,"depth":144,"text":143139},{"id":143148,"depth":144,"text":143149},{"id":143175,"depth":144,"text":143176},{"id":143230,"depth":144,"text":143231},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142447,"description":347},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143381,"title":143382,"body":143383,"description":347,"extension":348,"meta":143586,"navigation":350,"path":143587,"seo":143588,"stem":143589,"__hash__":143590},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143384,"toc":143575},[143385,143388,143392,143395,143398,143402,143405,143408,143411,143415,143418,143422,143425,143429,143432,143436,143450,143454,143479,143482,143485,143502,143506,143510,143513,143516,143520,143523,143526,143544,143548,143551,143565,143569,143572],[10,143386,143382],{"id":143387},"_19-移动端基础-前缀现状与视口",[365,143389,143391],{"id":143390},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[44,143393],{"style":126605,"src":143394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,143396,143397],{},"意思就是加个前缀，增加兼容性",[365,143399,143401],{"id":143400},"_192-移动端现状认识","19.2 移动端现状认识",[44,143403],{"style":126605,"src":143404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,143406,143407],{},"调试方法：",[44,143409],{"style":126605,"src":143410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[365,143412,143414],{"id":143413},"_193-视口","19.3 视口",[14,143416,143417],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[394,143419,143421],{"id":143420},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[44,143423],{"style":126605,"src":143424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[394,143426,143428],{"id":143427},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[44,143430],{"style":126605,"src":143431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[394,143433,143435],{"id":143434},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1422,143437,143438,143441,143444,143447],{},[380,143439,143440],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[380,143442,143443],{},"理想视口，对设备来讲，是最理想的视口尺寸",[380,143445,143446],{},"需要手动添写meta视口标签通知浏览器操作",[380,143448,143449],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[394,143451,143453],{"id":143452},"_1934-meta视口标签","19.3.4 meta视口标签",[49,143455,143457],{"className":127496,"code":143456,"language":127498,"meta":46,"style":46},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[28,143458,143459],{"__ignoreMap":46},[57,143460,143461,143463,143465,143467,143469,143471,143473,143475,143477],{"class":59,"line":60},[57,143462,1326],{"class":140},[57,143464,51541],{"class":51497},[57,143466,15192],{"class":70},[57,143468,156],{"class":140},[57,143470,51588],{"class":74},[57,143472,51568],{"class":70},[57,143474,156],{"class":140},[57,143476,51595],{"class":74},[57,143478,51504],{"class":140},[44,143480],{"style":126605,"src":143481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,143483,143484],{},"标准视口设置：",[377,143486,143487,143490,143493,143496,143499],{},[380,143488,143489],{},"视口宽度和设备保持一致",[380,143491,143492],{},"视口的默认缩放比例1.0",[380,143494,143495],{},"不允许用户自行缩放",[380,143497,143498],{},"最大允许的缩放比例1.0",[380,143500,143501],{},"最小允许的缩放比例1.0",[394,143503,143505],{"id":143504},"_1935-二倍图","19.3.5 二倍图",[22270,143507,143509],{"id":143508},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[44,143511],{"style":126605,"src":143512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[44,143514],{"style":126605,"src":143515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22270,143517,143519],{"id":143518},"_19352-多倍图","19.3.5.2 多倍图",[44,143521],{"style":126605,"src":143522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,143524,143525],{},"二倍图法，代码如下：",[49,143527,143529],{"className":126749,"code":143528,"language":126751,"meta":46,"style":46},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[28,143530,143531,143536],{"__ignoreMap":46},[57,143532,143533],{"class":59,"line":60},[57,143534,143535],{"class":63},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[57,143537,143538,143541],{"class":59,"line":67},[57,143539,143540],{"class":51497},"background-size",[57,143542,143543],{"class":140},": 50% 50%;\n",[22270,143545,143547],{"id":143546},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[44,143549],{"style":126605,"src":143550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[377,143552,143553,143556,143559,143562],{},[380,143554,143555],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[380,143557,143558],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[380,143560,143561],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[380,143563,143564],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22270,143566,143568],{"id":143567},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[44,143570],{"style":126605,"src":143571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[342,143573,143574],{},"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":46,"searchDepth":67,"depth":67,"links":143576},[143577,143578,143579],{"id":143390,"depth":67,"text":143391},{"id":143400,"depth":67,"text":143401},{"id":143413,"depth":67,"text":143414,"children":143580},[143581,143582,143583,143584,143585],{"id":143420,"depth":144,"text":143421},{"id":143427,"depth":144,"text":143428},{"id":143434,"depth":144,"text":143435},{"id":143452,"depth":144,"text":143453},{"id":143504,"depth":144,"text":143505},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143382,"description":347},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143592,"title":143593,"body":143594,"description":347,"extension":348,"meta":144471,"navigation":350,"path":144472,"seo":144473,"stem":144474,"__hash__":144475},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143595,"toc":144455},[143596,143599,143603,143610,143613,143620,143623,143628,143631,143635,143639,143646,143649,143652,143656,143659,143662,143665,143668,143671,143675,143678,143682,143684,143687,143690,143693,143696,143698,143701,143703,143733,143735,143765,143769,143772,143776,143779,143796,143799,143802,143878,143880,143883,143886,143889,143892,143894,143897,143900,143904,143926,143929,143932,143936,143939,143945,143948,143952,143955,143958,143962,143965,143968,143971,143975,143978,143981,143984,143987,143991,143994,143998,144005,144008,144011,144014,144017,144027,144030,144033,144040,144043,144047,144050,144053,144057,144060,144063,144066,144111,144114,144117,144120,144122,144251,144253,144291,144294,144297,144299,144417,144419,144453],[10,143597,143593],{"id":143598},"_20-移动端布局实战上篇",[365,143600,143602],{"id":143601},"_201-移动端主流方案","20.1 移动端主流方案",[377,143604,143605],{},[380,143606,143607],{},[33,143608,143609],{},"单独移动端页面（主流）",[44,143611],{"style":126605,"src":143612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[377,143614,143615],{"start":67},[380,143616,143617],{},[33,143618,143619],{},"响应式兼容PC移动端",[44,143621],{"style":126605,"src":143622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[377,143624,143625],{"start":144},[380,143626,143627],{},"两种页面选型布局方式",[44,143629],{"style":126605,"src":143630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[365,143632,143634],{"id":143633},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[394,143636,143638],{"id":143637},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,143640,143641,143642],{},"官网地址： ",[18,143643,143644],{"href":143644,"rel":143645},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[22],[44,143647],{"style":126605,"src":143648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[44,143650],{"style":126605,"src":143651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[394,143653,143655],{"id":143654},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[44,143657],{"style":126605,"src":143658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[44,143660],{"style":126605,"src":143661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,143663,143664],{},"去除高亮：",[14,143666,143667],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,143669,143670],{},"-webkit- tap-highlight-color: transparent;",[365,143672,143674],{"id":143673},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[44,143676],{"style":126605,"src":143677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[365,143679,143681],{"id":143680},"_204-流式布局案例","20.4 流式布局案例",[14,143683,454],{},[14,143685,143686],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,143688,143689],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,143691,143692],{},"图片格式：",[44,143694],{"style":126605,"src":143695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,143697,135792],{},[44,143699],{"style":126605,"src":143700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,143702,140119],{},[49,143704,143705],{"className":127496,"code":134251,"language":127498,"meta":46,"style":46},[28,143706,143707],{"__ignoreMap":46},[57,143708,143709,143711,143713,143715,143717,143719,143721,143723,143725,143727,143729,143731],{"class":59,"line":60},[57,143710,1326],{"class":140},[57,143712,44],{"class":51497},[57,143714,55436],{"class":70},[57,143716,156],{"class":140},[57,143718,134266],{"class":74},[57,143720,55444],{"class":70},[57,143722,156],{"class":140},[57,143724,134273],{"class":74},[57,143726,134276],{"class":70},[57,143728,156],{"class":140},[57,143730,134281],{"class":74},[57,143732,51504],{"class":140},[14,143734,140208],{},[49,143736,143737],{"className":127496,"code":134251,"language":127498,"meta":46,"style":46},[28,143738,143739],{"__ignoreMap":46},[57,143740,143741,143743,143745,143747,143749,143751,143753,143755,143757,143759,143761,143763],{"class":59,"line":60},[57,143742,1326],{"class":140},[57,143744,44],{"class":51497},[57,143746,55436],{"class":70},[57,143748,156],{"class":140},[57,143750,134266],{"class":74},[57,143752,55444],{"class":70},[57,143754,156],{"class":140},[57,143756,134273],{"class":74},[57,143758,134276],{"class":70},[57,143760,156],{"class":140},[57,143762,134281],{"class":74},[57,143764,51504],{"class":140},[365,143766,143768],{"id":143767},"_205-flex布局","20.5 flex布局",[44,143770],{"style":126605,"src":143771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[394,143773,143775],{"id":143774},"_2051-布局原理","20.5.1 布局原理",[14,143777,143778],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1422,143780,143781,143784,143787,143790,143793],{},[380,143782,143783],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[380,143785,143786],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[380,143788,143789],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[380,143791,143792],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[380,143794,143795],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,143797,143798],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,143800,143801],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[49,143803,143805],{"className":126749,"code":143804,"language":126751,"meta":46,"style":46},"\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",[28,143806,143807,143812,143819,143829,143841,143852,143863,143874],{"__ignoreMap":46},[57,143808,143809],{"class":59,"line":60},[57,143810,143811],{"class":63},"\u002F* Flex 弹性布局 *\u002F\n",[57,143813,143814,143817],{"class":59,"line":67},[57,143815,143816],{"class":70},".container",[57,143818,15844],{"class":140},[57,143820,143821,143823,143825,143827],{"class":59,"line":144},[57,143822,128365],{"class":81},[57,143824,51634],{"class":140},[57,143826,51674],{"class":81},[57,143828,1576],{"class":140},[57,143830,143831,143834,143836,143839],{"class":59,"line":150},[57,143832,143833],{"class":81},"  flex-direction",[57,143835,51634],{"class":140},[57,143837,143838],{"class":81},"row",[57,143840,1576],{"class":140},[57,143842,143843,143846,143848,143850],{"class":59,"line":162},[57,143844,143845],{"class":81},"  justify-content",[57,143847,51634],{"class":140},[57,143849,51865],{"class":81},[57,143851,1576],{"class":140},[57,143853,143854,143857,143859,143861],{"class":59,"line":180},[57,143855,143856],{"class":81},"  align-items",[57,143858,51634],{"class":140},[57,143860,51789],{"class":81},[57,143862,1576],{"class":140},[57,143864,143865,143868,143870,143872],{"class":59,"line":186},[57,143866,143867],{"class":81},"  flex-wrap",[57,143869,51634],{"class":140},[57,143871,78807],{"class":81},[57,143873,1576],{"class":140},[57,143875,143876],{"class":59,"line":197},[57,143877,1847],{"class":140},[14,143879,70650],{},[14,143881,143882],{},".form-item .male-label {",[14,143884,143885],{},"   margin-right: 20px;",[14,143887,143888],{},"   display: inline-flex;",[14,143890,143891],{},"   align-items: center;",[14,143893,1362],{},[44,143895],{"style":126605,"src":143896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[44,143898],{"style":126605,"src":143899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[394,143901,143903],{"id":143902},"_2052-常见父项属性","20.5.2 常见父项属性",[377,143905,143906,143909,143912,143915,143918,143921,143924],{},[380,143907,143908],{},"flex-direction：设置主轴的方向",[380,143910,143911],{},"justify-content：设置主轴上的子元素排列方式",[380,143913,143914],{},"flex-wrap：设置子元素是否换行",[380,143916,143917],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[380,143919,143920],{},"align-items：设置侧轴上的子元素排列方式（单行）",[380,143922,143923],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[380,143925,143908],{},[44,143927],{"style":126605,"src":143928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[44,143930],{"style":126605,"src":143931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[377,143933,143934],{"start":67},[380,143935,143911],{},[44,143937],{"style":126605,"src":143938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,143940,143941,143944],{},[28,143942,143943],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,143946,143947],{},"跟着主轴走",[377,143949,143950],{"start":144},[380,143951,143914],{},[44,143953],{"style":126605,"src":143954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,143956,143957],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[377,143959,143960],{"start":150},[380,143961,143917],{},[44,143963],{"style":126605,"src":143964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,143966,143967],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,143969,143970],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[377,143972,143973],{"start":162},[380,143974,143920],{},[44,143976],{"style":126605,"src":143977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,143979,143980],{},"align-items与align-content之间的区别：",[14,143982,143983],{},"单找items，多找content",[44,143985],{"style":126605,"src":143986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[377,143988,143989],{"start":180},[380,143990,143923],{},[44,143992],{"style":126605,"src":143993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[394,143995,143997],{"id":143996},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[377,143999,144000],{},[380,144001,144002],{},[33,144003,144004],{},"flex 属性",[14,144006,144007],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[44,144009],{"style":126605,"src":144010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,144012,144013],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,144015,144016],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[377,144018,144019],{"start":67},[380,144020,144021,14067,144024],{},[33,144022,144023],{},"align-self",[33,144025,144026],{},"控制子项自己在侧轴上的排列方式",[44,144028],{"style":126605,"src":144029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,144031,144032],{},"单个子盒子在父盒子侧轴上的排列方式",[377,144034,144035],{"start":144},[380,144036,144037,144039],{},[33,144038,95494],{}," 属性定义项目的排列顺序",[44,144041],{"style":126605,"src":144042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[394,144044,144046],{"id":144045},"_2054-背景线性渐变","20.5.4 背景线性渐变",[44,144048],{"style":126605,"src":144049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,144051,144052],{},"必须要添加浏览器的私有前缀",[394,144054,144056],{"id":144055},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,144058,144059],{},"学到最重要的知识：",[14,144061,144062],{},"flex处理这样的布局思路",[44,144064],{"style":126605,"src":144065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[49,144067,144069],{"className":126749,"code":144068,"language":126751,"meta":46,"style":46},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[28,144070,144071,144077,144087,144097,144107],{"__ignoreMap":46},[57,144072,144073,144075],{"class":59,"line":60},[57,144074,143816],{"class":70},[57,144076,15844],{"class":140},[57,144078,144079,144081,144083,144085],{"class":59,"line":67},[57,144080,128365],{"class":81},[57,144082,51634],{"class":140},[57,144084,51674],{"class":81},[57,144086,1576],{"class":140},[57,144088,144089,144091,144093,144095],{"class":59,"line":144},[57,144090,143845],{"class":81},[57,144092,51634],{"class":140},[57,144094,51789],{"class":81},[57,144096,1576],{"class":140},[57,144098,144099,144101,144103,144105],{"class":59,"line":150},[57,144100,143856],{"class":81},[57,144102,51634],{"class":140},[57,144104,51789],{"class":81},[57,144106,1576],{"class":140},[57,144108,144109],{"class":59,"line":162},[57,144110,1847],{"class":140},[14,144112,144113],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,144115,144116],{},"使用属性选择器",[44,144118],{"style":126605,"src":144119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,144121,69086],{},[49,144123,144125],{"className":127496,"code":144124,"language":127498,"meta":46,"style":46},"\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",[28,144126,144127,144132,144146,144151,144171,144176,144195,144200,144219,144224,144243],{"__ignoreMap":46},[57,144128,144129],{"class":59,"line":60},[57,144130,144131],{"class":63},"\u003C!-- 携程网移动端案例结构 -->\n",[57,144133,144134,144136,144138,144140,144142,144144],{"class":59,"line":67},[57,144135,1326],{"class":140},[57,144137,51808],{"class":51497},[57,144139,53683],{"class":70},[57,144141,156],{"class":140},[57,144143,92520],{"class":74},[57,144145,51504],{"class":140},[57,144147,144148],{"class":59,"line":144},[57,144149,144150],{"class":63},"  \u003C!-- 搜索栏 -->\n",[57,144152,144153,144155,144157,144159,144161,144164,144167,144169],{"class":59,"line":150},[57,144154,52341],{"class":140},[57,144156,51808],{"class":51497},[57,144158,53683],{"class":70},[57,144160,156],{"class":140},[57,144162,144163],{"class":74},"\"search-index\"",[57,144165,144166],{"class":140},">...\u003C\u002F",[57,144168,51808],{"class":51497},[57,144170,51504],{"class":140},[57,144172,144173],{"class":59,"line":162},[57,144174,144175],{"class":63},"  \u003C!-- 焦点图 -->\n",[57,144177,144178,144180,144182,144184,144186,144189,144191,144193],{"class":59,"line":180},[57,144179,52341],{"class":140},[57,144181,51808],{"class":51497},[57,144183,53683],{"class":70},[57,144185,156],{"class":140},[57,144187,144188],{"class":74},"\"focus\"",[57,144190,144166],{"class":140},[57,144192,51808],{"class":51497},[57,144194,51504],{"class":140},[57,144196,144197],{"class":59,"line":186},[57,144198,144199],{"class":63},"  \u003C!-- 主导航 -->\n",[57,144201,144202,144204,144206,144208,144210,144213,144215,144217],{"class":59,"line":197},[57,144203,52341],{"class":140},[57,144205,51808],{"class":51497},[57,144207,53683],{"class":70},[57,144209,156],{"class":140},[57,144211,144212],{"class":74},"\"local-nav\"",[57,144214,144166],{"class":140},[57,144216,51808],{"class":51497},[57,144218,51504],{"class":140},[57,144220,144221],{"class":59,"line":241},[57,144222,144223],{"class":63},"  \u003C!-- 子导航 -->\n",[57,144225,144226,144228,144230,144232,144234,144237,144239,144241],{"class":59,"line":249},[57,144227,52341],{"class":140},[57,144229,51808],{"class":51497},[57,144231,53683],{"class":70},[57,144233,156],{"class":140},[57,144235,144236],{"class":74},"\"nav-common\"",[57,144238,144166],{"class":140},[57,144240,51808],{"class":51497},[57,144242,51504],{"class":140},[57,144244,144245,144247,144249],{"class":59,"line":262},[57,144246,51982],{"class":140},[57,144248,51808],{"class":51497},[57,144250,51504],{"class":140},[14,144252,70650],{},[49,144254,144255],{"className":126749,"code":137201,"language":126751,"meta":46,"style":46},[28,144256,144257,144271,144287],{"__ignoreMap":46},[57,144258,144259,144261,144263,144265,144267,144269],{"class":59,"line":60},[57,144260,54018],{"class":51497},[57,144262,1306],{"class":140},[57,144264,103304],{"class":70},[57,144266,156],{"class":136},[57,144268,62896],{"class":74},[57,144270,137218],{"class":140},[57,144272,144273,144275,144277,144279,144281,144283,144285],{"class":59,"line":67},[57,144274,71093],{"class":81},[57,144276,51634],{"class":140},[57,144278,635],{"class":81},[57,144280,51689],{"class":136},[57,144282,51718],{"class":81},[57,144284,130329],{"class":81},[57,144286,1576],{"class":140},[57,144288,144289],{"class":59,"line":144},[57,144290,1847],{"class":140},[14,144292,144293],{},"总代码和效果展示：",[44,144295],{"style":126605,"src":144296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,144298,69086],{},[49,144300,144301],{"className":127496,"code":144124,"language":127498,"meta":46,"style":46},[28,144302,144303,144307,144321,144325,144343,144347,144365,144369,144387,144391,144409],{"__ignoreMap":46},[57,144304,144305],{"class":59,"line":60},[57,144306,144131],{"class":63},[57,144308,144309,144311,144313,144315,144317,144319],{"class":59,"line":67},[57,144310,1326],{"class":140},[57,144312,51808],{"class":51497},[57,144314,53683],{"class":70},[57,144316,156],{"class":140},[57,144318,92520],{"class":74},[57,144320,51504],{"class":140},[57,144322,144323],{"class":59,"line":144},[57,144324,144150],{"class":63},[57,144326,144327,144329,144331,144333,144335,144337,144339,144341],{"class":59,"line":150},[57,144328,52341],{"class":140},[57,144330,51808],{"class":51497},[57,144332,53683],{"class":70},[57,144334,156],{"class":140},[57,144336,144163],{"class":74},[57,144338,144166],{"class":140},[57,144340,51808],{"class":51497},[57,144342,51504],{"class":140},[57,144344,144345],{"class":59,"line":162},[57,144346,144175],{"class":63},[57,144348,144349,144351,144353,144355,144357,144359,144361,144363],{"class":59,"line":180},[57,144350,52341],{"class":140},[57,144352,51808],{"class":51497},[57,144354,53683],{"class":70},[57,144356,156],{"class":140},[57,144358,144188],{"class":74},[57,144360,144166],{"class":140},[57,144362,51808],{"class":51497},[57,144364,51504],{"class":140},[57,144366,144367],{"class":59,"line":186},[57,144368,144199],{"class":63},[57,144370,144371,144373,144375,144377,144379,144381,144383,144385],{"class":59,"line":197},[57,144372,52341],{"class":140},[57,144374,51808],{"class":51497},[57,144376,53683],{"class":70},[57,144378,156],{"class":140},[57,144380,144212],{"class":74},[57,144382,144166],{"class":140},[57,144384,51808],{"class":51497},[57,144386,51504],{"class":140},[57,144388,144389],{"class":59,"line":241},[57,144390,144223],{"class":63},[57,144392,144393,144395,144397,144399,144401,144403,144405,144407],{"class":59,"line":249},[57,144394,52341],{"class":140},[57,144396,51808],{"class":51497},[57,144398,53683],{"class":70},[57,144400,156],{"class":140},[57,144402,144236],{"class":74},[57,144404,144166],{"class":140},[57,144406,51808],{"class":51497},[57,144408,51504],{"class":140},[57,144410,144411,144413,144415],{"class":59,"line":262},[57,144412,51982],{"class":140},[57,144414,51808],{"class":51497},[57,144416,51504],{"class":140},[14,144418,70650],{},[49,144420,144421],{"className":127496,"code":130853,"language":127498,"meta":46,"style":46},[28,144422,144423,144427,144441,144445],{"__ignoreMap":46},[57,144424,144425],{"class":59,"line":60},[57,144426,130860],{"class":63},[57,144428,144429,144431,144433,144435,144437,144439],{"class":59,"line":67},[57,144430,1326],{"class":140},[57,144432,51808],{"class":51497},[57,144434,53683],{"class":70},[57,144436,156],{"class":140},[57,144438,130873],{"class":74},[57,144440,51504],{"class":140},[57,144442,144443],{"class":59,"line":144},[57,144444,130880],{"class":140},[57,144446,144447,144449,144451],{"class":59,"line":150},[57,144448,51982],{"class":140},[57,144450,51808],{"class":51497},[57,144452,51504],{"class":140},[342,144454,138150],{},{"title":46,"searchDepth":67,"depth":67,"links":144456},[144457,144458,144462,144463,144464],{"id":143601,"depth":67,"text":143602},{"id":143633,"depth":67,"text":143634,"children":144459},[144460,144461],{"id":143637,"depth":144,"text":143638},{"id":143654,"depth":144,"text":143655},{"id":143673,"depth":67,"text":143674},{"id":143680,"depth":67,"text":143681},{"id":143767,"depth":67,"text":143768,"children":144465},[144466,144467,144468,144469,144470],{"id":143774,"depth":144,"text":143775},{"id":143902,"depth":144,"text":143903},{"id":143996,"depth":144,"text":143997},{"id":144045,"depth":144,"text":144046},{"id":144055,"depth":144,"text":144056},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143593,"description":347},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144477,"title":144478,"body":144479,"description":347,"extension":348,"meta":145706,"navigation":350,"path":145707,"seo":145708,"stem":145709,"__hash__":145710},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144480,"toc":145684},[144481,144484,144488,144492,144495,144498,144502,144507,144510,144513,144516,144519,144522,144579,144582,144587,144590,144593,144597,144608,144612,144615,144618,144625,144630,144634,144637,144643,144646,144650,144653,144660,144663,144666,144673,144676,144683,144686,144689,144696,144699,144702,144704,144721,144725,144728,144731,144734,144738,144741,144744,144747,144750,144753,144756,144758,144761,144764,144826,144829,144939,144946,144952,144955,144958,144962,144965,144969,144974,144977,144984,144987,144993,144998,145001,145004,145007,145010,145013,145016,145019,145022,145078,145080,145106,145110,145113,145116,145119,145127,145130,145133,145137,145193,145196,145200,145206,145217,145220,145225,145228,145231,145237,145240,145243,145246,145249,145252,145255,145258,145261,145286,145292,145295,145298,145301,145304,145307,145310,145315,145318,145321,145324,145332,145335,145342,145345,145348,145350,145374,145376,145379,145382,145385,145388,145391,145394,145397,145431,145434,145437,145471,145478,145481,145484,145487,145490,145493,145496,145503,145506,145509,145512,145515,145522,145525,145528,145535,145538,145541,145545,145548,145551,145554,145557,145560,145563,145566,145569,145571,145595,145597,145621,145625,145636,145639,145642,145645,145648,145651,145654,145657,145660,145663,145666,145669,145672,145675,145678,145681],[10,144482,144478],{"id":144483},"_21-移动端布局实战下篇",[365,144485,144487],{"id":144486},"_211-rem适配布局","21.1 rem适配布局",[394,144489,144491],{"id":144490},"_2111-rem单位","21.1.1 rem单位",[44,144493],{"style":126605,"src":144494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,144496,144497],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[394,144499,144501],{"id":144500},"_2112-媒体查询","21.1.2 媒体查询",[377,144503,144504],{},[380,144505,144506],{},"参数介绍",[44,144508],{"style":126605,"src":144509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[44,144511],{"style":126605,"src":144512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[44,144514],{"style":126605,"src":144515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[44,144517],{"style":126605,"src":144518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[44,144520],{"style":126605,"src":144521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[49,144523,144525],{"className":126749,"code":144524,"language":126751,"meta":46,"style":46},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[28,144526,144527,144532,144551,144558,144571,144575],{"__ignoreMap":46},[57,144528,144529],{"class":59,"line":60},[57,144530,144531],{"class":63},"\u002F* 媒体查询 *\u002F\n",[57,144533,144534,144537,144539,144542,144544,144547,144549],{"class":59,"line":67},[57,144535,144536],{"class":136},"@media",[57,144538,1934],{"class":140},[57,144540,144541],{"class":81},"max-width",[57,144543,51634],{"class":140},[57,144545,144546],{"class":81},"768",[57,144548,51689],{"class":136},[57,144550,12715],{"class":140},[57,144552,144553,144556],{"class":59,"line":144},[57,144554,144555],{"class":70},"  .container",[57,144557,15844],{"class":140},[57,144559,144560,144563,144565,144567,144569],{"class":59,"line":150},[57,144561,144562],{"class":81},"    width",[57,144564,51634],{"class":140},[57,144566,728],{"class":81},[57,144568,745],{"class":136},[57,144570,1576],{"class":140},[57,144572,144573],{"class":59,"line":162},[57,144574,127545],{"class":140},[57,144576,144577],{"class":59,"line":180},[57,144578,1847],{"class":140},[14,144580,144581],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[377,144583,144584],{"start":67},[380,144585,144586],{},"引入资源",[44,144588],{"style":126605,"src":144589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,144591,144592],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[394,144594,144596],{"id":144595},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1422,144598,144599,144602,144605],{},[380,144600,144601],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[380,144603,144604],{},"媒体查询可以根据不同设备宽度来修改样式",[380,144606,144607],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[365,144609,144611],{"id":144610},"_212-less基础","21.2 Less基础",[14,144613,144614],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,144616,144617],{},"Less可以解决该问题，它是css的扩展语言",[14,144619,144620,144621],{},"Less中文网址： ",[18,144622,144623],{"href":144623,"rel":144624},"http:\u002F\u002Flesscss.cn\u002F",[22],[14,144626,144627],{},[33,144628,144629],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[394,144631,144633],{"id":144632},"_2121-less安装","21.2.1 less安装",[14,144635,144636],{},"如果使用vscode，则无需进行下方安装步骤",[14,144638,144639],{},[18,144640,144641],{"href":144641,"rel":144642},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[22],[44,144644],{"style":126605,"src":144645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[394,144647,144649],{"id":144648},"_2122-less使用","21.2.2 less使用",[14,144651,144652],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[377,144654,144655],{},[380,144656,144657],{},[33,144658,144659],{},"Less 变量",[44,144661],{"style":126605,"src":144662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[44,144664],{"style":126605,"src":144665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[377,144667,144668],{"start":67},[380,144669,144670],{},[33,144671,144672],{},"Less 编译",[44,144674],{"style":126605,"src":144675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[377,144677,144678],{"start":144},[380,144679,144680],{},[33,144681,144682],{},"Less 嵌套",[44,144684],{"style":126605,"src":144685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[44,144687],{"style":126605,"src":144688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[377,144690,144691],{"start":150},[380,144692,144693],{},[33,144694,144695],{},"Less 运算",[44,144697],{"style":126605,"src":144698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,144700,144701],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,144703,454],{},[1422,144705,144706,144709,144712,144715,144718],{},[380,144707,144708],{},"乘号（*）和除号（\u002F）的写法",[380,144710,144711],{},"运算符中间左右有个空格隔开 1px + 5",[380,144713,144714],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[380,144716,144717],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[380,144719,144720],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[365,144722,144724],{"id":144723},"_213-rem-适配方案","21.3 rem 适配方案",[14,144726,144727],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,144729,144730],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[44,144732],{"style":126605,"src":144733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[394,144735,144737],{"id":144736},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,144739,144740],{},"rem + 媒体查询 + less 技术",[44,144742],{"style":126605,"src":144743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,144745,144746],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,144748,144749],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[44,144751],{"style":126605,"src":144752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,144754,144755],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,144757,14905],{},[44,144759],{"style":126605,"src":144760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,144762,144763],{},"index.html:",[49,144765,144767],{"className":126749,"code":144766,"language":126751,"meta":46,"style":46},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[28,144768,144769,144774,144780,144796,144800,144806,144822],{"__ignoreMap":46},[57,144770,144771],{"class":59,"line":60},[57,144772,144773],{"class":63},"\u002F* rem 适配方案 *\u002F\n",[57,144775,144776,144778],{"class":59,"line":67},[57,144777,50832],{"class":51497},[57,144779,15844],{"class":140},[57,144781,144782,144784,144786,144789,144791,144793],{"class":59,"line":144},[57,144783,70823],{"class":81},[57,144785,51634],{"class":140},[57,144787,144788],{"class":81},"62.5",[57,144790,745],{"class":136},[57,144792,130612],{"class":140},[57,144794,144795],{"class":63},"\u002F* 1rem = 10px *\u002F\n",[57,144797,144798],{"class":59,"line":150},[57,144799,1847],{"class":140},[57,144801,144802,144804],{"class":59,"line":162},[57,144803,130597],{"class":70},[57,144805,15844],{"class":140},[57,144807,144808,144810,144812,144814,144817,144819],{"class":59,"line":180},[57,144809,70765],{"class":81},[57,144811,51634],{"class":140},[57,144813,862],{"class":81},[57,144815,144816],{"class":136},"rem",[57,144818,130612],{"class":140},[57,144820,144821],{"class":63},"\u002F* 100px *\u002F\n",[57,144823,144824],{"class":59,"line":186},[57,144825,1847],{"class":140},[14,144827,144828],{},"common.less",[49,144830,144832],{"className":126749,"code":144831,"language":126751,"meta":46,"style":46},"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",[28,144833,144834,144840,144855,144859,144865,144879,144883,144887,144891,144897,144911,144915,144921,144935],{"__ignoreMap":46},[57,144835,144836,144838],{"class":59,"line":60},[57,144837,50832],{"class":51497},[57,144839,15844],{"class":140},[57,144841,144842,144844,144846,144848,144850,144852],{"class":59,"line":67},[57,144843,70823],{"class":81},[57,144845,51634],{"class":140},[57,144847,144788],{"class":81},[57,144849,745],{"class":136},[57,144851,26336],{"class":140},[57,144853,144854],{"class":63},"\u002F* 10px *\u002F\n",[57,144856,144857],{"class":59,"line":144},[57,144858,1847],{"class":140},[57,144860,144861,144863],{"class":59,"line":150},[57,144862,51808],{"class":51497},[57,144864,15844],{"class":140},[57,144866,144867,144869,144871,144873,144875,144877],{"class":59,"line":162},[57,144868,70765],{"class":81},[57,144870,51634],{"class":140},[57,144872,862],{"class":81},[57,144874,144816],{"class":136},[57,144876,26336],{"class":140},[57,144878,144821],{"class":63},[57,144880,144881],{"class":59,"line":180},[57,144882,1847],{"class":140},[57,144884,144885],{"class":59,"line":186},[57,144886,136210],{"class":140},[57,144888,144889],{"class":59,"line":197},[57,144890,144773],{"class":63},[57,144892,144893,144895],{"class":59,"line":241},[57,144894,50832],{"class":51497},[57,144896,15844],{"class":140},[57,144898,144899,144901,144903,144905,144907,144909],{"class":59,"line":249},[57,144900,70823],{"class":81},[57,144902,51634],{"class":140},[57,144904,144788],{"class":81},[57,144906,745],{"class":136},[57,144908,130612],{"class":140},[57,144910,144795],{"class":63},[57,144912,144913],{"class":59,"line":262},[57,144914,1847],{"class":140},[57,144916,144917,144919],{"class":59,"line":281},[57,144918,130597],{"class":70},[57,144920,15844],{"class":140},[57,144922,144923,144925,144927,144929,144931,144933],{"class":59,"line":287},[57,144924,70765],{"class":81},[57,144926,51634],{"class":140},[57,144928,862],{"class":81},[57,144930,144816],{"class":136},[57,144932,130612],{"class":140},[57,144934,144821],{"class":63},[57,144936,144937],{"class":59,"line":298},[57,144938,1847],{"class":140},[14,144940,144941,144942,144945],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23825,144943,144944],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[49,144947,144950],{"className":144948,"code":144949,"language":5460},[5458],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[28,144951,144949],{"__ignoreMap":46},[14,144953,144954],{},"less保存时会自动变成.css文件",[14,144956,144957],{},"好好搞懂上述代码写法",[394,144959,144961],{"id":144960},"_2132-样式导入样式","21.3.2 样式导入样式",[44,144963],{"style":126605,"src":144964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[394,144966,144968],{"id":144967},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[377,144970,144971],{},[380,144972,144973],{},"准备工作",[44,144975],{"style":126605,"src":144976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,144978,144979,144980],{},"github地址：",[18,144981,144982],{"href":144982,"rel":144983},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[22],[14,144985,144986],{},"下载之后，将index.js文件拖到项目中就可以了",[14,144988,144989,144990],{},"js文件引入到index.html中使用的是",[28,144991,144992],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[377,144994,144995],{"start":67},[380,144996,144997],{},"vscode插件",[44,144999],{"style":126605,"src":145000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,145002,145003],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,145005,145006],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[44,145008],{"style":126605,"src":145009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,145011,145012],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[44,145014],{"style":126605,"src":145015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,145017,145018],{},"修改成75就可以，alt+z为快捷键",[14,145020,145021],{},"index.css：",[49,145023,145024],{"className":126749,"code":144766,"language":126751,"meta":46,"style":46},[28,145025,145026,145030,145036,145050,145054,145060,145074],{"__ignoreMap":46},[57,145027,145028],{"class":59,"line":60},[57,145029,144773],{"class":63},[57,145031,145032,145034],{"class":59,"line":67},[57,145033,50832],{"class":51497},[57,145035,15844],{"class":140},[57,145037,145038,145040,145042,145044,145046,145048],{"class":59,"line":144},[57,145039,70823],{"class":81},[57,145041,51634],{"class":140},[57,145043,144788],{"class":81},[57,145045,745],{"class":136},[57,145047,130612],{"class":140},[57,145049,144795],{"class":63},[57,145051,145052],{"class":59,"line":150},[57,145053,1847],{"class":140},[57,145055,145056,145058],{"class":59,"line":162},[57,145057,130597],{"class":70},[57,145059,15844],{"class":140},[57,145061,145062,145064,145066,145068,145070,145072],{"class":59,"line":180},[57,145063,70765],{"class":81},[57,145065,51634],{"class":140},[57,145067,862],{"class":81},[57,145069,144816],{"class":136},[57,145071,130612],{"class":140},[57,145073,144821],{"class":63},[57,145075,145076],{"class":59,"line":186},[57,145077,1847],{"class":140},[14,145079,144763],{},[49,145081,145082],{"className":126749,"code":127153,"language":126751,"meta":46,"style":46},[28,145083,145084,145090,145102],{"__ignoreMap":46},[57,145085,145086,145088],{"class":59,"line":60},[57,145087,51997],{"class":51497},[57,145089,15844],{"class":140},[57,145091,145092,145094,145096,145098,145100],{"class":59,"line":67},[57,145093,70823],{"class":81},[57,145095,51634],{"class":140},[57,145097,1017],{"class":81},[57,145099,51689],{"class":136},[57,145101,1576],{"class":140},[57,145103,145104],{"class":59,"line":144},[57,145105,1847],{"class":140},[365,145107,145109],{"id":145108},"_214-响应式开发","21.4 响应式开发",[14,145111,145112],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[44,145114],{"style":126605,"src":145115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,145117,145118],{},"做法：",[1422,145120,145121,145124],{},[380,145122,145123],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[380,145125,145126],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[44,145128],{"style":126605,"src":145129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,145131,145132],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[394,145134,145136],{"id":145135},"_2141-简单代码示范","21.4.1 简单代码示范",[49,145138,145139],{"className":126749,"code":144766,"language":126751,"meta":46,"style":46},[28,145140,145141,145145,145151,145165,145169,145175,145189],{"__ignoreMap":46},[57,145142,145143],{"class":59,"line":60},[57,145144,144773],{"class":63},[57,145146,145147,145149],{"class":59,"line":67},[57,145148,50832],{"class":51497},[57,145150,15844],{"class":140},[57,145152,145153,145155,145157,145159,145161,145163],{"class":59,"line":144},[57,145154,70823],{"class":81},[57,145156,51634],{"class":140},[57,145158,144788],{"class":81},[57,145160,745],{"class":136},[57,145162,130612],{"class":140},[57,145164,144795],{"class":63},[57,145166,145167],{"class":59,"line":150},[57,145168,1847],{"class":140},[57,145170,145171,145173],{"class":59,"line":162},[57,145172,130597],{"class":70},[57,145174,15844],{"class":140},[57,145176,145177,145179,145181,145183,145185,145187],{"class":59,"line":180},[57,145178,70765],{"class":81},[57,145180,51634],{"class":140},[57,145182,862],{"class":81},[57,145184,144816],{"class":136},[57,145186,130612],{"class":140},[57,145188,144821],{"class":63},[57,145190,145191],{"class":59,"line":186},[57,145192,1847],{"class":140},[14,145194,145195],{},"父盒子一般命名为container",[394,145197,145199],{"id":145198},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,145201,145202,145203],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[33,145204,145205],{},"使得 Web 开发更加快捷",[1422,145207,145208],{},[380,145209,145210,145211],{},"官网：",[33,145212,145213],{},[18,145214,145215],{"href":145215,"rel":145216},"http:\u002F\u002Fgetbootstrap.com\u002F",[22],[14,145218,145219],{},"可以直接去官网拿现成的东西",[377,145221,145222],{},[380,145223,145224],{},"Bootstrap的使用",[14,145226,145227],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,145229,145230],{},"Bootstrap 使用四步曲：",[14,145232,145233,145236],{},[33,145234,145235],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[44,145238],{"style":126605,"src":145239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,145241,145242],{},"打开Bootstrap官网，然后下载",[44,145244],{"style":126605,"src":145245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[44,145247],{"style":126605,"src":145248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,145250,145251],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,145253,145254],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,145256,145257],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[44,145259],{"style":126605,"src":145260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[49,145262,145264],{"className":126749,"code":145263,"language":126751,"meta":46,"style":46},".center {\n  color: red;\n}\n",[28,145265,145266,145272,145282],{"__ignoreMap":46},[57,145267,145268,145270],{"class":59,"line":60},[57,145269,127040],{"class":70},[57,145271,15844],{"class":140},[57,145273,145274,145276,145278,145280],{"class":59,"line":67},[57,145275,71102],{"class":81},[57,145277,51634],{"class":140},[57,145279,57618],{"class":81},[57,145281,1576],{"class":140},[57,145283,145284],{"class":59,"line":144},[57,145285,1847],{"class":140},[14,145287,145288,145291],{},[28,145289,145290],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[44,145293],{"style":126605,"src":145294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[44,145296],{"style":126605,"src":145297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[44,145299],{"style":126605,"src":145300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,145302,145303],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[44,145305],{"style":126605,"src":145306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,145308,145309],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[377,145311,145312],{"start":67},[380,145313,145314],{},"布局容器",[44,145316],{"style":126605,"src":145317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,145319,145320],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,145322,145323],{},"container-fluid用于移动式布局比较方便",[377,145325,145326],{"start":144},[380,145327,145328,145329],{},"bootstrap ",[33,145330,145331],{},"栅格系统原理",[44,145333],{"style":126605,"src":145334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[377,145336,145337],{"start":150},[380,145338,145339],{},[33,145340,145341],{},"栅格选项参数",[44,145343],{"style":126605,"src":145344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,145346,145347],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,145349,14905],{},[49,145351,145352],{"className":126749,"code":145263,"language":126751,"meta":46,"style":46},[28,145353,145354,145360,145370],{"__ignoreMap":46},[57,145355,145356,145358],{"class":59,"line":60},[57,145357,127040],{"class":70},[57,145359,15844],{"class":140},[57,145361,145362,145364,145366,145368],{"class":59,"line":67},[57,145363,71102],{"class":81},[57,145365,51634],{"class":140},[57,145367,57618],{"class":81},[57,145369,1576],{"class":140},[57,145371,145372],{"class":59,"line":144},[57,145373,1847],{"class":140},[14,145375,135792],{},[44,145377],{"style":126605,"src":145378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,145380,145381],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,145383,145384],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,145386,145387],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,145389,145390],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,145392,145393],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,145395,145396],{},"汇总展示说明：",[49,145398,145399],{"className":127496,"code":130853,"language":127498,"meta":46,"style":46},[28,145400,145401,145405,145419,145423],{"__ignoreMap":46},[57,145402,145403],{"class":59,"line":60},[57,145404,130860],{"class":63},[57,145406,145407,145409,145411,145413,145415,145417],{"class":59,"line":67},[57,145408,1326],{"class":140},[57,145410,51808],{"class":51497},[57,145412,53683],{"class":70},[57,145414,156],{"class":140},[57,145416,130873],{"class":74},[57,145418,51504],{"class":140},[57,145420,145421],{"class":59,"line":144},[57,145422,130880],{"class":140},[57,145424,145425,145427,145429],{"class":59,"line":150},[57,145426,51982],{"class":140},[57,145428,51808],{"class":51497},[57,145430,51504],{"class":140},[44,145432],{"style":126605,"src":145433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,145435,145436],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[49,145438,145439],{"className":127496,"code":130853,"language":127498,"meta":46,"style":46},[28,145440,145441,145445,145459,145463],{"__ignoreMap":46},[57,145442,145443],{"class":59,"line":60},[57,145444,130860],{"class":63},[57,145446,145447,145449,145451,145453,145455,145457],{"class":59,"line":67},[57,145448,1326],{"class":140},[57,145450,51808],{"class":51497},[57,145452,53683],{"class":70},[57,145454,156],{"class":140},[57,145456,130873],{"class":74},[57,145458,51504],{"class":140},[57,145460,145461],{"class":59,"line":144},[57,145462,130880],{"class":140},[57,145464,145465,145467,145469],{"class":59,"line":150},[57,145466,51982],{"class":140},[57,145468,51808],{"class":51497},[57,145470,51504],{"class":140},[377,145472,145473],{"start":162},[380,145474,145475],{},[33,145476,145477],{},"列嵌套",[44,145479],{"style":126605,"src":145480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,145482,145483],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,145485,145486],{},"没加row内部这样：",[44,145488],{"style":126605,"src":145489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,145491,145492],{},"加上row之后内部为：",[44,145494],{"style":126605,"src":145495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[377,145497,145498],{"start":180},[380,145499,145500],{},[33,145501,145502],{},"列偏移",[44,145504],{"style":126605,"src":145505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,145507,145508],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,145510,145511],{},"要加偏移量，即偏移份数",[14,145513,145514],{},"偏移的份数=12-两个盒子的份数",[377,145516,145517],{"start":186},[380,145518,145519],{},[33,145520,145521],{},"列排序",[44,145523],{"style":126605,"src":145524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,145526,145527],{},"pull拉左；push推右",[377,145529,145530],{"start":197},[380,145531,145532],{},[33,145533,145534],{},"响应式工具",[44,145536],{"style":126605,"src":145537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,145539,145540],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[394,145542,145544],{"id":145543},"_2143-响应式小项目","21.4.3 响应式小项目",[14,145546,145547],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,145549,145550],{},"ul {",[14,145552,145553],{},"list-style: none;",[14,145555,145556],{},"margin:0;",[14,145558,145559],{},"padding:0; }",[44,145561],{"style":126605,"src":145562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[44,145564],{"style":126605,"src":145565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,145567,145568],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,145570,69086],{},[49,145572,145573],{"className":126749,"code":139419,"language":126751,"meta":46,"style":46},[28,145574,145575,145581,145591],{"__ignoreMap":46},[57,145576,145577,145579],{"class":59,"line":60},[57,145578,130597],{"class":70},[57,145580,15844],{"class":140},[57,145582,145583,145585,145587,145589],{"class":59,"line":67},[57,145584,131229],{"class":81},[57,145586,51634],{"class":140},[57,145588,24008],{"class":81},[57,145590,1576],{"class":140},[57,145592,145593],{"class":59,"line":144},[57,145594,1847],{"class":140},[14,145596,70650],{},[49,145598,145599],{"className":126749,"code":139419,"language":126751,"meta":46,"style":46},[28,145600,145601,145607,145617],{"__ignoreMap":46},[57,145602,145603,145605],{"class":59,"line":60},[57,145604,130597],{"class":70},[57,145606,15844],{"class":140},[57,145608,145609,145611,145613,145615],{"class":59,"line":67},[57,145610,131229],{"class":81},[57,145612,51634],{"class":140},[57,145614,24008],{"class":81},[57,145616,1576],{"class":140},[57,145618,145619],{"class":59,"line":144},[57,145620,1847],{"class":140},[365,145622,145624],{"id":145623},"_215-swiper-插件使用","21.5 swiper 插件使用",[1422,145626,145627,145630,145633],{},[380,145628,145629],{},"下载需要的css和js文件html页面中 引入相关文件",[380,145631,145632],{},"官网找到类似案例，复制html结构，css样式 js 语法",[380,145634,145635],{},"根据需求定制修改模块",[44,145637],{"style":126605,"src":145638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,145640,145641],{},"解压后将这两部分放到项目中",[44,145643],{"style":126605,"src":145644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,145646,145647],{},"这个插件可以帮助我们实现轮播图效果",[14,145649,145650],{},"用法：",[44,145652],{"style":126605,"src":145653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,145655,145656],{},"找到自己喜欢的",[44,145658],{"style":126605,"src":145659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,145661,145662],{},"右键，查看网页源代码",[44,145664],{"style":126605,"src":145665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,145667,145668],{},"复制人家的结构内容",[14,145670,145671],{},"然后去看API文档：",[44,145673],{"style":126605,"src":145674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,145676,145677],{},"可以看看如何修改样式",[14,145679,145680],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[342,145682,145683],{},"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":46,"searchDepth":67,"depth":67,"links":145685},[145686,145691,145695,145700,145705],{"id":144486,"depth":67,"text":144487,"children":145687},[145688,145689,145690],{"id":144490,"depth":144,"text":144491},{"id":144500,"depth":144,"text":144501},{"id":144595,"depth":144,"text":144596},{"id":144610,"depth":67,"text":144611,"children":145692},[145693,145694],{"id":144632,"depth":144,"text":144633},{"id":144648,"depth":144,"text":144649},{"id":144723,"depth":67,"text":144724,"children":145696},[145697,145698,145699],{"id":144736,"depth":144,"text":144737},{"id":144960,"depth":144,"text":144961},{"id":144967,"depth":144,"text":144968},{"id":145108,"depth":67,"text":145109,"children":145701},[145702,145703,145704],{"id":145135,"depth":144,"text":145136},{"id":145198,"depth":144,"text":145199},{"id":145543,"depth":144,"text":145544},{"id":145623,"depth":67,"text":145624},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144478,"description":347},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145712,"title":145713,"body":145714,"description":347,"extension":348,"meta":145934,"navigation":350,"path":145935,"seo":145936,"stem":145937,"__hash__":145938},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145715,"toc":145930},[145716,145719,145723,145726,145741,145746,145749,145754,145789,145794,145806,145811,145824,145829,145846,145851,145871,145876,145894,145897,145900,145903,145906,145910,145913,145916,145919,145922,145925,145928],[10,145717,145713],{"id":145718},"_22-代码提交与新型相对单位",[365,145720,145722],{"id":145721},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,145724,145725],{},"法1：",[377,145727,145728,145735,145738],{},[380,145729,145730,145731],{},"登录网站注册：",[18,145732,145733],{"href":145733,"rel":145734},"https:\u002F\u002Fgitee.com\u002F",[22],[380,145736,145737],{},"码云创建新的仓库",[380,145739,145740],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1422,145742,145743],{},[380,145744,145745],{},"在网站根目录右键-- Git Bash Here",[44,145747],{"style":126605,"src":145748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1422,145750,145751],{},[380,145752,145753],{},"如果是第一次利用git提交，请配置好全局选项",[49,145755,145757],{"className":117493,"code":145756,"language":117495,"meta":46,"style":46},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[28,145758,145759,145775],{"__ignoreMap":46},[57,145760,145761,145764,145766,145769,145772],{"class":59,"line":60},[57,145762,145763],{"class":70},"git",[57,145765,119916],{"class":74},[57,145767,145768],{"class":81}," --global",[57,145770,145771],{"class":74}," user.name",[57,145773,145774],{"class":74}," \"你的名字\"\n",[57,145776,145777,145779,145781,145783,145786],{"class":59,"line":67},[57,145778,145763],{"class":70},[57,145780,119916],{"class":74},[57,145782,145768],{"class":81},[57,145784,145785],{"class":74}," user.email",[57,145787,145788],{"class":74}," \"你的邮箱\"\n",[1422,145790,145791],{},[380,145792,145793],{},"初始化仓库",[49,145795,145797],{"className":117493,"code":145796,"language":117495,"meta":46,"style":46},"git init\n",[28,145798,145799],{"__ignoreMap":46},[57,145800,145801,145803],{"class":59,"line":60},[57,145802,145763],{"class":70},[57,145804,145805],{"class":74}," init\n",[1422,145807,145808],{},[380,145809,145810],{},"把本地文件放到暂存区",[49,145812,145814],{"className":117493,"code":145813,"language":117495,"meta":46,"style":46},"git add .\n",[28,145815,145816],{"__ignoreMap":46},[57,145817,145818,145820,145822],{"class":59,"line":60},[57,145819,145763],{"class":70},[57,145821,5482],{"class":74},[57,145823,29010],{"class":74},[1422,145825,145826],{},[380,145827,145828],{},"把本地文件放到本地仓库里面",[49,145830,145832],{"className":117493,"code":145831,"language":117495,"meta":46,"style":46},"git commit -m \"first commit\"\n",[28,145833,145834],{"__ignoreMap":46},[57,145835,145836,145838,145841,145843],{"class":59,"line":60},[57,145837,145763],{"class":70},[57,145839,145840],{"class":74}," commit",[57,145842,101079],{"class":81},[57,145844,145845],{"class":74}," \"first commit\"\n",[1422,145847,145848],{},[380,145849,145850],{},"链接远程仓库",[49,145852,145854],{"className":117493,"code":145853,"language":117495,"meta":46,"style":46},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[28,145855,145856],{"__ignoreMap":46},[57,145857,145858,145860,145863,145865,145868],{"class":59,"line":60},[57,145859,145763],{"class":70},[57,145861,145862],{"class":74}," remote",[57,145864,5482],{"class":74},[57,145866,145867],{"class":74}," origin",[57,145869,145870],{"class":74}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1422,145872,145873],{},[380,145874,145875],{},"把本地仓库的文件推送到远程仓库 push",[49,145877,145879],{"className":117493,"code":145878,"language":117495,"meta":46,"style":46},"git push -u origin master\n",[28,145880,145881],{"__ignoreMap":46},[57,145882,145883,145885,145887,145889,145891],{"class":59,"line":60},[57,145884,145763],{"class":70},[57,145886,29285],{"class":74},[57,145888,28559],{"class":81},[57,145890,145867],{"class":74},[57,145892,145893],{"class":74}," master\n",[44,145895],{"style":126605,"src":145896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,145898,145899],{},"上方方法暂未实现，后边学完git后在整",[14,145901,145902],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[44,145904],{"style":126605,"src":145905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[365,145907,145909],{"id":145908},"_222-新型相对单位","22.2 新型相对单位",[44,145911],{"style":126605,"src":145912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[44,145914],{"style":126605,"src":145915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,145917,145918],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,145920,145921],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[44,145923],{"style":126605,"src":145924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,145926,145927],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[342,145929,24226],{},{"title":46,"searchDepth":67,"depth":67,"links":145931},[145932,145933],{"id":145721,"depth":67,"text":145722},{"id":145908,"depth":67,"text":145909},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145713,"description":347},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145940,"title":145941,"body":145942,"description":145946,"extension":348,"meta":145947,"navigation":350,"path":145948,"seo":145949,"stem":145950,"__hash__":145951},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145943,"toc":145944},[],{"title":46,"searchDepth":67,"depth":67,"links":145945},[],"自己正经开始学编程的第一门语言！",{"category":93036},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145941,"description":145946},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145953,"title":145954,"body":145955,"description":347,"extension":348,"meta":147102,"navigation":350,"path":147103,"seo":147104,"stem":147105,"__hash__":147106},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145956,"toc":147078},[145957,145960,145964,145967,145970,145995,145998,146004,146008,146011,146038,146041,146081,146084,146096,146099,146105,146109,146113,146140,146157,146164,146168,146171,146197,146200,146204,146207,146247,146250,146267,146273,146277,146282,146326,146329,146347,146350,146418,146422,146429,146432,146447,146450,146459,146462,146473,146476,146485,146488,146505,146508,146523,146527,146531,146534,146536,146556,146560,146563,146566,146577,146580,146586,146590,146596,146623,146626,146638,146641,146652,146655,146661,146665,146671,146721,146724,146766,146769,146802,146805,146839,146843,146846,146866,146869,146905,146908,146921,146925,146929,146935,146938,146951,146955,146958,146964,146967,146971,146974,146977,147026,147030,147046,147052,147059,147065,147075],[10,145958,145954],{"id":145959},"_1-python环境与第一个程序",[365,145961,145963],{"id":145962},"_11-什么是python","1.1 什么是Python",[14,145965,145966],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,145968,145969],{},"理解 Python 时抓住三个关键词：",[377,145971,145972,145975,145978],{},[380,145973,145974],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[380,145976,145977],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[380,145979,145980,145981,630,145984,630,145987,630,145990,630,145992,28654],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[28,145982,145983],{},"os",[28,145985,145986],{},"sys",[28,145988,145989],{},"json",[28,145991,58057],{},[28,145993,145994],{},"datetime",[14,145996,145997],{},"Python 程序的运行链路：",[49,145999,146002],{"className":146000,"code":146001,"language":5460,"meta":46},[5458],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[28,146003,146001],{"__ignoreMap":46},[365,146005,146007],{"id":146006},"_12-python解释器","1.2 Python解释器",[14,146009,146010],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[49,146012,146014],{"className":51,"code":146013,"language":53,"meta":46,"style":46},"python --version\npython3 --version\npython\npython3\n",[28,146015,146016,146022,146028,146033],{"__ignoreMap":46},[57,146017,146018,146020],{"class":59,"line":60},[57,146019,124],{"class":70},[57,146021,26562],{"class":81},[57,146023,146024,146026],{"class":59,"line":67},[57,146025,101076],{"class":70},[57,146027,26562],{"class":81},[57,146029,146030],{"class":59,"line":144},[57,146031,146032],{"class":70},"python\n",[57,146034,146035],{"class":59,"line":150},[57,146036,146037],{"class":70},"python3\n",[14,146039,146040],{},"进入交互模式后，可以直接输入表达式：",[49,146042,146044],{"className":122,"code":146043,"language":124,"meta":46,"style":46},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[28,146045,146046,146057,146062,146076],{"__ignoreMap":46},[57,146047,146048,146051,146053,146055],{"class":59,"line":60},[57,146049,146050],{"class":136},">>>",[57,146052,25387],{"class":81},[57,146054,45763],{"class":136},[57,146056,47920],{"class":81},[57,146058,146059],{"class":59,"line":67},[57,146060,146061],{"class":81},"3\n",[57,146063,146064,146066,146069,146071,146074],{"class":59,"line":144},[57,146065,146050],{"class":136},[57,146067,146068],{"class":81}," print",[57,146070,168],{"class":140},[57,146072,146073],{"class":74},"\"hello python\"",[57,146075,238],{"class":140},[57,146077,146078],{"class":59,"line":150},[57,146079,146080],{"class":140},"hello python\n",[14,146082,146083],{},"退出交互模式：",[49,146085,146087],{"className":122,"code":146086,"language":124,"meta":46,"style":46},"exit()\n",[28,146088,146089],{"__ignoreMap":46},[57,146090,146091,146094],{"class":59,"line":60},[57,146092,146093],{"class":81},"exit",[57,146095,2249],{"class":140},[14,146097,146098],{},"或使用快捷键：",[49,146100,146103],{"className":146101,"code":146102,"language":5460,"meta":46},[5458],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[28,146104,146102],{"__ignoreMap":46},[365,146106,146108],{"id":146107},"_13-安装python","1.3 安装Python",[394,146110,146112],{"id":146111},"_131-windows安装","1.3.1 Windows安装",[377,146114,146115,146122,146125,146131,146137],{},[380,146116,146117,146118],{},"打开 Python 官网：",[18,146119,146120],{"href":146120,"rel":146121},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[22],[380,146123,146124],{},"下载 Windows Installer。",[380,146126,146127,146128,28654],{},"安装时勾选 ",[28,146129,146130],{},"Add Python to PATH",[380,146132,146133,146134,28654],{},"点击 ",[28,146135,146136],{},"Install Now",[380,146138,146139],{},"安装完成后打开命令提示符验证：",[49,146141,146143],{"className":51,"code":146142,"language":53,"meta":46,"style":46},"python --version\npip --version\n",[28,146144,146145,146151],{"__ignoreMap":46},[57,146146,146147,146149],{"class":59,"line":60},[57,146148,124],{"class":70},[57,146150,26562],{"class":81},[57,146152,146153,146155],{"class":59,"line":67},[57,146154,24101],{"class":70},[57,146156,26562],{"class":81},[14,146158,146159,146160,146163],{},"如果提示 ",[28,146161,146162],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[394,146165,146167],{"id":146166},"_132-macos安装","1.3.2 macOS安装",[14,146169,146170],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[49,146172,146174],{"className":51,"code":146173,"language":53,"meta":46,"style":46},"brew install python\npython3 --version\npip3 --version\n",[28,146175,146176,146185,146191],{"__ignoreMap":46},[57,146177,146178,146181,146183],{"class":59,"line":60},[57,146179,146180],{"class":70},"brew",[57,146182,75],{"class":74},[57,146184,124515],{"class":74},[57,146186,146187,146189],{"class":59,"line":67},[57,146188,101076],{"class":70},[57,146190,26562],{"class":81},[57,146192,146193,146195],{"class":59,"line":144},[57,146194,119897],{"class":70},[57,146196,26562],{"class":81},[14,146198,146199],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[394,146201,146203],{"id":146202},"_133-linux安装","1.3.3 Linux安装",[14,146205,146206],{},"Ubuntu\u002FDebian：",[49,146208,146210],{"className":51,"code":146209,"language":53,"meta":46,"style":46},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[28,146211,146212,146220,146235,146241],{"__ignoreMap":46},[57,146213,146214,146216,146218],{"class":59,"line":60},[57,146215,24845],{"class":70},[57,146217,117514],{"class":74},[57,146219,26511],{"class":74},[57,146221,146222,146224,146226,146228,146230,146232],{"class":59,"line":67},[57,146223,24845],{"class":70},[57,146225,117514],{"class":74},[57,146227,75],{"class":74},[57,146229,104600],{"class":74},[57,146231,100995],{"class":74},[57,146233,146234],{"class":74}," python3-venv\n",[57,146236,146237,146239],{"class":59,"line":144},[57,146238,101076],{"class":70},[57,146240,26562],{"class":81},[57,146242,146243,146245],{"class":59,"line":150},[57,146244,119897],{"class":70},[57,146246,26562],{"class":81},[14,146248,146249],{},"Fedora：",[49,146251,146253],{"className":51,"code":146252,"language":53,"meta":46,"style":46},"sudo dnf install python3 python3-pip\n",[28,146254,146255],{"__ignoreMap":46},[57,146256,146257,146259,146261,146263,146265],{"class":59,"line":60},[57,146258,24845],{"class":70},[57,146260,26584],{"class":74},[57,146262,75],{"class":74},[57,146264,104600],{"class":74},[57,146266,119962],{"class":74},[14,146268,146269,146270,146272],{},"Linux 上通常使用 ",[28,146271,101076],{}," 命令，避免和系统旧版本 Python 冲突。",[365,146274,146276],{"id":146275},"_14-pip包管理器","1.4 pip包管理器",[14,146278,146279,146281],{},[28,146280,24101],{}," 用来安装第三方库。",[49,146283,146285],{"className":51,"code":146284,"language":53,"meta":46,"style":46},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[28,146286,146287,146296,146305,146313,146319],{"__ignoreMap":46},[57,146288,146289,146291,146293],{"class":59,"line":60},[57,146290,24101],{"class":70},[57,146292,75],{"class":74},[57,146294,146295],{"class":74}," requests\n",[57,146297,146298,146300,146303],{"class":59,"line":67},[57,146299,24101],{"class":70},[57,146301,146302],{"class":74}," uninstall",[57,146304,146295],{"class":74},[57,146306,146307,146309,146311],{"class":59,"line":144},[57,146308,24101],{"class":70},[57,146310,117771],{"class":74},[57,146312,146295],{"class":74},[57,146314,146315,146317],{"class":59,"line":150},[57,146316,24101],{"class":70},[57,146318,119152],{"class":74},[57,146320,146321,146323],{"class":59,"line":162},[57,146322,24101],{"class":70},[57,146324,146325],{"class":74}," freeze\n",[14,146327,146328],{},"国内网络较慢时可以临时使用镜像：",[49,146330,146332],{"className":51,"code":146331,"language":53,"meta":46,"style":46},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[28,146333,146334],{"__ignoreMap":46},[57,146335,146336,146338,146340,146343,146345],{"class":59,"line":60},[57,146337,24101],{"class":70},[57,146339,75],{"class":74},[57,146341,146342],{"class":74}," requests",[57,146344,26699],{"class":81},[57,146346,119925],{"class":74},[14,146348,146349],{},"常见第三方库：",[557,146351,146352,146361],{},[560,146353,146354],{},[563,146355,146356,146359],{},[566,146357,146358],{},"库",[566,146360,102893],{},[603,146362,146363,146371,146378,146386,146394,146402,146410],{},[563,146364,146365,146368],{},[608,146366,146367],{},"requests",[608,146369,146370],{},"网络请求",[563,146372,146373,146375],{},[608,146374,100823],{},[608,146376,146377],{},"数值计算",[563,146379,146380,146383],{},[608,146381,146382],{},"pandas",[608,146384,146385],{},"表格数据处理",[563,146387,146388,146391],{},[608,146389,146390],{},"matplotlib",[608,146392,146393],{},"绘图",[563,146395,146396,146399],{},[608,146397,146398],{},"pyecharts",[608,146400,146401],{},"ECharts 图表",[563,146403,146404,146407],{},[608,146405,146406],{},"flask",[608,146408,146409],{},"Web 后端",[563,146411,146412,146415],{},[608,146413,146414],{},"pytest",[608,146416,146417],{},"自动化测试",[365,146419,146421],{"id":146420},"_15-虚拟环境","1.5 虚拟环境",[14,146423,146424,146425,146428],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[28,146426,146427],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,146430,146431],{},"创建虚拟环境：",[49,146433,146435],{"className":51,"code":146434,"language":53,"meta":46,"style":46},"python -m venv .venv\n",[28,146436,146437],{"__ignoreMap":46},[57,146438,146439,146441,146443,146445],{"class":59,"line":60},[57,146440,124],{"class":70},[57,146442,101079],{"class":81},[57,146444,101082],{"class":74},[57,146446,101085],{"class":74},[14,146448,146449],{},"Windows 激活：",[49,146451,146453],{"className":51,"code":146452,"language":53,"meta":46,"style":46},".venv\\Scripts\\activate\n",[28,146454,146455],{"__ignoreMap":46},[57,146456,146457],{"class":59,"line":60},[57,146458,146452],{"class":70},[14,146460,146461],{},"macOS\u002FLinux 激活：",[49,146463,146465],{"className":51,"code":146464,"language":53,"meta":46,"style":46},"source .venv\u002Fbin\u002Factivate\n",[28,146466,146467],{"__ignoreMap":46},[57,146468,146469,146471],{"class":59,"line":60},[57,146470,101090],{"class":81},[57,146472,101093],{"class":74},[14,146474,146475],{},"退出虚拟环境：",[49,146477,146479],{"className":51,"code":146478,"language":53,"meta":46,"style":46},"deactivate\n",[28,146480,146481],{"__ignoreMap":46},[57,146482,146483],{"class":59,"line":60},[57,146484,146478],{"class":70},[14,146486,146487],{},"保存依赖：",[49,146489,146491],{"className":51,"code":146490,"language":53,"meta":46,"style":46},"pip freeze > requirements.txt\n",[28,146492,146493],{"__ignoreMap":46},[57,146494,146495,146497,146500,146502],{"class":59,"line":60},[57,146496,24101],{"class":70},[57,146498,146499],{"class":74}," freeze",[57,146501,26491],{"class":136},[57,146503,146504],{"class":74}," requirements.txt\n",[14,146506,146507],{},"安装依赖：",[49,146509,146511],{"className":51,"code":146510,"language":53,"meta":46,"style":46},"pip install -r requirements.txt\n",[28,146512,146513],{"__ignoreMap":46},[57,146514,146515,146517,146519,146521],{"class":59,"line":60},[57,146516,24101],{"class":70},[57,146518,75],{"class":74},[57,146520,119836],{"class":81},[57,146522,146504],{"class":74},[365,146524,146526],{"id":146525},"_16-开发工具","1.6 开发工具",[394,146528,146530],{"id":146529},"_161-pycharm","1.6.1 PyCharm",[14,146532,146533],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,146535,122259],{},[377,146537,146538,146541,146544,146550,146553],{},[380,146539,146540],{},"New Project：创建项目。",[380,146542,146543],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[380,146545,146546,146547,126180],{},"New Python File：创建 ",[28,146548,146549],{},".py",[380,146551,146552],{},"Run：运行当前文件。",[380,146554,146555],{},"Debug：断点调试。",[394,146557,146559],{"id":146558},"_162-vs-code","1.6.2 VS Code",[14,146561,146562],{},"VS Code 轻量，适合后续多语言开发。",[14,146564,146565],{},"建议安装插件：",[377,146567,146568,146571,146574],{},[380,146569,146570],{},"Python。",[380,146572,146573],{},"Pylance。",[380,146575,146576],{},"Jupyter。",[14,146578,146579],{},"选择解释器：",[49,146581,146584],{"className":146582,"code":146583,"language":5460,"meta":46},[5458],"Ctrl + Shift + P -> Python: Select Interpreter\n",[28,146585,146583],{"__ignoreMap":46},[365,146587,146589],{"id":146588},"_17-第一个python程序","1.7 第一个Python程序",[14,146591,146592,146593,24887],{},"创建文件 ",[28,146594,146595],{},"hello.py",[49,146597,146599],{"className":122,"code":146598,"language":124,"meta":46,"style":46},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[28,146600,146601,146612],{"__ignoreMap":46},[57,146602,146603,146605,146607,146610],{"class":59,"line":60},[57,146604,165],{"class":81},[57,146606,168],{"class":140},[57,146608,146609],{"class":74},"\"Hello World\"",[57,146611,238],{"class":140},[57,146613,146614,146616,146618,146621],{"class":59,"line":67},[57,146615,165],{"class":81},[57,146617,168],{"class":140},[57,146619,146620],{"class":74},"\"你好，Python\"",[57,146622,238],{"class":140},[14,146624,146625],{},"在终端运行：",[49,146627,146629],{"className":51,"code":146628,"language":53,"meta":46,"style":46},"python hello.py\n",[28,146630,146631],{"__ignoreMap":46},[57,146632,146633,146635],{"class":59,"line":60},[57,146634,124],{"class":70},[57,146636,146637],{"class":74}," hello.py\n",[14,146639,146640],{},"或：",[49,146642,146644],{"className":51,"code":146643,"language":53,"meta":46,"style":46},"python3 hello.py\n",[28,146645,146646],{"__ignoreMap":46},[57,146647,146648,146650],{"class":59,"line":60},[57,146649,101076],{"class":70},[57,146651,146637],{"class":74},[14,146653,146654],{},"输出：",[49,146656,146659],{"className":146657,"code":146658,"language":5460,"meta":46},[5458],"Hello World\n你好，Python\n",[28,146660,146658],{"__ignoreMap":46},[365,146662,146664],{"id":146663},"_18-print函数","1.8 print函数",[14,146666,146667,146670],{},[28,146668,146669],{},"print()"," 用来输出内容。",[49,146672,146674],{"className":122,"code":146673,"language":124,"meta":46,"style":46},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[28,146675,146676,146686,146696,146706],{"__ignoreMap":46},[57,146677,146678,146680,146682,146684],{"class":59,"line":60},[57,146679,165],{"class":81},[57,146681,168],{"class":140},[57,146683,6117],{"class":74},[57,146685,238],{"class":140},[57,146687,146688,146690,146692,146694],{"class":59,"line":67},[57,146689,165],{"class":81},[57,146691,168],{"class":140},[57,146693,728],{"class":81},[57,146695,238],{"class":140},[57,146697,146698,146700,146702,146704],{"class":59,"line":144},[57,146699,165],{"class":81},[57,146701,168],{"class":140},[57,146703,472],{"class":81},[57,146705,238],{"class":140},[57,146707,146708,146710,146712,146715,146717,146719],{"class":59,"line":150},[57,146709,165],{"class":81},[57,146711,168],{"class":140},[57,146713,146714],{"class":74},"\"年龄:\"",[57,146716,12708],{"class":140},[57,146718,1066],{"class":81},[57,146720,238],{"class":140},[14,146722,146723],{},"多个内容用逗号隔开，默认中间加空格：",[49,146725,146727],{"className":122,"code":146726,"language":124,"meta":46,"style":46},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[28,146728,146729,146739,146749],{"__ignoreMap":46},[57,146730,146731,146734,146736],{"class":59,"line":60},[57,146732,146733],{"class":140},"name ",[57,146735,156],{"class":136},[57,146737,146738],{"class":74}," \"张三\"\n",[57,146740,146741,146744,146746],{"class":59,"line":67},[57,146742,146743],{"class":140},"age ",[57,146745,156],{"class":136},[57,146747,146748],{"class":81}," 18\n",[57,146750,146751,146753,146755,146758,146761,146763],{"class":59,"line":144},[57,146752,165],{"class":81},[57,146754,168],{"class":140},[57,146756,146757],{"class":74},"\"姓名:\"",[57,146759,146760],{"class":140},", name, ",[57,146762,146714],{"class":74},[57,146764,146765],{"class":140},", age)\n",[14,146767,146768],{},"修改分隔符：",[49,146770,146772],{"className":122,"code":146771,"language":124,"meta":46,"style":46},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[28,146773,146774],{"__ignoreMap":46},[57,146775,146776,146778,146780,146783,146785,146787,146789,146791,146793,146796,146798,146800],{"class":59,"line":60},[57,146777,165],{"class":81},[57,146779,168],{"class":140},[57,146781,146782],{"class":74},"\"2024\"",[57,146784,12708],{"class":140},[57,146786,54513],{"class":74},[57,146788,12708],{"class":140},[57,146790,54513],{"class":74},[57,146792,12708],{"class":140},[57,146794,146795],{"class":5489},"sep",[57,146797,156],{"class":136},[57,146799,32680],{"class":74},[57,146801,238],{"class":140},[14,146803,146804],{},"修改结尾符：",[49,146806,146808],{"className":122,"code":146807,"language":124,"meta":46,"style":46},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[28,146809,146810,146828],{"__ignoreMap":46},[57,146811,146812,146814,146816,146818,146820,146822,146824,146826],{"class":59,"line":60},[57,146813,165],{"class":81},[57,146815,168],{"class":140},[57,146817,6117],{"class":74},[57,146819,12708],{"class":140},[57,146821,45998],{"class":5489},[57,146823,156],{"class":136},[57,146825,4632],{"class":74},[57,146827,238],{"class":140},[57,146829,146830,146832,146834,146837],{"class":59,"line":67},[57,146831,165],{"class":81},[57,146833,168],{"class":140},[57,146835,146836],{"class":74},"\"python\"",[57,146838,238],{"class":140},[365,146840,146842],{"id":146841},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,146844,146845],{},"交互运行适合临时验证：",[49,146847,146849],{"className":122,"code":146848,"language":124,"meta":46,"style":46},">>> 10 * 3\n30\n",[28,146850,146851,146861],{"__ignoreMap":46},[57,146852,146853,146855,146857,146859],{"class":59,"line":60},[57,146854,146050],{"class":136},[57,146856,2311],{"class":81},[57,146858,6791],{"class":136},[57,146860,120233],{"class":81},[57,146862,146863],{"class":59,"line":67},[57,146864,146865],{"class":81},"30\n",[14,146867,146868],{},"脚本运行适合保存程序：",[49,146870,146872],{"className":122,"code":146871,"language":124,"meta":46,"style":46},"price = 8\ncount = 5\nprint(price * count)\n",[28,146873,146874,146884,146893],{"__ignoreMap":46},[57,146875,146876,146879,146881],{"class":59,"line":60},[57,146877,146878],{"class":140},"price ",[57,146880,156],{"class":136},[57,146882,146883],{"class":81}," 8\n",[57,146885,146886,146889,146891],{"class":59,"line":67},[57,146887,146888],{"class":140},"count ",[57,146890,156],{"class":136},[57,146892,54624],{"class":81},[57,146894,146895,146897,146900,146902],{"class":59,"line":144},[57,146896,165],{"class":81},[57,146898,146899],{"class":140},"(price ",[57,146901,871],{"class":136},[57,146903,146904],{"class":140}," count)\n",[14,146906,146907],{},"实际学习中推荐：",[377,146909,146910,146913,146918],{},[380,146911,146912],{},"临时试一个语法，用交互模式。",[380,146914,146915,146916,126180],{},"写完整练习，用 ",[28,146917,146549],{},[380,146919,146920],{},"写项目，用独立目录和虚拟环境。",[365,146922,146924],{"id":146923},"_110-常见错误","1.10 常见错误",[394,146926,146928],{"id":146927},"_1101-命令找不到","1.10.1 命令找不到",[49,146930,146933],{"className":146931,"code":146932,"language":5460,"meta":46},[5458],"python: command not found\n",[28,146934,146932],{"__ignoreMap":46},[14,146936,146937],{},"原因：",[377,146939,146940,146943,146946],{},[380,146941,146942],{},"没安装 Python。",[380,146944,146945],{},"PATH 没配置。",[380,146947,146948,146949,28654],{},"Linux\u002FmacOS 应该使用 ",[28,146950,101076],{},[394,146952,146954],{"id":146953},"_1102-文件名冲突","1.10.2 文件名冲突",[14,146956,146957],{},"不要把文件命名为：",[49,146959,146962],{"className":146960,"code":146961,"language":5460,"meta":46},[5458],"random.py\njson.py\ntime.py\nrequests.py\n",[28,146963,146961],{"__ignoreMap":46},[14,146965,146966],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[394,146968,146970],{"id":146969},"_1103-中文乱码","1.10.3 中文乱码",[14,146972,146973],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,146975,146976],{},"如果读写文件出现乱码，要明确指定编码：",[49,146978,146980],{"className":122,"code":146979,"language":124,"meta":46,"style":46},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[28,146981,146982,147016],{"__ignoreMap":46},[57,146983,146984,146986,146989,146991,146994,146996,146999,147001,147004,147006,147009,147011,147013],{"class":59,"line":60},[57,146985,108030],{"class":136},[57,146987,146988],{"class":81}," open",[57,146990,168],{"class":140},[57,146992,146993],{"class":74},"\"data.txt\"",[57,146995,12708],{"class":140},[57,146997,146998],{"class":74},"\"r\"",[57,147000,12708],{"class":140},[57,147002,147003],{"class":5489},"encoding",[57,147005,156],{"class":136},[57,147007,147008],{"class":74},"\"utf-8\"",[57,147010,229],{"class":140},[57,147012,31580],{"class":136},[57,147014,147015],{"class":140}," f:\n",[57,147017,147018,147021,147023],{"class":59,"line":67},[57,147019,147020],{"class":140},"    content ",[57,147022,156],{"class":136},[57,147024,147025],{"class":140}," f.read()\n",[365,147027,147029],{"id":147028},"_111-本章练习","1.11 本章练习",[377,147031,147032,147035,147041],{},[380,147033,147034],{},"安装 Python，并在终端输出版本号。",[380,147036,147037,147038,147040],{},"新建 ",[28,147039,146595],{},"，输出自己的姓名、年龄、学习目标。",[380,147042,104563,147043,147045],{},[28,147044,146669],{}," 输出下面格式：",[49,147047,147050],{"className":147048,"code":147049,"language":5460,"meta":46},[5458],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[28,147051,147049],{"__ignoreMap":46},[377,147053,147054],{"start":150},[380,147055,104563,147056,147058],{},[28,147057,146795],{}," 输出日期：",[49,147060,147063],{"className":147061,"code":147062,"language":5460,"meta":46},[5458],"2024-10-10\n",[28,147064,147062],{"__ignoreMap":46},[377,147066,147067],{"start":162},[380,147068,104563,147069,147071,147072,147074],{},[28,147070,45998],{}," 让两次 ",[28,147073,146669],{}," 输出在同一行。",[342,147076,147077],{},"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":46,"searchDepth":67,"depth":67,"links":147079},[147080,147081,147082,147087,147088,147089,147093,147094,147095,147096,147101],{"id":145962,"depth":67,"text":145963},{"id":146006,"depth":67,"text":146007},{"id":146107,"depth":67,"text":146108,"children":147083},[147084,147085,147086],{"id":146111,"depth":144,"text":146112},{"id":146166,"depth":144,"text":146167},{"id":146202,"depth":144,"text":146203},{"id":146275,"depth":67,"text":146276},{"id":146420,"depth":67,"text":146421},{"id":146525,"depth":67,"text":146526,"children":147090},[147091,147092],{"id":146529,"depth":144,"text":146530},{"id":146558,"depth":144,"text":146559},{"id":146588,"depth":67,"text":146589},{"id":146663,"depth":67,"text":146664},{"id":146841,"depth":67,"text":146842},{"id":146923,"depth":67,"text":146924,"children":147097},[147098,147099,147100],{"id":146927,"depth":144,"text":146928},{"id":146953,"depth":144,"text":146954},{"id":146969,"depth":144,"text":146970},{"id":147028,"depth":67,"text":147029},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145954,"description":347},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147108,"title":147109,"body":147110,"description":347,"extension":348,"meta":149514,"navigation":350,"path":149515,"seo":149516,"stem":149517,"__hash__":149518},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147111,"toc":149499},[147112,147115,147119,147122,147125,147142,147145,147187,147190,147194,147197,147200,147237,147240,147274,147277,147369,147373,147387,147390,147417,147420,147424,147527,147534,147537,147554,147558,147565,147754,147757,147830,147834,147837,147921,147924,147956,147960,148164,148167,148171,148177,148279,148282,148538,148542,148545,148548,148562,148564,148750,148754,149116,149122,149126,149129,149253,149256,149435,149438,149442,149475,149479,149496],[10,147113,147109],{"id":147114},"_10-json与pyecharts折线图",[365,147116,147118],{"id":147117},"_101-数据可视化","10.1 数据可视化",[14,147120,147121],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,147123,147124],{},"常见图表：",[377,147126,147127,147130,147133,147136,147139],{},[380,147128,147129],{},"折线图：看趋势。",[380,147131,147132],{},"柱状图：看分类对比。",[380,147134,147135],{},"饼图：看占比。",[380,147137,147138],{},"地图：看地域分布。",[380,147140,147141],{},"散点图：看两个变量之间的关系。",[14,147143,147144],{},"Python 可视化常用库：",[557,147146,147147,147155],{},[560,147148,147149],{},[563,147150,147151,147153],{},[566,147152,146358],{},[566,147154,24012],{},[603,147156,147157,147164,147172,147179],{},[563,147158,147159,147161],{},[608,147160,146390],{},[608,147162,147163],{},"基础、经典、可定制",[563,147165,147166,147169],{},[608,147167,147168],{},"seaborn",[608,147170,147171],{},"统计图表更美观",[563,147173,147174,147176],{},[608,147175,146398],{},[608,147177,147178],{},"生成交互式网页图表",[563,147180,147181,147184],{},[608,147182,147183],{},"plotly",[608,147185,147186],{},"交互图表能力强",[14,147188,147189],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[365,147191,147193],{"id":147192},"_102-json回顾","10.2 JSON回顾",[14,147195,147196],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,147198,147199],{},"Python 字典：",[49,147201,147203],{"className":122,"code":147202,"language":124,"meta":46,"style":46},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[28,147204,147205,147213,147224,147233],{"__ignoreMap":46},[57,147206,147207,147209,147211],{"class":59,"line":60},[57,147208,101855],{"class":140},[57,147210,156],{"class":136},[57,147212,15844],{"class":140},[57,147214,147215,147218,147220,147222],{"class":59,"line":67},[57,147216,147217],{"class":74},"    \"name\"",[57,147219,51634],{"class":140},[57,147221,69466],{"class":74},[57,147223,31663],{"class":140},[57,147225,147226,147229,147231],{"class":59,"line":144},[57,147227,147228],{"class":74},"    \"value\"",[57,147230,51634],{"class":140},[57,147232,97655],{"class":81},[57,147234,147235],{"class":59,"line":150},[57,147236,1847],{"class":140},[14,147238,147239],{},"JSON 字符串：",[49,147241,147244],{"className":147242,"code":147243,"language":145989,"meta":46,"style":46},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[28,147245,147246,147250,147261,147270],{"__ignoreMap":46},[57,147247,147248],{"class":59,"line":60},[57,147249,1828],{"class":140},[57,147251,147252,147255,147257,147259],{"class":59,"line":67},[57,147253,147254],{"class":81},"  \"name\"",[57,147256,51634],{"class":140},[57,147258,69466],{"class":74},[57,147260,31663],{"class":140},[57,147262,147263,147266,147268],{"class":59,"line":144},[57,147264,147265],{"class":81},"  \"value\"",[57,147267,51634],{"class":140},[57,147269,97655],{"class":81},[57,147271,147272],{"class":59,"line":150},[57,147273,1847],{"class":140},[14,147275,147276],{},"Python 与 JSON 的转换：",[49,147278,147280],{"className":122,"code":147279,"language":124,"meta":46,"style":46},"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",[28,147281,147282,147289,147293,147318,147322,147341,147348,147352,147362],{"__ignoreMap":46},[57,147283,147284,147286],{"class":59,"line":60},[57,147285,137],{"class":136},[57,147287,147288],{"class":140}," json\n",[57,147290,147291],{"class":59,"line":67},[57,147292,2673],{"emptyLinePlaceholder":350},[57,147294,147295,147297,147299,147301,147303,147305,147307,147309,147312,147314,147316],{"class":59,"line":144},[57,147296,101855],{"class":140},[57,147298,156],{"class":136},[57,147300,4721],{"class":140},[57,147302,62876],{"class":74},[57,147304,51634],{"class":140},[57,147306,69466],{"class":74},[57,147308,12708],{"class":140},[57,147310,147311],{"class":74},"\"value\"",[57,147313,51634],{"class":140},[57,147315,728],{"class":81},[57,147317,1847],{"class":140},[57,147319,147320],{"class":59,"line":150},[57,147321,2673],{"emptyLinePlaceholder":350},[57,147323,147324,147327,147329,147332,147335,147337,147339],{"class":59,"line":162},[57,147325,147326],{"class":140},"json_text ",[57,147328,156],{"class":136},[57,147330,147331],{"class":140}," json.dumps(data, ",[57,147333,147334],{"class":5489},"ensure_ascii",[57,147336,156],{"class":136},[57,147338,34184],{"class":81},[57,147340,238],{"class":140},[57,147342,147343,147345],{"class":59,"line":180},[57,147344,165],{"class":81},[57,147346,147347],{"class":140},"(json_text)\n",[57,147349,147350],{"class":59,"line":186},[57,147351,2673],{"emptyLinePlaceholder":350},[57,147353,147354,147357,147359],{"class":59,"line":197},[57,147355,147356],{"class":140},"new_data ",[57,147358,156],{"class":136},[57,147360,147361],{"class":140}," json.loads(json_text)\n",[57,147363,147364,147366],{"class":59,"line":241},[57,147365,165],{"class":81},[57,147367,147368],{"class":140},"(new_data)\n",[365,147370,147372],{"id":147371},"_103-安装pyecharts","10.3 安装pyecharts",[49,147374,147376],{"className":51,"code":147375,"language":53,"meta":46,"style":46},"pip install pyecharts\n",[28,147377,147378],{"__ignoreMap":46},[57,147379,147380,147382,147384],{"class":59,"line":60},[57,147381,24101],{"class":70},[57,147383,75],{"class":74},[57,147385,147386],{"class":74}," pyecharts\n",[14,147388,147389],{},"验证：",[49,147391,147393],{"className":122,"code":147392,"language":124,"meta":46,"style":46},"import pyecharts\n\nprint(pyecharts.__version__)\n",[28,147394,147395,147401,147405],{"__ignoreMap":46},[57,147396,147397,147399],{"class":59,"line":60},[57,147398,137],{"class":136},[57,147400,147386],{"class":140},[57,147402,147403],{"class":59,"line":67},[57,147404,2673],{"emptyLinePlaceholder":350},[57,147406,147407,147409,147412,147415],{"class":59,"line":144},[57,147408,165],{"class":81},[57,147410,147411],{"class":140},"(pyecharts.",[57,147413,147414],{"class":81},"__version__",[57,147416,238],{"class":140},[14,147418,147419],{},"如果使用虚拟环境，要先激活环境再安装。",[365,147421,147423],{"id":147422},"_104-第一个折线图","10.4 第一个折线图",[49,147425,147427],{"className":122,"code":147426,"language":124,"meta":46,"style":46},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[28,147428,147429,147441,147445,147455,147485,147517],{"__ignoreMap":46},[57,147430,147431,147433,147436,147438],{"class":59,"line":60},[57,147432,30934],{"class":136},[57,147434,147435],{"class":140}," pyecharts.charts ",[57,147437,137],{"class":136},[57,147439,147440],{"class":140}," Line\n",[57,147442,147443],{"class":59,"line":67},[57,147444,2673],{"emptyLinePlaceholder":350},[57,147446,147447,147450,147452],{"class":59,"line":144},[57,147448,147449],{"class":140},"line ",[57,147451,156],{"class":136},[57,147453,147454],{"class":140}," Line()\n",[57,147456,147457,147460,147463,147465,147468,147470,147473,147475,147478,147480,147483],{"class":59,"line":150},[57,147458,147459],{"class":140},"line.add_xaxis([",[57,147461,147462],{"class":74},"\"周一\"",[57,147464,12708],{"class":140},[57,147466,147467],{"class":74},"\"周二\"",[57,147469,12708],{"class":140},[57,147471,147472],{"class":74},"\"周三\"",[57,147474,12708],{"class":140},[57,147476,147477],{"class":74},"\"周四\"",[57,147479,12708],{"class":140},[57,147481,147482],{"class":74},"\"周五\"",[57,147484,4930],{"class":140},[57,147486,147487,147490,147493,147495,147497,147499,147501,147503,147505,147507,147510,147512,147515],{"class":59,"line":162},[57,147488,147489],{"class":140},"line.add_yaxis(",[57,147491,147492],{"class":74},"\"销售额\"",[57,147494,77715],{"class":140},[57,147496,728],{"class":81},[57,147498,12708],{"class":140},[57,147500,1233],{"class":81},[57,147502,12708],{"class":140},[57,147504,1278],{"class":81},[57,147506,12708],{"class":140},[57,147508,147509],{"class":81},"150",[57,147511,12708],{"class":140},[57,147513,147514],{"class":81},"180",[57,147516,4930],{"class":140},[57,147518,147519,147522,147525],{"class":59,"line":180},[57,147520,147521],{"class":140},"line.render(",[57,147523,147524],{"class":74},"\"line.html\"",[57,147526,238],{"class":140},[14,147528,147529,147530,147533],{},"运行后会生成 ",[28,147531,147532],{},"line.html","，用浏览器打开即可看到图表。",[14,147535,147536],{},"核心步骤：",[377,147538,147539,147542,147545,147548,147551],{},[380,147540,147541],{},"导入图表类。",[380,147543,147544],{},"创建图表对象。",[380,147546,147547],{},"添加 x 轴数据。",[380,147549,147550],{},"添加 y 轴数据。",[380,147552,147553],{},"渲染为 HTML。",[365,147555,147557],{"id":147556},"_105-全局配置","10.5 全局配置",[14,147559,147560,147561,147564],{},"常用配置在 ",[28,147562,147563],{},"pyecharts.options"," 中。",[49,147566,147568],{"className":122,"code":147567,"language":124,"meta":46,"style":46},"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",[28,147569,147570,147587,147597,147601,147609,147633,147661,147666,147685,147704,147722,147742,147746],{"__ignoreMap":46},[57,147571,147572,147574,147577,147579,147582,147584],{"class":59,"line":60},[57,147573,30934],{"class":136},[57,147575,147576],{"class":140}," pyecharts ",[57,147578,137],{"class":136},[57,147580,147581],{"class":140}," options ",[57,147583,31580],{"class":136},[57,147585,147586],{"class":140}," opts\n",[57,147588,147589,147591,147593,147595],{"class":59,"line":67},[57,147590,30934],{"class":136},[57,147592,147435],{"class":140},[57,147594,137],{"class":136},[57,147596,147440],{"class":140},[57,147598,147599],{"class":59,"line":144},[57,147600,2673],{"emptyLinePlaceholder":350},[57,147602,147603,147605,147607],{"class":59,"line":150},[57,147604,147449],{"class":140},[57,147606,156],{"class":136},[57,147608,147454],{"class":140},[57,147610,147611,147613,147615,147617,147619,147621,147623,147625,147627,147629,147631],{"class":59,"line":162},[57,147612,147459],{"class":140},[57,147614,147462],{"class":74},[57,147616,12708],{"class":140},[57,147618,147467],{"class":74},[57,147620,12708],{"class":140},[57,147622,147472],{"class":74},[57,147624,12708],{"class":140},[57,147626,147477],{"class":74},[57,147628,12708],{"class":140},[57,147630,147482],{"class":74},[57,147632,4930],{"class":140},[57,147634,147635,147637,147639,147641,147643,147645,147647,147649,147651,147653,147655,147657,147659],{"class":59,"line":180},[57,147636,147489],{"class":140},[57,147638,147492],{"class":74},[57,147640,77715],{"class":140},[57,147642,728],{"class":81},[57,147644,12708],{"class":140},[57,147646,1233],{"class":81},[57,147648,12708],{"class":140},[57,147650,1278],{"class":81},[57,147652,12708],{"class":140},[57,147654,147509],{"class":81},[57,147656,12708],{"class":140},[57,147658,147514],{"class":81},[57,147660,4930],{"class":140},[57,147662,147663],{"class":59,"line":186},[57,147664,147665],{"class":140},"line.set_global_opts(\n",[57,147667,147668,147671,147673,147676,147678,147680,147683],{"class":59,"line":197},[57,147669,147670],{"class":5489},"    title_opts",[57,147672,156],{"class":136},[57,147674,147675],{"class":140},"opts.TitleOpts(",[57,147677,51604],{"class":5489},[57,147679,156],{"class":136},[57,147681,147682],{"class":74},"\"一周销售额\"",[57,147684,38244],{"class":140},[57,147686,147687,147690,147692,147695,147697,147699,147702],{"class":59,"line":241},[57,147688,147689],{"class":5489},"    xaxis_opts",[57,147691,156],{"class":136},[57,147693,147694],{"class":140},"opts.AxisOpts(",[57,147696,80007],{"class":5489},[57,147698,156],{"class":136},[57,147700,147701],{"class":74},"\"日期\"",[57,147703,38244],{"class":140},[57,147705,147706,147709,147711,147713,147715,147717,147720],{"class":59,"line":249},[57,147707,147708],{"class":5489},"    yaxis_opts",[57,147710,156],{"class":136},[57,147712,147694],{"class":140},[57,147714,80007],{"class":5489},[57,147716,156],{"class":136},[57,147718,147719],{"class":74},"\"金额\"",[57,147721,38244],{"class":140},[57,147723,147724,147727,147729,147732,147735,147737,147740],{"class":59,"line":262},[57,147725,147726],{"class":5489},"    tooltip_opts",[57,147728,156],{"class":136},[57,147730,147731],{"class":140},"opts.TooltipOpts(",[57,147733,147734],{"class":5489},"trigger",[57,147736,156],{"class":136},[57,147738,147739],{"class":74},"\"axis\"",[57,147741,38244],{"class":140},[57,147743,147744],{"class":59,"line":281},[57,147745,238],{"class":140},[57,147747,147748,147750,147752],{"class":59,"line":287},[57,147749,147521],{"class":140},[57,147751,147524],{"class":74},[57,147753,238],{"class":140},[14,147755,147756],{},"常见全局配置：",[557,147758,147759,147768],{},[560,147760,147761],{},[563,147762,147763,147766],{},[566,147764,147765],{},"配置",[566,147767,102893],{},[603,147769,147770,147780,147790,147800,147810,147820],{},[563,147771,147772,147777],{},[608,147773,147774],{},[28,147775,147776],{},"TitleOpts",[608,147778,147779],{},"标题",[563,147781,147782,147787],{},[608,147783,147784],{},[28,147785,147786],{},"LegendOpts",[608,147788,147789],{},"图例",[563,147791,147792,147797],{},[608,147793,147794],{},[28,147795,147796],{},"TooltipOpts",[608,147798,147799],{},"提示框",[563,147801,147802,147807],{},[608,147803,147804],{},[28,147805,147806],{},"AxisOpts",[608,147808,147809],{},"坐标轴",[563,147811,147812,147817],{},[608,147813,147814],{},[28,147815,147816],{},"VisualMapOpts",[608,147818,147819],{},"视觉映射",[563,147821,147822,147827],{},[608,147823,147824],{},[28,147825,147826],{},"DataZoomOpts",[608,147828,147829],{},"区域缩放",[365,147831,147833],{"id":147832},"_106-系列配置","10.6 系列配置",[14,147835,147836],{},"系列配置作用于某一组数据。",[49,147838,147840],{"className":122,"code":147839,"language":124,"meta":46,"style":46},"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",[28,147841,147842,147847,147858,147887,147898,147917],{"__ignoreMap":46},[57,147843,147844],{"class":59,"line":60},[57,147845,147846],{"class":140},"line.add_yaxis(\n",[57,147848,147849,147852,147854,147856],{"class":59,"line":67},[57,147850,147851],{"class":5489},"    series_name",[57,147853,156],{"class":136},[57,147855,147492],{"class":74},[57,147857,31663],{"class":140},[57,147859,147860,147863,147865,147867,147869,147871,147873,147875,147877,147879,147881,147883,147885],{"class":59,"line":144},[57,147861,147862],{"class":5489},"    y_axis",[57,147864,156],{"class":136},[57,147866,1306],{"class":140},[57,147868,728],{"class":81},[57,147870,12708],{"class":140},[57,147872,1233],{"class":81},[57,147874,12708],{"class":140},[57,147876,1278],{"class":81},[57,147878,12708],{"class":140},[57,147880,147509],{"class":81},[57,147882,12708],{"class":140},[57,147884,147514],{"class":81},[57,147886,88033],{"class":140},[57,147888,147889,147892,147894,147896],{"class":59,"line":150},[57,147890,147891],{"class":5489},"    is_smooth",[57,147893,156],{"class":136},[57,147895,31673],{"class":81},[57,147897,31663],{"class":140},[57,147899,147900,147903,147905,147908,147911,147913,147915],{"class":59,"line":162},[57,147901,147902],{"class":5489},"    label_opts",[57,147904,156],{"class":136},[57,147906,147907],{"class":140},"opts.LabelOpts(",[57,147909,147910],{"class":5489},"is_show",[57,147912,156],{"class":136},[57,147914,31673],{"class":81},[57,147916,38244],{"class":140},[57,147918,147919],{"class":59,"line":180},[57,147920,238],{"class":140},[14,147922,147923],{},"常用参数：",[377,147925,147926,147932,147938,147944,147950],{},[380,147927,147928,147931],{},[28,147929,147930],{},"series_name","：系列名称。",[380,147933,147934,147937],{},[28,147935,147936],{},"y_axis","：y 轴数据。",[380,147939,147940,147943],{},[28,147941,147942],{},"is_smooth","：是否平滑曲线。",[380,147945,147946,147949],{},[28,147947,147948],{},"label_opts","：标签配置。",[380,147951,147952,147955],{},[28,147953,147954],{},"symbol_size","：标记点大小。",[365,147957,147959],{"id":147958},"_107-多条折线","10.7 多条折线",[49,147961,147963],{"className":122,"code":147962,"language":124,"meta":46,"style":46},"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",[28,147964,147965,147979,147989,147993,148022,148026,148034,148039,148077,148114,148118,148135,148151,148155],{"__ignoreMap":46},[57,147966,147967,147969,147971,147973,147975,147977],{"class":59,"line":60},[57,147968,30934],{"class":136},[57,147970,147576],{"class":140},[57,147972,137],{"class":136},[57,147974,147581],{"class":140},[57,147976,31580],{"class":136},[57,147978,147586],{"class":140},[57,147980,147981,147983,147985,147987],{"class":59,"line":67},[57,147982,30934],{"class":136},[57,147984,147435],{"class":140},[57,147986,137],{"class":136},[57,147988,147440],{"class":140},[57,147990,147991],{"class":59,"line":144},[57,147992,2673],{"emptyLinePlaceholder":350},[57,147994,147995,147998,148000,148002,148004,148006,148008,148010,148012,148014,148016,148018,148020],{"class":59,"line":150},[57,147996,147997],{"class":140},"dates ",[57,147999,156],{"class":136},[57,148001,52423],{"class":140},[57,148003,147462],{"class":74},[57,148005,12708],{"class":140},[57,148007,147467],{"class":74},[57,148009,12708],{"class":140},[57,148011,147472],{"class":74},[57,148013,12708],{"class":140},[57,148015,147477],{"class":74},[57,148017,12708],{"class":140},[57,148019,147482],{"class":74},[57,148021,33443],{"class":140},[57,148023,148024],{"class":59,"line":162},[57,148025,2673],{"emptyLinePlaceholder":350},[57,148027,148028,148030,148032],{"class":59,"line":180},[57,148029,147449],{"class":140},[57,148031,156],{"class":136},[57,148033,147454],{"class":140},[57,148035,148036],{"class":59,"line":186},[57,148037,148038],{"class":140},"line.add_xaxis(dates)\n",[57,148040,148041,148043,148046,148048,148050,148052,148055,148057,148059,148061,148063,148065,148067,148069,148071,148073,148075],{"class":59,"line":197},[57,148042,147489],{"class":140},[57,148044,148045],{"class":74},"\"线上销售\"",[57,148047,77715],{"class":140},[57,148049,728],{"class":81},[57,148051,12708],{"class":140},[57,148053,148054],{"class":81},"130",[57,148056,12708],{"class":140},[57,148058,1233],{"class":81},[57,148060,12708],{"class":140},[57,148062,21320],{"class":81},[57,148064,12708],{"class":140},[57,148066,1996],{"class":81},[57,148068,112399],{"class":140},[57,148070,147942],{"class":5489},[57,148072,156],{"class":136},[57,148074,31673],{"class":81},[57,148076,238],{"class":140},[57,148078,148079,148081,148084,148086,148088,148090,148092,148094,148096,148098,148100,148102,148104,148106,148108,148110,148112],{"class":59,"line":241},[57,148080,147489],{"class":140},[57,148082,148083],{"class":74},"\"线下销售\"",[57,148085,77715],{"class":140},[57,148087,1028],{"class":81},[57,148089,12708],{"class":140},[57,148091,1278],{"class":81},[57,148093,12708],{"class":140},[57,148095,728],{"class":81},[57,148097,12708],{"class":140},[57,148099,1233],{"class":81},[57,148101,12708],{"class":140},[57,148103,147509],{"class":81},[57,148105,112399],{"class":140},[57,148107,147942],{"class":5489},[57,148109,156],{"class":136},[57,148111,31673],{"class":81},[57,148113,238],{"class":140},[57,148115,148116],{"class":59,"line":249},[57,148117,147665],{"class":140},[57,148119,148120,148122,148124,148126,148128,148130,148133],{"class":59,"line":262},[57,148121,147670],{"class":5489},[57,148123,156],{"class":136},[57,148125,147675],{"class":140},[57,148127,51604],{"class":5489},[57,148129,156],{"class":136},[57,148131,148132],{"class":74},"\"线上线下销售趋势\"",[57,148134,38244],{"class":140},[57,148136,148137,148139,148141,148143,148145,148147,148149],{"class":59,"line":281},[57,148138,147726],{"class":5489},[57,148140,156],{"class":136},[57,148142,147731],{"class":140},[57,148144,147734],{"class":5489},[57,148146,156],{"class":136},[57,148148,147739],{"class":74},[57,148150,38244],{"class":140},[57,148152,148153],{"class":59,"line":287},[57,148154,238],{"class":140},[57,148156,148157,148159,148162],{"class":59,"line":298},[57,148158,147521],{"class":140},[57,148160,148161],{"class":74},"\"sales.html\"",[57,148163,238],{"class":140},[14,148165,148166],{},"多条折线适合比较不同指标或不同地区。",[365,148168,148170],{"id":148169},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,148172,148173,148174,24887],{},"假设 ",[28,148175,148176],{},"sales.json",[49,148178,148180],{"className":147242,"code":148179,"language":145989,"meta":46,"style":46},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[28,148181,148182,148187,148219,148247,148275],{"__ignoreMap":46},[57,148183,148184],{"class":59,"line":60},[57,148185,148186],{"class":140},"[\n",[57,148188,148189,148192,148195,148197,148199,148201,148204,148206,148208,148210,148213,148215,148217],{"class":59,"line":67},[57,148190,148191],{"class":140},"  {",[57,148193,148194],{"class":81},"\"date\"",[57,148196,51634],{"class":140},[57,148198,147462],{"class":74},[57,148200,12708],{"class":140},[57,148202,148203],{"class":81},"\"online\"",[57,148205,51634],{"class":140},[57,148207,728],{"class":81},[57,148209,12708],{"class":140},[57,148211,148212],{"class":81},"\"offline\"",[57,148214,51634],{"class":140},[57,148216,1028],{"class":81},[57,148218,5203],{"class":140},[57,148220,148221,148223,148225,148227,148229,148231,148233,148235,148237,148239,148241,148243,148245],{"class":59,"line":144},[57,148222,148191],{"class":140},[57,148224,148194],{"class":81},[57,148226,51634],{"class":140},[57,148228,147467],{"class":74},[57,148230,12708],{"class":140},[57,148232,148203],{"class":81},[57,148234,51634],{"class":140},[57,148236,148054],{"class":81},[57,148238,12708],{"class":140},[57,148240,148212],{"class":81},[57,148242,51634],{"class":140},[57,148244,1278],{"class":81},[57,148246,5203],{"class":140},[57,148248,148249,148251,148253,148255,148257,148259,148261,148263,148265,148267,148269,148271,148273],{"class":59,"line":150},[57,148250,148191],{"class":140},[57,148252,148194],{"class":81},[57,148254,51634],{"class":140},[57,148256,147472],{"class":74},[57,148258,12708],{"class":140},[57,148260,148203],{"class":81},[57,148262,51634],{"class":140},[57,148264,1233],{"class":81},[57,148266,12708],{"class":140},[57,148268,148212],{"class":81},[57,148270,51634],{"class":140},[57,148272,728],{"class":81},[57,148274,1847],{"class":140},[57,148276,148277],{"class":59,"line":162},[57,148278,33443],{"class":140},[14,148280,148281],{},"读取并绘图：",[49,148283,148285],{"className":122,"code":148284,"language":124,"meta":46,"style":46},"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",[28,148286,148287,148293,148307,148317,148321,148353,148366,148370,148378,148387,148396,148400,148412,148421,148430,148439,148443,148451,148455,148472,148489,148493,148510,148526,148530],{"__ignoreMap":46},[57,148288,148289,148291],{"class":59,"line":60},[57,148290,137],{"class":136},[57,148292,147288],{"class":140},[57,148294,148295,148297,148299,148301,148303,148305],{"class":59,"line":67},[57,148296,30934],{"class":136},[57,148298,147576],{"class":140},[57,148300,137],{"class":136},[57,148302,147581],{"class":140},[57,148304,31580],{"class":136},[57,148306,147586],{"class":140},[57,148308,148309,148311,148313,148315],{"class":59,"line":144},[57,148310,30934],{"class":136},[57,148312,147435],{"class":140},[57,148314,137],{"class":136},[57,148316,147440],{"class":140},[57,148318,148319],{"class":59,"line":150},[57,148320,2673],{"emptyLinePlaceholder":350},[57,148322,148323,148325,148327,148329,148332,148334,148336,148338,148340,148342,148344,148346,148348,148351],{"class":59,"line":162},[57,148324,108030],{"class":136},[57,148326,146988],{"class":81},[57,148328,168],{"class":140},[57,148330,148331],{"class":74},"\"sales.json\"",[57,148333,12708],{"class":140},[57,148335,146998],{"class":74},[57,148337,12708],{"class":140},[57,148339,147003],{"class":5489},[57,148341,156],{"class":136},[57,148343,147008],{"class":74},[57,148345,229],{"class":140},[57,148347,31580],{"class":136},[57,148349,148350],{"class":5489}," file",[57,148352,4012],{"class":140},[57,148354,148355,148357,148359,148362,148364],{"class":59,"line":180},[57,148356,101618],{"class":140},[57,148358,156],{"class":136},[57,148360,148361],{"class":140}," json.load(",[57,148363,45551],{"class":5489},[57,148365,238],{"class":140},[57,148367,148368],{"class":59,"line":186},[57,148369,2673],{"emptyLinePlaceholder":350},[57,148371,148372,148374,148376],{"class":59,"line":197},[57,148373,147997],{"class":140},[57,148375,156],{"class":136},[57,148377,52035],{"class":140},[57,148379,148380,148383,148385],{"class":59,"line":241},[57,148381,148382],{"class":140},"online_sales ",[57,148384,156],{"class":136},[57,148386,52035],{"class":140},[57,148388,148389,148392,148394],{"class":59,"line":249},[57,148390,148391],{"class":140},"offline_sales ",[57,148393,156],{"class":136},[57,148395,52035],{"class":140},[57,148397,148398],{"class":59,"line":262},[57,148399,2673],{"emptyLinePlaceholder":350},[57,148401,148402,148404,148407,148409],{"class":59,"line":281},[57,148403,3298],{"class":136},[57,148405,148406],{"class":140}," item ",[57,148408,26312],{"class":136},[57,148410,148411],{"class":140}," data:\n",[57,148413,148414,148417,148419],{"class":59,"line":287},[57,148415,148416],{"class":140},"    dates.append(item[",[57,148418,148194],{"class":74},[57,148420,4930],{"class":140},[57,148422,148423,148426,148428],{"class":59,"line":298},[57,148424,148425],{"class":140},"    online_sales.append(item[",[57,148427,148203],{"class":74},[57,148429,4930],{"class":140},[57,148431,148432,148435,148437],{"class":59,"line":311},[57,148433,148434],{"class":140},"    offline_sales.append(item[",[57,148436,148212],{"class":74},[57,148438,4930],{"class":140},[57,148440,148441],{"class":59,"line":322},[57,148442,2673],{"emptyLinePlaceholder":350},[57,148444,148445,148447,148449],{"class":59,"line":1929},[57,148446,147449],{"class":140},[57,148448,156],{"class":136},[57,148450,147454],{"class":140},[57,148452,148453],{"class":59,"line":1950},[57,148454,148038],{"class":140},[57,148456,148457,148459,148461,148464,148466,148468,148470],{"class":59,"line":1955},[57,148458,147489],{"class":140},[57,148460,148045],{"class":74},[57,148462,148463],{"class":140},", online_sales, ",[57,148465,147942],{"class":5489},[57,148467,156],{"class":136},[57,148469,31673],{"class":81},[57,148471,238],{"class":140},[57,148473,148474,148476,148478,148481,148483,148485,148487],{"class":59,"line":1969},[57,148475,147489],{"class":140},[57,148477,148083],{"class":74},[57,148479,148480],{"class":140},", offline_sales, ",[57,148482,147942],{"class":5489},[57,148484,156],{"class":136},[57,148486,31673],{"class":81},[57,148488,238],{"class":140},[57,148490,148491],{"class":59,"line":1974},[57,148492,147665],{"class":140},[57,148494,148495,148497,148499,148501,148503,148505,148508],{"class":59,"line":2001},[57,148496,147670],{"class":5489},[57,148498,156],{"class":136},[57,148500,147675],{"class":140},[57,148502,51604],{"class":5489},[57,148504,156],{"class":136},[57,148506,148507],{"class":74},"\"销售趋势\"",[57,148509,38244],{"class":140},[57,148511,148512,148514,148516,148518,148520,148522,148524],{"class":59,"line":2006},[57,148513,147726],{"class":5489},[57,148515,156],{"class":136},[57,148517,147731],{"class":140},[57,148519,147734],{"class":5489},[57,148521,156],{"class":136},[57,148523,147739],{"class":74},[57,148525,38244],{"class":140},[57,148527,148528],{"class":59,"line":2023},[57,148529,238],{"class":140},[57,148531,148532,148534,148536],{"class":59,"line":2028},[57,148533,147521],{"class":140},[57,148535,148161],{"class":74},[57,148537,238],{"class":140},[365,148539,148541],{"id":148540},"_109-数据清洗","10.9 数据清洗",[14,148543,148544],{},"真实数据经常不整齐，需要清洗。",[14,148546,148547],{},"常见问题：",[377,148549,148550,148553,148556,148559],{},[380,148551,148552],{},"数字是字符串。",[380,148554,148555],{},"字段缺失。",[380,148557,148558],{},"空值。",[380,148560,148561],{},"日期格式不统一。",[14,148563,15407],{},[49,148565,148567],{"className":122,"code":148566,"language":124,"meta":46,"style":46},"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",[28,148568,148569,148578,148601,148621,148642,148646,148650,148658,148667,148671,148682,148696,148705,148710,148714,148722,148732,148736,148743],{"__ignoreMap":46},[57,148570,148571,148574,148576],{"class":59,"line":60},[57,148572,148573],{"class":140},"raw_data ",[57,148575,156],{"class":136},[57,148577,55644],{"class":140},[57,148579,148580,148583,148585,148587,148589,148591,148594,148596,148599],{"class":59,"line":67},[57,148581,148582],{"class":140},"    {",[57,148584,148194],{"class":74},[57,148586,51634],{"class":140},[57,148588,147462],{"class":74},[57,148590,12708],{"class":140},[57,148592,148593],{"class":74},"\"sales\"",[57,148595,51634],{"class":140},[57,148597,148598],{"class":74},"\"100\"",[57,148600,5203],{"class":140},[57,148602,148603,148605,148607,148609,148611,148613,148615,148617,148619],{"class":59,"line":144},[57,148604,148582],{"class":140},[57,148606,148194],{"class":74},[57,148608,51634],{"class":140},[57,148610,147467],{"class":74},[57,148612,12708],{"class":140},[57,148614,148593],{"class":74},[57,148616,51634],{"class":140},[57,148618,7925],{"class":74},[57,148620,5203],{"class":140},[57,148622,148623,148625,148627,148629,148631,148633,148635,148637,148640],{"class":59,"line":150},[57,148624,148582],{"class":140},[57,148626,148194],{"class":74},[57,148628,51634],{"class":140},[57,148630,147472],{"class":74},[57,148632,12708],{"class":140},[57,148634,148593],{"class":74},[57,148636,51634],{"class":140},[57,148638,148639],{"class":74},"\"120\"",[57,148641,5203],{"class":140},[57,148643,148644],{"class":59,"line":162},[57,148645,33443],{"class":140},[57,148647,148648],{"class":59,"line":180},[57,148649,2673],{"emptyLinePlaceholder":350},[57,148651,148652,148654,148656],{"class":59,"line":186},[57,148653,147997],{"class":140},[57,148655,156],{"class":136},[57,148657,52035],{"class":140},[57,148659,148660,148663,148665],{"class":59,"line":197},[57,148661,148662],{"class":140},"sales ",[57,148664,156],{"class":136},[57,148666,52035],{"class":140},[57,148668,148669],{"class":59,"line":241},[57,148670,2673],{"emptyLinePlaceholder":350},[57,148672,148673,148675,148677,148679],{"class":59,"line":249},[57,148674,3298],{"class":136},[57,148676,148406],{"class":140},[57,148678,26312],{"class":136},[57,148680,148681],{"class":140}," raw_data:\n",[57,148683,148684,148687,148689,148692,148694],{"class":59,"line":262},[57,148685,148686],{"class":140},"    value ",[57,148688,156],{"class":136},[57,148690,148691],{"class":140}," item.get(",[57,148693,148593],{"class":74},[57,148695,238],{"class":140},[57,148697,148698,148700,148702],{"class":59,"line":281},[57,148699,3374],{"class":136},[57,148701,39127],{"class":136},[57,148703,148704],{"class":140}," value:\n",[57,148706,148707],{"class":59,"line":287},[57,148708,148709],{"class":136},"        continue\n",[57,148711,148712],{"class":59,"line":298},[57,148713,2673],{"emptyLinePlaceholder":350},[57,148715,148716,148718,148720],{"class":59,"line":311},[57,148717,148416],{"class":140},[57,148719,148194],{"class":74},[57,148721,4930],{"class":140},[57,148723,148724,148727,148729],{"class":59,"line":322},[57,148725,148726],{"class":140},"    sales.append(",[57,148728,429],{"class":81},[57,148730,148731],{"class":140},"(value))\n",[57,148733,148734],{"class":59,"line":1929},[57,148735,2673],{"emptyLinePlaceholder":350},[57,148737,148738,148740],{"class":59,"line":1950},[57,148739,165],{"class":81},[57,148741,148742],{"class":140},"(dates)\n",[57,148744,148745,148747],{"class":59,"line":1955},[57,148746,165],{"class":81},[57,148748,148749],{"class":140},"(sales)\n",[365,148751,148753],{"id":148752},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[49,148755,148757],{"className":122,"code":148756,"language":124,"meta":46,"style":46},"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",[28,148758,148759,148773,148783,148787,148795,148816,148838,148860,148882,148904,148908,148912,148934,148955,148959,148967,148971,148975,148985,148994,149004,149020,149024,149028,149045,149061,149077,149093,149103,149107],{"__ignoreMap":46},[57,148760,148761,148763,148765,148767,148769,148771],{"class":59,"line":60},[57,148762,30934],{"class":136},[57,148764,147576],{"class":140},[57,148766,137],{"class":136},[57,148768,147581],{"class":140},[57,148770,31580],{"class":136},[57,148772,147586],{"class":140},[57,148774,148775,148777,148779,148781],{"class":59,"line":67},[57,148776,30934],{"class":136},[57,148778,147435],{"class":140},[57,148780,137],{"class":136},[57,148782,147440],{"class":140},[57,148784,148785],{"class":59,"line":144},[57,148786,2673],{"emptyLinePlaceholder":350},[57,148788,148789,148791,148793],{"class":59,"line":150},[57,148790,148662],{"class":140},[57,148792,156],{"class":136},[57,148794,55644],{"class":140},[57,148796,148797,148799,148801,148803,148806,148808,148810,148812,148814],{"class":59,"line":162},[57,148798,148582],{"class":140},[57,148800,148194],{"class":74},[57,148802,51634],{"class":140},[57,148804,148805],{"class":74},"\"2024-10-01\"",[57,148807,12708],{"class":140},[57,148809,84281],{"class":74},[57,148811,51634],{"class":140},[57,148813,92220],{"class":81},[57,148815,5203],{"class":140},[57,148817,148818,148820,148822,148824,148827,148829,148831,148833,148836],{"class":59,"line":180},[57,148819,148582],{"class":140},[57,148821,148194],{"class":74},[57,148823,51634],{"class":140},[57,148825,148826],{"class":74},"\"2024-10-02\"",[57,148828,12708],{"class":140},[57,148830,84281],{"class":74},[57,148832,51634],{"class":140},[57,148834,148835],{"class":81},"1800",[57,148837,5203],{"class":140},[57,148839,148840,148842,148844,148846,148849,148851,148853,148855,148858],{"class":59,"line":186},[57,148841,148582],{"class":140},[57,148843,148194],{"class":74},[57,148845,51634],{"class":140},[57,148847,148848],{"class":74},"\"2024-10-03\"",[57,148850,12708],{"class":140},[57,148852,84281],{"class":74},[57,148854,51634],{"class":140},[57,148856,148857],{"class":81},"1500",[57,148859,5203],{"class":140},[57,148861,148862,148864,148866,148868,148871,148873,148875,148877,148880],{"class":59,"line":197},[57,148863,148582],{"class":140},[57,148865,148194],{"class":74},[57,148867,51634],{"class":140},[57,148869,148870],{"class":74},"\"2024-10-04\"",[57,148872,12708],{"class":140},[57,148874,84281],{"class":74},[57,148876,51634],{"class":140},[57,148878,148879],{"class":81},"2100",[57,148881,5203],{"class":140},[57,148883,148884,148886,148888,148890,148893,148895,148897,148899,148902],{"class":59,"line":241},[57,148885,148582],{"class":140},[57,148887,148194],{"class":74},[57,148889,51634],{"class":140},[57,148891,148892],{"class":74},"\"2024-10-05\"",[57,148894,12708],{"class":140},[57,148896,84281],{"class":74},[57,148898,51634],{"class":140},[57,148900,148901],{"class":81},"2600",[57,148903,5203],{"class":140},[57,148905,148906],{"class":59,"line":249},[57,148907,33443],{"class":140},[57,148909,148910],{"class":59,"line":262},[57,148911,2673],{"emptyLinePlaceholder":350},[57,148913,148914,148916,148918,148921,148923,148925,148927,148929,148931],{"class":59,"line":281},[57,148915,147997],{"class":140},[57,148917,156],{"class":136},[57,148919,148920],{"class":140}," [item[",[57,148922,148194],{"class":74},[57,148924,4716],{"class":140},[57,148926,3298],{"class":136},[57,148928,148406],{"class":140},[57,148930,26312],{"class":136},[57,148932,148933],{"class":140}," sales]\n",[57,148935,148936,148939,148941,148943,148945,148947,148949,148951,148953],{"class":59,"line":287},[57,148937,148938],{"class":140},"amounts ",[57,148940,156],{"class":136},[57,148942,148920],{"class":140},[57,148944,84281],{"class":74},[57,148946,4716],{"class":140},[57,148948,3298],{"class":136},[57,148950,148406],{"class":140},[57,148952,26312],{"class":136},[57,148954,148933],{"class":140},[57,148956,148957],{"class":59,"line":298},[57,148958,2673],{"emptyLinePlaceholder":350},[57,148960,148961,148963,148965],{"class":59,"line":311},[57,148962,147449],{"class":140},[57,148964,156],{"class":136},[57,148966,147454],{"class":140},[57,148968,148969],{"class":59,"line":322},[57,148970,148038],{"class":140},[57,148972,148973],{"class":59,"line":1929},[57,148974,147846],{"class":140},[57,148976,148977,148979,148981,148983],{"class":59,"line":1950},[57,148978,147851],{"class":5489},[57,148980,156],{"class":136},[57,148982,147492],{"class":74},[57,148984,31663],{"class":140},[57,148986,148987,148989,148991],{"class":59,"line":1955},[57,148988,147862],{"class":5489},[57,148990,156],{"class":136},[57,148992,148993],{"class":140},"amounts,\n",[57,148995,148996,148998,149000,149002],{"class":59,"line":1969},[57,148997,147891],{"class":5489},[57,148999,156],{"class":136},[57,149001,31673],{"class":81},[57,149003,31663],{"class":140},[57,149005,149006,149008,149010,149012,149014,149016,149018],{"class":59,"line":1974},[57,149007,147902],{"class":5489},[57,149009,156],{"class":136},[57,149011,147907],{"class":140},[57,149013,147910],{"class":5489},[57,149015,156],{"class":136},[57,149017,31673],{"class":81},[57,149019,38244],{"class":140},[57,149021,149022],{"class":59,"line":2001},[57,149023,238],{"class":140},[57,149025,149026],{"class":59,"line":2006},[57,149027,147665],{"class":140},[57,149029,149030,149032,149034,149036,149038,149040,149043],{"class":59,"line":2023},[57,149031,147670],{"class":5489},[57,149033,156],{"class":136},[57,149035,147675],{"class":140},[57,149037,51604],{"class":5489},[57,149039,156],{"class":136},[57,149041,149042],{"class":74},"\"每日销售额\"",[57,149044,38244],{"class":140},[57,149046,149047,149049,149051,149053,149055,149057,149059],{"class":59,"line":2028},[57,149048,147689],{"class":5489},[57,149050,156],{"class":136},[57,149052,147694],{"class":140},[57,149054,80007],{"class":5489},[57,149056,156],{"class":136},[57,149058,147701],{"class":74},[57,149060,38244],{"class":140},[57,149062,149063,149065,149067,149069,149071,149073,149075],{"class":59,"line":2033},[57,149064,147708],{"class":5489},[57,149066,156],{"class":136},[57,149068,147694],{"class":140},[57,149070,80007],{"class":5489},[57,149072,156],{"class":136},[57,149074,147719],{"class":74},[57,149076,38244],{"class":140},[57,149078,149079,149081,149083,149085,149087,149089,149091],{"class":59,"line":2038},[57,149080,147726],{"class":5489},[57,149082,156],{"class":136},[57,149084,147731],{"class":140},[57,149086,147734],{"class":5489},[57,149088,156],{"class":136},[57,149090,147739],{"class":74},[57,149092,38244],{"class":140},[57,149094,149095,149098,149100],{"class":59,"line":2052},[57,149096,149097],{"class":5489},"    datazoom_opts",[57,149099,156],{"class":136},[57,149101,149102],{"class":140},"[opts.DataZoomOpts()],\n",[57,149104,149105],{"class":59,"line":2057},[57,149106,238],{"class":140},[57,149108,149109,149111,149114],{"class":59,"line":2850},[57,149110,147521],{"class":140},[57,149112,149113],{"class":74},"\"daily_sales.html\"",[57,149115,238],{"class":140},[14,149117,149118,149121],{},[28,149119,149120],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[365,149123,149125],{"id":149124},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,149127,149128],{},"如果数据结构如下：",[49,149130,149132],{"className":122,"code":149131,"language":124,"meta":46,"style":46},"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",[28,149133,149134,149142,149150,149172,149193,149198,149205,149225,149245,149249],{"__ignoreMap":46},[57,149135,149136,149138,149140],{"class":59,"line":60},[57,149137,101855],{"class":140},[57,149139,156],{"class":136},[57,149141,15844],{"class":140},[57,149143,149144,149147],{"class":59,"line":67},[57,149145,149146],{"class":74},"    \"北京\"",[57,149148,149149],{"class":140},": [\n",[57,149151,149152,149154,149156,149158,149161,149163,149166,149168,149170],{"class":59,"line":144},[57,149153,5190],{"class":140},[57,149155,148194],{"class":74},[57,149157,51634],{"class":140},[57,149159,149160],{"class":74},"\"2024-01-01\"",[57,149162,12708],{"class":140},[57,149164,149165],{"class":74},"\"confirm\"",[57,149167,51634],{"class":140},[57,149169,862],{"class":81},[57,149171,5203],{"class":140},[57,149173,149174,149176,149178,149180,149183,149185,149187,149189,149191],{"class":59,"line":150},[57,149175,5190],{"class":140},[57,149177,148194],{"class":74},[57,149179,51634],{"class":140},[57,149181,149182],{"class":74},"\"2024-01-02\"",[57,149184,12708],{"class":140},[57,149186,149165],{"class":74},[57,149188,51634],{"class":140},[57,149190,914],{"class":81},[57,149192,5203],{"class":140},[57,149194,149195],{"class":59,"line":162},[57,149196,149197],{"class":140},"    ],\n",[57,149199,149200,149203],{"class":59,"line":180},[57,149201,149202],{"class":74},"    \"上海\"",[57,149204,149149],{"class":140},[57,149206,149207,149209,149211,149213,149215,149217,149219,149221,149223],{"class":59,"line":186},[57,149208,5190],{"class":140},[57,149210,148194],{"class":74},[57,149212,51634],{"class":140},[57,149214,149160],{"class":74},[57,149216,12708],{"class":140},[57,149218,149165],{"class":74},[57,149220,51634],{"class":140},[57,149222,811],{"class":81},[57,149224,5203],{"class":140},[57,149226,149227,149229,149231,149233,149235,149237,149239,149241,149243],{"class":59,"line":197},[57,149228,5190],{"class":140},[57,149230,148194],{"class":74},[57,149232,51634],{"class":140},[57,149234,149182],{"class":74},[57,149236,12708],{"class":140},[57,149238,149165],{"class":74},[57,149240,51634],{"class":140},[57,149242,939],{"class":81},[57,149244,5203],{"class":140},[57,149246,149247],{"class":59,"line":241},[57,149248,149197],{"class":140},[57,149250,149251],{"class":59,"line":249},[57,149252,1847],{"class":140},[14,149254,149255],{},"绘制多地区趋势：",[49,149257,149259],{"className":122,"code":149258,"language":124,"meta":46,"style":46},"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",[28,149260,149261,149275,149285,149289,149314,149318,149326,149330,149334,149346,149368,149381,149385,149389,149406,149422,149426],{"__ignoreMap":46},[57,149262,149263,149265,149267,149269,149271,149273],{"class":59,"line":60},[57,149264,30934],{"class":136},[57,149266,147576],{"class":140},[57,149268,137],{"class":136},[57,149270,147581],{"class":140},[57,149272,31580],{"class":136},[57,149274,147586],{"class":140},[57,149276,149277,149279,149281,149283],{"class":59,"line":67},[57,149278,30934],{"class":136},[57,149280,147435],{"class":140},[57,149282,137],{"class":136},[57,149284,147440],{"class":140},[57,149286,149287],{"class":59,"line":144},[57,149288,2673],{"emptyLinePlaceholder":350},[57,149290,149291,149293,149295,149297,149299,149301,149303,149305,149307,149310,149312],{"class":59,"line":150},[57,149292,147997],{"class":140},[57,149294,156],{"class":136},[57,149296,148920],{"class":140},[57,149298,148194],{"class":74},[57,149300,4716],{"class":140},[57,149302,3298],{"class":136},[57,149304,148406],{"class":140},[57,149306,26312],{"class":136},[57,149308,149309],{"class":140}," data[",[57,149311,69466],{"class":74},[57,149313,77724],{"class":140},[57,149315,149316],{"class":59,"line":162},[57,149317,2673],{"emptyLinePlaceholder":350},[57,149319,149320,149322,149324],{"class":59,"line":180},[57,149321,147449],{"class":140},[57,149323,156],{"class":136},[57,149325,147454],{"class":140},[57,149327,149328],{"class":59,"line":186},[57,149329,148038],{"class":140},[57,149331,149332],{"class":59,"line":197},[57,149333,2673],{"emptyLinePlaceholder":350},[57,149335,149336,149338,149341,149343],{"class":59,"line":241},[57,149337,3298],{"class":136},[57,149339,149340],{"class":140}," city, records ",[57,149342,26312],{"class":136},[57,149344,149345],{"class":140}," data.items():\n",[57,149347,149348,149351,149353,149355,149357,149359,149361,149363,149365],{"class":59,"line":249},[57,149349,149350],{"class":140},"    values ",[57,149352,156],{"class":136},[57,149354,148920],{"class":140},[57,149356,149165],{"class":74},[57,149358,4716],{"class":140},[57,149360,3298],{"class":136},[57,149362,148406],{"class":140},[57,149364,26312],{"class":136},[57,149366,149367],{"class":140}," records]\n",[57,149369,149370,149373,149375,149377,149379],{"class":59,"line":262},[57,149371,149372],{"class":140},"    line.add_yaxis(city, values, ",[57,149374,147942],{"class":5489},[57,149376,156],{"class":136},[57,149378,31673],{"class":81},[57,149380,238],{"class":140},[57,149382,149383],{"class":59,"line":281},[57,149384,2673],{"emptyLinePlaceholder":350},[57,149386,149387],{"class":59,"line":287},[57,149388,147665],{"class":140},[57,149390,149391,149393,149395,149397,149399,149401,149404],{"class":59,"line":298},[57,149392,147670],{"class":5489},[57,149394,156],{"class":136},[57,149396,147675],{"class":140},[57,149398,51604],{"class":5489},[57,149400,156],{"class":136},[57,149402,149403],{"class":74},"\"多地区趋势图\"",[57,149405,38244],{"class":140},[57,149407,149408,149410,149412,149414,149416,149418,149420],{"class":59,"line":311},[57,149409,147726],{"class":5489},[57,149411,156],{"class":136},[57,149413,147731],{"class":140},[57,149415,147734],{"class":5489},[57,149417,156],{"class":136},[57,149419,147739],{"class":74},[57,149421,38244],{"class":140},[57,149423,149424],{"class":59,"line":322},[57,149425,238],{"class":140},[57,149427,149428,149430,149433],{"class":59,"line":1929},[57,149429,147521],{"class":140},[57,149431,149432],{"class":74},"\"trend.html\"",[57,149434,238],{"class":140},[14,149436,149437],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[365,149439,149441],{"id":149440},"_1012-易错点","10.12 易错点",[377,149443,149444,149450,149456,149466,149472],{},[380,149445,149446,149449],{},[28,149447,149448],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[380,149451,149452,149455],{},[28,149453,149454],{},"render()"," 生成的是 HTML，不是图片。",[380,149457,149458,149459,149462,149463,28654],{},"JSON 字符串用 ",[28,149460,149461],{},"json.loads()","，JSON 文件用 ",[28,149464,149465],{},"json.load()",[380,149467,149468,149469,28654],{},"中文 JSON 保存时加 ",[28,149470,149471],{},"ensure_ascii=False",[380,149473,149474],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[365,149476,149478],{"id":149477},"_1013-本章练习","10.13 本章练习",[377,149480,149481,149484,149487,149490,149493],{},[380,149482,149483],{},"安装 pyecharts 并生成第一个折线图。",[380,149485,149486],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[380,149488,149489],{},"绘制两条折线，对比线上和线下销售额。",[380,149491,149492],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[380,149494,149495],{},"对含有空值的销售数据进行清洗后再绘图。",[342,149497,149498],{},"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":46,"searchDepth":67,"depth":67,"links":149500},[149501,149502,149503,149504,149505,149506,149507,149508,149509,149510,149511,149512,149513],{"id":147117,"depth":67,"text":147118},{"id":147192,"depth":67,"text":147193},{"id":147371,"depth":67,"text":147372},{"id":147422,"depth":67,"text":147423},{"id":147556,"depth":67,"text":147557},{"id":147832,"depth":67,"text":147833},{"id":147958,"depth":67,"text":147959},{"id":148169,"depth":67,"text":148170},{"id":148540,"depth":67,"text":148541},{"id":148752,"depth":67,"text":148753},{"id":149124,"depth":67,"text":149125},{"id":149440,"depth":67,"text":149441},{"id":149477,"depth":67,"text":149478},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147109,"description":347},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149520,"title":149521,"body":149522,"description":347,"extension":348,"meta":151882,"navigation":350,"path":151883,"seo":151884,"stem":151885,"__hash__":151886},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149523,"toc":151859},[149524,149527,149531,149534,149537,149613,149616,149707,149710,149714,149717,149761,149774,149778,149781,149848,149851,149855,149858,149942,149950,149954,149959,150100,150103,150114,150120,150126,150240,150244,150247,150250,150503,150506,150510,150513,150617,150620,150624,150775,150779,150786,150899,150903,150906,151012,151015,151019,151022,151053,151056,151161,151164,151168,151172,151182,151250,151254,151261,151325,151328,151332,151338,151434,151443,151447,151771,151780,151784,151812,151816,151856],[10,149525,149521],{"id":149526},"_11-面向对象基础",[365,149528,149530],{"id":149529},"_111-什么是面向对象","11.1 什么是面向对象",[14,149532,149533],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,149535,149536],{},"面向过程：",[49,149538,149540],{"className":122,"code":149539,"language":124,"meta":46,"style":46},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[28,149541,149542,149551,149559,149563,149573,149604,149608],{"__ignoreMap":46},[57,149543,149544,149546,149548],{"class":59,"line":60},[57,149545,146733],{"class":140},[57,149547,156],{"class":136},[57,149549,149550],{"class":74}," \"小明\"\n",[57,149552,149553,149555,149557],{"class":59,"line":67},[57,149554,146743],{"class":140},[57,149556,156],{"class":136},[57,149558,146748],{"class":81},[57,149560,149561],{"class":59,"line":144},[57,149562,2673],{"emptyLinePlaceholder":350},[57,149564,149565,149567,149570],{"class":59,"line":150},[57,149566,32144],{"class":136},[57,149568,149569],{"class":70}," introduce",[57,149571,149572],{"class":140},"(name, age):\n",[57,149574,149575,149577,149579,149581,149584,149586,149588,149590,149593,149595,149597,149599,149602],{"class":59,"line":162},[57,149576,31496],{"class":81},[57,149578,168],{"class":140},[57,149580,475],{"class":136},[57,149582,149583],{"class":74},"\"我叫",[57,149585,1312],{"class":81},[57,149587,80007],{"class":140},[57,149589,1362],{"class":81},[57,149591,149592],{"class":74},"，今年",[57,149594,1312],{"class":81},[57,149596,70418],{"class":140},[57,149598,1362],{"class":81},[57,149600,149601],{"class":74},"岁\"",[57,149603,238],{"class":140},[57,149605,149606],{"class":59,"line":180},[57,149607,2673],{"emptyLinePlaceholder":350},[57,149609,149610],{"class":59,"line":186},[57,149611,149612],{"class":140},"introduce(name, age)\n",[14,149614,149615],{},"面向对象：",[49,149617,149619],{"className":122,"code":149618,"language":124,"meta":46,"style":46},"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",[28,149620,149621,149629,149637,149666,149670,149674,149684,149693,149702],{"__ignoreMap":46},[57,149622,149623,149625,149627],{"class":59,"line":60},[57,149624,14966],{"class":136},[57,149626,8171],{"class":70},[57,149628,4012],{"class":140},[57,149630,149631,149633,149635],{"class":59,"line":67},[57,149632,30998],{"class":136},[57,149634,149569],{"class":70},[57,149636,31004],{"class":140},[57,149638,149639,149641,149643,149645,149647,149650,149652,149654,149656,149658,149660,149662,149664],{"class":59,"line":144},[57,149640,32648],{"class":81},[57,149642,168],{"class":140},[57,149644,475],{"class":136},[57,149646,149583],{"class":74},[57,149648,149649],{"class":81},"{self",[57,149651,80498],{"class":140},[57,149653,1362],{"class":81},[57,149655,149592],{"class":74},[57,149657,149649],{"class":81},[57,149659,80510],{"class":140},[57,149661,1362],{"class":81},[57,149663,149601],{"class":74},[57,149665,238],{"class":140},[57,149667,149668],{"class":59,"line":150},[57,149669,2673],{"emptyLinePlaceholder":350},[57,149671,149672],{"class":59,"line":162},[57,149673,2673],{"emptyLinePlaceholder":350},[57,149675,149676,149679,149681],{"class":59,"line":180},[57,149677,149678],{"class":140},"student ",[57,149680,156],{"class":136},[57,149682,149683],{"class":140}," Student()\n",[57,149685,149686,149689,149691],{"class":59,"line":186},[57,149687,149688],{"class":140},"student.name ",[57,149690,156],{"class":136},[57,149692,149550],{"class":74},[57,149694,149695,149698,149700],{"class":59,"line":197},[57,149696,149697],{"class":140},"student.age ",[57,149699,156],{"class":136},[57,149701,146748],{"class":81},[57,149703,149704],{"class":59,"line":241},[57,149705,149706],{"class":140},"student.introduce()\n",[14,149708,149709],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[365,149711,149713],{"id":149712},"_112-类和对象","11.2 类和对象",[14,149715,149716],{},"类是模板，对象是根据模板创建出来的具体实例。",[49,149718,149720],{"className":122,"code":149719,"language":124,"meta":46,"style":46},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[28,149721,149722,149730,149735,149739,149743,149752],{"__ignoreMap":46},[57,149723,149724,149726,149728],{"class":59,"line":60},[57,149725,14966],{"class":136},[57,149727,8171],{"class":70},[57,149729,4012],{"class":140},[57,149731,149732],{"class":59,"line":67},[57,149733,149734],{"class":136},"    pass\n",[57,149736,149737],{"class":59,"line":144},[57,149738,2673],{"emptyLinePlaceholder":350},[57,149740,149741],{"class":59,"line":150},[57,149742,2673],{"emptyLinePlaceholder":350},[57,149744,149745,149748,149750],{"class":59,"line":162},[57,149746,149747],{"class":140},"student1 ",[57,149749,156],{"class":136},[57,149751,149683],{"class":140},[57,149753,149754,149757,149759],{"class":59,"line":180},[57,149755,149756],{"class":140},"student2 ",[57,149758,156],{"class":136},[57,149760,149683],{"class":140},[14,149762,149763,149766,149767,101215,149770,149773],{},[28,149764,149765],{},"Student"," 是类，",[28,149768,149769],{},"student1",[28,149771,149772],{},"student2"," 是对象。",[365,149775,149777],{"id":149776},"_113-属性","11.3 属性",[14,149779,149780],{},"属性是对象保存的数据。",[49,149782,149784],{"className":122,"code":149783,"language":124,"meta":46,"style":46},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[28,149785,149786,149794,149798,149802,149806,149814,149822,149830,149834,149841],{"__ignoreMap":46},[57,149787,149788,149790,149792],{"class":59,"line":60},[57,149789,14966],{"class":136},[57,149791,8171],{"class":70},[57,149793,4012],{"class":140},[57,149795,149796],{"class":59,"line":67},[57,149797,149734],{"class":136},[57,149799,149800],{"class":59,"line":144},[57,149801,2673],{"emptyLinePlaceholder":350},[57,149803,149804],{"class":59,"line":150},[57,149805,2673],{"emptyLinePlaceholder":350},[57,149807,149808,149810,149812],{"class":59,"line":162},[57,149809,149678],{"class":140},[57,149811,156],{"class":136},[57,149813,149683],{"class":140},[57,149815,149816,149818,149820],{"class":59,"line":180},[57,149817,149688],{"class":140},[57,149819,156],{"class":136},[57,149821,149550],{"class":74},[57,149823,149824,149826,149828],{"class":59,"line":186},[57,149825,149697],{"class":140},[57,149827,156],{"class":136},[57,149829,146748],{"class":81},[57,149831,149832],{"class":59,"line":197},[57,149833,2673],{"emptyLinePlaceholder":350},[57,149835,149836,149838],{"class":59,"line":241},[57,149837,165],{"class":81},[57,149839,149840],{"class":140},"(student.name)\n",[57,149842,149843,149845],{"class":59,"line":249},[57,149844,165],{"class":81},[57,149846,149847],{"class":140},"(student.age)\n",[14,149849,149850],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[365,149852,149854],{"id":149853},"_114-方法","11.4 方法",[14,149856,149857],{},"类中的函数叫方法。",[49,149859,149860],{"className":122,"code":149618,"language":124,"meta":46,"style":46},[28,149861,149862,149870,149878,149906,149910,149914,149922,149930,149938],{"__ignoreMap":46},[57,149863,149864,149866,149868],{"class":59,"line":60},[57,149865,14966],{"class":136},[57,149867,8171],{"class":70},[57,149869,4012],{"class":140},[57,149871,149872,149874,149876],{"class":59,"line":67},[57,149873,30998],{"class":136},[57,149875,149569],{"class":70},[57,149877,31004],{"class":140},[57,149879,149880,149882,149884,149886,149888,149890,149892,149894,149896,149898,149900,149902,149904],{"class":59,"line":144},[57,149881,32648],{"class":81},[57,149883,168],{"class":140},[57,149885,475],{"class":136},[57,149887,149583],{"class":74},[57,149889,149649],{"class":81},[57,149891,80498],{"class":140},[57,149893,1362],{"class":81},[57,149895,149592],{"class":74},[57,149897,149649],{"class":81},[57,149899,80510],{"class":140},[57,149901,1362],{"class":81},[57,149903,149601],{"class":74},[57,149905,238],{"class":140},[57,149907,149908],{"class":59,"line":150},[57,149909,2673],{"emptyLinePlaceholder":350},[57,149911,149912],{"class":59,"line":162},[57,149913,2673],{"emptyLinePlaceholder":350},[57,149915,149916,149918,149920],{"class":59,"line":180},[57,149917,149678],{"class":140},[57,149919,156],{"class":136},[57,149921,149683],{"class":140},[57,149923,149924,149926,149928],{"class":59,"line":186},[57,149925,149688],{"class":140},[57,149927,156],{"class":136},[57,149929,149550],{"class":74},[57,149931,149932,149934,149936],{"class":59,"line":197},[57,149933,149697],{"class":140},[57,149935,156],{"class":136},[57,149937,146748],{"class":81},[57,149939,149940],{"class":59,"line":241},[57,149941,149706],{"class":140},[14,149943,149944,149946,149947,149949],{},[28,149945,31020],{}," 表示当前对象。调用方法时不需要手动传入 ",[28,149948,31020],{},"，Python 会自动传。",[365,149951,149953],{"id":149952},"_115-构造方法__init__","11.5 构造方法__init__",[14,149955,149956,149958],{},[28,149957,31026],{}," 在对象创建时自动执行，用于初始化属性。",[49,149960,149962],{"className":122,"code":149961,"language":124,"meta":46,"style":46},"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",[28,149963,149964,149972,149981,149993,150005,150016,150020,150028,150066,150070,150074,150096],{"__ignoreMap":46},[57,149965,149966,149968,149970],{"class":59,"line":60},[57,149967,14966],{"class":136},[57,149969,8171],{"class":70},[57,149971,4012],{"class":140},[57,149973,149974,149976,149978],{"class":59,"line":67},[57,149975,30998],{"class":136},[57,149977,31001],{"class":81},[57,149979,149980],{"class":140},"(self, name, age, score):\n",[57,149982,149983,149985,149988,149990],{"class":59,"line":144},[57,149984,31042],{"class":81},[57,149986,149987],{"class":140},".name ",[57,149989,156],{"class":136},[57,149991,149992],{"class":140}," name\n",[57,149994,149995,149997,150000,150002],{"class":59,"line":150},[57,149996,31042],{"class":81},[57,149998,149999],{"class":140},".age ",[57,150001,156],{"class":136},[57,150003,150004],{"class":140}," age\n",[57,150006,150007,150009,150012,150014],{"class":59,"line":162},[57,150008,31042],{"class":81},[57,150010,150011],{"class":140},".score ",[57,150013,156],{"class":136},[57,150015,1861],{"class":140},[57,150017,150018],{"class":59,"line":180},[57,150019,2673],{"emptyLinePlaceholder":350},[57,150021,150022,150024,150026],{"class":59,"line":186},[57,150023,30998],{"class":136},[57,150025,149569],{"class":70},[57,150027,31004],{"class":140},[57,150029,150030,150032,150034,150036,150038,150040,150042,150044,150046,150048,150050,150052,150055,150057,150060,150062,150064],{"class":59,"line":197},[57,150031,32648],{"class":81},[57,150033,168],{"class":140},[57,150035,475],{"class":136},[57,150037,149583],{"class":74},[57,150039,149649],{"class":81},[57,150041,80498],{"class":140},[57,150043,1362],{"class":81},[57,150045,149592],{"class":74},[57,150047,149649],{"class":81},[57,150049,80510],{"class":140},[57,150051,1362],{"class":81},[57,150053,150054],{"class":74},"岁，成绩",[57,150056,149649],{"class":81},[57,150058,150059],{"class":140},".score",[57,150061,1362],{"class":81},[57,150063,668],{"class":74},[57,150065,238],{"class":140},[57,150067,150068],{"class":59,"line":241},[57,150069,2673],{"emptyLinePlaceholder":350},[57,150071,150072],{"class":59,"line":249},[57,150073,2673],{"emptyLinePlaceholder":350},[57,150075,150076,150078,150080,150083,150086,150088,150090,150092,150094],{"class":59,"line":262},[57,150077,149678],{"class":140},[57,150079,156],{"class":136},[57,150081,150082],{"class":140}," Student(",[57,150084,150085],{"class":74},"\"小明\"",[57,150087,12708],{"class":140},[57,150089,1066],{"class":81},[57,150091,12708],{"class":140},[57,150093,1404],{"class":81},[57,150095,238],{"class":140},[57,150097,150098],{"class":59,"line":281},[57,150099,149706],{"class":140},[14,150101,150102],{},"构造方法的好处：",[377,150104,150105,150108,150111],{},[380,150106,150107],{},"创建对象时必须提供必要数据。",[380,150109,150110],{},"属性初始化集中，不容易漏。",[380,150112,150113],{},"对象状态更完整。",[365,150115,150117,150118],{"id":150116},"_116-str","11.6 ",[33,150119,1585],{},[14,150121,150122,150123,28654],{},"直接打印对象时，默认输出不直观。可以定义 ",[28,150124,150125],{},"__str__",[49,150127,150129],{"className":122,"code":150128,"language":124,"meta":46,"style":46},"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",[28,150130,150131,150139,150148,150158,150168,150172,150181,150209,150213,150217,150233],{"__ignoreMap":46},[57,150132,150133,150135,150137],{"class":59,"line":60},[57,150134,14966],{"class":136},[57,150136,8171],{"class":70},[57,150138,4012],{"class":140},[57,150140,150141,150143,150145],{"class":59,"line":67},[57,150142,30998],{"class":136},[57,150144,31001],{"class":81},[57,150146,150147],{"class":140},"(self, name, age):\n",[57,150149,150150,150152,150154,150156],{"class":59,"line":144},[57,150151,31042],{"class":81},[57,150153,149987],{"class":140},[57,150155,156],{"class":136},[57,150157,149992],{"class":140},[57,150159,150160,150162,150164,150166],{"class":59,"line":150},[57,150161,31042],{"class":81},[57,150163,149999],{"class":140},[57,150165,156],{"class":136},[57,150167,150004],{"class":140},[57,150169,150170],{"class":59,"line":162},[57,150171,2673],{"emptyLinePlaceholder":350},[57,150173,150174,150176,150179],{"class":59,"line":180},[57,150175,30998],{"class":136},[57,150177,150178],{"class":81}," __str__",[57,150180,31004],{"class":140},[57,150182,150183,150185,150188,150191,150193,150195,150197,150200,150202,150204,150206],{"class":59,"line":186},[57,150184,15024],{"class":136},[57,150186,150187],{"class":136}," f",[57,150189,150190],{"class":74},"\"Student(name=",[57,150192,149649],{"class":81},[57,150194,80498],{"class":140},[57,150196,1362],{"class":81},[57,150198,150199],{"class":74},", age=",[57,150201,149649],{"class":81},[57,150203,80510],{"class":140},[57,150205,1362],{"class":81},[57,150207,150208],{"class":74},")\"\n",[57,150210,150211],{"class":59,"line":197},[57,150212,2673],{"emptyLinePlaceholder":350},[57,150214,150215],{"class":59,"line":241},[57,150216,2673],{"emptyLinePlaceholder":350},[57,150218,150219,150221,150223,150225,150227,150229,150231],{"class":59,"line":249},[57,150220,149678],{"class":140},[57,150222,156],{"class":136},[57,150224,150082],{"class":140},[57,150226,150085],{"class":74},[57,150228,12708],{"class":140},[57,150230,1066],{"class":81},[57,150232,238],{"class":140},[57,150234,150235,150237],{"class":59,"line":262},[57,150236,165],{"class":81},[57,150238,150239],{"class":140},"(student)\n",[365,150241,150243],{"id":150242},"_117-封装","11.7 封装",[14,150245,150246],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,150248,150249],{},"Python 中以双下划线开头的属性通常视为私有属性。",[49,150251,150253],{"className":122,"code":150252,"language":124,"meta":46,"style":46},"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",[28,150254,150255,150264,150273,150285,150297,150301,150310,150319,150323,150333,150346,150357,150362,150373,150377,150386,150398,150409,150413,150426,150437,150441,150452,150456,150460,150478,150487,150496],{"__ignoreMap":46},[57,150256,150257,150259,150262],{"class":59,"line":60},[57,150258,14966],{"class":136},[57,150260,150261],{"class":70}," Account",[57,150263,4012],{"class":140},[57,150265,150266,150268,150270],{"class":59,"line":67},[57,150267,30998],{"class":136},[57,150269,31001],{"class":81},[57,150271,150272],{"class":140},"(self, owner, balance):\n",[57,150274,150275,150277,150280,150282],{"class":59,"line":144},[57,150276,31042],{"class":81},[57,150278,150279],{"class":140},".owner ",[57,150281,156],{"class":136},[57,150283,150284],{"class":140}," owner\n",[57,150286,150287,150289,150292,150294],{"class":59,"line":150},[57,150288,31042],{"class":81},[57,150290,150291],{"class":140},".__balance ",[57,150293,156],{"class":136},[57,150295,150296],{"class":140}," balance\n",[57,150298,150299],{"class":59,"line":162},[57,150300,2673],{"emptyLinePlaceholder":350},[57,150302,150303,150305,150308],{"class":59,"line":180},[57,150304,30998],{"class":136},[57,150306,150307],{"class":70}," get_balance",[57,150309,31004],{"class":140},[57,150311,150312,150314,150316],{"class":59,"line":186},[57,150313,15024],{"class":136},[57,150315,39070],{"class":81},[57,150317,150318],{"class":140},".__balance\n",[57,150320,150321],{"class":59,"line":197},[57,150322,2673],{"emptyLinePlaceholder":350},[57,150324,150325,150327,150330],{"class":59,"line":241},[57,150326,30998],{"class":136},[57,150328,150329],{"class":70}," deposit",[57,150331,150332],{"class":140},"(self, money):\n",[57,150334,150335,150337,150340,150342,150344],{"class":59,"line":249},[57,150336,2770],{"class":136},[57,150338,150339],{"class":140}," money ",[57,150341,1870],{"class":136},[57,150343,4366],{"class":81},[57,150345,4012],{"class":140},[57,150347,150348,150350,150352,150355],{"class":59,"line":262},[57,150349,34847],{"class":81},[57,150351,168],{"class":140},[57,150353,150354],{"class":74},"\"存款金额必须大于0\"",[57,150356,238],{"class":140},[57,150358,150359],{"class":59,"line":281},[57,150360,150361],{"class":136},"            return\n",[57,150363,150364,150366,150368,150370],{"class":59,"line":287},[57,150365,31042],{"class":81},[57,150367,150291],{"class":140},[57,150369,9750],{"class":136},[57,150371,150372],{"class":140}," money\n",[57,150374,150375],{"class":59,"line":298},[57,150376,2673],{"emptyLinePlaceholder":350},[57,150378,150379,150381,150384],{"class":59,"line":311},[57,150380,30998],{"class":136},[57,150382,150383],{"class":70}," withdraw",[57,150385,150332],{"class":140},[57,150387,150388,150390,150392,150394,150396],{"class":59,"line":322},[57,150389,2770],{"class":136},[57,150391,150339],{"class":140},[57,150393,1870],{"class":136},[57,150395,4366],{"class":81},[57,150397,4012],{"class":140},[57,150399,150400,150402,150404,150407],{"class":59,"line":1929},[57,150401,34847],{"class":81},[57,150403,168],{"class":140},[57,150405,150406],{"class":74},"\"取款金额必须大于0\"",[57,150408,238],{"class":140},[57,150410,150411],{"class":59,"line":1950},[57,150412,150361],{"class":136},[57,150414,150415,150417,150419,150421,150423],{"class":59,"line":1955},[57,150416,2770],{"class":136},[57,150418,150339],{"class":140},[57,150420,223],{"class":136},[57,150422,39070],{"class":81},[57,150424,150425],{"class":140},".__balance:\n",[57,150427,150428,150430,150432,150435],{"class":59,"line":1969},[57,150429,34847],{"class":81},[57,150431,168],{"class":140},[57,150433,150434],{"class":74},"\"余额不足\"",[57,150436,238],{"class":140},[57,150438,150439],{"class":59,"line":1974},[57,150440,150361],{"class":136},[57,150442,150443,150445,150447,150450],{"class":59,"line":2001},[57,150444,31042],{"class":81},[57,150446,150291],{"class":140},[57,150448,150449],{"class":136},"-=",[57,150451,150372],{"class":140},[57,150453,150454],{"class":59,"line":2006},[57,150455,2673],{"emptyLinePlaceholder":350},[57,150457,150458],{"class":59,"line":2023},[57,150459,2673],{"emptyLinePlaceholder":350},[57,150461,150462,150465,150467,150470,150472,150474,150476],{"class":59,"line":2028},[57,150463,150464],{"class":140},"account ",[57,150466,156],{"class":136},[57,150468,150469],{"class":140}," Account(",[57,150471,150085],{"class":74},[57,150473,12708],{"class":140},[57,150475,6683],{"class":81},[57,150477,238],{"class":140},[57,150479,150480,150483,150485],{"class":59,"line":2033},[57,150481,150482],{"class":140},"account.deposit(",[57,150484,1996],{"class":81},[57,150486,238],{"class":140},[57,150488,150489,150492,150494],{"class":59,"line":2038},[57,150490,150491],{"class":140},"account.withdraw(",[57,150493,728],{"class":81},[57,150495,238],{"class":140},[57,150497,150498,150500],{"class":59,"line":2052},[57,150499,165],{"class":81},[57,150501,150502],{"class":140},"(account.get_balance())\n",[14,150504,150505],{},"封装的意义是避免外部随意修改内部状态。",[365,150507,150509],{"id":150508},"_118-继承","11.8 继承",[14,150511,150512],{},"继承可以让子类复用父类的属性和方法。",[49,150514,150516],{"className":122,"code":150515,"language":124,"meta":46,"style":46},"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",[28,150517,150518,150527,150536,150547,150551,150555,150569,150578,150589,150593,150597,150607,150612],{"__ignoreMap":46},[57,150519,150520,150522,150525],{"class":59,"line":60},[57,150521,14966],{"class":136},[57,150523,150524],{"class":70}," Animal",[57,150526,4012],{"class":140},[57,150528,150529,150531,150534],{"class":59,"line":67},[57,150530,30998],{"class":136},[57,150532,150533],{"class":70}," eat",[57,150535,31004],{"class":140},[57,150537,150538,150540,150542,150545],{"class":59,"line":144},[57,150539,32648],{"class":81},[57,150541,168],{"class":140},[57,150543,150544],{"class":74},"\"吃东西\"",[57,150546,238],{"class":140},[57,150548,150549],{"class":59,"line":150},[57,150550,2673],{"emptyLinePlaceholder":350},[57,150552,150553],{"class":59,"line":162},[57,150554,2673],{"emptyLinePlaceholder":350},[57,150556,150557,150559,150562,150564,150567],{"class":59,"line":180},[57,150558,14966],{"class":136},[57,150560,150561],{"class":70}," Dog",[57,150563,168],{"class":140},[57,150565,150566],{"class":70},"Animal",[57,150568,30983],{"class":140},[57,150570,150571,150573,150576],{"class":59,"line":186},[57,150572,30998],{"class":136},[57,150574,150575],{"class":70}," bark",[57,150577,31004],{"class":140},[57,150579,150580,150582,150584,150587],{"class":59,"line":197},[57,150581,32648],{"class":81},[57,150583,168],{"class":140},[57,150585,150586],{"class":74},"\"汪汪\"",[57,150588,238],{"class":140},[57,150590,150591],{"class":59,"line":241},[57,150592,2673],{"emptyLinePlaceholder":350},[57,150594,150595],{"class":59,"line":249},[57,150596,2673],{"emptyLinePlaceholder":350},[57,150598,150599,150602,150604],{"class":59,"line":262},[57,150600,150601],{"class":140},"dog ",[57,150603,156],{"class":136},[57,150605,150606],{"class":140}," Dog()\n",[57,150608,150609],{"class":59,"line":281},[57,150610,150611],{"class":140},"dog.eat()\n",[57,150613,150614],{"class":59,"line":287},[57,150615,150616],{"class":140},"dog.bark()\n",[14,150618,150619],{},"子类可以扩展新方法，也可以重写父类方法。",[365,150621,150623],{"id":150622},"_119-方法重写","11.9 方法重写",[49,150625,150627],{"className":122,"code":150626,"language":124,"meta":46,"style":46},"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",[28,150628,150629,150637,150646,150657,150661,150665,150677,150685,150695,150699,150703,150716,150724,150735,150739,150743,150751,150761,150765,150770],{"__ignoreMap":46},[57,150630,150631,150633,150635],{"class":59,"line":60},[57,150632,14966],{"class":136},[57,150634,150524],{"class":70},[57,150636,4012],{"class":140},[57,150638,150639,150641,150644],{"class":59,"line":67},[57,150640,30998],{"class":136},[57,150642,150643],{"class":70}," speak",[57,150645,31004],{"class":140},[57,150647,150648,150650,150652,150655],{"class":59,"line":144},[57,150649,32648],{"class":81},[57,150651,168],{"class":140},[57,150653,150654],{"class":74},"\"动物叫\"",[57,150656,238],{"class":140},[57,150658,150659],{"class":59,"line":150},[57,150660,2673],{"emptyLinePlaceholder":350},[57,150662,150663],{"class":59,"line":162},[57,150664,2673],{"emptyLinePlaceholder":350},[57,150666,150667,150669,150671,150673,150675],{"class":59,"line":180},[57,150668,14966],{"class":136},[57,150670,150561],{"class":70},[57,150672,168],{"class":140},[57,150674,150566],{"class":70},[57,150676,30983],{"class":140},[57,150678,150679,150681,150683],{"class":59,"line":186},[57,150680,30998],{"class":136},[57,150682,150643],{"class":70},[57,150684,31004],{"class":140},[57,150686,150687,150689,150691,150693],{"class":59,"line":197},[57,150688,32648],{"class":81},[57,150690,168],{"class":140},[57,150692,150586],{"class":74},[57,150694,238],{"class":140},[57,150696,150697],{"class":59,"line":241},[57,150698,2673],{"emptyLinePlaceholder":350},[57,150700,150701],{"class":59,"line":249},[57,150702,2673],{"emptyLinePlaceholder":350},[57,150704,150705,150707,150710,150712,150714],{"class":59,"line":262},[57,150706,14966],{"class":136},[57,150708,150709],{"class":70}," Cat",[57,150711,168],{"class":140},[57,150713,150566],{"class":70},[57,150715,30983],{"class":140},[57,150717,150718,150720,150722],{"class":59,"line":281},[57,150719,30998],{"class":136},[57,150721,150643],{"class":70},[57,150723,31004],{"class":140},[57,150725,150726,150728,150730,150733],{"class":59,"line":287},[57,150727,32648],{"class":81},[57,150729,168],{"class":140},[57,150731,150732],{"class":74},"\"喵喵\"",[57,150734,238],{"class":140},[57,150736,150737],{"class":59,"line":298},[57,150738,2673],{"emptyLinePlaceholder":350},[57,150740,150741],{"class":59,"line":311},[57,150742,2673],{"emptyLinePlaceholder":350},[57,150744,150745,150747,150749],{"class":59,"line":322},[57,150746,150601],{"class":140},[57,150748,156],{"class":136},[57,150750,150606],{"class":140},[57,150752,150753,150756,150758],{"class":59,"line":1929},[57,150754,150755],{"class":140},"cat ",[57,150757,156],{"class":136},[57,150759,150760],{"class":140}," Cat()\n",[57,150762,150763],{"class":59,"line":1950},[57,150764,2673],{"emptyLinePlaceholder":350},[57,150766,150767],{"class":59,"line":1955},[57,150768,150769],{"class":140},"dog.speak()\n",[57,150771,150772],{"class":59,"line":1969},[57,150773,150774],{"class":140},"cat.speak()\n",[365,150776,150778],{"id":150777},"_1110-super","11.10 super",[14,150780,150781,150782,150785],{},"子类可以通过 ",[28,150783,150784],{},"super()"," 调用父类方法。",[49,150787,150789],{"className":122,"code":150788,"language":124,"meta":46,"style":46},"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",[28,150790,150791,150799,150808,150818,150822,150826,150838,150847,150858,150868,150872,150876,150892],{"__ignoreMap":46},[57,150792,150793,150795,150797],{"class":59,"line":60},[57,150794,14966],{"class":136},[57,150796,15841],{"class":70},[57,150798,4012],{"class":140},[57,150800,150801,150803,150805],{"class":59,"line":67},[57,150802,30998],{"class":136},[57,150804,31001],{"class":81},[57,150806,150807],{"class":140},"(self, name):\n",[57,150809,150810,150812,150814,150816],{"class":59,"line":144},[57,150811,31042],{"class":81},[57,150813,149987],{"class":140},[57,150815,156],{"class":136},[57,150817,149992],{"class":140},[57,150819,150820],{"class":59,"line":150},[57,150821,2673],{"emptyLinePlaceholder":350},[57,150823,150824],{"class":59,"line":162},[57,150825,2673],{"emptyLinePlaceholder":350},[57,150827,150828,150830,150832,150834,150836],{"class":59,"line":180},[57,150829,14966],{"class":136},[57,150831,8171],{"class":70},[57,150833,168],{"class":140},[57,150835,19318],{"class":70},[57,150837,30983],{"class":140},[57,150839,150840,150842,150844],{"class":59,"line":186},[57,150841,30998],{"class":136},[57,150843,31001],{"class":81},[57,150845,150846],{"class":140},"(self, name, score):\n",[57,150848,150849,150851,150853,150855],{"class":59,"line":197},[57,150850,31014],{"class":81},[57,150852,17533],{"class":140},[57,150854,31026],{"class":81},[57,150856,150857],{"class":140},"(name)\n",[57,150859,150860,150862,150864,150866],{"class":59,"line":241},[57,150861,31042],{"class":81},[57,150863,150011],{"class":140},[57,150865,156],{"class":136},[57,150867,1861],{"class":140},[57,150869,150870],{"class":59,"line":249},[57,150871,2673],{"emptyLinePlaceholder":350},[57,150873,150874],{"class":59,"line":262},[57,150875,2673],{"emptyLinePlaceholder":350},[57,150877,150878,150880,150882,150884,150886,150888,150890],{"class":59,"line":281},[57,150879,149678],{"class":140},[57,150881,156],{"class":136},[57,150883,150082],{"class":140},[57,150885,150085],{"class":74},[57,150887,12708],{"class":140},[57,150889,1404],{"class":81},[57,150891,238],{"class":140},[57,150893,150894,150896],{"class":59,"line":287},[57,150895,165],{"class":81},[57,150897,150898],{"class":140},"(student.name, student.score)\n",[365,150900,150902],{"id":150901},"_1111-多态","11.11 多态",[14,150904,150905],{},"多态指不同对象响应同一个方法，表现出不同结果。",[49,150907,150909],{"className":122,"code":150908,"language":124,"meta":46,"style":46},"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",[28,150910,150911,150919,150927,150937,150941,150945,150953,150961,150971,150975,150979,150989,150994,150998,151002,151007],{"__ignoreMap":46},[57,150912,150913,150915,150917],{"class":59,"line":60},[57,150914,14966],{"class":136},[57,150916,150561],{"class":70},[57,150918,4012],{"class":140},[57,150920,150921,150923,150925],{"class":59,"line":67},[57,150922,30998],{"class":136},[57,150924,150643],{"class":70},[57,150926,31004],{"class":140},[57,150928,150929,150931,150933,150935],{"class":59,"line":144},[57,150930,32648],{"class":81},[57,150932,168],{"class":140},[57,150934,150586],{"class":74},[57,150936,238],{"class":140},[57,150938,150939],{"class":59,"line":150},[57,150940,2673],{"emptyLinePlaceholder":350},[57,150942,150943],{"class":59,"line":162},[57,150944,2673],{"emptyLinePlaceholder":350},[57,150946,150947,150949,150951],{"class":59,"line":180},[57,150948,14966],{"class":136},[57,150950,150709],{"class":70},[57,150952,4012],{"class":140},[57,150954,150955,150957,150959],{"class":59,"line":186},[57,150956,30998],{"class":136},[57,150958,150643],{"class":70},[57,150960,31004],{"class":140},[57,150962,150963,150965,150967,150969],{"class":59,"line":197},[57,150964,32648],{"class":81},[57,150966,168],{"class":140},[57,150968,150732],{"class":74},[57,150970,238],{"class":140},[57,150972,150973],{"class":59,"line":241},[57,150974,2673],{"emptyLinePlaceholder":350},[57,150976,150977],{"class":59,"line":249},[57,150978,2673],{"emptyLinePlaceholder":350},[57,150980,150981,150983,150986],{"class":59,"line":262},[57,150982,32144],{"class":136},[57,150984,150985],{"class":70}," make_sound",[57,150987,150988],{"class":140},"(animal):\n",[57,150990,150991],{"class":59,"line":281},[57,150992,150993],{"class":140},"    animal.speak()\n",[57,150995,150996],{"class":59,"line":287},[57,150997,2673],{"emptyLinePlaceholder":350},[57,150999,151000],{"class":59,"line":298},[57,151001,2673],{"emptyLinePlaceholder":350},[57,151003,151004],{"class":59,"line":311},[57,151005,151006],{"class":140},"make_sound(Dog())\n",[57,151008,151009],{"class":59,"line":322},[57,151010,151011],{"class":140},"make_sound(Cat())\n",[14,151013,151014],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[365,151016,151018],{"id":151017},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,151020,151021],{},"实例属性属于对象：",[49,151023,151025],{"className":122,"code":151024,"language":124,"meta":46,"style":46},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[28,151026,151027,151035,151043],{"__ignoreMap":46},[57,151028,151029,151031,151033],{"class":59,"line":60},[57,151030,14966],{"class":136},[57,151032,8171],{"class":70},[57,151034,4012],{"class":140},[57,151036,151037,151039,151041],{"class":59,"line":67},[57,151038,30998],{"class":136},[57,151040,31001],{"class":81},[57,151042,150807],{"class":140},[57,151044,151045,151047,151049,151051],{"class":59,"line":144},[57,151046,31042],{"class":81},[57,151048,149987],{"class":140},[57,151050,156],{"class":136},[57,151052,149992],{"class":140},[14,151054,151055],{},"类属性属于类，所有对象共享：",[49,151057,151059],{"className":122,"code":151058,"language":124,"meta":46,"style":46},"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",[28,151060,151061,151069,151079,151083,151091,151101,151105,151109,151122,151136,151140,151147,151154],{"__ignoreMap":46},[57,151062,151063,151065,151067],{"class":59,"line":60},[57,151064,14966],{"class":136},[57,151066,8171],{"class":70},[57,151068,4012],{"class":140},[57,151070,151071,151074,151076],{"class":59,"line":67},[57,151072,151073],{"class":140},"    school ",[57,151075,156],{"class":136},[57,151077,151078],{"class":74}," \"黑马学校\"\n",[57,151080,151081],{"class":59,"line":144},[57,151082,2673],{"emptyLinePlaceholder":350},[57,151084,151085,151087,151089],{"class":59,"line":150},[57,151086,30998],{"class":136},[57,151088,31001],{"class":81},[57,151090,150807],{"class":140},[57,151092,151093,151095,151097,151099],{"class":59,"line":162},[57,151094,31042],{"class":81},[57,151096,149987],{"class":140},[57,151098,156],{"class":136},[57,151100,149992],{"class":140},[57,151102,151103],{"class":59,"line":180},[57,151104,2673],{"emptyLinePlaceholder":350},[57,151106,151107],{"class":59,"line":186},[57,151108,2673],{"emptyLinePlaceholder":350},[57,151110,151111,151114,151116,151118,151120],{"class":59,"line":197},[57,151112,151113],{"class":140},"s1 ",[57,151115,156],{"class":136},[57,151117,150082],{"class":140},[57,151119,150085],{"class":74},[57,151121,238],{"class":140},[57,151123,151124,151127,151129,151131,151134],{"class":59,"line":241},[57,151125,151126],{"class":140},"s2 ",[57,151128,156],{"class":136},[57,151130,150082],{"class":140},[57,151132,151133],{"class":74},"\"小红\"",[57,151135,238],{"class":140},[57,151137,151138],{"class":59,"line":249},[57,151139,2673],{"emptyLinePlaceholder":350},[57,151141,151142,151144],{"class":59,"line":262},[57,151143,165],{"class":81},[57,151145,151146],{"class":140},"(s1.school)\n",[57,151148,151149,151151],{"class":59,"line":281},[57,151150,165],{"class":81},[57,151152,151153],{"class":140},"(s2.school)\n",[57,151155,151156,151158],{"class":59,"line":287},[57,151157,165],{"class":81},[57,151159,151160],{"class":140},"(Student.school)\n",[14,151162,151163],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[365,151165,151167],{"id":151166},"_1113-类方法和静态方法","11.13 类方法和静态方法",[394,151169,151171],{"id":151170},"_11131-类方法","11.13.1 类方法",[14,151173,151174,151175,151178,151179,28654],{},"类方法使用 ",[28,151176,151177],{},"@classmethod","，第一个参数通常是 ",[28,151180,151181],{},"cls",[49,151183,151185],{"className":122,"code":151184,"language":124,"meta":46,"style":46},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[28,151186,151187,151195,151203,151207,151215,151225,151235,151239,151243],{"__ignoreMap":46},[57,151188,151189,151191,151193],{"class":59,"line":60},[57,151190,14966],{"class":136},[57,151192,8171],{"class":70},[57,151194,4012],{"class":140},[57,151196,151197,151199,151201],{"class":59,"line":67},[57,151198,151073],{"class":140},[57,151200,156],{"class":136},[57,151202,151078],{"class":74},[57,151204,151205],{"class":59,"line":144},[57,151206,2673],{"emptyLinePlaceholder":350},[57,151208,151209,151212],{"class":59,"line":150},[57,151210,151211],{"class":70},"    @",[57,151213,151214],{"class":81},"classmethod\n",[57,151216,151217,151219,151222],{"class":59,"line":162},[57,151218,30998],{"class":136},[57,151220,151221],{"class":70}," get_school",[57,151223,151224],{"class":140},"(cls):\n",[57,151226,151227,151229,151232],{"class":59,"line":180},[57,151228,15024],{"class":136},[57,151230,151231],{"class":81}," cls",[57,151233,151234],{"class":140},".school\n",[57,151236,151237],{"class":59,"line":186},[57,151238,2673],{"emptyLinePlaceholder":350},[57,151240,151241],{"class":59,"line":197},[57,151242,2673],{"emptyLinePlaceholder":350},[57,151244,151245,151247],{"class":59,"line":241},[57,151246,165],{"class":81},[57,151248,151249],{"class":140},"(Student.get_school())\n",[394,151251,151253],{"id":151252},"_11132-静态方法","11.13.2 静态方法",[14,151255,151256,151257,151260],{},"静态方法使用 ",[28,151258,151259],{},"@staticmethod","，不需要访问实例和类。",[49,151262,151264],{"className":122,"code":151263,"language":124,"meta":46,"style":46},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[28,151265,151266,151275,151282,151291,151302,151306,151310],{"__ignoreMap":46},[57,151267,151268,151270,151273],{"class":59,"line":60},[57,151269,14966],{"class":136},[57,151271,151272],{"class":70}," MathUtils",[57,151274,4012],{"class":140},[57,151276,151277,151279],{"class":59,"line":67},[57,151278,151211],{"class":70},[57,151280,151281],{"class":81},"staticmethod\n",[57,151283,151284,151286,151288],{"class":59,"line":144},[57,151285,30998],{"class":136},[57,151287,5482],{"class":70},[57,151289,151290],{"class":140},"(a, b):\n",[57,151292,151293,151295,151297,151299],{"class":59,"line":150},[57,151294,15024],{"class":136},[57,151296,11142],{"class":140},[57,151298,897],{"class":136},[57,151300,151301],{"class":140}," b\n",[57,151303,151304],{"class":59,"line":162},[57,151305,2673],{"emptyLinePlaceholder":350},[57,151307,151308],{"class":59,"line":180},[57,151309,2673],{"emptyLinePlaceholder":350},[57,151311,151312,151314,151317,151319,151321,151323],{"class":59,"line":186},[57,151313,165],{"class":81},[57,151315,151316],{"class":140},"(MathUtils.add(",[57,151318,635],{"class":81},[57,151320,12708],{"class":140},[57,151322,498],{"class":81},[57,151324,259],{"class":140},[14,151326,151327],{},"静态方法本质上是放在类命名空间里的普通函数。",[365,151329,151331],{"id":151330},"_1114-dataclass","11.14 dataclass",[14,151333,151334,151337],{},[28,151335,151336],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[49,151339,151341],{"className":122,"code":151340,"language":124,"meta":46,"style":46},"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",[28,151342,151343,151355,151359,151363,151368,151376,151384,151392,151400,151404,151408,151428],{"__ignoreMap":46},[57,151344,151345,151347,151350,151352],{"class":59,"line":60},[57,151346,30934],{"class":136},[57,151348,151349],{"class":140}," dataclasses ",[57,151351,137],{"class":136},[57,151353,151354],{"class":140}," dataclass\n",[57,151356,151357],{"class":59,"line":67},[57,151358,2673],{"emptyLinePlaceholder":350},[57,151360,151361],{"class":59,"line":144},[57,151362,2673],{"emptyLinePlaceholder":350},[57,151364,151365],{"class":59,"line":150},[57,151366,151367],{"class":70},"@dataclass\n",[57,151369,151370,151372,151374],{"class":59,"line":162},[57,151371,14966],{"class":136},[57,151373,8171],{"class":70},[57,151375,4012],{"class":140},[57,151377,151378,151381],{"class":59,"line":180},[57,151379,151380],{"class":140},"    name: ",[57,151382,151383],{"class":81},"str\n",[57,151385,151386,151389],{"class":59,"line":186},[57,151387,151388],{"class":140},"    age: ",[57,151390,151391],{"class":81},"int\n",[57,151393,151394,151397],{"class":59,"line":197},[57,151395,151396],{"class":140},"    score: ",[57,151398,151399],{"class":81},"float\n",[57,151401,151402],{"class":59,"line":241},[57,151403,2673],{"emptyLinePlaceholder":350},[57,151405,151406],{"class":59,"line":249},[57,151407,2673],{"emptyLinePlaceholder":350},[57,151409,151410,151412,151414,151416,151418,151420,151422,151424,151426],{"class":59,"line":262},[57,151411,149678],{"class":140},[57,151413,156],{"class":136},[57,151415,150082],{"class":140},[57,151417,150085],{"class":74},[57,151419,12708],{"class":140},[57,151421,1066],{"class":81},[57,151423,12708],{"class":140},[57,151425,1404],{"class":81},[57,151427,238],{"class":140},[57,151429,151430,151432],{"class":59,"line":281},[57,151431,165],{"class":81},[57,151433,150239],{"class":140},[14,151435,151436,151437,630,151439,151442],{},"它会自动生成 ",[28,151438,31026],{},[28,151440,151441],{},"__repr__"," 等方法。适合数据模型类。",[365,151444,151446],{"id":151445},"_1115-小案例学生类","11.15 小案例：学生类",[49,151448,151450],{"className":122,"code":151449,"language":124,"meta":46,"style":46},"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",[28,151451,151452,151460,151469,151481,151491,151501,151511,151515,151524,151537,151541,151550,151556,151568,151580,151592,151604,151608,151612,151618,151628,151637,151647,151655,151663,151672,151676,151680,151688,151724,151728,151732,151757,151764],{"__ignoreMap":46},[57,151453,151454,151456,151458],{"class":59,"line":60},[57,151455,14966],{"class":136},[57,151457,8171],{"class":70},[57,151459,4012],{"class":140},[57,151461,151462,151464,151466],{"class":59,"line":67},[57,151463,30998],{"class":136},[57,151465,31001],{"class":81},[57,151467,151468],{"class":140},"(self, student_id, name, age, score):\n",[57,151470,151471,151473,151476,151478],{"class":59,"line":144},[57,151472,31042],{"class":81},[57,151474,151475],{"class":140},".student_id ",[57,151477,156],{"class":136},[57,151479,151480],{"class":140}," student_id\n",[57,151482,151483,151485,151487,151489],{"class":59,"line":150},[57,151484,31042],{"class":81},[57,151486,149987],{"class":140},[57,151488,156],{"class":136},[57,151490,149992],{"class":140},[57,151492,151493,151495,151497,151499],{"class":59,"line":162},[57,151494,31042],{"class":81},[57,151496,149999],{"class":140},[57,151498,156],{"class":136},[57,151500,150004],{"class":140},[57,151502,151503,151505,151507,151509],{"class":59,"line":180},[57,151504,31042],{"class":81},[57,151506,150011],{"class":140},[57,151508,156],{"class":136},[57,151510,1861],{"class":140},[57,151512,151513],{"class":59,"line":186},[57,151514,2673],{"emptyLinePlaceholder":350},[57,151516,151517,151519,151522],{"class":59,"line":197},[57,151518,30998],{"class":136},[57,151520,151521],{"class":70}," is_passed",[57,151523,31004],{"class":140},[57,151525,151526,151528,151530,151532,151534],{"class":59,"line":241},[57,151527,15024],{"class":136},[57,151529,39070],{"class":81},[57,151531,150011],{"class":140},[57,151533,1984],{"class":136},[57,151535,151536],{"class":81}," 60\n",[57,151538,151539],{"class":59,"line":249},[57,151540,2673],{"emptyLinePlaceholder":350},[57,151542,151543,151545,151548],{"class":59,"line":262},[57,151544,30998],{"class":136},[57,151546,151547],{"class":70}," to_dict",[57,151549,31004],{"class":140},[57,151551,151552,151554],{"class":59,"line":281},[57,151553,15024],{"class":136},[57,151555,15844],{"class":140},[57,151557,151558,151561,151563,151565],{"class":59,"line":287},[57,151559,151560],{"class":74},"            \"student_id\"",[57,151562,51634],{"class":140},[57,151564,31020],{"class":81},[57,151566,151567],{"class":140},".student_id,\n",[57,151569,151570,151573,151575,151577],{"class":59,"line":298},[57,151571,151572],{"class":74},"            \"name\"",[57,151574,51634],{"class":140},[57,151576,31020],{"class":81},[57,151578,151579],{"class":140},".name,\n",[57,151581,151582,151585,151587,151589],{"class":59,"line":311},[57,151583,151584],{"class":74},"            \"age\"",[57,151586,51634],{"class":140},[57,151588,31020],{"class":81},[57,151590,151591],{"class":140},".age,\n",[57,151593,151594,151597,151599,151601],{"class":59,"line":322},[57,151595,151596],{"class":74},"            \"score\"",[57,151598,51634],{"class":140},[57,151600,31020],{"class":81},[57,151602,151603],{"class":140},".score,\n",[57,151605,151606],{"class":59,"line":1929},[57,151607,2802],{"class":140},[57,151609,151610],{"class":59,"line":1950},[57,151611,2673],{"emptyLinePlaceholder":350},[57,151613,151614,151616],{"class":59,"line":1955},[57,151615,151211],{"class":70},[57,151617,151214],{"class":81},[57,151619,151620,151622,151625],{"class":59,"line":1969},[57,151621,30998],{"class":136},[57,151623,151624],{"class":70}," from_dict",[57,151626,151627],{"class":140},"(cls, data):\n",[57,151629,151630,151632,151634],{"class":59,"line":1974},[57,151631,15024],{"class":136},[57,151633,151231],{"class":81},[57,151635,151636],{"class":140},"(\n",[57,151638,151639,151642,151645],{"class":59,"line":2001},[57,151640,151641],{"class":140},"            data[",[57,151643,151644],{"class":74},"\"student_id\"",[57,151646,88033],{"class":140},[57,151648,151649,151651,151653],{"class":59,"line":2006},[57,151650,151641],{"class":140},[57,151652,62876],{"class":74},[57,151654,88033],{"class":140},[57,151656,151657,151659,151661],{"class":59,"line":2023},[57,151658,151641],{"class":140},[57,151660,69321],{"class":74},[57,151662,88033],{"class":140},[57,151664,151665,151667,151670],{"class":59,"line":2028},[57,151666,151641],{"class":140},[57,151668,151669],{"class":74},"\"score\"",[57,151671,88033],{"class":140},[57,151673,151674],{"class":59,"line":2033},[57,151675,38323],{"class":140},[57,151677,151678],{"class":59,"line":2038},[57,151679,2673],{"emptyLinePlaceholder":350},[57,151681,151682,151684,151686],{"class":59,"line":2052},[57,151683,30998],{"class":136},[57,151685,150178],{"class":81},[57,151687,31004],{"class":140},[57,151689,151690,151692,151694,151696,151698,151701,151703,151706,151708,151710,151712,151714,151716,151718,151720,151722],{"class":59,"line":2057},[57,151691,15024],{"class":136},[57,151693,150187],{"class":136},[57,151695,668],{"class":74},[57,151697,149649],{"class":81},[57,151699,151700],{"class":140},".student_id",[57,151702,1362],{"class":81},[57,151704,151705],{"class":81}," {self",[57,151707,80498],{"class":140},[57,151709,1362],{"class":81},[57,151711,151705],{"class":81},[57,151713,80510],{"class":140},[57,151715,1362],{"class":81},[57,151717,151705],{"class":81},[57,151719,150059],{"class":140},[57,151721,1362],{"class":81},[57,151723,25402],{"class":74},[57,151725,151726],{"class":59,"line":2850},[57,151727,2673],{"emptyLinePlaceholder":350},[57,151729,151730],{"class":59,"line":2864},[57,151731,2673],{"emptyLinePlaceholder":350},[57,151733,151734,151736,151738,151740,151743,151745,151747,151749,151751,151753,151755],{"class":59,"line":2872},[57,151735,149678],{"class":140},[57,151737,156],{"class":136},[57,151739,150082],{"class":140},[57,151741,151742],{"class":74},"\"001\"",[57,151744,12708],{"class":140},[57,151746,150085],{"class":74},[57,151748,12708],{"class":140},[57,151750,1066],{"class":81},[57,151752,12708],{"class":140},[57,151754,1404],{"class":81},[57,151756,238],{"class":140},[57,151758,151759,151761],{"class":59,"line":2877},[57,151760,165],{"class":81},[57,151762,151763],{"class":140},"(student.is_passed())\n",[57,151765,151766,151768],{"class":59,"line":2883},[57,151767,165],{"class":81},[57,151769,151770],{"class":140},"(student.to_dict())\n",[14,151772,151773,101215,151776,151779],{},[28,151774,151775],{},"to_dict()",[28,151777,151778],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[365,151781,151783],{"id":151782},"_1116-易错点","11.16 易错点",[377,151785,151786,151792,151798,151803,151806,151809],{},[380,151787,151788,151789,28654],{},"类名推荐使用大驼峰，如 ",[28,151790,151791],{},"StudentManager",[380,151793,151794,151795,151797],{},"方法第一个参数必须写 ",[28,151796,31020],{},"，调用时不用传。",[380,151799,151800,151802],{},[28,151801,31026],{}," 不是普通方法，它在创建对象时自动执行。",[380,151804,151805],{},"私有属性不是绝对安全，只是约定和名称改写。",[380,151807,151808],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[380,151810,151811],{},"类中方法太多时，说明职责可能过重。",[365,151813,151815],{"id":151814},"_1117-本章练习","11.17 本章练习",[377,151817,151818,151824,151830,151835,151848],{},[380,151819,151820,151821,151823],{},"定义 ",[28,151822,149765],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[380,151825,151820,151826,151829],{},[28,151827,151828],{},"Account"," 类，实现存款、取款、查询余额。",[380,151831,151820,151832,151834],{},[28,151833,17498],{}," 类，计算圆的周长和面积。",[380,151836,151820,151837,630,151840,151843,151844,151847],{},[28,151838,151839],{},"Dog",[28,151841,151842],{},"Cat"," 类，并用同一个函数调用它们的 ",[28,151845,151846],{},"speak()"," 方法。",[380,151849,104563,151850,151852,151853,28654],{},[28,151851,151336],{}," 定义一个商品类 ",[28,151854,151855],{},"Product",[342,151857,151858],{},"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":46,"searchDepth":67,"depth":67,"links":151860},[151861,151862,151863,151864,151865,151866,151868,151869,151870,151871,151872,151873,151874,151878,151879,151880,151881],{"id":149529,"depth":67,"text":149530},{"id":149712,"depth":67,"text":149713},{"id":149776,"depth":67,"text":149777},{"id":149853,"depth":67,"text":149854},{"id":149952,"depth":67,"text":149953},{"id":150116,"depth":67,"text":151867},"11.6 str",{"id":150242,"depth":67,"text":150243},{"id":150508,"depth":67,"text":150509},{"id":150622,"depth":67,"text":150623},{"id":150777,"depth":67,"text":150778},{"id":150901,"depth":67,"text":150902},{"id":151017,"depth":67,"text":151018},{"id":151166,"depth":67,"text":151167,"children":151875},[151876,151877],{"id":151170,"depth":144,"text":151171},{"id":151252,"depth":144,"text":151253},{"id":151330,"depth":67,"text":151331},{"id":151445,"depth":67,"text":151446},{"id":151782,"depth":67,"text":151783},{"id":151814,"depth":67,"text":151815},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149521,"description":347},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151888,"title":151889,"body":151890,"description":347,"extension":348,"meta":155203,"navigation":350,"path":155204,"seo":155205,"stem":155206,"__hash__":155207},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151891,"toc":155179},[151892,151895,151899,151902,151905,151934,151937,151945,151949,151953,151956,151979,151982,151988,151992,153438,153441,153462,153466,153469,153481,153484,153668,153671,153797,153800,153804,153808,153944,153948,154034,154038,154120,154124,154161,154165,154354,154358,154361,154591,154595,154598,154779,154782,154786,154789,154795,154798,154824,154828,154831,154845,154848,154873,154876,154890,154893,154910,154913,154930,154933,154950,154954,154980,154984,155007,155011,155014,155016,155022,155024,155045,155048,155054,155060,155064,155067,155143,155146,155150,155176],[10,151893,151889],{"id":151894},"_12-综合案例与复习路线",[365,151896,151898],{"id":151897},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,151900,151901],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,151903,151904],{},"一个合格的入门综合项目最好覆盖：",[377,151906,151907,151910,151913,151916,151919,151922,151925,151928,151931],{},[380,151908,151909],{},"输入输出。",[380,151911,151912],{},"判断和循环。",[380,151914,151915],{},"函数拆分。",[380,151917,151918],{},"列表、字典等容器。",[380,151920,151921],{},"文件持久化。",[380,151923,151924],{},"异常处理。",[380,151926,151927],{},"模块拆分。",[380,151929,151930],{},"可选：面向对象。",[380,151932,151933],{},"可选：数据可视化。",[14,151935,151936],{},"本章整理两个方向：",[377,151938,151939,151942],{},[380,151940,151941],{},"学生管理系统。",[380,151943,151944],{},"销售数据统计和可视化。",[365,151946,151948],{"id":151947},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[394,151950,151952],{"id":151951},"_1221-需求","12.2.1 需求",[14,151954,151955],{},"实现一个命令行学生管理系统：",[377,151957,151958,151961,151964,151967,151970,151973,151976],{},[380,151959,151960],{},"添加学生。",[380,151962,151963],{},"删除学生。",[380,151965,151966],{},"修改学生。",[380,151968,151969],{},"查询学生。",[380,151971,151972],{},"显示所有学生。",[380,151974,151975],{},"保存到 JSON 文件。",[380,151977,151978],{},"程序启动时自动读取 JSON 文件。",[14,151980,151981],{},"学生字段：",[49,151983,151986],{"className":151984,"code":151985,"language":5460,"meta":46},[5458],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[28,151987,151985],{"__ignoreMap":46},[365,151989,151991],{"id":151990},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[49,151993,151995],{"className":122,"code":151994,"language":124,"meta":46,"style":46},"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",[28,151996,151997,152003,152013,152017,152031,152035,152039,152048,152060,152066,152070,152076,152107,152117,152124,152135,152141,152145,152149,152159,152190,152216,152220,152224,152233,152244,152255,152266,152277,152288,152299,152310,152314,152318,152328,152340,152356,152363,152370,152374,152378,152388,152396,152403,152416,152426,152437,152441,152445,152454,152462,152468,152480,152488,152499,152503,152507,152516,152532,152536,152543,152554,152559,152563,152579,152594,152609,152613,152618,152626,152634,152642,152650,152654,152659,152670,152674,152678,152687,152702,152712,152716,152728,152739,152743,152747,152752,152756,152767,152771,152775,152784,152799,152807,152811,152823,152833,152837,152841,152856,152869,152882,152886,152899,152911,152923,152927,152931,152942,152946,152950,152959,152974,152982,152986,152998,153008,153012,153016,153021,153025,153029,153039,153045,153067,153086,153105,153124,153129,153133,153137,153146,153154,153165,153169,153173,153199,153209,153214,153218,153222,153230,153240,153244,153252,153257,153273,153277,153291,153296,153310,153315,153328,153333,153346,153351,153364,153369,153382,153393,153397,153403,153414,153418,153422,153434],{"__ignoreMap":46},[57,151998,151999,152001],{"class":59,"line":60},[57,152000,137],{"class":136},[57,152002,147288],{"class":140},[57,152004,152005,152007,152009,152011],{"class":59,"line":67},[57,152006,30934],{"class":136},[57,152008,108508],{"class":140},[57,152010,137],{"class":136},[57,152012,108513],{"class":140},[57,152014,152015],{"class":59,"line":144},[57,152016,2673],{"emptyLinePlaceholder":350},[57,152018,152019,152022,152024,152026,152029],{"class":59,"line":150},[57,152020,152021],{"class":81},"DATA_FILE",[57,152023,13837],{"class":136},[57,152025,108742],{"class":140},[57,152027,152028],{"class":74},"\"students.json\"",[57,152030,238],{"class":140},[57,152032,152033],{"class":59,"line":162},[57,152034,2673],{"emptyLinePlaceholder":350},[57,152036,152037],{"class":59,"line":180},[57,152038,2673],{"emptyLinePlaceholder":350},[57,152040,152041,152043,152046],{"class":59,"line":186},[57,152042,32144],{"class":136},[57,152044,152045],{"class":70}," load_students",[57,152047,32150],{"class":140},[57,152049,152050,152052,152054,152057],{"class":59,"line":197},[57,152051,3374],{"class":136},[57,152053,39127],{"class":136},[57,152055,152056],{"class":81}," DATA_FILE",[57,152058,152059],{"class":140},".exists():\n",[57,152061,152062,152064],{"class":59,"line":241},[57,152063,15024],{"class":136},[57,152065,52035],{"class":140},[57,152067,152068],{"class":59,"line":249},[57,152069,2673],{"emptyLinePlaceholder":350},[57,152071,152072,152074],{"class":59,"line":262},[57,152073,125981],{"class":136},[57,152075,4012],{"class":140},[57,152077,152078,152081,152083,152085,152087,152089,152091,152093,152095,152097,152099,152101,152103,152105],{"class":59,"line":281},[57,152079,152080],{"class":136},"        with",[57,152082,146988],{"class":81},[57,152084,168],{"class":140},[57,152086,152021],{"class":81},[57,152088,12708],{"class":140},[57,152090,146998],{"class":74},[57,152092,12708],{"class":140},[57,152094,147003],{"class":5489},[57,152096,156],{"class":136},[57,152098,147008],{"class":74},[57,152100,229],{"class":140},[57,152102,31580],{"class":136},[57,152104,148350],{"class":5489},[57,152106,4012],{"class":140},[57,152108,152109,152111,152113,152115],{"class":59,"line":287},[57,152110,16004],{"class":136},[57,152112,148361],{"class":140},[57,152114,45551],{"class":5489},[57,152116,238],{"class":140},[57,152118,152119,152121],{"class":59,"line":298},[57,152120,126009],{"class":136},[57,152122,152123],{"class":140}," json.JSONDecodeError:\n",[57,152125,152126,152128,152130,152133],{"class":59,"line":311},[57,152127,32648],{"class":81},[57,152129,168],{"class":140},[57,152131,152132],{"class":74},"\"数据文件格式错误，已使用空数据启动\"",[57,152134,238],{"class":140},[57,152136,152137,152139],{"class":59,"line":322},[57,152138,15024],{"class":136},[57,152140,52035],{"class":140},[57,152142,152143],{"class":59,"line":1929},[57,152144,2673],{"emptyLinePlaceholder":350},[57,152146,152147],{"class":59,"line":1950},[57,152148,2673],{"emptyLinePlaceholder":350},[57,152150,152151,152153,152156],{"class":59,"line":1955},[57,152152,32144],{"class":136},[57,152154,152155],{"class":70}," save_students",[57,152157,152158],{"class":140},"(students):\n",[57,152160,152161,152163,152165,152167,152169,152171,152174,152176,152178,152180,152182,152184,152186,152188],{"class":59,"line":1969},[57,152162,34375],{"class":136},[57,152164,146988],{"class":81},[57,152166,168],{"class":140},[57,152168,152021],{"class":81},[57,152170,12708],{"class":140},[57,152172,152173],{"class":74},"\"w\"",[57,152175,12708],{"class":140},[57,152177,147003],{"class":5489},[57,152179,156],{"class":136},[57,152181,147008],{"class":74},[57,152183,229],{"class":140},[57,152185,31580],{"class":136},[57,152187,148350],{"class":5489},[57,152189,4012],{"class":140},[57,152191,152192,152195,152197,152199,152201,152203,152205,152207,152210,152212,152214],{"class":59,"line":1974},[57,152193,152194],{"class":140},"        json.dump(students, ",[57,152196,45551],{"class":5489},[57,152198,12708],{"class":140},[57,152200,147334],{"class":5489},[57,152202,156],{"class":136},[57,152204,34184],{"class":81},[57,152206,12708],{"class":140},[57,152208,152209],{"class":5489},"indent",[57,152211,156],{"class":136},[57,152213,498],{"class":81},[57,152215,238],{"class":140},[57,152217,152218],{"class":59,"line":2001},[57,152219,2673],{"emptyLinePlaceholder":350},[57,152221,152222],{"class":59,"line":2006},[57,152223,2673],{"emptyLinePlaceholder":350},[57,152225,152226,152228,152231],{"class":59,"line":2023},[57,152227,32144],{"class":136},[57,152229,152230],{"class":70}," show_menu",[57,152232,32150],{"class":140},[57,152234,152235,152237,152239,152242],{"class":59,"line":2028},[57,152236,31496],{"class":81},[57,152238,168],{"class":140},[57,152240,152241],{"class":74},"\"====== 学生管理系统 ======\"",[57,152243,238],{"class":140},[57,152245,152246,152248,152250,152253],{"class":59,"line":2033},[57,152247,31496],{"class":81},[57,152249,168],{"class":140},[57,152251,152252],{"class":74},"\"1. 添加学生\"",[57,152254,238],{"class":140},[57,152256,152257,152259,152261,152264],{"class":59,"line":2038},[57,152258,31496],{"class":81},[57,152260,168],{"class":140},[57,152262,152263],{"class":74},"\"2. 删除学生\"",[57,152265,238],{"class":140},[57,152267,152268,152270,152272,152275],{"class":59,"line":2052},[57,152269,31496],{"class":81},[57,152271,168],{"class":140},[57,152273,152274],{"class":74},"\"3. 修改学生\"",[57,152276,238],{"class":140},[57,152278,152279,152281,152283,152286],{"class":59,"line":2057},[57,152280,31496],{"class":81},[57,152282,168],{"class":140},[57,152284,152285],{"class":74},"\"4. 查询学生\"",[57,152287,238],{"class":140},[57,152289,152290,152292,152294,152297],{"class":59,"line":2850},[57,152291,31496],{"class":81},[57,152293,168],{"class":140},[57,152295,152296],{"class":74},"\"5. 显示所有学生\"",[57,152298,238],{"class":140},[57,152300,152301,152303,152305,152308],{"class":59,"line":2864},[57,152302,31496],{"class":81},[57,152304,168],{"class":140},[57,152306,152307],{"class":74},"\"0. 退出系统\"",[57,152309,238],{"class":140},[57,152311,152312],{"class":59,"line":2872},[57,152313,2673],{"emptyLinePlaceholder":350},[57,152315,152316],{"class":59,"line":2877},[57,152317,2673],{"emptyLinePlaceholder":350},[57,152319,152320,152322,152325],{"class":59,"line":2883},[57,152321,32144],{"class":136},[57,152323,152324],{"class":70}," find_student",[57,152326,152327],{"class":140},"(students, student_id):\n",[57,152329,152330,152332,152335,152337],{"class":59,"line":2889},[57,152331,3474],{"class":136},[57,152333,152334],{"class":140}," student ",[57,152336,26312],{"class":136},[57,152338,152339],{"class":140}," students:\n",[57,152341,152342,152344,152347,152349,152351,152353],{"class":59,"line":2894},[57,152343,2770],{"class":136},[57,152345,152346],{"class":140}," student[",[57,152348,151644],{"class":74},[57,152350,4716],{"class":140},[57,152352,3222],{"class":136},[57,152354,152355],{"class":140}," student_id:\n",[57,152357,152358,152360],{"class":59,"line":8221},[57,152359,16004],{"class":136},[57,152361,152362],{"class":140}," student\n",[57,152364,152365,152367],{"class":59,"line":8245},[57,152366,4363],{"class":136},[57,152368,152369],{"class":81}," None\n",[57,152371,152372],{"class":59,"line":8250},[57,152373,2673],{"emptyLinePlaceholder":350},[57,152375,152376],{"class":59,"line":8256},[57,152377,2673],{"emptyLinePlaceholder":350},[57,152379,152380,152382,152385],{"class":59,"line":8283},[57,152381,32144],{"class":136},[57,152383,152384],{"class":70}," input_int",[57,152386,152387],{"class":140},"(prompt):\n",[57,152389,152390,152392,152394],{"class":59,"line":8288},[57,152391,2524],{"class":136},[57,152393,95489],{"class":81},[57,152395,4012],{"class":140},[57,152397,152398,152401],{"class":59,"line":8294},[57,152399,152400],{"class":136},"        try",[57,152402,4012],{"class":140},[57,152404,152405,152407,152409,152411,152413],{"class":59,"line":8306},[57,152406,16004],{"class":136},[57,152408,2655],{"class":81},[57,152410,168],{"class":140},[57,152412,54018],{"class":81},[57,152414,152415],{"class":140},"(prompt))\n",[57,152417,152418,152421,152424],{"class":59,"line":8318},[57,152419,152420],{"class":136},"        except",[57,152422,152423],{"class":81}," ValueError",[57,152425,4012],{"class":140},[57,152427,152428,152430,152432,152435],{"class":59,"line":8330},[57,152429,34847],{"class":81},[57,152431,168],{"class":140},[57,152433,152434],{"class":74},"\"请输入整数\"",[57,152436,238],{"class":140},[57,152438,152439],{"class":59,"line":9989},[57,152440,2673],{"emptyLinePlaceholder":350},[57,152442,152443],{"class":59,"line":10014},[57,152444,2673],{"emptyLinePlaceholder":350},[57,152446,152447,152449,152452],{"class":59,"line":10037},[57,152448,32144],{"class":136},[57,152450,152451],{"class":70}," input_float",[57,152453,152387],{"class":140},[57,152455,152456,152458,152460],{"class":59,"line":10061},[57,152457,2524],{"class":136},[57,152459,95489],{"class":81},[57,152461,4012],{"class":140},[57,152463,152464,152466],{"class":59,"line":10066},[57,152465,152400],{"class":136},[57,152467,4012],{"class":140},[57,152469,152470,152472,152474,152476,152478],{"class":59,"line":10071},[57,152471,16004],{"class":136},[57,152473,109994],{"class":81},[57,152475,168],{"class":140},[57,152477,54018],{"class":81},[57,152479,152415],{"class":140},[57,152481,152482,152484,152486],{"class":59,"line":10076},[57,152483,152420],{"class":136},[57,152485,152423],{"class":81},[57,152487,4012],{"class":140},[57,152489,152490,152492,152494,152497],{"class":59,"line":10085},[57,152491,34847],{"class":81},[57,152493,168],{"class":140},[57,152495,152496],{"class":74},"\"请输入数字\"",[57,152498,238],{"class":140},[57,152500,152501],{"class":59,"line":10090},[57,152502,2673],{"emptyLinePlaceholder":350},[57,152504,152505],{"class":59,"line":10096},[57,152506,2673],{"emptyLinePlaceholder":350},[57,152508,152509,152511,152514],{"class":59,"line":10117},[57,152510,32144],{"class":136},[57,152512,152513],{"class":70}," add_student",[57,152515,152158],{"class":140},[57,152517,152518,152521,152523,152525,152527,152530],{"class":59,"line":10123},[57,152519,152520],{"class":140},"    student_id ",[57,152522,156],{"class":136},[57,152524,60802],{"class":81},[57,152526,168],{"class":140},[57,152528,152529],{"class":74},"\"请输入学号:\"",[57,152531,238],{"class":140},[57,152533,152534],{"class":59,"line":10137},[57,152535,2673],{"emptyLinePlaceholder":350},[57,152537,152538,152540],{"class":59,"line":10143},[57,152539,3374],{"class":136},[57,152541,152542],{"class":140}," find_student(students, student_id):\n",[57,152544,152545,152547,152549,152552],{"class":59,"line":10170},[57,152546,32648],{"class":81},[57,152548,168],{"class":140},[57,152550,152551],{"class":74},"\"学号已存在\"",[57,152553,238],{"class":140},[57,152555,152556],{"class":59,"line":10179},[57,152557,152558],{"class":136},"        return\n",[57,152560,152561],{"class":59,"line":10185},[57,152562,2673],{"emptyLinePlaceholder":350},[57,152564,152565,152568,152570,152572,152574,152577],{"class":59,"line":10193},[57,152566,152567],{"class":140},"    name ",[57,152569,156],{"class":136},[57,152571,60802],{"class":81},[57,152573,168],{"class":140},[57,152575,152576],{"class":74},"\"请输入姓名:\"",[57,152578,238],{"class":140},[57,152580,152581,152584,152586,152589,152592],{"class":59,"line":10198},[57,152582,152583],{"class":140},"    age ",[57,152585,156],{"class":136},[57,152587,152588],{"class":140}," input_int(",[57,152590,152591],{"class":74},"\"请输入年龄:\"",[57,152593,238],{"class":140},[57,152595,152596,152599,152601,152604,152607],{"class":59,"line":16876},[57,152597,152598],{"class":140},"    score ",[57,152600,156],{"class":136},[57,152602,152603],{"class":140}," input_float(",[57,152605,152606],{"class":74},"\"请输入成绩:\"",[57,152608,238],{"class":140},[57,152610,152611],{"class":59,"line":16882},[57,152612,2673],{"emptyLinePlaceholder":350},[57,152614,152615],{"class":59,"line":16905},[57,152616,152617],{"class":140},"    students.append({\n",[57,152619,152620,152623],{"class":59,"line":16911},[57,152621,152622],{"class":74},"        \"student_id\"",[57,152624,152625],{"class":140},": student_id,\n",[57,152627,152628,152631],{"class":59,"line":16934},[57,152629,152630],{"class":74},"        \"name\"",[57,152632,152633],{"class":140},": name,\n",[57,152635,152636,152639],{"class":59,"line":16948},[57,152637,152638],{"class":74},"        \"age\"",[57,152640,152641],{"class":140},": age,\n",[57,152643,152644,152647],{"class":59,"line":16968},[57,152645,152646],{"class":74},"        \"score\"",[57,152648,152649],{"class":140},": score,\n",[57,152651,152652],{"class":59,"line":16974},[57,152653,33658],{"class":140},[57,152655,152656],{"class":59,"line":16985},[57,152657,152658],{"class":140},"    save_students(students)\n",[57,152660,152661,152663,152665,152668],{"class":59,"line":17008},[57,152662,31496],{"class":81},[57,152664,168],{"class":140},[57,152666,152667],{"class":74},"\"添加成功\"",[57,152669,238],{"class":140},[57,152671,152672],{"class":59,"line":17030},[57,152673,2673],{"emptyLinePlaceholder":350},[57,152675,152676],{"class":59,"line":17035},[57,152677,2673],{"emptyLinePlaceholder":350},[57,152679,152680,152682,152685],{"class":59,"line":17041},[57,152681,32144],{"class":136},[57,152683,152684],{"class":70}," delete_student",[57,152686,152158],{"class":140},[57,152688,152689,152691,152693,152695,152697,152700],{"class":59,"line":17055},[57,152690,152520],{"class":140},[57,152692,156],{"class":136},[57,152694,60802],{"class":81},[57,152696,168],{"class":140},[57,152698,152699],{"class":74},"\"请输入要删除的学号:\"",[57,152701,238],{"class":140},[57,152703,152704,152707,152709],{"class":59,"line":17068},[57,152705,152706],{"class":140},"    student ",[57,152708,156],{"class":136},[57,152710,152711],{"class":140}," find_student(students, student_id)\n",[57,152713,152714],{"class":59,"line":17073},[57,152715,2673],{"emptyLinePlaceholder":350},[57,152717,152718,152720,152722,152724,152726],{"class":59,"line":17087},[57,152719,3374],{"class":136},[57,152721,152334],{"class":140},[57,152723,39124],{"class":136},[57,152725,39130],{"class":81},[57,152727,4012],{"class":140},[57,152729,152730,152732,152734,152737],{"class":59,"line":17092},[57,152731,32648],{"class":81},[57,152733,168],{"class":140},[57,152735,152736],{"class":74},"\"学生不存在\"",[57,152738,238],{"class":140},[57,152740,152741],{"class":59,"line":17098},[57,152742,152558],{"class":136},[57,152744,152745],{"class":59,"line":17103},[57,152746,2673],{"emptyLinePlaceholder":350},[57,152748,152749],{"class":59,"line":17117},[57,152750,152751],{"class":140},"    students.remove(student)\n",[57,152753,152754],{"class":59,"line":17122},[57,152755,152658],{"class":140},[57,152757,152758,152760,152762,152765],{"class":59,"line":17127},[57,152759,31496],{"class":81},[57,152761,168],{"class":140},[57,152763,152764],{"class":74},"\"删除成功\"",[57,152766,238],{"class":140},[57,152768,152769],{"class":59,"line":17141},[57,152770,2673],{"emptyLinePlaceholder":350},[57,152772,152773],{"class":59,"line":17153},[57,152774,2673],{"emptyLinePlaceholder":350},[57,152776,152777,152779,152782],{"class":59,"line":17158},[57,152778,32144],{"class":136},[57,152780,152781],{"class":70}," update_student",[57,152783,152158],{"class":140},[57,152785,152786,152788,152790,152792,152794,152797],{"class":59,"line":17171},[57,152787,152520],{"class":140},[57,152789,156],{"class":136},[57,152791,60802],{"class":81},[57,152793,168],{"class":140},[57,152795,152796],{"class":74},"\"请输入要修改的学号:\"",[57,152798,238],{"class":140},[57,152800,152801,152803,152805],{"class":59,"line":17176},[57,152802,152706],{"class":140},[57,152804,156],{"class":136},[57,152806,152711],{"class":140},[57,152808,152809],{"class":59,"line":17181},[57,152810,2673],{"emptyLinePlaceholder":350},[57,152812,152813,152815,152817,152819,152821],{"class":59,"line":17186},[57,152814,3374],{"class":136},[57,152816,152334],{"class":140},[57,152818,39124],{"class":136},[57,152820,39130],{"class":81},[57,152822,4012],{"class":140},[57,152824,152825,152827,152829,152831],{"class":59,"line":17199},[57,152826,32648],{"class":81},[57,152828,168],{"class":140},[57,152830,152736],{"class":74},[57,152832,238],{"class":140},[57,152834,152835],{"class":59,"line":17204},[57,152836,152558],{"class":136},[57,152838,152839],{"class":59,"line":32830},[57,152840,2673],{"emptyLinePlaceholder":350},[57,152842,152843,152845,152847,152849,152851,152854],{"class":59,"line":32836},[57,152844,152567],{"class":140},[57,152846,156],{"class":136},[57,152848,60802],{"class":81},[57,152850,168],{"class":140},[57,152852,152853],{"class":74},"\"请输入新姓名:\"",[57,152855,238],{"class":140},[57,152857,152858,152860,152862,152864,152867],{"class":59,"line":32842},[57,152859,152583],{"class":140},[57,152861,156],{"class":136},[57,152863,152588],{"class":140},[57,152865,152866],{"class":74},"\"请输入新年龄:\"",[57,152868,238],{"class":140},[57,152870,152871,152873,152875,152877,152880],{"class":59,"line":32848},[57,152872,152598],{"class":140},[57,152874,156],{"class":136},[57,152876,152603],{"class":140},[57,152878,152879],{"class":74},"\"请输入新成绩:\"",[57,152881,238],{"class":140},[57,152883,152884],{"class":59,"line":32854},[57,152885,2673],{"emptyLinePlaceholder":350},[57,152887,152888,152891,152893,152895,152897],{"class":59,"line":32865},[57,152889,152890],{"class":140},"    student[",[57,152892,62876],{"class":74},[57,152894,4716],{"class":140},[57,152896,156],{"class":136},[57,152898,149992],{"class":140},[57,152900,152901,152903,152905,152907,152909],{"class":59,"line":32871},[57,152902,152890],{"class":140},[57,152904,69321],{"class":74},[57,152906,4716],{"class":140},[57,152908,156],{"class":136},[57,152910,150004],{"class":140},[57,152912,152913,152915,152917,152919,152921],{"class":59,"line":32891},[57,152914,152890],{"class":140},[57,152916,151669],{"class":74},[57,152918,4716],{"class":140},[57,152920,156],{"class":136},[57,152922,1861],{"class":140},[57,152924,152925],{"class":59,"line":32897},[57,152926,2673],{"emptyLinePlaceholder":350},[57,152928,152929],{"class":59,"line":32908},[57,152930,152658],{"class":140},[57,152932,152933,152935,152937,152940],{"class":59,"line":32914},[57,152934,31496],{"class":81},[57,152936,168],{"class":140},[57,152938,152939],{"class":74},"\"修改成功\"",[57,152941,238],{"class":140},[57,152943,152944],{"class":59,"line":32920},[57,152945,2673],{"emptyLinePlaceholder":350},[57,152947,152948],{"class":59,"line":32926},[57,152949,2673],{"emptyLinePlaceholder":350},[57,152951,152952,152954,152957],{"class":59,"line":32932},[57,152953,32144],{"class":136},[57,152955,152956],{"class":70}," query_student",[57,152958,152158],{"class":140},[57,152960,152961,152963,152965,152967,152969,152972],{"class":59,"line":32938},[57,152962,152520],{"class":140},[57,152964,156],{"class":136},[57,152966,60802],{"class":81},[57,152968,168],{"class":140},[57,152970,152971],{"class":74},"\"请输入要查询的学号:\"",[57,152973,238],{"class":140},[57,152975,152976,152978,152980],{"class":59,"line":32944},[57,152977,152706],{"class":140},[57,152979,156],{"class":136},[57,152981,152711],{"class":140},[57,152983,152984],{"class":59,"line":32950},[57,152985,2673],{"emptyLinePlaceholder":350},[57,152987,152988,152990,152992,152994,152996],{"class":59,"line":32970},[57,152989,3374],{"class":136},[57,152991,152334],{"class":140},[57,152993,39124],{"class":136},[57,152995,39130],{"class":81},[57,152997,4012],{"class":140},[57,152999,153000,153002,153004,153006],{"class":59,"line":32976},[57,153001,32648],{"class":81},[57,153003,168],{"class":140},[57,153005,152736],{"class":74},[57,153007,238],{"class":140},[57,153009,153010],{"class":59,"line":32992},[57,153011,152558],{"class":136},[57,153013,153014],{"class":59,"line":32998},[57,153015,2673],{"emptyLinePlaceholder":350},[57,153017,153018],{"class":59,"line":33012},[57,153019,153020],{"class":140},"    print_student(student)\n",[57,153022,153023],{"class":59,"line":33018},[57,153024,2673],{"emptyLinePlaceholder":350},[57,153026,153027],{"class":59,"line":33033},[57,153028,2673],{"emptyLinePlaceholder":350},[57,153030,153031,153033,153036],{"class":59,"line":33039},[57,153032,32144],{"class":136},[57,153034,153035],{"class":70}," print_student",[57,153037,153038],{"class":140},"(student):\n",[57,153040,153041,153043],{"class":59,"line":33048},[57,153042,31496],{"class":81},[57,153044,151636],{"class":140},[57,153046,153047,153050,153052,153054,153057,153060,153062,153065],{"class":59,"line":33054},[57,153048,153049],{"class":136},"        f",[57,153051,668],{"class":74},[57,153053,1312],{"class":81},[57,153055,153056],{"class":140},"student[",[57,153058,153059],{"class":74},"'student_id'",[57,153061,1356],{"class":140},[57,153063,153064],{"class":81},"}\\t",[57,153066,25402],{"class":74},[57,153068,153069,153071,153073,153075,153077,153080,153082,153084],{"class":59,"line":33063},[57,153070,153049],{"class":136},[57,153072,668],{"class":74},[57,153074,1312],{"class":81},[57,153076,153056],{"class":140},[57,153078,153079],{"class":74},"'name'",[57,153081,1356],{"class":140},[57,153083,153064],{"class":81},[57,153085,25402],{"class":74},[57,153087,153088,153090,153092,153094,153096,153099,153101,153103],{"class":59,"line":33069},[57,153089,153049],{"class":136},[57,153091,668],{"class":74},[57,153093,1312],{"class":81},[57,153095,153056],{"class":140},[57,153097,153098],{"class":74},"'age'",[57,153100,1356],{"class":140},[57,153102,153064],{"class":81},[57,153104,25402],{"class":74},[57,153106,153107,153109,153111,153113,153115,153118,153120,153122],{"class":59,"line":33075},[57,153108,153049],{"class":136},[57,153110,668],{"class":74},[57,153112,1312],{"class":81},[57,153114,153056],{"class":140},[57,153116,153117],{"class":74},"'score'",[57,153119,1356],{"class":140},[57,153121,1362],{"class":81},[57,153123,25402],{"class":74},[57,153125,153126],{"class":59,"line":33084},[57,153127,153128],{"class":140},"    )\n",[57,153130,153131],{"class":59,"line":33090},[57,153132,2673],{"emptyLinePlaceholder":350},[57,153134,153135],{"class":59,"line":33101},[57,153136,2673],{"emptyLinePlaceholder":350},[57,153138,153139,153141,153144],{"class":59,"line":33107},[57,153140,32144],{"class":136},[57,153142,153143],{"class":70}," show_all_students",[57,153145,152158],{"class":140},[57,153147,153148,153150,153152],{"class":59,"line":33126},[57,153149,3374],{"class":136},[57,153151,39127],{"class":136},[57,153153,152339],{"class":140},[57,153155,153156,153158,153160,153163],{"class":59,"line":33132},[57,153157,32648],{"class":81},[57,153159,168],{"class":140},[57,153161,153162],{"class":74},"\"暂无学生\"",[57,153164,238],{"class":140},[57,153166,153167],{"class":59,"line":33143},[57,153168,152558],{"class":136},[57,153170,153171],{"class":59,"line":33149},[57,153172,2673],{"emptyLinePlaceholder":350},[57,153174,153175,153177,153179,153182,153184,153187,153189,153192,153194,153197],{"class":59,"line":33169},[57,153176,31496],{"class":81},[57,153178,168],{"class":140},[57,153180,153181],{"class":74},"\"学号",[57,153183,1516],{"class":81},[57,153185,153186],{"class":74},"姓名",[57,153188,1516],{"class":81},[57,153190,153191],{"class":74},"年龄",[57,153193,1516],{"class":81},[57,153195,153196],{"class":74},"成绩\"",[57,153198,238],{"class":140},[57,153200,153201,153203,153205,153207],{"class":59,"line":33185},[57,153202,3474],{"class":136},[57,153204,152334],{"class":140},[57,153206,26312],{"class":136},[57,153208,152339],{"class":140},[57,153210,153211],{"class":59,"line":33191},[57,153212,153213],{"class":140},"        print_student(student)\n",[57,153215,153216],{"class":59,"line":33205},[57,153217,2673],{"emptyLinePlaceholder":350},[57,153219,153220],{"class":59,"line":33211},[57,153221,2673],{"emptyLinePlaceholder":350},[57,153223,153224,153226,153228],{"class":59,"line":33217},[57,153225,32144],{"class":136},[57,153227,2246],{"class":70},[57,153229,32150],{"class":140},[57,153231,153232,153235,153237],{"class":59,"line":33228},[57,153233,153234],{"class":140},"    students ",[57,153236,156],{"class":136},[57,153238,153239],{"class":140}," load_students()\n",[57,153241,153242],{"class":59,"line":33234},[57,153243,2673],{"emptyLinePlaceholder":350},[57,153245,153246,153248,153250],{"class":59,"line":33240},[57,153247,2524],{"class":136},[57,153249,95489],{"class":81},[57,153251,4012],{"class":140},[57,153253,153254],{"class":59,"line":33250},[57,153255,153256],{"class":140},"        show_menu()\n",[57,153258,153259,153262,153264,153266,153268,153271],{"class":59,"line":33256},[57,153260,153261],{"class":140},"        choice ",[57,153263,156],{"class":136},[57,153265,60802],{"class":81},[57,153267,168],{"class":140},[57,153269,153270],{"class":74},"\"请输入操作:\"",[57,153272,238],{"class":140},[57,153274,153275],{"class":59,"line":33267},[57,153276,2673],{"emptyLinePlaceholder":350},[57,153278,153279,153281,153284,153286,153289],{"class":59,"line":33273},[57,153280,2770],{"class":136},[57,153282,153283],{"class":140}," choice ",[57,153285,3222],{"class":136},[57,153287,153288],{"class":74}," \"1\"",[57,153290,4012],{"class":140},[57,153292,153293],{"class":59,"line":33283},[57,153294,153295],{"class":140},"            add_student(students)\n",[57,153297,153298,153301,153303,153305,153308],{"class":59,"line":33288},[57,153299,153300],{"class":136},"        elif",[57,153302,153283],{"class":140},[57,153304,3222],{"class":136},[57,153306,153307],{"class":74}," \"2\"",[57,153309,4012],{"class":140},[57,153311,153312],{"class":59,"line":33294},[57,153313,153314],{"class":140},"            delete_student(students)\n",[57,153316,153317,153319,153321,153323,153326],{"class":59,"line":33343},[57,153318,153300],{"class":136},[57,153320,153283],{"class":140},[57,153322,3222],{"class":136},[57,153324,153325],{"class":74}," \"3\"",[57,153327,4012],{"class":140},[57,153329,153330],{"class":59,"line":33390},[57,153331,153332],{"class":140},"            update_student(students)\n",[57,153334,153335,153337,153339,153341,153344],{"class":59,"line":33395},[57,153336,153300],{"class":136},[57,153338,153283],{"class":140},[57,153340,3222],{"class":136},[57,153342,153343],{"class":74}," \"4\"",[57,153345,4012],{"class":140},[57,153347,153348],{"class":59,"line":33401},[57,153349,153350],{"class":140},"            query_student(students)\n",[57,153352,153353,153355,153357,153359,153362],{"class":59,"line":33420},[57,153354,153300],{"class":136},[57,153356,153283],{"class":140},[57,153358,3222],{"class":136},[57,153360,153361],{"class":74}," \"5\"",[57,153363,4012],{"class":140},[57,153365,153366],{"class":59,"line":33426},[57,153367,153368],{"class":140},"            show_all_students(students)\n",[57,153370,153371,153373,153375,153377,153380],{"class":59,"line":33446},[57,153372,153300],{"class":136},[57,153374,153283],{"class":140},[57,153376,3222],{"class":136},[57,153378,153379],{"class":74}," \"0\"",[57,153381,4012],{"class":140},[57,153383,153384,153386,153388,153391],{"class":59,"line":33452},[57,153385,34847],{"class":81},[57,153387,168],{"class":140},[57,153389,153390],{"class":74},"\"退出系统\"",[57,153392,238],{"class":140},[57,153394,153395],{"class":59,"line":33458},[57,153396,115295],{"class":136},[57,153398,153399,153401],{"class":59,"line":33468},[57,153400,2807],{"class":136},[57,153402,4012],{"class":140},[57,153404,153405,153407,153409,153412],{"class":59,"line":33473},[57,153406,34847],{"class":81},[57,153408,168],{"class":140},[57,153410,153411],{"class":74},"\"输入错误\"",[57,153413,238],{"class":140},[57,153415,153416],{"class":59,"line":33479},[57,153417,2673],{"emptyLinePlaceholder":350},[57,153419,153420],{"class":59,"line":33495},[57,153421,2673],{"emptyLinePlaceholder":350},[57,153423,153424,153426,153428,153430,153432],{"class":59,"line":33540},[57,153425,1813],{"class":136},[57,153427,31417],{"class":81},[57,153429,101756],{"class":136},[57,153431,101759],{"class":74},[57,153433,4012],{"class":140},[57,153435,153436],{"class":59,"line":33546},[57,153437,101766],{"class":140},[14,153439,153440],{},"这个项目串联了：",[377,153442,153443,153446,153449,153452,153455,153457],{},[380,153444,153445],{},"菜单循环。",[380,153447,153448],{},"函数封装。",[380,153450,153451],{},"列表字典。",[380,153453,153454],{},"JSON 读写。",[380,153456,151924],{},[380,153458,153459,28654],{},[28,153460,153461],{},"if __name__ == \"__main__\"",[365,153463,153465],{"id":153464},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,153467,153468],{},"可以进一步拆成两个类：",[377,153470,153471,153476],{},[380,153472,153473,153475],{},[28,153474,149765],{},"：表示单个学生。",[380,153477,153478,153480],{},[28,153479,151791],{},"：负责学生增删改查和文件保存。",[14,153482,153483],{},"示意代码：",[49,153485,153487],{"className":122,"code":153486,"language":124,"meta":46,"style":46},"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",[28,153488,153489,153499,153503,153507,153511,153519,153526,153532,153538,153544,153548,153556,153562,153572,153582,153592,153602,153606,153610,153616,153624,153632,153640,153648,153656,153664],{"__ignoreMap":46},[57,153490,153491,153493,153495,153497],{"class":59,"line":60},[57,153492,30934],{"class":136},[57,153494,151349],{"class":140},[57,153496,137],{"class":136},[57,153498,151354],{"class":140},[57,153500,153501],{"class":59,"line":67},[57,153502,2673],{"emptyLinePlaceholder":350},[57,153504,153505],{"class":59,"line":144},[57,153506,2673],{"emptyLinePlaceholder":350},[57,153508,153509],{"class":59,"line":150},[57,153510,151367],{"class":70},[57,153512,153513,153515,153517],{"class":59,"line":162},[57,153514,14966],{"class":136},[57,153516,8171],{"class":70},[57,153518,4012],{"class":140},[57,153520,153521,153524],{"class":59,"line":180},[57,153522,153523],{"class":140},"    student_id: ",[57,153525,151383],{"class":81},[57,153527,153528,153530],{"class":59,"line":186},[57,153529,151380],{"class":140},[57,153531,151383],{"class":81},[57,153533,153534,153536],{"class":59,"line":197},[57,153535,151388],{"class":140},[57,153537,151391],{"class":81},[57,153539,153540,153542],{"class":59,"line":241},[57,153541,151396],{"class":140},[57,153543,151399],{"class":81},[57,153545,153546],{"class":59,"line":249},[57,153547,2673],{"emptyLinePlaceholder":350},[57,153549,153550,153552,153554],{"class":59,"line":262},[57,153551,30998],{"class":136},[57,153553,151547],{"class":70},[57,153555,31004],{"class":140},[57,153557,153558,153560],{"class":59,"line":281},[57,153559,15024],{"class":136},[57,153561,15844],{"class":140},[57,153563,153564,153566,153568,153570],{"class":59,"line":287},[57,153565,151560],{"class":74},[57,153567,51634],{"class":140},[57,153569,31020],{"class":81},[57,153571,151567],{"class":140},[57,153573,153574,153576,153578,153580],{"class":59,"line":298},[57,153575,151572],{"class":74},[57,153577,51634],{"class":140},[57,153579,31020],{"class":81},[57,153581,151579],{"class":140},[57,153583,153584,153586,153588,153590],{"class":59,"line":311},[57,153585,151584],{"class":74},[57,153587,51634],{"class":140},[57,153589,31020],{"class":81},[57,153591,151591],{"class":140},[57,153593,153594,153596,153598,153600],{"class":59,"line":322},[57,153595,151596],{"class":74},[57,153597,51634],{"class":140},[57,153599,31020],{"class":81},[57,153601,151603],{"class":140},[57,153603,153604],{"class":59,"line":1929},[57,153605,2802],{"class":140},[57,153607,153608],{"class":59,"line":1950},[57,153609,2673],{"emptyLinePlaceholder":350},[57,153611,153612,153614],{"class":59,"line":1955},[57,153613,151211],{"class":70},[57,153615,151214],{"class":81},[57,153617,153618,153620,153622],{"class":59,"line":1969},[57,153619,30998],{"class":136},[57,153621,151624],{"class":70},[57,153623,151627],{"class":140},[57,153625,153626,153628,153630],{"class":59,"line":1974},[57,153627,15024],{"class":136},[57,153629,151231],{"class":81},[57,153631,151636],{"class":140},[57,153633,153634,153636,153638],{"class":59,"line":2001},[57,153635,151641],{"class":140},[57,153637,151644],{"class":74},[57,153639,88033],{"class":140},[57,153641,153642,153644,153646],{"class":59,"line":2006},[57,153643,151641],{"class":140},[57,153645,62876],{"class":74},[57,153647,88033],{"class":140},[57,153649,153650,153652,153654],{"class":59,"line":2023},[57,153651,151641],{"class":140},[57,153653,69321],{"class":74},[57,153655,88033],{"class":140},[57,153657,153658,153660,153662],{"class":59,"line":2028},[57,153659,151641],{"class":140},[57,153661,151669],{"class":74},[57,153663,88033],{"class":140},[57,153665,153666],{"class":59,"line":2033},[57,153667,38323],{"class":140},[14,153669,153670],{},"管理器示意：",[49,153672,153674],{"className":122,"code":153673,"language":124,"meta":46,"style":46},"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",[28,153675,153676,153685,153693,153704,153708,153718,153731,153742,153749,153755,153759,153768,153777,153783,153790],{"__ignoreMap":46},[57,153677,153678,153680,153683],{"class":59,"line":60},[57,153679,14966],{"class":136},[57,153681,153682],{"class":70}," StudentManager",[57,153684,4012],{"class":140},[57,153686,153687,153689,153691],{"class":59,"line":67},[57,153688,30998],{"class":136},[57,153690,31001],{"class":81},[57,153692,31004],{"class":140},[57,153694,153695,153697,153700,153702],{"class":59,"line":144},[57,153696,31042],{"class":81},[57,153698,153699],{"class":140},".students ",[57,153701,156],{"class":136},[57,153703,52035],{"class":140},[57,153705,153706],{"class":59,"line":150},[57,153707,2673],{"emptyLinePlaceholder":350},[57,153709,153710,153712,153715],{"class":59,"line":162},[57,153711,30998],{"class":136},[57,153713,153714],{"class":70}," find_by_id",[57,153716,153717],{"class":140},"(self, student_id):\n",[57,153719,153720,153722,153724,153726,153728],{"class":59,"line":180},[57,153721,3676],{"class":136},[57,153723,152334],{"class":140},[57,153725,26312],{"class":136},[57,153727,39070],{"class":81},[57,153729,153730],{"class":140},".students:\n",[57,153732,153733,153735,153738,153740],{"class":59,"line":186},[57,153734,4915],{"class":136},[57,153736,153737],{"class":140}," student.student_id ",[57,153739,3222],{"class":136},[57,153741,152355],{"class":140},[57,153743,153744,153747],{"class":59,"line":197},[57,153745,153746],{"class":136},"                return",[57,153748,152362],{"class":140},[57,153750,153751,153753],{"class":59,"line":241},[57,153752,15024],{"class":136},[57,153754,152369],{"class":81},[57,153756,153757],{"class":59,"line":249},[57,153758,2673],{"emptyLinePlaceholder":350},[57,153760,153761,153763,153765],{"class":59,"line":262},[57,153762,30998],{"class":136},[57,153764,5482],{"class":70},[57,153766,153767],{"class":140},"(self, student):\n",[57,153769,153770,153772,153774],{"class":59,"line":281},[57,153771,2770],{"class":136},[57,153773,39070],{"class":81},[57,153775,153776],{"class":140},".find_by_id(student.student_id):\n",[57,153778,153779,153781],{"class":59,"line":287},[57,153780,16004],{"class":136},[57,153782,126004],{"class":81},[57,153784,153785,153787],{"class":59,"line":298},[57,153786,31042],{"class":81},[57,153788,153789],{"class":140},".students.append(student)\n",[57,153791,153792,153794],{"class":59,"line":311},[57,153793,15024],{"class":136},[57,153795,153796],{"class":81}," True\n",[14,153798,153799],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[365,153801,153803],{"id":153802},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[394,153805,153807],{"id":153806},"_1251-数据结构","12.5.1 数据结构",[49,153809,153811],{"className":122,"code":153810,"language":124,"meta":46,"style":46},"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",[28,153812,153813,153821,153852,153882,153911,153940],{"__ignoreMap":46},[57,153814,153815,153817,153819],{"class":59,"line":60},[57,153816,148662],{"class":140},[57,153818,156],{"class":136},[57,153820,55644],{"class":140},[57,153822,153823,153825,153827,153829,153831,153833,153836,153838,153841,153843,153845,153847,153850],{"class":59,"line":67},[57,153824,148582],{"class":140},[57,153826,148194],{"class":74},[57,153828,51634],{"class":140},[57,153830,148805],{"class":74},[57,153832,12708],{"class":140},[57,153834,153835],{"class":74},"\"category\"",[57,153837,51634],{"class":140},[57,153839,153840],{"class":74},"\"手机\"",[57,153842,12708],{"class":140},[57,153844,84281],{"class":74},[57,153846,51634],{"class":140},[57,153848,153849],{"class":81},"12000",[57,153851,5203],{"class":140},[57,153853,153854,153856,153858,153860,153862,153864,153866,153868,153871,153873,153875,153877,153880],{"class":59,"line":144},[57,153855,148582],{"class":140},[57,153857,148194],{"class":74},[57,153859,51634],{"class":140},[57,153861,148805],{"class":74},[57,153863,12708],{"class":140},[57,153865,153835],{"class":74},[57,153867,51634],{"class":140},[57,153869,153870],{"class":74},"\"电脑\"",[57,153872,12708],{"class":140},[57,153874,84281],{"class":74},[57,153876,51634],{"class":140},[57,153878,153879],{"class":81},"18000",[57,153881,5203],{"class":140},[57,153883,153884,153886,153888,153890,153892,153894,153896,153898,153900,153902,153904,153906,153909],{"class":59,"line":150},[57,153885,148582],{"class":140},[57,153887,148194],{"class":74},[57,153889,51634],{"class":140},[57,153891,148826],{"class":74},[57,153893,12708],{"class":140},[57,153895,153835],{"class":74},[57,153897,51634],{"class":140},[57,153899,153840],{"class":74},[57,153901,12708],{"class":140},[57,153903,84281],{"class":74},[57,153905,51634],{"class":140},[57,153907,153908],{"class":81},"15000",[57,153910,5203],{"class":140},[57,153912,153913,153915,153917,153919,153921,153923,153925,153927,153929,153931,153933,153935,153938],{"class":59,"line":162},[57,153914,148582],{"class":140},[57,153916,148194],{"class":74},[57,153918,51634],{"class":140},[57,153920,148826],{"class":74},[57,153922,12708],{"class":140},[57,153924,153835],{"class":74},[57,153926,51634],{"class":140},[57,153928,153870],{"class":74},[57,153930,12708],{"class":140},[57,153932,84281],{"class":74},[57,153934,51634],{"class":140},[57,153936,153937],{"class":81},"16000",[57,153939,5203],{"class":140},[57,153941,153942],{"class":59,"line":180},[57,153943,33443],{"class":140},[394,153945,153947],{"id":153946},"_1252-按日期统计","12.5.2 按日期统计",[49,153949,153951],{"className":122,"code":153950,"language":124,"meta":46,"style":46},"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",[28,153952,153953,153962,153966,153977,153991,154004,154023,154027],{"__ignoreMap":46},[57,153954,153955,153958,153960],{"class":59,"line":60},[57,153956,153957],{"class":140},"daily_total ",[57,153959,156],{"class":136},[57,153961,88065],{"class":140},[57,153963,153964],{"class":59,"line":67},[57,153965,2673],{"emptyLinePlaceholder":350},[57,153967,153968,153970,153972,153974],{"class":59,"line":144},[57,153969,3298],{"class":136},[57,153971,148406],{"class":140},[57,153973,26312],{"class":136},[57,153975,153976],{"class":140}," sales:\n",[57,153978,153979,153982,153984,153987,153989],{"class":59,"line":150},[57,153980,153981],{"class":140},"    date ",[57,153983,156],{"class":136},[57,153985,153986],{"class":140}," item[",[57,153988,148194],{"class":74},[57,153990,33443],{"class":140},[57,153992,153993,153996,153998,154000,154002],{"class":59,"line":162},[57,153994,153995],{"class":140},"    amount ",[57,153997,156],{"class":136},[57,153999,153986],{"class":140},[57,154001,84281],{"class":74},[57,154003,33443],{"class":140},[57,154005,154006,154009,154011,154014,154016,154018,154020],{"class":59,"line":180},[57,154007,154008],{"class":140},"    daily_total[date] ",[57,154010,156],{"class":136},[57,154012,154013],{"class":140}," daily_total.get(date, ",[57,154015,226],{"class":81},[57,154017,229],{"class":140},[57,154019,897],{"class":136},[57,154021,154022],{"class":140}," amount\n",[57,154024,154025],{"class":59,"line":186},[57,154026,2673],{"emptyLinePlaceholder":350},[57,154028,154029,154031],{"class":59,"line":197},[57,154030,165],{"class":81},[57,154032,154033],{"class":140},"(daily_total)\n",[394,154035,154037],{"id":154036},"_1253-按类别统计","12.5.3 按类别统计",[49,154039,154041],{"className":122,"code":154040,"language":124,"meta":46,"style":46},"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",[28,154042,154043,154052,154056,154066,154079,154091,154109,154113],{"__ignoreMap":46},[57,154044,154045,154048,154050],{"class":59,"line":60},[57,154046,154047],{"class":140},"category_total ",[57,154049,156],{"class":136},[57,154051,88065],{"class":140},[57,154053,154054],{"class":59,"line":67},[57,154055,2673],{"emptyLinePlaceholder":350},[57,154057,154058,154060,154062,154064],{"class":59,"line":144},[57,154059,3298],{"class":136},[57,154061,148406],{"class":140},[57,154063,26312],{"class":136},[57,154065,153976],{"class":140},[57,154067,154068,154071,154073,154075,154077],{"class":59,"line":150},[57,154069,154070],{"class":140},"    category ",[57,154072,156],{"class":136},[57,154074,153986],{"class":140},[57,154076,153835],{"class":74},[57,154078,33443],{"class":140},[57,154080,154081,154083,154085,154087,154089],{"class":59,"line":162},[57,154082,153995],{"class":140},[57,154084,156],{"class":136},[57,154086,153986],{"class":140},[57,154088,84281],{"class":74},[57,154090,33443],{"class":140},[57,154092,154093,154096,154098,154101,154103,154105,154107],{"class":59,"line":180},[57,154094,154095],{"class":140},"    category_total[category] ",[57,154097,156],{"class":136},[57,154099,154100],{"class":140}," category_total.get(category, ",[57,154102,226],{"class":81},[57,154104,229],{"class":140},[57,154106,897],{"class":136},[57,154108,154022],{"class":140},[57,154110,154111],{"class":59,"line":186},[57,154112,2673],{"emptyLinePlaceholder":350},[57,154114,154115,154117],{"class":59,"line":197},[57,154116,165],{"class":81},[57,154118,154119],{"class":140},"(category_total)\n",[394,154121,154123],{"id":154122},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[49,154125,154127],{"className":122,"code":154126,"language":124,"meta":46,"style":46},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[28,154128,154129,154154],{"__ignoreMap":46},[57,154130,154131,154134,154136,154138,154141,154144,154147,154150,154152],{"class":59,"line":60},[57,154132,154133],{"class":140},"top_date, top_amount ",[57,154135,156],{"class":136},[57,154137,6224],{"class":81},[57,154139,154140],{"class":140},"(daily_total.items(), ",[57,154142,154143],{"class":5489},"key",[57,154145,154146],{"class":136},"=lambda",[57,154148,154149],{"class":140}," item: item[",[57,154151,635],{"class":81},[57,154153,4930],{"class":140},[57,154155,154156,154158],{"class":59,"line":67},[57,154157,165],{"class":81},[57,154159,154160],{"class":140},"(top_date, top_amount)\n",[365,154162,154164],{"id":154163},"_126-绘制柱状图","12.6 绘制柱状图",[49,154166,154168],{"className":122,"code":154167,"language":124,"meta":46,"style":46},"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",[28,154169,154170,154184,154195,154199,154207,154219,154231,154242,154246,154250,154260,154271,154285,154290,154307,154324,154340,154344],{"__ignoreMap":46},[57,154171,154172,154174,154176,154178,154180,154182],{"class":59,"line":60},[57,154173,30934],{"class":136},[57,154175,147576],{"class":140},[57,154177,137],{"class":136},[57,154179,147581],{"class":140},[57,154181,31580],{"class":136},[57,154183,147586],{"class":140},[57,154185,154186,154188,154190,154192],{"class":59,"line":67},[57,154187,30934],{"class":136},[57,154189,147435],{"class":140},[57,154191,137],{"class":136},[57,154193,154194],{"class":140}," Bar\n",[57,154196,154197],{"class":59,"line":144},[57,154198,2673],{"emptyLinePlaceholder":350},[57,154200,154201,154203,154205],{"class":59,"line":150},[57,154202,154047],{"class":140},[57,154204,156],{"class":136},[57,154206,15844],{"class":140},[57,154208,154209,154212,154214,154217],{"class":59,"line":162},[57,154210,154211],{"class":74},"    \"手机\"",[57,154213,51634],{"class":140},[57,154215,154216],{"class":81},"27000",[57,154218,31663],{"class":140},[57,154220,154221,154224,154226,154229],{"class":59,"line":180},[57,154222,154223],{"class":74},"    \"电脑\"",[57,154225,51634],{"class":140},[57,154227,154228],{"class":81},"34000",[57,154230,31663],{"class":140},[57,154232,154233,154236,154238,154240],{"class":59,"line":186},[57,154234,154235],{"class":74},"    \"耳机\"",[57,154237,51634],{"class":140},[57,154239,124596],{"class":81},[57,154241,31663],{"class":140},[57,154243,154244],{"class":59,"line":197},[57,154245,1847],{"class":140},[57,154247,154248],{"class":59,"line":241},[57,154249,2673],{"emptyLinePlaceholder":350},[57,154251,154252,154255,154257],{"class":59,"line":249},[57,154253,154254],{"class":140},"bar ",[57,154256,156],{"class":136},[57,154258,154259],{"class":140}," Bar()\n",[57,154261,154262,154265,154268],{"class":59,"line":262},[57,154263,154264],{"class":140},"bar.add_xaxis(",[57,154266,154267],{"class":81},"list",[57,154269,154270],{"class":140},"(category_total.keys()))\n",[57,154272,154273,154276,154278,154280,154282],{"class":59,"line":281},[57,154274,154275],{"class":140},"bar.add_yaxis(",[57,154277,147492],{"class":74},[57,154279,12708],{"class":140},[57,154281,154267],{"class":81},[57,154283,154284],{"class":140},"(category_total.values()))\n",[57,154286,154287],{"class":59,"line":287},[57,154288,154289],{"class":140},"bar.set_global_opts(\n",[57,154291,154292,154294,154296,154298,154300,154302,154305],{"class":59,"line":298},[57,154293,147670],{"class":5489},[57,154295,156],{"class":136},[57,154297,147675],{"class":140},[57,154299,51604],{"class":5489},[57,154301,156],{"class":136},[57,154303,154304],{"class":74},"\"品类销售额\"",[57,154306,38244],{"class":140},[57,154308,154309,154311,154313,154315,154317,154319,154322],{"class":59,"line":311},[57,154310,147689],{"class":5489},[57,154312,156],{"class":136},[57,154314,147694],{"class":140},[57,154316,80007],{"class":5489},[57,154318,156],{"class":136},[57,154320,154321],{"class":74},"\"品类\"",[57,154323,38244],{"class":140},[57,154325,154326,154328,154330,154332,154334,154336,154338],{"class":59,"line":322},[57,154327,147708],{"class":5489},[57,154329,156],{"class":136},[57,154331,147694],{"class":140},[57,154333,80007],{"class":5489},[57,154335,156],{"class":136},[57,154337,147492],{"class":74},[57,154339,38244],{"class":140},[57,154341,154342],{"class":59,"line":1929},[57,154343,238],{"class":140},[57,154345,154346,154349,154352],{"class":59,"line":1950},[57,154347,154348],{"class":140},"bar.render(",[57,154350,154351],{"class":74},"\"category_sales.html\"",[57,154353,238],{"class":140},[365,154355,154357],{"id":154356},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,154359,154360],{},"时间线适合展示不同日期、月份、年份的数据变化。",[49,154362,154364],{"className":122,"code":154363,"language":124,"meta":46,"style":46},"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",[28,154365,154366,154380,154391,154395,154403,154427,154450,154475,154479,154483,154493,154497,154508,154517,154527,154541,154572,154577,154581],{"__ignoreMap":46},[57,154367,154368,154370,154372,154374,154376,154378],{"class":59,"line":60},[57,154369,30934],{"class":136},[57,154371,147576],{"class":140},[57,154373,137],{"class":136},[57,154375,147581],{"class":140},[57,154377,31580],{"class":136},[57,154379,147586],{"class":140},[57,154381,154382,154384,154386,154388],{"class":59,"line":67},[57,154383,30934],{"class":136},[57,154385,147435],{"class":140},[57,154387,137],{"class":136},[57,154389,154390],{"class":140}," Bar, Timeline\n",[57,154392,154393],{"class":59,"line":144},[57,154394,2673],{"emptyLinePlaceholder":350},[57,154396,154397,154399,154401],{"class":59,"line":150},[57,154398,101855],{"class":140},[57,154400,156],{"class":136},[57,154402,15844],{"class":140},[57,154404,154405,154408,154411,154413,154415,154417,154419,154421,154423,154425],{"class":59,"line":162},[57,154406,154407],{"class":74},"    \"2024-10-01\"",[57,154409,154410],{"class":140},": {",[57,154412,153840],{"class":74},[57,154414,51634],{"class":140},[57,154416,153849],{"class":81},[57,154418,12708],{"class":140},[57,154420,153870],{"class":74},[57,154422,51634],{"class":140},[57,154424,153879],{"class":81},[57,154426,5203],{"class":140},[57,154428,154429,154432,154434,154436,154438,154440,154442,154444,154446,154448],{"class":59,"line":180},[57,154430,154431],{"class":74},"    \"2024-10-02\"",[57,154433,154410],{"class":140},[57,154435,153840],{"class":74},[57,154437,51634],{"class":140},[57,154439,153908],{"class":81},[57,154441,12708],{"class":140},[57,154443,153870],{"class":74},[57,154445,51634],{"class":140},[57,154447,153937],{"class":81},[57,154449,5203],{"class":140},[57,154451,154452,154455,154457,154459,154461,154464,154466,154468,154470,154473],{"class":59,"line":186},[57,154453,154454],{"class":74},"    \"2024-10-03\"",[57,154456,154410],{"class":140},[57,154458,153840],{"class":74},[57,154460,51634],{"class":140},[57,154462,154463],{"class":81},"17000",[57,154465,12708],{"class":140},[57,154467,153870],{"class":74},[57,154469,51634],{"class":140},[57,154471,154472],{"class":81},"19000",[57,154474,5203],{"class":140},[57,154476,154477],{"class":59,"line":197},[57,154478,1847],{"class":140},[57,154480,154481],{"class":59,"line":241},[57,154482,2673],{"emptyLinePlaceholder":350},[57,154484,154485,154488,154490],{"class":59,"line":249},[57,154486,154487],{"class":140},"timeline ",[57,154489,156],{"class":136},[57,154491,154492],{"class":140}," Timeline()\n",[57,154494,154495],{"class":59,"line":262},[57,154496,2673],{"emptyLinePlaceholder":350},[57,154498,154499,154501,154504,154506],{"class":59,"line":281},[57,154500,3298],{"class":136},[57,154502,154503],{"class":140}," date, category_data ",[57,154505,26312],{"class":136},[57,154507,149345],{"class":140},[57,154509,154510,154513,154515],{"class":59,"line":287},[57,154511,154512],{"class":140},"    bar ",[57,154514,156],{"class":136},[57,154516,154259],{"class":140},[57,154518,154519,154522,154524],{"class":59,"line":298},[57,154520,154521],{"class":140},"    bar.add_xaxis(",[57,154523,154267],{"class":81},[57,154525,154526],{"class":140},"(category_data.keys()))\n",[57,154528,154529,154532,154534,154536,154538],{"class":59,"line":311},[57,154530,154531],{"class":140},"    bar.add_yaxis(",[57,154533,147492],{"class":74},[57,154535,12708],{"class":140},[57,154537,154267],{"class":81},[57,154539,154540],{"class":140},"(category_data.values()))\n",[57,154542,154543,154546,154549,154551,154553,154555,154557,154559,154561,154563,154565,154567,154570],{"class":59,"line":322},[57,154544,154545],{"class":140},"    bar.set_global_opts(",[57,154547,154548],{"class":5489},"title_opts",[57,154550,156],{"class":136},[57,154552,147675],{"class":140},[57,154554,51604],{"class":5489},[57,154556,156],{"class":136},[57,154558,475],{"class":136},[57,154560,668],{"class":74},[57,154562,1312],{"class":81},[57,154564,74123],{"class":140},[57,154566,1362],{"class":81},[57,154568,154569],{"class":74},"销售额\"",[57,154571,259],{"class":140},[57,154573,154574],{"class":59,"line":1929},[57,154575,154576],{"class":140},"    timeline.add(bar, date)\n",[57,154578,154579],{"class":59,"line":1950},[57,154580,2673],{"emptyLinePlaceholder":350},[57,154582,154583,154586,154589],{"class":59,"line":1955},[57,154584,154585],{"class":140},"timeline.render(",[57,154587,154588],{"class":74},"\"timeline_sales.html\"",[57,154590,238],{"class":140},[365,154592,154594],{"id":154593},"_128-绘制地图","12.8 绘制地图",[14,154596,154597],{},"地图适合展示地区数据。",[49,154599,154601],{"className":122,"code":154600,"language":124,"meta":46,"style":46},"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",[28,154602,154603,154617,154628,154632,154640,154653,154665,154678,154691,154695,154699,154709,154724,154729,154746,154765,154769],{"__ignoreMap":46},[57,154604,154605,154607,154609,154611,154613,154615],{"class":59,"line":60},[57,154606,30934],{"class":136},[57,154608,147576],{"class":140},[57,154610,137],{"class":136},[57,154612,147581],{"class":140},[57,154614,31580],{"class":136},[57,154616,147586],{"class":140},[57,154618,154619,154621,154623,154625],{"class":59,"line":67},[57,154620,30934],{"class":136},[57,154622,147435],{"class":140},[57,154624,137],{"class":136},[57,154626,154627],{"class":140}," Map\n",[57,154629,154630],{"class":59,"line":144},[57,154631,2673],{"emptyLinePlaceholder":350},[57,154633,154634,154636,154638],{"class":59,"line":150},[57,154635,101855],{"class":140},[57,154637,156],{"class":136},[57,154639,55644],{"class":140},[57,154641,154642,154645,154647,154649,154651],{"class":59,"line":162},[57,154643,154644],{"class":140},"    (",[57,154646,69466],{"class":74},[57,154648,12708],{"class":140},[57,154650,1233],{"class":81},[57,154652,38244],{"class":140},[57,154654,154655,154657,154659,154661,154663],{"class":59,"line":180},[57,154656,154644],{"class":140},[57,154658,69486],{"class":74},[57,154660,12708],{"class":140},[57,154662,147509],{"class":81},[57,154664,38244],{"class":140},[57,154666,154667,154669,154672,154674,154676],{"class":59,"line":186},[57,154668,154644],{"class":140},[57,154670,154671],{"class":74},"\"广东\"",[57,154673,12708],{"class":140},[57,154675,1996],{"class":81},[57,154677,38244],{"class":140},[57,154679,154680,154682,154685,154687,154689],{"class":59,"line":197},[57,154681,154644],{"class":140},[57,154683,154684],{"class":74},"\"浙江\"",[57,154686,12708],{"class":140},[57,154688,147514],{"class":81},[57,154690,38244],{"class":140},[57,154692,154693],{"class":59,"line":241},[57,154694,33443],{"class":140},[57,154696,154697],{"class":59,"line":249},[57,154698,2673],{"emptyLinePlaceholder":350},[57,154700,154701,154704,154706],{"class":59,"line":262},[57,154702,154703],{"class":140},"map_chart ",[57,154705,156],{"class":136},[57,154707,154708],{"class":140}," Map()\n",[57,154710,154711,154714,154716,154719,154722],{"class":59,"line":281},[57,154712,154713],{"class":140},"map_chart.add(",[57,154715,147492],{"class":74},[57,154717,154718],{"class":140},", data, ",[57,154720,154721],{"class":74},"\"china\"",[57,154723,238],{"class":140},[57,154725,154726],{"class":59,"line":287},[57,154727,154728],{"class":140},"map_chart.set_global_opts(\n",[57,154730,154731,154733,154735,154737,154739,154741,154744],{"class":59,"line":298},[57,154732,147670],{"class":5489},[57,154734,156],{"class":136},[57,154736,147675],{"class":140},[57,154738,51604],{"class":5489},[57,154740,156],{"class":136},[57,154742,154743],{"class":74},"\"地区销售额\"",[57,154745,38244],{"class":140},[57,154747,154748,154751,154753,154756,154759,154761,154763],{"class":59,"line":311},[57,154749,154750],{"class":5489},"    visualmap_opts",[57,154752,156],{"class":136},[57,154754,154755],{"class":140},"opts.VisualMapOpts(",[57,154757,154758],{"class":5489},"max_",[57,154760,156],{"class":136},[57,154762,1996],{"class":81},[57,154764,38244],{"class":140},[57,154766,154767],{"class":59,"line":322},[57,154768,238],{"class":140},[57,154770,154771,154774,154777],{"class":59,"line":1929},[57,154772,154773],{"class":140},"map_chart.render(",[57,154775,154776],{"class":74},"\"map_sales.html\"",[57,154778,238],{"class":140},[14,154780,154781],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[365,154783,154785],{"id":154784},"_129-项目拆分建议","12.9 项目拆分建议",[14,154787,154788],{},"当代码超过一个文件时，可以这样组织：",[49,154790,154793],{"className":154791,"code":154792,"language":5460,"meta":46},[5458],"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",[28,154794,154792],{"__ignoreMap":46},[14,154796,154797],{},"职责：",[377,154799,154800,154806,154812,154818],{},[380,154801,154802,154805],{},[28,154803,154804],{},"main.py","：程序入口。",[380,154807,154808,154811],{},[28,154809,154810],{},"file_utils.py","：读写 JSON。",[380,154813,154814,154817],{},[28,154815,154816],{},"sales_service.py","：统计销售数据。",[380,154819,154820,154823],{},[28,154821,154822],{},"chart_builder.py","：生成图表。",[365,154825,154827],{"id":154826},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,154829,154830],{},"语法基础：",[377,154832,154833,154836,154839,154842],{},[380,154834,154835],{},"会写变量、注释、输入输出。",[380,154837,154838],{},"会使用 int、float、str、bool。",[380,154840,154841],{},"会做类型转换。",[380,154843,154844],{},"会使用 f-string 格式化输出。",[14,154846,154847],{},"流程控制：",[377,154849,154850,154856,154862,154870],{},[380,154851,154852,154853,28654],{},"会写 ",[28,154854,154855],{},"if elif else",[380,154857,154852,154858,101215,154860,28654],{},[28,154859,108860],{},[28,154861,3298],{},[380,154863,154864,154865,101215,154867,28654],{},"理解 ",[28,154866,2326],{},[28,154868,154869],{},"continue",[380,154871,154872],{},"能写嵌套循环。",[14,154874,154875],{},"函数：",[377,154877,154878,154881,154884,154887],{},[380,154879,154880],{},"会定义和调用函数。",[380,154882,154883],{},"理解参数和返回值。",[380,154885,154886],{},"知道局部变量和全局变量。",[380,154888,154889],{},"会使用默认参数、关键字参数、不定长参数。",[14,154891,154892],{},"容器：",[377,154894,154895,154898,154901,154904,154907],{},[380,154896,154897],{},"会使用列表增删改查。",[380,154899,154900],{},"会遍历列表、字典。",[380,154902,154903],{},"会使用切片。",[380,154905,154906],{},"会用集合去重。",[380,154908,154909],{},"会处理列表嵌套字典。",[14,154911,154912],{},"文件和模块：",[377,154914,154915,154918,154921,154924,154927],{},[380,154916,154917],{},"会读写文本文件。",[380,154919,154920],{},"会读写 JSON。",[380,154922,154923],{},"会捕获常见异常。",[380,154925,154926],{},"会导入模块和第三方包。",[380,154928,154929],{},"会创建简单包结构。",[14,154931,154932],{},"项目能力：",[377,154934,154935,154938,154941,154944,154947],{},[380,154936,154937],{},"能把代码拆成函数。",[380,154939,154940],{},"能把数据保存到文件。",[380,154942,154943],{},"能处理用户输入错误。",[380,154945,154946],{},"能写一个完整菜单程序。",[380,154948,154949],{},"能用 pyecharts 生成图表。",[365,154951,154953],{"id":154952},"_1211-推荐练习顺序","12.11 推荐练习顺序",[377,154955,154956,154959,154962,154965,154968,154971,154974,154977],{},[380,154957,154958],{},"猜数字游戏。",[380,154960,154961],{},"ATM 菜单程序。",[380,154963,154964],{},"学生成绩统计。",[380,154966,154967],{},"学生管理系统函数版。",[380,154969,154970],{},"学生管理系统文件持久化版。",[380,154972,154973],{},"学生管理系统面向对象版。",[380,154975,154976],{},"销售数据统计。",[380,154978,154979],{},"销售数据可视化。",[365,154981,154983],{"id":154982},"_1212-常见学习误区","12.12 常见学习误区",[377,154985,154986,154989,154992,154995,154998,155001,155004],{},[380,154987,154988],{},"只看视频不敲代码。",[380,154990,154991],{},"一报错就复制错误去搜，不先读报错位置。",[380,154993,154994],{},"变量名随便写，后续自己看不懂。",[380,154996,154997],{},"所有代码都写在一个文件一个函数里。",[380,154999,155000],{},"不保存练习代码，复习时没有材料。",[380,155002,155003],{},"还没掌握列表字典就急着学框架。",[380,155005,155006],{},"不会读官方文档，只依赖教程。",[365,155008,155010],{"id":155009},"_1213-如何读报错","12.13 如何读报错",[14,155012,155013],{},"报错通常从下往上看最后几行。",[14,155015,15407],{},[49,155017,155020],{"className":155018,"code":155019,"language":5460,"meta":46},[5458],"ValueError: invalid literal for int() with base 10: 'abc'\n",[28,155021,155019],{"__ignoreMap":46},[14,155023,24868],{},[377,155025,155026,155032,155042],{},[380,155027,155028,155029,28654],{},"异常类型是 ",[28,155030,155031],{},"ValueError",[380,155033,107542,155034,155037,155038,155041],{},[28,155035,155036],{},"int()"," 无法把 ",[28,155039,155040],{},"'abc'"," 转成整数。",[380,155043,155044],{},"应该检查输入内容或增加异常处理。",[14,155046,155047],{},"再看文件名和行号：",[49,155049,155052],{"className":155050,"code":155051,"language":5460,"meta":46},[5458],"File \"main.py\", line 10, in \u003Cmodule>\n",[28,155053,155051],{"__ignoreMap":46},[14,155055,155056,155057,155059],{},"表示错误发生在 ",[28,155058,154804],{}," 第 10 行。",[365,155061,155063],{"id":155062},"_1214-后续学习方向","12.14 后续学习方向",[14,155065,155066],{},"Python 基础完成后，可以按兴趣选择方向：",[377,155068,155069,155081,155090,155102,155113,155122,155132],{},[380,155070,155071,155072,630,155075,630,155078,28654],{},"自动化办公：",[28,155073,155074],{},"openpyxl",[28,155076,155077],{},"python-docx",[28,155079,155080],{},"pdfplumber",[380,155082,155083,155084,630,155086,630,155088,28654],{},"数据分析：",[28,155085,100823],{},[28,155087,146382],{},[28,155089,146390],{},[380,155091,155092,155093,630,155096,630,155099,28654],{},"Web 后端：",[28,155094,155095],{},"Flask",[28,155097,155098],{},"FastAPI",[28,155100,155101],{},"Django",[380,155103,155104,155105,630,155107,630,155110,28654],{},"爬虫：",[28,155106,146367],{},[28,155108,155109],{},"BeautifulSoup",[28,155111,155112],{},"Scrapy",[380,155114,155115,155116,630,155118,155121],{},"测试开发：",[28,155117,146414],{},[28,155119,155120],{},"selenium","、接口测试。",[380,155123,155124,155125,630,155127,630,155129,28654],{},"人工智能：",[28,155126,100823],{},[28,155128,146382],{},[28,155130,155131],{},"pytorch",[380,155133,155134,155135,630,155137,630,155140,28654],{},"运维脚本：",[28,155136,145983],{},[28,155138,155139],{},"subprocess",[28,155141,155142],{},"paramiko",[14,155144,155145],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[365,155147,155149],{"id":155148},"_1215-结课练习","12.15 结课练习",[377,155151,155152,155155,155158,155161,155164,155167,155170,155173],{},[380,155153,155154],{},"完成函数版学生管理系统。",[380,155156,155157],{},"给学生管理系统增加 JSON 持久化。",[380,155159,155160],{},"给学生管理系统增加异常处理。",[380,155162,155163],{},"把学生管理系统改成面向对象版。",[380,155165,155166],{},"使用 pyecharts 绘制学生成绩柱状图。",[380,155168,155169],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[380,155171,155172],{},"按品类统计销售额并绘制柱状图。",[380,155174,155175],{},"写一份自己的 Python 学习路线图。",[342,155177,155178],{},"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":46,"searchDepth":67,"depth":67,"links":155180},[155181,155182,155185,155186,155187,155193,155194,155195,155196,155197,155198,155199,155200,155201,155202],{"id":151897,"depth":67,"text":151898},{"id":151947,"depth":67,"text":151948,"children":155183},[155184],{"id":151951,"depth":144,"text":151952},{"id":151990,"depth":67,"text":151991},{"id":153464,"depth":67,"text":153465},{"id":153802,"depth":67,"text":153803,"children":155188},[155189,155190,155191,155192],{"id":153806,"depth":144,"text":153807},{"id":153946,"depth":144,"text":153947},{"id":154036,"depth":144,"text":154037},{"id":154122,"depth":144,"text":154123},{"id":154163,"depth":67,"text":154164},{"id":154356,"depth":67,"text":154357},{"id":154593,"depth":67,"text":154594},{"id":154784,"depth":67,"text":154785},{"id":154826,"depth":67,"text":154827},{"id":154952,"depth":67,"text":154953},{"id":154982,"depth":67,"text":154983},{"id":155009,"depth":67,"text":155010},{"id":155062,"depth":67,"text":155063},{"id":155148,"depth":67,"text":155149},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151889,"description":347},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155209,"title":155210,"body":155211,"description":347,"extension":348,"meta":157680,"navigation":350,"path":157681,"seo":157682,"stem":157683,"__hash__":157684},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155212,"toc":157655},[155213,155216,155220,155223,155226,155246,155249,155272,155275,155278,155300,155303,155325,155329,155332,155372,155375,155496,155500,155503,155543,155546,155570,155573,155577,155580,155594,155627,155630,155665,155668,155691,155694,155727,155730,155732,155738,155813,155816,155822,155839,155879,155883,155886,155932,155934,155972,155975,156010,156013,156048,156051,156083,156086,156105,156109,156113,156226,156228,156303,156307,156353,156356,156382,156391,156395,156398,156461,156469,156497,156501,156541,156606,156610,156613,156652,156655,156700,156703,156764,156768,156795,156798,156826,156829,156833,156837,156902,156905,156943,156946,156978,156982,157081,157085,157088,157161,157164,157212,157216,157222,157262,157265,157312,157315,157364,157368,157370,157384,157386,157567,157571,157598,157618,157625,157629,157646,157652],[10,155214,155210],{"id":155215},"_2-基础语法变量与字符串",[365,155217,155219],{"id":155218},"_21-注释","2.1 注释",[14,155221,155222],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,155224,155225],{},"单行注释：",[49,155227,155229],{"className":122,"code":155228,"language":124,"meta":46,"style":46},"# 这是单行注释\nprint(\"hello\")\n",[28,155230,155231,155236],{"__ignoreMap":46},[57,155232,155233],{"class":59,"line":60},[57,155234,155235],{"class":63},"# 这是单行注释\n",[57,155237,155238,155240,155242,155244],{"class":59,"line":67},[57,155239,165],{"class":81},[57,155241,168],{"class":140},[57,155243,6117],{"class":74},[57,155245,238],{"class":140},[14,155247,155248],{},"多行说明常用三引号：",[49,155250,155252],{"className":122,"code":155251,"language":124,"meta":46,"style":46},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[28,155253,155254,155258,155263,155268],{"__ignoreMap":46},[57,155255,155256],{"class":59,"line":60},[57,155257,95895],{"class":74},[57,155259,155260],{"class":59,"line":67},[57,155261,155262],{"class":74},"这是多行说明。\n",[57,155264,155265],{"class":59,"line":144},[57,155266,155267],{"class":74},"常用于文件顶部说明、函数说明等。\n",[57,155269,155270],{"class":59,"line":150},[57,155271,95895],{"class":74},[14,155273,155274],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,155276,155277],{},"不好：",[49,155279,155281],{"className":122,"code":155280,"language":124,"meta":46,"style":46},"# age 加 1\nage = age + 1\n",[28,155282,155283,155288],{"__ignoreMap":46},[57,155284,155285],{"class":59,"line":60},[57,155286,155287],{"class":63},"# age 加 1\n",[57,155289,155290,155292,155294,155296,155298],{"class":59,"line":67},[57,155291,146743],{"class":140},[57,155293,156],{"class":136},[57,155295,15979],{"class":140},[57,155297,897],{"class":136},[57,155299,55896],{"class":81},[14,155301,155302],{},"较好：",[49,155304,155306],{"className":122,"code":155305,"language":124,"meta":46,"style":46},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[28,155307,155308,155313],{"__ignoreMap":46},[57,155309,155310],{"class":59,"line":60},[57,155311,155312],{"class":63},"# 用户过完生日后，年龄增加一岁\n",[57,155314,155315,155317,155319,155321,155323],{"class":59,"line":67},[57,155316,146743],{"class":140},[57,155318,156],{"class":136},[57,155320,15979],{"class":140},[57,155322,897],{"class":136},[57,155324,55896],{"class":81},[365,155326,155328],{"id":155327},"_22-字面量","2.2 字面量",[14,155330,155331],{},"字面量就是代码中直接写出来的数据。",[49,155333,155335],{"className":122,"code":155334,"language":124,"meta":46,"style":46},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[28,155336,155337,155344,155351,155358,155365],{"__ignoreMap":46},[57,155338,155339,155341],{"class":59,"line":60},[57,155340,728],{"class":81},[57,155342,155343],{"class":63},"          # 整数\n",[57,155345,155346,155348],{"class":59,"line":67},[57,155347,472],{"class":81},[57,155349,155350],{"class":63},"         # 小数\n",[57,155352,155353,155355],{"class":59,"line":144},[57,155354,6117],{"class":74},[57,155356,155357],{"class":63},"      # 字符串\n",[57,155359,155360,155362],{"class":59,"line":150},[57,155361,31673],{"class":81},[57,155363,155364],{"class":63},"         # 布尔值\n",[57,155366,155367,155369],{"class":59,"line":162},[57,155368,95883],{"class":81},[57,155370,155371],{"class":63},"         # 空值\n",[14,155373,155374],{},"常见字面量类型：",[557,155376,155377,155387],{},[560,155378,155379],{},[563,155380,155381,155383,155385],{},[566,155382,24009],{},[566,155384,27761],{},[566,155386,26138],{},[603,155388,155389,155400,155411,155422,155434,155446,155458,155471,155483],{},[563,155390,155391,155393,155397],{},[608,155392,429],{},[608,155394,155395],{},[28,155396,728],{},[608,155398,155399],{},"整数",[563,155401,155402,155404,155408],{},[608,155403,464],{},[608,155405,155406],{},[28,155407,472],{},[608,155409,155410],{},"浮点数",[563,155412,155413,155415,155419],{},[608,155414,1585],{},[608,155416,155417],{},[28,155418,6117],{},[608,155420,155421],{},"字符串",[563,155423,155424,155426,155432],{},[608,155425,1637],{},[608,155427,155428,630,155430],{},[28,155429,31673],{},[28,155431,34184],{},[608,155433,66212],{},[563,155435,155436,155439,155443],{},[608,155437,155438],{},"NoneType",[608,155440,155441],{},[28,155442,95883],{},[608,155444,155445],{},"空值",[563,155447,155448,155450,155455],{},[608,155449,154267],{},[608,155451,155452],{},[28,155453,155454],{},"[1, 2, 3]",[608,155456,155457],{},"列表",[563,155459,155460,155463,155468],{},[608,155461,155462],{},"tuple",[608,155464,155465],{},[28,155466,155467],{},"(1, 2, 3)",[608,155469,155470],{},"元组",[563,155472,155473,155475,155480],{},[608,155474,114743],{},[608,155476,155477],{},[28,155478,155479],{},"{\"name\": \"张三\"}",[608,155481,155482],{},"字典",[563,155484,155485,155488,155493],{},[608,155486,155487],{},"set",[608,155489,155490],{},[28,155491,155492],{},"{1, 2, 3}",[608,155494,155495],{},"集合",[365,155497,155499],{"id":155498},"_23-变量","2.3 变量",[14,155501,155502],{},"变量是保存数据的名字。",[49,155504,155506],{"className":122,"code":155505,"language":124,"meta":46,"style":46},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[28,155507,155508,155516,155524,155534],{"__ignoreMap":46},[57,155509,155510,155512,155514],{"class":59,"line":60},[57,155511,146733],{"class":140},[57,155513,156],{"class":136},[57,155515,149550],{"class":74},[57,155517,155518,155520,155522],{"class":59,"line":67},[57,155519,146743],{"class":140},[57,155521,156],{"class":136},[57,155523,146748],{"class":81},[57,155525,155526,155529,155531],{"class":59,"line":144},[57,155527,155528],{"class":140},"height ",[57,155530,156],{"class":136},[57,155532,155533],{"class":81}," 1.75\n",[57,155535,155536,155539,155541],{"class":59,"line":150},[57,155537,155538],{"class":140},"is_student ",[57,155540,156],{"class":136},[57,155542,153796],{"class":81},[14,155544,155545],{},"Python 的变量不需要提前声明类型：",[49,155547,155549],{"className":122,"code":155548,"language":124,"meta":46,"style":46},"score = 100\nscore = \"满分\"\n",[28,155550,155551,155561],{"__ignoreMap":46},[57,155552,155553,155556,155558],{"class":59,"line":60},[57,155554,155555],{"class":140},"score ",[57,155557,156],{"class":136},[57,155559,155560],{"class":81}," 100\n",[57,155562,155563,155565,155567],{"class":59,"line":67},[57,155564,155555],{"class":140},[57,155566,156],{"class":136},[57,155568,155569],{"class":74}," \"满分\"\n",[14,155571,155572],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[365,155574,155576],{"id":155575},"_24-变量命名规则","2.4 变量命名规则",[14,155578,155579],{},"硬性规则：",[377,155581,155582,155585,155588,155591],{},[380,155583,155584],{},"只能由字母、数字、下划线组成。",[380,155586,155587],{},"不能以数字开头。",[380,155589,155590],{},"不能使用 Python 关键字。",[380,155592,155593],{},"区分大小写。",[49,155595,155597],{"className":122,"code":155596,"language":124,"meta":46,"style":46},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[28,155598,155599,155608,155617],{"__ignoreMap":46},[57,155600,155601,155604,155606],{"class":59,"line":60},[57,155602,155603],{"class":140},"user_name ",[57,155605,156],{"class":136},[57,155607,146738],{"class":74},[57,155609,155610,155613,155615],{"class":59,"line":67},[57,155611,155612],{"class":140},"age2 ",[57,155614,156],{"class":136},[57,155616,146748],{"class":81},[57,155618,155619,155622,155624],{"class":59,"line":144},[57,155620,155621],{"class":140},"_token ",[57,155623,156],{"class":136},[57,155625,155626],{"class":74}," \"abc\"\n",[14,155628,155629],{},"错误写法：",[49,155631,155633],{"className":122,"code":155632,"language":124,"meta":46,"style":46},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[28,155634,155635,155644,155656],{"__ignoreMap":46},[57,155636,155637,155640,155642],{"class":59,"line":60},[57,155638,155639],{"class":77600},"2age",[57,155641,13837],{"class":136},[57,155643,146748],{"class":81},[57,155645,155646,155648,155650,155652,155654],{"class":59,"line":67},[57,155647,131781],{"class":140},[57,155649,948],{"class":136},[57,155651,146733],{"class":140},[57,155653,156],{"class":136},[57,155655,146738],{"class":74},[57,155657,155658,155660,155662],{"class":59,"line":144},[57,155659,14966],{"class":136},[57,155661,13837],{"class":136},[57,155663,155664],{"class":74}," \"一班\"\n",[14,155666,155667],{},"查看关键字：",[49,155669,155671],{"className":122,"code":155670,"language":124,"meta":46,"style":46},"import keyword\n\nprint(keyword.kwlist)\n",[28,155672,155673,155680,155684],{"__ignoreMap":46},[57,155674,155675,155677],{"class":59,"line":60},[57,155676,137],{"class":136},[57,155678,155679],{"class":140}," keyword\n",[57,155681,155682],{"class":59,"line":67},[57,155683,2673],{"emptyLinePlaceholder":350},[57,155685,155686,155688],{"class":59,"line":144},[57,155687,165],{"class":81},[57,155689,155690],{"class":140},"(keyword.kwlist)\n",[14,155692,155693],{},"推荐命名风格：",[49,155695,155697],{"className":122,"code":155696,"language":124,"meta":46,"style":46},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[28,155698,155699,155708,155718],{"__ignoreMap":46},[57,155700,155701,155704,155706],{"class":59,"line":60},[57,155702,155703],{"class":140},"student_name ",[57,155705,156],{"class":136},[57,155707,149550],{"class":74},[57,155709,155710,155713,155715],{"class":59,"line":67},[57,155711,155712],{"class":140},"total_price ",[57,155714,156],{"class":136},[57,155716,155717],{"class":81}," 99.8\n",[57,155719,155720,155723,155725],{"class":59,"line":144},[57,155721,155722],{"class":140},"is_finished ",[57,155724,156],{"class":136},[57,155726,126004],{"class":81},[14,155728,155729],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[365,155731,50929],{"id":50928},[14,155733,104563,155734,155737],{},[28,155735,155736],{},"type()"," 查看数据类型：",[49,155739,155741],{"className":122,"code":155740,"language":124,"meta":46,"style":46},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[28,155742,155743,155757,155771,155785,155799],{"__ignoreMap":46},[57,155744,155745,155747,155749,155751,155753,155755],{"class":59,"line":60},[57,155746,165],{"class":81},[57,155748,168],{"class":140},[57,155750,103304],{"class":81},[57,155752,168],{"class":140},[57,155754,728],{"class":81},[57,155756,259],{"class":140},[57,155758,155759,155761,155763,155765,155767,155769],{"class":59,"line":67},[57,155760,165],{"class":81},[57,155762,168],{"class":140},[57,155764,103304],{"class":81},[57,155766,168],{"class":140},[57,155768,472],{"class":81},[57,155770,259],{"class":140},[57,155772,155773,155775,155777,155779,155781,155783],{"class":59,"line":144},[57,155774,165],{"class":81},[57,155776,168],{"class":140},[57,155778,103304],{"class":81},[57,155780,168],{"class":140},[57,155782,6117],{"class":74},[57,155784,259],{"class":140},[57,155786,155787,155789,155791,155793,155795,155797],{"class":59,"line":150},[57,155788,165],{"class":81},[57,155790,168],{"class":140},[57,155792,103304],{"class":81},[57,155794,168],{"class":140},[57,155796,31673],{"class":81},[57,155798,259],{"class":140},[57,155800,155801,155803,155805,155807,155809,155811],{"class":59,"line":162},[57,155802,165],{"class":81},[57,155804,168],{"class":140},[57,155806,103304],{"class":81},[57,155808,168],{"class":140},[57,155810,95883],{"class":81},[57,155812,259],{"class":140},[14,155814,155815],{},"输出类似：",[49,155817,155820],{"className":155818,"code":155819,"language":5460,"meta":46},[5458],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[28,155821,155819],{"__ignoreMap":46},[14,155823,9298,155824,107480,155826,155828,155829,155831,155832,21772,155834,155831,155836,155838],{},[28,155825,1637],{},[28,155827,429],{}," 的子类，",[28,155830,31673],{}," 可以当作 ",[28,155833,635],{},[28,155835,34184],{},[28,155837,226],{},"，但业务代码中不要滥用。",[49,155840,155842],{"className":122,"code":155841,"language":124,"meta":46,"style":46},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[28,155843,155844,155862],{"__ignoreMap":46},[57,155845,155846,155848,155850,155852,155854,155856,155859],{"class":59,"line":60},[57,155847,165],{"class":81},[57,155849,168],{"class":140},[57,155851,31673],{"class":81},[57,155853,45763],{"class":136},[57,155855,25387],{"class":81},[57,155857,155858],{"class":140},")   ",[57,155860,155861],{"class":63},"# 2\n",[57,155863,155864,155866,155868,155870,155872,155874,155876],{"class":59,"line":67},[57,155865,165],{"class":81},[57,155867,168],{"class":140},[57,155869,34184],{"class":81},[57,155871,45763],{"class":136},[57,155873,25387],{"class":81},[57,155875,46005],{"class":140},[57,155877,155878],{"class":63},"# 1\n",[365,155880,155882],{"id":155881},"_26-类型转换","2.6 类型转换",[14,155884,155885],{},"常用转换函数：",[49,155887,155889],{"className":122,"code":155888,"language":124,"meta":46,"style":46},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[28,155890,155891,155901,155912,155922],{"__ignoreMap":46},[57,155892,155893,155895,155897,155899],{"class":59,"line":60},[57,155894,429],{"class":81},[57,155896,168],{"class":140},[57,155898,54513],{"class":74},[57,155900,238],{"class":140},[57,155902,155903,155905,155907,155910],{"class":59,"line":67},[57,155904,464],{"class":81},[57,155906,168],{"class":140},[57,155908,155909],{"class":74},"\"3.14\"",[57,155911,238],{"class":140},[57,155913,155914,155916,155918,155920],{"class":59,"line":144},[57,155915,1585],{"class":81},[57,155917,168],{"class":140},[57,155919,728],{"class":81},[57,155921,238],{"class":140},[57,155923,155924,155926,155928,155930],{"class":59,"line":150},[57,155925,1637],{"class":81},[57,155927,168],{"class":140},[57,155929,635],{"class":81},[57,155931,238],{"class":140},[14,155933,15407],{},[49,155935,155937],{"className":122,"code":155936,"language":124,"meta":46,"style":46},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[28,155938,155939,155948,155959],{"__ignoreMap":46},[57,155940,155941,155943,155945],{"class":59,"line":60},[57,155942,146743],{"class":140},[57,155944,156],{"class":136},[57,155946,155947],{"class":74}," \"18\"\n",[57,155949,155950,155952,155954,155956],{"class":59,"line":67},[57,155951,146743],{"class":140},[57,155953,156],{"class":136},[57,155955,2655],{"class":81},[57,155957,155958],{"class":140},"(age)\n",[57,155960,155961,155963,155966,155968,155970],{"class":59,"line":144},[57,155962,165],{"class":81},[57,155964,155965],{"class":140},"(age ",[57,155967,897],{"class":136},[57,155969,25387],{"class":81},[57,155971,238],{"class":140},[14,155973,155974],{},"输入得到的内容永远是字符串：",[49,155976,155978],{"className":122,"code":155977,"language":124,"meta":46,"style":46},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[28,155979,155980,155996],{"__ignoreMap":46},[57,155981,155982,155985,155987,155989,155991,155994],{"class":59,"line":60},[57,155983,155984],{"class":140},"num ",[57,155986,156],{"class":136},[57,155988,60802],{"class":81},[57,155990,168],{"class":140},[57,155992,155993],{"class":74},"\"请输入数字:\"",[57,155995,238],{"class":140},[57,155997,155998,156000,156002,156004,156007],{"class":59,"line":67},[57,155999,165],{"class":81},[57,156001,168],{"class":140},[57,156003,103304],{"class":81},[57,156005,156006],{"class":140},"(num))  ",[57,156008,156009],{"class":63},"# str\n",[14,156011,156012],{},"如果要做数学运算，必须转换：",[49,156014,156016],{"className":122,"code":156015,"language":124,"meta":46,"style":46},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[28,156017,156018,156036],{"__ignoreMap":46},[57,156019,156020,156022,156024,156026,156028,156030,156032,156034],{"class":59,"line":60},[57,156021,155984],{"class":140},[57,156023,156],{"class":136},[57,156025,2655],{"class":81},[57,156027,168],{"class":140},[57,156029,54018],{"class":81},[57,156031,168],{"class":140},[57,156033,155993],{"class":74},[57,156035,259],{"class":140},[57,156037,156038,156040,156042,156044,156046],{"class":59,"line":67},[57,156039,165],{"class":81},[57,156041,45816],{"class":140},[57,156043,897],{"class":136},[57,156045,2311],{"class":81},[57,156047,238],{"class":140},[14,156049,156050],{},"常见错误：",[49,156052,156054],{"className":122,"code":156053,"language":124,"meta":46,"style":46},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[28,156055,156056,156069],{"__ignoreMap":46},[57,156057,156058,156060,156062,156064,156066],{"class":59,"line":60},[57,156059,429],{"class":81},[57,156061,168],{"class":140},[57,156063,155909],{"class":74},[57,156065,155858],{"class":140},[57,156067,156068],{"class":63},"# 错误\n",[57,156070,156071,156073,156075,156078,156081],{"class":59,"line":67},[57,156072,429],{"class":81},[57,156074,168],{"class":140},[57,156076,156077],{"class":74},"\"abc\"",[57,156079,156080],{"class":140},")    ",[57,156082,156068],{"class":63},[14,156084,156085],{},"正确写法：",[49,156087,156089],{"className":122,"code":156088,"language":124,"meta":46,"style":46},"num = float(\"3.14\")\n",[28,156090,156091],{"__ignoreMap":46},[57,156092,156093,156095,156097,156099,156101,156103],{"class":59,"line":60},[57,156094,155984],{"class":140},[57,156096,156],{"class":136},[57,156098,109994],{"class":81},[57,156100,168],{"class":140},[57,156102,155909],{"class":74},[57,156104,238],{"class":140},[365,156106,156108],{"id":156107},"_27-运算符","2.7 运算符",[394,156110,156112],{"id":156111},"_271-算术运算符","2.7.1 算术运算符",[557,156114,156115,156126],{},[560,156116,156117],{},[563,156118,156119,156122,156124],{},[566,156120,156121],{},"运算符",[566,156123,26138],{},[566,156125,27761],{},[603,156127,156128,156142,156156,156170,156184,156198,156212],{},[563,156129,156130,156134,156137],{},[608,156131,156132],{},[28,156133,897],{},[608,156135,156136],{},"加法",[608,156138,156139],{},[28,156140,156141],{},"1 + 2",[563,156143,156144,156148,156151],{},[608,156145,156146],{},[28,156147,948],{},[608,156149,156150],{},"减法",[608,156152,156153],{},[28,156154,156155],{},"5 - 3",[563,156157,156158,156162,156165],{},[608,156159,156160],{},[28,156161,871],{},[608,156163,156164],{},"乘法",[608,156166,156167],{},[28,156168,156169],{},"2 * 3",[563,156171,156172,156176,156179],{},[608,156173,156174],{},[28,156175,1000],{},[608,156177,156178],{},"除法，结果是浮点数",[608,156180,156181],{},[28,156182,156183],{},"5 \u002F 2",[563,156185,156186,156190,156193],{},[608,156187,156188],{},[28,156189,33526],{},[608,156191,156192],{},"整除",[608,156194,156195],{},[28,156196,156197],{},"5 \u002F\u002F 2",[563,156199,156200,156204,156207],{},[608,156201,156202],{},[28,156203,745],{},[608,156205,156206],{},"取余",[608,156208,156209],{},[28,156210,156211],{},"5 % 2",[563,156213,156214,156218,156221],{},[608,156215,156216],{},[28,156217,10934],{},[608,156219,156220],{},"幂运算",[608,156222,156223],{},[28,156224,156225],{},"2 ** 3",[14,156227,15407],{},[49,156229,156231],{"className":122,"code":156230,"language":124,"meta":46,"style":46},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[28,156232,156233,156251,156268,156285],{"__ignoreMap":46},[57,156234,156235,156237,156239,156241,156244,156246,156248],{"class":59,"line":60},[57,156236,165],{"class":81},[57,156238,168],{"class":140},[57,156240,736],{"class":81},[57,156242,156243],{"class":136}," \u002F",[57,156245,15027],{"class":81},[57,156247,155858],{"class":140},[57,156249,156250],{"class":63},"# 2.5\n",[57,156252,156253,156255,156257,156259,156262,156264,156266],{"class":59,"line":67},[57,156254,165],{"class":81},[57,156256,168],{"class":140},[57,156258,736],{"class":81},[57,156260,156261],{"class":136}," \u002F\u002F",[57,156263,15027],{"class":81},[57,156265,46005],{"class":140},[57,156267,155861],{"class":63},[57,156269,156270,156272,156274,156276,156279,156281,156283],{"class":59,"line":144},[57,156271,165],{"class":81},[57,156273,168],{"class":140},[57,156275,736],{"class":81},[57,156277,156278],{"class":136}," %",[57,156280,15027],{"class":81},[57,156282,155858],{"class":140},[57,156284,155878],{"class":63},[57,156286,156287,156289,156291,156293,156296,156298,156300],{"class":59,"line":150},[57,156288,165],{"class":81},[57,156290,168],{"class":140},[57,156292,498],{"class":81},[57,156294,156295],{"class":136}," **",[57,156297,78267],{"class":81},[57,156299,46005],{"class":140},[57,156301,156302],{"class":63},"# 8\n",[394,156304,156306],{"id":156305},"_272-赋值运算符","2.7.2 赋值运算符",[49,156308,156310],{"className":122,"code":156309,"language":124,"meta":46,"style":46},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[28,156311,156312,156320,156328,156336,156344],{"__ignoreMap":46},[57,156313,156314,156316,156318],{"class":59,"line":60},[57,156315,155984],{"class":140},[57,156317,156],{"class":136},[57,156319,58625],{"class":81},[57,156321,156322,156324,156326],{"class":59,"line":67},[57,156323,155984],{"class":140},[57,156325,9750],{"class":136},[57,156327,54624],{"class":81},[57,156329,156330,156332,156334],{"class":59,"line":144},[57,156331,155984],{"class":140},[57,156333,150449],{"class":136},[57,156335,47920],{"class":81},[57,156337,156338,156340,156342],{"class":59,"line":150},[57,156339,155984],{"class":140},[57,156341,137345],{"class":136},[57,156343,120233],{"class":81},[57,156345,156346,156348,156351],{"class":59,"line":162},[57,156347,155984],{"class":140},[57,156349,156350],{"class":136},"\u002F=",[57,156352,47920],{"class":81},[14,156354,156355],{},"等价关系：",[49,156357,156359],{"className":122,"code":156358,"language":124,"meta":46,"style":46},"num += 1\nnum = num + 1\n",[28,156360,156361,156369],{"__ignoreMap":46},[57,156362,156363,156365,156367],{"class":59,"line":60},[57,156364,155984],{"class":140},[57,156366,9750],{"class":136},[57,156368,55896],{"class":81},[57,156370,156371,156373,156375,156378,156380],{"class":59,"line":67},[57,156372,155984],{"class":140},[57,156374,156],{"class":136},[57,156376,156377],{"class":140}," num ",[57,156379,897],{"class":136},[57,156381,55896],{"class":81},[14,156383,156384,156385,101215,156388,28654],{},"Python 没有 ",[28,156386,156387],{},"num++",[28,156389,156390],{},"num--",[394,156392,156394],{"id":156393},"_273-比较运算符","2.7.3 比较运算符",[14,156396,156397],{},"比较运算结果是布尔值。",[49,156399,156401],{"className":122,"code":156400,"language":124,"meta":46,"style":46},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[28,156402,156403,156417,156432,156446],{"__ignoreMap":46},[57,156404,156405,156407,156409,156411,156413,156415],{"class":59,"line":60},[57,156406,165],{"class":81},[57,156408,168],{"class":140},[57,156410,862],{"class":81},[57,156412,26491],{"class":136},[57,156414,2421],{"class":81},[57,156416,238],{"class":140},[57,156418,156419,156421,156423,156425,156428,156430],{"class":59,"line":67},[57,156420,165],{"class":81},[57,156422,168],{"class":140},[57,156424,862],{"class":81},[57,156426,156427],{"class":136}," >=",[57,156429,2311],{"class":81},[57,156431,238],{"class":140},[57,156433,156434,156436,156438,156440,156442,156444],{"class":59,"line":144},[57,156435,165],{"class":81},[57,156437,168],{"class":140},[57,156439,862],{"class":81},[57,156441,101756],{"class":136},[57,156443,2356],{"class":81},[57,156445,238],{"class":140},[57,156447,156448,156450,156452,156454,156457,156459],{"class":59,"line":150},[57,156449,165],{"class":81},[57,156451,168],{"class":140},[57,156453,862],{"class":81},[57,156455,156456],{"class":136}," !=",[57,156458,2356],{"class":81},[57,156460,238],{"class":140},[14,156462,156463,156464,156466,156467,28654],{},"注意：判断相等用 ",[28,156465,3222],{},"，赋值用 ",[28,156468,156],{},[49,156470,156472],{"className":122,"code":156471,"language":124,"meta":46,"style":46},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[28,156473,156474,156486],{"__ignoreMap":46},[57,156475,156476,156478,156480,156483],{"class":59,"line":60},[57,156477,146743],{"class":140},[57,156479,156],{"class":136},[57,156481,156482],{"class":81}," 18",[57,156484,156485],{"class":63},"       # 赋值\n",[57,156487,156488,156490,156492,156494],{"class":59,"line":67},[57,156489,146743],{"class":140},[57,156491,3222],{"class":136},[57,156493,156482],{"class":81},[57,156495,156496],{"class":63},"      # 判断是否相等\n",[394,156498,156500],{"id":156499},"_274-逻辑运算符","2.7.4 逻辑运算符",[557,156502,156503,156511],{},[560,156504,156505],{},[563,156506,156507,156509],{},[566,156508,156121],{},[566,156510,26138],{},[603,156512,156513,156522,156531],{},[563,156514,156515,156519],{},[608,156516,156517],{},[28,156518,217],{},[608,156520,156521],{},"并且",[563,156523,156524,156528],{},[608,156525,156526],{},[28,156527,115287],{},[608,156529,156530],{},"或者",[563,156532,156533,156538],{},[608,156534,156535],{},[28,156536,156537],{},"not",[608,156539,156540],{},"取反",[49,156542,156544],{"className":122,"code":156543,"language":124,"meta":46,"style":46},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[28,156545,156546,156554,156563,156567,156582,156596],{"__ignoreMap":46},[57,156547,156548,156550,156552],{"class":59,"line":60},[57,156549,146743],{"class":140},[57,156551,156],{"class":136},[57,156553,88262],{"class":81},[57,156555,156556,156559,156561],{"class":59,"line":67},[57,156557,156558],{"class":140},"has_ticket ",[57,156560,156],{"class":136},[57,156562,153796],{"class":81},[57,156564,156565],{"class":59,"line":144},[57,156566,2673],{"emptyLinePlaceholder":350},[57,156568,156569,156571,156573,156575,156577,156579],{"class":59,"line":150},[57,156570,165],{"class":81},[57,156572,155965],{"class":140},[57,156574,1984],{"class":136},[57,156576,156482],{"class":81},[57,156578,120626],{"class":136},[57,156580,156581],{"class":140}," has_ticket)\n",[57,156583,156584,156586,156588,156590,156592,156594],{"class":59,"line":162},[57,156585,165],{"class":81},[57,156587,155965],{"class":140},[57,156589,1326],{"class":136},[57,156591,156482],{"class":81},[57,156593,114398],{"class":136},[57,156595,156581],{"class":140},[57,156597,156598,156600,156602,156604],{"class":59,"line":180},[57,156599,165],{"class":81},[57,156601,168],{"class":140},[57,156603,156537],{"class":136},[57,156605,156581],{"class":140},[365,156607,156609],{"id":156608},"_28-字符串定义","2.8 字符串定义",[14,156611,156612],{},"三种常见写法：",[49,156614,156616],{"className":122,"code":156615,"language":124,"meta":46,"style":46},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[28,156617,156618,156628,156637,156647],{"__ignoreMap":46},[57,156619,156620,156623,156625],{"class":59,"line":60},[57,156621,156622],{"class":140},"name1 ",[57,156624,156],{"class":136},[57,156626,156627],{"class":74}," '小明'\n",[57,156629,156630,156633,156635],{"class":59,"line":67},[57,156631,156632],{"class":140},"name2 ",[57,156634,156],{"class":136},[57,156636,149550],{"class":74},[57,156638,156639,156642,156644],{"class":59,"line":144},[57,156640,156641],{"class":140},"text ",[57,156643,156],{"class":136},[57,156645,156646],{"class":74}," \"\"\"这是多行字符串\n",[57,156648,156649],{"class":59,"line":150},[57,156650,156651],{"class":74},"可以换行\"\"\"\n",[14,156653,156654],{},"字符串中包含引号：",[49,156656,156658],{"className":122,"code":156657,"language":124,"meta":46,"style":46},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[28,156659,156660,156670,156680],{"__ignoreMap":46},[57,156661,156662,156665,156667],{"class":59,"line":60},[57,156663,156664],{"class":140},"msg ",[57,156666,156],{"class":136},[57,156668,156669],{"class":74}," \"他说:'你好'\"\n",[57,156671,156672,156675,156677],{"class":59,"line":67},[57,156673,156674],{"class":140},"msg2 ",[57,156676,156],{"class":136},[57,156678,156679],{"class":74}," '他说:\"你好\"'\n",[57,156681,156682,156685,156687,156690,156693,156696,156698],{"class":59,"line":144},[57,156683,156684],{"class":140},"msg3 ",[57,156686,156],{"class":136},[57,156688,156689],{"class":74}," \"他说:",[57,156691,156692],{"class":81},"\\\"",[57,156694,156695],{"class":74},"你好",[57,156697,156692],{"class":81},[57,156699,25402],{"class":74},[14,156701,156702],{},"常见转义字符：",[557,156704,156705,156714],{},[560,156706,156707],{},[563,156708,156709,156712],{},[566,156710,156711],{},"写法",[566,156713,100897],{},[603,156715,156716,156726,156735,156745,156754],{},[563,156717,156718,156723],{},[608,156719,156720],{},[28,156721,156722],{},"\\n",[608,156724,156725],{},"换行",[563,156727,156728,156732],{},[608,156729,156730],{},[28,156731,1516],{},[608,156733,156734],{},"制表符",[563,156736,156737,156742],{},[608,156738,156739],{},[28,156740,156741],{},"\\\\",[608,156743,156744],{},"反斜杠",[563,156746,156747,156751],{},[608,156748,156749],{},[28,156750,156692],{},[608,156752,156753],{},"双引号",[563,156755,156756,156761],{},[608,156757,156758],{},[28,156759,156760],{},"\\'",[608,156762,156763],{},"单引号",[365,156765,156767],{"id":156766},"_29-字符串拼接","2.9 字符串拼接",[49,156769,156771],{"className":122,"code":156770,"language":124,"meta":46,"style":46},"name = \"小明\"\nprint(\"你好，\" + name)\n",[28,156772,156773,156781],{"__ignoreMap":46},[57,156774,156775,156777,156779],{"class":59,"line":60},[57,156776,146733],{"class":140},[57,156778,156],{"class":136},[57,156780,149550],{"class":74},[57,156782,156783,156785,156787,156790,156792],{"class":59,"line":67},[57,156784,165],{"class":81},[57,156786,168],{"class":140},[57,156788,156789],{"class":74},"\"你好，\"",[57,156791,45763],{"class":136},[57,156793,156794],{"class":140}," name)\n",[14,156796,156797],{},"字符串只能和字符串拼接：",[49,156799,156801],{"className":122,"code":156800,"language":124,"meta":46,"style":46},"age = 18\nprint(\"年龄:\" + str(age))\n",[28,156802,156803,156811],{"__ignoreMap":46},[57,156804,156805,156807,156809],{"class":59,"line":60},[57,156806,146743],{"class":140},[57,156808,156],{"class":136},[57,156810,146748],{"class":81},[57,156812,156813,156815,156817,156819,156821,156823],{"class":59,"line":67},[57,156814,165],{"class":81},[57,156816,168],{"class":140},[57,156818,146714],{"class":74},[57,156820,45763],{"class":136},[57,156822,74116],{"class":81},[57,156824,156825],{"class":140},"(age))\n",[14,156827,156828],{},"更推荐使用格式化字符串。",[365,156830,156832],{"id":156831},"_210-字符串格式化","2.10 字符串格式化",[394,156834,156836],{"id":156835},"_2101-百分号格式化","2.10.1 百分号格式化",[49,156838,156840],{"className":122,"code":156839,"language":124,"meta":46,"style":46},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[28,156841,156842,156850,156858,156867,156871],{"__ignoreMap":46},[57,156843,156844,156846,156848],{"class":59,"line":60},[57,156845,146733],{"class":140},[57,156847,156],{"class":136},[57,156849,149550],{"class":74},[57,156851,156852,156854,156856],{"class":59,"line":67},[57,156853,146743],{"class":140},[57,156855,156],{"class":136},[57,156857,146748],{"class":81},[57,156859,156860,156862,156864],{"class":59,"line":144},[57,156861,155555],{"class":140},[57,156863,156],{"class":136},[57,156865,156866],{"class":81}," 95.5\n",[57,156868,156869],{"class":59,"line":150},[57,156870,2673],{"emptyLinePlaceholder":350},[57,156872,156873,156875,156877,156880,156883,156886,156889,156892,156895,156897,156899],{"class":59,"line":162},[57,156874,165],{"class":81},[57,156876,168],{"class":140},[57,156878,156879],{"class":74},"\"姓名:",[57,156881,156882],{"class":81},"%s",[57,156884,156885],{"class":74}," 年龄:",[57,156887,156888],{"class":81},"%d",[57,156890,156891],{"class":74}," 分数:",[57,156893,156894],{"class":81},"%.1f",[57,156896,668],{"class":74},[57,156898,156278],{"class":136},[57,156900,156901],{"class":140}," (name, age, score))\n",[14,156903,156904],{},"常用占位符：",[557,156906,156907,156916],{},[560,156908,156909],{},[563,156910,156911,156914],{},[566,156912,156913],{},"占位符",[566,156915,26138],{},[603,156917,156918,156926,156934],{},[563,156919,156920,156924],{},[608,156921,156922],{},[28,156923,156882],{},[608,156925,155421],{},[563,156927,156928,156932],{},[608,156929,156930],{},[28,156931,156888],{},[608,156933,155399],{},[563,156935,156936,156941],{},[608,156937,156938],{},[28,156939,156940],{},"%f",[608,156942,155410],{},[14,156944,156945],{},"精度控制：",[49,156947,156949],{"className":122,"code":156948,"language":124,"meta":46,"style":46},"price = 12.3456\nprint(\"%.2f\" % price)\n",[28,156950,156951,156960],{"__ignoreMap":46},[57,156952,156953,156955,156957],{"class":59,"line":60},[57,156954,146878],{"class":140},[57,156956,156],{"class":136},[57,156958,156959],{"class":81}," 12.3456\n",[57,156961,156962,156964,156966,156968,156971,156973,156975],{"class":59,"line":67},[57,156963,165],{"class":81},[57,156965,168],{"class":140},[57,156967,668],{"class":74},[57,156969,156970],{"class":81},"%.2f",[57,156972,668],{"class":74},[57,156974,156278],{"class":136},[57,156976,156977],{"class":140}," price)\n",[394,156979,156981],{"id":156980},"_2102-format方法","2.10.2 format方法",[49,156983,156985],{"className":122,"code":156984,"language":124,"meta":46,"style":46},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[28,156986,156987,156995,157003,157007,157026,157046],{"__ignoreMap":46},[57,156988,156989,156991,156993],{"class":59,"line":60},[57,156990,146733],{"class":140},[57,156992,156],{"class":136},[57,156994,149550],{"class":74},[57,156996,156997,156999,157001],{"class":59,"line":67},[57,156998,146743],{"class":140},[57,157000,156],{"class":136},[57,157002,146748],{"class":81},[57,157004,157005],{"class":59,"line":144},[57,157006,2673],{"emptyLinePlaceholder":350},[57,157008,157009,157011,157013,157015,157017,157019,157021,157023],{"class":59,"line":150},[57,157010,165],{"class":81},[57,157012,168],{"class":140},[57,157014,156879],{"class":74},[57,157016,32656],{"class":81},[57,157018,156885],{"class":74},[57,157020,32656],{"class":81},[57,157022,668],{"class":74},[57,157024,157025],{"class":140},".format(name, age))\n",[57,157027,157028,157030,157032,157034,157037,157039,157042,157044],{"class":59,"line":162},[57,157029,165],{"class":81},[57,157031,168],{"class":140},[57,157033,156879],{"class":74},[57,157035,157036],{"class":81},"{0}",[57,157038,156885],{"class":74},[57,157040,157041],{"class":81},"{1}",[57,157043,668],{"class":74},[57,157045,157025],{"class":140},[57,157047,157048,157050,157052,157054,157057,157059,157062,157064,157067,157069,157071,157074,157076,157078],{"class":59,"line":180},[57,157049,165],{"class":81},[57,157051,168],{"class":140},[57,157053,156879],{"class":74},[57,157055,157056],{"class":81},"{name}",[57,157058,156885],{"class":74},[57,157060,157061],{"class":81},"{age}",[57,157063,668],{"class":74},[57,157065,157066],{"class":140},".format(",[57,157068,80007],{"class":5489},[57,157070,156],{"class":136},[57,157072,157073],{"class":140},"name, ",[57,157075,70418],{"class":5489},[57,157077,156],{"class":136},[57,157079,157080],{"class":140},"age))\n",[394,157082,157084],{"id":157083},"_2103-f-string","2.10.3 f-string",[14,157086,157087],{},"推荐写法：",[49,157089,157091],{"className":122,"code":157090,"language":124,"meta":46,"style":46},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[28,157092,157093,157101,157109,157117,157121],{"__ignoreMap":46},[57,157094,157095,157097,157099],{"class":59,"line":60},[57,157096,146733],{"class":140},[57,157098,156],{"class":136},[57,157100,149550],{"class":74},[57,157102,157103,157105,157107],{"class":59,"line":67},[57,157104,146743],{"class":140},[57,157106,156],{"class":136},[57,157108,146748],{"class":81},[57,157110,157111,157113,157115],{"class":59,"line":144},[57,157112,155555],{"class":140},[57,157114,156],{"class":136},[57,157116,156866],{"class":81},[57,157118,157119],{"class":59,"line":150},[57,157120,2673],{"emptyLinePlaceholder":350},[57,157122,157123,157125,157127,157129,157131,157133,157135,157137,157139,157141,157143,157145,157147,157149,157152,157155,157157,157159],{"class":59,"line":162},[57,157124,165],{"class":81},[57,157126,168],{"class":140},[57,157128,475],{"class":136},[57,157130,156879],{"class":74},[57,157132,1312],{"class":81},[57,157134,80007],{"class":140},[57,157136,1362],{"class":81},[57,157138,156885],{"class":74},[57,157140,1312],{"class":81},[57,157142,70418],{"class":140},[57,157144,1362],{"class":81},[57,157146,156891],{"class":74},[57,157148,1312],{"class":81},[57,157150,157151],{"class":140},"score",[57,157153,157154],{"class":136},":.1f",[57,157156,1362],{"class":81},[57,157158,668],{"class":74},[57,157160,238],{"class":140},[14,157162,157163],{},"表达式也可以放进去：",[49,157165,157167],{"className":122,"code":157166,"language":124,"meta":46,"style":46},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[28,157168,157169,157177,157185],{"__ignoreMap":46},[57,157170,157171,157173,157175],{"class":59,"line":60},[57,157172,146878],{"class":140},[57,157174,156],{"class":136},[57,157176,146883],{"class":81},[57,157178,157179,157181,157183],{"class":59,"line":67},[57,157180,146888],{"class":140},[57,157182,156],{"class":136},[57,157184,54624],{"class":81},[57,157186,157187,157189,157191,157193,157196,157198,157200,157202,157205,157207,157210],{"class":59,"line":144},[57,157188,165],{"class":81},[57,157190,168],{"class":140},[57,157192,475],{"class":136},[57,157194,157195],{"class":74},"\"总价:",[57,157197,1312],{"class":81},[57,157199,146878],{"class":140},[57,157201,871],{"class":136},[57,157203,157204],{"class":140}," count",[57,157206,1362],{"class":81},[57,157208,157209],{"class":74},"元\"",[57,157211,238],{"class":140},[365,157213,157215],{"id":157214},"_211-input输入","2.11 input输入",[14,157217,157218,157221],{},[28,157219,157220],{},"input()"," 会暂停程序，等待用户输入。",[49,157223,157225],{"className":122,"code":157224,"language":124,"meta":46,"style":46},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[28,157226,157227,157241],{"__ignoreMap":46},[57,157228,157229,157231,157233,157235,157237,157239],{"class":59,"line":60},[57,157230,146733],{"class":140},[57,157232,156],{"class":136},[57,157234,60802],{"class":81},[57,157236,168],{"class":140},[57,157238,152576],{"class":74},[57,157240,238],{"class":140},[57,157242,157243,157245,157247,157249,157252,157254,157256,157258,157260],{"class":59,"line":67},[57,157244,165],{"class":81},[57,157246,168],{"class":140},[57,157248,475],{"class":136},[57,157250,157251],{"class":74},"\"你好，",[57,157253,1312],{"class":81},[57,157255,80007],{"class":140},[57,157257,1362],{"class":81},[57,157259,668],{"class":74},[57,157261,238],{"class":140},[14,157263,157264],{},"输入整数：",[49,157266,157268],{"className":122,"code":157267,"language":124,"meta":46,"style":46},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[28,157269,157270,157288],{"__ignoreMap":46},[57,157271,157272,157274,157276,157278,157280,157282,157284,157286],{"class":59,"line":60},[57,157273,146743],{"class":140},[57,157275,156],{"class":136},[57,157277,2655],{"class":81},[57,157279,168],{"class":140},[57,157281,54018],{"class":81},[57,157283,168],{"class":140},[57,157285,152591],{"class":74},[57,157287,259],{"class":140},[57,157289,157290,157292,157294,157296,157299,157301,157303,157305,157308,157310],{"class":59,"line":67},[57,157291,165],{"class":81},[57,157293,168],{"class":140},[57,157295,475],{"class":136},[57,157297,157298],{"class":74},"\"明年你",[57,157300,1312],{"class":81},[57,157302,146743],{"class":140},[57,157304,897],{"class":136},[57,157306,157307],{"class":81}," 1}",[57,157309,149601],{"class":74},[57,157311,238],{"class":140},[14,157313,157314],{},"输入小数：",[49,157316,157318],{"className":122,"code":157317,"language":124,"meta":46,"style":46},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[28,157319,157320,157339],{"__ignoreMap":46},[57,157321,157322,157324,157326,157328,157330,157332,157334,157337],{"class":59,"line":60},[57,157323,155528],{"class":140},[57,157325,156],{"class":136},[57,157327,109994],{"class":81},[57,157329,168],{"class":140},[57,157331,54018],{"class":81},[57,157333,168],{"class":140},[57,157335,157336],{"class":74},"\"请输入身高:\"",[57,157338,259],{"class":140},[57,157340,157341,157343,157345,157347,157350,157352,157354,157357,157359,157362],{"class":59,"line":67},[57,157342,165],{"class":81},[57,157344,168],{"class":140},[57,157346,475],{"class":136},[57,157348,157349],{"class":74},"\"身高:",[57,157351,1312],{"class":81},[57,157353,25250],{"class":140},[57,157355,157356],{"class":136},":.2f",[57,157358,1362],{"class":81},[57,157360,157361],{"class":74},"米\"",[57,157363,238],{"class":140},[365,157365,157367],{"id":157366},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,157369,123489],{},[377,157371,157372,157375,157378,157381],{},[380,157373,157374],{},"输入商品单价。",[380,157376,157377],{},"输入购买数量。",[380,157379,157380],{},"输入折扣，例如 0.8 表示八折。",[380,157382,157383],{},"输出最终金额，保留两位小数。",[14,157385,10308],{},[49,157387,157389],{"className":122,"code":157388,"language":124,"meta":46,"style":46},"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",[28,157390,157391,157410,157429,157449,157453,157473,157477,157500,157521,157543],{"__ignoreMap":46},[57,157392,157393,157395,157397,157399,157401,157403,157405,157408],{"class":59,"line":60},[57,157394,146878],{"class":140},[57,157396,156],{"class":136},[57,157398,109994],{"class":81},[57,157400,168],{"class":140},[57,157402,54018],{"class":81},[57,157404,168],{"class":140},[57,157406,157407],{"class":74},"\"请输入商品单价:\"",[57,157409,259],{"class":140},[57,157411,157412,157414,157416,157418,157420,157422,157424,157427],{"class":59,"line":67},[57,157413,146888],{"class":140},[57,157415,156],{"class":136},[57,157417,2655],{"class":81},[57,157419,168],{"class":140},[57,157421,54018],{"class":81},[57,157423,168],{"class":140},[57,157425,157426],{"class":74},"\"请输入购买数量:\"",[57,157428,259],{"class":140},[57,157430,157431,157434,157436,157438,157440,157442,157444,157447],{"class":59,"line":144},[57,157432,157433],{"class":140},"discount ",[57,157435,156],{"class":136},[57,157437,109994],{"class":81},[57,157439,168],{"class":140},[57,157441,54018],{"class":81},[57,157443,168],{"class":140},[57,157445,157446],{"class":74},"\"请输入折扣:\"",[57,157448,259],{"class":140},[57,157450,157451],{"class":59,"line":150},[57,157452,2673],{"emptyLinePlaceholder":350},[57,157454,157455,157458,157460,157463,157465,157468,157470],{"class":59,"line":162},[57,157456,157457],{"class":140},"total ",[57,157459,156],{"class":136},[57,157461,157462],{"class":140}," price ",[57,157464,871],{"class":136},[57,157466,157467],{"class":140}," count ",[57,157469,871],{"class":136},[57,157471,157472],{"class":140}," discount\n",[57,157474,157475],{"class":59,"line":180},[57,157476,2673],{"emptyLinePlaceholder":350},[57,157478,157479,157481,157483,157485,157488,157490,157492,157494,157496,157498],{"class":59,"line":186},[57,157480,165],{"class":81},[57,157482,168],{"class":140},[57,157484,475],{"class":136},[57,157486,157487],{"class":74},"\"商品单价:",[57,157489,1312],{"class":81},[57,157491,80012],{"class":140},[57,157493,157356],{"class":136},[57,157495,1362],{"class":81},[57,157497,668],{"class":74},[57,157499,238],{"class":140},[57,157501,157502,157504,157506,157508,157511,157513,157515,157517,157519],{"class":59,"line":197},[57,157503,165],{"class":81},[57,157505,168],{"class":140},[57,157507,475],{"class":136},[57,157509,157510],{"class":74},"\"购买数量:",[57,157512,1312],{"class":81},[57,157514,84631],{"class":140},[57,157516,1362],{"class":81},[57,157518,668],{"class":74},[57,157520,238],{"class":140},[57,157522,157523,157525,157527,157529,157532,157534,157537,157539,157541],{"class":59,"line":241},[57,157524,165],{"class":81},[57,157526,168],{"class":140},[57,157528,475],{"class":136},[57,157530,157531],{"class":74},"\"折扣:",[57,157533,1312],{"class":81},[57,157535,157536],{"class":140},"discount",[57,157538,1362],{"class":81},[57,157540,668],{"class":74},[57,157542,238],{"class":140},[57,157544,157545,157547,157549,157551,157554,157556,157559,157561,157563,157565],{"class":59,"line":249},[57,157546,165],{"class":81},[57,157548,168],{"class":140},[57,157550,475],{"class":136},[57,157552,157553],{"class":74},"\"应付金额:",[57,157555,1312],{"class":81},[57,157557,157558],{"class":140},"total",[57,157560,157356],{"class":136},[57,157562,1362],{"class":81},[57,157564,157209],{"class":74},[57,157566,238],{"class":140},[365,157568,157570],{"id":157569},"_213-易错点","2.13 易错点",[377,157572,157573,157578,157584,157592,157595],{},[380,157574,157575,157577],{},[28,157576,157220],{}," 的结果是字符串，做运算前要转换。",[380,157579,157580,157581,28654],{},"字符串拼接时，数字要先 ",[28,157582,157583],{},"str()",[380,157585,157586,157588,157589,157591],{},[28,157587,156],{}," 是赋值，",[28,157590,3222],{}," 是比较。",[380,157593,157594],{},"Python 没有自增自减运算符。",[380,157596,157597],{},"浮点数计算可能有精度误差：",[49,157599,157601],{"className":122,"code":157600,"language":124,"meta":46,"style":46},"print(0.1 + 0.2)\n",[28,157602,157603],{"__ignoreMap":46},[57,157604,157605,157607,157609,157611,157613,157616],{"class":59,"line":60},[57,157606,165],{"class":81},[57,157608,168],{"class":140},[57,157610,86407],{"class":81},[57,157612,45763],{"class":136},[57,157614,157615],{"class":81}," 0.2",[57,157617,238],{"class":140},[14,157619,157620,157621,157624],{},"金额计算如果要求严格，可以后续学习 ",[28,157622,157623],{},"decimal"," 模块。",[365,157626,157628],{"id":157627},"_214-本章练习","2.14 本章练习",[377,157630,157631,157634,157637,157640,157643],{},[380,157632,157633],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[380,157635,157636],{},"输入圆的半径，计算面积，保留两位小数。",[380,157638,157639],{},"输入工资和奖金，计算总收入。",[380,157641,157642],{},"输入摄氏温度，转换为华氏温度。",[380,157644,157645],{},"写一个 BMI 计算程序：",[49,157647,157650],{"className":157648,"code":157649,"language":5460,"meta":46},[5458],"BMI = 体重kg \u002F 身高m ** 2\n",[28,157651,157649],{"__ignoreMap":46},[342,157653,157654],{},"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":46,"searchDepth":67,"depth":67,"links":157656},[157657,157658,157659,157660,157661,157662,157663,157669,157670,157671,157676,157677,157678,157679],{"id":155218,"depth":67,"text":155219},{"id":155327,"depth":67,"text":155328},{"id":155498,"depth":67,"text":155499},{"id":155575,"depth":67,"text":155576},{"id":50928,"depth":67,"text":50929},{"id":155881,"depth":67,"text":155882},{"id":156107,"depth":67,"text":156108,"children":157664},[157665,157666,157667,157668],{"id":156111,"depth":144,"text":156112},{"id":156305,"depth":144,"text":156306},{"id":156393,"depth":144,"text":156394},{"id":156499,"depth":144,"text":156500},{"id":156608,"depth":67,"text":156609},{"id":156766,"depth":67,"text":156767},{"id":156831,"depth":67,"text":156832,"children":157672},[157673,157674,157675],{"id":156835,"depth":144,"text":156836},{"id":156980,"depth":144,"text":156981},{"id":157083,"depth":144,"text":157084},{"id":157214,"depth":67,"text":157215},{"id":157366,"depth":67,"text":157367},{"id":157569,"depth":67,"text":157570},{"id":157627,"depth":67,"text":157628},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155210,"description":347},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157686,"title":157687,"body":157688,"description":347,"extension":348,"meta":159324,"navigation":350,"path":159325,"seo":159326,"stem":159327,"__hash__":159328},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157689,"toc":159305},[157690,157693,157697,157700,157715,157718,157746,157750,157800,157802,157818,157821,157847,157850,157854,157921,157924,157940,157944,157947,158065,158068,158075,158124,158130,158134,158137,158250,158253,158257,158261,158264,158314,158318,158321,158371,158375,158378,158416,158420,158423,158469,158472,158507,158511,158516,158519,158565,158567,158634,158638,158644,158755,158764,158768,158770,158781,158783,158949,158953,158955,158969,158971,159185,159189,159208,159225,159228,159274,159278,159302],[10,157691,157687],{"id":157692},"_3-判断语句",[365,157694,157696],{"id":157695},"_31-布尔值","3.1 布尔值",[14,157698,157699],{},"判断语句依赖布尔值：",[49,157701,157703],{"className":122,"code":157702,"language":124,"meta":46,"style":46},"True\nFalse\n",[28,157704,157705,157710],{"__ignoreMap":46},[57,157706,157707],{"class":59,"line":60},[57,157708,157709],{"class":81},"True\n",[57,157711,157712],{"class":59,"line":67},[57,157713,157714],{"class":81},"False\n",[14,157716,157717],{},"比较表达式会产生布尔值：",[49,157719,157721],{"className":122,"code":157720,"language":124,"meta":46,"style":46},"age = 18\nprint(age >= 18)  # True\n",[28,157722,157723,157731],{"__ignoreMap":46},[57,157724,157725,157727,157729],{"class":59,"line":60},[57,157726,146743],{"class":140},[57,157728,156],{"class":136},[57,157730,146748],{"class":81},[57,157732,157733,157735,157737,157739,157741,157743],{"class":59,"line":67},[57,157734,165],{"class":81},[57,157736,155965],{"class":140},[57,157738,1984],{"class":136},[57,157740,156482],{"class":81},[57,157742,46005],{"class":140},[57,157744,157745],{"class":63},"# True\n",[365,157747,157749],{"id":157748},"_32-if基础语法","3.2 if基础语法",[49,157751,157753],{"className":122,"code":157752,"language":124,"meta":46,"style":46},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[28,157754,157755,157773,157777,157789],{"__ignoreMap":46},[57,157756,157757,157759,157761,157763,157765,157767,157769,157771],{"class":59,"line":60},[57,157758,146743],{"class":140},[57,157760,156],{"class":136},[57,157762,2655],{"class":81},[57,157764,168],{"class":140},[57,157766,54018],{"class":81},[57,157768,168],{"class":140},[57,157770,152591],{"class":74},[57,157772,259],{"class":140},[57,157774,157775],{"class":59,"line":67},[57,157776,2673],{"emptyLinePlaceholder":350},[57,157778,157779,157781,157783,157785,157787],{"class":59,"line":144},[57,157780,1813],{"class":136},[57,157782,15979],{"class":140},[57,157784,1984],{"class":136},[57,157786,156482],{"class":81},[57,157788,4012],{"class":140},[57,157790,157791,157793,157795,157798],{"class":59,"line":150},[57,157792,31496],{"class":81},[57,157794,168],{"class":140},[57,157796,157797],{"class":74},"\"可以进入网吧\"",[57,157799,238],{"class":140},[14,157801,9298],{},[377,157803,157804,157809,157812,157815],{},[380,157805,157806,157808],{},[28,157807,1813],{}," 后面是条件表达式。",[380,157810,157811],{},"条件后面必须写冒号。",[380,157813,157814],{},"条件成立时执行缩进代码块。",[380,157816,157817],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,157819,157820],{},"错误示例：",[49,157822,157824],{"className":122,"code":157823,"language":124,"meta":46,"style":46},"if age >= 18\n    print(\"可以进入\")\n",[28,157825,157826,157836],{"__ignoreMap":46},[57,157827,157828,157830,157832,157834],{"class":59,"line":60},[57,157829,1813],{"class":136},[57,157831,15979],{"class":140},[57,157833,1984],{"class":136},[57,157835,146748],{"class":81},[57,157837,157838,157840,157842,157845],{"class":59,"line":67},[57,157839,31496],{"class":81},[57,157841,168],{"class":140},[57,157843,157844],{"class":74},"\"可以进入\"",[57,157846,238],{"class":140},[14,157848,157849],{},"缺少冒号。",[365,157851,157853],{"id":157852},"_33-if-else","3.3 if else",[49,157855,157857],{"className":122,"code":157856,"language":124,"meta":46,"style":46},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[28,157858,157859,157877,157881,157893,157904,157910],{"__ignoreMap":46},[57,157860,157861,157863,157865,157867,157869,157871,157873,157875],{"class":59,"line":60},[57,157862,146743],{"class":140},[57,157864,156],{"class":136},[57,157866,2655],{"class":81},[57,157868,168],{"class":140},[57,157870,54018],{"class":81},[57,157872,168],{"class":140},[57,157874,152591],{"class":74},[57,157876,259],{"class":140},[57,157878,157879],{"class":59,"line":67},[57,157880,2673],{"emptyLinePlaceholder":350},[57,157882,157883,157885,157887,157889,157891],{"class":59,"line":144},[57,157884,1813],{"class":136},[57,157886,15979],{"class":140},[57,157888,1984],{"class":136},[57,157890,156482],{"class":81},[57,157892,4012],{"class":140},[57,157894,157895,157897,157899,157902],{"class":59,"line":150},[57,157896,31496],{"class":81},[57,157898,168],{"class":140},[57,157900,157901],{"class":74},"\"成年人\"",[57,157903,238],{"class":140},[57,157905,157906,157908],{"class":59,"line":162},[57,157907,232],{"class":136},[57,157909,4012],{"class":140},[57,157911,157912,157914,157916,157919],{"class":59,"line":180},[57,157913,31496],{"class":81},[57,157915,168],{"class":140},[57,157917,157918],{"class":74},"\"未成年人\"",[57,157920,238],{"class":140},[14,157922,157923],{},"执行逻辑：",[377,157925,157926,157932,157937],{},[380,157927,157928,157929,157931],{},"条件成立，执行 ",[28,157930,1813],{}," 代码块。",[380,157933,157934,157935,157931],{},"条件不成立，执行 ",[28,157936,232],{},[380,157938,157939],{},"两个代码块只会执行其中一个。",[365,157941,157943],{"id":157942},"_34-if-elif-else","3.4 if elif else",[14,157945,157946],{},"多条件判断：",[49,157948,157950],{"className":122,"code":157949,"language":124,"meta":46,"style":46},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[28,157951,157952,157970,157974,157988,157999,158013,158024,158037,158048,158054],{"__ignoreMap":46},[57,157953,157954,157956,157958,157960,157962,157964,157966,157968],{"class":59,"line":60},[57,157955,155555],{"class":140},[57,157957,156],{"class":136},[57,157959,2655],{"class":81},[57,157961,168],{"class":140},[57,157963,54018],{"class":81},[57,157965,168],{"class":140},[57,157967,152606],{"class":74},[57,157969,259],{"class":140},[57,157971,157972],{"class":59,"line":67},[57,157973,2673],{"emptyLinePlaceholder":350},[57,157975,157976,157978,157981,157983,157986],{"class":59,"line":144},[57,157977,1813],{"class":136},[57,157979,157980],{"class":140}," score ",[57,157982,1984],{"class":136},[57,157984,157985],{"class":81}," 90",[57,157987,4012],{"class":140},[57,157989,157990,157992,157994,157997],{"class":59,"line":150},[57,157991,31496],{"class":81},[57,157993,168],{"class":140},[57,157995,157996],{"class":74},"\"优秀\"",[57,157998,238],{"class":140},[57,158000,158001,158004,158006,158008,158011],{"class":59,"line":162},[57,158002,158003],{"class":136},"elif",[57,158005,157980],{"class":140},[57,158007,1984],{"class":136},[57,158009,158010],{"class":81}," 80",[57,158012,4012],{"class":140},[57,158014,158015,158017,158019,158022],{"class":59,"line":180},[57,158016,31496],{"class":81},[57,158018,168],{"class":140},[57,158020,158021],{"class":74},"\"良好\"",[57,158023,238],{"class":140},[57,158025,158026,158028,158030,158032,158035],{"class":59,"line":186},[57,158027,158003],{"class":136},[57,158029,157980],{"class":140},[57,158031,1984],{"class":136},[57,158033,158034],{"class":81}," 60",[57,158036,4012],{"class":140},[57,158038,158039,158041,158043,158046],{"class":59,"line":197},[57,158040,31496],{"class":81},[57,158042,168],{"class":140},[57,158044,158045],{"class":74},"\"及格\"",[57,158047,238],{"class":140},[57,158049,158050,158052],{"class":59,"line":241},[57,158051,232],{"class":136},[57,158053,4012],{"class":140},[57,158055,158056,158058,158060,158063],{"class":59,"line":249},[57,158057,31496],{"class":81},[57,158059,168],{"class":140},[57,158061,158062],{"class":74},"\"不及格\"",[57,158064,238],{"class":140},[14,158066,158067],{},"注意判断顺序很重要。",[14,158069,158070,158071,158074],{},"如果把 ",[28,158072,158073],{},"score >= 60"," 放在最前面：",[49,158076,158078],{"className":122,"code":158077,"language":124,"meta":46,"style":46},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[28,158079,158080,158092,158102,158114],{"__ignoreMap":46},[57,158081,158082,158084,158086,158088,158090],{"class":59,"line":60},[57,158083,1813],{"class":136},[57,158085,157980],{"class":140},[57,158087,1984],{"class":136},[57,158089,158034],{"class":81},[57,158091,4012],{"class":140},[57,158093,158094,158096,158098,158100],{"class":59,"line":67},[57,158095,31496],{"class":81},[57,158097,168],{"class":140},[57,158099,158045],{"class":74},[57,158101,238],{"class":140},[57,158103,158104,158106,158108,158110,158112],{"class":59,"line":144},[57,158105,158003],{"class":136},[57,158107,157980],{"class":140},[57,158109,1984],{"class":136},[57,158111,157985],{"class":81},[57,158113,4012],{"class":140},[57,158115,158116,158118,158120,158122],{"class":59,"line":150},[57,158117,31496],{"class":81},[57,158119,168],{"class":140},[57,158121,157996],{"class":74},[57,158123,238],{"class":140},[14,158125,158126,158127,158129],{},"成绩 95 会先满足 ",[28,158128,158073],{},"，后面的优秀分支就不会执行。",[365,158131,158133],{"id":158132},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,158135,158136],{},"嵌套判断就是在一个判断内部再写判断。",[49,158138,158140],{"className":122,"code":158139,"language":124,"meta":46,"style":46},"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",[28,158141,158142,158160,158175,158179,158191,158205,158215,158222,158233,158239],{"__ignoreMap":46},[57,158143,158144,158146,158148,158150,158152,158154,158156,158158],{"class":59,"line":60},[57,158145,146743],{"class":140},[57,158147,156],{"class":136},[57,158149,2655],{"class":81},[57,158151,168],{"class":140},[57,158153,54018],{"class":81},[57,158155,168],{"class":140},[57,158157,152591],{"class":74},[57,158159,259],{"class":140},[57,158161,158162,158164,158166,158168,158170,158173],{"class":59,"line":67},[57,158163,156558],{"class":140},[57,158165,156],{"class":136},[57,158167,60802],{"class":81},[57,158169,168],{"class":140},[57,158171,158172],{"class":74},"\"是否有票(y\u002Fn):\"",[57,158174,238],{"class":140},[57,158176,158177],{"class":59,"line":144},[57,158178,2673],{"emptyLinePlaceholder":350},[57,158180,158181,158183,158185,158187,158189],{"class":59,"line":150},[57,158182,1813],{"class":136},[57,158184,15979],{"class":140},[57,158186,1984],{"class":136},[57,158188,156482],{"class":81},[57,158190,4012],{"class":140},[57,158192,158193,158195,158198,158200,158203],{"class":59,"line":162},[57,158194,3374],{"class":136},[57,158196,158197],{"class":140}," has_ticket ",[57,158199,3222],{"class":136},[57,158201,158202],{"class":74}," \"y\"",[57,158204,4012],{"class":140},[57,158206,158207,158209,158211,158213],{"class":59,"line":180},[57,158208,32648],{"class":81},[57,158210,168],{"class":140},[57,158212,157844],{"class":74},[57,158214,238],{"class":140},[57,158216,158217,158220],{"class":59,"line":186},[57,158218,158219],{"class":136},"    else",[57,158221,4012],{"class":140},[57,158223,158224,158226,158228,158231],{"class":59,"line":197},[57,158225,32648],{"class":81},[57,158227,168],{"class":140},[57,158229,158230],{"class":74},"\"请先买票\"",[57,158232,238],{"class":140},[57,158234,158235,158237],{"class":59,"line":241},[57,158236,232],{"class":136},[57,158238,4012],{"class":140},[57,158240,158241,158243,158245,158248],{"class":59,"line":249},[57,158242,31496],{"class":81},[57,158244,168],{"class":140},[57,158246,158247],{"class":74},"\"未成年人禁止进入\"",[57,158249,238],{"class":140},[14,158251,158252],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[365,158254,158256],{"id":158255},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[394,158258,158260],{"id":158259},"_361-and","3.6.1 and",[14,158262,158263],{},"两个条件都成立才成立。",[49,158265,158267],{"className":122,"code":158266,"language":124,"meta":46,"style":46},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[28,158268,158269,158277,158285,158289,158304],{"__ignoreMap":46},[57,158270,158271,158273,158275],{"class":59,"line":60},[57,158272,146743],{"class":140},[57,158274,156],{"class":136},[57,158276,88262],{"class":81},[57,158278,158279,158281,158283],{"class":59,"line":67},[57,158280,156558],{"class":140},[57,158282,156],{"class":136},[57,158284,153796],{"class":81},[57,158286,158287],{"class":59,"line":144},[57,158288,2673],{"emptyLinePlaceholder":350},[57,158290,158291,158293,158295,158297,158299,158301],{"class":59,"line":150},[57,158292,1813],{"class":136},[57,158294,15979],{"class":140},[57,158296,1984],{"class":136},[57,158298,156482],{"class":81},[57,158300,120626],{"class":136},[57,158302,158303],{"class":140}," has_ticket:\n",[57,158305,158306,158308,158310,158312],{"class":59,"line":162},[57,158307,31496],{"class":81},[57,158309,168],{"class":140},[57,158311,157844],{"class":74},[57,158313,238],{"class":140},[394,158315,158317],{"id":158316},"_362-or","3.6.2 or",[14,158319,158320],{},"只要一个条件成立就成立。",[49,158322,158324],{"className":122,"code":158323,"language":124,"meta":46,"style":46},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[28,158325,158326,158335,158344,158348,158360],{"__ignoreMap":46},[57,158327,158328,158331,158333],{"class":59,"line":60},[57,158329,158330],{"class":140},"is_vip ",[57,158332,156],{"class":136},[57,158334,126004],{"class":81},[57,158336,158337,158340,158342],{"class":59,"line":67},[57,158338,158339],{"class":140},"coupon ",[57,158341,156],{"class":136},[57,158343,153796],{"class":81},[57,158345,158346],{"class":59,"line":144},[57,158347,2673],{"emptyLinePlaceholder":350},[57,158349,158350,158352,158355,158357],{"class":59,"line":150},[57,158351,1813],{"class":136},[57,158353,158354],{"class":140}," is_vip ",[57,158356,115287],{"class":136},[57,158358,158359],{"class":140}," coupon:\n",[57,158361,158362,158364,158366,158369],{"class":59,"line":162},[57,158363,31496],{"class":81},[57,158365,168],{"class":140},[57,158367,158368],{"class":74},"\"可以享受优惠\"",[57,158370,238],{"class":140},[394,158372,158374],{"id":158373},"_363-not","3.6.3 not",[14,158376,158377],{},"取反。",[49,158379,158381],{"className":122,"code":158380,"language":124,"meta":46,"style":46},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[28,158382,158383,158392,158396,158405],{"__ignoreMap":46},[57,158384,158385,158388,158390],{"class":59,"line":60},[57,158386,158387],{"class":140},"is_closed ",[57,158389,156],{"class":136},[57,158391,126004],{"class":81},[57,158393,158394],{"class":59,"line":67},[57,158395,2673],{"emptyLinePlaceholder":350},[57,158397,158398,158400,158402],{"class":59,"line":144},[57,158399,1813],{"class":136},[57,158401,39127],{"class":136},[57,158403,158404],{"class":140}," is_closed:\n",[57,158406,158407,158409,158411,158414],{"class":59,"line":150},[57,158408,31496],{"class":81},[57,158410,168],{"class":140},[57,158412,158413],{"class":74},"\"店铺营业中\"",[57,158415,238],{"class":140},[365,158417,158419],{"id":158418},"_37-链式比较","3.7 链式比较",[14,158421,158422],{},"Python 支持链式比较：",[49,158424,158426],{"className":122,"code":158425,"language":124,"meta":46,"style":46},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[28,158427,158428,158437,158441,158458],{"__ignoreMap":46},[57,158429,158430,158432,158434],{"class":59,"line":60},[57,158431,155555],{"class":140},[57,158433,156],{"class":136},[57,158435,158436],{"class":81}," 85\n",[57,158438,158439],{"class":59,"line":67},[57,158440,2673],{"emptyLinePlaceholder":350},[57,158442,158443,158445,158447,158450,158452,158454,158456],{"class":59,"line":144},[57,158444,1813],{"class":136},[57,158446,4366],{"class":81},[57,158448,158449],{"class":136}," \u003C=",[57,158451,157980],{"class":140},[57,158453,1870],{"class":136},[57,158455,6027],{"class":81},[57,158457,4012],{"class":140},[57,158459,158460,158462,158464,158467],{"class":59,"line":150},[57,158461,31496],{"class":81},[57,158463,168],{"class":140},[57,158465,158466],{"class":74},"\"成绩合法\"",[57,158468,238],{"class":140},[14,158470,158471],{},"等价于：",[49,158473,158475],{"className":122,"code":158474,"language":124,"meta":46,"style":46},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[28,158476,158477,158497],{"__ignoreMap":46},[57,158478,158479,158481,158483,158485,158487,158489,158491,158493,158495],{"class":59,"line":60},[57,158480,1813],{"class":136},[57,158482,157980],{"class":140},[57,158484,1984],{"class":136},[57,158486,4366],{"class":81},[57,158488,120626],{"class":136},[57,158490,157980],{"class":140},[57,158492,1870],{"class":136},[57,158494,6027],{"class":81},[57,158496,4012],{"class":140},[57,158498,158499,158501,158503,158505],{"class":59,"line":67},[57,158500,31496],{"class":81},[57,158502,168],{"class":140},[57,158504,158466],{"class":74},[57,158506,238],{"class":140},[365,158508,158510],{"id":158509},"_38-真值和假值","3.8 真值和假值",[14,158512,116664,158513,158515],{},[28,158514,1813],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,158517,158518],{},"假值：",[49,158520,158522],{"className":122,"code":158521,"language":124,"meta":46,"style":46},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[28,158523,158524,158528,158533,158537,158541,158546,158550,158554,158559],{"__ignoreMap":46},[57,158525,158526],{"class":59,"line":60},[57,158527,157714],{"class":81},[57,158529,158530],{"class":59,"line":67},[57,158531,158532],{"class":81},"None\n",[57,158534,158535],{"class":59,"line":144},[57,158536,3358],{"class":81},[57,158538,158539],{"class":59,"line":150},[57,158540,32539],{"class":81},[57,158542,158543],{"class":59,"line":162},[57,158544,158545],{"class":74},"\"\"\n",[57,158547,158548],{"class":59,"line":180},[57,158549,32554],{"class":140},[57,158551,158552],{"class":59,"line":186},[57,158553,2249],{"class":140},[57,158555,158556],{"class":59,"line":197},[57,158557,158558],{"class":140},"{}\n",[57,158560,158561,158563],{"class":59,"line":241},[57,158562,155487],{"class":81},[57,158564,2249],{"class":140},[14,158566,15407],{},[49,158568,158570],{"className":122,"code":158569,"language":124,"meta":46,"style":46},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[28,158571,158572,158586,158590,158597,158617,158623],{"__ignoreMap":46},[57,158573,158574,158576,158578,158580,158582,158584],{"class":59,"line":60},[57,158575,146733],{"class":140},[57,158577,156],{"class":136},[57,158579,60802],{"class":81},[57,158581,168],{"class":140},[57,158583,152576],{"class":74},[57,158585,238],{"class":140},[57,158587,158588],{"class":59,"line":67},[57,158589,2673],{"emptyLinePlaceholder":350},[57,158591,158592,158594],{"class":59,"line":144},[57,158593,1813],{"class":136},[57,158595,158596],{"class":140}," name:\n",[57,158598,158599,158601,158603,158605,158607,158609,158611,158613,158615],{"class":59,"line":150},[57,158600,31496],{"class":81},[57,158602,168],{"class":140},[57,158604,475],{"class":136},[57,158606,157251],{"class":74},[57,158608,1312],{"class":81},[57,158610,80007],{"class":140},[57,158612,1362],{"class":81},[57,158614,668],{"class":74},[57,158616,238],{"class":140},[57,158618,158619,158621],{"class":59,"line":162},[57,158620,232],{"class":136},[57,158622,4012],{"class":140},[57,158624,158625,158627,158629,158632],{"class":59,"line":180},[57,158626,31496],{"class":81},[57,158628,168],{"class":140},[57,158630,158631],{"class":74},"\"姓名不能为空\"",[57,158633,238],{"class":140},[365,158635,158637],{"id":158636},"_39-match语句","3.9 match语句",[14,158639,158640,158641,158643],{},"Python 3.10 开始支持 ",[28,158642,71462],{},"。它适合处理固定选项。",[49,158645,158647],{"className":122,"code":158646,"language":124,"meta":46,"style":46},"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",[28,158648,158649,158665,158669,158676,158686,158697,158706,158717,158726,158737,158744],{"__ignoreMap":46},[57,158650,158651,158654,158656,158658,158660,158663],{"class":59,"line":60},[57,158652,158653],{"class":140},"command ",[57,158655,156],{"class":136},[57,158657,60802],{"class":81},[57,158659,168],{"class":140},[57,158661,158662],{"class":74},"\"请输入命令:\"",[57,158664,238],{"class":140},[57,158666,158667],{"class":59,"line":67},[57,158668,2673],{"emptyLinePlaceholder":350},[57,158670,158671,158673],{"class":59,"line":144},[57,158672,71462],{"class":136},[57,158674,158675],{"class":140}," command:\n",[57,158677,158678,158681,158684],{"class":59,"line":150},[57,158679,158680],{"class":136},"    case",[57,158682,158683],{"class":74}," \"start\"",[57,158685,4012],{"class":140},[57,158687,158688,158690,158692,158695],{"class":59,"line":162},[57,158689,32648],{"class":81},[57,158691,168],{"class":140},[57,158693,158694],{"class":74},"\"启动\"",[57,158696,238],{"class":140},[57,158698,158699,158701,158704],{"class":59,"line":180},[57,158700,158680],{"class":136},[57,158702,158703],{"class":74}," \"stop\"",[57,158705,4012],{"class":140},[57,158707,158708,158710,158712,158715],{"class":59,"line":186},[57,158709,32648],{"class":81},[57,158711,168],{"class":140},[57,158713,158714],{"class":74},"\"停止\"",[57,158716,238],{"class":140},[57,158718,158719,158721,158724],{"class":59,"line":197},[57,158720,158680],{"class":136},[57,158722,158723],{"class":74}," \"restart\"",[57,158725,4012],{"class":140},[57,158727,158728,158730,158732,158735],{"class":59,"line":241},[57,158729,32648],{"class":81},[57,158731,168],{"class":140},[57,158733,158734],{"class":74},"\"重启\"",[57,158736,238],{"class":140},[57,158738,158739,158741],{"class":59,"line":249},[57,158740,158680],{"class":136},[57,158742,158743],{"class":140}," _:\n",[57,158745,158746,158748,158750,158753],{"class":59,"line":262},[57,158747,32648],{"class":81},[57,158749,168],{"class":140},[57,158751,158752],{"class":74},"\"未知命令\"",[57,158754,238],{"class":140},[14,158756,158757,158758,158760,158761,158763],{},"入门阶段掌握 ",[28,158759,154855],{}," 更重要，",[28,158762,71462],{}," 可以作为补充。",[365,158765,158767],{"id":158766},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,158769,123489],{},[377,158771,158772,158775,158778],{},[380,158773,158774],{},"输入成绩。",[380,158776,158777],{},"判断成绩是否合法。",[380,158779,158780],{},"输出等级。",[14,158782,10308],{},[49,158784,158786],{"className":122,"code":158785,"language":124,"meta":46,"style":46},"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",[28,158787,158788,158806,158810,158828,158839,158851,158862,158874,158885,158898,158909,158921,158932,158938],{"__ignoreMap":46},[57,158789,158790,158792,158794,158796,158798,158800,158802,158804],{"class":59,"line":60},[57,158791,155555],{"class":140},[57,158793,156],{"class":136},[57,158795,109994],{"class":81},[57,158797,168],{"class":140},[57,158799,54018],{"class":81},[57,158801,168],{"class":140},[57,158803,152606],{"class":74},[57,158805,259],{"class":140},[57,158807,158808],{"class":59,"line":67},[57,158809,2673],{"emptyLinePlaceholder":350},[57,158811,158812,158814,158816,158818,158820,158822,158824,158826],{"class":59,"line":144},[57,158813,1813],{"class":136},[57,158815,39127],{"class":136},[57,158817,4366],{"class":81},[57,158819,158449],{"class":136},[57,158821,157980],{"class":140},[57,158823,1870],{"class":136},[57,158825,6027],{"class":81},[57,158827,4012],{"class":140},[57,158829,158830,158832,158834,158837],{"class":59,"line":150},[57,158831,31496],{"class":81},[57,158833,168],{"class":140},[57,158835,158836],{"class":74},"\"成绩不合法\"",[57,158838,238],{"class":140},[57,158840,158841,158843,158845,158847,158849],{"class":59,"line":162},[57,158842,158003],{"class":136},[57,158844,157980],{"class":140},[57,158846,1984],{"class":136},[57,158848,157985],{"class":81},[57,158850,4012],{"class":140},[57,158852,158853,158855,158857,158860],{"class":59,"line":180},[57,158854,31496],{"class":81},[57,158856,168],{"class":140},[57,158858,158859],{"class":74},"\"等级:A\"",[57,158861,238],{"class":140},[57,158863,158864,158866,158868,158870,158872],{"class":59,"line":186},[57,158865,158003],{"class":136},[57,158867,157980],{"class":140},[57,158869,1984],{"class":136},[57,158871,158010],{"class":81},[57,158873,4012],{"class":140},[57,158875,158876,158878,158880,158883],{"class":59,"line":197},[57,158877,31496],{"class":81},[57,158879,168],{"class":140},[57,158881,158882],{"class":74},"\"等级:B\"",[57,158884,238],{"class":140},[57,158886,158887,158889,158891,158893,158896],{"class":59,"line":241},[57,158888,158003],{"class":136},[57,158890,157980],{"class":140},[57,158892,1984],{"class":136},[57,158894,158895],{"class":81}," 70",[57,158897,4012],{"class":140},[57,158899,158900,158902,158904,158907],{"class":59,"line":249},[57,158901,31496],{"class":81},[57,158903,168],{"class":140},[57,158905,158906],{"class":74},"\"等级:C\"",[57,158908,238],{"class":140},[57,158910,158911,158913,158915,158917,158919],{"class":59,"line":262},[57,158912,158003],{"class":136},[57,158914,157980],{"class":140},[57,158916,1984],{"class":136},[57,158918,158034],{"class":81},[57,158920,4012],{"class":140},[57,158922,158923,158925,158927,158930],{"class":59,"line":281},[57,158924,31496],{"class":81},[57,158926,168],{"class":140},[57,158928,158929],{"class":74},"\"等级:D\"",[57,158931,238],{"class":140},[57,158933,158934,158936],{"class":59,"line":287},[57,158935,232],{"class":136},[57,158937,4012],{"class":140},[57,158939,158940,158942,158944,158947],{"class":59,"line":298},[57,158941,31496],{"class":81},[57,158943,168],{"class":140},[57,158945,158946],{"class":74},"\"等级:E\"",[57,158948,238],{"class":140},[365,158950,158952],{"id":158951},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,158954,123489],{},[377,158956,158957,158960,158963,158966],{},[380,158958,158959],{},"输入消费金额。",[380,158961,158962],{},"输入会员等级，普通、银卡、金卡。",[380,158964,158965],{},"普通不打折，银卡 9 折，金卡 8 折。",[380,158967,158968],{},"满 500 再减 50。",[14,158970,10308],{},[49,158972,158974],{"className":122,"code":158973,"language":124,"meta":46,"style":46},"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",[28,158975,158976,158996,159012,159016,159024,159028,159042,159052,159065,159074,159087,159095,159101,159112,159116,159130,159134,159148,159158,159162],{"__ignoreMap":46},[57,158977,158978,158981,158983,158985,158987,158989,158991,158994],{"class":59,"line":60},[57,158979,158980],{"class":140},"amount ",[57,158982,156],{"class":136},[57,158984,109994],{"class":81},[57,158986,168],{"class":140},[57,158988,54018],{"class":81},[57,158990,168],{"class":140},[57,158992,158993],{"class":74},"\"请输入消费金额:\"",[57,158995,259],{"class":140},[57,158997,158998,159001,159003,159005,159007,159010],{"class":59,"line":67},[57,158999,159000],{"class":140},"level ",[57,159002,156],{"class":136},[57,159004,60802],{"class":81},[57,159006,168],{"class":140},[57,159008,159009],{"class":74},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[57,159011,238],{"class":140},[57,159013,159014],{"class":59,"line":144},[57,159015,2673],{"emptyLinePlaceholder":350},[57,159017,159018,159020,159022],{"class":59,"line":150},[57,159019,157433],{"class":140},[57,159021,156],{"class":136},[57,159023,55896],{"class":81},[57,159025,159026],{"class":59,"line":162},[57,159027,2673],{"emptyLinePlaceholder":350},[57,159029,159030,159032,159035,159037,159040],{"class":59,"line":180},[57,159031,1813],{"class":136},[57,159033,159034],{"class":140}," level ",[57,159036,3222],{"class":136},[57,159038,159039],{"class":74}," \"银卡\"",[57,159041,4012],{"class":140},[57,159043,159044,159047,159049],{"class":59,"line":186},[57,159045,159046],{"class":140},"    discount ",[57,159048,156],{"class":136},[57,159050,159051],{"class":81}," 0.9\n",[57,159053,159054,159056,159058,159060,159063],{"class":59,"line":197},[57,159055,158003],{"class":136},[57,159057,159034],{"class":140},[57,159059,3222],{"class":136},[57,159061,159062],{"class":74}," \"金卡\"",[57,159064,4012],{"class":140},[57,159066,159067,159069,159071],{"class":59,"line":241},[57,159068,159046],{"class":140},[57,159070,156],{"class":136},[57,159072,159073],{"class":81}," 0.8\n",[57,159075,159076,159078,159080,159082,159085],{"class":59,"line":249},[57,159077,158003],{"class":136},[57,159079,159034],{"class":140},[57,159081,3222],{"class":136},[57,159083,159084],{"class":74}," \"普通\"",[57,159086,4012],{"class":140},[57,159088,159089,159091,159093],{"class":59,"line":262},[57,159090,159046],{"class":140},[57,159092,156],{"class":136},[57,159094,55896],{"class":81},[57,159096,159097,159099],{"class":59,"line":281},[57,159098,232],{"class":136},[57,159100,4012],{"class":140},[57,159102,159103,159105,159107,159110],{"class":59,"line":287},[57,159104,31496],{"class":81},[57,159106,168],{"class":140},[57,159108,159109],{"class":74},"\"会员等级输入错误，按普通会员计算\"",[57,159111,238],{"class":140},[57,159113,159114],{"class":59,"line":298},[57,159115,2673],{"emptyLinePlaceholder":350},[57,159117,159118,159121,159123,159126,159128],{"class":59,"line":311},[57,159119,159120],{"class":140},"pay ",[57,159122,156],{"class":136},[57,159124,159125],{"class":140}," amount ",[57,159127,871],{"class":136},[57,159129,157472],{"class":140},[57,159131,159132],{"class":59,"line":322},[57,159133,2673],{"emptyLinePlaceholder":350},[57,159135,159136,159138,159141,159143,159146],{"class":59,"line":1929},[57,159137,1813],{"class":136},[57,159139,159140],{"class":140}," pay ",[57,159142,1984],{"class":136},[57,159144,159145],{"class":81}," 500",[57,159147,4012],{"class":140},[57,159149,159150,159153,159155],{"class":59,"line":1950},[57,159151,159152],{"class":140},"    pay ",[57,159154,150449],{"class":136},[57,159156,159157],{"class":81}," 50\n",[57,159159,159160],{"class":59,"line":1955},[57,159161,2673],{"emptyLinePlaceholder":350},[57,159163,159164,159166,159168,159170,159172,159174,159177,159179,159181,159183],{"class":59,"line":1969},[57,159165,165],{"class":81},[57,159167,168],{"class":140},[57,159169,475],{"class":136},[57,159171,157553],{"class":74},[57,159173,1312],{"class":81},[57,159175,159176],{"class":140},"pay",[57,159178,157356],{"class":136},[57,159180,1362],{"class":81},[57,159182,157209],{"class":74},[57,159184,238],{"class":140},[365,159186,159188],{"id":159187},"_312-易错点","3.12 易错点",[377,159190,159191,159194,159197,159200,159205],{},[380,159192,159193],{},"冒号不能漏。",[380,159195,159196],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[380,159198,159199],{},"多分支判断要注意顺序。",[380,159201,159202,159203,28654],{},"判断相等用 ",[28,159204,3222],{},[380,159206,159207],{},"字符串比较区分大小写：",[49,159209,159211],{"className":122,"code":159210,"language":124,"meta":46,"style":46},"\"Y\" == \"y\"  # False\n",[28,159212,159213],{"__ignoreMap":46},[57,159214,159215,159218,159220,159222],{"class":59,"line":60},[57,159216,159217],{"class":74},"\"Y\"",[57,159219,101756],{"class":136},[57,159221,158202],{"class":74},[57,159223,159224],{"class":63},"  # False\n",[14,159226,159227],{},"可转换后再判断：",[49,159229,159231],{"className":122,"code":159230,"language":124,"meta":46,"style":46},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[28,159232,159233,159250,159263],{"__ignoreMap":46},[57,159234,159235,159238,159240,159242,159244,159247],{"class":59,"line":60},[57,159236,159237],{"class":140},"answer ",[57,159239,156],{"class":136},[57,159241,60802],{"class":81},[57,159243,168],{"class":140},[57,159245,159246],{"class":74},"\"是否继续(y\u002Fn):\"",[57,159248,159249],{"class":140},").lower()\n",[57,159251,159252,159254,159257,159259,159261],{"class":59,"line":67},[57,159253,1813],{"class":136},[57,159255,159256],{"class":140}," answer ",[57,159258,3222],{"class":136},[57,159260,158202],{"class":74},[57,159262,4012],{"class":140},[57,159264,159265,159267,159269,159272],{"class":59,"line":144},[57,159266,31496],{"class":81},[57,159268,168],{"class":140},[57,159270,159271],{"class":74},"\"继续\"",[57,159273,238],{"class":140},[365,159275,159277],{"id":159276},"_313-本章练习","3.13 本章练习",[377,159279,159280,159283,159286,159289,159299],{},[380,159281,159282],{},"输入年龄，判断是否成年。",[380,159284,159285],{},"输入年份，判断是否为闰年。",[380,159287,159288],{},"输入三个数字，输出最大值。",[380,159290,159291,159292,159295,159296,159298],{},"写登录判断：用户名是 ",[28,159293,159294],{},"admin"," 且密码是 ",[28,159297,15356],{}," 才登录成功。",[380,159300,159301],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[342,159303,159304],{},"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":46,"searchDepth":67,"depth":67,"links":159306},[159307,159308,159309,159310,159311,159312,159317,159318,159319,159320,159321,159322,159323],{"id":157695,"depth":67,"text":157696},{"id":157748,"depth":67,"text":157749},{"id":157852,"depth":67,"text":157853},{"id":157942,"depth":67,"text":157943},{"id":158132,"depth":67,"text":158133},{"id":158255,"depth":67,"text":158256,"children":159313},[159314,159315,159316],{"id":158259,"depth":144,"text":158260},{"id":158316,"depth":144,"text":158317},{"id":158373,"depth":144,"text":158374},{"id":158418,"depth":67,"text":158419},{"id":158509,"depth":67,"text":158510},{"id":158636,"depth":67,"text":158637},{"id":158766,"depth":67,"text":158767},{"id":158951,"depth":67,"text":158952},{"id":159187,"depth":67,"text":159188},{"id":159276,"depth":67,"text":159277},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157687,"description":347},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159330,"title":159331,"body":159332,"description":347,"extension":348,"meta":161101,"navigation":350,"path":161102,"seo":161103,"stem":161104,"__hash__":161105},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159333,"toc":161081},[159334,159337,159341,159347,159350,159367,159371,159373,159390,159392,159437,159439,159456,159460,159463,159529,159532,159550,159554,159715,159724,159728,159732,159737,159784,159786,159792,159796,159801,159848,159850,159856,159860,159865,159901,159904,159951,159955,159961,160019,160024,160055,160060,160064,160119,160122,160194,160197,160256,160260,160263,160338,160341,160345,160451,160454,160480,160484,160496,160565,160568,160660,160664,160666,160677,160679,160809,160813,161015,161023,161027,161057,161061,161078],[10,159335,159331],{"id":159336},"_4-循环语句",[365,159338,159340],{"id":159339},"_41-为什么需要循环","4.1 为什么需要循环",[14,159342,159343,159344,159346],{},"如果要输出 1 到 100，不应该写 100 行 ",[28,159345,146669],{},"，而应该用循环。",[14,159348,159349],{},"循环适合处理重复任务：",[377,159351,159352,159355,159358,159361,159364],{},[380,159353,159354],{},"重复输出。",[380,159356,159357],{},"重复输入。",[380,159359,159360],{},"遍历数据。",[380,159362,159363],{},"持续执行菜单。",[380,159365,159366],{},"批量处理文件或数据。",[365,159368,159370],{"id":159369},"_42-while循环","4.2 while循环",[14,159372,5454],{},[49,159374,159376],{"className":122,"code":159375,"language":124,"meta":46,"style":46},"while 条件:\n    循环体\n",[28,159377,159378,159385],{"__ignoreMap":46},[57,159379,159380,159382],{"class":59,"line":60},[57,159381,108860],{"class":136},[57,159383,159384],{"class":140}," 条件:\n",[57,159386,159387],{"class":59,"line":67},[57,159388,159389],{"class":140},"    循环体\n",[14,159391,15407],{},[49,159393,159395],{"className":122,"code":159394,"language":124,"meta":46,"style":46},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[28,159396,159397,159405,159409,159421,159428],{"__ignoreMap":46},[57,159398,159399,159401,159403],{"class":59,"line":60},[57,159400,100345],{"class":140},[57,159402,156],{"class":136},[57,159404,55896],{"class":81},[57,159406,159407],{"class":59,"line":67},[57,159408,2673],{"emptyLinePlaceholder":350},[57,159410,159411,159413,159415,159417,159419],{"class":59,"line":144},[57,159412,108860],{"class":136},[57,159414,9711],{"class":140},[57,159416,1870],{"class":136},[57,159418,2421],{"class":81},[57,159420,4012],{"class":140},[57,159422,159423,159425],{"class":59,"line":150},[57,159424,31496],{"class":81},[57,159426,159427],{"class":140},"(i)\n",[57,159429,159430,159433,159435],{"class":59,"line":162},[57,159431,159432],{"class":140},"    i ",[57,159434,9750],{"class":136},[57,159436,55896],{"class":81},[14,159438,81126],{},[377,159440,159441,159447,159450,159453],{},[380,159442,159443,159444,28654],{},"判断条件 ",[28,159445,159446],{},"i \u003C= 5",[380,159448,159449],{},"条件成立，执行循环体。",[380,159451,159452],{},"执行完后回到条件判断。",[380,159454,159455],{},"条件不成立，退出循环。",[365,159457,159459],{"id":159458},"_43-while累加","4.3 while累加",[14,159461,159462],{},"计算 1 到 100 的和：",[49,159464,159466],{"className":122,"code":159465,"language":124,"meta":46,"style":46},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[28,159467,159468,159476,159484,159488,159500,159510,159518,159522],{"__ignoreMap":46},[57,159469,159470,159472,159474],{"class":59,"line":60},[57,159471,100345],{"class":140},[57,159473,156],{"class":136},[57,159475,55896],{"class":81},[57,159477,159478,159480,159482],{"class":59,"line":67},[57,159479,157457],{"class":140},[57,159481,156],{"class":136},[57,159483,47530],{"class":81},[57,159485,159486],{"class":59,"line":144},[57,159487,2673],{"emptyLinePlaceholder":350},[57,159489,159490,159492,159494,159496,159498],{"class":59,"line":150},[57,159491,108860],{"class":136},[57,159493,9711],{"class":140},[57,159495,1870],{"class":136},[57,159497,6027],{"class":81},[57,159499,4012],{"class":140},[57,159501,159502,159505,159507],{"class":59,"line":162},[57,159503,159504],{"class":140},"    total ",[57,159506,9750],{"class":136},[57,159508,159509],{"class":140}," i\n",[57,159511,159512,159514,159516],{"class":59,"line":180},[57,159513,159432],{"class":140},[57,159515,9750],{"class":136},[57,159517,55896],{"class":81},[57,159519,159520],{"class":59,"line":186},[57,159521,2673],{"emptyLinePlaceholder":350},[57,159523,159524,159526],{"class":59,"line":197},[57,159525,165],{"class":81},[57,159527,159528],{"class":140},"(total)\n",[14,159530,159531],{},"核心思想：",[377,159533,159534,159539,159544],{},[380,159535,159536,159538],{},[28,159537,857],{}," 控制循环次数。",[380,159540,159541,159543],{},[28,159542,157558],{}," 保存累加结果。",[380,159545,159546,159547,159549],{},"每轮循环都要更新 ",[28,159548,857],{},"，否则可能死循环。",[365,159551,159553],{"id":159552},"_44-while猜数字","4.4 while猜数字",[49,159555,159557],{"className":122,"code":159556,"language":124,"meta":46,"style":46},"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",[28,159558,159559,159565,159569,159586,159594,159598,159606,159626,159635,159639,159651,159662,159672,159683,159689,159711],{"__ignoreMap":46},[57,159560,159561,159563],{"class":59,"line":60},[57,159562,137],{"class":136},[57,159564,45525],{"class":140},[57,159566,159567],{"class":59,"line":67},[57,159568,2673],{"emptyLinePlaceholder":350},[57,159570,159571,159573,159575,159578,159580,159582,159584],{"class":59,"line":144},[57,159572,159237],{"class":140},[57,159574,156],{"class":136},[57,159576,159577],{"class":140}," random.randint(",[57,159579,635],{"class":81},[57,159581,12708],{"class":140},[57,159583,728],{"class":81},[57,159585,238],{"class":140},[57,159587,159588,159590,159592],{"class":59,"line":150},[57,159589,146888],{"class":140},[57,159591,156],{"class":136},[57,159593,47530],{"class":81},[57,159595,159596],{"class":59,"line":162},[57,159597,2673],{"emptyLinePlaceholder":350},[57,159599,159600,159602,159604],{"class":59,"line":180},[57,159601,108860],{"class":136},[57,159603,95489],{"class":81},[57,159605,4012],{"class":140},[57,159607,159608,159611,159613,159615,159617,159619,159621,159624],{"class":59,"line":186},[57,159609,159610],{"class":140},"    guess ",[57,159612,156],{"class":136},[57,159614,2655],{"class":81},[57,159616,168],{"class":140},[57,159618,54018],{"class":81},[57,159620,168],{"class":140},[57,159622,159623],{"class":74},"\"请输入1到100之间的数字:\"",[57,159625,259],{"class":140},[57,159627,159628,159631,159633],{"class":59,"line":197},[57,159629,159630],{"class":140},"    count ",[57,159632,9750],{"class":136},[57,159634,55896],{"class":81},[57,159636,159637],{"class":59,"line":241},[57,159638,2673],{"emptyLinePlaceholder":350},[57,159640,159641,159643,159646,159648],{"class":59,"line":249},[57,159642,3374],{"class":136},[57,159644,159645],{"class":140}," guess ",[57,159647,223],{"class":136},[57,159649,159650],{"class":140}," answer:\n",[57,159652,159653,159655,159657,159660],{"class":59,"line":262},[57,159654,32648],{"class":81},[57,159656,168],{"class":140},[57,159658,159659],{"class":74},"\"猜大了\"",[57,159661,238],{"class":140},[57,159663,159664,159666,159668,159670],{"class":59,"line":281},[57,159665,39490],{"class":136},[57,159667,159645],{"class":140},[57,159669,1326],{"class":136},[57,159671,159650],{"class":140},[57,159673,159674,159676,159678,159681],{"class":59,"line":287},[57,159675,32648],{"class":81},[57,159677,168],{"class":140},[57,159679,159680],{"class":74},"\"猜小了\"",[57,159682,238],{"class":140},[57,159684,159685,159687],{"class":59,"line":298},[57,159686,158219],{"class":136},[57,159688,4012],{"class":140},[57,159690,159691,159693,159695,159697,159700,159702,159704,159706,159709],{"class":59,"line":311},[57,159692,32648],{"class":81},[57,159694,168],{"class":140},[57,159696,475],{"class":136},[57,159698,159699],{"class":74},"\"猜对了，一共猜了",[57,159701,1312],{"class":81},[57,159703,84631],{"class":140},[57,159705,1362],{"class":81},[57,159707,159708],{"class":74},"次\"",[57,159710,238],{"class":140},[57,159712,159713],{"class":59,"line":322},[57,159714,31824],{"class":136},[14,159716,159717,159720,159721,159723],{},[28,159718,159719],{},"while True"," 表示无限循环，通常配合 ",[28,159722,2326],{}," 使用。",[365,159725,159727],{"id":159726},"_45-break和continue","4.5 break和continue",[394,159729,159731],{"id":159730},"_451-break","4.5.1 break",[14,159733,159734,159736],{},[28,159735,2326],{}," 直接结束整个循环。",[49,159738,159740],{"className":122,"code":159739,"language":124,"meta":46,"style":46},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[28,159741,159742,159762,159774,159778],{"__ignoreMap":46},[57,159743,159744,159746,159748,159750,159752,159754,159756,159758,159760],{"class":59,"line":60},[57,159745,3298],{"class":136},[57,159747,9711],{"class":140},[57,159749,26312],{"class":136},[57,159751,32640],{"class":81},[57,159753,168],{"class":140},[57,159755,635],{"class":81},[57,159757,12708],{"class":140},[57,159759,761],{"class":81},[57,159761,30983],{"class":140},[57,159763,159764,159766,159768,159770,159772],{"class":59,"line":67},[57,159765,3374],{"class":136},[57,159767,9711],{"class":140},[57,159769,3222],{"class":136},[57,159771,78267],{"class":81},[57,159773,4012],{"class":140},[57,159775,159776],{"class":59,"line":144},[57,159777,31824],{"class":136},[57,159779,159780,159782],{"class":59,"line":150},[57,159781,31496],{"class":81},[57,159783,159427],{"class":140},[14,159785,146654],{},[49,159787,159790],{"className":159788,"code":159789,"language":5460,"meta":46},[5458],"1\n2\n",[28,159791,159789],{"__ignoreMap":46},[394,159793,159795],{"id":159794},"_452-continue","4.5.2 continue",[14,159797,159798,159800],{},[28,159799,154869],{}," 跳过本轮剩余代码，进入下一轮循环。",[49,159802,159804],{"className":122,"code":159803,"language":124,"meta":46,"style":46},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[28,159805,159806,159826,159838,159842],{"__ignoreMap":46},[57,159807,159808,159810,159812,159814,159816,159818,159820,159822,159824],{"class":59,"line":60},[57,159809,3298],{"class":136},[57,159811,9711],{"class":140},[57,159813,26312],{"class":136},[57,159815,32640],{"class":81},[57,159817,168],{"class":140},[57,159819,635],{"class":81},[57,159821,12708],{"class":140},[57,159823,761],{"class":81},[57,159825,30983],{"class":140},[57,159827,159828,159830,159832,159834,159836],{"class":59,"line":67},[57,159829,3374],{"class":136},[57,159831,9711],{"class":140},[57,159833,3222],{"class":136},[57,159835,78267],{"class":81},[57,159837,4012],{"class":140},[57,159839,159840],{"class":59,"line":144},[57,159841,148709],{"class":136},[57,159843,159844,159846],{"class":59,"line":150},[57,159845,31496],{"class":81},[57,159847,159427],{"class":140},[14,159849,146654],{},[49,159851,159854],{"className":159852,"code":159853,"language":5460,"meta":46},[5458],"1\n2\n4\n5\n",[28,159855,159853],{"__ignoreMap":46},[365,159857,159859],{"id":159858},"_46-for循环","4.6 for循环",[14,159861,159862,159864],{},[28,159863,3298],{}," 常用于遍历序列。",[49,159866,159868],{"className":122,"code":159867,"language":124,"meta":46,"style":46},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[28,159869,159870,159879,159883,159894],{"__ignoreMap":46},[57,159871,159872,159874,159876],{"class":59,"line":60},[57,159873,146733],{"class":140},[57,159875,156],{"class":136},[57,159877,159878],{"class":74}," \"python\"\n",[57,159880,159881],{"class":59,"line":67},[57,159882,2673],{"emptyLinePlaceholder":350},[57,159884,159885,159887,159890,159892],{"class":59,"line":144},[57,159886,3298],{"class":136},[57,159888,159889],{"class":140}," ch ",[57,159891,26312],{"class":136},[57,159893,158596],{"class":140},[57,159895,159896,159898],{"class":59,"line":150},[57,159897,31496],{"class":81},[57,159899,159900],{"class":140},"(ch)\n",[14,159902,159903],{},"遍历列表：",[49,159905,159907],{"className":122,"code":159906,"language":124,"meta":46,"style":46},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[28,159908,159909,159931,159935,159945],{"__ignoreMap":46},[57,159910,159911,159914,159916,159918,159920,159922,159924,159926,159929],{"class":59,"line":60},[57,159912,159913],{"class":140},"students ",[57,159915,156],{"class":136},[57,159917,52423],{"class":140},[57,159919,150085],{"class":74},[57,159921,12708],{"class":140},[57,159923,151133],{"class":74},[57,159925,12708],{"class":140},[57,159927,159928],{"class":74},"\"小刚\"",[57,159930,33443],{"class":140},[57,159932,159933],{"class":59,"line":67},[57,159934,2673],{"emptyLinePlaceholder":350},[57,159936,159937,159939,159941,159943],{"class":59,"line":144},[57,159938,3298],{"class":136},[57,159940,152334],{"class":140},[57,159942,26312],{"class":136},[57,159944,152339],{"class":140},[57,159946,159947,159949],{"class":59,"line":150},[57,159948,31496],{"class":81},[57,159950,150239],{"class":140},[365,159952,159954],{"id":159953},"_47-range函数","4.7 range函数",[14,159956,159957,159960],{},[28,159958,159959],{},"range()"," 用于生成整数序列。",[49,159962,159964],{"className":122,"code":159963,"language":124,"meta":46,"style":46},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[28,159965,159966,159980,159998],{"__ignoreMap":46},[57,159967,159968,159970,159972,159974,159977],{"class":59,"line":60},[57,159969,33613],{"class":81},[57,159971,168],{"class":140},[57,159973,736],{"class":81},[57,159975,159976],{"class":140},")          ",[57,159978,159979],{"class":63},"# 0,1,2,3,4\n",[57,159981,159982,159984,159986,159988,159990,159992,159995],{"class":59,"line":67},[57,159983,33613],{"class":81},[57,159985,168],{"class":140},[57,159987,635],{"class":81},[57,159989,12708],{"class":140},[57,159991,736],{"class":81},[57,159993,159994],{"class":140},")       ",[57,159996,159997],{"class":63},"# 1,2,3,4\n",[57,159999,160000,160002,160004,160006,160008,160010,160012,160014,160016],{"class":59,"line":144},[57,160001,33613],{"class":81},[57,160003,168],{"class":140},[57,160005,635],{"class":81},[57,160007,12708],{"class":140},[57,160009,862],{"class":81},[57,160011,12708],{"class":140},[57,160013,498],{"class":81},[57,160015,155858],{"class":140},[57,160017,160018],{"class":63},"# 1,3,5,7,9\n",[14,160020,160021,160022,24887],{},"配合 ",[28,160023,3298],{},[49,160025,160027],{"className":122,"code":160026,"language":124,"meta":46,"style":46},"for i in range(1, 6):\n    print(i)\n",[28,160028,160029,160049],{"__ignoreMap":46},[57,160030,160031,160033,160035,160037,160039,160041,160043,160045,160047],{"class":59,"line":60},[57,160032,3298],{"class":136},[57,160034,9711],{"class":140},[57,160036,26312],{"class":136},[57,160038,32640],{"class":81},[57,160040,168],{"class":140},[57,160042,635],{"class":81},[57,160044,12708],{"class":140},[57,160046,761],{"class":81},[57,160048,30983],{"class":140},[57,160050,160051,160053],{"class":59,"line":67},[57,160052,31496],{"class":81},[57,160054,159427],{"class":140},[14,160056,9298,160057,160059],{},[28,160058,33613],{}," 的结束值不包含在内。",[365,160061,160063],{"id":160062},"_48-for循环求和","4.8 for循环求和",[49,160065,160067],{"className":122,"code":160066,"language":124,"meta":46,"style":46},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[28,160068,160069,160077,160081,160101,160109,160113],{"__ignoreMap":46},[57,160070,160071,160073,160075],{"class":59,"line":60},[57,160072,157457],{"class":140},[57,160074,156],{"class":136},[57,160076,47530],{"class":81},[57,160078,160079],{"class":59,"line":67},[57,160080,2673],{"emptyLinePlaceholder":350},[57,160082,160083,160085,160087,160089,160091,160093,160095,160097,160099],{"class":59,"line":144},[57,160084,3298],{"class":136},[57,160086,9711],{"class":140},[57,160088,26312],{"class":136},[57,160090,32640],{"class":81},[57,160092,168],{"class":140},[57,160094,635],{"class":81},[57,160096,12708],{"class":140},[57,160098,754],{"class":81},[57,160100,30983],{"class":140},[57,160102,160103,160105,160107],{"class":59,"line":150},[57,160104,159504],{"class":140},[57,160106,9750],{"class":136},[57,160108,159509],{"class":140},[57,160110,160111],{"class":59,"line":162},[57,160112,2673],{"emptyLinePlaceholder":350},[57,160114,160115,160117],{"class":59,"line":180},[57,160116,165],{"class":81},[57,160118,159528],{"class":140},[14,160120,160121],{},"求偶数和：",[49,160123,160125],{"className":122,"code":160124,"language":124,"meta":46,"style":46},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[28,160126,160127,160135,160139,160159,160175,160184,160188],{"__ignoreMap":46},[57,160128,160129,160131,160133],{"class":59,"line":60},[57,160130,157457],{"class":140},[57,160132,156],{"class":136},[57,160134,47530],{"class":81},[57,160136,160137],{"class":59,"line":67},[57,160138,2673],{"emptyLinePlaceholder":350},[57,160140,160141,160143,160145,160147,160149,160151,160153,160155,160157],{"class":59,"line":144},[57,160142,3298],{"class":136},[57,160144,9711],{"class":140},[57,160146,26312],{"class":136},[57,160148,32640],{"class":81},[57,160150,168],{"class":140},[57,160152,635],{"class":81},[57,160154,12708],{"class":140},[57,160156,754],{"class":81},[57,160158,30983],{"class":140},[57,160160,160161,160163,160165,160167,160169,160171,160173],{"class":59,"line":150},[57,160162,3374],{"class":136},[57,160164,9711],{"class":140},[57,160166,745],{"class":136},[57,160168,15027],{"class":81},[57,160170,101756],{"class":136},[57,160172,4366],{"class":81},[57,160174,4012],{"class":140},[57,160176,160177,160180,160182],{"class":59,"line":162},[57,160178,160179],{"class":140},"        total ",[57,160181,9750],{"class":136},[57,160183,159509],{"class":140},[57,160185,160186],{"class":59,"line":180},[57,160187,2673],{"emptyLinePlaceholder":350},[57,160189,160190,160192],{"class":59,"line":186},[57,160191,165],{"class":81},[57,160193,159528],{"class":140},[14,160195,160196],{},"也可以：",[49,160198,160200],{"className":122,"code":160199,"language":124,"meta":46,"style":46},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[28,160201,160202,160210,160214,160238,160246,160250],{"__ignoreMap":46},[57,160203,160204,160206,160208],{"class":59,"line":60},[57,160205,157457],{"class":140},[57,160207,156],{"class":136},[57,160209,47530],{"class":81},[57,160211,160212],{"class":59,"line":67},[57,160213,2673],{"emptyLinePlaceholder":350},[57,160215,160216,160218,160220,160222,160224,160226,160228,160230,160232,160234,160236],{"class":59,"line":144},[57,160217,3298],{"class":136},[57,160219,9711],{"class":140},[57,160221,26312],{"class":136},[57,160223,32640],{"class":81},[57,160225,168],{"class":140},[57,160227,498],{"class":81},[57,160229,12708],{"class":140},[57,160231,754],{"class":81},[57,160233,12708],{"class":140},[57,160235,498],{"class":81},[57,160237,30983],{"class":140},[57,160239,160240,160242,160244],{"class":59,"line":150},[57,160241,159504],{"class":140},[57,160243,9750],{"class":136},[57,160245,159509],{"class":140},[57,160247,160248],{"class":59,"line":162},[57,160249,2673],{"emptyLinePlaceholder":350},[57,160251,160252,160254],{"class":59,"line":180},[57,160253,165],{"class":81},[57,160255,159528],{"class":140},[365,160257,160259],{"id":160258},"_49-循环嵌套","4.9 循环嵌套",[14,160261,160262],{},"嵌套循环就是循环里面再写循环。",[49,160264,160266],{"className":122,"code":160265,"language":124,"meta":46,"style":46},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[28,160267,160268,160288,160308],{"__ignoreMap":46},[57,160269,160270,160272,160274,160276,160278,160280,160282,160284,160286],{"class":59,"line":60},[57,160271,3298],{"class":136},[57,160273,9711],{"class":140},[57,160275,26312],{"class":136},[57,160277,32640],{"class":81},[57,160279,168],{"class":140},[57,160281,635],{"class":81},[57,160283,12708],{"class":140},[57,160285,710],{"class":81},[57,160287,30983],{"class":140},[57,160289,160290,160292,160294,160296,160298,160300,160302,160304,160306],{"class":59,"line":67},[57,160291,3474],{"class":136},[57,160293,9773],{"class":140},[57,160295,26312],{"class":136},[57,160297,32640],{"class":81},[57,160299,168],{"class":140},[57,160301,635],{"class":81},[57,160303,12708],{"class":140},[57,160305,710],{"class":81},[57,160307,30983],{"class":140},[57,160309,160310,160312,160314,160316,160319,160321,160323,160325,160328,160330,160332,160334,160336],{"class":59,"line":144},[57,160311,32648],{"class":81},[57,160313,168],{"class":140},[57,160315,475],{"class":136},[57,160317,160318],{"class":74},"\"i=",[57,160320,1312],{"class":81},[57,160322,857],{"class":140},[57,160324,1362],{"class":81},[57,160326,160327],{"class":74},", j=",[57,160329,1312],{"class":81},[57,160331,883],{"class":140},[57,160333,1362],{"class":81},[57,160335,668],{"class":74},[57,160337,238],{"class":140},[14,160339,160340],{},"外层循环执行一次，内层循环执行完整一轮。",[365,160342,160344],{"id":160343},"_410-九九乘法表","4.10 九九乘法表",[49,160346,160348],{"className":122,"code":160347,"language":124,"meta":46,"style":46},"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",[28,160349,160350,160370,160393,160445],{"__ignoreMap":46},[57,160351,160352,160354,160356,160358,160360,160362,160364,160366,160368],{"class":59,"line":60},[57,160353,3298],{"class":136},[57,160355,9711],{"class":140},[57,160357,26312],{"class":136},[57,160359,32640],{"class":81},[57,160361,168],{"class":140},[57,160363,635],{"class":81},[57,160365,12708],{"class":140},[57,160367,862],{"class":81},[57,160369,30983],{"class":140},[57,160371,160372,160374,160376,160378,160380,160382,160384,160387,160389,160391],{"class":59,"line":67},[57,160373,3474],{"class":136},[57,160375,9773],{"class":140},[57,160377,26312],{"class":136},[57,160379,32640],{"class":81},[57,160381,168],{"class":140},[57,160383,635],{"class":81},[57,160385,160386],{"class":140},", i ",[57,160388,897],{"class":136},[57,160390,25387],{"class":81},[57,160392,30983],{"class":140},[57,160394,160395,160397,160399,160401,160403,160405,160407,160409,160411,160413,160415,160417,160419,160421,160423,160425,160427,160429,160431,160433,160435,160437,160439,160441,160443],{"class":59,"line":144},[57,160396,32648],{"class":81},[57,160398,168],{"class":140},[57,160400,475],{"class":136},[57,160402,668],{"class":74},[57,160404,1312],{"class":81},[57,160406,883],{"class":140},[57,160408,1362],{"class":81},[57,160410,871],{"class":74},[57,160412,1312],{"class":81},[57,160414,857],{"class":140},[57,160416,1362],{"class":81},[57,160418,156],{"class":74},[57,160420,1312],{"class":81},[57,160422,100345],{"class":140},[57,160424,871],{"class":136},[57,160426,3683],{"class":140},[57,160428,1362],{"class":81},[57,160430,668],{"class":74},[57,160432,12708],{"class":140},[57,160434,45998],{"class":5489},[57,160436,156],{"class":136},[57,160438,668],{"class":74},[57,160440,1516],{"class":81},[57,160442,668],{"class":74},[57,160444,238],{"class":140},[57,160446,160447,160449],{"class":59,"line":150},[57,160448,31496],{"class":81},[57,160450,2249],{"class":140},[14,160452,160453],{},"关键点：",[377,160455,160456,160462,160468,160474],{},[380,160457,160458,160459,160461],{},"外层 ",[28,160460,857],{}," 控制行。",[380,160463,160464,160465,160467],{},"内层 ",[28,160466,883],{}," 控制列。",[380,160469,160470,160471,160473],{},"每行结束后用 ",[28,160472,146669],{}," 换行。",[380,160475,160476,160479],{},[28,160477,160478],{},"end=\"\\t\""," 让同一行的内容横向排列。",[365,160481,160483],{"id":160482},"_411-循环else","4.11 循环else",[14,160485,160486,160487,160489,160490,160492,160493,160495],{},"Python 的循环可以带 ",[28,160488,232],{},"。当循环正常结束时执行 ",[28,160491,232],{},"，如果被 ",[28,160494,2326],{}," 打断，则不执行。",[49,160497,160499],{"className":122,"code":160498,"language":124,"meta":46,"style":46},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[28,160500,160501,160521,160533,160544,160548,160554],{"__ignoreMap":46},[57,160502,160503,160505,160507,160509,160511,160513,160515,160517,160519],{"class":59,"line":60},[57,160504,3298],{"class":136},[57,160506,9711],{"class":140},[57,160508,26312],{"class":136},[57,160510,32640],{"class":81},[57,160512,168],{"class":140},[57,160514,635],{"class":81},[57,160516,12708],{"class":140},[57,160518,761],{"class":81},[57,160520,30983],{"class":140},[57,160522,160523,160525,160527,160529,160531],{"class":59,"line":67},[57,160524,3374],{"class":136},[57,160526,9711],{"class":140},[57,160528,3222],{"class":136},[57,160530,2311],{"class":81},[57,160532,4012],{"class":140},[57,160534,160535,160537,160539,160542],{"class":59,"line":144},[57,160536,32648],{"class":81},[57,160538,168],{"class":140},[57,160540,160541],{"class":74},"\"找到了\"",[57,160543,238],{"class":140},[57,160545,160546],{"class":59,"line":150},[57,160547,31824],{"class":136},[57,160549,160550,160552],{"class":59,"line":162},[57,160551,232],{"class":136},[57,160553,4012],{"class":140},[57,160555,160556,160558,160560,160563],{"class":59,"line":180},[57,160557,31496],{"class":81},[57,160559,168],{"class":140},[57,160561,160562],{"class":74},"\"没找到\"",[57,160564,238],{"class":140},[14,160566,160567],{},"常用于搜索。",[49,160569,160571],{"className":122,"code":160570,"language":124,"meta":46,"style":46},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[28,160572,160573,160594,160603,160607,160619,160630,160640,160644,160650],{"__ignoreMap":46},[57,160574,160575,160578,160580,160582,160584,160586,160588,160590,160592],{"class":59,"line":60},[57,160576,160577],{"class":140},"names ",[57,160579,156],{"class":136},[57,160581,52423],{"class":140},[57,160583,150085],{"class":74},[57,160585,12708],{"class":140},[57,160587,151133],{"class":74},[57,160589,12708],{"class":140},[57,160591,159928],{"class":74},[57,160593,33443],{"class":140},[57,160595,160596,160598,160600],{"class":59,"line":67},[57,160597,111775],{"class":140},[57,160599,156],{"class":136},[57,160601,160602],{"class":74}," \"小李\"\n",[57,160604,160605],{"class":59,"line":144},[57,160606,2673],{"emptyLinePlaceholder":350},[57,160608,160609,160611,160614,160616],{"class":59,"line":150},[57,160610,3298],{"class":136},[57,160612,160613],{"class":140}," name ",[57,160615,26312],{"class":136},[57,160617,160618],{"class":140}," names:\n",[57,160620,160621,160623,160625,160627],{"class":59,"line":162},[57,160622,3374],{"class":136},[57,160624,160613],{"class":140},[57,160626,3222],{"class":136},[57,160628,160629],{"class":140}," target:\n",[57,160631,160632,160634,160636,160638],{"class":59,"line":180},[57,160633,32648],{"class":81},[57,160635,168],{"class":140},[57,160637,160541],{"class":74},[57,160639,238],{"class":140},[57,160641,160642],{"class":59,"line":186},[57,160643,31824],{"class":136},[57,160645,160646,160648],{"class":59,"line":197},[57,160647,232],{"class":136},[57,160649,4012],{"class":140},[57,160651,160652,160654,160656,160658],{"class":59,"line":241},[57,160653,31496],{"class":81},[57,160655,168],{"class":140},[57,160657,160562],{"class":74},[57,160659,238],{"class":140},[365,160661,160663],{"id":160662},"_412-小案例登录重试","4.12 小案例：登录重试",[14,160665,123489],{},[377,160667,160668,160671,160674],{},[380,160669,160670],{},"用户最多输入 3 次密码。",[380,160672,160673],{},"密码正确则登录成功。",[380,160675,160676],{},"3 次都错误则锁定账号。",[14,160678,10308],{},[49,160680,160682],{"className":122,"code":160681,"language":124,"meta":46,"style":46},"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",[28,160683,160684,160694,160698,160714,160730,160734,160746,160757,160761,160767,160792,160798],{"__ignoreMap":46},[57,160685,160686,160689,160691],{"class":59,"line":60},[57,160687,160688],{"class":140},"password ",[57,160690,156],{"class":136},[57,160692,160693],{"class":74}," \"123456\"\n",[57,160695,160696],{"class":59,"line":67},[57,160697,2673],{"emptyLinePlaceholder":350},[57,160699,160700,160702,160704,160706,160708,160710,160712],{"class":59,"line":144},[57,160701,3298],{"class":136},[57,160703,9711],{"class":140},[57,160705,26312],{"class":136},[57,160707,32640],{"class":81},[57,160709,168],{"class":140},[57,160711,270],{"class":81},[57,160713,30983],{"class":140},[57,160715,160716,160719,160721,160723,160725,160728],{"class":59,"line":150},[57,160717,160718],{"class":140},"    user_password ",[57,160720,156],{"class":136},[57,160722,60802],{"class":81},[57,160724,168],{"class":140},[57,160726,160727],{"class":74},"\"请输入密码:\"",[57,160729,238],{"class":140},[57,160731,160732],{"class":59,"line":162},[57,160733,2673],{"emptyLinePlaceholder":350},[57,160735,160736,160738,160741,160743],{"class":59,"line":180},[57,160737,3374],{"class":136},[57,160739,160740],{"class":140}," user_password ",[57,160742,3222],{"class":136},[57,160744,160745],{"class":140}," password:\n",[57,160747,160748,160750,160752,160755],{"class":59,"line":186},[57,160749,32648],{"class":81},[57,160751,168],{"class":140},[57,160753,160754],{"class":74},"\"登录成功\"",[57,160756,238],{"class":140},[57,160758,160759],{"class":59,"line":197},[57,160760,31824],{"class":136},[57,160762,160763,160765],{"class":59,"line":241},[57,160764,158219],{"class":136},[57,160766,4012],{"class":140},[57,160768,160769,160771,160773,160775,160778,160781,160783,160785,160787,160790],{"class":59,"line":249},[57,160770,32648],{"class":81},[57,160772,168],{"class":140},[57,160774,475],{"class":136},[57,160776,160777],{"class":74},"\"密码错误，还剩",[57,160779,160780],{"class":81},"{2",[57,160782,52468],{"class":136},[57,160784,3305],{"class":140},[57,160786,1362],{"class":81},[57,160788,160789],{"class":74},"次机会\"",[57,160791,238],{"class":140},[57,160793,160794,160796],{"class":59,"line":262},[57,160795,232],{"class":136},[57,160797,4012],{"class":140},[57,160799,160800,160802,160804,160807],{"class":59,"line":281},[57,160801,31496],{"class":81},[57,160803,168],{"class":140},[57,160805,160806],{"class":74},"\"账号已锁定\"",[57,160808,238],{"class":140},[365,160810,160812],{"id":160811},"_413-小案例菜单程序","4.13 小案例：菜单程序",[49,160814,160816],{"className":122,"code":160815,"language":124,"meta":46,"style":46},"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",[28,160817,160818,160826,160837,160848,160859,160870,160881,160885,160900,160904,160916,160927,160939,160950,160962,160973,160985,160995,160999,161005],{"__ignoreMap":46},[57,160819,160820,160822,160824],{"class":59,"line":60},[57,160821,108860],{"class":136},[57,160823,95489],{"class":81},[57,160825,4012],{"class":140},[57,160827,160828,160830,160832,160835],{"class":59,"line":67},[57,160829,31496],{"class":81},[57,160831,168],{"class":140},[57,160833,160834],{"class":74},"\"====== 菜单 ======\"",[57,160836,238],{"class":140},[57,160838,160839,160841,160843,160846],{"class":59,"line":144},[57,160840,31496],{"class":81},[57,160842,168],{"class":140},[57,160844,160845],{"class":74},"\"1. 查询余额\"",[57,160847,238],{"class":140},[57,160849,160850,160852,160854,160857],{"class":59,"line":150},[57,160851,31496],{"class":81},[57,160853,168],{"class":140},[57,160855,160856],{"class":74},"\"2. 存款\"",[57,160858,238],{"class":140},[57,160860,160861,160863,160865,160868],{"class":59,"line":162},[57,160862,31496],{"class":81},[57,160864,168],{"class":140},[57,160866,160867],{"class":74},"\"3. 取款\"",[57,160869,238],{"class":140},[57,160871,160872,160874,160876,160879],{"class":59,"line":180},[57,160873,31496],{"class":81},[57,160875,168],{"class":140},[57,160877,160878],{"class":74},"\"0. 退出\"",[57,160880,238],{"class":140},[57,160882,160883],{"class":59,"line":186},[57,160884,2673],{"emptyLinePlaceholder":350},[57,160886,160887,160890,160892,160894,160896,160898],{"class":59,"line":197},[57,160888,160889],{"class":140},"    choice ",[57,160891,156],{"class":136},[57,160893,60802],{"class":81},[57,160895,168],{"class":140},[57,160897,153270],{"class":74},[57,160899,238],{"class":140},[57,160901,160902],{"class":59,"line":241},[57,160903,2673],{"emptyLinePlaceholder":350},[57,160905,160906,160908,160910,160912,160914],{"class":59,"line":249},[57,160907,3374],{"class":136},[57,160909,153283],{"class":140},[57,160911,3222],{"class":136},[57,160913,153288],{"class":74},[57,160915,4012],{"class":140},[57,160917,160918,160920,160922,160925],{"class":59,"line":262},[57,160919,32648],{"class":81},[57,160921,168],{"class":140},[57,160923,160924],{"class":74},"\"余额为1000元\"",[57,160926,238],{"class":140},[57,160928,160929,160931,160933,160935,160937],{"class":59,"line":281},[57,160930,39490],{"class":136},[57,160932,153283],{"class":140},[57,160934,3222],{"class":136},[57,160936,153307],{"class":74},[57,160938,4012],{"class":140},[57,160940,160941,160943,160945,160948],{"class":59,"line":287},[57,160942,32648],{"class":81},[57,160944,168],{"class":140},[57,160946,160947],{"class":74},"\"存款功能\"",[57,160949,238],{"class":140},[57,160951,160952,160954,160956,160958,160960],{"class":59,"line":298},[57,160953,39490],{"class":136},[57,160955,153283],{"class":140},[57,160957,3222],{"class":136},[57,160959,153325],{"class":74},[57,160961,4012],{"class":140},[57,160963,160964,160966,160968,160971],{"class":59,"line":311},[57,160965,32648],{"class":81},[57,160967,168],{"class":140},[57,160969,160970],{"class":74},"\"取款功能\"",[57,160972,238],{"class":140},[57,160974,160975,160977,160979,160981,160983],{"class":59,"line":322},[57,160976,39490],{"class":136},[57,160978,153283],{"class":140},[57,160980,3222],{"class":136},[57,160982,153379],{"class":74},[57,160984,4012],{"class":140},[57,160986,160987,160989,160991,160993],{"class":59,"line":1929},[57,160988,32648],{"class":81},[57,160990,168],{"class":140},[57,160992,153390],{"class":74},[57,160994,238],{"class":140},[57,160996,160997],{"class":59,"line":1950},[57,160998,31824],{"class":136},[57,161000,161001,161003],{"class":59,"line":1955},[57,161002,158219],{"class":136},[57,161004,4012],{"class":140},[57,161006,161007,161009,161011,161013],{"class":59,"line":1969},[57,161008,32648],{"class":81},[57,161010,168],{"class":140},[57,161012,153411],{"class":74},[57,161014,238],{"class":140},[14,161016,161017,161018,161020,161021,28654],{},"菜单类程序通常使用 ",[28,161019,159719],{},"，用户选择退出时 ",[28,161022,2326],{},[365,161024,161026],{"id":161025},"_414-易错点","4.14 易错点",[377,161028,161029,161034,161040,161048,161054],{},[380,161030,161031,161033],{},[28,161032,108860],{}," 循环必须更新控制变量。",[380,161035,161036,161039],{},[28,161037,161038],{},"range(1, 10)"," 不包含 10。",[380,161041,161042,161044,161045,161047],{},[28,161043,2326],{}," 结束整个循环，",[28,161046,154869],{}," 只跳过本轮。",[380,161049,161050,161051,161053],{},"嵌套循环中，",[28,161052,2326],{}," 只跳出当前所在的一层循环。",[380,161055,161056],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[365,161058,161060],{"id":161059},"_415-本章练习","4.15 本章练习",[377,161062,161063,161066,161069,161072,161075],{},[380,161064,161065],{},"输出 1 到 100。",[380,161067,161068],{},"计算 1 到 100 的偶数和。",[380,161070,161071],{},"输出 100 以内能被 3 和 5 同时整除的数。",[380,161073,161074],{},"编写猜数字游戏，限制最多猜 7 次。",[380,161076,161077],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[342,161079,161080],{},"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":46,"searchDepth":67,"depth":67,"links":161082},[161083,161084,161085,161086,161087,161091,161092,161093,161094,161095,161096,161097,161098,161099,161100],{"id":159339,"depth":67,"text":159340},{"id":159369,"depth":67,"text":159370},{"id":159458,"depth":67,"text":159459},{"id":159552,"depth":67,"text":159553},{"id":159726,"depth":67,"text":159727,"children":161088},[161089,161090],{"id":159730,"depth":144,"text":159731},{"id":159794,"depth":144,"text":159795},{"id":159858,"depth":67,"text":159859},{"id":159953,"depth":67,"text":159954},{"id":160062,"depth":67,"text":160063},{"id":160258,"depth":67,"text":160259},{"id":160343,"depth":67,"text":160344},{"id":160482,"depth":67,"text":160483},{"id":160662,"depth":67,"text":160663},{"id":160811,"depth":67,"text":160812},{"id":161025,"depth":67,"text":161026},{"id":161059,"depth":67,"text":161060},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159331,"description":347},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161107,"title":161108,"body":161109,"description":347,"extension":348,"meta":163114,"navigation":350,"path":163115,"seo":163116,"stem":163117,"__hash__":163118},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161110,"toc":163094},[161111,161114,161118,161121,161124,161138,161141,161155,161159,161161,161180,161182,161229,161231,161245,161249,161323,161326,161330,161333,161392,161400,161403,161456,161459,161463,161468,161523,161531,161581,161585,161590,161598,161697,161703,161707,161712,161715,161726,161767,161780,161784,161787,161823,161826,161839,161842,161902,161906,161910,161913,161964,161968,161971,162018,162024,162090,162093,162097,162100,162216,162219,162223,162226,162332,162336,162339,162377,162380,162422,162425,162485,162488,162492,162956,162959,162963,162990,162996,163057,163061,163091],[10,161112,161108],{"id":161113},"_5-函数基础",[365,161115,161117],{"id":161116},"_51-为什么需要函数","5.1 为什么需要函数",[14,161119,161120],{},"函数用于封装一段可以重复使用的代码。",[14,161122,161123],{},"不使用函数的问题：",[377,161125,161126,161129,161132,161135],{},[380,161127,161128],{},"重复代码多。",[380,161130,161131],{},"修改逻辑时容易漏改。",[380,161133,161134],{},"主流程不清晰。",[380,161136,161137],{},"程序越写越长，难以维护。",[14,161139,161140],{},"使用函数后的好处：",[377,161142,161143,161146,161149,161152],{},[380,161144,161145],{},"提高复用性。",[380,161147,161148],{},"提高可读性。",[380,161150,161151],{},"便于调试。",[380,161153,161154],{},"便于分工。",[365,161156,161158],{"id":161157},"_52-函数定义","5.2 函数定义",[14,161160,5454],{},[49,161162,161164],{"className":122,"code":161163,"language":124,"meta":46,"style":46},"def 函数名():\n    函数体\n",[28,161165,161166,161175],{"__ignoreMap":46},[57,161167,161168,161170,161173],{"class":59,"line":60},[57,161169,32144],{"class":136},[57,161171,161172],{"class":70}," 函数名",[57,161174,32150],{"class":140},[57,161176,161177],{"class":59,"line":67},[57,161178,161179],{"class":140},"    函数体\n",[14,161181,15407],{},[49,161183,161185],{"className":122,"code":161184,"language":124,"meta":46,"style":46},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[28,161186,161187,161196,161206,161216,161220,161224],{"__ignoreMap":46},[57,161188,161189,161191,161194],{"class":59,"line":60},[57,161190,32144],{"class":136},[57,161192,161193],{"class":70}," say_hello",[57,161195,32150],{"class":140},[57,161197,161198,161200,161202,161204],{"class":59,"line":67},[57,161199,31496],{"class":81},[57,161201,168],{"class":140},[57,161203,6117],{"class":74},[57,161205,238],{"class":140},[57,161207,161208,161210,161212,161214],{"class":59,"line":144},[57,161209,31496],{"class":81},[57,161211,168],{"class":140},[57,161213,146836],{"class":74},[57,161215,238],{"class":140},[57,161217,161218],{"class":59,"line":150},[57,161219,2673],{"emptyLinePlaceholder":350},[57,161221,161222],{"class":59,"line":162},[57,161223,2673],{"emptyLinePlaceholder":350},[57,161225,161226],{"class":59,"line":180},[57,161227,161228],{"class":140},"say_hello()\n",[14,161230,9298],{},[377,161232,161233,161236,161239,161242],{},[380,161234,161235],{},"函数必须先定义，再调用。",[380,161237,161238],{},"函数名遵循变量命名规则。",[380,161240,161241],{},"函数体需要缩进。",[380,161243,161244],{},"函数不调用就不会执行。",[365,161246,161248],{"id":161247},"_53-函数调用","5.3 函数调用",[49,161250,161252],{"className":122,"code":161251,"language":124,"meta":46,"style":46},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[28,161253,161254,161263,161274,161285,161296,161306,161310,161314,161319],{"__ignoreMap":46},[57,161255,161256,161258,161261],{"class":59,"line":60},[57,161257,32144],{"class":136},[57,161259,161260],{"class":70}," print_menu",[57,161262,32150],{"class":140},[57,161264,161265,161267,161269,161272],{"class":59,"line":67},[57,161266,31496],{"class":81},[57,161268,168],{"class":140},[57,161270,161271],{"class":74},"\"1. 查询\"",[57,161273,238],{"class":140},[57,161275,161276,161278,161280,161283],{"class":59,"line":144},[57,161277,31496],{"class":81},[57,161279,168],{"class":140},[57,161281,161282],{"class":74},"\"2. 添加\"",[57,161284,238],{"class":140},[57,161286,161287,161289,161291,161294],{"class":59,"line":150},[57,161288,31496],{"class":81},[57,161290,168],{"class":140},[57,161292,161293],{"class":74},"\"3. 删除\"",[57,161295,238],{"class":140},[57,161297,161298,161300,161302,161304],{"class":59,"line":162},[57,161299,31496],{"class":81},[57,161301,168],{"class":140},[57,161303,160878],{"class":74},[57,161305,238],{"class":140},[57,161307,161308],{"class":59,"line":180},[57,161309,2673],{"emptyLinePlaceholder":350},[57,161311,161312],{"class":59,"line":186},[57,161313,2673],{"emptyLinePlaceholder":350},[57,161315,161316],{"class":59,"line":197},[57,161317,161318],{"class":140},"print_menu()\n",[57,161320,161321],{"class":59,"line":241},[57,161322,161318],{"class":140},[14,161324,161325],{},"函数可以多次调用，每次调用都会执行函数体。",[365,161327,161329],{"id":161328},"_54-参数","5.4 参数",[14,161331,161332],{},"参数用于向函数传递数据。",[49,161334,161336],{"className":122,"code":161335,"language":124,"meta":46,"style":46},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[28,161337,161338,161347,161367,161371,161375,161384],{"__ignoreMap":46},[57,161339,161340,161342,161344],{"class":59,"line":60},[57,161341,32144],{"class":136},[57,161343,161193],{"class":70},[57,161345,161346],{"class":140},"(name):\n",[57,161348,161349,161351,161353,161355,161357,161359,161361,161363,161365],{"class":59,"line":67},[57,161350,31496],{"class":81},[57,161352,168],{"class":140},[57,161354,475],{"class":136},[57,161356,157251],{"class":74},[57,161358,1312],{"class":81},[57,161360,80007],{"class":140},[57,161362,1362],{"class":81},[57,161364,668],{"class":74},[57,161366,238],{"class":140},[57,161368,161369],{"class":59,"line":144},[57,161370,2673],{"emptyLinePlaceholder":350},[57,161372,161373],{"class":59,"line":150},[57,161374,2673],{"emptyLinePlaceholder":350},[57,161376,161377,161380,161382],{"class":59,"line":162},[57,161378,161379],{"class":140},"say_hello(",[57,161381,150085],{"class":74},[57,161383,238],{"class":140},[57,161385,161386,161388,161390],{"class":59,"line":180},[57,161387,161379],{"class":140},[57,161389,151133],{"class":74},[57,161391,238],{"class":140},[14,161393,161394,161396,161397,161399],{},[28,161395,80007],{}," 是形参，",[28,161398,150085],{}," 是实参。",[14,161401,161402],{},"多个参数：",[49,161404,161406],{"className":122,"code":161405,"language":124,"meta":46,"style":46},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[28,161407,161408,161416,161429,161435,161439,161443],{"__ignoreMap":46},[57,161409,161410,161412,161414],{"class":59,"line":60},[57,161411,32144],{"class":136},[57,161413,5482],{"class":70},[57,161415,151290],{"class":140},[57,161417,161418,161421,161423,161425,161427],{"class":59,"line":67},[57,161419,161420],{"class":140},"    result ",[57,161422,156],{"class":136},[57,161424,11142],{"class":140},[57,161426,897],{"class":136},[57,161428,151301],{"class":140},[57,161430,161431,161433],{"class":59,"line":144},[57,161432,31496],{"class":81},[57,161434,76782],{"class":140},[57,161436,161437],{"class":59,"line":150},[57,161438,2673],{"emptyLinePlaceholder":350},[57,161440,161441],{"class":59,"line":162},[57,161442,2673],{"emptyLinePlaceholder":350},[57,161444,161445,161448,161450,161452,161454],{"class":59,"line":180},[57,161446,161447],{"class":140},"add(",[57,161449,862],{"class":81},[57,161451,12708],{"class":140},[57,161453,1116],{"class":81},[57,161455,238],{"class":140},[14,161457,161458],{},"调用时参数数量必须匹配。",[365,161460,161462],{"id":161461},"_55-返回值","5.5 返回值",[14,161464,161465,161467],{},[28,161466,17318],{}," 用于把函数内部的结果返回给调用者。",[49,161469,161471],{"className":122,"code":161470,"language":124,"meta":46,"style":46},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[28,161472,161473,161481,161491,161495,161499,161517],{"__ignoreMap":46},[57,161474,161475,161477,161479],{"class":59,"line":60},[57,161476,32144],{"class":136},[57,161478,5482],{"class":70},[57,161480,151290],{"class":140},[57,161482,161483,161485,161487,161489],{"class":59,"line":67},[57,161484,4363],{"class":136},[57,161486,11142],{"class":140},[57,161488,897],{"class":136},[57,161490,151301],{"class":140},[57,161492,161493],{"class":59,"line":144},[57,161494,2673],{"emptyLinePlaceholder":350},[57,161496,161497],{"class":59,"line":150},[57,161498,2673],{"emptyLinePlaceholder":350},[57,161500,161501,161504,161506,161509,161511,161513,161515],{"class":59,"line":162},[57,161502,161503],{"class":140},"result ",[57,161505,156],{"class":136},[57,161507,161508],{"class":140}," add(",[57,161510,862],{"class":81},[57,161512,12708],{"class":140},[57,161514,1116],{"class":81},[57,161516,238],{"class":140},[57,161518,161519,161521],{"class":59,"line":180},[57,161520,165],{"class":81},[57,161522,76782],{"class":140},[14,161524,161525,161526,161528,161529,28654],{},"如果函数没有写 ",[28,161527,17318],{},"，默认返回 ",[28,161530,95883],{},[49,161532,161534],{"className":122,"code":161533,"language":124,"meta":46,"style":46},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[28,161535,161536,161544,161554,161558,161562,161571],{"__ignoreMap":46},[57,161537,161538,161540,161542],{"class":59,"line":60},[57,161539,32144],{"class":136},[57,161541,161193],{"class":70},[57,161543,32150],{"class":140},[57,161545,161546,161548,161550,161552],{"class":59,"line":67},[57,161547,31496],{"class":81},[57,161549,168],{"class":140},[57,161551,6117],{"class":74},[57,161553,238],{"class":140},[57,161555,161556],{"class":59,"line":144},[57,161557,2673],{"emptyLinePlaceholder":350},[57,161559,161560],{"class":59,"line":150},[57,161561,2673],{"emptyLinePlaceholder":350},[57,161563,161564,161566,161568],{"class":59,"line":162},[57,161565,161503],{"class":140},[57,161567,156],{"class":136},[57,161569,161570],{"class":140}," say_hello()\n",[57,161572,161573,161575,161578],{"class":59,"line":180},[57,161574,165],{"class":81},[57,161576,161577],{"class":140},"(result)  ",[57,161579,161580],{"class":63},"# None\n",[365,161582,161584],{"id":161583},"_56-return的作用","5.6 return的作用",[14,161586,161587,161589],{},[28,161588,17318],{}," 有两个作用：",[377,161591,161592,161595],{},[380,161593,161594],{},"返回结果。",[380,161596,161597],{},"结束函数。",[49,161599,161601],{"className":122,"code":161600,"language":124,"meta":46,"style":46},"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",[28,161602,161603,161613,161625,161632,161636,161648,161655,161659,161666,161670,161674,161685],{"__ignoreMap":46},[57,161604,161605,161607,161610],{"class":59,"line":60},[57,161606,32144],{"class":136},[57,161608,161609],{"class":70}," check_age",[57,161611,161612],{"class":140},"(age):\n",[57,161614,161615,161617,161619,161621,161623],{"class":59,"line":67},[57,161616,3374],{"class":136},[57,161618,15979],{"class":140},[57,161620,1326],{"class":136},[57,161622,4366],{"class":81},[57,161624,4012],{"class":140},[57,161626,161627,161629],{"class":59,"line":144},[57,161628,15024],{"class":136},[57,161630,161631],{"class":74}," \"年龄不合法\"\n",[57,161633,161634],{"class":59,"line":150},[57,161635,2673],{"emptyLinePlaceholder":350},[57,161637,161638,161640,161642,161644,161646],{"class":59,"line":162},[57,161639,3374],{"class":136},[57,161641,15979],{"class":140},[57,161643,1984],{"class":136},[57,161645,156482],{"class":81},[57,161647,4012],{"class":140},[57,161649,161650,161652],{"class":59,"line":180},[57,161651,15024],{"class":136},[57,161653,161654],{"class":74}," \"成年人\"\n",[57,161656,161657],{"class":59,"line":186},[57,161658,2673],{"emptyLinePlaceholder":350},[57,161660,161661,161663],{"class":59,"line":197},[57,161662,4363],{"class":136},[57,161664,161665],{"class":74}," \"未成年人\"\n",[57,161667,161668],{"class":59,"line":241},[57,161669,2673],{"emptyLinePlaceholder":350},[57,161671,161672],{"class":59,"line":249},[57,161673,2673],{"emptyLinePlaceholder":350},[57,161675,161676,161678,161681,161683],{"class":59,"line":262},[57,161677,165],{"class":81},[57,161679,161680],{"class":140},"(check_age(",[57,161682,1116],{"class":81},[57,161684,259],{"class":140},[57,161686,161687,161689,161691,161693,161695],{"class":59,"line":281},[57,161688,165],{"class":81},[57,161690,161680],{"class":140},[57,161692,948],{"class":136},[57,161694,635],{"class":81},[57,161696,259],{"class":140},[14,161698,161699,161700,161702],{},"函数执行到 ",[28,161701,17318],{}," 后，后面的代码不会继续执行。",[365,161704,161706],{"id":161705},"_57-none","5.7 None",[14,161708,161709,161711],{},[28,161710,95883],{}," 表示空值或没有结果。",[14,161713,161714],{},"常见使用场景：",[377,161716,161717,161720,161723],{},[380,161718,161719],{},"函数没有返回值。",[380,161721,161722],{},"变量暂时没有具体值。",[380,161724,161725],{},"表示查询不到结果。",[49,161727,161729],{"className":122,"code":161728,"language":124,"meta":46,"style":46},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[28,161730,161731,161739,161743,161756],{"__ignoreMap":46},[57,161732,161733,161735,161737],{"class":59,"line":60},[57,161734,161503],{"class":140},[57,161736,156],{"class":136},[57,161738,152369],{"class":81},[57,161740,161741],{"class":59,"line":67},[57,161742,2673],{"emptyLinePlaceholder":350},[57,161744,161745,161747,161750,161752,161754],{"class":59,"line":144},[57,161746,1813],{"class":136},[57,161748,161749],{"class":140}," result ",[57,161751,39124],{"class":136},[57,161753,39130],{"class":81},[57,161755,4012],{"class":140},[57,161757,161758,161760,161762,161765],{"class":59,"line":150},[57,161759,31496],{"class":81},[57,161761,168],{"class":140},[57,161763,161764],{"class":74},"\"没有数据\"",[57,161766,238],{"class":140},[14,161768,161769,161770,161772,161773,161776,161777,28654],{},"判断 ",[28,161771,95883],{}," 推荐使用 ",[28,161774,161775],{},"is None","，不要写成 ",[28,161778,161779],{},"== None",[365,161781,161783],{"id":161782},"_58-函数文档字符串","5.8 函数文档字符串",[14,161785,161786],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[49,161788,161790],{"className":122,"code":161789,"language":124,"meta":46,"style":46},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[28,161791,161792,161802,161807],{"__ignoreMap":46},[57,161793,161794,161796,161799],{"class":59,"line":60},[57,161795,32144],{"class":136},[57,161797,161798],{"class":70}," calculate_bmi",[57,161800,161801],{"class":140},"(weight, height):\n",[57,161803,161804],{"class":59,"line":67},[57,161805,161806],{"class":74},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[57,161808,161809,161811,161814,161816,161819,161821],{"class":59,"line":144},[57,161810,4363],{"class":136},[57,161812,161813],{"class":140}," weight ",[57,161815,1000],{"class":136},[57,161817,161818],{"class":140}," height ",[57,161820,10934],{"class":136},[57,161822,47920],{"class":81},[14,161824,161825],{},"查看说明：",[49,161827,161829],{"className":122,"code":161828,"language":124,"meta":46,"style":46},"help(calculate_bmi)\n",[28,161830,161831],{"__ignoreMap":46},[57,161832,161833,161836],{"class":59,"line":60},[57,161834,161835],{"class":81},"help",[57,161837,161838],{"class":140},"(calculate_bmi)\n",[14,161840,161841],{},"较完整的写法：",[49,161843,161845],{"className":122,"code":161844,"language":124,"meta":46,"style":46},"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",[28,161846,161847,161855,161860,161865,161869,161874,161879,161884,161888],{"__ignoreMap":46},[57,161848,161849,161851,161853],{"class":59,"line":60},[57,161850,32144],{"class":136},[57,161852,161798],{"class":70},[57,161854,161801],{"class":140},[57,161856,161857],{"class":59,"line":67},[57,161858,161859],{"class":74},"    \"\"\"\n",[57,161861,161862],{"class":59,"line":144},[57,161863,161864],{"class":74},"    计算BMI。\n",[57,161866,161867],{"class":59,"line":150},[57,161868,2673],{"emptyLinePlaceholder":350},[57,161870,161871],{"class":59,"line":162},[57,161872,161873],{"class":74},"    :param weight: 体重，单位kg\n",[57,161875,161876],{"class":59,"line":180},[57,161877,161878],{"class":74},"    :param height: 身高，单位m\n",[57,161880,161881],{"class":59,"line":186},[57,161882,161883],{"class":74},"    :return: BMI数值\n",[57,161885,161886],{"class":59,"line":197},[57,161887,161859],{"class":74},[57,161889,161890,161892,161894,161896,161898,161900],{"class":59,"line":241},[57,161891,4363],{"class":136},[57,161893,161813],{"class":140},[57,161895,1000],{"class":136},[57,161897,161818],{"class":140},[57,161899,10934],{"class":136},[57,161901,47920],{"class":81},[365,161903,161905],{"id":161904},"_59-变量作用域","5.9 变量作用域",[394,161907,161909],{"id":161908},"_591-局部变量","5.9.1 局部变量",[14,161911,161912],{},"在函数内部定义的变量，只能在函数内部使用。",[49,161914,161916],{"className":122,"code":161915,"language":124,"meta":46,"style":46},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[28,161917,161918,161927,161935,161941,161945,161949,161954],{"__ignoreMap":46},[57,161919,161920,161922,161925],{"class":59,"line":60},[57,161921,32144],{"class":136},[57,161923,161924],{"class":70}," test",[57,161926,32150],{"class":140},[57,161928,161929,161931,161933],{"class":59,"line":67},[57,161930,45790],{"class":140},[57,161932,156],{"class":136},[57,161934,58625],{"class":81},[57,161936,161937,161939],{"class":59,"line":144},[57,161938,31496],{"class":81},[57,161940,438],{"class":140},[57,161942,161943],{"class":59,"line":150},[57,161944,2673],{"emptyLinePlaceholder":350},[57,161946,161947],{"class":59,"line":162},[57,161948,2673],{"emptyLinePlaceholder":350},[57,161950,161951],{"class":59,"line":180},[57,161952,161953],{"class":140},"test()\n",[57,161955,161956,161958,161961],{"class":59,"line":186},[57,161957,165],{"class":81},[57,161959,161960],{"class":140},"(num)  ",[57,161962,161963],{"class":63},"# 报错\n",[394,161965,161967],{"id":161966},"_592-全局变量","5.9.2 全局变量",[14,161969,161970],{},"在函数外部定义的变量，可以在函数内部读取。",[49,161972,161974],{"className":122,"code":161973,"language":124,"meta":46,"style":46},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[28,161975,161976,161984,161988,161992,162000,162006,162010,162014],{"__ignoreMap":46},[57,161977,161978,161980,161982],{"class":59,"line":60},[57,161979,146733],{"class":140},[57,161981,156],{"class":136},[57,161983,149550],{"class":74},[57,161985,161986],{"class":59,"line":67},[57,161987,2673],{"emptyLinePlaceholder":350},[57,161989,161990],{"class":59,"line":144},[57,161991,2673],{"emptyLinePlaceholder":350},[57,161993,161994,161996,161998],{"class":59,"line":150},[57,161995,32144],{"class":136},[57,161997,161193],{"class":70},[57,161999,32150],{"class":140},[57,162001,162002,162004],{"class":59,"line":162},[57,162003,31496],{"class":81},[57,162005,150857],{"class":140},[57,162007,162008],{"class":59,"line":180},[57,162009,2673],{"emptyLinePlaceholder":350},[57,162011,162012],{"class":59,"line":186},[57,162013,2673],{"emptyLinePlaceholder":350},[57,162015,162016],{"class":59,"line":197},[57,162017,161228],{"class":140},[14,162019,162020,162021,28654],{},"如果要在函数内部修改全局变量，需要 ",[28,162022,162023],{},"global",[49,162025,162027],{"className":122,"code":162026,"language":124,"meta":46,"style":46},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[28,162028,162029,162037,162041,162045,162054,162062,162070,162074,162078,162083],{"__ignoreMap":46},[57,162030,162031,162033,162035],{"class":59,"line":60},[57,162032,146888],{"class":140},[57,162034,156],{"class":136},[57,162036,47530],{"class":81},[57,162038,162039],{"class":59,"line":67},[57,162040,2673],{"emptyLinePlaceholder":350},[57,162042,162043],{"class":59,"line":144},[57,162044,2673],{"emptyLinePlaceholder":350},[57,162046,162047,162049,162052],{"class":59,"line":150},[57,162048,32144],{"class":136},[57,162050,162051],{"class":70}," add_count",[57,162053,32150],{"class":140},[57,162055,162056,162059],{"class":59,"line":162},[57,162057,162058],{"class":136},"    global",[57,162060,162061],{"class":140}," count\n",[57,162063,162064,162066,162068],{"class":59,"line":180},[57,162065,159630],{"class":140},[57,162067,9750],{"class":136},[57,162069,55896],{"class":81},[57,162071,162072],{"class":59,"line":186},[57,162073,2673],{"emptyLinePlaceholder":350},[57,162075,162076],{"class":59,"line":197},[57,162077,2673],{"emptyLinePlaceholder":350},[57,162079,162080],{"class":59,"line":241},[57,162081,162082],{"class":140},"add_count()\n",[57,162084,162085,162087],{"class":59,"line":249},[57,162086,165],{"class":81},[57,162088,162089],{"class":140},"(count)\n",[14,162091,162092],{},"不建议大量使用全局变量，项目变大后很难维护。",[365,162094,162096],{"id":162095},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,162098,162099],{},"一个函数中可以调用另一个函数。",[49,162101,162103],{"className":122,"code":162102,"language":124,"meta":46,"style":46},"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",[28,162104,162105,162114,162128,162132,162136,162145,162150,162170,162191,162195,162199,162203],{"__ignoreMap":46},[57,162106,162107,162109,162112],{"class":59,"line":60},[57,162108,32144],{"class":136},[57,162110,162111],{"class":70}," print_line",[57,162113,32150],{"class":140},[57,162115,162116,162118,162120,162122,162124,162126],{"class":59,"line":67},[57,162117,31496],{"class":81},[57,162119,168],{"class":140},[57,162121,32680],{"class":74},[57,162123,6791],{"class":136},[57,162125,78862],{"class":81},[57,162127,238],{"class":140},[57,162129,162130],{"class":59,"line":144},[57,162131,2673],{"emptyLinePlaceholder":350},[57,162133,162134],{"class":59,"line":150},[57,162135,2673],{"emptyLinePlaceholder":350},[57,162137,162138,162140,162143],{"class":59,"line":162},[57,162139,32144],{"class":136},[57,162141,162142],{"class":70}," print_info",[57,162144,149572],{"class":140},[57,162146,162147],{"class":59,"line":180},[57,162148,162149],{"class":140},"    print_line()\n",[57,162151,162152,162154,162156,162158,162160,162162,162164,162166,162168],{"class":59,"line":186},[57,162153,31496],{"class":81},[57,162155,168],{"class":140},[57,162157,475],{"class":136},[57,162159,156879],{"class":74},[57,162161,1312],{"class":81},[57,162163,80007],{"class":140},[57,162165,1362],{"class":81},[57,162167,668],{"class":74},[57,162169,238],{"class":140},[57,162171,162172,162174,162176,162178,162181,162183,162185,162187,162189],{"class":59,"line":197},[57,162173,31496],{"class":81},[57,162175,168],{"class":140},[57,162177,475],{"class":136},[57,162179,162180],{"class":74},"\"年龄:",[57,162182,1312],{"class":81},[57,162184,70418],{"class":140},[57,162186,1362],{"class":81},[57,162188,668],{"class":74},[57,162190,238],{"class":140},[57,162192,162193],{"class":59,"line":241},[57,162194,162149],{"class":140},[57,162196,162197],{"class":59,"line":249},[57,162198,2673],{"emptyLinePlaceholder":350},[57,162200,162201],{"class":59,"line":262},[57,162202,2673],{"emptyLinePlaceholder":350},[57,162204,162205,162208,162210,162212,162214],{"class":59,"line":281},[57,162206,162207],{"class":140},"print_info(",[57,162209,150085],{"class":74},[57,162211,12708],{"class":140},[57,162213,1066],{"class":81},[57,162215,238],{"class":140},[14,162217,162218],{},"这种方式可以把小功能组合成大功能。",[365,162220,162222],{"id":162221},"_511-参数检查","5.11 参数检查",[14,162224,162225],{},"函数内部可以检查参数是否合法。",[49,162227,162229],{"className":122,"code":162228,"language":124,"meta":46,"style":46},"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",[28,162230,162231,162240,162252,162258,162268,162272,162276,162293,162297,162309,162320,162326],{"__ignoreMap":46},[57,162232,162233,162235,162238],{"class":59,"line":60},[57,162234,32144],{"class":136},[57,162236,162237],{"class":70}," divide",[57,162239,151290],{"class":140},[57,162241,162242,162244,162246,162248,162250],{"class":59,"line":67},[57,162243,3374],{"class":136},[57,162245,11155],{"class":140},[57,162247,3222],{"class":136},[57,162249,4366],{"class":81},[57,162251,4012],{"class":140},[57,162253,162254,162256],{"class":59,"line":144},[57,162255,15024],{"class":136},[57,162257,152369],{"class":81},[57,162259,162260,162262,162264,162266],{"class":59,"line":150},[57,162261,4363],{"class":136},[57,162263,11142],{"class":140},[57,162265,1000],{"class":136},[57,162267,151301],{"class":140},[57,162269,162270],{"class":59,"line":162},[57,162271,2673],{"emptyLinePlaceholder":350},[57,162273,162274],{"class":59,"line":180},[57,162275,2673],{"emptyLinePlaceholder":350},[57,162277,162278,162280,162282,162285,162287,162289,162291],{"class":59,"line":186},[57,162279,161503],{"class":140},[57,162281,156],{"class":136},[57,162283,162284],{"class":140}," divide(",[57,162286,862],{"class":81},[57,162288,12708],{"class":140},[57,162290,226],{"class":81},[57,162292,238],{"class":140},[57,162294,162295],{"class":59,"line":197},[57,162296,2673],{"emptyLinePlaceholder":350},[57,162298,162299,162301,162303,162305,162307],{"class":59,"line":241},[57,162300,1813],{"class":136},[57,162302,161749],{"class":140},[57,162304,39124],{"class":136},[57,162306,39130],{"class":81},[57,162308,4012],{"class":140},[57,162310,162311,162313,162315,162318],{"class":59,"line":249},[57,162312,31496],{"class":81},[57,162314,168],{"class":140},[57,162316,162317],{"class":74},"\"除数不能为0\"",[57,162319,238],{"class":140},[57,162321,162322,162324],{"class":59,"line":262},[57,162323,232],{"class":136},[57,162325,4012],{"class":140},[57,162327,162328,162330],{"class":59,"line":281},[57,162329,31496],{"class":81},[57,162331,76782],{"class":140},[365,162333,162335],{"id":162334},"_512-类型提示","5.12 类型提示",[14,162337,162338],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[49,162340,162342],{"className":122,"code":162341,"language":124,"meta":46,"style":46},"def add(a: int, b: int) -> int:\n    return a + b\n",[28,162343,162344,162367],{"__ignoreMap":46},[57,162345,162346,162348,162350,162353,162355,162358,162360,162363,162365],{"class":59,"line":60},[57,162347,32144],{"class":136},[57,162349,5482],{"class":70},[57,162351,162352],{"class":140},"(a: ",[57,162354,429],{"class":81},[57,162356,162357],{"class":140},", b: ",[57,162359,429],{"class":81},[57,162361,162362],{"class":140},") -> ",[57,162364,429],{"class":81},[57,162366,4012],{"class":140},[57,162368,162369,162371,162373,162375],{"class":59,"line":67},[57,162370,4363],{"class":136},[57,162372,11142],{"class":140},[57,162374,897],{"class":136},[57,162376,151301],{"class":140},[14,162378,162379],{},"字符串参数：",[49,162381,162383],{"className":122,"code":162382,"language":124,"meta":46,"style":46},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[28,162384,162385,162402],{"__ignoreMap":46},[57,162386,162387,162389,162391,162394,162396,162398,162400],{"class":59,"line":60},[57,162388,32144],{"class":136},[57,162390,161193],{"class":70},[57,162392,162393],{"class":140},"(name: ",[57,162395,1585],{"class":81},[57,162397,162362],{"class":140},[57,162399,95883],{"class":81},[57,162401,4012],{"class":140},[57,162403,162404,162406,162408,162410,162412,162414,162416,162418,162420],{"class":59,"line":67},[57,162405,31496],{"class":81},[57,162407,168],{"class":140},[57,162409,475],{"class":136},[57,162411,157251],{"class":74},[57,162413,1312],{"class":81},[57,162415,80007],{"class":140},[57,162417,1362],{"class":81},[57,162419,668],{"class":74},[57,162421,238],{"class":140},[14,162423,162424],{},"列表参数：",[49,162426,162428],{"className":122,"code":162427,"language":124,"meta":46,"style":46},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[28,162429,162430,162449,162457,162469,162478],{"__ignoreMap":46},[57,162431,162432,162434,162437,162440,162442,162445,162447],{"class":59,"line":60},[57,162433,32144],{"class":136},[57,162435,162436],{"class":70}," get_total",[57,162438,162439],{"class":140},"(numbers: list[",[57,162441,429],{"class":81},[57,162443,162444],{"class":140},"]) -> ",[57,162446,429],{"class":81},[57,162448,4012],{"class":140},[57,162450,162451,162453,162455],{"class":59,"line":67},[57,162452,159504],{"class":140},[57,162454,156],{"class":136},[57,162456,47530],{"class":81},[57,162458,162459,162461,162464,162466],{"class":59,"line":144},[57,162460,3474],{"class":136},[57,162462,162463],{"class":140}," number ",[57,162465,26312],{"class":136},[57,162467,162468],{"class":140}," numbers:\n",[57,162470,162471,162473,162475],{"class":59,"line":150},[57,162472,160179],{"class":140},[57,162474,9750],{"class":136},[57,162476,162477],{"class":140}," number\n",[57,162479,162480,162482],{"class":59,"line":162},[57,162481,4363],{"class":136},[57,162483,162484],{"class":140}," total\n",[14,162486,162487],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[365,162489,162491],{"id":162490},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[49,162493,162495],{"className":122,"code":162494,"language":124,"meta":46,"style":46},"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",[28,162496,162497,162507,162511,162515,162523,162534,162544,162554,162564,162574,162578,162582,162591,162613,162617,162621,162630,162636,162656,162668,162679,162683,162692,162703,162708,162712,162716,162725,162731,162750,162762,162772,162776,162787,162797,162801,162809,162820,162824,162828,162832,162840,162845,162859,162863,162875,162880,162892,162897,162909,162914,162926,162936,162940,162946],{"__ignoreMap":46},[57,162498,162499,162502,162504],{"class":59,"line":60},[57,162500,162501],{"class":140},"balance ",[57,162503,156],{"class":136},[57,162505,162506],{"class":81}," 1000\n",[57,162508,162509],{"class":59,"line":67},[57,162510,2673],{"emptyLinePlaceholder":350},[57,162512,162513],{"class":59,"line":144},[57,162514,2673],{"emptyLinePlaceholder":350},[57,162516,162517,162519,162521],{"class":59,"line":150},[57,162518,32144],{"class":136},[57,162520,152230],{"class":70},[57,162522,32150],{"class":140},[57,162524,162525,162527,162529,162532],{"class":59,"line":162},[57,162526,31496],{"class":81},[57,162528,168],{"class":140},[57,162530,162531],{"class":74},"\"====== ATM ======\"",[57,162533,238],{"class":140},[57,162535,162536,162538,162540,162542],{"class":59,"line":180},[57,162537,31496],{"class":81},[57,162539,168],{"class":140},[57,162541,160845],{"class":74},[57,162543,238],{"class":140},[57,162545,162546,162548,162550,162552],{"class":59,"line":186},[57,162547,31496],{"class":81},[57,162549,168],{"class":140},[57,162551,160856],{"class":74},[57,162553,238],{"class":140},[57,162555,162556,162558,162560,162562],{"class":59,"line":197},[57,162557,31496],{"class":81},[57,162559,168],{"class":140},[57,162561,160867],{"class":74},[57,162563,238],{"class":140},[57,162565,162566,162568,162570,162572],{"class":59,"line":241},[57,162567,31496],{"class":81},[57,162569,168],{"class":140},[57,162571,160878],{"class":74},[57,162573,238],{"class":140},[57,162575,162576],{"class":59,"line":249},[57,162577,2673],{"emptyLinePlaceholder":350},[57,162579,162580],{"class":59,"line":262},[57,162581,2673],{"emptyLinePlaceholder":350},[57,162583,162584,162586,162589],{"class":59,"line":281},[57,162585,32144],{"class":136},[57,162587,162588],{"class":70}," show_balance",[57,162590,32150],{"class":140},[57,162592,162593,162595,162597,162599,162602,162604,162607,162609,162611],{"class":59,"line":287},[57,162594,31496],{"class":81},[57,162596,168],{"class":140},[57,162598,475],{"class":136},[57,162600,162601],{"class":74},"\"当前余额:",[57,162603,1312],{"class":81},[57,162605,162606],{"class":140},"balance",[57,162608,1362],{"class":81},[57,162610,157209],{"class":74},[57,162612,238],{"class":140},[57,162614,162615],{"class":59,"line":298},[57,162616,2673],{"emptyLinePlaceholder":350},[57,162618,162619],{"class":59,"line":311},[57,162620,2673],{"emptyLinePlaceholder":350},[57,162622,162623,162625,162628],{"class":59,"line":322},[57,162624,32144],{"class":136},[57,162626,162627],{"class":70}," save_money",[57,162629,32150],{"class":140},[57,162631,162632,162634],{"class":59,"line":1929},[57,162633,162058],{"class":136},[57,162635,150296],{"class":140},[57,162637,162638,162641,162643,162645,162647,162649,162651,162654],{"class":59,"line":1950},[57,162639,162640],{"class":140},"    money ",[57,162642,156],{"class":136},[57,162644,109994],{"class":81},[57,162646,168],{"class":140},[57,162648,54018],{"class":81},[57,162650,168],{"class":140},[57,162652,162653],{"class":74},"\"请输入存款金额:\"",[57,162655,259],{"class":140},[57,162657,162658,162660,162662,162664,162666],{"class":59,"line":1955},[57,162659,3374],{"class":136},[57,162661,150339],{"class":140},[57,162663,1870],{"class":136},[57,162665,4366],{"class":81},[57,162667,4012],{"class":140},[57,162669,162670,162672,162674,162677],{"class":59,"line":1969},[57,162671,32648],{"class":81},[57,162673,168],{"class":140},[57,162675,162676],{"class":74},"\"金额必须大于0\"",[57,162678,238],{"class":140},[57,162680,162681],{"class":59,"line":1974},[57,162682,152558],{"class":136},[57,162684,162685,162688,162690],{"class":59,"line":2001},[57,162686,162687],{"class":140},"    balance ",[57,162689,9750],{"class":136},[57,162691,150372],{"class":140},[57,162693,162694,162696,162698,162701],{"class":59,"line":2006},[57,162695,31496],{"class":81},[57,162697,168],{"class":140},[57,162699,162700],{"class":74},"\"存款成功\"",[57,162702,238],{"class":140},[57,162704,162705],{"class":59,"line":2023},[57,162706,162707],{"class":140},"    show_balance()\n",[57,162709,162710],{"class":59,"line":2028},[57,162711,2673],{"emptyLinePlaceholder":350},[57,162713,162714],{"class":59,"line":2033},[57,162715,2673],{"emptyLinePlaceholder":350},[57,162717,162718,162720,162723],{"class":59,"line":2038},[57,162719,32144],{"class":136},[57,162721,162722],{"class":70}," withdraw_money",[57,162724,32150],{"class":140},[57,162726,162727,162729],{"class":59,"line":2052},[57,162728,162058],{"class":136},[57,162730,150296],{"class":140},[57,162732,162733,162735,162737,162739,162741,162743,162745,162748],{"class":59,"line":2057},[57,162734,162640],{"class":140},[57,162736,156],{"class":136},[57,162738,109994],{"class":81},[57,162740,168],{"class":140},[57,162742,54018],{"class":81},[57,162744,168],{"class":140},[57,162746,162747],{"class":74},"\"请输入取款金额:\"",[57,162749,259],{"class":140},[57,162751,162752,162754,162756,162758,162760],{"class":59,"line":2850},[57,162753,3374],{"class":136},[57,162755,150339],{"class":140},[57,162757,1870],{"class":136},[57,162759,4366],{"class":81},[57,162761,4012],{"class":140},[57,162763,162764,162766,162768,162770],{"class":59,"line":2864},[57,162765,32648],{"class":81},[57,162767,168],{"class":140},[57,162769,162676],{"class":74},[57,162771,238],{"class":140},[57,162773,162774],{"class":59,"line":2872},[57,162775,152558],{"class":136},[57,162777,162778,162780,162782,162784],{"class":59,"line":2877},[57,162779,3374],{"class":136},[57,162781,150339],{"class":140},[57,162783,223],{"class":136},[57,162785,162786],{"class":140}," balance:\n",[57,162788,162789,162791,162793,162795],{"class":59,"line":2883},[57,162790,32648],{"class":81},[57,162792,168],{"class":140},[57,162794,150434],{"class":74},[57,162796,238],{"class":140},[57,162798,162799],{"class":59,"line":2889},[57,162800,152558],{"class":136},[57,162802,162803,162805,162807],{"class":59,"line":2894},[57,162804,162687],{"class":140},[57,162806,150449],{"class":136},[57,162808,150372],{"class":140},[57,162810,162811,162813,162815,162818],{"class":59,"line":8221},[57,162812,31496],{"class":81},[57,162814,168],{"class":140},[57,162816,162817],{"class":74},"\"取款成功\"",[57,162819,238],{"class":140},[57,162821,162822],{"class":59,"line":8245},[57,162823,162707],{"class":140},[57,162825,162826],{"class":59,"line":8250},[57,162827,2673],{"emptyLinePlaceholder":350},[57,162829,162830],{"class":59,"line":8256},[57,162831,2673],{"emptyLinePlaceholder":350},[57,162833,162834,162836,162838],{"class":59,"line":8283},[57,162835,108860],{"class":136},[57,162837,95489],{"class":81},[57,162839,4012],{"class":140},[57,162841,162842],{"class":59,"line":8288},[57,162843,162844],{"class":140},"    show_menu()\n",[57,162846,162847,162849,162851,162853,162855,162857],{"class":59,"line":8294},[57,162848,160889],{"class":140},[57,162850,156],{"class":136},[57,162852,60802],{"class":81},[57,162854,168],{"class":140},[57,162856,153270],{"class":74},[57,162858,238],{"class":140},[57,162860,162861],{"class":59,"line":8306},[57,162862,2673],{"emptyLinePlaceholder":350},[57,162864,162865,162867,162869,162871,162873],{"class":59,"line":8318},[57,162866,3374],{"class":136},[57,162868,153283],{"class":140},[57,162870,3222],{"class":136},[57,162872,153288],{"class":74},[57,162874,4012],{"class":140},[57,162876,162877],{"class":59,"line":8330},[57,162878,162879],{"class":140},"        show_balance()\n",[57,162881,162882,162884,162886,162888,162890],{"class":59,"line":9989},[57,162883,39490],{"class":136},[57,162885,153283],{"class":140},[57,162887,3222],{"class":136},[57,162889,153307],{"class":74},[57,162891,4012],{"class":140},[57,162893,162894],{"class":59,"line":10014},[57,162895,162896],{"class":140},"        save_money()\n",[57,162898,162899,162901,162903,162905,162907],{"class":59,"line":10037},[57,162900,39490],{"class":136},[57,162902,153283],{"class":140},[57,162904,3222],{"class":136},[57,162906,153325],{"class":74},[57,162908,4012],{"class":140},[57,162910,162911],{"class":59,"line":10061},[57,162912,162913],{"class":140},"        withdraw_money()\n",[57,162915,162916,162918,162920,162922,162924],{"class":59,"line":10066},[57,162917,39490],{"class":136},[57,162919,153283],{"class":140},[57,162921,3222],{"class":136},[57,162923,153379],{"class":74},[57,162925,4012],{"class":140},[57,162927,162928,162930,162932,162934],{"class":59,"line":10071},[57,162929,32648],{"class":81},[57,162931,168],{"class":140},[57,162933,153390],{"class":74},[57,162935,238],{"class":140},[57,162937,162938],{"class":59,"line":10076},[57,162939,31824],{"class":136},[57,162941,162942,162944],{"class":59,"line":10085},[57,162943,158219],{"class":136},[57,162945,4012],{"class":140},[57,162947,162948,162950,162952,162954],{"class":59,"line":10090},[57,162949,32648],{"class":81},[57,162951,168],{"class":140},[57,162953,153411],{"class":74},[57,162955,238],{"class":140},[14,162957,162958],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[365,162960,162962],{"id":162961},"_514-易错点","5.14 易错点",[377,162964,162965,162968,162971,162976,162981,162984],{},[380,162966,162967],{},"函数定义后必须调用才会执行。",[380,162969,162970],{},"函数名后面有括号才是调用。",[380,162972,162973,162975],{},[28,162974,17318],{}," 后面的代码不会执行。",[380,162977,162978,162979,28654],{},"没有返回值的函数默认返回 ",[28,162980,95883],{},[380,162982,162983],{},"局部变量不能在函数外部访问。",[380,162985,162986,162987,162989],{},"不要滥用 ",[28,162988,162023],{},"，更好的方式是让函数返回新值。",[14,162991,162992,162993,162995],{},"例如不用 ",[28,162994,162023],{}," 改写存款：",[49,162997,162999],{"className":122,"code":162998,"language":124,"meta":46,"style":46},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[28,163000,163001,163010,163021,163025,163029,163037,163050],{"__ignoreMap":46},[57,163002,163003,163005,163007],{"class":59,"line":60},[57,163004,32144],{"class":136},[57,163006,162627],{"class":70},[57,163008,163009],{"class":140},"(balance, money):\n",[57,163011,163012,163014,163017,163019],{"class":59,"line":67},[57,163013,4363],{"class":136},[57,163015,163016],{"class":140}," balance ",[57,163018,897],{"class":136},[57,163020,150372],{"class":140},[57,163022,163023],{"class":59,"line":144},[57,163024,2673],{"emptyLinePlaceholder":350},[57,163026,163027],{"class":59,"line":150},[57,163028,2673],{"emptyLinePlaceholder":350},[57,163030,163031,163033,163035],{"class":59,"line":162},[57,163032,162501],{"class":140},[57,163034,156],{"class":136},[57,163036,162506],{"class":81},[57,163038,163039,163041,163043,163046,163048],{"class":59,"line":180},[57,163040,162501],{"class":140},[57,163042,156],{"class":136},[57,163044,163045],{"class":140}," save_money(balance, ",[57,163047,1996],{"class":81},[57,163049,238],{"class":140},[57,163051,163052,163054],{"class":59,"line":186},[57,163053,165],{"class":81},[57,163055,163056],{"class":140},"(balance)\n",[365,163058,163060],{"id":163059},"_515-本章练习","5.15 本章练习",[377,163062,163063,163070,163076,163082,163088],{},[380,163064,163065,163066,163069],{},"定义函数 ",[28,163067,163068],{},"print_student(name, age)","，输出学生信息。",[380,163071,163065,163072,163075],{},[28,163073,163074],{},"get_max(a, b, c)","，返回三个数中的最大值。",[380,163077,163065,163078,163081],{},[28,163079,163080],{},"is_even(num)","，判断一个数是否为偶数。",[380,163083,163065,163084,163087],{},[28,163085,163086],{},"calculate_bmi(weight, height)","，返回 BMI。",[380,163089,163090],{},"把第 4 章的菜单程序拆分成多个函数。",[342,163092,163093],{},"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":46,"searchDepth":67,"depth":67,"links":163095},[163096,163097,163098,163099,163100,163101,163102,163103,163104,163108,163109,163110,163111,163112,163113],{"id":161116,"depth":67,"text":161117},{"id":161157,"depth":67,"text":161158},{"id":161247,"depth":67,"text":161248},{"id":161328,"depth":67,"text":161329},{"id":161461,"depth":67,"text":161462},{"id":161583,"depth":67,"text":161584},{"id":161705,"depth":67,"text":161706},{"id":161782,"depth":67,"text":161783},{"id":161904,"depth":67,"text":161905,"children":163105},[163106,163107],{"id":161908,"depth":144,"text":161909},{"id":161966,"depth":144,"text":161967},{"id":162095,"depth":67,"text":162096},{"id":162221,"depth":67,"text":162222},{"id":162334,"depth":67,"text":162335},{"id":162490,"depth":67,"text":162491},{"id":162961,"depth":67,"text":162962},{"id":163059,"depth":67,"text":163060},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161108,"description":347},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163120,"title":163121,"body":163122,"description":347,"extension":348,"meta":166166,"navigation":350,"path":166167,"seo":166168,"stem":166169,"__hash__":166170},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163123,"toc":166147},[163124,163127,163131,163134,163137,163241,163244,163248,163251,163331,163334,163338,163341,163401,163404,163440,163443,163458,163462,163535,163538,163593,163596,163666,163669,163753,163763,163821,163825,163870,163873,163899,163902,164008,164012,164015,164057,164060,164124,164127,164131,164134,164195,164198,164228,164231,164269,164273,164276,164285,164288,164412,164415,164456,164460,164463,164474,164514,164517,164532,164537,164540,164607,164610,164700,164704,164707,164755,164758,164785,164787,164817,164820,164840,164843,164874,164877,164910,164914,164917,164941,164944,164968,164971,164995,164999,165002,165132,165135,165215,165218,165293,165297,165300,165350,165353,165395,165398,165422,165424,165448,165451,165506,165509,165575,165579,165582,165585,165623,165626,165679,165682,165728,165731,165764,165767,165771,166090,166094,166123,166127,166144],[10,163125,163121],{"id":163126},"_6-数据容器",[365,163128,163130],{"id":163129},"_61-什么是数据容器","6.1 什么是数据容器",[14,163132,163133],{},"数据容器用于一次保存多个数据。",[14,163135,163136],{},"常见容器：",[557,163138,163139,163156],{},[560,163140,163141],{},[563,163142,163143,163145,163148,163151,163154],{},[566,163144,26040],{},[566,163146,163147],{},"是否有序",[566,163149,163150],{},"是否可变",[566,163152,163153],{},"是否允许重复",[566,163155,27761],{},[603,163157,163158,163176,163192,163207,163224],{},[563,163159,163160,163163,163166,163169,163172],{},[608,163161,163162],{},"list列表",[608,163164,163165],{},"有序",[608,163167,163168],{},"可变",[608,163170,163171],{},"允许",[608,163173,163174],{},[28,163175,155454],{},[563,163177,163178,163181,163183,163186,163188],{},[608,163179,163180],{},"tuple元组",[608,163182,163165],{},[608,163184,163185],{},"不可变",[608,163187,163171],{},[608,163189,163190],{},[28,163191,155467],{},[563,163193,163194,163197,163199,163201,163203],{},[608,163195,163196],{},"str字符串",[608,163198,163165],{},[608,163200,163185],{},[608,163202,163171],{},[608,163204,163205],{},[28,163206,156077],{},[563,163208,163209,163212,163215,163217,163220],{},[608,163210,163211],{},"set集合",[608,163213,163214],{},"无序",[608,163216,163168],{},[608,163218,163219],{},"不允许",[608,163221,163222],{},[28,163223,155492],{},[563,163225,163226,163229,163231,163233,163236],{},[608,163227,163228],{},"dict字典",[608,163230,163165],{},[608,163232,163168],{},[608,163234,163235],{},"key不允许重复",[608,163237,163238],{},[28,163239,163240],{},"{\"name\": \"小明\"}",[14,163242,163243],{},"Python 3.7 之后，字典保持插入顺序。",[365,163245,163247],{"id":163246},"_62-列表list","6.2 列表list",[14,163249,163250],{},"列表用于保存一组有顺序的数据。",[49,163252,163254],{"className":122,"code":163253,"language":124,"meta":46,"style":46},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[28,163255,163256,163276,163301,163322],{"__ignoreMap":46},[57,163257,163258,163260,163262,163264,163266,163268,163270,163272,163274],{"class":59,"line":60},[57,163259,160577],{"class":140},[57,163261,156],{"class":136},[57,163263,52423],{"class":140},[57,163265,150085],{"class":74},[57,163267,12708],{"class":140},[57,163269,151133],{"class":74},[57,163271,12708],{"class":140},[57,163273,159928],{"class":74},[57,163275,33443],{"class":140},[57,163277,163278,163281,163283,163285,163287,163289,163291,163293,163295,163297,163299],{"class":59,"line":67},[57,163279,163280],{"class":140},"numbers ",[57,163282,156],{"class":136},[57,163284,52423],{"class":140},[57,163286,635],{"class":81},[57,163288,12708],{"class":140},[57,163290,498],{"class":81},[57,163292,12708],{"class":140},[57,163294,270],{"class":81},[57,163296,12708],{"class":140},[57,163298,710],{"class":81},[57,163300,33443],{"class":140},[57,163302,163303,163306,163308,163310,163312,163314,163316,163318,163320],{"class":59,"line":144},[57,163304,163305],{"class":140},"mixed ",[57,163307,156],{"class":136},[57,163309,52423],{"class":140},[57,163311,150085],{"class":74},[57,163313,12708],{"class":140},[57,163315,1066],{"class":81},[57,163317,12708],{"class":140},[57,163319,31673],{"class":81},[57,163321,33443],{"class":140},[57,163323,163324,163327,163329],{"class":59,"line":150},[57,163325,163326],{"class":140},"empty ",[57,163328,156],{"class":136},[57,163330,52035],{"class":140},[14,163332,163333],{},"推荐一个列表中保存同类数据，代码更清晰。",[365,163335,163337],{"id":163336},"_63-列表索引","6.3 列表索引",[14,163339,163340],{},"正向索引从 0 开始：",[49,163342,163344],{"className":122,"code":163343,"language":124,"meta":46,"style":46},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[28,163345,163346,163366,163370,163381,163391],{"__ignoreMap":46},[57,163347,163348,163350,163352,163354,163356,163358,163360,163362,163364],{"class":59,"line":60},[57,163349,160577],{"class":140},[57,163351,156],{"class":136},[57,163353,52423],{"class":140},[57,163355,150085],{"class":74},[57,163357,12708],{"class":140},[57,163359,151133],{"class":74},[57,163361,12708],{"class":140},[57,163363,159928],{"class":74},[57,163365,33443],{"class":140},[57,163367,163368],{"class":59,"line":67},[57,163369,2673],{"emptyLinePlaceholder":350},[57,163371,163372,163374,163377,163379],{"class":59,"line":144},[57,163373,165],{"class":81},[57,163375,163376],{"class":140},"(names[",[57,163378,226],{"class":81},[57,163380,4930],{"class":140},[57,163382,163383,163385,163387,163389],{"class":59,"line":150},[57,163384,165],{"class":81},[57,163386,163376],{"class":140},[57,163388,635],{"class":81},[57,163390,4930],{"class":140},[57,163392,163393,163395,163397,163399],{"class":59,"line":162},[57,163394,165],{"class":81},[57,163396,163376],{"class":140},[57,163398,498],{"class":81},[57,163400,4930],{"class":140},[14,163402,163403],{},"反向索引从 -1 开始：",[49,163405,163407],{"className":122,"code":163406,"language":124,"meta":46,"style":46},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[28,163408,163409,163425],{"__ignoreMap":46},[57,163410,163411,163413,163415,163417,163419,163422],{"class":59,"line":60},[57,163412,165],{"class":81},[57,163414,163376],{"class":140},[57,163416,948],{"class":136},[57,163418,635],{"class":81},[57,163420,163421],{"class":140},"])  ",[57,163423,163424],{"class":63},"# 小刚\n",[57,163426,163427,163429,163431,163433,163435,163437],{"class":59,"line":67},[57,163428,165],{"class":81},[57,163430,163376],{"class":140},[57,163432,948],{"class":136},[57,163434,498],{"class":81},[57,163436,163421],{"class":140},[57,163438,163439],{"class":63},"# 小红\n",[14,163441,163442],{},"索引越界会报错：",[49,163444,163446],{"className":122,"code":163445,"language":124,"meta":46,"style":46},"print(names[3])\n",[28,163447,163448],{"__ignoreMap":46},[57,163449,163450,163452,163454,163456],{"class":59,"line":60},[57,163451,165],{"class":81},[57,163453,163376],{"class":140},[57,163455,270],{"class":81},[57,163457,4930],{"class":140},[365,163459,163461],{"id":163460},"_64-列表常用方法","6.4 列表常用方法",[49,163463,163465],{"className":122,"code":163464,"language":124,"meta":46,"style":46},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[28,163466,163467,163483,163487,163496,163510,163524,163528],{"__ignoreMap":46},[57,163468,163469,163471,163473,163475,163477,163479,163481],{"class":59,"line":60},[57,163470,160577],{"class":140},[57,163472,156],{"class":136},[57,163474,52423],{"class":140},[57,163476,150085],{"class":74},[57,163478,12708],{"class":140},[57,163480,151133],{"class":74},[57,163482,33443],{"class":140},[57,163484,163485],{"class":59,"line":67},[57,163486,2673],{"emptyLinePlaceholder":350},[57,163488,163489,163492,163494],{"class":59,"line":144},[57,163490,163491],{"class":140},"names.append(",[57,163493,159928],{"class":74},[57,163495,238],{"class":140},[57,163497,163498,163501,163503,163505,163508],{"class":59,"line":150},[57,163499,163500],{"class":140},"names.insert(",[57,163502,635],{"class":81},[57,163504,12708],{"class":140},[57,163506,163507],{"class":74},"\"小李\"",[57,163509,238],{"class":140},[57,163511,163512,163515,163517,163519,163522],{"class":59,"line":162},[57,163513,163514],{"class":140},"names.extend([",[57,163516,8956],{"class":74},[57,163518,12708],{"class":140},[57,163520,163521],{"class":74},"\"小赵\"",[57,163523,4930],{"class":140},[57,163525,163526],{"class":59,"line":180},[57,163527,2673],{"emptyLinePlaceholder":350},[57,163529,163530,163532],{"class":59,"line":186},[57,163531,165],{"class":81},[57,163533,163534],{"class":140},"(names)\n",[14,163536,163537],{},"删除元素：",[49,163539,163541],{"className":122,"code":163540,"language":124,"meta":46,"style":46},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[28,163542,163543,163552,163562,163576,163588],{"__ignoreMap":46},[57,163544,163545,163548,163550],{"class":59,"line":60},[57,163546,163547],{"class":140},"names.remove(",[57,163549,151133],{"class":74},[57,163551,238],{"class":140},[57,163553,163554,163557,163559],{"class":59,"line":67},[57,163555,163556],{"class":140},"last ",[57,163558,156],{"class":136},[57,163560,163561],{"class":140}," names.pop()\n",[57,163563,163564,163567,163569,163572,163574],{"class":59,"line":144},[57,163565,163566],{"class":140},"first ",[57,163568,156],{"class":136},[57,163570,163571],{"class":140}," names.pop(",[57,163573,226],{"class":81},[57,163575,238],{"class":140},[57,163577,163578,163581,163584,163586],{"class":59,"line":150},[57,163579,163580],{"class":136},"del",[57,163582,163583],{"class":140}," names[",[57,163585,226],{"class":81},[57,163587,33443],{"class":140},[57,163589,163590],{"class":59,"line":162},[57,163591,163592],{"class":140},"names.clear()\n",[14,163594,163595],{},"查询和统计：",[49,163597,163599],{"className":122,"code":163598,"language":124,"meta":46,"style":46},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[28,163600,163601,163629,163633,163644,163655],{"__ignoreMap":46},[57,163602,163603,163605,163607,163609,163611,163613,163615,163617,163619,163621,163623,163625,163627],{"class":59,"line":60},[57,163604,163280],{"class":140},[57,163606,156],{"class":136},[57,163608,52423],{"class":140},[57,163610,635],{"class":81},[57,163612,12708],{"class":140},[57,163614,498],{"class":81},[57,163616,12708],{"class":140},[57,163618,270],{"class":81},[57,163620,12708],{"class":140},[57,163622,498],{"class":81},[57,163624,12708],{"class":140},[57,163626,710],{"class":81},[57,163628,33443],{"class":140},[57,163630,163631],{"class":59,"line":67},[57,163632,2673],{"emptyLinePlaceholder":350},[57,163634,163635,163637,163640,163642],{"class":59,"line":144},[57,163636,165],{"class":81},[57,163638,163639],{"class":140},"(numbers.index(",[57,163641,270],{"class":81},[57,163643,259],{"class":140},[57,163645,163646,163648,163651,163653],{"class":59,"line":150},[57,163647,165],{"class":81},[57,163649,163650],{"class":140},"(numbers.count(",[57,163652,498],{"class":81},[57,163654,259],{"class":140},[57,163656,163657,163659,163661,163663],{"class":59,"line":162},[57,163658,165],{"class":81},[57,163660,168],{"class":140},[57,163662,7631],{"class":81},[57,163664,163665],{"class":140},"(numbers))\n",[14,163667,163668],{},"排序：",[49,163670,163672],{"className":122,"code":163671,"language":124,"meta":46,"style":46},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[28,163673,163674,163698,163702,163707,163714,163718,163732,163738,163742,163747],{"__ignoreMap":46},[57,163675,163676,163678,163680,163682,163684,163686,163688,163690,163692,163694,163696],{"class":59,"line":60},[57,163677,163280],{"class":140},[57,163679,156],{"class":136},[57,163681,52423],{"class":140},[57,163683,270],{"class":81},[57,163685,12708],{"class":140},[57,163687,635],{"class":81},[57,163689,12708],{"class":140},[57,163691,736],{"class":81},[57,163693,12708],{"class":140},[57,163695,498],{"class":81},[57,163697,33443],{"class":140},[57,163699,163700],{"class":59,"line":67},[57,163701,2673],{"emptyLinePlaceholder":350},[57,163703,163704],{"class":59,"line":144},[57,163705,163706],{"class":140},"numbers.sort()\n",[57,163708,163709,163711],{"class":59,"line":150},[57,163710,165],{"class":81},[57,163712,163713],{"class":140},"(numbers)\n",[57,163715,163716],{"class":59,"line":162},[57,163717,2673],{"emptyLinePlaceholder":350},[57,163719,163720,163723,163726,163728,163730],{"class":59,"line":180},[57,163721,163722],{"class":140},"numbers.sort(",[57,163724,163725],{"class":5489},"reverse",[57,163727,156],{"class":136},[57,163729,31673],{"class":81},[57,163731,238],{"class":140},[57,163733,163734,163736],{"class":59,"line":186},[57,163735,165],{"class":81},[57,163737,163713],{"class":140},[57,163739,163740],{"class":59,"line":197},[57,163741,2673],{"emptyLinePlaceholder":350},[57,163743,163744],{"class":59,"line":241},[57,163745,163746],{"class":140},"numbers.reverse()\n",[57,163748,163749,163751],{"class":59,"line":249},[57,163750,165],{"class":81},[57,163752,163713],{"class":140},[14,163754,163755,163758,163759,163762],{},[28,163756,163757],{},"sort()"," 会修改原列表，",[28,163760,163761],{},"sorted()"," 返回新列表。",[49,163764,163766],{"className":122,"code":163765,"language":124,"meta":46,"style":46},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[28,163767,163768,163792,163804,163808,163814],{"__ignoreMap":46},[57,163769,163770,163772,163774,163776,163778,163780,163782,163784,163786,163788,163790],{"class":59,"line":60},[57,163771,163280],{"class":140},[57,163773,156],{"class":136},[57,163775,52423],{"class":140},[57,163777,270],{"class":81},[57,163779,12708],{"class":140},[57,163781,635],{"class":81},[57,163783,12708],{"class":140},[57,163785,736],{"class":81},[57,163787,12708],{"class":140},[57,163789,498],{"class":81},[57,163791,33443],{"class":140},[57,163793,163794,163797,163799,163802],{"class":59,"line":67},[57,163795,163796],{"class":140},"new_numbers ",[57,163798,156],{"class":136},[57,163800,163801],{"class":81}," sorted",[57,163803,163713],{"class":140},[57,163805,163806],{"class":59,"line":144},[57,163807,2673],{"emptyLinePlaceholder":350},[57,163809,163810,163812],{"class":59,"line":150},[57,163811,165],{"class":81},[57,163813,163713],{"class":140},[57,163815,163816,163818],{"class":59,"line":162},[57,163817,165],{"class":81},[57,163819,163820],{"class":140},"(new_numbers)\n",[365,163822,163824],{"id":163823},"_65-列表遍历","6.5 列表遍历",[49,163826,163828],{"className":122,"code":163827,"language":124,"meta":46,"style":46},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[28,163829,163830,163850,163854,163864],{"__ignoreMap":46},[57,163831,163832,163834,163836,163838,163840,163842,163844,163846,163848],{"class":59,"line":60},[57,163833,160577],{"class":140},[57,163835,156],{"class":136},[57,163837,52423],{"class":140},[57,163839,150085],{"class":74},[57,163841,12708],{"class":140},[57,163843,151133],{"class":74},[57,163845,12708],{"class":140},[57,163847,159928],{"class":74},[57,163849,33443],{"class":140},[57,163851,163852],{"class":59,"line":67},[57,163853,2673],{"emptyLinePlaceholder":350},[57,163855,163856,163858,163860,163862],{"class":59,"line":144},[57,163857,3298],{"class":136},[57,163859,160613],{"class":140},[57,163861,26312],{"class":136},[57,163863,160618],{"class":140},[57,163865,163866,163868],{"class":59,"line":150},[57,163867,31496],{"class":81},[57,163869,150857],{"class":140},[14,163871,163872],{},"需要索引时：",[49,163874,163876],{"className":122,"code":163875,"language":124,"meta":46,"style":46},"for index, name in enumerate(names):\n    print(index, name)\n",[28,163877,163878,163892],{"__ignoreMap":46},[57,163879,163880,163882,163885,163887,163889],{"class":59,"line":60},[57,163881,3298],{"class":136},[57,163883,163884],{"class":140}," index, name ",[57,163886,26312],{"class":136},[57,163888,31803],{"class":81},[57,163890,163891],{"class":140},"(names):\n",[57,163893,163894,163896],{"class":59,"line":67},[57,163895,31496],{"class":81},[57,163897,163898],{"class":140},"(index, name)\n",[14,163900,163901],{},"统计总分：",[49,163903,163905],{"className":122,"code":163904,"language":124,"meta":46,"style":46},"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",[28,163906,163907,163932,163940,163944,163955,163963,163967,163984],{"__ignoreMap":46},[57,163908,163909,163912,163914,163916,163918,163920,163922,163924,163926,163928,163930],{"class":59,"line":60},[57,163910,163911],{"class":140},"scores ",[57,163913,156],{"class":136},[57,163915,52423],{"class":140},[57,163917,1278],{"class":81},[57,163919,12708],{"class":140},[57,163921,1152],{"class":81},[57,163923,12708],{"class":140},[57,163925,671],{"class":81},[57,163927,12708],{"class":140},[57,163929,977],{"class":81},[57,163931,33443],{"class":140},[57,163933,163934,163936,163938],{"class":59,"line":67},[57,163935,157457],{"class":140},[57,163937,156],{"class":136},[57,163939,47530],{"class":81},[57,163941,163942],{"class":59,"line":144},[57,163943,2673],{"emptyLinePlaceholder":350},[57,163945,163946,163948,163950,163952],{"class":59,"line":150},[57,163947,3298],{"class":136},[57,163949,157980],{"class":140},[57,163951,26312],{"class":136},[57,163953,163954],{"class":140}," scores:\n",[57,163956,163957,163959,163961],{"class":59,"line":162},[57,163958,159504],{"class":140},[57,163960,9750],{"class":136},[57,163962,1861],{"class":140},[57,163964,163965],{"class":59,"line":180},[57,163966,2673],{"emptyLinePlaceholder":350},[57,163968,163969,163972,163974,163977,163979,163981],{"class":59,"line":186},[57,163970,163971],{"class":140},"avg ",[57,163973,156],{"class":136},[57,163975,163976],{"class":140}," total ",[57,163978,1000],{"class":136},[57,163980,7604],{"class":81},[57,163982,163983],{"class":140},"(scores)\n",[57,163985,163986,163988,163990,163992,163995,163997,164000,164002,164004,164006],{"class":59,"line":197},[57,163987,165],{"class":81},[57,163989,168],{"class":140},[57,163991,475],{"class":136},[57,163993,163994],{"class":74},"\"平均分:",[57,163996,1312],{"class":81},[57,163998,163999],{"class":140},"avg",[57,164001,157356],{"class":136},[57,164003,1362],{"class":81},[57,164005,668],{"class":74},[57,164007,238],{"class":140},[365,164009,164011],{"id":164010},"_66-元组tuple","6.6 元组tuple",[14,164013,164014],{},"元组和列表类似，但不可修改。",[49,164016,164018],{"className":122,"code":164017,"language":124,"meta":46,"style":46},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[28,164019,164020,164037],{"__ignoreMap":46},[57,164021,164022,164025,164027,164029,164031,164033,164035],{"class":59,"line":60},[57,164023,164024],{"class":140},"point ",[57,164026,156],{"class":136},[57,164028,1934],{"class":140},[57,164030,862],{"class":81},[57,164032,12708],{"class":140},[57,164034,1116],{"class":81},[57,164036,238],{"class":140},[57,164038,164039,164041,164043,164045,164047,164049,164051,164053,164055],{"class":59,"line":67},[57,164040,116511],{"class":140},[57,164042,156],{"class":136},[57,164044,1934],{"class":140},[57,164046,150085],{"class":74},[57,164048,12708],{"class":140},[57,164050,1066],{"class":81},[57,164052,12708],{"class":140},[57,164054,69466],{"class":74},[57,164056,238],{"class":140},[14,164058,164059],{},"单元素元组必须加逗号：",[49,164061,164063],{"className":122,"code":164062,"language":124,"meta":46,"style":46},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[28,164064,164065,164079,164092,164096,164110],{"__ignoreMap":46},[57,164066,164067,164070,164072,164074,164076],{"class":59,"line":60},[57,164068,164069],{"class":140},"t1 ",[57,164071,156],{"class":136},[57,164073,1934],{"class":140},[57,164075,862],{"class":81},[57,164077,164078],{"class":140},",)\n",[57,164080,164081,164084,164086,164088,164090],{"class":59,"line":67},[57,164082,164083],{"class":140},"t2 ",[57,164085,156],{"class":136},[57,164087,1934],{"class":140},[57,164089,862],{"class":81},[57,164091,238],{"class":140},[57,164093,164094],{"class":59,"line":144},[57,164095,2673],{"emptyLinePlaceholder":350},[57,164097,164098,164100,164102,164104,164107],{"class":59,"line":150},[57,164099,165],{"class":81},[57,164101,168],{"class":140},[57,164103,103304],{"class":81},[57,164105,164106],{"class":140},"(t1))  ",[57,164108,164109],{"class":63},"# tuple\n",[57,164111,164112,164114,164116,164118,164121],{"class":59,"line":162},[57,164113,165],{"class":81},[57,164115,168],{"class":140},[57,164117,103304],{"class":81},[57,164119,164120],{"class":140},"(t2))  ",[57,164122,164123],{"class":63},"# int\n",[14,164125,164126],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[365,164128,164130],{"id":164129},"_67-字符串str","6.7 字符串str",[14,164132,164133],{},"字符串也是序列，可以索引、切片和遍历。",[49,164135,164137],{"className":122,"code":164136,"language":124,"meta":46,"style":46},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[28,164138,164139,164147,164151,164162,164174,164178,164189],{"__ignoreMap":46},[57,164140,164141,164143,164145],{"class":59,"line":60},[57,164142,156641],{"class":140},[57,164144,156],{"class":136},[57,164146,159878],{"class":74},[57,164148,164149],{"class":59,"line":67},[57,164150,2673],{"emptyLinePlaceholder":350},[57,164152,164153,164155,164158,164160],{"class":59,"line":144},[57,164154,165],{"class":81},[57,164156,164157],{"class":140},"(text[",[57,164159,226],{"class":81},[57,164161,4930],{"class":140},[57,164163,164164,164166,164168,164170,164172],{"class":59,"line":150},[57,164165,165],{"class":81},[57,164167,164157],{"class":140},[57,164169,948],{"class":136},[57,164171,635],{"class":81},[57,164173,4930],{"class":140},[57,164175,164176],{"class":59,"line":162},[57,164177,2673],{"emptyLinePlaceholder":350},[57,164179,164180,164182,164184,164186],{"class":59,"line":180},[57,164181,3298],{"class":136},[57,164183,159889],{"class":140},[57,164185,26312],{"class":136},[57,164187,164188],{"class":140}," text:\n",[57,164190,164191,164193],{"class":59,"line":186},[57,164192,31496],{"class":81},[57,164194,159900],{"class":140},[14,164196,164197],{},"字符串不可变：",[49,164199,164201],{"className":122,"code":164200,"language":124,"meta":46,"style":46},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[28,164202,164203,164211],{"__ignoreMap":46},[57,164204,164205,164207,164209],{"class":59,"line":60},[57,164206,156641],{"class":140},[57,164208,156],{"class":136},[57,164210,159878],{"class":74},[57,164212,164213,164216,164218,164220,164222,164225],{"class":59,"line":67},[57,164214,164215],{"class":140},"text[",[57,164217,226],{"class":81},[57,164219,4716],{"class":140},[57,164221,156],{"class":136},[57,164223,164224],{"class":74}," \"P\"",[57,164226,164227],{"class":63},"  # 报错\n",[14,164229,164230],{},"如果要得到新字符串：",[49,164232,164234],{"className":122,"code":164233,"language":124,"meta":46,"style":46},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[28,164235,164236,164244,164262],{"__ignoreMap":46},[57,164237,164238,164240,164242],{"class":59,"line":60},[57,164239,156641],{"class":140},[57,164241,156],{"class":136},[57,164243,159878],{"class":74},[57,164245,164246,164248,164250,164252,164254,164257,164259],{"class":59,"line":67},[57,164247,156641],{"class":140},[57,164249,156],{"class":136},[57,164251,164224],{"class":74},[57,164253,45763],{"class":136},[57,164255,164256],{"class":140}," text[",[57,164258,635],{"class":81},[57,164260,164261],{"class":140},":]\n",[57,164263,164264,164266],{"class":59,"line":144},[57,164265,165],{"class":81},[57,164267,164268],{"class":140},"(text)\n",[365,164270,164272],{"id":164271},"_68-切片","6.8 切片",[14,164274,164275],{},"切片用于从序列中取一部分。",[49,164277,164279],{"className":122,"code":164278,"language":124,"meta":46,"style":46},"序列[开始:结束:步长]\n",[28,164280,164281],{"__ignoreMap":46},[57,164282,164283],{"class":59,"line":60},[57,164284,164278],{"class":140},[14,164286,164287],{},"结束位置不包含。",[49,164289,164291],{"className":122,"code":164290,"language":124,"meta":46,"style":46},"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",[28,164292,164293,164330,164334,164353,164368,164382,164396],{"__ignoreMap":46},[57,164294,164295,164298,164300,164302,164304,164306,164308,164310,164312,164314,164316,164318,164320,164322,164324,164326,164328],{"class":59,"line":60},[57,164296,164297],{"class":140},"nums ",[57,164299,156],{"class":136},[57,164301,52423],{"class":140},[57,164303,226],{"class":81},[57,164305,12708],{"class":140},[57,164307,635],{"class":81},[57,164309,12708],{"class":140},[57,164311,498],{"class":81},[57,164313,12708],{"class":140},[57,164315,270],{"class":81},[57,164317,12708],{"class":140},[57,164319,710],{"class":81},[57,164321,12708],{"class":140},[57,164323,736],{"class":81},[57,164325,12708],{"class":140},[57,164327,761],{"class":81},[57,164329,33443],{"class":140},[57,164331,164332],{"class":59,"line":67},[57,164333,2673],{"emptyLinePlaceholder":350},[57,164335,164336,164338,164341,164343,164345,164347,164350],{"class":59,"line":144},[57,164337,165],{"class":81},[57,164339,164340],{"class":140},"(nums[",[57,164342,635],{"class":81},[57,164344,1275],{"class":140},[57,164346,710],{"class":81},[57,164348,164349],{"class":140},"])    ",[57,164351,164352],{"class":63},"# [1, 2, 3]\n",[57,164354,164355,164357,164360,164362,164365],{"class":59,"line":150},[57,164356,165],{"class":81},[57,164358,164359],{"class":140},"(nums[:",[57,164361,270],{"class":81},[57,164363,164364],{"class":140},"])     ",[57,164366,164367],{"class":63},"# [0, 1, 2]\n",[57,164369,164370,164372,164374,164376,164379],{"class":59,"line":162},[57,164371,165],{"class":81},[57,164373,164340],{"class":140},[57,164375,270],{"class":81},[57,164377,164378],{"class":140},":])     ",[57,164380,164381],{"class":63},"# [3, 4, 5, 6]\n",[57,164383,164384,164386,164389,164391,164393],{"class":59,"line":180},[57,164385,165],{"class":81},[57,164387,164388],{"class":140},"(nums[::",[57,164390,498],{"class":81},[57,164392,164349],{"class":140},[57,164394,164395],{"class":63},"# [0, 2, 4, 6]\n",[57,164397,164398,164400,164402,164404,164406,164409],{"class":59,"line":186},[57,164399,165],{"class":81},[57,164401,164388],{"class":140},[57,164403,948],{"class":136},[57,164405,635],{"class":81},[57,164407,164408],{"class":140},"])   ",[57,164410,164411],{"class":63},"# 反转\n",[14,164413,164414],{},"字符串切片：",[49,164416,164418],{"className":122,"code":164417,"language":124,"meta":46,"style":46},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[28,164419,164420,164429,164443],{"__ignoreMap":46},[57,164421,164422,164424,164426],{"class":59,"line":60},[57,164423,156641],{"class":140},[57,164425,156],{"class":136},[57,164427,164428],{"class":74}," \"abcdef\"\n",[57,164430,164431,164433,164435,164437,164439,164441],{"class":59,"line":67},[57,164432,165],{"class":81},[57,164434,164157],{"class":140},[57,164436,635],{"class":81},[57,164438,1275],{"class":140},[57,164440,710],{"class":81},[57,164442,4930],{"class":140},[57,164444,164445,164447,164450,164452,164454],{"class":59,"line":144},[57,164446,165],{"class":81},[57,164448,164449],{"class":140},"(text[::",[57,164451,948],{"class":136},[57,164453,635],{"class":81},[57,164455,4930],{"class":140},[365,164457,164459],{"id":164458},"_69-集合set","6.9 集合set",[14,164461,164462],{},"集合特点：",[377,164464,164465,164468,164471],{},[380,164466,164467],{},"无序。",[380,164469,164470],{},"元素不重复。",[380,164472,164473],{},"可以做交集、并集、差集。",[49,164475,164477],{"className":122,"code":164476,"language":124,"meta":46,"style":46},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[28,164478,164479,164507],{"__ignoreMap":46},[57,164480,164481,164483,164485,164487,164489,164491,164493,164495,164497,164499,164501,164503,164505],{"class":59,"line":60},[57,164482,164297],{"class":140},[57,164484,156],{"class":136},[57,164486,4721],{"class":140},[57,164488,635],{"class":81},[57,164490,12708],{"class":140},[57,164492,498],{"class":81},[57,164494,12708],{"class":140},[57,164496,270],{"class":81},[57,164498,12708],{"class":140},[57,164500,270],{"class":81},[57,164502,12708],{"class":140},[57,164504,710],{"class":81},[57,164506,1847],{"class":140},[57,164508,164509,164511],{"class":59,"line":67},[57,164510,165],{"class":81},[57,164512,164513],{"class":140},"(nums)\n",[14,164515,164516],{},"创建空集合：",[49,164518,164520],{"className":122,"code":164519,"language":124,"meta":46,"style":46},"s = set()\n",[28,164521,164522],{"__ignoreMap":46},[57,164523,164524,164526,164528,164530],{"class":59,"line":60},[57,164525,10852],{"class":140},[57,164527,156],{"class":136},[57,164529,119919],{"class":81},[57,164531,2249],{"class":140},[14,164533,9298,164534,164536],{},[28,164535,32656],{}," 是空字典，不是空集合。",[14,164538,164539],{},"集合常用操作：",[49,164541,164543],{"className":122,"code":164542,"language":124,"meta":46,"style":46},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[28,164544,164545,164565,164569,164578,164587,164596],{"__ignoreMap":46},[57,164546,164547,164549,164551,164553,164555,164557,164559,164561,164563],{"class":59,"line":60},[57,164548,10852],{"class":140},[57,164550,156],{"class":136},[57,164552,4721],{"class":140},[57,164554,635],{"class":81},[57,164556,12708],{"class":140},[57,164558,498],{"class":81},[57,164560,12708],{"class":140},[57,164562,270],{"class":81},[57,164564,1847],{"class":140},[57,164566,164567],{"class":59,"line":67},[57,164568,2673],{"emptyLinePlaceholder":350},[57,164570,164571,164574,164576],{"class":59,"line":144},[57,164572,164573],{"class":140},"s.add(",[57,164575,710],{"class":81},[57,164577,238],{"class":140},[57,164579,164580,164583,164585],{"class":59,"line":150},[57,164581,164582],{"class":140},"s.remove(",[57,164584,498],{"class":81},[57,164586,238],{"class":140},[57,164588,164589,164592,164594],{"class":59,"line":162},[57,164590,164591],{"class":140},"s.discard(",[57,164593,862],{"class":81},[57,164595,238],{"class":140},[57,164597,164598,164600,164602,164604],{"class":59,"line":180},[57,164599,165],{"class":81},[57,164601,168],{"class":140},[57,164603,7631],{"class":81},[57,164605,164606],{"class":140},"(s))\n",[14,164608,164609],{},"交并差：",[49,164611,164613],{"className":122,"code":164612,"language":124,"meta":46,"style":46},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[28,164614,164615,164635,164655,164659,164674,164687],{"__ignoreMap":46},[57,164616,164617,164619,164621,164623,164625,164627,164629,164631,164633],{"class":59,"line":60},[57,164618,11192],{"class":140},[57,164620,156],{"class":136},[57,164622,4721],{"class":140},[57,164624,635],{"class":81},[57,164626,12708],{"class":140},[57,164628,498],{"class":81},[57,164630,12708],{"class":140},[57,164632,270],{"class":81},[57,164634,1847],{"class":140},[57,164636,164637,164639,164641,164643,164645,164647,164649,164651,164653],{"class":59,"line":67},[57,164638,11218],{"class":140},[57,164640,156],{"class":136},[57,164642,4721],{"class":140},[57,164644,270],{"class":81},[57,164646,12708],{"class":140},[57,164648,710],{"class":81},[57,164650,12708],{"class":140},[57,164652,736],{"class":81},[57,164654,1847],{"class":140},[57,164656,164657],{"class":59,"line":144},[57,164658,2673],{"emptyLinePlaceholder":350},[57,164660,164661,164663,164666,164668,164671],{"class":59,"line":150},[57,164662,165],{"class":81},[57,164664,164665],{"class":140},"(a ",[57,164667,770],{"class":136},[57,164669,164670],{"class":140}," b)  ",[57,164672,164673],{"class":63},"# 交集\n",[57,164675,164676,164678,164680,164682,164684],{"class":59,"line":162},[57,164677,165],{"class":81},[57,164679,164665],{"class":140},[57,164681,1337],{"class":136},[57,164683,164670],{"class":140},[57,164685,164686],{"class":63},"# 并集\n",[57,164688,164689,164691,164693,164695,164697],{"class":59,"line":180},[57,164690,165],{"class":81},[57,164692,164665],{"class":140},[57,164694,948],{"class":136},[57,164696,164670],{"class":140},[57,164698,164699],{"class":63},"# 差集\n",[365,164701,164703],{"id":164702},"_610-字典dict","6.10 字典dict",[14,164705,164706],{},"字典通过 key-value 保存数据。",[49,164708,164710],{"className":122,"code":164709,"language":124,"meta":46,"style":46},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[28,164711,164712,164720,164730,164741,164751],{"__ignoreMap":46},[57,164713,164714,164716,164718],{"class":59,"line":60},[57,164715,149678],{"class":140},[57,164717,156],{"class":136},[57,164719,15844],{"class":140},[57,164721,164722,164724,164726,164728],{"class":59,"line":67},[57,164723,147217],{"class":74},[57,164725,51634],{"class":140},[57,164727,150085],{"class":74},[57,164729,31663],{"class":140},[57,164731,164732,164735,164737,164739],{"class":59,"line":144},[57,164733,164734],{"class":74},"    \"age\"",[57,164736,51634],{"class":140},[57,164738,1066],{"class":81},[57,164740,31663],{"class":140},[57,164742,164743,164746,164748],{"class":59,"line":150},[57,164744,164745],{"class":74},"    \"score\"",[57,164747,51634],{"class":140},[57,164749,164750],{"class":81},"95\n",[57,164752,164753],{"class":59,"line":162},[57,164754,1847],{"class":140},[14,164756,164757],{},"获取值：",[49,164759,164761],{"className":122,"code":164760,"language":124,"meta":46,"style":46},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[28,164762,164763,164774],{"__ignoreMap":46},[57,164764,164765,164767,164770,164772],{"class":59,"line":60},[57,164766,165],{"class":81},[57,164768,164769],{"class":140},"(student[",[57,164771,62876],{"class":74},[57,164773,4930],{"class":140},[57,164775,164776,164778,164781,164783],{"class":59,"line":67},[57,164777,165],{"class":81},[57,164779,164780],{"class":140},"(student.get(",[57,164782,62876],{"class":74},[57,164784,259],{"class":140},[14,164786,15660],{},[49,164788,164790],{"className":122,"code":164789,"language":124,"meta":46,"style":46},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[28,164791,164792,164805],{"__ignoreMap":46},[57,164793,164794,164796,164799,164802],{"class":59,"line":60},[57,164795,153056],{"class":140},[57,164797,164798],{"class":74},"\"address\"",[57,164800,164801],{"class":140},"]     ",[57,164803,164804],{"class":63},"# key不存在会报错\n",[57,164806,164807,164810,164812,164814],{"class":59,"line":67},[57,164808,164809],{"class":140},"student.get(",[57,164811,164798],{"class":74},[57,164813,229],{"class":140},[57,164815,164816],{"class":63},"# key不存在返回None\n",[14,164818,164819],{},"设置默认值：",[49,164821,164823],{"className":122,"code":164822,"language":124,"meta":46,"style":46},"print(student.get(\"address\", \"未知\"))\n",[28,164824,164825],{"__ignoreMap":46},[57,164826,164827,164829,164831,164833,164835,164838],{"class":59,"line":60},[57,164828,165],{"class":81},[57,164830,164780],{"class":140},[57,164832,164798],{"class":74},[57,164834,12708],{"class":140},[57,164836,164837],{"class":74},"\"未知\"",[57,164839,259],{"class":140},[14,164841,164842],{},"新增和修改：",[49,164844,164846],{"className":122,"code":164845,"language":124,"meta":46,"style":46},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[28,164847,164848,164861],{"__ignoreMap":46},[57,164849,164850,164852,164854,164856,164858],{"class":59,"line":60},[57,164851,153056],{"class":140},[57,164853,69321],{"class":74},[57,164855,4716],{"class":140},[57,164857,156],{"class":136},[57,164859,164860],{"class":81}," 19\n",[57,164862,164863,164865,164867,164869,164871],{"class":59,"line":67},[57,164864,153056],{"class":140},[57,164866,164798],{"class":74},[57,164868,4716],{"class":140},[57,164870,156],{"class":136},[57,164872,164873],{"class":74}," \"北京\"\n",[14,164875,164876],{},"删除：",[49,164878,164880],{"className":122,"code":164879,"language":124,"meta":46,"style":46},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[28,164881,164882,164895,164905],{"__ignoreMap":46},[57,164883,164884,164886,164888,164891,164893],{"class":59,"line":60},[57,164885,155555],{"class":140},[57,164887,156],{"class":136},[57,164889,164890],{"class":140}," student.pop(",[57,164892,151669],{"class":74},[57,164894,238],{"class":140},[57,164896,164897,164899,164901,164903],{"class":59,"line":67},[57,164898,163580],{"class":136},[57,164900,152346],{"class":140},[57,164902,69321],{"class":74},[57,164904,33443],{"class":140},[57,164906,164907],{"class":59,"line":144},[57,164908,164909],{"class":140},"student.clear()\n",[365,164911,164913],{"id":164912},"_611-字典遍历","6.11 字典遍历",[14,164915,164916],{},"遍历 key：",[49,164918,164920],{"className":122,"code":164919,"language":124,"meta":46,"style":46},"for key in student:\n    print(key, student[key])\n",[28,164921,164922,164934],{"__ignoreMap":46},[57,164923,164924,164926,164929,164931],{"class":59,"line":60},[57,164925,3298],{"class":136},[57,164927,164928],{"class":140}," key ",[57,164930,26312],{"class":136},[57,164932,164933],{"class":140}," student:\n",[57,164935,164936,164938],{"class":59,"line":67},[57,164937,31496],{"class":81},[57,164939,164940],{"class":140},"(key, student[key])\n",[14,164942,164943],{},"遍历 value：",[49,164945,164947],{"className":122,"code":164946,"language":124,"meta":46,"style":46},"for value in student.values():\n    print(value)\n",[28,164948,164949,164961],{"__ignoreMap":46},[57,164950,164951,164953,164956,164958],{"class":59,"line":60},[57,164952,3298],{"class":136},[57,164954,164955],{"class":140}," value ",[57,164957,26312],{"class":136},[57,164959,164960],{"class":140}," student.values():\n",[57,164962,164963,164965],{"class":59,"line":67},[57,164964,31496],{"class":81},[57,164966,164967],{"class":140},"(value)\n",[14,164969,164970],{},"遍历 key 和 value：",[49,164972,164974],{"className":122,"code":164973,"language":124,"meta":46,"style":46},"for key, value in student.items():\n    print(key, value)\n",[28,164975,164976,164988],{"__ignoreMap":46},[57,164977,164978,164980,164983,164985],{"class":59,"line":60},[57,164979,3298],{"class":136},[57,164981,164982],{"class":140}," key, value ",[57,164984,26312],{"class":136},[57,164986,164987],{"class":140}," student.items():\n",[57,164989,164990,164992],{"class":59,"line":67},[57,164991,31496],{"class":81},[57,164993,164994],{"class":140},"(key, value)\n",[365,164996,164998],{"id":164997},"_612-嵌套容器","6.12 嵌套容器",[14,165000,165001],{},"列表中保存字典，是项目中最常见的结构之一。",[49,165003,165005],{"className":122,"code":165004,"language":124,"meta":46,"style":46},"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",[28,165006,165007,165015,165043,165071,165099,165103,165107,165117],{"__ignoreMap":46},[57,165008,165009,165011,165013],{"class":59,"line":60},[57,165010,159913],{"class":140},[57,165012,156],{"class":136},[57,165014,55644],{"class":140},[57,165016,165017,165019,165021,165023,165025,165027,165029,165031,165033,165035,165037,165039,165041],{"class":59,"line":67},[57,165018,148582],{"class":140},[57,165020,62876],{"class":74},[57,165022,51634],{"class":140},[57,165024,150085],{"class":74},[57,165026,12708],{"class":140},[57,165028,69321],{"class":74},[57,165030,51634],{"class":140},[57,165032,1066],{"class":81},[57,165034,12708],{"class":140},[57,165036,151669],{"class":74},[57,165038,51634],{"class":140},[57,165040,1404],{"class":81},[57,165042,5203],{"class":140},[57,165044,165045,165047,165049,165051,165053,165055,165057,165059,165061,165063,165065,165067,165069],{"class":59,"line":144},[57,165046,148582],{"class":140},[57,165048,62876],{"class":74},[57,165050,51634],{"class":140},[57,165052,151133],{"class":74},[57,165054,12708],{"class":140},[57,165056,69321],{"class":74},[57,165058,51634],{"class":140},[57,165060,1041],{"class":81},[57,165062,12708],{"class":140},[57,165064,151669],{"class":74},[57,165066,51634],{"class":140},[57,165068,1227],{"class":81},[57,165070,5203],{"class":140},[57,165072,165073,165075,165077,165079,165081,165083,165085,165087,165089,165091,165093,165095,165097],{"class":59,"line":150},[57,165074,148582],{"class":140},[57,165076,62876],{"class":74},[57,165078,51634],{"class":140},[57,165080,159928],{"class":74},[57,165082,12708],{"class":140},[57,165084,69321],{"class":74},[57,165086,51634],{"class":140},[57,165088,1091],{"class":81},[57,165090,12708],{"class":140},[57,165092,151669],{"class":74},[57,165094,51634],{"class":140},[57,165096,822],{"class":81},[57,165098,5203],{"class":140},[57,165100,165101],{"class":59,"line":162},[57,165102,33443],{"class":140},[57,165104,165105],{"class":59,"line":180},[57,165106,2673],{"emptyLinePlaceholder":350},[57,165108,165109,165111,165113,165115],{"class":59,"line":186},[57,165110,3298],{"class":136},[57,165112,152334],{"class":140},[57,165114,26312],{"class":136},[57,165116,152339],{"class":140},[57,165118,165119,165121,165123,165125,165128,165130],{"class":59,"line":197},[57,165120,31496],{"class":81},[57,165122,164769],{"class":140},[57,165124,62876],{"class":74},[57,165126,165127],{"class":140},"], student[",[57,165129,151669],{"class":74},[57,165131,4930],{"class":140},[14,165133,165134],{},"统计平均分：",[49,165136,165138],{"className":122,"code":165137,"language":124,"meta":46,"style":46},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[28,165139,165140,165148,165152,165162,165174,165178,165193],{"__ignoreMap":46},[57,165141,165142,165144,165146],{"class":59,"line":60},[57,165143,157457],{"class":140},[57,165145,156],{"class":136},[57,165147,47530],{"class":81},[57,165149,165150],{"class":59,"line":67},[57,165151,2673],{"emptyLinePlaceholder":350},[57,165153,165154,165156,165158,165160],{"class":59,"line":144},[57,165155,3298],{"class":136},[57,165157,152334],{"class":140},[57,165159,26312],{"class":136},[57,165161,152339],{"class":140},[57,165163,165164,165166,165168,165170,165172],{"class":59,"line":150},[57,165165,159504],{"class":140},[57,165167,9750],{"class":136},[57,165169,152346],{"class":140},[57,165171,151669],{"class":74},[57,165173,33443],{"class":140},[57,165175,165176],{"class":59,"line":162},[57,165177,2673],{"emptyLinePlaceholder":350},[57,165179,165180,165182,165184,165186,165188,165190],{"class":59,"line":180},[57,165181,163971],{"class":140},[57,165183,156],{"class":136},[57,165185,163976],{"class":140},[57,165187,1000],{"class":136},[57,165189,7604],{"class":81},[57,165191,165192],{"class":140},"(students)\n",[57,165194,165195,165197,165199,165201,165203,165205,165207,165209,165211,165213],{"class":59,"line":186},[57,165196,165],{"class":81},[57,165198,168],{"class":140},[57,165200,475],{"class":136},[57,165202,163994],{"class":74},[57,165204,1312],{"class":81},[57,165206,163999],{"class":140},[57,165208,157356],{"class":136},[57,165210,1362],{"class":81},[57,165212,668],{"class":74},[57,165214,238],{"class":140},[14,165216,165217],{},"查找学生：",[49,165219,165221],{"className":122,"code":165220,"language":124,"meta":46,"style":46},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[28,165222,165223,165238,165242,165252,165266,165272,165276,165282],{"__ignoreMap":46},[57,165224,165225,165227,165229,165231,165233,165236],{"class":59,"line":60},[57,165226,111775],{"class":140},[57,165228,156],{"class":136},[57,165230,60802],{"class":81},[57,165232,168],{"class":140},[57,165234,165235],{"class":74},"\"请输入学生姓名:\"",[57,165237,238],{"class":140},[57,165239,165240],{"class":59,"line":67},[57,165241,2673],{"emptyLinePlaceholder":350},[57,165243,165244,165246,165248,165250],{"class":59,"line":144},[57,165245,3298],{"class":136},[57,165247,152334],{"class":140},[57,165249,26312],{"class":136},[57,165251,152339],{"class":140},[57,165253,165254,165256,165258,165260,165262,165264],{"class":59,"line":150},[57,165255,3374],{"class":136},[57,165257,152346],{"class":140},[57,165259,62876],{"class":74},[57,165261,4716],{"class":140},[57,165263,3222],{"class":136},[57,165265,160629],{"class":140},[57,165267,165268,165270],{"class":59,"line":162},[57,165269,32648],{"class":81},[57,165271,150239],{"class":140},[57,165273,165274],{"class":59,"line":180},[57,165275,31824],{"class":136},[57,165277,165278,165280],{"class":59,"line":186},[57,165279,232],{"class":136},[57,165281,4012],{"class":140},[57,165283,165284,165286,165288,165291],{"class":59,"line":197},[57,165285,31496],{"class":81},[57,165287,168],{"class":140},[57,165289,165290],{"class":74},"\"没有找到\"",[57,165292,238],{"class":140},[365,165294,165296],{"id":165295},"_613-容器通用操作","6.13 容器通用操作",[14,165298,165299],{},"长度：",[49,165301,165303],{"className":122,"code":165302,"language":124,"meta":46,"style":46},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[28,165304,165305,165324,165334],{"__ignoreMap":46},[57,165306,165307,165309,165312,165314,165316,165318,165320,165322],{"class":59,"line":60},[57,165308,7631],{"class":81},[57,165310,165311],{"class":140},"([",[57,165313,635],{"class":81},[57,165315,12708],{"class":140},[57,165317,498],{"class":81},[57,165319,12708],{"class":140},[57,165321,270],{"class":81},[57,165323,4930],{"class":140},[57,165325,165326,165328,165330,165332],{"class":59,"line":67},[57,165327,7631],{"class":81},[57,165329,168],{"class":140},[57,165331,156077],{"class":74},[57,165333,238],{"class":140},[57,165335,165336,165338,165341,165343,165345,165347],{"class":59,"line":144},[57,165337,7631],{"class":81},[57,165339,165340],{"class":140},"({",[57,165342,62876],{"class":74},[57,165344,51634],{"class":140},[57,165346,150085],{"class":74},[57,165348,165349],{"class":140},"})\n",[14,165351,165352],{},"最大最小：",[49,165354,165356],{"className":122,"code":165355,"language":124,"meta":46,"style":46},"max([1, 2, 3])\nmin([1, 2, 3])\n",[28,165357,165358,165376],{"__ignoreMap":46},[57,165359,165360,165362,165364,165366,165368,165370,165372,165374],{"class":59,"line":60},[57,165361,6288],{"class":81},[57,165363,165311],{"class":140},[57,165365,635],{"class":81},[57,165367,12708],{"class":140},[57,165369,498],{"class":81},[57,165371,12708],{"class":140},[57,165373,270],{"class":81},[57,165375,4930],{"class":140},[57,165377,165378,165381,165383,165385,165387,165389,165391,165393],{"class":59,"line":67},[57,165379,165380],{"class":81},"min",[57,165382,165311],{"class":140},[57,165384,635],{"class":81},[57,165386,12708],{"class":140},[57,165388,498],{"class":81},[57,165390,12708],{"class":140},[57,165392,270],{"class":81},[57,165394,4930],{"class":140},[14,165396,165397],{},"求和：",[49,165399,165401],{"className":122,"code":165400,"language":124,"meta":46,"style":46},"sum([1, 2, 3])\n",[28,165402,165403],{"__ignoreMap":46},[57,165404,165405,165408,165410,165412,165414,165416,165418,165420],{"class":59,"line":60},[57,165406,165407],{"class":81},"sum",[57,165409,165311],{"class":140},[57,165411,635],{"class":81},[57,165413,12708],{"class":140},[57,165415,498],{"class":81},[57,165417,12708],{"class":140},[57,165419,270],{"class":81},[57,165421,4930],{"class":140},[14,165423,163668],{},[49,165425,165427],{"className":122,"code":165426,"language":124,"meta":46,"style":46},"sorted([3, 1, 2])\n",[28,165428,165429],{"__ignoreMap":46},[57,165430,165431,165434,165436,165438,165440,165442,165444,165446],{"class":59,"line":60},[57,165432,165433],{"class":81},"sorted",[57,165435,165311],{"class":140},[57,165437,270],{"class":81},[57,165439,12708],{"class":140},[57,165441,635],{"class":81},[57,165443,12708],{"class":140},[57,165445,498],{"class":81},[57,165447,4930],{"class":140},[14,165449,165450],{},"类型转换：",[49,165452,165454],{"className":122,"code":165453,"language":124,"meta":46,"style":46},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[28,165455,165456,165466,165484],{"__ignoreMap":46},[57,165457,165458,165460,165462,165464],{"class":59,"line":60},[57,165459,154267],{"class":81},[57,165461,168],{"class":140},[57,165463,156077],{"class":74},[57,165465,238],{"class":140},[57,165467,165468,165470,165472,165474,165476,165478,165480,165482],{"class":59,"line":67},[57,165469,155462],{"class":81},[57,165471,165311],{"class":140},[57,165473,635],{"class":81},[57,165475,12708],{"class":140},[57,165477,498],{"class":81},[57,165479,12708],{"class":140},[57,165481,270],{"class":81},[57,165483,4930],{"class":140},[57,165485,165486,165488,165490,165492,165494,165496,165498,165500,165502,165504],{"class":59,"line":144},[57,165487,155487],{"class":81},[57,165489,165311],{"class":140},[57,165491,635],{"class":81},[57,165493,12708],{"class":140},[57,165495,635],{"class":81},[57,165497,12708],{"class":140},[57,165499,498],{"class":81},[57,165501,12708],{"class":140},[57,165503,270],{"class":81},[57,165505,4930],{"class":140},[14,165507,165508],{},"成员判断：",[49,165510,165512],{"className":122,"code":165511,"language":124,"meta":46,"style":46},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[28,165513,165514,165531,165555],{"__ignoreMap":46},[57,165515,165516,165518,165520,165523,165526,165529],{"class":59,"line":60},[57,165517,165],{"class":81},[57,165519,168],{"class":140},[57,165521,165522],{"class":74},"\"a\"",[57,165524,165525],{"class":136}," in",[57,165527,165528],{"class":74}," \"abc\"",[57,165530,238],{"class":140},[57,165532,165533,165535,165537,165539,165541,165543,165545,165547,165549,165551,165553],{"class":59,"line":67},[57,165534,165],{"class":81},[57,165536,168],{"class":140},[57,165538,635],{"class":81},[57,165540,165525],{"class":136},[57,165542,52423],{"class":140},[57,165544,635],{"class":81},[57,165546,12708],{"class":140},[57,165548,498],{"class":81},[57,165550,12708],{"class":140},[57,165552,270],{"class":81},[57,165554,4930],{"class":140},[57,165556,165557,165559,165561,165563,165565,165567,165569,165571,165573],{"class":59,"line":144},[57,165558,165],{"class":81},[57,165560,168],{"class":140},[57,165562,62876],{"class":74},[57,165564,165525],{"class":136},[57,165566,4721],{"class":140},[57,165568,62876],{"class":74},[57,165570,51634],{"class":140},[57,165572,150085],{"class":74},[57,165574,165349],{"class":140},[365,165576,165578],{"id":165577},"_614-推导式","6.14 推导式",[14,165580,165581],{},"推导式用于快速生成容器。",[14,165583,165584],{},"列表推导式：",[49,165586,165588],{"className":122,"code":165587,"language":124,"meta":46,"style":46},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[28,165589,165590,165617],{"__ignoreMap":46},[57,165591,165592,165594,165596,165599,165601,165603,165605,165607,165609,165611,165613,165615],{"class":59,"line":60},[57,165593,164297],{"class":140},[57,165595,156],{"class":136},[57,165597,165598],{"class":140}," [i ",[57,165600,3298],{"class":136},[57,165602,9711],{"class":140},[57,165604,26312],{"class":136},[57,165606,32640],{"class":81},[57,165608,168],{"class":140},[57,165610,635],{"class":81},[57,165612,12708],{"class":140},[57,165614,761],{"class":81},[57,165616,97497],{"class":140},[57,165618,165619,165621],{"class":59,"line":67},[57,165620,165],{"class":81},[57,165622,164513],{"class":140},[14,165624,165625],{},"带条件：",[49,165627,165629],{"className":122,"code":165628,"language":124,"meta":46,"style":46},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[28,165630,165631,165672],{"__ignoreMap":46},[57,165632,165633,165636,165638,165640,165642,165644,165646,165648,165650,165652,165654,165656,165658,165660,165662,165664,165666,165668,165670],{"class":59,"line":60},[57,165634,165635],{"class":140},"even_nums ",[57,165637,156],{"class":136},[57,165639,165598],{"class":140},[57,165641,3298],{"class":136},[57,165643,9711],{"class":140},[57,165645,26312],{"class":136},[57,165647,32640],{"class":81},[57,165649,168],{"class":140},[57,165651,635],{"class":81},[57,165653,12708],{"class":140},[57,165655,754],{"class":81},[57,165657,229],{"class":140},[57,165659,1813],{"class":136},[57,165661,9711],{"class":140},[57,165663,745],{"class":136},[57,165665,15027],{"class":81},[57,165667,101756],{"class":136},[57,165669,4366],{"class":81},[57,165671,33443],{"class":140},[57,165673,165674,165676],{"class":59,"line":67},[57,165675,165],{"class":81},[57,165677,165678],{"class":140},"(even_nums)\n",[14,165680,165681],{},"字典推导式：",[49,165683,165685],{"className":122,"code":165684,"language":124,"meta":46,"style":46},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[28,165686,165687,165721],{"__ignoreMap":46},[57,165688,165689,165692,165694,165697,165699,165701,165704,165706,165708,165710,165712,165714,165716,165718],{"class":59,"line":60},[57,165690,165691],{"class":140},"squares ",[57,165693,156],{"class":136},[57,165695,165696],{"class":140}," {i: i ",[57,165698,10934],{"class":136},[57,165700,15027],{"class":81},[57,165702,165703],{"class":136}," for",[57,165705,9711],{"class":140},[57,165707,26312],{"class":136},[57,165709,32640],{"class":81},[57,165711,168],{"class":140},[57,165713,635],{"class":81},[57,165715,12708],{"class":140},[57,165717,761],{"class":81},[57,165719,165720],{"class":140},")}\n",[57,165722,165723,165725],{"class":59,"line":67},[57,165724,165],{"class":81},[57,165726,165727],{"class":140},"(squares)\n",[14,165729,165730],{},"集合推导式：",[49,165732,165734],{"className":122,"code":165733,"language":124,"meta":46,"style":46},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[28,165735,165736,165757],{"__ignoreMap":46},[57,165737,165738,165741,165743,165746,165748,165750,165752,165755],{"class":59,"line":60},[57,165739,165740],{"class":140},"chars ",[57,165742,156],{"class":136},[57,165744,165745],{"class":140}," {ch ",[57,165747,3298],{"class":136},[57,165749,159889],{"class":140},[57,165751,26312],{"class":136},[57,165753,165754],{"class":74}," \"hello\"",[57,165756,1847],{"class":140},[57,165758,165759,165761],{"class":59,"line":67},[57,165760,165],{"class":81},[57,165762,165763],{"class":140},"(chars)\n",[14,165765,165766],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[365,165768,165770],{"id":165769},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[49,165772,165774],{"className":122,"code":165773,"language":124,"meta":46,"style":46},"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",[28,165775,165776,165784,165804,165824,165844,165864,165868,165872,165880,165894,165903,165907,165917,165929,165933,165953,165962,165966,165982,165987,165991,166005,166009,166031,166067],{"__ignoreMap":46},[57,165777,165778,165780,165782],{"class":59,"line":60},[57,165779,159913],{"class":140},[57,165781,156],{"class":136},[57,165783,55644],{"class":140},[57,165785,165786,165788,165790,165792,165794,165796,165798,165800,165802],{"class":59,"line":67},[57,165787,148582],{"class":140},[57,165789,62876],{"class":74},[57,165791,51634],{"class":140},[57,165793,150085],{"class":74},[57,165795,12708],{"class":140},[57,165797,151669],{"class":74},[57,165799,51634],{"class":140},[57,165801,1404],{"class":81},[57,165803,5203],{"class":140},[57,165805,165806,165808,165810,165812,165814,165816,165818,165820,165822],{"class":59,"line":144},[57,165807,148582],{"class":140},[57,165809,62876],{"class":74},[57,165811,51634],{"class":140},[57,165813,151133],{"class":74},[57,165815,12708],{"class":140},[57,165817,151669],{"class":74},[57,165819,51634],{"class":140},[57,165821,1227],{"class":81},[57,165823,5203],{"class":140},[57,165825,165826,165828,165830,165832,165834,165836,165838,165840,165842],{"class":59,"line":150},[57,165827,148582],{"class":140},[57,165829,62876],{"class":74},[57,165831,51634],{"class":140},[57,165833,159928],{"class":74},[57,165835,12708],{"class":140},[57,165837,151669],{"class":74},[57,165839,51634],{"class":140},[57,165841,822],{"class":81},[57,165843,5203],{"class":140},[57,165845,165846,165848,165850,165852,165854,165856,165858,165860,165862],{"class":59,"line":162},[57,165847,148582],{"class":140},[57,165849,62876],{"class":74},[57,165851,51634],{"class":140},[57,165853,163507],{"class":74},[57,165855,12708],{"class":140},[57,165857,151669],{"class":74},[57,165859,51634],{"class":140},[57,165861,1298],{"class":81},[57,165863,5203],{"class":140},[57,165865,165866],{"class":59,"line":180},[57,165867,33443],{"class":140},[57,165869,165870],{"class":59,"line":186},[57,165871,2673],{"emptyLinePlaceholder":350},[57,165873,165874,165876,165878],{"class":59,"line":197},[57,165875,157457],{"class":140},[57,165877,156],{"class":136},[57,165879,47530],{"class":81},[57,165881,165882,165885,165887,165890,165892],{"class":59,"line":241},[57,165883,165884],{"class":140},"max_student ",[57,165886,156],{"class":136},[57,165888,165889],{"class":140}," students[",[57,165891,226],{"class":81},[57,165893,33443],{"class":140},[57,165895,165896,165899,165901],{"class":59,"line":249},[57,165897,165898],{"class":140},"passed ",[57,165900,156],{"class":136},[57,165902,52035],{"class":140},[57,165904,165905],{"class":59,"line":262},[57,165906,2673],{"emptyLinePlaceholder":350},[57,165908,165909,165911,165913,165915],{"class":59,"line":281},[57,165910,3298],{"class":136},[57,165912,152334],{"class":140},[57,165914,26312],{"class":136},[57,165916,152339],{"class":140},[57,165918,165919,165921,165923,165925,165927],{"class":59,"line":287},[57,165920,159504],{"class":140},[57,165922,9750],{"class":136},[57,165924,152346],{"class":140},[57,165926,151669],{"class":74},[57,165928,33443],{"class":140},[57,165930,165931],{"class":59,"line":298},[57,165932,2673],{"emptyLinePlaceholder":350},[57,165934,165935,165937,165939,165941,165943,165945,165948,165950],{"class":59,"line":311},[57,165936,3374],{"class":136},[57,165938,152346],{"class":140},[57,165940,151669],{"class":74},[57,165942,4716],{"class":140},[57,165944,223],{"class":136},[57,165946,165947],{"class":140}," max_student[",[57,165949,151669],{"class":74},[57,165951,165952],{"class":140},"]:\n",[57,165954,165955,165958,165960],{"class":59,"line":322},[57,165956,165957],{"class":140},"        max_student ",[57,165959,156],{"class":136},[57,165961,152362],{"class":140},[57,165963,165964],{"class":59,"line":1929},[57,165965,2673],{"emptyLinePlaceholder":350},[57,165967,165968,165970,165972,165974,165976,165978,165980],{"class":59,"line":1950},[57,165969,3374],{"class":136},[57,165971,152346],{"class":140},[57,165973,151669],{"class":74},[57,165975,4716],{"class":140},[57,165977,1984],{"class":136},[57,165979,158034],{"class":81},[57,165981,4012],{"class":140},[57,165983,165984],{"class":59,"line":1955},[57,165985,165986],{"class":140},"        passed.append(student)\n",[57,165988,165989],{"class":59,"line":1969},[57,165990,2673],{"emptyLinePlaceholder":350},[57,165992,165993,165995,165997,165999,166001,166003],{"class":59,"line":1974},[57,165994,163971],{"class":140},[57,165996,156],{"class":136},[57,165998,163976],{"class":140},[57,166000,1000],{"class":136},[57,166002,7604],{"class":81},[57,166004,165192],{"class":140},[57,166006,166007],{"class":59,"line":2001},[57,166008,2673],{"emptyLinePlaceholder":350},[57,166010,166011,166013,166015,166017,166019,166021,166023,166025,166027,166029],{"class":59,"line":2006},[57,166012,165],{"class":81},[57,166014,168],{"class":140},[57,166016,475],{"class":136},[57,166018,163994],{"class":74},[57,166020,1312],{"class":81},[57,166022,163999],{"class":140},[57,166024,157356],{"class":136},[57,166026,1362],{"class":81},[57,166028,668],{"class":74},[57,166030,238],{"class":140},[57,166032,166033,166035,166037,166039,166042,166044,166047,166049,166051,166053,166055,166057,166059,166061,166063,166065],{"class":59,"line":2023},[57,166034,165],{"class":81},[57,166036,168],{"class":140},[57,166038,475],{"class":136},[57,166040,166041],{"class":74},"\"最高分学生:",[57,166043,1312],{"class":81},[57,166045,166046],{"class":140},"max_student[",[57,166048,153079],{"class":74},[57,166050,1356],{"class":140},[57,166052,1362],{"class":81},[57,166054,4721],{"class":81},[57,166056,166046],{"class":140},[57,166058,153117],{"class":74},[57,166060,1356],{"class":140},[57,166062,1362],{"class":81},[57,166064,668],{"class":74},[57,166066,238],{"class":140},[57,166068,166069,166071,166073,166075,166078,166081,166084,166086,166088],{"class":59,"line":2028},[57,166070,165],{"class":81},[57,166072,168],{"class":140},[57,166074,475],{"class":136},[57,166076,166077],{"class":74},"\"及格人数:",[57,166079,166080],{"class":81},"{len",[57,166082,166083],{"class":140},"(passed)",[57,166085,1362],{"class":81},[57,166087,668],{"class":74},[57,166089,238],{"class":140},[365,166091,166093],{"id":166092},"_616-易错点","6.16 易错点",[377,166095,166096,166099,166102,166105,166111,166120],{},[380,166097,166098],{},"列表可变，元组和字符串不可变。",[380,166100,166101],{},"切片结束位置不包含。",[380,166103,166104],{},"字典通过 key 取值，不是通过索引。",[380,166106,166107,166108,28654],{},"空集合要用 ",[28,166109,166110],{},"set()",[380,166112,104563,166113,166116,166117,28654],{},[28,166114,166115],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[28,166118,166119],{},"get()",[380,166121,166122],{},"嵌套容器要先看清楚每一层是什么类型。",[365,166124,166126],{"id":166125},"_617-本章练习","6.17 本章练习",[377,166128,166129,166132,166135,166138,166141],{},[380,166130,166131],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[380,166133,166134],{},"输入一句话，统计每个字符出现次数。",[380,166136,166137],{},"使用集合去除列表中的重复元素。",[380,166139,166140],{},"使用字典保存一个学生的信息，并实现修改成绩。",[380,166142,166143],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[342,166145,166146],{},"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":46,"searchDepth":67,"depth":67,"links":166148},[166149,166150,166151,166152,166153,166154,166155,166156,166157,166158,166159,166160,166161,166162,166163,166164,166165],{"id":163129,"depth":67,"text":163130},{"id":163246,"depth":67,"text":163247},{"id":163336,"depth":67,"text":163337},{"id":163460,"depth":67,"text":163461},{"id":163823,"depth":67,"text":163824},{"id":164010,"depth":67,"text":164011},{"id":164129,"depth":67,"text":164130},{"id":164271,"depth":67,"text":164272},{"id":164458,"depth":67,"text":164459},{"id":164702,"depth":67,"text":164703},{"id":164912,"depth":67,"text":164913},{"id":164997,"depth":67,"text":164998},{"id":165295,"depth":67,"text":165296},{"id":165577,"depth":67,"text":165578},{"id":165769,"depth":67,"text":165770},{"id":166092,"depth":67,"text":166093},{"id":166125,"depth":67,"text":166126},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163121,"description":347},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166172,"title":166173,"body":166174,"description":347,"extension":348,"meta":168346,"navigation":350,"path":168347,"seo":168348,"stem":168349,"__hash__":168350},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166175,"toc":168321},[166176,166179,166183,166186,166266,166269,166290,166293,166297,166300,166362,166365,166382,166386,166389,166434,166436,166444,166448,166451,166533,166536,166539,166564,166567,166590,166594,166597,166599,166661,166664,166666,166717,166721,166725,166731,166836,166840,166846,166917,166921,166924,166992,166995,167075,167079,167085,167121,167124,167127,167237,167243,167247,167250,167322,167325,167329,167333,167338,167400,167404,167409,167477,167481,167486,167602,167606,167609,167689,167692,167696,167699,167803,167805,167820,167823,167827,167965,167973,167977,167979,167990,167992,168250,168254,168286,168290,168318],[10,166177,166173],{"id":166178},"_7-函数进阶",[365,166180,166182],{"id":166181},"_71-多返回值","7.1 多返回值",[14,166184,166185],{},"Python 函数可以返回多个值，本质上返回的是元组。",[49,166187,166189],{"className":122,"code":166188,"language":124,"meta":46,"style":46},"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",[28,166190,166191,166200,166208,166216,166225,166232,166236,166240,166249,166255],{"__ignoreMap":46},[57,166192,166193,166195,166198],{"class":59,"line":60},[57,166194,32144],{"class":136},[57,166196,166197],{"class":70}," get_info",[57,166199,32150],{"class":140},[57,166201,166202,166204,166206],{"class":59,"line":67},[57,166203,152567],{"class":140},[57,166205,156],{"class":136},[57,166207,149550],{"class":74},[57,166209,166210,166212,166214],{"class":59,"line":144},[57,166211,152583],{"class":140},[57,166213,156],{"class":136},[57,166215,146748],{"class":81},[57,166217,166218,166220,166222],{"class":59,"line":150},[57,166219,152598],{"class":140},[57,166221,156],{"class":136},[57,166223,166224],{"class":81}," 95\n",[57,166226,166227,166229],{"class":59,"line":162},[57,166228,4363],{"class":136},[57,166230,166231],{"class":140}," name, age, score\n",[57,166233,166234],{"class":59,"line":180},[57,166235,2673],{"emptyLinePlaceholder":350},[57,166237,166238],{"class":59,"line":186},[57,166239,2673],{"emptyLinePlaceholder":350},[57,166241,166242,166244,166246],{"class":59,"line":197},[57,166243,161503],{"class":140},[57,166245,156],{"class":136},[57,166247,166248],{"class":140}," get_info()\n",[57,166250,166251,166253],{"class":59,"line":241},[57,166252,165],{"class":81},[57,166254,76782],{"class":140},[57,166256,166257,166259,166261,166263],{"class":59,"line":249},[57,166258,165],{"class":81},[57,166260,168],{"class":140},[57,166262,103304],{"class":81},[57,166264,166265],{"class":140},"(result))\n",[14,166267,166268],{},"可以直接解包：",[49,166270,166272],{"className":122,"code":166271,"language":124,"meta":46,"style":46},"name, age, score = get_info()\nprint(name, age, score)\n",[28,166273,166274,166283],{"__ignoreMap":46},[57,166275,166276,166279,166281],{"class":59,"line":60},[57,166277,166278],{"class":140},"name, age, score ",[57,166280,156],{"class":136},[57,166282,166248],{"class":140},[57,166284,166285,166287],{"class":59,"line":67},[57,166286,165],{"class":81},[57,166288,166289],{"class":140},"(name, age, score)\n",[14,166291,166292],{},"返回多个值适合函数需要同时给出多个结果时使用。",[365,166294,166296],{"id":166295},"_72-位置参数","7.2 位置参数",[14,166298,166299],{},"位置参数按顺序传递。",[49,166301,166303],{"className":122,"code":166302,"language":124,"meta":46,"style":46},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[28,166304,166305,166313,166341,166345,166349],{"__ignoreMap":46},[57,166306,166307,166309,166311],{"class":59,"line":60},[57,166308,32144],{"class":136},[57,166310,149569],{"class":70},[57,166312,149572],{"class":140},[57,166314,166315,166317,166319,166321,166323,166325,166327,166329,166331,166333,166335,166337,166339],{"class":59,"line":67},[57,166316,31496],{"class":81},[57,166318,168],{"class":140},[57,166320,475],{"class":136},[57,166322,149583],{"class":74},[57,166324,1312],{"class":81},[57,166326,80007],{"class":140},[57,166328,1362],{"class":81},[57,166330,149592],{"class":74},[57,166332,1312],{"class":81},[57,166334,70418],{"class":140},[57,166336,1362],{"class":81},[57,166338,149601],{"class":74},[57,166340,238],{"class":140},[57,166342,166343],{"class":59,"line":144},[57,166344,2673],{"emptyLinePlaceholder":350},[57,166346,166347],{"class":59,"line":150},[57,166348,2673],{"emptyLinePlaceholder":350},[57,166350,166351,166354,166356,166358,166360],{"class":59,"line":162},[57,166352,166353],{"class":140},"introduce(",[57,166355,150085],{"class":74},[57,166357,12708],{"class":140},[57,166359,1066],{"class":81},[57,166361,238],{"class":140},[14,166363,166364],{},"顺序错了就会得到错误含义：",[49,166366,166368],{"className":122,"code":166367,"language":124,"meta":46,"style":46},"introduce(18, \"小明\")\n",[28,166369,166370],{"__ignoreMap":46},[57,166371,166372,166374,166376,166378,166380],{"class":59,"line":60},[57,166373,166353],{"class":140},[57,166375,1066],{"class":81},[57,166377,12708],{"class":140},[57,166379,150085],{"class":74},[57,166381,238],{"class":140},[365,166383,166385],{"id":166384},"_73-关键字参数","7.3 关键字参数",[14,166387,166388],{},"关键字参数按参数名传递。",[49,166390,166392],{"className":122,"code":166391,"language":124,"meta":46,"style":46},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[28,166393,166394,166414],{"__ignoreMap":46},[57,166395,166396,166398,166400,166402,166404,166406,166408,166410,166412],{"class":59,"line":60},[57,166397,166353],{"class":140},[57,166399,80007],{"class":5489},[57,166401,156],{"class":136},[57,166403,150085],{"class":74},[57,166405,12708],{"class":140},[57,166407,70418],{"class":5489},[57,166409,156],{"class":136},[57,166411,1066],{"class":81},[57,166413,238],{"class":140},[57,166415,166416,166418,166420,166422,166424,166426,166428,166430,166432],{"class":59,"line":67},[57,166417,166353],{"class":140},[57,166419,70418],{"class":5489},[57,166421,156],{"class":136},[57,166423,1066],{"class":81},[57,166425,12708],{"class":140},[57,166427,80007],{"class":5489},[57,166429,156],{"class":136},[57,166431,150085],{"class":74},[57,166433,238],{"class":140},[14,166435,118131],{},[377,166437,166438,166441],{},[380,166439,166440],{},"顺序不容易错。",[380,166442,166443],{},"调用时可读性更强。",[365,166445,166447],{"id":166446},"_74-默认参数","7.4 默认参数",[14,166449,166450],{},"默认参数给参数设置默认值。",[49,166452,166454],{"className":122,"code":166453,"language":124,"meta":46,"style":46},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[28,166455,166456,166472,166502,166506,166510,166520],{"__ignoreMap":46},[57,166457,166458,166460,166462,166465,166467,166470],{"class":59,"line":60},[57,166459,32144],{"class":136},[57,166461,122290],{"class":70},[57,166463,166464],{"class":140},"(host, port",[57,166466,156],{"class":136},[57,166468,166469],{"class":81},"3306",[57,166471,30983],{"class":140},[57,166473,166474,166476,166478,166480,166483,166485,166487,166489,166491,166493,166496,166498,166500],{"class":59,"line":67},[57,166475,31496],{"class":81},[57,166477,168],{"class":140},[57,166479,475],{"class":136},[57,166481,166482],{"class":74},"\"连接",[57,166484,1312],{"class":81},[57,166486,27664],{"class":140},[57,166488,1362],{"class":81},[57,166490,1275],{"class":74},[57,166492,1312],{"class":81},[57,166494,166495],{"class":140},"port",[57,166497,1362],{"class":81},[57,166499,668],{"class":74},[57,166501,238],{"class":140},[57,166503,166504],{"class":59,"line":144},[57,166505,2673],{"emptyLinePlaceholder":350},[57,166507,166508],{"class":59,"line":150},[57,166509,2673],{"emptyLinePlaceholder":350},[57,166511,166512,166515,166518],{"class":59,"line":162},[57,166513,166514],{"class":140},"connect(",[57,166516,166517],{"class":74},"\"localhost\"",[57,166519,238],{"class":140},[57,166521,166522,166524,166526,166528,166531],{"class":59,"line":180},[57,166523,166514],{"class":140},[57,166525,166517],{"class":74},[57,166527,12708],{"class":140},[57,166529,166530],{"class":81},"6379",[57,166532,238],{"class":140},[14,166534,166535],{},"注意：默认参数必须放在非默认参数后面。",[14,166537,166538],{},"错误：",[49,166540,166542],{"className":122,"code":166541,"language":124,"meta":46,"style":46},"def connect(port=3306, host):\n    pass\n",[28,166543,166544,166560],{"__ignoreMap":46},[57,166545,166546,166548,166550,166553,166555,166557],{"class":59,"line":60},[57,166547,32144],{"class":136},[57,166549,122290],{"class":70},[57,166551,166552],{"class":140},"(port",[57,166554,156],{"class":136},[57,166556,166469],{"class":81},[57,166558,166559],{"class":140},", host):\n",[57,166561,166562],{"class":59,"line":67},[57,166563,149734],{"class":136},[14,166565,166566],{},"正确：",[49,166568,166570],{"className":122,"code":166569,"language":124,"meta":46,"style":46},"def connect(host, port=3306):\n    pass\n",[28,166571,166572,166586],{"__ignoreMap":46},[57,166573,166574,166576,166578,166580,166582,166584],{"class":59,"line":60},[57,166575,32144],{"class":136},[57,166577,122290],{"class":70},[57,166579,166464],{"class":140},[57,166581,156],{"class":136},[57,166583,166469],{"class":81},[57,166585,30983],{"class":140},[57,166587,166588],{"class":59,"line":67},[57,166589,149734],{"class":136},[365,166591,166593],{"id":166592},"_75-默认参数的坑","7.5 默认参数的坑",[14,166595,166596],{},"不要使用可变对象作为默认参数。",[14,166598,157820],{},[49,166600,166602],{"className":122,"code":166601,"language":124,"meta":46,"style":46},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[28,166603,166604,166619,166624,166631,166635,166639,166650],{"__ignoreMap":46},[57,166605,166606,166608,166611,166614,166616],{"class":59,"line":60},[57,166607,32144],{"class":136},[57,166609,166610],{"class":70}," add_item",[57,166612,166613],{"class":140},"(item, items",[57,166615,156],{"class":136},[57,166617,166618],{"class":140},"[]):\n",[57,166620,166621],{"class":59,"line":67},[57,166622,166623],{"class":140},"    items.append(item)\n",[57,166625,166626,166628],{"class":59,"line":144},[57,166627,4363],{"class":136},[57,166629,166630],{"class":140}," items\n",[57,166632,166633],{"class":59,"line":150},[57,166634,2673],{"emptyLinePlaceholder":350},[57,166636,166637],{"class":59,"line":162},[57,166638,2673],{"emptyLinePlaceholder":350},[57,166640,166641,166643,166646,166648],{"class":59,"line":180},[57,166642,165],{"class":81},[57,166644,166645],{"class":140},"(add_item(",[57,166647,165522],{"class":74},[57,166649,259],{"class":140},[57,166651,166652,166654,166656,166659],{"class":59,"line":186},[57,166653,165],{"class":81},[57,166655,166645],{"class":140},[57,166657,166658],{"class":74},"\"b\"",[57,166660,259],{"class":140},[14,166662,166663],{},"第二次调用会复用第一次的列表。",[14,166665,156085],{},[49,166667,166669],{"className":122,"code":166668,"language":124,"meta":46,"style":46},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[28,166670,166671,166685,166698,166707,166711],{"__ignoreMap":46},[57,166672,166673,166675,166677,166679,166681,166683],{"class":59,"line":60},[57,166674,32144],{"class":136},[57,166676,166610],{"class":70},[57,166678,166613],{"class":140},[57,166680,156],{"class":136},[57,166682,95883],{"class":81},[57,166684,30983],{"class":140},[57,166686,166687,166689,166692,166694,166696],{"class":59,"line":67},[57,166688,3374],{"class":136},[57,166690,166691],{"class":140}," items ",[57,166693,39124],{"class":136},[57,166695,39130],{"class":81},[57,166697,4012],{"class":140},[57,166699,166700,166703,166705],{"class":59,"line":144},[57,166701,166702],{"class":140},"        items ",[57,166704,156],{"class":136},[57,166706,52035],{"class":140},[57,166708,166709],{"class":59,"line":150},[57,166710,166623],{"class":140},[57,166712,166713,166715],{"class":59,"line":162},[57,166714,4363],{"class":136},[57,166716,166630],{"class":140},[365,166718,166720],{"id":166719},"_76-不定长参数","7.6 不定长参数",[394,166722,166724],{"id":166723},"_761-args","7.6.1 *args",[14,166726,166727,166730],{},[28,166728,166729],{},"*args"," 接收任意数量的位置参数，得到元组。",[49,166732,166734],{"className":122,"code":166733,"language":124,"meta":46,"style":46},"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",[28,166735,166736,166749,166757,166768,166777,166783,166787,166791,166810],{"__ignoreMap":46},[57,166737,166738,166740,166742,166744,166746],{"class":59,"line":60},[57,166739,32144],{"class":136},[57,166741,5482],{"class":70},[57,166743,168],{"class":140},[57,166745,871],{"class":136},[57,166747,166748],{"class":140},"args):\n",[57,166750,166751,166753,166755],{"class":59,"line":67},[57,166752,159504],{"class":140},[57,166754,156],{"class":136},[57,166756,47530],{"class":81},[57,166758,166759,166761,166763,166765],{"class":59,"line":144},[57,166760,3474],{"class":136},[57,166762,156377],{"class":140},[57,166764,26312],{"class":136},[57,166766,166767],{"class":140}," args:\n",[57,166769,166770,166772,166774],{"class":59,"line":150},[57,166771,160179],{"class":140},[57,166773,9750],{"class":136},[57,166775,166776],{"class":140}," num\n",[57,166778,166779,166781],{"class":59,"line":162},[57,166780,4363],{"class":136},[57,166782,162484],{"class":140},[57,166784,166785],{"class":59,"line":180},[57,166786,2673],{"emptyLinePlaceholder":350},[57,166788,166789],{"class":59,"line":186},[57,166790,2673],{"emptyLinePlaceholder":350},[57,166792,166793,166795,166798,166800,166802,166804,166806,166808],{"class":59,"line":197},[57,166794,165],{"class":81},[57,166796,166797],{"class":140},"(add(",[57,166799,635],{"class":81},[57,166801,12708],{"class":140},[57,166803,498],{"class":81},[57,166805,12708],{"class":140},[57,166807,270],{"class":81},[57,166809,259],{"class":140},[57,166811,166812,166814,166816,166818,166820,166822,166824,166826,166828,166830,166832,166834],{"class":59,"line":241},[57,166813,165],{"class":81},[57,166815,166797],{"class":140},[57,166817,635],{"class":81},[57,166819,12708],{"class":140},[57,166821,498],{"class":81},[57,166823,12708],{"class":140},[57,166825,270],{"class":81},[57,166827,12708],{"class":140},[57,166829,710],{"class":81},[57,166831,12708],{"class":140},[57,166833,736],{"class":81},[57,166835,259],{"class":140},[394,166837,166839],{"id":166838},"_762-kwargs","7.6.2 **kwargs",[14,166841,166842,166845],{},[28,166843,166844],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[49,166847,166849],{"className":122,"code":166848,"language":124,"meta":46,"style":46},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[28,166850,166851,166864,166875,166881,166885,166889],{"__ignoreMap":46},[57,166852,166853,166855,166857,166859,166861],{"class":59,"line":60},[57,166854,32144],{"class":136},[57,166856,162142],{"class":70},[57,166858,168],{"class":140},[57,166860,10934],{"class":136},[57,166862,166863],{"class":140},"kwargs):\n",[57,166865,166866,166868,166870,166872],{"class":59,"line":67},[57,166867,3474],{"class":136},[57,166869,164982],{"class":140},[57,166871,26312],{"class":136},[57,166873,166874],{"class":140}," kwargs.items():\n",[57,166876,166877,166879],{"class":59,"line":144},[57,166878,32648],{"class":81},[57,166880,164994],{"class":140},[57,166882,166883],{"class":59,"line":150},[57,166884,2673],{"emptyLinePlaceholder":350},[57,166886,166887],{"class":59,"line":162},[57,166888,2673],{"emptyLinePlaceholder":350},[57,166890,166891,166893,166895,166897,166899,166901,166903,166905,166907,166909,166911,166913,166915],{"class":59,"line":180},[57,166892,162207],{"class":140},[57,166894,80007],{"class":5489},[57,166896,156],{"class":136},[57,166898,150085],{"class":74},[57,166900,12708],{"class":140},[57,166902,70418],{"class":5489},[57,166904,156],{"class":136},[57,166906,1066],{"class":81},[57,166908,12708],{"class":140},[57,166910,70469],{"class":5489},[57,166912,156],{"class":136},[57,166914,69466],{"class":74},[57,166916,238],{"class":140},[365,166918,166920],{"id":166919},"_77-参数解包","7.7 参数解包",[14,166922,166923],{},"列表或元组解包为位置参数：",[49,166925,166927],{"className":122,"code":166926,"language":124,"meta":46,"style":46},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[28,166928,166929,166938,166953,166957,166961,166981],{"__ignoreMap":46},[57,166930,166931,166933,166935],{"class":59,"line":60},[57,166932,32144],{"class":136},[57,166934,5482],{"class":70},[57,166936,166937],{"class":140},"(a, b, c):\n",[57,166939,166940,166942,166944,166946,166948,166950],{"class":59,"line":67},[57,166941,4363],{"class":136},[57,166943,11142],{"class":140},[57,166945,897],{"class":136},[57,166947,11155],{"class":140},[57,166949,897],{"class":136},[57,166951,166952],{"class":140}," c\n",[57,166954,166955],{"class":59,"line":144},[57,166956,2673],{"emptyLinePlaceholder":350},[57,166958,166959],{"class":59,"line":150},[57,166960,2673],{"emptyLinePlaceholder":350},[57,166962,166963,166965,166967,166969,166971,166973,166975,166977,166979],{"class":59,"line":162},[57,166964,164297],{"class":140},[57,166966,156],{"class":136},[57,166968,52423],{"class":140},[57,166970,635],{"class":81},[57,166972,12708],{"class":140},[57,166974,498],{"class":81},[57,166976,12708],{"class":140},[57,166978,270],{"class":81},[57,166980,33443],{"class":140},[57,166982,166983,166985,166987,166989],{"class":59,"line":180},[57,166984,165],{"class":81},[57,166986,166797],{"class":140},[57,166988,871],{"class":136},[57,166990,166991],{"class":140},"nums))\n",[14,166993,166994],{},"字典解包为关键字参数：",[49,166996,166998],{"className":122,"code":166997,"language":124,"meta":46,"style":46},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[28,166999,167000,167008,167034,167038,167042,167066],{"__ignoreMap":46},[57,167001,167002,167004,167006],{"class":59,"line":60},[57,167003,32144],{"class":136},[57,167005,149569],{"class":70},[57,167007,149572],{"class":140},[57,167009,167010,167012,167014,167016,167018,167020,167022,167024,167026,167028,167030,167032],{"class":59,"line":67},[57,167011,31496],{"class":81},[57,167013,168],{"class":140},[57,167015,475],{"class":136},[57,167017,668],{"class":74},[57,167019,1312],{"class":81},[57,167021,80007],{"class":140},[57,167023,1362],{"class":81},[57,167025,4721],{"class":81},[57,167027,70418],{"class":140},[57,167029,1362],{"class":81},[57,167031,668],{"class":74},[57,167033,238],{"class":140},[57,167035,167036],{"class":59,"line":144},[57,167037,2673],{"emptyLinePlaceholder":350},[57,167039,167040],{"class":59,"line":150},[57,167041,2673],{"emptyLinePlaceholder":350},[57,167043,167044,167046,167048,167050,167052,167054,167056,167058,167060,167062,167064],{"class":59,"line":162},[57,167045,116511],{"class":140},[57,167047,156],{"class":136},[57,167049,4721],{"class":140},[57,167051,62876],{"class":74},[57,167053,51634],{"class":140},[57,167055,150085],{"class":74},[57,167057,12708],{"class":140},[57,167059,69321],{"class":74},[57,167061,51634],{"class":140},[57,167063,1066],{"class":81},[57,167065,1847],{"class":140},[57,167067,167068,167070,167072],{"class":59,"line":180},[57,167069,166353],{"class":140},[57,167071,10934],{"class":136},[57,167073,167074],{"class":140},"info)\n",[365,167076,167078],{"id":167077},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,167080,167081,167084],{},[28,167082,167083],{},"lambda"," 用于定义简单匿名函数。",[49,167086,167088],{"className":122,"code":167087,"language":124,"meta":46,"style":46},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[28,167089,167090,167107],{"__ignoreMap":46},[57,167091,167092,167095,167097,167100,167103,167105],{"class":59,"line":60},[57,167093,167094],{"class":140},"add ",[57,167096,156],{"class":136},[57,167098,167099],{"class":136}," lambda",[57,167101,167102],{"class":140}," a, b: a ",[57,167104,897],{"class":136},[57,167106,151301],{"class":140},[57,167108,167109,167111,167113,167115,167117,167119],{"class":59,"line":67},[57,167110,165],{"class":81},[57,167112,166797],{"class":140},[57,167114,635],{"class":81},[57,167116,12708],{"class":140},[57,167118,498],{"class":81},[57,167120,259],{"class":140},[14,167122,167123],{},"常和排序、过滤等函数一起使用。",[14,167125,167126],{},"按分数排序：",[49,167128,167130],{"className":122,"code":167129,"language":124,"meta":46,"style":46},"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",[28,167131,167132,167140,167160,167180,167200,167204,167208,167231],{"__ignoreMap":46},[57,167133,167134,167136,167138],{"class":59,"line":60},[57,167135,159913],{"class":140},[57,167137,156],{"class":136},[57,167139,55644],{"class":140},[57,167141,167142,167144,167146,167148,167150,167152,167154,167156,167158],{"class":59,"line":67},[57,167143,148582],{"class":140},[57,167145,62876],{"class":74},[57,167147,51634],{"class":140},[57,167149,150085],{"class":74},[57,167151,12708],{"class":140},[57,167153,151669],{"class":74},[57,167155,51634],{"class":140},[57,167157,1404],{"class":81},[57,167159,5203],{"class":140},[57,167161,167162,167164,167166,167168,167170,167172,167174,167176,167178],{"class":59,"line":144},[57,167163,148582],{"class":140},[57,167165,62876],{"class":74},[57,167167,51634],{"class":140},[57,167169,151133],{"class":74},[57,167171,12708],{"class":140},[57,167173,151669],{"class":74},[57,167175,51634],{"class":140},[57,167177,1227],{"class":81},[57,167179,5203],{"class":140},[57,167181,167182,167184,167186,167188,167190,167192,167194,167196,167198],{"class":59,"line":150},[57,167183,148582],{"class":140},[57,167185,62876],{"class":74},[57,167187,51634],{"class":140},[57,167189,159928],{"class":74},[57,167191,12708],{"class":140},[57,167193,151669],{"class":74},[57,167195,51634],{"class":140},[57,167197,822],{"class":81},[57,167199,5203],{"class":140},[57,167201,167202],{"class":59,"line":162},[57,167203,33443],{"class":140},[57,167205,167206],{"class":59,"line":180},[57,167207,2673],{"emptyLinePlaceholder":350},[57,167209,167210,167213,167215,167217,167219,167221,167223,167225,167227,167229],{"class":59,"line":186},[57,167211,167212],{"class":140},"students.sort(",[57,167214,154143],{"class":5489},[57,167216,154146],{"class":136},[57,167218,154149],{"class":140},[57,167220,151669],{"class":74},[57,167222,112399],{"class":140},[57,167224,163725],{"class":5489},[57,167226,156],{"class":136},[57,167228,31673],{"class":81},[57,167230,238],{"class":140},[57,167232,167233,167235],{"class":59,"line":197},[57,167234,165],{"class":81},[57,167236,165192],{"class":140},[14,167238,167239,167240,167242],{},"如果逻辑复杂，不要硬写 ",[28,167241,167083],{},"，定义普通函数更清晰。",[365,167244,167246],{"id":167245},"_79-函数作为参数","7.9 函数作为参数",[14,167248,167249],{},"函数可以作为参数传给另一个函数。",[49,167251,167253],{"className":122,"code":167252,"language":124,"meta":46,"style":46},"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",[28,167254,167255,167263,167273,167277,167281,167291,167298,167302,167306],{"__ignoreMap":46},[57,167256,167257,167259,167261],{"class":59,"line":60},[57,167258,32144],{"class":136},[57,167260,5482],{"class":70},[57,167262,151290],{"class":140},[57,167264,167265,167267,167269,167271],{"class":59,"line":67},[57,167266,4363],{"class":136},[57,167268,11142],{"class":140},[57,167270,897],{"class":136},[57,167272,151301],{"class":140},[57,167274,167275],{"class":59,"line":144},[57,167276,2673],{"emptyLinePlaceholder":350},[57,167278,167279],{"class":59,"line":150},[57,167280,2673],{"emptyLinePlaceholder":350},[57,167282,167283,167285,167288],{"class":59,"line":162},[57,167284,32144],{"class":136},[57,167286,167287],{"class":70}," calculate",[57,167289,167290],{"class":140},"(a, b, func):\n",[57,167292,167293,167295],{"class":59,"line":180},[57,167294,4363],{"class":136},[57,167296,167297],{"class":140}," func(a, b)\n",[57,167299,167300],{"class":59,"line":186},[57,167301,2673],{"emptyLinePlaceholder":350},[57,167303,167304],{"class":59,"line":197},[57,167305,2673],{"emptyLinePlaceholder":350},[57,167307,167308,167310,167313,167315,167317,167319],{"class":59,"line":241},[57,167309,165],{"class":81},[57,167311,167312],{"class":140},"(calculate(",[57,167314,862],{"class":81},[57,167316,12708],{"class":140},[57,167318,1116],{"class":81},[57,167320,167321],{"class":140},", add))\n",[14,167323,167324],{},"这种思想在排序、回调、框架中经常出现。",[365,167326,167328],{"id":167327},"_710-mapfiltersorted","7.10 map、filter、sorted",[394,167330,167332],{"id":167331},"_7101-map","7.10.1 map",[14,167334,167335,167337],{},[28,167336,74241],{}," 对每个元素执行函数。",[49,167339,167341],{"className":122,"code":167340,"language":124,"meta":46,"style":46},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[28,167342,167343,167367,167390],{"__ignoreMap":46},[57,167344,167345,167347,167349,167351,167353,167355,167357,167359,167361,167363,167365],{"class":59,"line":60},[57,167346,164297],{"class":140},[57,167348,156],{"class":136},[57,167350,52423],{"class":140},[57,167352,635],{"class":81},[57,167354,12708],{"class":140},[57,167356,498],{"class":81},[57,167358,12708],{"class":140},[57,167360,270],{"class":81},[57,167362,12708],{"class":140},[57,167364,710],{"class":81},[57,167366,33443],{"class":140},[57,167368,167369,167371,167373,167376,167378,167380,167383,167385,167387],{"class":59,"line":67},[57,167370,161503],{"class":140},[57,167372,156],{"class":136},[57,167374,167375],{"class":81}," map",[57,167377,168],{"class":140},[57,167379,167083],{"class":136},[57,167381,167382],{"class":140}," x: x ",[57,167384,871],{"class":136},[57,167386,15027],{"class":81},[57,167388,167389],{"class":140},", nums)\n",[57,167391,167392,167394,167396,167398],{"class":59,"line":144},[57,167393,165],{"class":81},[57,167395,168],{"class":140},[57,167397,154267],{"class":81},[57,167399,166265],{"class":140},[394,167401,167403],{"id":167402},"_7102-filter","7.10.2 filter",[14,167405,167406,167408],{},[28,167407,80248],{}," 保留满足条件的元素。",[49,167410,167412],{"className":122,"code":167411,"language":124,"meta":46,"style":46},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[28,167413,167414,167442,167467],{"__ignoreMap":46},[57,167415,167416,167418,167420,167422,167424,167426,167428,167430,167432,167434,167436,167438,167440],{"class":59,"line":60},[57,167417,164297],{"class":140},[57,167419,156],{"class":136},[57,167421,52423],{"class":140},[57,167423,635],{"class":81},[57,167425,12708],{"class":140},[57,167427,498],{"class":81},[57,167429,12708],{"class":140},[57,167431,270],{"class":81},[57,167433,12708],{"class":140},[57,167435,710],{"class":81},[57,167437,12708],{"class":140},[57,167439,736],{"class":81},[57,167441,33443],{"class":140},[57,167443,167444,167446,167448,167451,167453,167455,167457,167459,167461,167463,167465],{"class":59,"line":67},[57,167445,161503],{"class":140},[57,167447,156],{"class":136},[57,167449,167450],{"class":81}," filter",[57,167452,168],{"class":140},[57,167454,167083],{"class":136},[57,167456,167382],{"class":140},[57,167458,745],{"class":136},[57,167460,15027],{"class":81},[57,167462,101756],{"class":136},[57,167464,4366],{"class":81},[57,167466,167389],{"class":140},[57,167468,167469,167471,167473,167475],{"class":59,"line":144},[57,167470,165],{"class":81},[57,167472,168],{"class":140},[57,167474,154267],{"class":81},[57,167476,166265],{"class":140},[394,167478,167480],{"id":167479},"_7103-sorted","7.10.3 sorted",[14,167482,167483,167485],{},[28,167484,165433],{}," 返回排序后的新列表。",[49,167487,167489],{"className":122,"code":167488,"language":124,"meta":46,"style":46},"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",[28,167490,167491,167499,167519,167539,167559,167563,167567,167596],{"__ignoreMap":46},[57,167492,167493,167495,167497],{"class":59,"line":60},[57,167494,159913],{"class":140},[57,167496,156],{"class":136},[57,167498,55644],{"class":140},[57,167500,167501,167503,167505,167507,167509,167511,167513,167515,167517],{"class":59,"line":67},[57,167502,148582],{"class":140},[57,167504,62876],{"class":74},[57,167506,51634],{"class":140},[57,167508,150085],{"class":74},[57,167510,12708],{"class":140},[57,167512,151669],{"class":74},[57,167514,51634],{"class":140},[57,167516,1404],{"class":81},[57,167518,5203],{"class":140},[57,167520,167521,167523,167525,167527,167529,167531,167533,167535,167537],{"class":59,"line":144},[57,167522,148582],{"class":140},[57,167524,62876],{"class":74},[57,167526,51634],{"class":140},[57,167528,151133],{"class":74},[57,167530,12708],{"class":140},[57,167532,151669],{"class":74},[57,167534,51634],{"class":140},[57,167536,1227],{"class":81},[57,167538,5203],{"class":140},[57,167540,167541,167543,167545,167547,167549,167551,167553,167555,167557],{"class":59,"line":150},[57,167542,148582],{"class":140},[57,167544,62876],{"class":74},[57,167546,51634],{"class":140},[57,167548,159928],{"class":74},[57,167550,12708],{"class":140},[57,167552,151669],{"class":74},[57,167554,51634],{"class":140},[57,167556,822],{"class":81},[57,167558,5203],{"class":140},[57,167560,167561],{"class":59,"line":162},[57,167562,33443],{"class":140},[57,167564,167565],{"class":59,"line":180},[57,167566,2673],{"emptyLinePlaceholder":350},[57,167568,167569,167571,167573,167575,167578,167580,167582,167584,167586,167588,167590,167592,167594],{"class":59,"line":186},[57,167570,161503],{"class":140},[57,167572,156],{"class":136},[57,167574,163801],{"class":81},[57,167576,167577],{"class":140},"(students, ",[57,167579,154143],{"class":5489},[57,167581,154146],{"class":136},[57,167583,154149],{"class":140},[57,167585,151669],{"class":74},[57,167587,112399],{"class":140},[57,167589,163725],{"class":5489},[57,167591,156],{"class":136},[57,167593,31673],{"class":81},[57,167595,238],{"class":140},[57,167597,167598,167600],{"class":59,"line":197},[57,167599,165],{"class":81},[57,167601,76782],{"class":140},[365,167603,167605],{"id":167604},"_711-闭包入门","7.11 闭包入门",[14,167607,167608],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[49,167610,167612],{"className":122,"code":167611,"language":124,"meta":46,"style":46},"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",[28,167613,167614,167624,167634,167645,167649,167656,167660,167664,167678],{"__ignoreMap":46},[57,167615,167616,167618,167621],{"class":59,"line":60},[57,167617,32144],{"class":136},[57,167619,167620],{"class":70}," outer",[57,167622,167623],{"class":140},"(base):\n",[57,167625,167626,167628,167631],{"class":59,"line":67},[57,167627,30998],{"class":136},[57,167629,167630],{"class":70}," inner",[57,167632,167633],{"class":140},"(num):\n",[57,167635,167636,167638,167641,167643],{"class":59,"line":144},[57,167637,15024],{"class":136},[57,167639,167640],{"class":140}," base ",[57,167642,897],{"class":136},[57,167644,166776],{"class":140},[57,167646,167647],{"class":59,"line":150},[57,167648,2673],{"emptyLinePlaceholder":350},[57,167650,167651,167653],{"class":59,"line":162},[57,167652,4363],{"class":136},[57,167654,167655],{"class":140}," inner\n",[57,167657,167658],{"class":59,"line":180},[57,167659,2673],{"emptyLinePlaceholder":350},[57,167661,167662],{"class":59,"line":186},[57,167663,2673],{"emptyLinePlaceholder":350},[57,167665,167666,167669,167671,167674,167676],{"class":59,"line":197},[57,167667,167668],{"class":140},"add_10 ",[57,167670,156],{"class":136},[57,167672,167673],{"class":140}," outer(",[57,167675,862],{"class":81},[57,167677,238],{"class":140},[57,167679,167680,167682,167685,167687],{"class":59,"line":241},[57,167681,165],{"class":81},[57,167683,167684],{"class":140},"(add_10(",[57,167686,736],{"class":81},[57,167688,259],{"class":140},[14,167690,167691],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[365,167693,167695],{"id":167694},"_712-装饰器入门","7.12 装饰器入门",[14,167697,167698],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[49,167700,167702],{"className":122,"code":167701,"language":124,"meta":46,"style":46},"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",[28,167703,167704,167713,167722,167733,167738,167749,167753,167760,167764,167768,167773,167781,167791,167795,167799],{"__ignoreMap":46},[57,167705,167706,167708,167710],{"class":59,"line":60},[57,167707,32144],{"class":136},[57,167709,87388],{"class":70},[57,167711,167712],{"class":140},"(func):\n",[57,167714,167715,167717,167720],{"class":59,"line":67},[57,167716,30998],{"class":136},[57,167718,167719],{"class":70}," wrapper",[57,167721,32150],{"class":140},[57,167723,167724,167726,167728,167731],{"class":59,"line":144},[57,167725,32648],{"class":81},[57,167727,168],{"class":140},[57,167729,167730],{"class":74},"\"函数开始执行\"",[57,167732,238],{"class":140},[57,167734,167735],{"class":59,"line":150},[57,167736,167737],{"class":140},"        func()\n",[57,167739,167740,167742,167744,167747],{"class":59,"line":162},[57,167741,32648],{"class":81},[57,167743,168],{"class":140},[57,167745,167746],{"class":74},"\"函数执行结束\"",[57,167748,238],{"class":140},[57,167750,167751],{"class":59,"line":180},[57,167752,2673],{"emptyLinePlaceholder":350},[57,167754,167755,167757],{"class":59,"line":186},[57,167756,4363],{"class":136},[57,167758,167759],{"class":140}," wrapper\n",[57,167761,167762],{"class":59,"line":197},[57,167763,2673],{"emptyLinePlaceholder":350},[57,167765,167766],{"class":59,"line":241},[57,167767,2673],{"emptyLinePlaceholder":350},[57,167769,167770],{"class":59,"line":249},[57,167771,167772],{"class":70},"@log\n",[57,167774,167775,167777,167779],{"class":59,"line":262},[57,167776,32144],{"class":136},[57,167778,161193],{"class":70},[57,167780,32150],{"class":140},[57,167782,167783,167785,167787,167789],{"class":59,"line":281},[57,167784,31496],{"class":81},[57,167786,168],{"class":140},[57,167788,6117],{"class":74},[57,167790,238],{"class":140},[57,167792,167793],{"class":59,"line":287},[57,167794,2673],{"emptyLinePlaceholder":350},[57,167796,167797],{"class":59,"line":298},[57,167798,2673],{"emptyLinePlaceholder":350},[57,167800,167801],{"class":59,"line":311},[57,167802,161228],{"class":140},[14,167804,158471],{},[49,167806,167808],{"className":122,"code":167807,"language":124,"meta":46,"style":46},"say_hello = log(say_hello)\n",[28,167809,167810],{"__ignoreMap":46},[57,167811,167812,167815,167817],{"class":59,"line":60},[57,167813,167814],{"class":140},"say_hello ",[57,167816,156],{"class":136},[57,167818,167819],{"class":140}," log(say_hello)\n",[14,167821,167822],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[365,167824,167826],{"id":167825},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[49,167828,167830],{"className":122,"code":167829,"language":124,"meta":46,"style":46},"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",[28,167831,167832,167840,167857,167867,167886,167896,167903,167907,167913,167917,167921,167925,167933,167943,167947,167951],{"__ignoreMap":46},[57,167833,167834,167836,167838],{"class":59,"line":60},[57,167835,32144],{"class":136},[57,167837,87388],{"class":70},[57,167839,167712],{"class":140},[57,167841,167842,167844,167846,167848,167850,167853,167855],{"class":59,"line":67},[57,167843,30998],{"class":136},[57,167845,167719],{"class":70},[57,167847,168],{"class":140},[57,167849,871],{"class":136},[57,167851,167852],{"class":140},"args, ",[57,167854,10934],{"class":136},[57,167856,166863],{"class":140},[57,167858,167859,167861,167863,167865],{"class":59,"line":144},[57,167860,32648],{"class":81},[57,167862,168],{"class":140},[57,167864,167730],{"class":74},[57,167866,238],{"class":140},[57,167868,167869,167872,167874,167877,167879,167881,167883],{"class":59,"line":150},[57,167870,167871],{"class":140},"        result ",[57,167873,156],{"class":136},[57,167875,167876],{"class":140}," func(",[57,167878,871],{"class":136},[57,167880,167852],{"class":140},[57,167882,10934],{"class":136},[57,167884,167885],{"class":140},"kwargs)\n",[57,167887,167888,167890,167892,167894],{"class":59,"line":162},[57,167889,32648],{"class":81},[57,167891,168],{"class":140},[57,167893,167746],{"class":74},[57,167895,238],{"class":140},[57,167897,167898,167900],{"class":59,"line":180},[57,167899,15024],{"class":136},[57,167901,167902],{"class":140}," result\n",[57,167904,167905],{"class":59,"line":186},[57,167906,2673],{"emptyLinePlaceholder":350},[57,167908,167909,167911],{"class":59,"line":197},[57,167910,4363],{"class":136},[57,167912,167759],{"class":140},[57,167914,167915],{"class":59,"line":241},[57,167916,2673],{"emptyLinePlaceholder":350},[57,167918,167919],{"class":59,"line":249},[57,167920,2673],{"emptyLinePlaceholder":350},[57,167922,167923],{"class":59,"line":262},[57,167924,167772],{"class":70},[57,167926,167927,167929,167931],{"class":59,"line":281},[57,167928,32144],{"class":136},[57,167930,5482],{"class":70},[57,167932,151290],{"class":140},[57,167934,167935,167937,167939,167941],{"class":59,"line":287},[57,167936,4363],{"class":136},[57,167938,11142],{"class":140},[57,167940,897],{"class":136},[57,167942,151301],{"class":140},[57,167944,167945],{"class":59,"line":298},[57,167946,2673],{"emptyLinePlaceholder":350},[57,167948,167949],{"class":59,"line":311},[57,167950,2673],{"emptyLinePlaceholder":350},[57,167952,167953,167955,167957,167959,167961,167963],{"class":59,"line":322},[57,167954,165],{"class":81},[57,167956,166797],{"class":140},[57,167958,862],{"class":81},[57,167960,12708],{"class":140},[57,167962,1116],{"class":81},[57,167964,259],{"class":140},[14,167966,167967,167968,101215,167970,167972],{},"这个写法使用 ",[28,167969,166729],{},[28,167971,166844],{}," 接收原函数的所有参数。",[365,167974,167976],{"id":167975},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,167978,123489],{},[377,167980,167981,167984,167987],{},[380,167982,167983],{},"给定一组学生数据。",[380,167985,167986],{},"封装函数，根据传入规则筛选学生。",[380,167988,167989],{},"筛选及格、优秀、未成年学生。",[14,167991,10308],{},[49,167993,167995],{"className":122,"code":167994,"language":124,"meta":46,"style":46},"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",[28,167996,167997,168005,168033,168061,168089,168093,168097,168101,168111,168119,168129,168136,168141,168147,168151,168155,168179,168202,168225,168229,168236,168243],{"__ignoreMap":46},[57,167998,167999,168001,168003],{"class":59,"line":60},[57,168000,159913],{"class":140},[57,168002,156],{"class":136},[57,168004,55644],{"class":140},[57,168006,168007,168009,168011,168013,168015,168017,168019,168021,168023,168025,168027,168029,168031],{"class":59,"line":67},[57,168008,148582],{"class":140},[57,168010,62876],{"class":74},[57,168012,51634],{"class":140},[57,168014,150085],{"class":74},[57,168016,12708],{"class":140},[57,168018,69321],{"class":74},[57,168020,51634],{"class":140},[57,168022,1066],{"class":81},[57,168024,12708],{"class":140},[57,168026,151669],{"class":74},[57,168028,51634],{"class":140},[57,168030,1404],{"class":81},[57,168032,5203],{"class":140},[57,168034,168035,168037,168039,168041,168043,168045,168047,168049,168051,168053,168055,168057,168059],{"class":59,"line":144},[57,168036,148582],{"class":140},[57,168038,62876],{"class":74},[57,168040,51634],{"class":140},[57,168042,151133],{"class":74},[57,168044,12708],{"class":140},[57,168046,69321],{"class":74},[57,168048,51634],{"class":140},[57,168050,1041],{"class":81},[57,168052,12708],{"class":140},[57,168054,151669],{"class":74},[57,168056,51634],{"class":140},[57,168058,1227],{"class":81},[57,168060,5203],{"class":140},[57,168062,168063,168065,168067,168069,168071,168073,168075,168077,168079,168081,168083,168085,168087],{"class":59,"line":150},[57,168064,148582],{"class":140},[57,168066,62876],{"class":74},[57,168068,51634],{"class":140},[57,168070,159928],{"class":74},[57,168072,12708],{"class":140},[57,168074,69321],{"class":74},[57,168076,51634],{"class":140},[57,168078,1091],{"class":81},[57,168080,12708],{"class":140},[57,168082,151669],{"class":74},[57,168084,51634],{"class":140},[57,168086,1298],{"class":81},[57,168088,5203],{"class":140},[57,168090,168091],{"class":59,"line":162},[57,168092,33443],{"class":140},[57,168094,168095],{"class":59,"line":180},[57,168096,2673],{"emptyLinePlaceholder":350},[57,168098,168099],{"class":59,"line":186},[57,168100,2673],{"emptyLinePlaceholder":350},[57,168102,168103,168105,168108],{"class":59,"line":197},[57,168104,32144],{"class":136},[57,168106,168107],{"class":70}," filter_students",[57,168109,168110],{"class":140},"(students, condition):\n",[57,168112,168113,168115,168117],{"class":59,"line":241},[57,168114,161420],{"class":140},[57,168116,156],{"class":136},[57,168118,52035],{"class":140},[57,168120,168121,168123,168125,168127],{"class":59,"line":249},[57,168122,3474],{"class":136},[57,168124,152334],{"class":140},[57,168126,26312],{"class":136},[57,168128,152339],{"class":140},[57,168130,168131,168133],{"class":59,"line":262},[57,168132,2770],{"class":136},[57,168134,168135],{"class":140}," condition(student):\n",[57,168137,168138],{"class":59,"line":281},[57,168139,168140],{"class":140},"            result.append(student)\n",[57,168142,168143,168145],{"class":59,"line":287},[57,168144,4363],{"class":136},[57,168146,167902],{"class":140},[57,168148,168149],{"class":59,"line":298},[57,168150,2673],{"emptyLinePlaceholder":350},[57,168152,168153],{"class":59,"line":311},[57,168154,2673],{"emptyLinePlaceholder":350},[57,168156,168157,168159,168161,168164,168166,168169,168171,168173,168175,168177],{"class":59,"line":322},[57,168158,165898],{"class":140},[57,168160,156],{"class":136},[57,168162,168163],{"class":140}," filter_students(students, ",[57,168165,167083],{"class":136},[57,168167,168168],{"class":140}," s: s[",[57,168170,151669],{"class":74},[57,168172,4716],{"class":140},[57,168174,1984],{"class":136},[57,168176,158034],{"class":81},[57,168178,238],{"class":140},[57,168180,168181,168184,168186,168188,168190,168192,168194,168196,168198,168200],{"class":59,"line":1929},[57,168182,168183],{"class":140},"excellent ",[57,168185,156],{"class":136},[57,168187,168163],{"class":140},[57,168189,167083],{"class":136},[57,168191,168168],{"class":140},[57,168193,151669],{"class":74},[57,168195,4716],{"class":140},[57,168197,1984],{"class":136},[57,168199,157985],{"class":81},[57,168201,238],{"class":140},[57,168203,168204,168207,168209,168211,168213,168215,168217,168219,168221,168223],{"class":59,"line":1950},[57,168205,168206],{"class":140},"under_age ",[57,168208,156],{"class":136},[57,168210,168163],{"class":140},[57,168212,167083],{"class":136},[57,168214,168168],{"class":140},[57,168216,69321],{"class":74},[57,168218,4716],{"class":140},[57,168220,1326],{"class":136},[57,168222,156482],{"class":81},[57,168224,238],{"class":140},[57,168226,168227],{"class":59,"line":1955},[57,168228,2673],{"emptyLinePlaceholder":350},[57,168230,168231,168233],{"class":59,"line":1969},[57,168232,165],{"class":81},[57,168234,168235],{"class":140},"(passed)\n",[57,168237,168238,168240],{"class":59,"line":1974},[57,168239,165],{"class":81},[57,168241,168242],{"class":140},"(excellent)\n",[57,168244,168245,168247],{"class":59,"line":2001},[57,168246,165],{"class":81},[57,168248,168249],{"class":140},"(under_age)\n",[365,168251,168253],{"id":168252},"_715-易错点","7.15 易错点",[377,168255,168256,168259,168267,168272,168283],{},[380,168257,168258],{},"默认参数不要写可变对象。",[380,168260,168261,168263,168264,168266],{},[28,168262,166729],{}," 是元组，",[28,168265,166844],{}," 是字典。",[380,168268,168269,168271],{},[28,168270,167083],{}," 只适合简单表达式。",[380,168273,168274,101215,168276,168278,168279,168282],{},[28,168275,74241],{},[28,168277,80248],{}," 的结果是迭代器，常用 ",[28,168280,168281],{},"list()"," 转换查看。",[380,168284,168285],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[365,168287,168289],{"id":168288},"_716-本章练习","7.16 本章练习",[377,168291,168292,168299,168305,168310,168315],{},[380,168293,168294,168295,168298],{},"写函数 ",[28,168296,168297],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[380,168300,168294,168301,168304],{},[28,168302,168303],{},"print_user(**kwargs)","，输出用户所有字段。",[380,168306,104563,168307,168309],{},[28,168308,167083],{}," 对学生列表按年龄排序。",[380,168311,104563,168312,168314],{},[28,168313,80248],{}," 找出成绩不及格的学生。",[380,168316,168317],{},"写一个装饰器，统计函数执行前后的提示信息。",[342,168319,168320],{},"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":46,"searchDepth":67,"depth":67,"links":168322},[168323,168324,168325,168326,168327,168328,168332,168333,168334,168335,168340,168341,168342,168343,168344,168345],{"id":166181,"depth":67,"text":166182},{"id":166295,"depth":67,"text":166296},{"id":166384,"depth":67,"text":166385},{"id":166446,"depth":67,"text":166447},{"id":166592,"depth":67,"text":166593},{"id":166719,"depth":67,"text":166720,"children":168329},[168330,168331],{"id":166723,"depth":144,"text":166724},{"id":166838,"depth":144,"text":166839},{"id":166919,"depth":67,"text":166920},{"id":167077,"depth":67,"text":167078},{"id":167245,"depth":67,"text":167246},{"id":167327,"depth":67,"text":167328,"children":168336},[168337,168338,168339],{"id":167331,"depth":144,"text":167332},{"id":167402,"depth":144,"text":167403},{"id":167479,"depth":144,"text":167480},{"id":167604,"depth":67,"text":167605},{"id":167694,"depth":67,"text":167695},{"id":167825,"depth":67,"text":167826},{"id":167975,"depth":67,"text":167976},{"id":168252,"depth":67,"text":168253},{"id":168288,"depth":67,"text":168289},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166173,"description":347},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168352,"title":168353,"body":168354,"description":347,"extension":348,"meta":170873,"navigation":350,"path":170874,"seo":170875,"stem":170876,"__hash__":170877},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168355,"toc":170848},[168356,168359,168363,168366,168369,168400,168404,168408,168411,168438,168442,168445,168496,168499,168514,168517,168552,168556,168558,168582,168585,168645,168649,168653,168656,168713,168716,168736,168740,168743,168806,168810,168813,168869,168876,168900,168904,168907,168970,168974,168979,169030,169033,169037,169042,169109,169112,169194,169198,169203,169254,169257,169261,169264,169267,169275,169278,169324,169327,169373,169377,169383,169427,169430,169476,169479,169519,169522,169583,169587,169590,169680,169683,169825,169828,169895,169899,169902,169905,170046,170049,170127,170130,170306,170310,170312,170323,170325,170524,170528,170772,170776,170810,170814,170845],[10,168357,168353],{"id":168358},"_8-文件操作",[365,168360,168362],{"id":168361},"_81-文件操作的意义","8.1 文件操作的意义",[14,168364,168365],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,168367,168368],{},"常见文件类型：",[377,168370,168371,168377,168383,168389,168395],{},[380,168372,168373,168376],{},[28,168374,168375],{},".txt","：普通文本。",[380,168378,168379,168382],{},[28,168380,168381],{},".csv","：表格文本。",[380,168384,168385,168388],{},[28,168386,168387],{},".json","：结构化数据。",[380,168390,168391,168394],{},[28,168392,168393],{},".log","：日志文件。",[380,168396,168397,168399],{},[28,168398,146549],{},"：Python 源代码。",[365,168401,168403],{"id":168402},"_82-路径","8.2 路径",[394,168405,168407],{"id":168406},"_821-相对路径","8.2.1 相对路径",[14,168409,168410],{},"相对当前运行目录：",[49,168412,168414],{"className":122,"code":168413,"language":124,"meta":46,"style":46},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[28,168415,168416],{"__ignoreMap":46},[57,168417,168418,168420,168422,168424,168426,168428,168430,168432,168434,168436],{"class":59,"line":60},[57,168419,87112],{"class":81},[57,168421,168],{"class":140},[57,168423,146993],{"class":74},[57,168425,12708],{"class":140},[57,168427,146998],{"class":74},[57,168429,12708],{"class":140},[57,168431,147003],{"class":5489},[57,168433,156],{"class":136},[57,168435,147008],{"class":74},[57,168437,238],{"class":140},[394,168439,168441],{"id":168440},"_822-绝对路径","8.2.2 绝对路径",[14,168443,168444],{},"从根目录或盘符开始：",[49,168446,168448],{"className":122,"code":168447,"language":124,"meta":46,"style":46},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[28,168449,168450,168473],{"__ignoreMap":46},[57,168451,168452,168454,168456,168459,168461,168463,168465,168467,168469,168471],{"class":59,"line":60},[57,168453,87112],{"class":81},[57,168455,168],{"class":140},[57,168457,168458],{"class":74},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[57,168460,12708],{"class":140},[57,168462,146998],{"class":74},[57,168464,12708],{"class":140},[57,168466,147003],{"class":5489},[57,168468,156],{"class":136},[57,168470,147008],{"class":74},[57,168472,238],{"class":140},[57,168474,168475,168477,168479,168482,168484,168486,168488,168490,168492,168494],{"class":59,"line":67},[57,168476,87112],{"class":81},[57,168478,168],{"class":140},[57,168480,168481],{"class":74},"\"D:\u002Fdata\u002Fdata.txt\"",[57,168483,12708],{"class":140},[57,168485,146998],{"class":74},[57,168487,12708],{"class":140},[57,168489,147003],{"class":5489},[57,168491,156],{"class":136},[57,168493,147008],{"class":74},[57,168495,238],{"class":140},[14,168497,168498],{},"Windows 路径建议写成：",[49,168500,168502],{"className":122,"code":168501,"language":124,"meta":46,"style":46},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[28,168503,168504],{"__ignoreMap":46},[57,168505,168506,168509,168511],{"class":59,"line":60},[57,168507,168508],{"class":140},"path ",[57,168510,156],{"class":136},[57,168512,168513],{"class":74}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,168515,168516],{},"或原始字符串：",[49,168518,168520],{"className":122,"code":168519,"language":124,"meta":46,"style":46},"path = r\"D:\\data\\data.txt\"\n",[28,168521,168522],{"__ignoreMap":46},[57,168523,168524,168526,168528,168530,168532,168535,168538,168541,168543,168545,168547,168550],{"class":59,"line":60},[57,168525,168508],{"class":140},[57,168527,156],{"class":136},[57,168529,17393],{"class":136},[57,168531,668],{"class":74},[57,168533,168534],{"class":48174},"D:",[57,168536,168537],{"class":81},"\\d",[57,168539,168540],{"class":48174},"ata",[57,168542,168537],{"class":81},[57,168544,168540],{"class":48174},[57,168546,974],{"class":81},[57,168548,168549],{"class":48174},"txt",[57,168551,25402],{"class":74},[365,168553,168555],{"id":168554},"_83-open函数","8.3 open函数",[14,168557,5454],{},[49,168559,168561],{"className":122,"code":168560,"language":124,"meta":46,"style":46},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[28,168562,168563],{"__ignoreMap":46},[57,168564,168565,168567,168569,168571,168574,168576,168578,168580],{"class":59,"line":60},[57,168566,45551],{"class":5489},[57,168568,13837],{"class":136},[57,168570,146988],{"class":81},[57,168572,168573],{"class":140},"(文件路径, 打开模式, ",[57,168575,147003],{"class":5489},[57,168577,156],{"class":136},[57,168579,147008],{"class":74},[57,168581,238],{"class":140},[14,168583,168584],{},"常见模式：",[557,168586,168587,168596],{},[560,168588,168589],{},[563,168590,168591,168594],{},[566,168592,168593],{},"模式",[566,168595,26138],{},[603,168597,168598,168607,168616,168625,168635],{},[563,168599,168600,168604],{},[608,168601,168602],{},[28,168603,1086],{},[608,168605,168606],{},"只读，文件不存在会报错",[563,168608,168609,168613],{},[608,168610,168611],{},[28,168612,1211],{},[608,168614,168615],{},"只写，文件不存在会创建，存在会清空",[563,168617,168618,168622],{},[608,168619,168620],{},[28,168621,18],{},[608,168623,168624],{},"追加，文件不存在会创建",[563,168626,168627,168632],{},[608,168628,168629],{},[28,168630,168631],{},"rb",[608,168633,168634],{},"二进制只读",[563,168636,168637,168642],{},[608,168638,168639],{},[28,168640,168641],{},"wb",[608,168643,168644],{},"二进制只写",[365,168646,168648],{"id":168647},"_84-读取文件","8.4 读取文件",[394,168650,168652],{"id":168651},"_841-read","8.4.1 read",[14,168654,168655],{},"一次读取全部内容：",[49,168657,168659],{"className":122,"code":168658,"language":124,"meta":46,"style":46},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[28,168660,168661,168687,168699,168706],{"__ignoreMap":46},[57,168662,168663,168665,168667,168669,168671,168673,168675,168677,168679,168681,168683,168685],{"class":59,"line":60},[57,168664,45551],{"class":5489},[57,168666,13837],{"class":136},[57,168668,146988],{"class":81},[57,168670,168],{"class":140},[57,168672,146993],{"class":74},[57,168674,12708],{"class":140},[57,168676,146998],{"class":74},[57,168678,12708],{"class":140},[57,168680,147003],{"class":5489},[57,168682,156],{"class":136},[57,168684,147008],{"class":74},[57,168686,238],{"class":140},[57,168688,168689,168692,168694,168696],{"class":59,"line":67},[57,168690,168691],{"class":140},"content ",[57,168693,156],{"class":136},[57,168695,148350],{"class":5489},[57,168697,168698],{"class":140},".read()\n",[57,168700,168701,168703],{"class":59,"line":144},[57,168702,165],{"class":81},[57,168704,168705],{"class":140},"(content)\n",[57,168707,168708,168710],{"class":59,"line":150},[57,168709,45551],{"class":5489},[57,168711,168712],{"class":140},".close()\n",[14,168714,168715],{},"可以指定读取字符数：",[49,168717,168719],{"className":122,"code":168718,"language":124,"meta":46,"style":46},"content = file.read(10)\n",[28,168720,168721],{"__ignoreMap":46},[57,168722,168723,168725,168727,168729,168732,168734],{"class":59,"line":60},[57,168724,168691],{"class":140},[57,168726,156],{"class":136},[57,168728,148350],{"class":5489},[57,168730,168731],{"class":140},".read(",[57,168733,862],{"class":81},[57,168735,238],{"class":140},[394,168737,168739],{"id":168738},"_842-readline","8.4.2 readline",[14,168741,168742],{},"一次读取一行：",[49,168744,168746],{"className":122,"code":168745,"language":124,"meta":46,"style":46},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[28,168747,168748,168774,168778,168789,168796,168800],{"__ignoreMap":46},[57,168749,168750,168752,168754,168756,168758,168760,168762,168764,168766,168768,168770,168772],{"class":59,"line":60},[57,168751,45551],{"class":5489},[57,168753,13837],{"class":136},[57,168755,146988],{"class":81},[57,168757,168],{"class":140},[57,168759,146993],{"class":74},[57,168761,12708],{"class":140},[57,168763,146998],{"class":74},[57,168765,12708],{"class":140},[57,168767,147003],{"class":5489},[57,168769,156],{"class":136},[57,168771,147008],{"class":74},[57,168773,238],{"class":140},[57,168775,168776],{"class":59,"line":67},[57,168777,2673],{"emptyLinePlaceholder":350},[57,168779,168780,168782,168784,168786],{"class":59,"line":144},[57,168781,147449],{"class":140},[57,168783,156],{"class":136},[57,168785,148350],{"class":5489},[57,168787,168788],{"class":140},".readline()\n",[57,168790,168791,168793],{"class":59,"line":150},[57,168792,165],{"class":81},[57,168794,168795],{"class":140},"(line)\n",[57,168797,168798],{"class":59,"line":162},[57,168799,2673],{"emptyLinePlaceholder":350},[57,168801,168802,168804],{"class":59,"line":180},[57,168803,45551],{"class":5489},[57,168805,168712],{"class":140},[394,168807,168809],{"id":168808},"_843-readlines","8.4.3 readlines",[14,168811,168812],{},"读取所有行，返回列表：",[49,168814,168816],{"className":122,"code":168815,"language":124,"meta":46,"style":46},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[28,168817,168818,168844,168856,168863],{"__ignoreMap":46},[57,168819,168820,168822,168824,168826,168828,168830,168832,168834,168836,168838,168840,168842],{"class":59,"line":60},[57,168821,45551],{"class":5489},[57,168823,13837],{"class":136},[57,168825,146988],{"class":81},[57,168827,168],{"class":140},[57,168829,146993],{"class":74},[57,168831,12708],{"class":140},[57,168833,146998],{"class":74},[57,168835,12708],{"class":140},[57,168837,147003],{"class":5489},[57,168839,156],{"class":136},[57,168841,147008],{"class":74},[57,168843,238],{"class":140},[57,168845,168846,168849,168851,168853],{"class":59,"line":67},[57,168847,168848],{"class":140},"lines ",[57,168850,156],{"class":136},[57,168852,148350],{"class":5489},[57,168854,168855],{"class":140},".readlines()\n",[57,168857,168858,168860],{"class":59,"line":144},[57,168859,165],{"class":81},[57,168861,168862],{"class":140},"(lines)\n",[57,168864,168865,168867],{"class":59,"line":150},[57,168866,45551],{"class":5489},[57,168868,168712],{"class":140},[14,168870,168871,168872,168875],{},"每一行通常带有换行符，可以用 ",[28,168873,168874],{},"strip()"," 去掉：",[49,168877,168879],{"className":122,"code":168878,"language":124,"meta":46,"style":46},"for line in lines:\n    print(line.strip())\n",[28,168880,168881,168893],{"__ignoreMap":46},[57,168882,168883,168885,168888,168890],{"class":59,"line":60},[57,168884,3298],{"class":136},[57,168886,168887],{"class":140}," line ",[57,168889,26312],{"class":136},[57,168891,168892],{"class":140}," lines:\n",[57,168894,168895,168897],{"class":59,"line":67},[57,168896,31496],{"class":81},[57,168898,168899],{"class":140},"(line.strip())\n",[394,168901,168903],{"id":168902},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,168905,168906],{},"推荐读取大文件时使用：",[49,168908,168910],{"className":122,"code":168909,"language":124,"meta":46,"style":46},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[28,168911,168912,168938,168942,168954,168960,168964],{"__ignoreMap":46},[57,168913,168914,168916,168918,168920,168922,168924,168926,168928,168930,168932,168934,168936],{"class":59,"line":60},[57,168915,45551],{"class":5489},[57,168917,13837],{"class":136},[57,168919,146988],{"class":81},[57,168921,168],{"class":140},[57,168923,146993],{"class":74},[57,168925,12708],{"class":140},[57,168927,146998],{"class":74},[57,168929,12708],{"class":140},[57,168931,147003],{"class":5489},[57,168933,156],{"class":136},[57,168935,147008],{"class":74},[57,168937,238],{"class":140},[57,168939,168940],{"class":59,"line":67},[57,168941,2673],{"emptyLinePlaceholder":350},[57,168943,168944,168946,168948,168950,168952],{"class":59,"line":144},[57,168945,3298],{"class":136},[57,168947,168887],{"class":140},[57,168949,26312],{"class":136},[57,168951,148350],{"class":5489},[57,168953,4012],{"class":140},[57,168955,168956,168958],{"class":59,"line":150},[57,168957,31496],{"class":81},[57,168959,168899],{"class":140},[57,168961,168962],{"class":59,"line":162},[57,168963,2673],{"emptyLinePlaceholder":350},[57,168965,168966,168968],{"class":59,"line":180},[57,168967,45551],{"class":5489},[57,168969,168712],{"class":140},[365,168971,168973],{"id":168972},"_85-with语句","8.5 with语句",[14,168975,168976,168978],{},[28,168977,108030],{}," 会自动关闭文件，推荐使用。",[49,168980,168982],{"className":122,"code":168981,"language":124,"meta":46,"style":46},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[28,168983,168984,169014,169024],{"__ignoreMap":46},[57,168985,168986,168988,168990,168992,168994,168996,168998,169000,169002,169004,169006,169008,169010,169012],{"class":59,"line":60},[57,168987,108030],{"class":136},[57,168989,146988],{"class":81},[57,168991,168],{"class":140},[57,168993,146993],{"class":74},[57,168995,12708],{"class":140},[57,168997,146998],{"class":74},[57,168999,12708],{"class":140},[57,169001,147003],{"class":5489},[57,169003,156],{"class":136},[57,169005,147008],{"class":74},[57,169007,229],{"class":140},[57,169009,31580],{"class":136},[57,169011,148350],{"class":5489},[57,169013,4012],{"class":140},[57,169015,169016,169018,169020,169022],{"class":59,"line":67},[57,169017,147020],{"class":140},[57,169019,156],{"class":136},[57,169021,148350],{"class":5489},[57,169023,168698],{"class":140},[57,169025,169026,169028],{"class":59,"line":144},[57,169027,31496],{"class":81},[57,169029,168705],{"class":140},[14,169031,169032],{},"等价于打开文件、读取、最后关闭，但更安全。",[365,169034,169036],{"id":169035},"_86-写入文件","8.6 写入文件",[14,169038,169039,169041],{},[28,169040,1211],{}," 模式会清空原文件。",[49,169043,169045],{"className":122,"code":169044,"language":124,"meta":46,"style":46},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[28,169046,169047,169077,169094],{"__ignoreMap":46},[57,169048,169049,169051,169053,169055,169057,169059,169061,169063,169065,169067,169069,169071,169073,169075],{"class":59,"line":60},[57,169050,108030],{"class":136},[57,169052,146988],{"class":81},[57,169054,168],{"class":140},[57,169056,146993],{"class":74},[57,169058,12708],{"class":140},[57,169060,152173],{"class":74},[57,169062,12708],{"class":140},[57,169064,147003],{"class":5489},[57,169066,156],{"class":136},[57,169068,147008],{"class":74},[57,169070,229],{"class":140},[57,169072,31580],{"class":136},[57,169074,148350],{"class":5489},[57,169076,4012],{"class":140},[57,169078,169079,169082,169085,169088,169090,169092],{"class":59,"line":67},[57,169080,169081],{"class":5489},"    file",[57,169083,169084],{"class":140},".write(",[57,169086,169087],{"class":74},"\"hello",[57,169089,156722],{"class":81},[57,169091,668],{"class":74},[57,169093,238],{"class":140},[57,169095,169096,169098,169100,169103,169105,169107],{"class":59,"line":144},[57,169097,169081],{"class":5489},[57,169099,169084],{"class":140},[57,169101,169102],{"class":74},"\"python",[57,169104,156722],{"class":81},[57,169106,668],{"class":74},[57,169108,238],{"class":140},[14,169110,169111],{},"写入多行：",[49,169113,169115],{"className":122,"code":169114,"language":124,"meta":46,"style":46},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[28,169116,169117,169152,169156,169187],{"__ignoreMap":46},[57,169118,169119,169121,169123,169125,169128,169130,169132,169134,169137,169139,169141,169143,169146,169148,169150],{"class":59,"line":60},[57,169120,168848],{"class":140},[57,169122,156],{"class":136},[57,169124,52423],{"class":140},[57,169126,169127],{"class":74},"\"小明,18",[57,169129,156722],{"class":81},[57,169131,668],{"class":74},[57,169133,12708],{"class":140},[57,169135,169136],{"class":74},"\"小红,17",[57,169138,156722],{"class":81},[57,169140,668],{"class":74},[57,169142,12708],{"class":140},[57,169144,169145],{"class":74},"\"小刚,19",[57,169147,156722],{"class":81},[57,169149,668],{"class":74},[57,169151,33443],{"class":140},[57,169153,169154],{"class":59,"line":67},[57,169155,2673],{"emptyLinePlaceholder":350},[57,169157,169158,169160,169162,169164,169167,169169,169171,169173,169175,169177,169179,169181,169183,169185],{"class":59,"line":144},[57,169159,108030],{"class":136},[57,169161,146988],{"class":81},[57,169163,168],{"class":140},[57,169165,169166],{"class":74},"\"students.txt\"",[57,169168,12708],{"class":140},[57,169170,152173],{"class":74},[57,169172,12708],{"class":140},[57,169174,147003],{"class":5489},[57,169176,156],{"class":136},[57,169178,147008],{"class":74},[57,169180,229],{"class":140},[57,169182,31580],{"class":136},[57,169184,148350],{"class":5489},[57,169186,4012],{"class":140},[57,169188,169189,169191],{"class":59,"line":150},[57,169190,169081],{"class":5489},[57,169192,169193],{"class":140},".writelines(lines)\n",[365,169195,169197],{"id":169196},"_87-追加文件","8.7 追加文件",[14,169199,169200,169202],{},[28,169201,18],{}," 模式不会清空原内容，而是在末尾追加。",[49,169204,169206],{"className":122,"code":169205,"language":124,"meta":46,"style":46},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[28,169207,169208,169239],{"__ignoreMap":46},[57,169209,169210,169212,169214,169216,169219,169221,169223,169225,169227,169229,169231,169233,169235,169237],{"class":59,"line":60},[57,169211,108030],{"class":136},[57,169213,146988],{"class":81},[57,169215,168],{"class":140},[57,169217,169218],{"class":74},"\"log.txt\"",[57,169220,12708],{"class":140},[57,169222,165522],{"class":74},[57,169224,12708],{"class":140},[57,169226,147003],{"class":5489},[57,169228,156],{"class":136},[57,169230,147008],{"class":74},[57,169232,229],{"class":140},[57,169234,31580],{"class":136},[57,169236,148350],{"class":5489},[57,169238,4012],{"class":140},[57,169240,169241,169243,169245,169248,169250,169252],{"class":59,"line":67},[57,169242,169081],{"class":5489},[57,169244,169084],{"class":140},[57,169246,169247],{"class":74},"\"程序启动",[57,169249,156722],{"class":81},[57,169251,668],{"class":74},[57,169253,238],{"class":140},[14,169255,169256],{},"日志类文件常用追加模式。",[365,169258,169260],{"id":169259},"_88-文件编码","8.8 文件编码",[14,169262,169263],{},"编码决定文字如何保存为字节。",[14,169265,169266],{},"常见编码：",[377,169268,169269,169272],{},[380,169270,169271],{},"UTF-8：推荐。",[380,169273,169274],{},"GBK：部分 Windows 中文文件常见。",[14,169276,169277],{},"读取文件乱码时，可以尝试：",[49,169279,169281],{"className":122,"code":169280,"language":124,"meta":46,"style":46},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[28,169282,169283,169314],{"__ignoreMap":46},[57,169284,169285,169287,169289,169291,169293,169295,169297,169299,169301,169303,169306,169308,169310,169312],{"class":59,"line":60},[57,169286,108030],{"class":136},[57,169288,146988],{"class":81},[57,169290,168],{"class":140},[57,169292,146993],{"class":74},[57,169294,12708],{"class":140},[57,169296,146998],{"class":74},[57,169298,12708],{"class":140},[57,169300,147003],{"class":5489},[57,169302,156],{"class":136},[57,169304,169305],{"class":74},"\"gbk\"",[57,169307,229],{"class":140},[57,169309,31580],{"class":136},[57,169311,148350],{"class":5489},[57,169313,4012],{"class":140},[57,169315,169316,169318,169320,169322],{"class":59,"line":67},[57,169317,147020],{"class":140},[57,169319,156],{"class":136},[57,169321,148350],{"class":5489},[57,169323,168698],{"class":140},[14,169325,169326],{},"写文件时建议统一 UTF-8：",[49,169328,169330],{"className":122,"code":169329,"language":124,"meta":46,"style":46},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[28,169331,169332,169362],{"__ignoreMap":46},[57,169333,169334,169336,169338,169340,169342,169344,169346,169348,169350,169352,169354,169356,169358,169360],{"class":59,"line":60},[57,169335,108030],{"class":136},[57,169337,146988],{"class":81},[57,169339,168],{"class":140},[57,169341,146993],{"class":74},[57,169343,12708],{"class":140},[57,169345,152173],{"class":74},[57,169347,12708],{"class":140},[57,169349,147003],{"class":5489},[57,169351,156],{"class":136},[57,169353,147008],{"class":74},[57,169355,229],{"class":140},[57,169357,31580],{"class":136},[57,169359,148350],{"class":5489},[57,169361,4012],{"class":140},[57,169363,169364,169366,169368,169371],{"class":59,"line":67},[57,169365,169081],{"class":5489},[57,169367,169084],{"class":140},[57,169369,169370],{"class":74},"\"中文内容\"",[57,169372,238],{"class":140},[365,169374,169376],{"id":169375},"_89-pathlib","8.9 pathlib",[14,169378,169379,169382],{},[28,169380,169381],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[49,169384,169386],{"className":122,"code":169385,"language":124,"meta":46,"style":46},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[28,169387,169388,169398,169402,169420],{"__ignoreMap":46},[57,169389,169390,169392,169394,169396],{"class":59,"line":60},[57,169391,30934],{"class":136},[57,169393,108508],{"class":140},[57,169395,137],{"class":136},[57,169397,108513],{"class":140},[57,169399,169400],{"class":59,"line":67},[57,169401,2673],{"emptyLinePlaceholder":350},[57,169403,169404,169406,169408,169410,169413,169415,169417],{"class":59,"line":144},[57,169405,168508],{"class":140},[57,169407,156],{"class":136},[57,169409,108742],{"class":140},[57,169411,169412],{"class":74},"\"data\"",[57,169414,229],{"class":140},[57,169416,1000],{"class":136},[57,169418,169419],{"class":74}," \"students.txt\"\n",[57,169421,169422,169424],{"class":59,"line":150},[57,169423,165],{"class":81},[57,169425,169426],{"class":140},"(path)\n",[14,169428,169429],{},"创建目录：",[49,169431,169433],{"className":122,"code":169432,"language":124,"meta":46,"style":46},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[28,169434,169435,169445,169449,169462],{"__ignoreMap":46},[57,169436,169437,169439,169441,169443],{"class":59,"line":60},[57,169438,30934],{"class":136},[57,169440,108508],{"class":140},[57,169442,137],{"class":136},[57,169444,108513],{"class":140},[57,169446,169447],{"class":59,"line":67},[57,169448,2673],{"emptyLinePlaceholder":350},[57,169450,169451,169454,169456,169458,169460],{"class":59,"line":144},[57,169452,169453],{"class":140},"data_dir ",[57,169455,156],{"class":136},[57,169457,108742],{"class":140},[57,169459,169412],{"class":74},[57,169461,238],{"class":140},[57,169463,169464,169467,169470,169472,169474],{"class":59,"line":150},[57,169465,169466],{"class":140},"data_dir.mkdir(",[57,169468,169469],{"class":5489},"exist_ok",[57,169471,156],{"class":136},[57,169473,31673],{"class":81},[57,169475,238],{"class":140},[14,169477,169478],{},"判断文件是否存在：",[49,169480,169482],{"className":122,"code":169481,"language":124,"meta":46,"style":46},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[28,169483,169484,169497,169501,169508],{"__ignoreMap":46},[57,169485,169486,169488,169490,169492,169495],{"class":59,"line":60},[57,169487,168508],{"class":140},[57,169489,156],{"class":136},[57,169491,108742],{"class":140},[57,169493,169494],{"class":74},"\"data\u002Fstudents.txt\"",[57,169496,238],{"class":140},[57,169498,169499],{"class":59,"line":67},[57,169500,2673],{"emptyLinePlaceholder":350},[57,169502,169503,169505],{"class":59,"line":144},[57,169504,1813],{"class":136},[57,169506,169507],{"class":140}," path.exists():\n",[57,169509,169510,169512,169514,169517],{"class":59,"line":150},[57,169511,31496],{"class":81},[57,169513,168],{"class":140},[57,169515,169516],{"class":74},"\"文件存在\"",[57,169518,238],{"class":140},[14,169520,169521],{},"读写文本：",[49,169523,169525],{"className":122,"code":169524,"language":124,"meta":46,"style":46},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[28,169526,169527,169539,169543,169560,169577],{"__ignoreMap":46},[57,169528,169529,169531,169533,169535,169537],{"class":59,"line":60},[57,169530,168508],{"class":140},[57,169532,156],{"class":136},[57,169534,108742],{"class":140},[57,169536,146993],{"class":74},[57,169538,238],{"class":140},[57,169540,169541],{"class":59,"line":67},[57,169542,2673],{"emptyLinePlaceholder":350},[57,169544,169545,169548,169550,169552,169554,169556,169558],{"class":59,"line":144},[57,169546,169547],{"class":140},"path.write_text(",[57,169549,146073],{"class":74},[57,169551,12708],{"class":140},[57,169553,147003],{"class":5489},[57,169555,156],{"class":136},[57,169557,147008],{"class":74},[57,169559,238],{"class":140},[57,169561,169562,169564,169566,169569,169571,169573,169575],{"class":59,"line":150},[57,169563,168691],{"class":140},[57,169565,156],{"class":136},[57,169567,169568],{"class":140}," path.read_text(",[57,169570,147003],{"class":5489},[57,169572,156],{"class":136},[57,169574,147008],{"class":74},[57,169576,238],{"class":140},[57,169578,169579,169581],{"class":59,"line":162},[57,169580,165],{"class":81},[57,169582,168705],{"class":140},[365,169584,169586],{"id":169585},"_810-json文件","8.10 JSON文件",[14,169588,169589],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[49,169591,169593],{"className":122,"code":169592,"language":124,"meta":46,"style":46},"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",[28,169594,169595,169601,169605,169613,169623,169633,169641,169645,169649,169674],{"__ignoreMap":46},[57,169596,169597,169599],{"class":59,"line":60},[57,169598,137],{"class":136},[57,169600,147288],{"class":140},[57,169602,169603],{"class":59,"line":67},[57,169604,2673],{"emptyLinePlaceholder":350},[57,169606,169607,169609,169611],{"class":59,"line":144},[57,169608,149678],{"class":140},[57,169610,156],{"class":136},[57,169612,15844],{"class":140},[57,169614,169615,169617,169619,169621],{"class":59,"line":150},[57,169616,147217],{"class":74},[57,169618,51634],{"class":140},[57,169620,150085],{"class":74},[57,169622,31663],{"class":140},[57,169624,169625,169627,169629,169631],{"class":59,"line":162},[57,169626,164734],{"class":74},[57,169628,51634],{"class":140},[57,169630,1066],{"class":81},[57,169632,31663],{"class":140},[57,169634,169635,169637,169639],{"class":59,"line":180},[57,169636,164745],{"class":74},[57,169638,51634],{"class":140},[57,169640,164750],{"class":81},[57,169642,169643],{"class":59,"line":186},[57,169644,1847],{"class":140},[57,169646,169647],{"class":59,"line":197},[57,169648,2673],{"emptyLinePlaceholder":350},[57,169650,169651,169653,169655,169658,169660,169662,169664,169666,169668,169670,169672],{"class":59,"line":241},[57,169652,156641],{"class":140},[57,169654,156],{"class":136},[57,169656,169657],{"class":140}," json.dumps(student, ",[57,169659,147334],{"class":5489},[57,169661,156],{"class":136},[57,169663,34184],{"class":81},[57,169665,12708],{"class":140},[57,169667,152209],{"class":5489},[57,169669,156],{"class":136},[57,169671,498],{"class":81},[57,169673,238],{"class":140},[57,169675,169676,169678],{"class":59,"line":249},[57,169677,165],{"class":81},[57,169679,164268],{"class":140},[14,169681,169682],{},"写入 JSON 文件：",[49,169684,169686],{"className":122,"code":169685,"language":124,"meta":46,"style":46},"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",[28,169687,169688,169694,169698,169706,169734,169762,169766,169770,169800],{"__ignoreMap":46},[57,169689,169690,169692],{"class":59,"line":60},[57,169691,137],{"class":136},[57,169693,147288],{"class":140},[57,169695,169696],{"class":59,"line":67},[57,169697,2673],{"emptyLinePlaceholder":350},[57,169699,169700,169702,169704],{"class":59,"line":144},[57,169701,159913],{"class":140},[57,169703,156],{"class":136},[57,169705,55644],{"class":140},[57,169707,169708,169710,169712,169714,169716,169718,169720,169722,169724,169726,169728,169730,169732],{"class":59,"line":150},[57,169709,148582],{"class":140},[57,169711,62876],{"class":74},[57,169713,51634],{"class":140},[57,169715,150085],{"class":74},[57,169717,12708],{"class":140},[57,169719,69321],{"class":74},[57,169721,51634],{"class":140},[57,169723,1066],{"class":81},[57,169725,12708],{"class":140},[57,169727,151669],{"class":74},[57,169729,51634],{"class":140},[57,169731,1404],{"class":81},[57,169733,5203],{"class":140},[57,169735,169736,169738,169740,169742,169744,169746,169748,169750,169752,169754,169756,169758,169760],{"class":59,"line":162},[57,169737,148582],{"class":140},[57,169739,62876],{"class":74},[57,169741,51634],{"class":140},[57,169743,151133],{"class":74},[57,169745,12708],{"class":140},[57,169747,69321],{"class":74},[57,169749,51634],{"class":140},[57,169751,1041],{"class":81},[57,169753,12708],{"class":140},[57,169755,151669],{"class":74},[57,169757,51634],{"class":140},[57,169759,1227],{"class":81},[57,169761,5203],{"class":140},[57,169763,169764],{"class":59,"line":180},[57,169765,33443],{"class":140},[57,169767,169768],{"class":59,"line":186},[57,169769,2673],{"emptyLinePlaceholder":350},[57,169771,169772,169774,169776,169778,169780,169782,169784,169786,169788,169790,169792,169794,169796,169798],{"class":59,"line":197},[57,169773,108030],{"class":136},[57,169775,146988],{"class":81},[57,169777,168],{"class":140},[57,169779,152028],{"class":74},[57,169781,12708],{"class":140},[57,169783,152173],{"class":74},[57,169785,12708],{"class":140},[57,169787,147003],{"class":5489},[57,169789,156],{"class":136},[57,169791,147008],{"class":74},[57,169793,229],{"class":140},[57,169795,31580],{"class":136},[57,169797,148350],{"class":5489},[57,169799,4012],{"class":140},[57,169801,169802,169805,169807,169809,169811,169813,169815,169817,169819,169821,169823],{"class":59,"line":241},[57,169803,169804],{"class":140},"    json.dump(students, ",[57,169806,45551],{"class":5489},[57,169808,12708],{"class":140},[57,169810,147334],{"class":5489},[57,169812,156],{"class":136},[57,169814,34184],{"class":81},[57,169816,12708],{"class":140},[57,169818,152209],{"class":5489},[57,169820,156],{"class":136},[57,169822,498],{"class":81},[57,169824,238],{"class":140},[14,169826,169827],{},"读取 JSON 文件：",[49,169829,169831],{"className":122,"code":169830,"language":124,"meta":46,"style":46},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[28,169832,169833,169839,169843,169873,169885,169889],{"__ignoreMap":46},[57,169834,169835,169837],{"class":59,"line":60},[57,169836,137],{"class":136},[57,169838,147288],{"class":140},[57,169840,169841],{"class":59,"line":67},[57,169842,2673],{"emptyLinePlaceholder":350},[57,169844,169845,169847,169849,169851,169853,169855,169857,169859,169861,169863,169865,169867,169869,169871],{"class":59,"line":144},[57,169846,108030],{"class":136},[57,169848,146988],{"class":81},[57,169850,168],{"class":140},[57,169852,152028],{"class":74},[57,169854,12708],{"class":140},[57,169856,146998],{"class":74},[57,169858,12708],{"class":140},[57,169860,147003],{"class":5489},[57,169862,156],{"class":136},[57,169864,147008],{"class":74},[57,169866,229],{"class":140},[57,169868,31580],{"class":136},[57,169870,148350],{"class":5489},[57,169872,4012],{"class":140},[57,169874,169875,169877,169879,169881,169883],{"class":59,"line":150},[57,169876,153234],{"class":140},[57,169878,156],{"class":136},[57,169880,148361],{"class":140},[57,169882,45551],{"class":5489},[57,169884,238],{"class":140},[57,169886,169887],{"class":59,"line":162},[57,169888,2673],{"emptyLinePlaceholder":350},[57,169890,169891,169893],{"class":59,"line":180},[57,169892,165],{"class":81},[57,169894,165192],{"class":140},[365,169896,169898],{"id":169897},"_811-csv文件","8.11 CSV文件",[14,169900,169901],{},"CSV 是逗号分隔值，常用于表格数据。",[14,169903,169904],{},"写入 CSV：",[49,169906,169908],{"className":122,"code":169907,"language":124,"meta":46,"style":46},"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",[28,169909,169910,169917,169921,169929,169947,169963,169979,169983,169987,170027,170041],{"__ignoreMap":46},[57,169911,169912,169914],{"class":59,"line":60},[57,169913,137],{"class":136},[57,169915,169916],{"class":140}," csv\n",[57,169918,169919],{"class":59,"line":67},[57,169920,2673],{"emptyLinePlaceholder":350},[57,169922,169923,169925,169927],{"class":59,"line":144},[57,169924,159913],{"class":140},[57,169926,156],{"class":136},[57,169928,55644],{"class":140},[57,169930,169931,169934,169936,169938,169940,169942,169945],{"class":59,"line":150},[57,169932,169933],{"class":140},"    [",[57,169935,73296],{"class":74},[57,169937,12708],{"class":140},[57,169939,73329],{"class":74},[57,169941,12708],{"class":140},[57,169943,169944],{"class":74},"\"成绩\"",[57,169946,88033],{"class":140},[57,169948,169949,169951,169953,169955,169957,169959,169961],{"class":59,"line":162},[57,169950,169933],{"class":140},[57,169952,150085],{"class":74},[57,169954,12708],{"class":140},[57,169956,1066],{"class":81},[57,169958,12708],{"class":140},[57,169960,1404],{"class":81},[57,169962,88033],{"class":140},[57,169964,169965,169967,169969,169971,169973,169975,169977],{"class":59,"line":180},[57,169966,169933],{"class":140},[57,169968,151133],{"class":74},[57,169970,12708],{"class":140},[57,169972,1041],{"class":81},[57,169974,12708],{"class":140},[57,169976,1227],{"class":81},[57,169978,88033],{"class":140},[57,169980,169981],{"class":59,"line":186},[57,169982,33443],{"class":140},[57,169984,169985],{"class":59,"line":197},[57,169986,2673],{"emptyLinePlaceholder":350},[57,169988,169989,169991,169993,169995,169998,170000,170002,170004,170006,170008,170010,170012,170015,170017,170019,170021,170023,170025],{"class":59,"line":241},[57,169990,108030],{"class":136},[57,169992,146988],{"class":81},[57,169994,168],{"class":140},[57,169996,169997],{"class":74},"\"students.csv\"",[57,169999,12708],{"class":140},[57,170001,152173],{"class":74},[57,170003,12708],{"class":140},[57,170005,147003],{"class":5489},[57,170007,156],{"class":136},[57,170009,147008],{"class":74},[57,170011,12708],{"class":140},[57,170013,170014],{"class":5489},"newline",[57,170016,156],{"class":136},[57,170018,7925],{"class":74},[57,170020,229],{"class":140},[57,170022,31580],{"class":136},[57,170024,148350],{"class":5489},[57,170026,4012],{"class":140},[57,170028,170029,170032,170034,170037,170039],{"class":59,"line":249},[57,170030,170031],{"class":140},"    writer ",[57,170033,156],{"class":136},[57,170035,170036],{"class":140}," csv.writer(",[57,170038,45551],{"class":5489},[57,170040,238],{"class":140},[57,170042,170043],{"class":59,"line":262},[57,170044,170045],{"class":140},"    writer.writerows(students)\n",[14,170047,170048],{},"读取 CSV：",[49,170050,170052],{"className":122,"code":170051,"language":124,"meta":46,"style":46},"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",[28,170053,170054,170060,170064,170094,170108,170120],{"__ignoreMap":46},[57,170055,170056,170058],{"class":59,"line":60},[57,170057,137],{"class":136},[57,170059,169916],{"class":140},[57,170061,170062],{"class":59,"line":67},[57,170063,2673],{"emptyLinePlaceholder":350},[57,170065,170066,170068,170070,170072,170074,170076,170078,170080,170082,170084,170086,170088,170090,170092],{"class":59,"line":144},[57,170067,108030],{"class":136},[57,170069,146988],{"class":81},[57,170071,168],{"class":140},[57,170073,169997],{"class":74},[57,170075,12708],{"class":140},[57,170077,146998],{"class":74},[57,170079,12708],{"class":140},[57,170081,147003],{"class":5489},[57,170083,156],{"class":136},[57,170085,147008],{"class":74},[57,170087,229],{"class":140},[57,170089,31580],{"class":136},[57,170091,148350],{"class":5489},[57,170093,4012],{"class":140},[57,170095,170096,170099,170101,170104,170106],{"class":59,"line":150},[57,170097,170098],{"class":140},"    reader ",[57,170100,156],{"class":136},[57,170102,170103],{"class":140}," csv.reader(",[57,170105,45551],{"class":5489},[57,170107,238],{"class":140},[57,170109,170110,170112,170115,170117],{"class":59,"line":162},[57,170111,3474],{"class":136},[57,170113,170114],{"class":140}," row ",[57,170116,26312],{"class":136},[57,170118,170119],{"class":140}," reader:\n",[57,170121,170122,170124],{"class":59,"line":180},[57,170123,32648],{"class":81},[57,170125,170126],{"class":140},"(row)\n",[14,170128,170129],{},"使用字典写入：",[49,170131,170133],{"className":122,"code":170132,"language":124,"meta":46,"style":46},"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",[28,170134,170135,170141,170145,170153,170181,170209,170213,170217,170255,170276,170297,170302],{"__ignoreMap":46},[57,170136,170137,170139],{"class":59,"line":60},[57,170138,137],{"class":136},[57,170140,169916],{"class":140},[57,170142,170143],{"class":59,"line":67},[57,170144,2673],{"emptyLinePlaceholder":350},[57,170146,170147,170149,170151],{"class":59,"line":144},[57,170148,159913],{"class":140},[57,170150,156],{"class":136},[57,170152,55644],{"class":140},[57,170154,170155,170157,170159,170161,170163,170165,170167,170169,170171,170173,170175,170177,170179],{"class":59,"line":150},[57,170156,148582],{"class":140},[57,170158,62876],{"class":74},[57,170160,51634],{"class":140},[57,170162,150085],{"class":74},[57,170164,12708],{"class":140},[57,170166,69321],{"class":74},[57,170168,51634],{"class":140},[57,170170,1066],{"class":81},[57,170172,12708],{"class":140},[57,170174,151669],{"class":74},[57,170176,51634],{"class":140},[57,170178,1404],{"class":81},[57,170180,5203],{"class":140},[57,170182,170183,170185,170187,170189,170191,170193,170195,170197,170199,170201,170203,170205,170207],{"class":59,"line":162},[57,170184,148582],{"class":140},[57,170186,62876],{"class":74},[57,170188,51634],{"class":140},[57,170190,151133],{"class":74},[57,170192,12708],{"class":140},[57,170194,69321],{"class":74},[57,170196,51634],{"class":140},[57,170198,1041],{"class":81},[57,170200,12708],{"class":140},[57,170202,151669],{"class":74},[57,170204,51634],{"class":140},[57,170206,1227],{"class":81},[57,170208,5203],{"class":140},[57,170210,170211],{"class":59,"line":180},[57,170212,33443],{"class":140},[57,170214,170215],{"class":59,"line":186},[57,170216,2673],{"emptyLinePlaceholder":350},[57,170218,170219,170221,170223,170225,170227,170229,170231,170233,170235,170237,170239,170241,170243,170245,170247,170249,170251,170253],{"class":59,"line":197},[57,170220,108030],{"class":136},[57,170222,146988],{"class":81},[57,170224,168],{"class":140},[57,170226,169997],{"class":74},[57,170228,12708],{"class":140},[57,170230,152173],{"class":74},[57,170232,12708],{"class":140},[57,170234,147003],{"class":5489},[57,170236,156],{"class":136},[57,170238,147008],{"class":74},[57,170240,12708],{"class":140},[57,170242,170014],{"class":5489},[57,170244,156],{"class":136},[57,170246,7925],{"class":74},[57,170248,229],{"class":140},[57,170250,31580],{"class":136},[57,170252,148350],{"class":5489},[57,170254,4012],{"class":140},[57,170256,170257,170260,170262,170264,170266,170268,170270,170272,170274],{"class":59,"line":241},[57,170258,170259],{"class":140},"    fieldnames ",[57,170261,156],{"class":136},[57,170263,52423],{"class":140},[57,170265,62876],{"class":74},[57,170267,12708],{"class":140},[57,170269,69321],{"class":74},[57,170271,12708],{"class":140},[57,170273,151669],{"class":74},[57,170275,33443],{"class":140},[57,170277,170278,170280,170282,170285,170287,170289,170292,170294],{"class":59,"line":249},[57,170279,170031],{"class":140},[57,170281,156],{"class":136},[57,170283,170284],{"class":140}," csv.DictWriter(",[57,170286,45551],{"class":5489},[57,170288,12708],{"class":140},[57,170290,170291],{"class":5489},"fieldnames",[57,170293,156],{"class":136},[57,170295,170296],{"class":140},"fieldnames)\n",[57,170298,170299],{"class":59,"line":262},[57,170300,170301],{"class":140},"    writer.writeheader()\n",[57,170303,170304],{"class":59,"line":281},[57,170305,170045],{"class":140},[365,170307,170309],{"id":170308},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,170311,123489],{},[377,170313,170314,170317,170320],{},[380,170315,170316],{},"读取文本文件。",[380,170318,170319],{},"统计每个单词出现次数。",[380,170321,170322],{},"输出出现次数最多的前 10 个单词。",[14,170324,10308],{},[49,170326,170328],{"className":122,"code":170327,"language":124,"meta":46,"style":46},"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",[28,170329,170330,170340,170344,170357,170373,170377,170387,170396,170400,170412,170432,170441,170445,170463,170467,170497,170501,170517],{"__ignoreMap":46},[57,170331,170332,170334,170336,170338],{"class":59,"line":60},[57,170333,30934],{"class":136},[57,170335,108508],{"class":140},[57,170337,137],{"class":136},[57,170339,108513],{"class":140},[57,170341,170342],{"class":59,"line":67},[57,170343,2673],{"emptyLinePlaceholder":350},[57,170345,170346,170348,170350,170352,170355],{"class":59,"line":144},[57,170347,168508],{"class":140},[57,170349,156],{"class":136},[57,170351,108742],{"class":140},[57,170353,170354],{"class":74},"\"article.txt\"",[57,170356,238],{"class":140},[57,170358,170359,170361,170363,170365,170367,170369,170371],{"class":59,"line":150},[57,170360,168691],{"class":140},[57,170362,156],{"class":136},[57,170364,169568],{"class":140},[57,170366,147003],{"class":5489},[57,170368,156],{"class":136},[57,170370,147008],{"class":74},[57,170372,238],{"class":140},[57,170374,170375],{"class":59,"line":162},[57,170376,2673],{"emptyLinePlaceholder":350},[57,170378,170379,170382,170384],{"class":59,"line":180},[57,170380,170381],{"class":140},"words ",[57,170383,156],{"class":136},[57,170385,170386],{"class":140}," content.lower().split()\n",[57,170388,170389,170392,170394],{"class":59,"line":186},[57,170390,170391],{"class":140},"counter ",[57,170393,156],{"class":136},[57,170395,88065],{"class":140},[57,170397,170398],{"class":59,"line":197},[57,170399,2673],{"emptyLinePlaceholder":350},[57,170401,170402,170404,170407,170409],{"class":59,"line":241},[57,170403,3298],{"class":136},[57,170405,170406],{"class":140}," word ",[57,170408,26312],{"class":136},[57,170410,170411],{"class":140}," words:\n",[57,170413,170414,170417,170419,170422,170425,170427,170430],{"class":59,"line":249},[57,170415,170416],{"class":140},"    word ",[57,170418,156],{"class":136},[57,170420,170421],{"class":140}," word.strip(",[57,170423,170424],{"class":74},"\".,!?;:",[57,170426,156692],{"class":81},[57,170428,170429],{"class":74},"'()[]\"",[57,170431,238],{"class":140},[57,170433,170434,170436,170438],{"class":59,"line":262},[57,170435,3374],{"class":136},[57,170437,39127],{"class":136},[57,170439,170440],{"class":140}," word:\n",[57,170442,170443],{"class":59,"line":281},[57,170444,148709],{"class":136},[57,170446,170447,170450,170452,170455,170457,170459,170461],{"class":59,"line":287},[57,170448,170449],{"class":140},"    counter[word] ",[57,170451,156],{"class":136},[57,170453,170454],{"class":140}," counter.get(word, ",[57,170456,226],{"class":81},[57,170458,229],{"class":140},[57,170460,897],{"class":136},[57,170462,55896],{"class":81},[57,170464,170465],{"class":59,"line":298},[57,170466,2673],{"emptyLinePlaceholder":350},[57,170468,170469,170472,170474,170476,170479,170481,170483,170485,170487,170489,170491,170493,170495],{"class":59,"line":311},[57,170470,170471],{"class":140},"items ",[57,170473,156],{"class":136},[57,170475,163801],{"class":81},[57,170477,170478],{"class":140},"(counter.items(), ",[57,170480,154143],{"class":5489},[57,170482,154146],{"class":136},[57,170484,154149],{"class":140},[57,170486,635],{"class":81},[57,170488,112399],{"class":140},[57,170490,163725],{"class":5489},[57,170492,156],{"class":136},[57,170494,31673],{"class":81},[57,170496,238],{"class":140},[57,170498,170499],{"class":59,"line":322},[57,170500,2673],{"emptyLinePlaceholder":350},[57,170502,170503,170505,170508,170510,170513,170515],{"class":59,"line":1929},[57,170504,3298],{"class":136},[57,170506,170507],{"class":140}," word, count ",[57,170509,26312],{"class":136},[57,170511,170512],{"class":140}," items[:",[57,170514,862],{"class":81},[57,170516,165952],{"class":140},[57,170518,170519,170521],{"class":59,"line":1950},[57,170520,31496],{"class":81},[57,170522,170523],{"class":140},"(word, count)\n",[365,170525,170527],{"id":170526},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[49,170529,170531],{"className":122,"code":170530,"language":124,"meta":46,"style":46},"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",[28,170532,170533,170539,170549,170553,170565,170569,170573,170581,170591,170597,170601,170631,170641,170645,170649,170657,170687,170711,170715,170719,170727,170756,170761],{"__ignoreMap":46},[57,170534,170535,170537],{"class":59,"line":60},[57,170536,137],{"class":136},[57,170538,147288],{"class":140},[57,170540,170541,170543,170545,170547],{"class":59,"line":67},[57,170542,30934],{"class":136},[57,170544,108508],{"class":140},[57,170546,137],{"class":136},[57,170548,108513],{"class":140},[57,170550,170551],{"class":59,"line":144},[57,170552,2673],{"emptyLinePlaceholder":350},[57,170554,170555,170557,170559,170561,170563],{"class":59,"line":150},[57,170556,152021],{"class":81},[57,170558,13837],{"class":136},[57,170560,108742],{"class":140},[57,170562,152028],{"class":74},[57,170564,238],{"class":140},[57,170566,170567],{"class":59,"line":162},[57,170568,2673],{"emptyLinePlaceholder":350},[57,170570,170571],{"class":59,"line":180},[57,170572,2673],{"emptyLinePlaceholder":350},[57,170574,170575,170577,170579],{"class":59,"line":186},[57,170576,32144],{"class":136},[57,170578,152045],{"class":70},[57,170580,32150],{"class":140},[57,170582,170583,170585,170587,170589],{"class":59,"line":197},[57,170584,3374],{"class":136},[57,170586,39127],{"class":136},[57,170588,152056],{"class":81},[57,170590,152059],{"class":140},[57,170592,170593,170595],{"class":59,"line":241},[57,170594,15024],{"class":136},[57,170596,52035],{"class":140},[57,170598,170599],{"class":59,"line":249},[57,170600,2673],{"emptyLinePlaceholder":350},[57,170602,170603,170605,170607,170609,170611,170613,170615,170617,170619,170621,170623,170625,170627,170629],{"class":59,"line":262},[57,170604,34375],{"class":136},[57,170606,146988],{"class":81},[57,170608,168],{"class":140},[57,170610,152021],{"class":81},[57,170612,12708],{"class":140},[57,170614,146998],{"class":74},[57,170616,12708],{"class":140},[57,170618,147003],{"class":5489},[57,170620,156],{"class":136},[57,170622,147008],{"class":74},[57,170624,229],{"class":140},[57,170626,31580],{"class":136},[57,170628,148350],{"class":5489},[57,170630,4012],{"class":140},[57,170632,170633,170635,170637,170639],{"class":59,"line":281},[57,170634,15024],{"class":136},[57,170636,148361],{"class":140},[57,170638,45551],{"class":5489},[57,170640,238],{"class":140},[57,170642,170643],{"class":59,"line":287},[57,170644,2673],{"emptyLinePlaceholder":350},[57,170646,170647],{"class":59,"line":298},[57,170648,2673],{"emptyLinePlaceholder":350},[57,170650,170651,170653,170655],{"class":59,"line":311},[57,170652,32144],{"class":136},[57,170654,152155],{"class":70},[57,170656,152158],{"class":140},[57,170658,170659,170661,170663,170665,170667,170669,170671,170673,170675,170677,170679,170681,170683,170685],{"class":59,"line":322},[57,170660,34375],{"class":136},[57,170662,146988],{"class":81},[57,170664,168],{"class":140},[57,170666,152021],{"class":81},[57,170668,12708],{"class":140},[57,170670,152173],{"class":74},[57,170672,12708],{"class":140},[57,170674,147003],{"class":5489},[57,170676,156],{"class":136},[57,170678,147008],{"class":74},[57,170680,229],{"class":140},[57,170682,31580],{"class":136},[57,170684,148350],{"class":5489},[57,170686,4012],{"class":140},[57,170688,170689,170691,170693,170695,170697,170699,170701,170703,170705,170707,170709],{"class":59,"line":1929},[57,170690,152194],{"class":140},[57,170692,45551],{"class":5489},[57,170694,12708],{"class":140},[57,170696,147334],{"class":5489},[57,170698,156],{"class":136},[57,170700,34184],{"class":81},[57,170702,12708],{"class":140},[57,170704,152209],{"class":5489},[57,170706,156],{"class":136},[57,170708,498],{"class":81},[57,170710,238],{"class":140},[57,170712,170713],{"class":59,"line":1950},[57,170714,2673],{"emptyLinePlaceholder":350},[57,170716,170717],{"class":59,"line":1955},[57,170718,2673],{"emptyLinePlaceholder":350},[57,170720,170721,170723,170725],{"class":59,"line":1969},[57,170722,159913],{"class":140},[57,170724,156],{"class":136},[57,170726,153239],{"class":140},[57,170728,170729,170732,170734,170736,170738,170740,170742,170744,170746,170748,170750,170752,170754],{"class":59,"line":1974},[57,170730,170731],{"class":140},"students.append({",[57,170733,62876],{"class":74},[57,170735,51634],{"class":140},[57,170737,150085],{"class":74},[57,170739,12708],{"class":140},[57,170741,69321],{"class":74},[57,170743,51634],{"class":140},[57,170745,1066],{"class":81},[57,170747,12708],{"class":140},[57,170749,151669],{"class":74},[57,170751,51634],{"class":140},[57,170753,1404],{"class":81},[57,170755,165349],{"class":140},[57,170757,170758],{"class":59,"line":2001},[57,170759,170760],{"class":140},"save_students(students)\n",[57,170762,170763,170765,170767,170770],{"class":59,"line":2006},[57,170764,165],{"class":81},[57,170766,168],{"class":140},[57,170768,170769],{"class":74},"\"保存成功\"",[57,170771,238],{"class":140},[365,170773,170775],{"id":170774},"_814-易错点","8.14 易错点",[377,170777,170778,170782,170788,170793,170800,170807],{},[380,170779,170780,169041],{},[28,170781,1211],{},[380,170783,170784,170785,28654],{},"读写中文要指定 ",[28,170786,170787],{},"encoding=\"utf-8\"",[380,170789,170790,170791,28654],{},"打开文件后要关闭，推荐使用 ",[28,170792,108030],{},[380,170794,170795,170796,170799],{},"读取大文件不要直接 ",[28,170797,170798],{},"read()"," 全部内容。",[380,170801,170802,170803,170806],{},"Windows 写 CSV 时建议加 ",[28,170804,170805],{},"newline=\"\"","，避免空行。",[380,170808,170809],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[365,170811,170813],{"id":170812},"_815-本章练习","8.15 本章练习",[377,170815,170816,170823,170828,170831,170834],{},[380,170817,170818,170819,170822],{},"写入一个 ",[28,170820,170821],{},"students.txt","，每行保存一个学生姓名。",[380,170824,104552,170825,170827],{},[28,170826,170821],{}," 并输出所有学生。",[380,170829,170830],{},"把学生列表保存为 JSON 文件。",[380,170832,170833],{},"从 JSON 文件读取学生数据，计算平均分。",[380,170835,170836,170837,170840,170841,170844],{},"写一个日志函数 ",[28,170838,170839],{},"write_log(message)","，每次调用向 ",[28,170842,170843],{},"app.log"," 追加一行。",[342,170846,170847],{},"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":46,"searchDepth":67,"depth":67,"links":170849},[170850,170851,170855,170856,170862,170863,170864,170865,170866,170867,170868,170869,170870,170871,170872],{"id":168361,"depth":67,"text":168362},{"id":168402,"depth":67,"text":168403,"children":170852},[170853,170854],{"id":168406,"depth":144,"text":168407},{"id":168440,"depth":144,"text":168441},{"id":168554,"depth":67,"text":168555},{"id":168647,"depth":67,"text":168648,"children":170857},[170858,170859,170860,170861],{"id":168651,"depth":144,"text":168652},{"id":168738,"depth":144,"text":168739},{"id":168808,"depth":144,"text":168809},{"id":168902,"depth":144,"text":168903},{"id":168972,"depth":67,"text":168973},{"id":169035,"depth":67,"text":169036},{"id":169196,"depth":67,"text":169197},{"id":169259,"depth":67,"text":169260},{"id":169375,"depth":67,"text":169376},{"id":169585,"depth":67,"text":169586},{"id":169897,"depth":67,"text":169898},{"id":170308,"depth":67,"text":170309},{"id":170526,"depth":67,"text":170527},{"id":170774,"depth":67,"text":170775},{"id":170812,"depth":67,"text":170813},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168353,"description":347},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170879,"title":170880,"body":170881,"description":347,"extension":348,"meta":173067,"navigation":350,"path":173068,"seo":173069,"stem":173070,"__hash__":173071},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170882,"toc":173034},[170883,170886,170890,170893,170896,170988,170990,171009,171014,171018,171021,171024,171053,171060,171063,171067,171070,171099,171101,171153,171159,171212,171216,171314,171317,171384,171388,171445,171447,171453,171457,171462,171468,171559,171564,171568,171571,171649,171652,171690,171694,171812,171815,171819,171822,171867,171870,171874,171879,171885,171935,171938,171969,171973,171977,172007,172011,172046,172050,172085,172125,172129,172145,172148,172152,172156,172235,172239,172280,172284,172339,172343,172377,172381,172411,172420,172427,172433,172490,172493,172501,172504,172508,172515,172518,172524,172527,172544,172549,172553,172559,172572,172575,172612,172615,172626,172629,172643,172646,172660,172664,172671,172704,172707,172709,172715,172718,172722,172724,172730,172735,172908,172912,172975,172979,173003,173007,173031],[10,170884,170880],{"id":170885},"_9-异常模块与包",[365,170887,170889],{"id":170888},"_91-什么是异常","9.1 什么是异常",[14,170891,170892],{},"异常是程序运行过程中出现的错误。",[14,170894,170895],{},"常见异常：",[557,170897,170898,170907],{},[560,170899,170900],{},[563,170901,170902,170905],{},[566,170903,170904],{},"异常",[566,170906,26138],{},[603,170908,170909,170919,170929,170938,170948,170958,170968,170978],{},[563,170910,170911,170916],{},[608,170912,170913],{},[28,170914,170915],{},"NameError",[608,170917,170918],{},"使用了未定义变量",[563,170920,170921,170926],{},[608,170922,170923],{},[28,170924,170925],{},"TypeError",[608,170927,170928],{},"类型不匹配",[563,170930,170931,170935],{},[608,170932,170933],{},[28,170934,155031],{},[608,170936,170937],{},"值不合法",[563,170939,170940,170945],{},[608,170941,170942],{},[28,170943,170944],{},"IndexError",[608,170946,170947],{},"列表索引越界",[563,170949,170950,170955],{},[608,170951,170952],{},[28,170953,170954],{},"KeyError",[608,170956,170957],{},"字典 key 不存在",[563,170959,170960,170965],{},[608,170961,170962],{},[28,170963,170964],{},"FileNotFoundError",[608,170966,170967],{},"文件不存在",[563,170969,170970,170975],{},[608,170971,170972],{},[28,170973,170974],{},"ZeroDivisionError",[608,170976,170977],{},"除数为 0",[563,170979,170980,170985],{},[608,170981,170982],{},[28,170983,170984],{},"ImportError",[608,170986,170987],{},"导入失败",[14,170989,15407],{},[49,170991,170993],{"className":122,"code":170992,"language":124,"meta":46,"style":46},"num = int(\"abc\")\n",[28,170994,170995],{"__ignoreMap":46},[57,170996,170997,170999,171001,171003,171005,171007],{"class":59,"line":60},[57,170998,155984],{"class":140},[57,171000,156],{"class":136},[57,171002,2655],{"class":81},[57,171004,168],{"class":140},[57,171006,156077],{"class":74},[57,171008,238],{"class":140},[14,171010,171011,171012,28654],{},"会触发 ",[28,171013,155031],{},[365,171015,171017],{"id":171016},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,171019,171020],{},"如果不处理异常，程序会直接终止。",[14,171022,171023],{},"例如用户输入年龄：",[49,171025,171027],{"className":122,"code":171026,"language":124,"meta":46,"style":46},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[28,171028,171029,171047],{"__ignoreMap":46},[57,171030,171031,171033,171035,171037,171039,171041,171043,171045],{"class":59,"line":60},[57,171032,146743],{"class":140},[57,171034,156],{"class":136},[57,171036,2655],{"class":81},[57,171038,168],{"class":140},[57,171040,54018],{"class":81},[57,171042,168],{"class":140},[57,171044,152591],{"class":74},[57,171046,259],{"class":140},[57,171048,171049,171051],{"class":59,"line":67},[57,171050,165],{"class":81},[57,171052,155958],{"class":140},[14,171054,171055,171056,171059],{},"用户输入 ",[28,171057,171058],{},"abc","，程序就会报错退出。",[14,171061,171062],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[365,171064,171066],{"id":171065},"_93-try-except","9.3 try except",[14,171068,171069],{},"基础语法：",[49,171071,171073],{"className":122,"code":171072,"language":124,"meta":46,"style":46},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[28,171074,171075,171082,171087,171094],{"__ignoreMap":46},[57,171076,171077,171080],{"class":59,"line":60},[57,171078,171079],{"class":136},"try",[57,171081,4012],{"class":140},[57,171083,171084],{"class":59,"line":67},[57,171085,171086],{"class":140},"    可能出错的代码\n",[57,171088,171089,171092],{"class":59,"line":144},[57,171090,171091],{"class":136},"except",[57,171093,4012],{"class":140},[57,171095,171096],{"class":59,"line":150},[57,171097,171098],{"class":140},"    出错后的处理代码\n",[14,171100,15407],{},[49,171102,171104],{"className":122,"code":171103,"language":124,"meta":46,"style":46},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[28,171105,171106,171112,171130,171136,171142],{"__ignoreMap":46},[57,171107,171108,171110],{"class":59,"line":60},[57,171109,171079],{"class":136},[57,171111,4012],{"class":140},[57,171113,171114,171116,171118,171120,171122,171124,171126,171128],{"class":59,"line":67},[57,171115,152583],{"class":140},[57,171117,156],{"class":136},[57,171119,2655],{"class":81},[57,171121,168],{"class":140},[57,171123,54018],{"class":81},[57,171125,168],{"class":140},[57,171127,152591],{"class":74},[57,171129,259],{"class":140},[57,171131,171132,171134],{"class":59,"line":144},[57,171133,31496],{"class":81},[57,171135,155958],{"class":140},[57,171137,171138,171140],{"class":59,"line":150},[57,171139,171091],{"class":136},[57,171141,4012],{"class":140},[57,171143,171144,171146,171148,171151],{"class":59,"line":162},[57,171145,31496],{"class":81},[57,171147,168],{"class":140},[57,171149,171150],{"class":74},"\"年龄必须是数字\"",[57,171152,238],{"class":140},[14,171154,171155,171156,171158],{},"不建议裸写 ",[28,171157,171091],{},"，最好指定异常类型。",[49,171160,171162],{"className":122,"code":171161,"language":124,"meta":46,"style":46},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[28,171163,171164,171170,171188,171194,171202],{"__ignoreMap":46},[57,171165,171166,171168],{"class":59,"line":60},[57,171167,171079],{"class":136},[57,171169,4012],{"class":140},[57,171171,171172,171174,171176,171178,171180,171182,171184,171186],{"class":59,"line":67},[57,171173,152583],{"class":140},[57,171175,156],{"class":136},[57,171177,2655],{"class":81},[57,171179,168],{"class":140},[57,171181,54018],{"class":81},[57,171183,168],{"class":140},[57,171185,152591],{"class":74},[57,171187,259],{"class":140},[57,171189,171190,171192],{"class":59,"line":144},[57,171191,31496],{"class":81},[57,171193,155958],{"class":140},[57,171195,171196,171198,171200],{"class":59,"line":150},[57,171197,171091],{"class":136},[57,171199,152423],{"class":81},[57,171201,4012],{"class":140},[57,171203,171204,171206,171208,171210],{"class":59,"line":162},[57,171205,31496],{"class":81},[57,171207,168],{"class":140},[57,171209,171150],{"class":74},[57,171211,238],{"class":140},[365,171213,171215],{"id":171214},"_94-捕获多个异常","9.4 捕获多个异常",[49,171217,171219],{"className":122,"code":171218,"language":124,"meta":46,"style":46},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[28,171220,171221,171227,171248,171268,171275,171283,171294,171303],{"__ignoreMap":46},[57,171222,171223,171225],{"class":59,"line":60},[57,171224,171079],{"class":136},[57,171226,4012],{"class":140},[57,171228,171229,171232,171234,171236,171238,171240,171242,171244,171246],{"class":59,"line":67},[57,171230,171231],{"class":140},"    nums ",[57,171233,156],{"class":136},[57,171235,52423],{"class":140},[57,171237,635],{"class":81},[57,171239,12708],{"class":140},[57,171241,498],{"class":81},[57,171243,12708],{"class":140},[57,171245,270],{"class":81},[57,171247,33443],{"class":140},[57,171249,171250,171253,171255,171257,171259,171261,171263,171266],{"class":59,"line":144},[57,171251,171252],{"class":140},"    index ",[57,171254,156],{"class":136},[57,171256,2655],{"class":81},[57,171258,168],{"class":140},[57,171260,54018],{"class":81},[57,171262,168],{"class":140},[57,171264,171265],{"class":74},"\"请输入索引:\"",[57,171267,259],{"class":140},[57,171269,171270,171272],{"class":59,"line":150},[57,171271,31496],{"class":81},[57,171273,171274],{"class":140},"(nums[index])\n",[57,171276,171277,171279,171281],{"class":59,"line":162},[57,171278,171091],{"class":136},[57,171280,152423],{"class":81},[57,171282,4012],{"class":140},[57,171284,171285,171287,171289,171292],{"class":59,"line":180},[57,171286,31496],{"class":81},[57,171288,168],{"class":140},[57,171290,171291],{"class":74},"\"索引必须是整数\"",[57,171293,238],{"class":140},[57,171295,171296,171298,171301],{"class":59,"line":186},[57,171297,171091],{"class":136},[57,171299,171300],{"class":81}," IndexError",[57,171302,4012],{"class":140},[57,171304,171305,171307,171309,171312],{"class":59,"line":197},[57,171306,31496],{"class":81},[57,171308,168],{"class":140},[57,171310,171311],{"class":74},"\"索引越界\"",[57,171313,238],{"class":140},[14,171315,171316],{},"多个异常使用相同处理逻辑：",[49,171318,171320],{"className":122,"code":171319,"language":124,"meta":46,"style":46},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[28,171321,171322,171328,171346,171359,171373],{"__ignoreMap":46},[57,171323,171324,171326],{"class":59,"line":60},[57,171325,171079],{"class":136},[57,171327,4012],{"class":140},[57,171329,171330,171332,171334,171336,171338,171340,171342,171344],{"class":59,"line":67},[57,171331,45790],{"class":140},[57,171333,156],{"class":136},[57,171335,2655],{"class":81},[57,171337,168],{"class":140},[57,171339,54018],{"class":81},[57,171341,168],{"class":140},[57,171343,155993],{"class":74},[57,171345,259],{"class":140},[57,171347,171348,171350,171352,171354,171356],{"class":59,"line":144},[57,171349,31496],{"class":81},[57,171351,168],{"class":140},[57,171353,862],{"class":81},[57,171355,156243],{"class":136},[57,171357,171358],{"class":140}," num)\n",[57,171360,171361,171363,171365,171367,171369,171371],{"class":59,"line":150},[57,171362,171091],{"class":136},[57,171364,1934],{"class":140},[57,171366,155031],{"class":81},[57,171368,12708],{"class":140},[57,171370,170974],{"class":81},[57,171372,30983],{"class":140},[57,171374,171375,171377,171379,171382],{"class":59,"line":162},[57,171376,31496],{"class":81},[57,171378,168],{"class":140},[57,171380,171381],{"class":74},"\"输入不合法\"",[57,171383,238],{"class":140},[365,171385,171387],{"id":171386},"_95-获取异常信息","9.5 获取异常信息",[49,171389,171391],{"className":122,"code":171390,"language":124,"meta":46,"style":46},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[28,171392,171393,171399,171413,171424],{"__ignoreMap":46},[57,171394,171395,171397],{"class":59,"line":60},[57,171396,171079],{"class":136},[57,171398,4012],{"class":140},[57,171400,171401,171403,171405,171407,171409,171411],{"class":59,"line":67},[57,171402,45790],{"class":140},[57,171404,156],{"class":136},[57,171406,2655],{"class":81},[57,171408,168],{"class":140},[57,171410,156077],{"class":74},[57,171412,238],{"class":140},[57,171414,171415,171417,171419,171421],{"class":59,"line":144},[57,171416,171091],{"class":136},[57,171418,152423],{"class":81},[57,171420,64801],{"class":136},[57,171422,171423],{"class":140}," e:\n",[57,171425,171426,171428,171430,171432,171435,171437,171439,171441,171443],{"class":59,"line":150},[57,171427,31496],{"class":81},[57,171429,168],{"class":140},[57,171431,475],{"class":136},[57,171433,171434],{"class":74},"\"出错了:",[57,171436,1312],{"class":81},[57,171438,495],{"class":140},[57,171440,1362],{"class":81},[57,171442,668],{"class":74},[57,171444,238],{"class":140},[14,171446,146654],{},[49,171448,171451],{"className":171449,"code":171450,"language":5460,"meta":46},[5458],"出错了:invalid literal for int() with base 10: 'abc'\n",[28,171452,171450],{"__ignoreMap":46},[365,171454,171456],{"id":171455},"_96-else和finally","9.6 else和finally",[14,171458,171459,171461],{},[28,171460,232],{},"：没有异常时执行。",[14,171463,171464,171467],{},[28,171465,171466],{},"finally","：无论是否异常都会执行。",[49,171469,171471],{"className":122,"code":171470,"language":124,"meta":46,"style":46},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[28,171472,171473,171479,171497,171505,171515,171521,171542,171548],{"__ignoreMap":46},[57,171474,171475,171477],{"class":59,"line":60},[57,171476,171079],{"class":136},[57,171478,4012],{"class":140},[57,171480,171481,171483,171485,171487,171489,171491,171493,171495],{"class":59,"line":67},[57,171482,45790],{"class":140},[57,171484,156],{"class":136},[57,171486,2655],{"class":81},[57,171488,168],{"class":140},[57,171490,54018],{"class":81},[57,171492,168],{"class":140},[57,171494,155993],{"class":74},[57,171496,259],{"class":140},[57,171498,171499,171501,171503],{"class":59,"line":144},[57,171500,171091],{"class":136},[57,171502,152423],{"class":81},[57,171504,4012],{"class":140},[57,171506,171507,171509,171511,171513],{"class":59,"line":150},[57,171508,31496],{"class":81},[57,171510,168],{"class":140},[57,171512,153411],{"class":74},[57,171514,238],{"class":140},[57,171516,171517,171519],{"class":59,"line":162},[57,171518,232],{"class":136},[57,171520,4012],{"class":140},[57,171522,171523,171525,171527,171529,171532,171534,171536,171538,171540],{"class":59,"line":180},[57,171524,31496],{"class":81},[57,171526,168],{"class":140},[57,171528,475],{"class":136},[57,171530,171531],{"class":74},"\"输入正确:",[57,171533,1312],{"class":81},[57,171535,1941],{"class":140},[57,171537,1362],{"class":81},[57,171539,668],{"class":74},[57,171541,238],{"class":140},[57,171543,171544,171546],{"class":59,"line":186},[57,171545,171466],{"class":136},[57,171547,4012],{"class":140},[57,171549,171550,171552,171554,171557],{"class":59,"line":197},[57,171551,31496],{"class":81},[57,171553,168],{"class":140},[57,171555,171556],{"class":74},"\"程序结束\"",[57,171558,238],{"class":140},[14,171560,171561,171563],{},[28,171562,171466],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[365,171565,171567],{"id":171566},"_97-抛出异常","9.7 抛出异常",[14,171569,171570],{},"程序可以主动抛出异常。",[49,171572,171574],{"className":122,"code":171573,"language":124,"meta":46,"style":46},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[28,171575,171576,171585,171597,171610,171630,171634,171638],{"__ignoreMap":46},[57,171577,171578,171580,171583],{"class":59,"line":60},[57,171579,32144],{"class":136},[57,171581,171582],{"class":70}," set_age",[57,171584,161612],{"class":140},[57,171586,171587,171589,171591,171593,171595],{"class":59,"line":67},[57,171588,3374],{"class":136},[57,171590,15979],{"class":140},[57,171592,1326],{"class":136},[57,171594,4366],{"class":81},[57,171596,4012],{"class":140},[57,171598,171599,171601,171603,171605,171608],{"class":59,"line":144},[57,171600,103629],{"class":136},[57,171602,152423],{"class":81},[57,171604,168],{"class":140},[57,171606,171607],{"class":74},"\"年龄不能为负数\"",[57,171609,238],{"class":140},[57,171611,171612,171614,171616,171618,171620,171622,171624,171626,171628],{"class":59,"line":150},[57,171613,31496],{"class":81},[57,171615,168],{"class":140},[57,171617,475],{"class":136},[57,171619,162180],{"class":74},[57,171621,1312],{"class":81},[57,171623,70418],{"class":140},[57,171625,1362],{"class":81},[57,171627,668],{"class":74},[57,171629,238],{"class":140},[57,171631,171632],{"class":59,"line":162},[57,171633,2673],{"emptyLinePlaceholder":350},[57,171635,171636],{"class":59,"line":180},[57,171637,2673],{"emptyLinePlaceholder":350},[57,171639,171640,171643,171645,171647],{"class":59,"line":186},[57,171641,171642],{"class":140},"set_age(",[57,171644,948],{"class":136},[57,171646,635],{"class":81},[57,171648,238],{"class":140},[14,171650,171651],{},"调用者可以捕获：",[49,171653,171655],{"className":122,"code":171654,"language":124,"meta":46,"style":46},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[28,171656,171657,171663,171674,171684],{"__ignoreMap":46},[57,171658,171659,171661],{"class":59,"line":60},[57,171660,171079],{"class":136},[57,171662,4012],{"class":140},[57,171664,171665,171668,171670,171672],{"class":59,"line":67},[57,171666,171667],{"class":140},"    set_age(",[57,171669,948],{"class":136},[57,171671,635],{"class":81},[57,171673,238],{"class":140},[57,171675,171676,171678,171680,171682],{"class":59,"line":144},[57,171677,171091],{"class":136},[57,171679,152423],{"class":81},[57,171681,64801],{"class":136},[57,171683,171423],{"class":140},[57,171685,171686,171688],{"class":59,"line":150},[57,171687,31496],{"class":81},[57,171689,67196],{"class":140},[365,171691,171693],{"id":171692},"_98-自定义异常","9.8 自定义异常",[49,171695,171697],{"className":122,"code":171696,"language":124,"meta":46,"style":46},"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",[28,171698,171699,171713,171717,171721,171725,171733,171743,171754,171764,171768,171772,171778,171795,171806],{"__ignoreMap":46},[57,171700,171701,171703,171706,171708,171711],{"class":59,"line":60},[57,171702,14966],{"class":136},[57,171704,171705],{"class":70}," BalanceNotEnoughError",[57,171707,168],{"class":140},[57,171709,171710],{"class":81},"Exception",[57,171712,30983],{"class":140},[57,171714,171715],{"class":59,"line":67},[57,171716,149734],{"class":136},[57,171718,171719],{"class":59,"line":144},[57,171720,2673],{"emptyLinePlaceholder":350},[57,171722,171723],{"class":59,"line":150},[57,171724,2673],{"emptyLinePlaceholder":350},[57,171726,171727,171729,171731],{"class":59,"line":162},[57,171728,32144],{"class":136},[57,171730,150383],{"class":70},[57,171732,163009],{"class":140},[57,171734,171735,171737,171739,171741],{"class":59,"line":180},[57,171736,3374],{"class":136},[57,171738,150339],{"class":140},[57,171740,223],{"class":136},[57,171742,162786],{"class":140},[57,171744,171745,171747,171750,171752],{"class":59,"line":186},[57,171746,103629],{"class":136},[57,171748,171749],{"class":140}," BalanceNotEnoughError(",[57,171751,150434],{"class":74},[57,171753,238],{"class":140},[57,171755,171756,171758,171760,171762],{"class":59,"line":197},[57,171757,4363],{"class":136},[57,171759,163016],{"class":140},[57,171761,948],{"class":136},[57,171763,150372],{"class":140},[57,171765,171766],{"class":59,"line":241},[57,171767,2673],{"emptyLinePlaceholder":350},[57,171769,171770],{"class":59,"line":249},[57,171771,2673],{"emptyLinePlaceholder":350},[57,171773,171774,171776],{"class":59,"line":262},[57,171775,171079],{"class":136},[57,171777,4012],{"class":140},[57,171779,171780,171782,171784,171787,171789,171791,171793],{"class":59,"line":281},[57,171781,162687],{"class":140},[57,171783,156],{"class":136},[57,171785,171786],{"class":140}," withdraw(",[57,171788,728],{"class":81},[57,171790,12708],{"class":140},[57,171792,1996],{"class":81},[57,171794,238],{"class":140},[57,171796,171797,171799,171802,171804],{"class":59,"line":287},[57,171798,171091],{"class":136},[57,171800,171801],{"class":140}," BalanceNotEnoughError ",[57,171803,31580],{"class":136},[57,171805,171423],{"class":140},[57,171807,171808,171810],{"class":59,"line":298},[57,171809,31496],{"class":81},[57,171811,67196],{"class":140},[14,171813,171814],{},"入门阶段大多数情况使用内置异常即可。",[365,171816,171818],{"id":171817},"_99-traceback","9.9 traceback",[14,171820,171821],{},"调试时可以输出完整异常堆栈。",[49,171823,171825],{"className":122,"code":171824,"language":124,"meta":46,"style":46},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[28,171826,171827,171834,171838,171844,171854,171862],{"__ignoreMap":46},[57,171828,171829,171831],{"class":59,"line":60},[57,171830,137],{"class":136},[57,171832,171833],{"class":140}," traceback\n",[57,171835,171836],{"class":59,"line":67},[57,171837,2673],{"emptyLinePlaceholder":350},[57,171839,171840,171842],{"class":59,"line":144},[57,171841,171079],{"class":136},[57,171843,4012],{"class":140},[57,171845,171846,171848,171850,171852],{"class":59,"line":150},[57,171847,2258],{"class":81},[57,171849,168],{"class":140},[57,171851,156077],{"class":74},[57,171853,238],{"class":140},[57,171855,171856,171858,171860],{"class":59,"line":162},[57,171857,171091],{"class":136},[57,171859,152423],{"class":81},[57,171861,4012],{"class":140},[57,171863,171864],{"class":59,"line":180},[57,171865,171866],{"class":140},"    traceback.print_exc()\n",[14,171868,171869],{},"日志系统中常把异常堆栈记录到文件。",[365,171871,171873],{"id":171872},"_910-什么是模块","9.10 什么是模块",[14,171875,171876,171877,126180],{},"模块就是一个 ",[28,171878,146549],{},[14,171880,171881,171882,24887],{},"例如创建 ",[28,171883,171884],{},"my_math.py",[49,171886,171888],{"className":122,"code":171887,"language":124,"meta":46,"style":46},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[28,171889,171890,171898,171908,171912,171916,171925],{"__ignoreMap":46},[57,171891,171892,171894,171896],{"class":59,"line":60},[57,171893,32144],{"class":136},[57,171895,5482],{"class":70},[57,171897,151290],{"class":140},[57,171899,171900,171902,171904,171906],{"class":59,"line":67},[57,171901,4363],{"class":136},[57,171903,11142],{"class":140},[57,171905,897],{"class":136},[57,171907,151301],{"class":140},[57,171909,171910],{"class":59,"line":144},[57,171911,2673],{"emptyLinePlaceholder":350},[57,171913,171914],{"class":59,"line":150},[57,171915,2673],{"emptyLinePlaceholder":350},[57,171917,171918,171920,171923],{"class":59,"line":162},[57,171919,32144],{"class":136},[57,171921,171922],{"class":70}," sub",[57,171924,151290],{"class":140},[57,171926,171927,171929,171931,171933],{"class":59,"line":180},[57,171928,4363],{"class":136},[57,171930,11142],{"class":140},[57,171932,948],{"class":136},[57,171934,151301],{"class":140},[14,171936,171937],{},"在另一个文件中导入：",[49,171939,171941],{"className":122,"code":171940,"language":124,"meta":46,"style":46},"import my_math\n\nprint(my_math.add(1, 2))\n",[28,171942,171943,171950,171954],{"__ignoreMap":46},[57,171944,171945,171947],{"class":59,"line":60},[57,171946,137],{"class":136},[57,171948,171949],{"class":140}," my_math\n",[57,171951,171952],{"class":59,"line":67},[57,171953,2673],{"emptyLinePlaceholder":350},[57,171955,171956,171958,171961,171963,171965,171967],{"class":59,"line":144},[57,171957,165],{"class":81},[57,171959,171960],{"class":140},"(my_math.add(",[57,171962,635],{"class":81},[57,171964,12708],{"class":140},[57,171966,498],{"class":81},[57,171968,259],{"class":140},[365,171970,171972],{"id":171971},"_911-import导入","9.11 import导入",[394,171974,171976],{"id":171975},"_9111-导入模块","9.11.1 导入模块",[49,171978,171980],{"className":122,"code":171979,"language":124,"meta":46,"style":46},"import random\n\nprint(random.randint(1, 10))\n",[28,171981,171982,171988,171992],{"__ignoreMap":46},[57,171983,171984,171986],{"class":59,"line":60},[57,171985,137],{"class":136},[57,171987,45525],{"class":140},[57,171989,171990],{"class":59,"line":67},[57,171991,2673],{"emptyLinePlaceholder":350},[57,171993,171994,171996,171999,172001,172003,172005],{"class":59,"line":144},[57,171995,165],{"class":81},[57,171997,171998],{"class":140},"(random.randint(",[57,172000,635],{"class":81},[57,172002,12708],{"class":140},[57,172004,862],{"class":81},[57,172006,259],{"class":140},[394,172008,172010],{"id":172009},"_9112-导入指定内容","9.11.2 导入指定内容",[49,172012,172014],{"className":122,"code":172013,"language":124,"meta":46,"style":46},"from random import randint\n\nprint(randint(1, 10))\n",[28,172015,172016,172027,172031],{"__ignoreMap":46},[57,172017,172018,172020,172022,172024],{"class":59,"line":60},[57,172019,30934],{"class":136},[57,172021,57993],{"class":140},[57,172023,137],{"class":136},[57,172025,172026],{"class":140}," randint\n",[57,172028,172029],{"class":59,"line":67},[57,172030,2673],{"emptyLinePlaceholder":350},[57,172032,172033,172035,172038,172040,172042,172044],{"class":59,"line":144},[57,172034,165],{"class":81},[57,172036,172037],{"class":140},"(randint(",[57,172039,635],{"class":81},[57,172041,12708],{"class":140},[57,172043,862],{"class":81},[57,172045,259],{"class":140},[394,172047,172049],{"id":172048},"_9113-起别名","9.11.3 起别名",[49,172051,172053],{"className":122,"code":172052,"language":124,"meta":46,"style":46},"import random as rd\n\nprint(rd.randint(1, 10))\n",[28,172054,172055,172066,172070],{"__ignoreMap":46},[57,172056,172057,172059,172061,172063],{"class":59,"line":60},[57,172058,137],{"class":136},[57,172060,57993],{"class":140},[57,172062,31580],{"class":136},[57,172064,172065],{"class":140}," rd\n",[57,172067,172068],{"class":59,"line":67},[57,172069,2673],{"emptyLinePlaceholder":350},[57,172071,172072,172074,172077,172079,172081,172083],{"class":59,"line":144},[57,172073,165],{"class":81},[57,172075,172076],{"class":140},"(rd.randint(",[57,172078,635],{"class":81},[57,172080,12708],{"class":140},[57,172082,862],{"class":81},[57,172084,259],{"class":140},[49,172086,172088],{"className":122,"code":172087,"language":124,"meta":46,"style":46},"from random import randint as rint\n\nprint(rint(1, 10))\n",[28,172089,172090,172106,172110],{"__ignoreMap":46},[57,172091,172092,172094,172096,172098,172101,172103],{"class":59,"line":60},[57,172093,30934],{"class":136},[57,172095,57993],{"class":140},[57,172097,137],{"class":136},[57,172099,172100],{"class":140}," randint ",[57,172102,31580],{"class":136},[57,172104,172105],{"class":140}," rint\n",[57,172107,172108],{"class":59,"line":67},[57,172109,2673],{"emptyLinePlaceholder":350},[57,172111,172112,172114,172117,172119,172121,172123],{"class":59,"line":144},[57,172113,165],{"class":81},[57,172115,172116],{"class":140},"(rint(",[57,172118,635],{"class":81},[57,172120,12708],{"class":140},[57,172122,862],{"class":81},[57,172124,259],{"class":140},[394,172126,172128],{"id":172127},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[49,172130,172132],{"className":122,"code":172131,"language":124,"meta":46,"style":46},"from random import *\n",[28,172133,172134],{"__ignoreMap":46},[57,172135,172136,172138,172140,172142],{"class":59,"line":60},[57,172137,30934],{"class":136},[57,172139,57993],{"class":140},[57,172141,137],{"class":136},[57,172143,172144],{"class":136}," *\n",[14,172146,172147],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[365,172149,172151],{"id":172150},"_912-常用内置模块","9.12 常用内置模块",[394,172153,172155],{"id":172154},"_9121-random","9.12.1 random",[49,172157,172159],{"className":122,"code":172158,"language":124,"meta":46,"style":46},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[28,172160,172161,172167,172171,172185,172204],{"__ignoreMap":46},[57,172162,172163,172165],{"class":59,"line":60},[57,172164,137],{"class":136},[57,172166,45525],{"class":140},[57,172168,172169],{"class":59,"line":67},[57,172170,2673],{"emptyLinePlaceholder":350},[57,172172,172173,172175,172177,172179,172181,172183],{"class":59,"line":144},[57,172174,165],{"class":81},[57,172176,171998],{"class":140},[57,172178,635],{"class":81},[57,172180,12708],{"class":140},[57,172182,862],{"class":81},[57,172184,259],{"class":140},[57,172186,172187,172189,172192,172194,172196,172198,172200,172202],{"class":59,"line":150},[57,172188,165],{"class":81},[57,172190,172191],{"class":140},"(random.choice([",[57,172193,150085],{"class":74},[57,172195,12708],{"class":140},[57,172197,151133],{"class":74},[57,172199,12708],{"class":140},[57,172201,159928],{"class":74},[57,172203,33340],{"class":140},[57,172205,172206,172208,172211,172213,172215,172217,172219,172221,172223,172225,172227,172229,172231,172233],{"class":59,"line":162},[57,172207,165],{"class":81},[57,172209,172210],{"class":140},"(random.sample([",[57,172212,635],{"class":81},[57,172214,12708],{"class":140},[57,172216,498],{"class":81},[57,172218,12708],{"class":140},[57,172220,270],{"class":81},[57,172222,12708],{"class":140},[57,172224,710],{"class":81},[57,172226,12708],{"class":140},[57,172228,736],{"class":81},[57,172230,112399],{"class":140},[57,172232,498],{"class":81},[57,172234,259],{"class":140},[394,172236,172238],{"id":172237},"_9122-time","9.12.2 time",[49,172240,172242],{"className":122,"code":172241,"language":124,"meta":46,"style":46},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[28,172243,172244,172250,172254,172261,172269],{"__ignoreMap":46},[57,172245,172246,172248],{"class":59,"line":60},[57,172247,137],{"class":136},[57,172249,32026],{"class":140},[57,172251,172252],{"class":59,"line":67},[57,172253,2673],{"emptyLinePlaceholder":350},[57,172255,172256,172258],{"class":59,"line":144},[57,172257,165],{"class":81},[57,172259,172260],{"class":140},"(time.time())\n",[57,172262,172263,172265,172267],{"class":59,"line":150},[57,172264,95268],{"class":140},[57,172266,635],{"class":81},[57,172268,238],{"class":140},[57,172270,172271,172273,172275,172278],{"class":59,"line":162},[57,172272,165],{"class":81},[57,172274,168],{"class":140},[57,172276,172277],{"class":74},"\"1秒后执行\"",[57,172279,238],{"class":140},[394,172281,172283],{"id":172282},"_9123-datetime","9.12.3 datetime",[49,172285,172287],{"className":122,"code":172286,"language":124,"meta":46,"style":46},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[28,172288,172289,172301,172305,172315,172322],{"__ignoreMap":46},[57,172290,172291,172293,172296,172298],{"class":59,"line":60},[57,172292,30934],{"class":136},[57,172294,172295],{"class":140}," datetime ",[57,172297,137],{"class":136},[57,172299,172300],{"class":140}," datetime\n",[57,172302,172303],{"class":59,"line":67},[57,172304,2673],{"emptyLinePlaceholder":350},[57,172306,172307,172310,172312],{"class":59,"line":144},[57,172308,172309],{"class":140},"now ",[57,172311,156],{"class":136},[57,172313,172314],{"class":140}," datetime.now()\n",[57,172316,172317,172319],{"class":59,"line":150},[57,172318,165],{"class":81},[57,172320,172321],{"class":140},"(now)\n",[57,172323,172324,172326,172329,172332,172334,172337],{"class":59,"line":162},[57,172325,165],{"class":81},[57,172327,172328],{"class":140},"(now.strftime(",[57,172330,172331],{"class":74},"\"%Y-%m-",[57,172333,156888],{"class":81},[57,172335,172336],{"class":74}," %H:%M:%S\"",[57,172338,259],{"class":140},[394,172340,172342],{"id":172341},"_9124-os","9.12.4 os",[49,172344,172346],{"className":122,"code":172345,"language":124,"meta":46,"style":46},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[28,172347,172348,172354,172358,172365],{"__ignoreMap":46},[57,172349,172350,172352],{"class":59,"line":60},[57,172351,137],{"class":136},[57,172353,45502],{"class":140},[57,172355,172356],{"class":59,"line":67},[57,172357,2673],{"emptyLinePlaceholder":350},[57,172359,172360,172362],{"class":59,"line":144},[57,172361,165],{"class":81},[57,172363,172364],{"class":140},"(os.getcwd())\n",[57,172366,172367,172369,172372,172375],{"class":59,"line":150},[57,172368,165],{"class":81},[57,172370,172371],{"class":140},"(os.listdir(",[57,172373,172374],{"class":74},"\".\"",[57,172376,259],{"class":140},[394,172378,172380],{"id":172379},"_9125-sys","9.12.5 sys",[49,172382,172384],{"className":122,"code":172383,"language":124,"meta":46,"style":46},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[28,172385,172386,172393,172397,172404],{"__ignoreMap":46},[57,172387,172388,172390],{"class":59,"line":60},[57,172389,137],{"class":136},[57,172391,172392],{"class":140}," sys\n",[57,172394,172395],{"class":59,"line":67},[57,172396,2673],{"emptyLinePlaceholder":350},[57,172398,172399,172401],{"class":59,"line":144},[57,172400,165],{"class":81},[57,172402,172403],{"class":140},"(sys.version)\n",[57,172405,172406,172408],{"class":59,"line":150},[57,172407,165],{"class":81},[57,172409,172410],{"class":140},"(sys.path)\n",[365,172412,172414,172415,172417,172418,668],{"id":172413},"_913-if-name-main","9.13 if ",[33,172416,80007],{}," == \"",[33,172419,102255],{},[14,172421,172422,172423,172426],{},"模块被直接运行和被导入时，",[28,172424,172425],{},"__name__"," 的值不同。",[14,172428,172429,172430,24887],{},"创建 ",[28,172431,172432],{},"my_module.py",[49,172434,172436],{"className":122,"code":172435,"language":124,"meta":46,"style":46},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[28,172437,172438,172446,172456,172460,172464,172476],{"__ignoreMap":46},[57,172439,172440,172442,172444],{"class":59,"line":60},[57,172441,32144],{"class":136},[57,172443,5482],{"class":70},[57,172445,151290],{"class":140},[57,172447,172448,172450,172452,172454],{"class":59,"line":67},[57,172449,4363],{"class":136},[57,172451,11142],{"class":140},[57,172453,897],{"class":136},[57,172455,151301],{"class":140},[57,172457,172458],{"class":59,"line":144},[57,172459,2673],{"emptyLinePlaceholder":350},[57,172461,172462],{"class":59,"line":150},[57,172463,2673],{"emptyLinePlaceholder":350},[57,172465,172466,172468,172470,172472,172474],{"class":59,"line":162},[57,172467,1813],{"class":136},[57,172469,31417],{"class":81},[57,172471,101756],{"class":136},[57,172473,101759],{"class":74},[57,172475,4012],{"class":140},[57,172477,172478,172480,172482,172484,172486,172488],{"class":59,"line":180},[57,172479,31496],{"class":81},[57,172481,166797],{"class":140},[57,172483,635],{"class":81},[57,172485,12708],{"class":140},[57,172487,498],{"class":81},[57,172489,259],{"class":140},[14,172491,172492],{},"作用：",[377,172494,172495,172498],{},[380,172496,172497],{},"直接运行该文件时，执行测试代码。",[380,172499,172500],{},"被其他文件导入时，不执行测试代码。",[14,172502,172503],{},"这是写模块时很常用的习惯。",[365,172505,172507],{"id":172506},"_914-包","9.14 包",[14,172509,172510,172511,172514],{},"包是包含 ",[28,172512,172513],{},"__init__.py"," 的目录，用于组织多个模块。",[14,172516,172517],{},"目录结构：",[49,172519,172522],{"className":172520,"code":172521,"language":5460,"meta":46},[5458],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[28,172523,172521],{"__ignoreMap":46},[14,172525,172526],{},"导入：",[49,172528,172530],{"className":122,"code":172529,"language":124,"meta":46,"style":46},"from utils.file_utils import read_file\n",[28,172531,172532],{"__ignoreMap":46},[57,172533,172534,172536,172539,172541],{"class":59,"line":60},[57,172535,30934],{"class":136},[57,172537,172538],{"class":140}," utils.file_utils ",[57,172540,137],{"class":136},[57,172542,172543],{"class":140}," read_file\n",[14,172545,172546,172548],{},[28,172547,172513],{}," 可以为空，也可以写包初始化逻辑。",[365,172550,172552],{"id":172551},"_915-第三方包","9.15 第三方包",[14,172554,172555,172556,172558],{},"第三方包通过 ",[28,172557,24101],{}," 安装。",[49,172560,172562],{"className":51,"code":172561,"language":53,"meta":46,"style":46},"pip install requests\n",[28,172563,172564],{"__ignoreMap":46},[57,172565,172566,172568,172570],{"class":59,"line":60},[57,172567,24101],{"class":70},[57,172569,75],{"class":74},[57,172571,146295],{"class":74},[14,172573,172574],{},"使用：",[49,172576,172578],{"className":122,"code":172577,"language":124,"meta":46,"style":46},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[28,172579,172580,172586,172590,172605],{"__ignoreMap":46},[57,172581,172582,172584],{"class":59,"line":60},[57,172583,137],{"class":136},[57,172585,146295],{"class":140},[57,172587,172588],{"class":59,"line":67},[57,172589,2673],{"emptyLinePlaceholder":350},[57,172591,172592,172595,172597,172600,172603],{"class":59,"line":144},[57,172593,172594],{"class":140},"response ",[57,172596,156],{"class":136},[57,172598,172599],{"class":140}," requests.get(",[57,172601,172602],{"class":74},"\"https:\u002F\u002Fwww.example.com\"",[57,172604,238],{"class":140},[57,172606,172607,172609],{"class":59,"line":150},[57,172608,165],{"class":81},[57,172610,172611],{"class":140},"(response.status_code)\n",[14,172613,172614],{},"查看已安装包：",[49,172616,172618],{"className":51,"code":172617,"language":53,"meta":46,"style":46},"pip list\n",[28,172619,172620],{"__ignoreMap":46},[57,172621,172622,172624],{"class":59,"line":60},[57,172623,24101],{"class":70},[57,172625,119152],{"class":74},[14,172627,172628],{},"导出项目依赖：",[49,172630,172631],{"className":51,"code":146490,"language":53,"meta":46,"style":46},[28,172632,172633],{"__ignoreMap":46},[57,172634,172635,172637,172639,172641],{"class":59,"line":60},[57,172636,24101],{"class":70},[57,172638,146499],{"class":74},[57,172640,26491],{"class":136},[57,172642,146504],{"class":74},[14,172644,172645],{},"安装项目依赖：",[49,172647,172648],{"className":51,"code":146510,"language":53,"meta":46,"style":46},[28,172649,172650],{"__ignoreMap":46},[57,172651,172652,172654,172656,172658],{"class":59,"line":60},[57,172653,24101],{"class":70},[57,172655,75],{"class":74},[57,172657,119836],{"class":81},[57,172659,146504],{"class":74},[365,172661,172663],{"id":172662},"_916-模块搜索路径","9.16 模块搜索路径",[14,172665,172666,172667,172670],{},"Python 导入模块时会在 ",[28,172668,172669],{},"sys.path"," 中查找。",[49,172672,172674],{"className":122,"code":172673,"language":124,"meta":46,"style":46},"import sys\n\nfor path in sys.path:\n    print(path)\n",[28,172675,172676,172682,172686,172698],{"__ignoreMap":46},[57,172677,172678,172680],{"class":59,"line":60},[57,172679,137],{"class":136},[57,172681,172392],{"class":140},[57,172683,172684],{"class":59,"line":67},[57,172685,2673],{"emptyLinePlaceholder":350},[57,172687,172688,172690,172693,172695],{"class":59,"line":144},[57,172689,3298],{"class":136},[57,172691,172692],{"class":140}," path ",[57,172694,26312],{"class":136},[57,172696,172697],{"class":140}," sys.path:\n",[57,172699,172700,172702],{"class":59,"line":150},[57,172701,31496],{"class":81},[57,172703,169426],{"class":140},[14,172705,172706],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,172708,157820],{},[49,172710,172713],{"className":172711,"code":172712,"language":5460,"meta":46},[5458],"random.py\njson.py\ntime.py\n",[28,172714,172712],{"__ignoreMap":46},[14,172716,172717],{},"这些文件名可能导致导入异常。",[365,172719,172721],{"id":172720},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,172723,172517],{},[49,172725,172728],{"className":172726,"code":172727,"language":5460,"meta":46},[5458],"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",[28,172729,172727],{"__ignoreMap":46},[14,172731,172732,24887],{},[28,172733,172734],{},"utils\u002Ffile_utils.py",[49,172736,172738],{"className":122,"code":172737,"language":124,"meta":46,"style":46},"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",[28,172739,172740,172746,172756,172760,172764,172774,172784,172792,172798,172802,172829,172839,172843,172847,172857,172883],{"__ignoreMap":46},[57,172741,172742,172744],{"class":59,"line":60},[57,172743,137],{"class":136},[57,172745,147288],{"class":140},[57,172747,172748,172750,172752,172754],{"class":59,"line":67},[57,172749,30934],{"class":136},[57,172751,108508],{"class":140},[57,172753,137],{"class":136},[57,172755,108513],{"class":140},[57,172757,172758],{"class":59,"line":144},[57,172759,2673],{"emptyLinePlaceholder":350},[57,172761,172762],{"class":59,"line":150},[57,172763,2673],{"emptyLinePlaceholder":350},[57,172765,172766,172768,172771],{"class":59,"line":162},[57,172767,32144],{"class":136},[57,172769,172770],{"class":70}," read_json",[57,172772,172773],{"class":140},"(path):\n",[57,172775,172776,172779,172781],{"class":59,"line":180},[57,172777,172778],{"class":140},"    path ",[57,172780,156],{"class":136},[57,172782,172783],{"class":140}," Path(path)\n",[57,172785,172786,172788,172790],{"class":59,"line":186},[57,172787,3374],{"class":136},[57,172789,39127],{"class":136},[57,172791,169507],{"class":140},[57,172793,172794,172796],{"class":59,"line":197},[57,172795,15024],{"class":136},[57,172797,52035],{"class":140},[57,172799,172800],{"class":59,"line":241},[57,172801,2673],{"emptyLinePlaceholder":350},[57,172803,172804,172806,172808,172811,172813,172815,172817,172819,172821,172823,172825,172827],{"class":59,"line":249},[57,172805,34375],{"class":136},[57,172807,146988],{"class":81},[57,172809,172810],{"class":140},"(path, ",[57,172812,146998],{"class":74},[57,172814,12708],{"class":140},[57,172816,147003],{"class":5489},[57,172818,156],{"class":136},[57,172820,147008],{"class":74},[57,172822,229],{"class":140},[57,172824,31580],{"class":136},[57,172826,148350],{"class":5489},[57,172828,4012],{"class":140},[57,172830,172831,172833,172835,172837],{"class":59,"line":262},[57,172832,15024],{"class":136},[57,172834,148361],{"class":140},[57,172836,45551],{"class":5489},[57,172838,238],{"class":140},[57,172840,172841],{"class":59,"line":281},[57,172842,2673],{"emptyLinePlaceholder":350},[57,172844,172845],{"class":59,"line":287},[57,172846,2673],{"emptyLinePlaceholder":350},[57,172848,172849,172851,172854],{"class":59,"line":298},[57,172850,32144],{"class":136},[57,172852,172853],{"class":70}," write_json",[57,172855,172856],{"class":140},"(path, data):\n",[57,172858,172859,172861,172863,172865,172867,172869,172871,172873,172875,172877,172879,172881],{"class":59,"line":311},[57,172860,34375],{"class":136},[57,172862,146988],{"class":81},[57,172864,172810],{"class":140},[57,172866,152173],{"class":74},[57,172868,12708],{"class":140},[57,172870,147003],{"class":5489},[57,172872,156],{"class":136},[57,172874,147008],{"class":74},[57,172876,229],{"class":140},[57,172878,31580],{"class":136},[57,172880,148350],{"class":5489},[57,172882,4012],{"class":140},[57,172884,172885,172888,172890,172892,172894,172896,172898,172900,172902,172904,172906],{"class":59,"line":322},[57,172886,172887],{"class":140},"        json.dump(data, ",[57,172889,45551],{"class":5489},[57,172891,12708],{"class":140},[57,172893,147334],{"class":5489},[57,172895,156],{"class":136},[57,172897,34184],{"class":81},[57,172899,12708],{"class":140},[57,172901,152209],{"class":5489},[57,172903,156],{"class":136},[57,172905,498],{"class":81},[57,172907,238],{"class":140},[14,172909,172910,24887],{},[28,172911,154804],{},[49,172913,172915],{"className":122,"code":172914,"language":124,"meta":46,"style":46},"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",[28,172916,172917,172928,172932,172945,172965],{"__ignoreMap":46},[57,172918,172919,172921,172923,172925],{"class":59,"line":60},[57,172920,30934],{"class":136},[57,172922,172538],{"class":140},[57,172924,137],{"class":136},[57,172926,172927],{"class":140}," read_json, write_json\n",[57,172929,172930],{"class":59,"line":67},[57,172931,2673],{"emptyLinePlaceholder":350},[57,172933,172934,172936,172938,172941,172943],{"class":59,"line":144},[57,172935,159913],{"class":140},[57,172937,156],{"class":136},[57,172939,172940],{"class":140}," read_json(",[57,172942,152028],{"class":74},[57,172944,238],{"class":140},[57,172946,172947,172949,172951,172953,172955,172957,172959,172961,172963],{"class":59,"line":150},[57,172948,170731],{"class":140},[57,172950,62876],{"class":74},[57,172952,51634],{"class":140},[57,172954,150085],{"class":74},[57,172956,12708],{"class":140},[57,172958,151669],{"class":74},[57,172960,51634],{"class":140},[57,172962,1404],{"class":81},[57,172964,165349],{"class":140},[57,172966,172967,172970,172972],{"class":59,"line":162},[57,172968,172969],{"class":140},"write_json(",[57,172971,152028],{"class":74},[57,172973,172974],{"class":140},", students)\n",[365,172976,172978],{"id":172977},"_918-易错点","9.18 易错点",[377,172980,172981,172984,172989,172994,172997,173000],{},[380,172982,172983],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[380,172985,172986,172987,28654],{},"能指定异常类型就不要裸写 ",[28,172988,171091],{},[380,172990,172991,172993],{},[28,172992,171466],{}," 无论是否出错都会执行。",[380,172995,172996],{},"模块文件名不要和标准库重名。",[380,172998,172999],{},"导入自己写的模块时，要注意运行目录。",[380,173001,173002],{},"第三方包要安装到当前解释器或虚拟环境中。",[365,173004,173006],{"id":173005},"_919-本章练习","9.19 本章练习",[377,173008,173009,173012,173015,173021,173028],{},[380,173010,173011],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[380,173013,173014],{},"写函数读取文件，如果文件不存在则返回空字符串。",[380,173016,172429,173017,173020],{},[28,173018,173019],{},"math_utils.py","，实现加减乘除函数并导入使用。",[380,173022,173023,173024,173027],{},"创建一个 ",[28,173025,173026],{},"utils"," 包，把 JSON 读写函数放进去。",[380,173029,173030],{},"写一个程序，捕获除零异常和输入格式异常。",[342,173032,173033],{},"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":46,"searchDepth":67,"depth":67,"links":173035},[173036,173037,173038,173039,173040,173041,173042,173043,173044,173045,173046,173052,173059,173061,173062,173063,173064,173065,173066],{"id":170888,"depth":67,"text":170889},{"id":171016,"depth":67,"text":171017},{"id":171065,"depth":67,"text":171066},{"id":171214,"depth":67,"text":171215},{"id":171386,"depth":67,"text":171387},{"id":171455,"depth":67,"text":171456},{"id":171566,"depth":67,"text":171567},{"id":171692,"depth":67,"text":171693},{"id":171817,"depth":67,"text":171818},{"id":171872,"depth":67,"text":171873},{"id":171971,"depth":67,"text":171972,"children":173047},[173048,173049,173050,173051],{"id":171975,"depth":144,"text":171976},{"id":172009,"depth":144,"text":172010},{"id":172048,"depth":144,"text":172049},{"id":172127,"depth":144,"text":172128},{"id":172150,"depth":67,"text":172151,"children":173053},[173054,173055,173056,173057,173058],{"id":172154,"depth":144,"text":172155},{"id":172237,"depth":144,"text":172238},{"id":172282,"depth":144,"text":172283},{"id":172341,"depth":144,"text":172342},{"id":172379,"depth":144,"text":172380},{"id":172413,"depth":67,"text":173060},"9.13 if name == \"main\"",{"id":172506,"depth":67,"text":172507},{"id":172551,"depth":67,"text":172552},{"id":172662,"depth":67,"text":172663},{"id":172720,"depth":67,"text":172721},{"id":172977,"depth":67,"text":172978},{"id":173005,"depth":67,"text":173006},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170880,"description":347},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173073,"title":173074,"body":173075,"description":173238,"extension":348,"meta":173239,"navigation":350,"path":173240,"seo":173241,"stem":173242,"__hash__":173243},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173076,"toc":173233},[173077,173080,173083,173086,173097,173099,173173,173176,173179,173182,173185,173188,173191,173194,173197,173200,173203],[10,173078,173074],{"id":173079},"python教程",[14,173081,173082],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,173084,173085],{},"建议学习环境：",[377,173087,173088,173091,173094],{},[380,173089,173090],{},"Python 版本：Python 3.10 及以上。",[380,173092,173093],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[380,173095,173096],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[365,173098,117275],{"id":117275},[377,173100,173101,173107,173113,173119,173125,173131,173137,173143,173149,173155,173161,173167],{},[380,173102,173103],{},[18,173104,173106],{"href":173105},".\u002Fch1-Python","Python环境与第一个程序",[380,173108,173109],{},[18,173110,173112],{"href":173111},".\u002Fch2","基础语法、变量与字符串",[380,173114,173115],{},[18,173116,173118],{"href":173117},".\u002Fch3","判断语句",[380,173120,173121],{},[18,173122,173124],{"href":173123},".\u002Fch4","循环语句",[380,173126,173127],{},[18,173128,173130],{"href":173129},".\u002Fch5","函数基础",[380,173132,173133],{},[18,173134,173136],{"href":173135},".\u002Fch6","数据容器",[380,173138,173139],{},[18,173140,173142],{"href":173141},".\u002Fch7","函数进阶",[380,173144,173145],{},[18,173146,173148],{"href":173147},".\u002Fch8","文件操作",[380,173150,173151],{},[18,173152,173154],{"href":173153},".\u002Fch9","异常、模块与包",[380,173156,173157],{},[18,173158,173160],{"href":173159},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[380,173162,173163],{},[18,173164,173166],{"href":173165},".\u002Fch11","面向对象基础",[380,173168,173169],{},[18,173170,173172],{"href":173171},".\u002Fch12","综合案例与复习路线",[365,173174,173175],{"id":173175},"学习路线",[14,173177,173178],{},"第一阶段：能运行程序。",[14,173180,173181],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,173183,173184],{},"第二阶段：能组织数据。",[14,173186,173187],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,173189,173190],{},"第三阶段：能封装逻辑。",[14,173192,173193],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,173195,173196],{},"第四阶段：能做小项目。",[14,173198,173199],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[365,173201,173202],{"id":173202},"参考资料",[377,173204,173205,173212,173219,173226],{},[380,173206,173207,173208],{},"黑马程序员 Python 入门教程推荐：",[18,173209,173210],{"href":173210,"rel":173211},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[22],[380,173213,173214,173215],{},"Python 官方中文教程：",[18,173216,173217],{"href":173217,"rel":173218},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[22],[380,173220,173221,173222],{},"Python 标准库文档：",[18,173223,173224],{"href":173224,"rel":173225},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[22],[380,173227,173228,173229],{},"pyecharts 文档：",[18,173230,173231],{"href":173231,"rel":173232},"https:\u002F\u002Fpyecharts.org\u002F",[22],{"title":46,"searchDepth":67,"depth":67,"links":173234},[173235,173236,173237],{"id":117275,"depth":67,"text":117275},{"id":173175,"depth":67,"text":173175},{"id":173202,"depth":67,"text":173202},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23650},"\u002Fwiki\u002F2024-10-10-python",{"title":173074,"description":173238},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331379206]